Files
atom/src/app/point.coffee
Nathan Sobo 54396a7646 Fix bug where you can't move rightward over fold placeholders
Fold placeholders needed to be real token objects so their screen / buffer deltas would be defined in ScreenLineFragment.proto.translateColumn
2012-04-06 15:37:27 -06:00

79 lines
1.4 KiB
CoffeeScript

module.exports =
class Point
@fromObject: (object) ->
if object instanceof Point
object
else
if object instanceof Array
[row, column] = object
else
{ row, column } = object
new Point(row, column)
constructor: (@row=0, @column=0) ->
copy: ->
new Point(@row, @column)
add: (other) ->
row = @row + other.row
if other.row == 0
column = @column + other.column
else
column = other.column
new Point(row, column)
subtract: (other) ->
row = @row - other.row
if @row == other.row
column = @column - other.column
else
column = @column
new Point(row, column)
splitAt: (column) ->
if @row == 0
rightColumn = @column - column
else
rightColumn = @column
[new Point(0, column), new Point(@row, rightColumn)]
compare: (other) ->
if @row > other.row
1
else if @row < other.row
-1
else
if @column > other.column
1
else if @column < other.column
-1
else
0
isEqual: (other) ->
other = Point.fromObject(other)
@row == other.row and @column == other.column
isLessThan: (other) ->
@compare(other) < 0
isLessThanOrEqual: (other) ->
@compare(other) <= 0
isGreaterThan: (other) ->
@compare(other) > 0
isGreaterThanOrEqual: (other) ->
@compare(other) >= 0
inspect: ->
"(#{@row}, #{@column})"
toString: ->
"#{@row},#{@column}"