[kde-doc-english] [kate] /: Cursor, Range: extend js prototype
Dominik Haumann
dhaumann at kde.org
Thu Feb 28 20:25:08 UTC 2013
Git commit eb455e085f8199b97d81841006f43c4fcf21f290 by Dominik Haumann.
Committed on 28/02/2013 at 21:24.
Pushed by dhaumann into branch 'master'.
Cursor, Range: extend js prototype
- use prototype inheritance, should be faster
- add bool Range.isEmpty()
@Kile devs: maybe you want to adapt your cursor-range.js file.
CCMAIL: holger.danielsson at versanet.de
CCMAIL: michel.ludwig at kdemail.net
CCMAIL: kwrite-devel at kde.org
M +15 -0 doc/kate/advanced.docbook
M +1 -1 part/script/data/indentation/cppstyle.js
M +3 -3 part/script/data/indentation/cstyle.js
M +42 -34 part/script/data/libraries/cursor.js
M +74 -65 part/script/data/libraries/range.js
http://commits.kde.org/kate/eb455e085f8199b97d81841006f43c4fcf21f290
diff --git a/doc/kate/advanced.docbook b/doc/kate/advanced.docbook
index 03e53a1..9e8484a 100644
--- a/doc/kate/advanced.docbook
+++ b/doc/kate/advanced.docbook
@@ -1447,6 +1447,21 @@ Returns a clone of the range.
<varlistentry>
<term><synopsis>
+bool Range.isEmpty();
+</synopsis></term>
+<listitem><para>
+Returns <literal>true</literal>, if the start and end cursors are equal.
+</para>
+<para>Example: <function>var empty = range.isEmpty();</function>
+</para>
+<para>
+Since: KDE 4.11
+</para></listitem>
+</varlistentry>
+
+
+<varlistentry>
+<term><synopsis>
bool Range.isValid();
</synopsis></term>
<listitem><para>
diff --git a/part/script/data/indentation/cppstyle.js b/part/script/data/indentation/cppstyle.js
index 17fadc6..4941c5b 100644
--- a/part/script/data/indentation/cppstyle.js
+++ b/part/script/data/indentation/cppstyle.js
@@ -824,7 +824,7 @@ function tryCloseBracket(cursor, ch)
// (i.e. it is 'dangling' brace)...
if (document.firstChar(line) == ch && document.firstColumn(line) == (column - 1))
{
- var braceCursor = new Cursor().invalid();
+ var braceCursor = Cursor.invalid();
if (ch != '>')
braceCursor = document.anchor(line, column - 1, gBraceMap[ch]);
// TODO Otherwise, it seems we have a template parameters list...
diff --git a/part/script/data/indentation/cstyle.js b/part/script/data/indentation/cstyle.js
index 2f3c0cd..be22333 100644
--- a/part/script/data/indentation/cstyle.js
+++ b/part/script/data/indentation/cstyle.js
@@ -116,7 +116,7 @@ function tryParenthesisBeforeBrace(line, column)
while (column > firstColumn && document.isSpace(line, --column));
if (document.charAt(line, column) == ')')
return document.anchor(line, column, '(');
- return new Cursor().invalid();
+ return Cursor.invalid();
}
/**
@@ -415,7 +415,7 @@ function tryCKeywords(line, isBrace)
// if line ends with ')', find the '(' and check this line then.
var lastPos = document.lastColumn(currentLine);
- var cursor = new Cursor().invalid();
+ var cursor = Cursor.invalid();
if (document.charAt(currentLine, lastPos) == ')')
cursor = document.anchor(currentLine, lastPos, '(');
if (cursor.isValid())
@@ -533,7 +533,7 @@ function tryStatement(line)
if (result != null && result.index == 0) {
var alignOnAnchor = result[3].length == 0 && result[2] != ')';
// search for opening ", ' or (
- var cursor = new Cursor().invalid();
+ var cursor = Cursor.invalid();
if (result[2] == '"' || (alignOnSingleQuote && result[2] == "'")) {
while(true) {
diff --git a/part/script/data/libraries/cursor.js b/part/script/data/libraries/cursor.js
index c3fe081..d533df2 100644
--- a/part/script/data/libraries/cursor.js
+++ b/part/script/data/libraries/cursor.js
@@ -18,7 +18,7 @@
* var cursor1 = new Cursor(); // constructs a (valid) cursor at position (0, 0)
* var cursor2 = new Cursor(2, 4); // constructs a cursor at position (2, 4)
* var cursor3 = new Cursor(cursor2); // copies the cursor2
- * var cursor4 = new Cursor().invalid(); // constructs invalid cursor at (-1, -1)
+ * var cursor4 = Cursor.invalid(); // constructs invalid cursor at (-1, -1)
* \endcode
*
* There are several convenience member functions that easy working with
@@ -27,51 +27,59 @@
*
* \see Range
*/
-function Cursor()
-{
- if (arguments.length == 0) {
+function Cursor() {
+
+ if (arguments.length === 0) {
return new Cursor(0, 0);
- } else if (arguments.length == 1 && typeof arguments[0] == "object") {
+ }
+
+ if (arguments.length === 1 && typeof arguments[0] == "object") {
// assume: cursor = new Cursor(otherCursor);
return arguments[0].clone();
- } else if (arguments.length == 2 && typeof arguments[0] == "number"
- && typeof arguments[1] == "number") {
+ }
+
+ if (arguments.length === 2 && typeof arguments[0] == "number"
+ && typeof arguments[1] == "number") {
// assume: cursor = new Cursor(line, column);
- this.line = parseInt(arguments[0]);
- this.column = parseInt(arguments[1]);
+ this.line = parseInt(arguments[0], 10);
+ this.column = parseInt(arguments[1], 10);
} else {
throw "Wrong usage of Cursor constructor";
}
+}
- this.clone = function() {
- return new Cursor(this.line, this.column);
- };
-
- this.isValid = function() {
- return (this.line >= 0) && (this.column >= 0);
- };
+Cursor.prototype.clone = function() {
+ return new Cursor(this.line, this.column);
+}
- this.invalid = function() {
- return new Cursor(-1, -1);
- };
+Cursor.prototype.isValid = function() {
+ return (this.line >= 0) && (this.column >= 0);
+}
- this.compareTo = function(other) {
- if (this.line > other.line || (this.line == other.line && this.column > other.column)) {
- return 1;
- } else if (this.line < other.line || (this.line == other.line && this.column < other.column)) {
- return -1;
- } else {
- return 0;
- }
- };
+Cursor.prototype.compareTo = function(other) {
+ if (this.line > other.line || (this.line === other.line && this.column > other.column)) {
+ return 1;
+ }
+ if (this.line < other.line || (this.line === other.line && this.column < other.column)) {
+ return -1;
+ }
+ return 0;
+}
- this.equals = function(other) {
- return (this.line == other.line && this.column == other.column);
- };
+Cursor.prototype.equals = function(other) {
+ return (this.line === other.line && this.column === other.column);
+}
- this.toString = function() {
- return "Cursor(" + this.line+ ", " + this.column+ ")";
- };
+Cursor.prototype.toString = function() {
+ if (this.isValid()) {
+ return "Cursor(" + this.line+ "," + this.column+ ")";
+ } else {
+ return "Cursor()";
+ }
}
+Cursor.invalid = function() {
+ return new Cursor(-1, -1);
+}
+// kate: indent-width 2; replace-tabs on;
diff --git a/part/script/data/libraries/range.js b/part/script/data/libraries/range.js
index af6056b..2555fab 100644
--- a/part/script/data/libraries/range.js
+++ b/part/script/data/libraries/range.js
@@ -8,88 +8,97 @@ require ("cursor.js");
/**
* Prototype Range.
*/
-function Range()
-{
- if (arguments.length == 0) {
+function Range() {
+
+ if (arguments.length === 0) {
return new Range(0, 0, 0, 0);
- } else if (arguments.length == 1 && typeof arguments[0] == "object") {
+ }
+
+ if (arguments.length === 1 && typeof arguments[0] == "object") {
// assume: range = new Range(otherRange);
return arguments[0].clone();
- } else if (arguments.length == 2 && typeof arguments[0] == "object"
- && typeof arguments[1] == "object") {
+ }
+
+ if (arguments.length === 2 && typeof arguments[0] == "object"
+ && typeof arguments[1] == "object") {
// assume: range = new Range(startCursor, endCursor);
this.start = arguments[0].clone();
this.end = arguments[1].clone();
- } else if (arguments.length == 4 && typeof arguments[0] == "number"
- && typeof arguments[1] == "number"
- && typeof arguments[2] == "number"
- && typeof arguments[3] == "number") {
+ } else if (arguments.length === 4 && typeof arguments[0] == "number"
+ && typeof arguments[1] == "number"
+ && typeof arguments[2] == "number"
+ && typeof arguments[3] == "number") {
this.start = new Cursor(arguments[0], arguments[1]);
this.end = new Cursor(arguments[2], arguments[3]);
} else {
throw "Wrong usage of Range constructor";
}
+}
- this.clone = function() {
- return new Range(this.start, this.end);
- };
-
- this.isValid = function() {
- return this.start.isValid() && this.end.isValid();
- };
-
- this.invalid = function() {
- return new Range(-1, -1, -1, -1);
- };
-
- this.contains = function(cursorOrRange) {
- if (cursorOrRange.start && cursorOrRange.end) {
- // assume a range
- return (cursorOrRange.start.compareTo(this.start) >= 0 &&
- cursorOrRange.end.compareTo(this.end) <= 0);
- } else {
- // assume a cursor
- return (cursorOrRange.compareTo(this.start) >= 0 &&
- cursorOrRange.compareTo(this.end) < 0);
- }
- };
-
- this.containsColumn = function(column) {
- return (column >= this.start.column) && (column < this.end.column);
- };
-
- this.containsLine = function(line) {
- return (line > this.start.line || (line == this.start.line && this.start.column == 0)) && line < this.end.line;
- };
-
- this.overlaps = function(range) {
- if (range.start.compareTo(this.start) <= 0) {
- return range.end.compareTo(this.start) > 0;
- } else if (range.end.compareTo(this.end) >= 0) {
- return range.start.compareTo(this.end) < 0;
- } else {
- return this.contains(range);
- }
- };
-
- this.overlapsLine = function(line) {
- return (line >= this.start.line && line <= this.end.line);
- }
+Range.prototype.clone = function() {
+ return new Range(this.start, this.end);
+}
- this.overlapsColumn = function(column) {
- return column >= this.start.column && column <= this.end.column;
+Range.prototype.isValid = function() {
+ return this.start.isValid() && this.end.isValid();
+}
+
+Range.prototype.isEmpty = function() {
+ return this.start.equals(this.end);
+}
+
+Range.prototype.contains = function(cursorOrRange) {
+ if (cursorOrRange.start && cursorOrRange.end) {
+ // assume a range
+ return (cursorOrRange.start.compareTo(this.start) >= 0 &&
+ cursorOrRange.end.compareTo(this.end) <= 0);
}
- this.onSingleLine = function() {
- return (this.start.line == this.end.line);
+ // else: assume a cursor
+ return (cursorOrRange.compareTo(this.start) >= 0 &&
+ cursorOrRange.compareTo(this.end) < 0);
+}
+
+Range.prototype.containsColumn = function(column) {
+ return (column >= this.start.column) && (column < this.end.column);
+}
+
+Range.prototype.containsLine = function(line) {
+ return ((line > this.start.line) || ((line === this.start.line) && (this.start.column === 0))) && line < this.end.line;
+}
+
+Range.prototype.overlaps = function(range) {
+ if (range.start.compareTo(this.start) <= 0) {
+ return range.end.compareTo(this.start) > 0;
+ }
+ if (range.end.compareTo(this.end) >= 0) {
+ return range.start.compareTo(this.end) < 0;
}
+ return this.contains(range);
+}
+
+Range.prototype.overlapsLine = function(line) {
+ return (line >= this.start.line && line <= this.end.line);
+}
- this.equals = function(other) {
- return (this.start.equals(other.start) && this.end.equals(other.end));
- };
+Range.prototype.overlapsColumn = function(column) {
+ return column >= this.start.column && column <= this.end.column;
+}
+
+Range.prototype.onSingleLine = function() {
+ return (this.start.line == this.end.line);
+}
+
+Range.prototype.equals = function(other) {
+ return (this.start.equals(other.start) && this.end.equals(other.end));
+}
+
+Range.prototype.toString = function() {
+ return "Range(" + this.start + ", " + this.end + ")";
+}
- this.toString = function() {
- return "Range(" + this.start + ", " + this.end + ")";
- };
+Range.invalid = function() {
+ return new Range(-1, -1, -1, -1);
}
+// kate: indent-width 2; replace-tabs on;
\ No newline at end of file
More information about the kde-doc-english
mailing list