aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Document.cxx')
-rw-r--r--src/Document.cxx42
1 files changed, 27 insertions, 15 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 6659f4f0c..16b434083 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -722,7 +722,7 @@ void Document::ConvertLineEnds(int eolModeSet) {
for (int pos = 0; pos < Length(); pos++) {
if (cb.CharAt(pos) == '\r') {
- if (cb.CharAt(pos + 1) == '\n') {
+ if (cb.CharAt(pos + 1) == '\n') {
// CRLF
if (eolModeSet == SC_EOL_CR) {
DeleteChars(pos + 1, 1); // Delete the LF
@@ -731,7 +731,7 @@ void Document::ConvertLineEnds(int eolModeSet) {
} else {
pos++;
}
- } else {
+ } else {
// CR
if (eolModeSet == SC_EOL_CRLF) {
InsertString(pos + 1, "\n", 1); // Insert LF
@@ -756,33 +756,45 @@ void Document::ConvertLineEnds(int eolModeSet) {
EndUndoAction();
}
-int Document::ParaDown(int pos) {
- int line = LineFromPosition(pos);
- while (line < LinesTotal() && LineStart(line) != LineEnd(line)) { // skip non-empty lines
- line++;
- }
- while (line < LinesTotal() && LineStart(line) == LineEnd(line)) { // skip empty lines
- line++;
+bool Document::IsWhiteLine(int line) {
+ int currentChar = LineStart(line);
+ int endLine = LineEnd(line);
+ while (currentChar < endLine) {
+ if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') {
+ return false;
+ }
+ ++currentChar;
}
- if (line < LinesTotal())
- return LineStart(line);
- else // end of a document
- return LineEnd(line-1);
+ return true;
}
int Document::ParaUp(int pos) {
int line = LineFromPosition(pos);
line--;
- while (line >= 0 && LineStart(line) == LineEnd(line)) { // skip empty lines
+ while (line >= 0 && IsWhiteLine(line)) { // skip empty lines
line--;
}
- while (line >= 0 && LineStart(line) != LineEnd(line)) { // skip non-empty lines
+ while (line >= 0 && !IsWhiteLine(line)) { // skip non-empty lines
line--;
}
line++;
return LineStart(line);
}
+int Document::ParaDown(int pos) {
+ int line = LineFromPosition(pos);
+ while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines
+ line++;
+ }
+ while (line < LinesTotal() && IsWhiteLine(line)) { // skip empty lines
+ line++;
+ }
+ if (line < LinesTotal())
+ return LineStart(line);
+ else // end of a document
+ return LineEnd(line-1);
+}
+
Document::charClassification Document::WordCharClass(unsigned char ch) {
if ((SC_CP_UTF8 == dbcsCodePage) && (ch >= 0x80))
return ccWord;