lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range.js in gollum-2.4.4 vs lib/gollum/frontend/public/gollum/livepreview/js/ace/lib/ace/range.js in gollum-2.4.5

- old
+ new

@@ -1,61 +1,54 @@ /* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * Distributed under the BSD license: * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Ajax.org Code Editor (ACE). - * - * The Initial Developer of the Original Code is - * Ajax.org B.V. - * Portions created by the Initial Developer are Copyright (C) 2010 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Fabian Jakobs <fabian AT ajax DOT org> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * * ***** END LICENSE BLOCK ***** */ define(function(require, exports, module) { "use strict"; /** - * class Range + * * * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogus to a range, as ranges contain a starting row and starting column, and an ending row, and ending column. - * + * @class Range **/ /** - * new Range(startRow, startColumn, endRow, endColumn) - * - startRow (Number): The starting row - * - startColumn (Number): The starting column - * - endRow (Number): The ending row - * - endColumn (Number): The ending column - * * Creates a new `Range` object with the given starting and ending row and column points. + * @param {Number} startRow The starting row + * @param {Number} startColumn The starting column + * @param {Number} endRow The ending row + * @param {Number} endColumn The ending column * + * + * @constructor **/ var Range = function(startRow, startColumn, endRow, endColumn) { this.start = { row: startRow, column: startColumn @@ -67,66 +60,67 @@ }; }; (function() { /** - * Range.isEqual(range) -> Boolean - * - range (Range): A range to check against - * * Returns `true` if and only if the starting row and column, and ending tow and column, are equivalent to those given by `range`. + * @param {Range} range A range to check against * + * + * @return Boolean **/ this.isEqual = function(range) { return this.start.row == range.start.row && this.end.row == range.end.row && this.start.column == range.start.column && this.end.column == range.end.column }; /** - * Range.toString() -> String - * + * * Returns a string containing the range's row and column information, given like this: - * + * ``` * [start.row/start.column] -> [end.row/end.column] - * + * ``` + * @return String **/ this.toString = function() { return ("Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]"); }; - /** related to: Range.compare - * Range.contains(row, column) -> Boolean - * - row (Number): A row to check for - * - column (Number): A column to check for + /** * * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if: - * + * ```javascript * this.start.row <= row <= this.end.row && * this.start.column <= column <= this.end.column - * + * ``` + * @param {Number} row A row to check for + * @param {Number} column A column to check for + * @returns {Boolean} + * @related Range.compare **/ this.contains = function(row, column) { return this.compare(row, column) == 0; }; - /** related to: Range.compare - * Range.compareRange(range) -> Number - * - range (Range): A range to compare with - * + (Number): This method returns one of the following numbers:<br/> + /** + * Compares `this` range (A) with another range (B). + * @param {Range} range A range to compare with + * + * + * @related Range.compare + * @returns {Number} This method returns one of the following numbers:<br/> * <br/> * * `-2`: (B) is in front of (A), and doesn't intersect with (A)<br/> * * `-1`: (B) begins before (A) but ends inside of (A)<br/> * * `0`: (B) is completely inside of (A) OR (A) is completely inside of (B)<br/> * * `+1`: (B) begins inside of (A) but ends outside of (A)<br/> * * `+2`: (B) is after (A) and doesn't intersect with (A)<br/> * * `42`: FTW state: (B) ends in (A) but starts outside of (A) - * - * Compares `this` range (A) with another range (B). - * **/ this.compareRange = function(range) { var cmp, end = range.end, start = range.start; @@ -151,16 +145,20 @@ return 42; } else { return 0; } } - } + }; - /** related to: Range.compare - * Range.comparePoint(p) -> Number - * - p (Range): A point to compare with - * + (Number): This method returns one of the following numbers:<br/> + /** + * + * Checks the row and column points of `p` with the row and column points of the calling range. + * + * @param {Range} p A point to compare with + * + * @related Range.compare + * @returns {Number} This method returns one of the following numbers:<br/> * * `0` if the two points are exactly equal<br/> * * `-1` if `p.row` is less then the calling range<br/> * * `1` if `p.row` is greater than the calling range<br/> * <br/> * If the starting row of the calling range is equal to `p.row`, and:<br/> @@ -168,180 +166,178 @@ * * Otherwise, it returns -1<br/> *<br/> * If the ending row of the calling range is equal to `p.row`, and:<br/> * * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/> * * Otherwise, it returns 1<br/> - * - * Checks the row and column points of `p` with the row and column points of the calling range. - * - * - * **/ this.comparePoint = function(p) { return this.compare(p.row, p.column); - } + }; - /** related to: Range.comparePoint - * Range.containsRange(range) -> Boolean - * - range (Range): A range to compare with - * + /** * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range. + * @param {Range} range A range to compare with * + * @returns {Boolean} + * @related Range.comparePoint + * **/ this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; - } + }; /** - * Range.intersects(range) -> Boolean - * - range (Range): A range to compare with - * * Returns `true` if passed in `range` intersects with the one calling this method. + * @param {Range} range A range to compare with * + * + * @returns {Boolean} **/ this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); - } + }; /** - * Range.isEnd(row, column) -> Boolean - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with * + * + * @returns {Boolean} **/ this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; - } + }; /** - * Range.isStart(row, column) -> Boolean - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with * + * + * @returns {Boolean} **/ this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; - } + }; /** - * Range.setStart(row, column) - * - row (Number): A row point to set - * - column (Number): A column point to set - * * Sets the starting row and column for the range. + * @param {Number} row A row point to set + * @param {Number} column A column point to set * + * + * **/ this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } - } + }; /** - * Range.setEnd(row, column) - * - row (Number): A row point to set - * - column (Number): A column point to set - * * Sets the starting row and column for the range. + * @param {Number} row A row point to set + * @param {Number} column A column point to set * + * + * **/ this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } - } + }; - /** related to: Range.compare - * Range.inside(row, column) -> Boolean - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + /** * Returns `true` if the `row` and `column` are within the given range. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with * + * + * @returns {Boolean} + * @related Range.compare **/ this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; - } + }; - /** related to: Range.compare - * Range.insideStart(row, column) -> Boolean - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + /** * Returns `true` if the `row` and `column` are within the given range's starting points. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with * + * + * @returns {Boolean} + * @related Range.compare **/ this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; - } + }; - /** related to: Range.compare - * Range.insideEnd(row, column) -> Boolean - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + /** * Returns `true` if the `row` and `column` are within the given range's ending points. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with * + * + * @returns {Boolean} + * @related Range.compare + * **/ this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; - } + }; /** - * Range.compare(row, column) -> Number - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + (Number): This method returns one of the following numbers:<br/> - * * `0` if the two points are exactly equal <br/> - * * `-1` if `p.row` is less then the calling range <br/> - * * `1` if `p.row` is greater than the calling range <br/> + * Checks the row and column points with the row and column points of the calling range. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with + * + * + * @returns {Number} This method returns one of the following numbers:<br/> + * `0` if the two points are exactly equal <br/> + * `-1` if `p.row` is less then the calling range <br/> + * `1` if `p.row` is greater than the calling range <br/> * <br/> * If the starting row of the calling range is equal to `p.row`, and: <br/> - * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> - * * Otherwise, it returns -1<br/> + * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> + * Otherwise, it returns -1<br/> * <br/> * If the ending row of the calling range is equal to `p.row`, and: <br/> - * * `p.column` is less than or equal to the calling range's ending column, this returns `0` <br/> - * * Otherwise, it returns 1 - * - * Checks the row and column points with the row and column points of the calling range. - * - * + * `p.column` is less than or equal to the calling range's ending column, this returns `0` <br/> + * Otherwise, it returns 1 **/ this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); @@ -362,101 +358,96 @@ return 0; }; /** - * Range.compareStart(row, column) -> Number - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + (Number): This method returns one of the following numbers:<br/> + * Checks the row and column points with the row and column points of the calling range. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with + * + * + * + * @returns {Number} This method returns one of the following numbers:<br/> * <br/> - * * `0` if the two points are exactly equal<br/> - * * `-1` if `p.row` is less then the calling range<br/> - * * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.<br/> + * `0` if the two points are exactly equal<br/> + * `-1` if `p.row` is less then the calling range<br/> + * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.<br/> * <br/> * If the starting row of the calling range is equal to `p.row`, and:<br/> - * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> - * * Otherwise, it returns -1<br/> + * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> + * Otherwise, it returns -1<br/> * <br/> * If the ending row of the calling range is equal to `p.row`, and:<br/> - * * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/> - * * Otherwise, it returns 1 + * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/> + * Otherwise, it returns 1 * - * Checks the row and column points with the row and column points of the calling range. - * - * - * **/ this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } - } + }; /** - * Range.compareEnd(row, column) -> Number - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + (Number): This method returns one of the following numbers:<br/> - * * `0` if the two points are exactly equal<br/> - * * `-1` if `p.row` is less then the calling range<br/> - * * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.<br/> + * Checks the row and column points with the row and column points of the calling range. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with + * + * + * @returns {Number} This method returns one of the following numbers:<br/> + * `0` if the two points are exactly equal<br/> + * `-1` if `p.row` is less then the calling range<br/> + * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.<br/> * <br/> * If the starting row of the calling range is equal to `p.row`, and:<br/> - * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> - * * Otherwise, it returns -1<br/> + * `p.column` is greater than or equal to the calling range's starting column, this returns `0`<br/> + * Otherwise, it returns -1<br/> *<br/> * If the ending row of the calling range is equal to `p.row`, and:<br/> - * * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/> - * * Otherwise, it returns 1 - * - * Checks the row and column points with the row and column points of the calling range. - * - * - **/ + * `p.column` is less than or equal to the calling range's ending column, this returns `0`<br/> + * Otherwise, it returns 1 + */ this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } - } + }; /** - * Range.compareInside(row, column) -> Number - * - row (Number): A row point to compare with - * - column (Number): A column point to compare with - * + (Number): This method returns one of the following numbers:<br/> + * Checks the row and column points with the row and column points of the calling range. + * @param {Number} row A row point to compare with + * @param {Number} column A column point to compare with + * + * + * @returns {Number} This method returns one of the following numbers:<br/> * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`<br/> * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`<br/> * <br/> * Otherwise, it returns the value after calling [[Range.compare `compare()`]]. * - * Checks the row and column points with the row and column points of the calling range. - * - * - * **/ this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } - } + }; /** - * Range.clipRows(firstRow, lastRow) -> Range - * - firstRow (Number): The starting row - * - lastRow (Number): The ending row - * * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object. + * @param {Number} firstRow The starting row + * @param {Number} lastRow The ending row * + * + * @returns {Range} **/ this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) { var end = { row: lastRow+1, @@ -486,16 +477,16 @@ } return Range.fromPoints(start || this.start, end || this.end); }; /** - * Range.extend(row, column) -> Range - * - row (Number): A new row to extend to - * - column (Number): A new column to extend to + * Changes the row and column points for the calling range for both the starting and ending points. + * @param {Number} row A new row to extend to + * @param {Number} column A new column to extend to * - * Changes the row and column points for the calling range for both the starting and ending points. This method returns that range with a new row. - * + * + * @returns {Range} The original range with the new row **/ this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) @@ -511,47 +502,45 @@ this.isEmpty = function() { return (this.start.row == this.end.row && this.start.column == this.end.column); }; /** - * Range.isMultiLine() -> Boolean - * - * Returns true if the range spans across multiple lines. - * + * + * Returns `true` if the range spans across multiple lines. + * @returns {Boolean} **/ this.isMultiLine = function() { return (this.start.row !== this.end.row); }; /** - * Range.clone() -> Range - * + * * Returns a duplicate of the calling range. - * + * @returns {Range} **/ this.clone = function() { return Range.fromPoints(this.start, this.end); }; /** - * Range.collapseRows() -> Range * * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`. - * + * @returns {Range} **/ this.collapseRows = function() { if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) else return new Range(this.start.row, 0, this.end.row, 0) }; /** - * Range.toScreenRange(session) -> Range - * - session (EditSession): The `EditSession` to retrieve coordinates from - * * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object. + * @param {EditSession} session The `EditSession` to retrieve coordinates from + * + * + * @returns {Range} **/ this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = @@ -564,15 +553,15 @@ }; }).call(Range.prototype); /** - * Range.fromPoints(start, end) -> Range - * - start (Range): A starting point to use - * - end (Range): An ending point to use - * * Creates and returns a new `Range` based on the row and column of the given parameters. - * + * @param {Range} start A starting point to use + * @param {Range} end An ending point to use + * + * + * @returns {Range} **/ Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); };