diff options
Diffstat (limited to 'scintilla/lexlib/SubStyles.h')
-rw-r--r-- | scintilla/lexlib/SubStyles.h | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/scintilla/lexlib/SubStyles.h b/scintilla/lexlib/SubStyles.h index e6c34e0..961715c 100644 --- a/scintilla/lexlib/SubStyles.h +++ b/scintilla/lexlib/SubStyles.h @@ -13,13 +13,14 @@ namespace Scintilla { #endif class WordClassifier { + int baseStyle; int firstStyle; int lenStyles; std::map<std::string, int> wordToStyle; public: - WordClassifier() : firstStyle(0), lenStyles(0) { + WordClassifier(int baseStyle_) : baseStyle(baseStyle_), firstStyle(0), lenStyles(0) { } void Allocate(int firstStyle_, int lenStyles_) { @@ -28,6 +29,10 @@ public: wordToStyle.clear(); } + int Base() const { + return baseStyle; + } + int Start() const { return firstStyle; } @@ -57,10 +62,12 @@ public: void SetIdentifiers(int style, const char *identifiers) { while (*identifiers) { const char *cpSpace = identifiers; - while (*cpSpace && *cpSpace != ' ') + while (*cpSpace && !(*cpSpace == ' ' || *cpSpace == '\t' || *cpSpace == '\r' || *cpSpace == '\n')) cpSpace++; - std::string word(identifiers, cpSpace - identifiers); - wordToStyle[word] = style; + if (cpSpace > identifiers) { + std::string word(identifiers, cpSpace - identifiers); + wordToStyle[word] = style; + } identifiers = cpSpace; if (*identifiers) identifiers++; @@ -105,8 +112,8 @@ public: secondaryDistance(secondaryDistance_), allocated(0) { while (baseStyles[classifications]) { + classifiers.push_back(WordClassifier(baseStyles[classifications])); classifications++; - classifiers.push_back(WordClassifier()); } } @@ -134,6 +141,14 @@ public: return (block >= 0) ? classifiers[block].Length() : 0; } + int BaseStyle(int subStyle) const { + int block = BlockFromStyle(subStyle); + if (block >= 0) + return classifiers[block].Base(); + else + return subStyle; + } + int DistanceToSecondaryStyles() const { return secondaryDistance; } |