diff options
| author | nyamatongwe <unknown> | 2013-01-19 11:10:41 +1100 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2013-01-19 11:10:41 +1100 | 
| commit | 7d3a087d2e149d95e1e267fd6191dd0312fe3c0a (patch) | |
| tree | 43ca4e0efe203238a7f1eec810789d91a7fdf6f7 /src/ScintillaBase.cxx | |
| parent | 0bb8702e061f17864f74785e330a40b6feef85ba (diff) | |
| download | scintilla-mirror-7d3a087d2e149d95e1e267fd6191dd0312fe3c0a.tar.gz | |
Implement APIs for Unicode line ends and substyles and expose to
message interface.
Expose IDocumentWithLineEnd interface on Document.
Diffstat (limited to 'src/ScintillaBase.cxx')
| -rw-r--r-- | src/ScintillaBase.cxx | 95 | 
1 files changed, 94 insertions, 1 deletions
| diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 5fc908e91..4a0146f7b 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -473,6 +473,7 @@ class LexState : public LexInterface {  	const LexerModule *lexCurrent;  	void SetLexerModule(const LexerModule *lex);  	PropSetSimple props; +	int interfaceVersion;  public:  	int lexLanguage; @@ -492,6 +493,15 @@ public:  	const char *PropGet(const char *key) const;  	int PropGetInt(const char *key, int defaultValue=0) const;  	int PropGetExpanded(const char *key, char *result) const; + +	int LineEndTypesSupported(); +	int AllocateSubStyles(int styleBase, int numberStyles); +	int SubStylesStart(int styleBase); +	int SubStylesLength(int styleBase); +	void FreeSubStyles(); +	void SetIdentifiers(int style, const char *identifiers); +	int DistanceToSecondaryStyles(); +	const char *GetSubStyleBases();  };  #ifdef SCI_NAMESPACE @@ -501,6 +511,7 @@ public:  LexState::LexState(Document *pdoc_) : LexInterface(pdoc_) {  	lexCurrent = 0;  	performingStyle = false; +	interfaceVersion = lvOriginal;  	lexLanguage = SCLEX_CONTAINER;  } @@ -524,9 +535,12 @@ void LexState::SetLexerModule(const LexerModule *lex) {  			instance->Release();  			instance = 0;  		} +		interfaceVersion = lvOriginal;  		lexCurrent = lex; -		if (lexCurrent) +		if (lexCurrent) {  			instance = lexCurrent->Create(); +			interfaceVersion = instance->Version(); +		}  		pdoc->LexerChanged();  	}  } @@ -631,6 +645,60 @@ int LexState::PropGetExpanded(const char *key, char *result) const {  	return props.GetExpanded(key, result);  } +int LexState::LineEndTypesSupported() { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->LineEndTypesSupported(); +	} +	return 0; +} + +int LexState::AllocateSubStyles(int styleBase, int numberStyles) { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->AllocateSubStyles(styleBase, numberStyles); +	} +	return -1; +} + +int LexState::SubStylesStart(int styleBase) { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->SubStylesStart(styleBase); +	} +	return -1; +} + +int LexState::SubStylesLength(int styleBase) { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->SubStylesLength(styleBase); +	} +	return 0; +} + +void LexState::FreeSubStyles() { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		static_cast<ILexerWithSubStyles *>(instance)->FreeSubStyles(); +	} +} + +void LexState::SetIdentifiers(int style, const char *identifiers) { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		static_cast<ILexerWithSubStyles *>(instance)->SetIdentifiers(style, identifiers); +	} +} + +int LexState::DistanceToSecondaryStyles() { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->DistanceToSecondaryStyles(); +	} +	return 0; +} + +const char *LexState::GetSubStyleBases() { +	if (instance && (interfaceVersion >= lvSubStyles)) { +		return static_cast<ILexerWithSubStyles *>(instance)->GetSubStyleBases(); +	} +	return ""; +} +  #endif  void ScintillaBase::NotifyStyleToNeeded(int endStyleNeeded) { @@ -891,6 +959,31 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  	case SCI_DESCRIBEKEYWORDSETS:  		return StringResult(lParam, DocumentLexState()->DescribeWordListSets()); +	case SCI_GETLINEENDTYPESSUPPORTED: +		return DocumentLexState()->LineEndTypesSupported(); + +	case SCI_ALLOCATESUBSTYLES: +		return DocumentLexState()->AllocateSubStyles(wParam, lParam); + +	case SCI_GETSUBSTYLESSTART: +		return DocumentLexState()->SubStylesStart(wParam); + +	case SCI_GETSUBSTYLESLENGTH: +		return DocumentLexState()->SubStylesLength(wParam); + +	case SCI_FREESUBSTYLES: +		DocumentLexState()->FreeSubStyles(); +		break; + +	case SCI_SETIDENTIFIERS: +		DocumentLexState()->SetIdentifiers(wParam, reinterpret_cast<const char *>(lParam)); +		break; + +	case SCI_DISTANCETOSECONDARYSTYLES: +		return DocumentLexState()->DistanceToSecondaryStyles(); + +	case SCI_GETSUBSTYLEBASES: +		return StringResult(lParam, DocumentLexState()->GetSubStyleBases());  #endif  	default: | 
