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: |