aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/EditView.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2016-10-06 15:16:50 +1100
committerNeil <nyamatongwe@gmail.com>2016-10-06 15:16:50 +1100
commit9c0c31495c68c2757bbf95aa3f114d865dff88b8 (patch)
tree285098b5edde401cb67d2dea8dad90da2c8e013d /src/EditView.cxx
parent1967c348184a35007b7fce5da81d7874a51edc3e (diff)
downloadscintilla-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.cxx25
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));
}
}
}