UltiSnips/plugin/PySnipEmu/Geometry.py
2009-07-09 14:24:43 +02:00

78 lines
1.9 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
__all__ = [ "Position", "Span" ]
class Position(object):
def __init__(self, line, col):
self.line = line
self.col = col
def col():
def fget(self):
return self._col
def fset(self, value):
self._col = value
return locals()
col = property(**col())
def line():
doc = "Zero base line numbers"
def fget(self):
return self._line
def fset(self, value):
self._line = value
return locals()
line = property(**line())
def __add__(self,pos):
if not isinstance(pos,Position):
raise TypeError("unsupported operand type(s) for +: " \
"'Position' and %s" % type(pos))
return Position(self.line + pos.line, self.col + pos.col)
def __sub__(self,pos):
if not isinstance(pos,Position):
raise TypeError("unsupported operand type(s) for +: " \
"'Position' and %s" % type(pos))
return Position(self.line - pos.line, self.col - pos.col)
def __cmp__(self, other):
s = self._line, self._col
o = other._line, other._col
return cmp(s,o)
def __repr__(self):
return "(%i,%i)" % (self._line, self._col)
class Span(object):
def __init__(self, start, end):
self._s = start
self._e = end
def __contains__(self, pos):
return self._s <= pos < self._e
def start():
def fget(self):
return self._s
def fset(self, value):
self._s = value
return locals()
start = property(**start())
def end():
def fget(self):
return self._e
def fset(self, value):
self._e = value
return locals()
end = property(**end())
def __repr__(self):
return "(%s -> %s)" % (self._s, self._e)