# HG changeset patch
# User Vicente
# Date 1491085058 -36000
# Node ID a1a9cde519976fa12e46224d6cd57483bc4633ae
# Parent 67865d8e5a374e2cf9468e9b2638901342b1dca0
Added "Reverse Selected Lines" as SCI_LINEREVERSE.
diff -r 67865d8e5a37 -r a1a9cde51997 doc/ScintillaDoc.html
--- a/doc/ScintillaDoc.html Sat Apr 01 13:30:58 2017 +1100
+++ b/doc/ScintillaDoc.html Sun Apr 02 08:17:38 2017 +1000
@@ -5199,15 +5199,18 @@
SCI_DELLINERIGHT |
SCI_LINEDELETE |
-
-
-
+
SCI_LINECUT |
+
+
+
SCI_LINECOPY |
SCI_LINETRANSPOSE |
+ SCI_LINEREVERSE |
+
SCI_LINEDUPLICATE |
diff -r 67865d8e5a37 -r a1a9cde51997 doc/ScintillaHistory.html
--- a/doc/ScintillaHistory.html Sat Apr 01 13:30:58 2017 +1100
+++ b/doc/ScintillaHistory.html Sun Apr 02 08:17:38 2017 +1000
@@ -527,6 +527,9 @@
Released 21 March 2017.
+ Added "Reverse Selected Lines" feature.
+
+
Updated case conversion and character categories to Unicode 9.
diff -r 67865d8e5a37 -r a1a9cde51997 include/Scintilla.h
--- a/include/Scintilla.h Sat Apr 01 13:30:58 2017 +1100
+++ b/include/Scintilla.h Sun Apr 02 08:17:38 2017 +1000
@@ -638,6 +638,7 @@
#define SCI_LINECUT 2337
#define SCI_LINEDELETE 2338
#define SCI_LINETRANSPOSE 2339
+#define SCI_LINEREVERSE 2354
#define SCI_LINEDUPLICATE 2404
#define SCI_LOWERCASE 2340
#define SCI_UPPERCASE 2341
diff -r 67865d8e5a37 -r a1a9cde51997 include/Scintilla.iface
--- a/include/Scintilla.iface Sat Apr 01 13:30:58 2017 +1100
+++ b/include/Scintilla.iface Sun Apr 02 08:17:38 2017 +1000
@@ -1614,6 +1614,9 @@
# Switch the current line with the previous.
fun void LineTranspose=2339(,)
+# Reverse order of selected lines.
+fun void LineReverse=2354(,)
+
# Duplicate the current line.
fun void LineDuplicate=2404(,)
diff -r 67865d8e5a37 -r a1a9cde51997 src/Editor.cxx
--- a/src/Editor.cxx Sat Apr 01 13:30:58 2017 +1100
+++ b/src/Editor.cxx Sun Apr 02 08:17:38 2017 +1000
@@ -2800,6 +2800,7 @@
case SCI_LINECUT:
case SCI_LINEDELETE:
case SCI_LINETRANSPOSE:
+ case SCI_LINEREVERSE:
case SCI_LINEDUPLICATE:
case SCI_LOWERCASE:
case SCI_UPPERCASE:
@@ -2967,6 +2968,32 @@
}
}
+void Editor::LineReverse() {
+ const Sci::Line lineStart = pdoc->LineFromPosition(sel.RangeMain().Start().Position());
+ const Sci::Line lineEnd = pdoc->LineFromPosition(sel.RangeMain().End().Position()-1);
+ const Sci::Line lineDiff = lineEnd - lineStart;
+ if (lineDiff <= 0)
+ return;
+ UndoGroup ug(pdoc);
+ for (Sci::Line i=(lineDiff+1)/2-1; i>=0; --i) {
+ const Sci::Line lineNum2 = lineEnd - i;
+ const Sci::Line lineNum1 = lineStart + i;
+ Sci::Position lineStart2 = pdoc->LineStart(lineNum2);
+ const Sci::Position lineStart1 = pdoc->LineStart(lineNum1);
+ const std::string line2 = RangeText(lineStart2, pdoc->LineEnd(lineNum2));
+ const std::string line1 = RangeText(lineStart1, pdoc->LineEnd(lineNum1));
+ const Sci::Position lineLen2 = static_cast(line2.length());
+ const Sci::Position lineLen1 = static_cast(line1.length());
+ pdoc->DeleteChars(lineStart2, lineLen2);
+ pdoc->DeleteChars(lineStart1, lineLen1);
+ lineStart2 -= lineLen1;
+ pdoc->InsertString(lineStart2, line1.c_str(), lineLen1);
+ pdoc->InsertString(lineStart1, line2.c_str(), lineLen2);
+ }
+ // Wholly select all affected lines
+ sel.RangeMain() = SelectionRange(pdoc->LineStart(lineStart), pdoc->LineStart(lineEnd+1));
+}
+
void Editor::Duplicate(bool forLine) {
if (sel.Empty()) {
forLine = true;
@@ -3809,6 +3836,9 @@
case SCI_LINETRANSPOSE:
LineTranspose();
break;
+ case SCI_LINEREVERSE:
+ LineReverse();
+ break;
case SCI_LINEDUPLICATE:
Duplicate(true);
break;
@@ -7453,6 +7483,7 @@
case SCI_LINECUT:
case SCI_LINEDELETE:
case SCI_LINETRANSPOSE:
+ case SCI_LINEREVERSE:
case SCI_LINEDUPLICATE:
case SCI_LOWERCASE:
case SCI_UPPERCASE:
diff -r 67865d8e5a37 -r a1a9cde51997 src/Editor.h
--- a/src/Editor.h Sat Apr 01 13:30:58 2017 +1100
+++ b/src/Editor.h Sun Apr 02 08:17:38 2017 +1000
@@ -460,6 +460,7 @@
virtual std::string CaseMapString(const std::string &s, int caseMapping);
void ChangeCaseOfSelection(int caseMapping);
void LineTranspose();
+ void LineReverse();
void Duplicate(bool forLine);
virtual void CancelModes();
void NewLine();