/*
* Range.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.source.editors.text.ace;
import com.google.gwt.core.client.JavaScriptObject;
public class Range extends JavaScriptObject
{
protected Range() {}
public static final native Range create(int startRow,
int startColumn,
int endRow,
int endColumn)
/*-{
var Range = $wnd.require('ace/range').Range;
return new Range(startRow, startColumn, endRow, endColumn);
}-*/;
public static native Range fromPoints(Position start, Position end) /*-{
var Range = $wnd.require('ace/range').Range;
return Range.fromPoints(start, end);
}-*/;
public static native Range toOrientedRange(Range range) /*-{
var Range = $wnd.require('ace/range').Range;
// swap begin, end if Range is not 'forward'
if (range.start.row > range.end.row || (
range.start.row == range.end.row &&
range.start.column > range.end.column))
{
return Range.fromPoints(range.end, range.start);
}
// return new range if already forward range
return Range.fromPoints(range.start, range.end);
}-*/;
public final native Position getStart() /*-{
return this.start;
}-*/;
public final native Position getEnd() /*-{
return this.end;
}-*/;
public final native Position setStart(Position start) /*-{
this.start = start;
}-*/;
public final native Position setEnd(Position end) /*-{
this.end = end;
}-*/;
public final native boolean isEmpty() /*-{
return this.isEmpty();
}-*/;
public final boolean isEqualTo(Range range)
{
return
getStart().isEqualTo(range.getStart()) &&
getEnd().isEqualTo(range.getEnd());
}
public final native Range extend(int row, int column) /*-{
return this.extend(row, column);
}-*/;
public final native Range toScreenRange(EditSession session) /*-{
return this.toScreenRange(session);
}-*/;
public final native boolean contains(int row, int column) /*-{
return this.contains(row, column);
}-*/;
public final native boolean contains(Position position) /*-{
return this.contains(position.row, position.column);
}-*/;
public final native boolean contains(Range range) /*-{
return this.containsRange(range);
}-*/;
public final native boolean intersects(Range range) /*-{
return this.intersects(range);
}-*/;
public final native boolean isMultiLine() /*-{
return this.isMultiLine();
}-*/;
public final native boolean containsRightExclusive(Position position)
/*-{
var row = position.row;
var column = position.column;
var startRow = this.start.row;
var endRow = this.end.row;
var startColumn = this.start.column;
var endColumn = this.end.column;
if (endRow < row) return false;
if (startRow > row) return false;
if (startRow === row && endRow === row)
{
return column >= startColumn &&
column < endColumn;
}
if (startRow === row) return column >= startColumn;
if (endRow === row) return column < endColumn;
// shouldn't get here
return false;
}-*/;
}