aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx62
1 files changed, 23 insertions, 39 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index a88468cb1..92be92691 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -15,6 +15,7 @@
#include "Scintilla.h"
#include "SVector.h"
#include "CellBuffer.h"
+#include "CharClassify.h"
#include "Document.h"
#include "RESearch.h"
@@ -50,7 +51,6 @@ Document::Document() {
stylingBits = 5;
stylingBitsMask = 0x1F;
stylingMask = 0;
- SetDefaultCharClasses(true);
endStyled = 0;
styleClock = 0;
enteredCount = 0;
@@ -836,10 +836,10 @@ int Document::ParaDown(int pos) {
return LineEnd(line-1);
}
-Document::charClassification Document::WordCharClass(unsigned char ch) {
+CharClassify::cc Document::WordCharClass(unsigned char ch) {
if ((SC_CP_UTF8 == dbcsCodePage) && (ch >= 0x80))
- return ccWord;
- return charClass[ch];
+ return CharClassify::ccWord;
+ return charClass.GetClass(ch);
}
/**
@@ -847,7 +847,7 @@ Document::charClassification Document::WordCharClass(unsigned char ch) {
* Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0.
*/
int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) {
- charClassification ccStart = ccWord;
+ CharClassify::cc ccStart = CharClassify::ccWord;
if (delta < 0) {
if (!onlyWordCharacters)
ccStart = WordCharClass(cb.CharAt(pos-1));
@@ -871,19 +871,19 @@ int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) {
*/
int Document::NextWordStart(int pos, int delta) {
if (delta < 0) {
- while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccSpace))
+ while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace))
pos--;
if (pos > 0) {
- charClassification ccStart = WordCharClass(cb.CharAt(pos-1));
+ CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1));
while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) {
pos--;
}
}
} else {
- charClassification ccStart = WordCharClass(cb.CharAt(pos));
+ CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));
while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart))
pos++;
- while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccSpace))
+ while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace))
pos++;
}
return pos;
@@ -899,22 +899,22 @@ int Document::NextWordStart(int pos, int delta) {
int Document::NextWordEnd(int pos, int delta) {
if (delta < 0) {
if (pos > 0) {
- charClassification ccStart = WordCharClass(cb.CharAt(pos-1));
- if (ccStart != ccSpace) {
+ CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1));
+ if (ccStart != CharClassify::ccSpace) {
while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccStart) {
pos--;
}
}
- while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccSpace) {
+ while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace) {
pos--;
}
}
} else {
- while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccSpace) {
+ while (pos < Length() && WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace) {
pos++;
}
if (pos < Length()) {
- charClassification ccStart = WordCharClass(cb.CharAt(pos));
+ CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos));
while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccStart) {
pos++;
}
@@ -929,8 +929,8 @@ int Document::NextWordEnd(int pos, int delta) {
*/
bool Document::IsWordStartAt(int pos) {
if (pos > 0) {
- charClassification ccPos = WordCharClass(CharAt(pos));
- return (ccPos == ccWord || ccPos == ccPunctuation) &&
+ CharClassify::cc ccPos = WordCharClass(CharAt(pos));
+ return (ccPos == CharClassify::ccWord || ccPos == CharClassify::ccPunctuation) &&
(ccPos != WordCharClass(CharAt(pos - 1)));
}
return true;
@@ -942,8 +942,8 @@ bool Document::IsWordStartAt(int pos) {
*/
bool Document::IsWordEndAt(int pos) {
if (pos < Length()) {
- charClassification ccPrev = WordCharClass(CharAt(pos-1));
- return (ccPrev == ccWord || ccPrev == ccPunctuation) &&
+ CharClassify::cc ccPrev = WordCharClass(CharAt(pos-1));
+ return (ccPrev == CharClassify::ccWord || ccPrev == CharClassify::ccPunctuation) &&
(ccPrev != WordCharClass(CharAt(pos)));
}
return true;
@@ -1004,7 +1004,7 @@ long Document::FindText(int minPos, int maxPos, const char *s,
int *length) {
if (regExp) {
if (!pre)
- pre = new RESearch();
+ pre = new RESearch(&charClass);
if (!pre)
return -1;
@@ -1266,27 +1266,11 @@ void Document::ChangeCase(Range r, bool makeUpperCase) {
}
void Document::SetDefaultCharClasses(bool includeWordClass) {
- // Initialize all char classes to default values
- for (int ch = 0; ch < 256; ch++) {
- if (ch == '\r' || ch == '\n')
- charClass[ch] = ccNewLine;
- else if (ch < 0x20 || ch == ' ')
- charClass[ch] = ccSpace;
- else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_'))
- charClass[ch] = ccWord;
- else
- charClass[ch] = ccPunctuation;
- }
+ charClass.SetDefaultCharClasses(includeWordClass);
}
-void Document::SetCharClasses(const unsigned char *chars, charClassification newCharClass) {
- // Apply the newCharClass to the specifed chars
- if (chars) {
- while (*chars) {
- charClass[*chars] = newCharClass;
- chars++;
- }
- }
+void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass) {
+ charClass.SetCharClasses(chars, newCharClass);
}
void Document::SetStylingBits(int bits) {
@@ -1430,7 +1414,7 @@ void Document::NotifyModified(DocModification mh) {
}
bool Document::IsWordPartSeparator(char ch) {
- return (WordCharClass(ch) == ccWord) && IsPunctuation(ch);
+ return (WordCharClass(ch) == CharClassify::ccWord) && IsPunctuation(ch);
}
int Document::WordPartLeft(int pos) {