diff options
-rw-r--r-- | doc/ScintillaHistory.html | 6 | ||||
-rw-r--r-- | lexlib/CharacterSet.h | 4 | ||||
-rw-r--r-- | src/Document.cxx | 8 | ||||
-rw-r--r-- | src/Document.h | 1 | ||||
-rw-r--r-- | src/EditView.cxx | 8 |
5 files changed, 14 insertions, 13 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 07f4b01be..c99caa2e4 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -552,6 +552,12 @@ <li> Fix bug where changing identifier sets in lexers preserved previous identifiers. </li> + <li> + Changed behaviour of SCI_STYLESETCASE(*,SC_CASE_CAMEL) so that it only treats 'a-zA-Z' + as word characters because this covers the feature's intended use (viewing case-insensitive ASCII-only + keywords in a specified casing style) and simplifies the behaviour and code. + <a href="https://sourceforge.net/p/scintilla/feature-requests/1238/">Feature #1238</a>. + </li> </ul> <h3> <a href="https://sourceforge.net/projects/scintilla/files/scintilla/3.10.5/scintilla3105.zip/download">Release 3.10.5</a> diff --git a/lexlib/CharacterSet.h b/lexlib/CharacterSet.h index 358f6bed3..0470e446c 100644 --- a/lexlib/CharacterSet.h +++ b/lexlib/CharacterSet.h @@ -135,6 +135,10 @@ inline bool IsUpperCase(int ch) { return (ch >= 'A') && (ch <= 'Z'); } +inline bool IsUpperOrLowerCase(int ch) { + return IsUpperCase(ch) || IsLowerCase(ch); +} + inline bool IsAlphaNumeric(int ch) { return ((ch >= '0') && (ch <= '9')) || diff --git a/src/Document.cxx b/src/Document.cxx index dd11ae42d..9b30b44aa 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1698,14 +1698,6 @@ Sci::Position Document::ParaDown(Sci::Position pos) const { return LineEnd(line-1); } -bool Document::IsASCIIWordByte(unsigned char ch) const { - if (IsASCII(ch)) { - return charClass.GetClass(ch) == CharClassify::ccWord; - } else { - return false; - } -} - CharClassify::cc Document::WordCharacterClass(unsigned int ch) const { if (dbcsCodePage && (!UTF8IsAscii(ch))) { if (SC_CP_UTF8 == dbcsCodePage) { diff --git a/src/Document.h b/src/Document.h index adbdc3413..f662dc993 100644 --- a/src/Document.h +++ b/src/Document.h @@ -482,7 +482,6 @@ public: bool AddWatcher(DocWatcher *watcher, void *userData); bool RemoveWatcher(DocWatcher *watcher, void *userData); - bool IsASCIIWordByte(unsigned char ch) const; CharClassify::cc WordCharacterClass(unsigned int ch) const; bool IsWordPartSeparator(unsigned int ch) const; Sci::Position WordPartLeft(Sci::Position pos) const; diff --git a/src/EditView.cxx b/src/EditView.cxx index 7b585c553..727efbcdd 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -388,8 +388,8 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa allSame = allSame && (ll->chars[numCharsInLine] == MakeUpperCase(chDoc)); else { // Style::caseCamel - if ((model.pdoc->IsASCIIWordByte(ll->chars[numCharsInLine])) && - ((numCharsInLine == 0) || (!model.pdoc->IsASCIIWordByte(ll->chars[numCharsInLine - 1])))) { + if ((IsUpperOrLowerCase(ll->chars[numCharsInLine])) && + ((numCharsInLine == 0) || (!IsUpperOrLowerCase(ll->chars[numCharsInLine - 1])))) { allSame = allSame && (ll->chars[numCharsInLine] == MakeUpperCase(chDoc)); } else { allSame = allSame && (ll->chars[numCharsInLine] == MakeLowerCase(chDoc)); @@ -435,8 +435,8 @@ void EditView::LayoutLine(const EditModel &model, Sci::Line line, Surface *surfa else if (vstyle.styles[ll->styles[charInLine]].caseForce == Style::caseLower) ll->chars[charInLine] = MakeLowerCase(chDoc); else if (vstyle.styles[ll->styles[charInLine]].caseForce == Style::caseCamel) { - if ((model.pdoc->IsASCIIWordByte(ll->chars[charInLine])) && - ((charInLine == 0) || (!model.pdoc->IsASCIIWordByte(ll->chars[charInLine - 1])))) { + if ((IsUpperOrLowerCase(ll->chars[charInLine])) && + ((charInLine == 0) || (!IsUpperOrLowerCase(ll->chars[charInLine - 1])))) { ll->chars[charInLine] = MakeUpperCase(chDoc); } else { ll->chars[charInLine] = MakeLowerCase(chDoc); |