diff options
author | Neil <nyamatongwe@gmail.com> | 2016-10-06 15:16:50 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2016-10-06 15:16:50 +1100 |
commit | 9c0c31495c68c2757bbf95aa3f114d865dff88b8 (patch) | |
tree | 285098b5edde401cb67d2dea8dad90da2c8e013d /src/EditView.cxx | |
parent | 1967c348184a35007b7fce5da81d7874a51edc3e (diff) | |
download | scintilla-mirror-9c0c31495c68c2757bbf95aa3f114d865dff88b8.tar.gz |
Word selection, navigation, and manipulation is now performed on characters
instead of bytes leading to more natural behaviour for multi-byte encodings like
UTF-8.
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r-- | src/EditView.cxx | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx index 92c341d8f..e6cd8fcfe 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -25,6 +25,7 @@ #include "Scintilla.h" #include "StringCopy.h" +#include "CharacterSet.h" #include "Position.h" #include "SplitVector.h" #include "Partitioning.h" @@ -389,16 +390,16 @@ void EditView::LayoutLine(const EditModel &model, int line, Surface *surface, co (ll->chars[numCharsInLine] == chDoc); else if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseLower) allSame = allSame && - (ll->chars[numCharsInLine] == static_cast<char>(tolower(chDoc))); + (ll->chars[numCharsInLine] == MakeLowerCase(chDoc)); else if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseUpper) allSame = allSame && - (ll->chars[numCharsInLine] == static_cast<char>(toupper(chDoc))); + (ll->chars[numCharsInLine] == MakeUpperCase(chDoc)); else { // Style::caseCamel - if ((model.pdoc->WordCharClass(ll->chars[numCharsInLine]) == CharClassify::ccWord) && - ((numCharsInLine == 0) || (model.pdoc->WordCharClass(ll->chars[numCharsInLine - 1]) != CharClassify::ccWord))) { - allSame = allSame && (ll->chars[numCharsInLine] == static_cast<char>(toupper(chDoc))); + if ((model.pdoc->IsASCIIWordByte(ll->chars[numCharsInLine])) && + ((numCharsInLine == 0) || (!model.pdoc->IsASCIIWordByte(ll->chars[numCharsInLine - 1])))) { + allSame = allSame && (ll->chars[numCharsInLine] == MakeUpperCase(chDoc)); } else { - allSame = allSame && (ll->chars[numCharsInLine] == static_cast<char>(tolower(chDoc))); + allSame = allSame && (ll->chars[numCharsInLine] == MakeLowerCase(chDoc)); } } numCharsInLine++; @@ -440,15 +441,15 @@ void EditView::LayoutLine(const EditModel &model, int line, Surface *surface, co for (int charInLine = 0; charInLine<lineLength; charInLine++) { char chDoc = ll->chars[charInLine]; if (vstyle.styles[ll->styles[charInLine]].caseForce == Style::caseUpper) - ll->chars[charInLine] = static_cast<char>(toupper(chDoc)); + ll->chars[charInLine] = static_cast<char>(MakeUpperCase(chDoc)); else if (vstyle.styles[ll->styles[charInLine]].caseForce == Style::caseLower) - ll->chars[charInLine] = static_cast<char>(tolower(chDoc)); + ll->chars[charInLine] = static_cast<char>(MakeLowerCase(chDoc)); else if (vstyle.styles[ll->styles[charInLine]].caseForce == Style::caseCamel) { - if ((model.pdoc->WordCharClass(ll->chars[charInLine]) == CharClassify::ccWord) && - ((charInLine == 0) || (model.pdoc->WordCharClass(ll->chars[charInLine - 1]) != CharClassify::ccWord))) { - ll->chars[charInLine] = static_cast<char>(toupper(chDoc)); + if ((model.pdoc->IsASCIIWordByte(ll->chars[charInLine])) && + ((charInLine == 0) || (!model.pdoc->IsASCIIWordByte(ll->chars[charInLine - 1])))) { + ll->chars[charInLine] = static_cast<char>(MakeUpperCase(chDoc)); } else { - ll->chars[charInLine] = static_cast<char>(tolower(chDoc)); + ll->chars[charInLine] = static_cast<char>(MakeLowerCase(chDoc)); } } } |