/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/range.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/range.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 887 by jonathan, Fri May 9 16:38:59 2003 UTC revision 993 by tkoester, Thu May 22 16:54:04 2003 UTC
# Line 16  __version__ = "$Revision$" Line 16  __version__ = "$Revision$"
16  # $Id$  # $Id$
17    
18  import re  import re
19    import types
20    
21  _inf = float('1e1000')   # FIXME: hack for infinity  _inf = float('1e1000')   # FIXME: hack for infinite
22    
23  class Range:  class Range:
24    
25      number_re = '(?P<%s>-?(\d+\.?\d*([eE][\-+]?\d+)?|oo))'      number_re = '(?P<%s>-?(\d*\.?\d*([eE][\-+]?\d+)?|oo))'
26      brace_re = '(?P<%s>[][])'      brace_re = '(?P<%s>[][])'
27      range_re = '^' + brace_re % 'left' + number_re % 'begin' + \      range_re = '^' + brace_re % 'left' + number_re % 'begin' + \
28                 ';' + number_re % 'end' + brace_re % 'right' + '$'                 ';' + number_re % 'end' + brace_re % 'right' + '$'
29      parse_range = re.compile(range_re)      parse_range = re.compile(range_re)
30    
31      def __init__(self, range=None):      def __init__(self, range=None):
32          self.SetRange(range)          self._SetRange(range)
33    
34      def SetRange(self, range):      def _SetRange(self, range):
35          if isinstance(range, Range):          if isinstance(range, Range):
36              self.SetRange(str(range))              self._SetRange(range.GetRange())
37          elif range in [None, '']:          elif range in [None, '']:
38              self.SetRange(']-oo;oo[')              self._SetRange(']-oo;oo[')
39            elif type(range) == types.TupleType:
40                if (len(range) == 4 and range[0] in ['[', ']']
41                    and range[3] in ['[', ']']):
42                    self._left = range[0]
43                    self._begin = self.float(range[1])
44                    self._end = self.float(range[2])
45                    self._right = range[3]
46                    if (self._begin > self._end or
47                        (self._begin == self._end and
48                         (self._left != '[' or self._right != ']'))):
49                        raise ValueError("illegal range: %s" % (range,))
50                else:
51                    raise ValueError("can't parse range: %r" % (range,))
52          else:          else:
53              self._range = range              self._range = range
54              match = self.parse_range.match(self._range)              match = self.parse_range.match(self._range)
55              if match:              if match:
56                  self._left = match.group('left')                  self._SetRange((match.group('left'),
57                  self._begin = self.float(match.group('begin'))                                match.group('begin'),
58                  self._end = self.float(match.group('end'))                                match.group('end'),
59                  self._right = match.group('right')                                match.group('right')))
60              else:              else:
61                  raise ValueError("can't parse range: %s" % range)                  raise ValueError("can't parse range: %s" % (range,))
             if (self._begin > self._end or  
                 (self._begin == self._end and  
                  (self._left != '[' or self._right != ']'))):  
                 raise ValueError("illegal range: %s" % range)  
62    
63      def GetRange(self):      def GetRange(self):
64          """return internal representation of range          """return internal representation of range
# Line 58  class Range: Line 68  class Range:
68          """          """
69          return (self._left, self._begin, self._end, self._right)          return (self._left, self._begin, self._end, self._right)
70    
71      def float(self, string):      def float(self, value):
72          if string == 'oo':          """convert string or number to float"""
73            if value == 'oo':
74              return _inf              return _inf
75          elif string == '-oo':          elif value == '-oo':
76              return -_inf              return -_inf
77          else:          else:
78              return float(string)              return float(value)
79    
80      def _float2string(self, value):      def _float2string(self, value):
81          """convert float value to string          """convert float value to string
# Line 78  class Range: Line 89  class Range:
89          elif value == -_inf:          elif value == -_inf:
90              return '-oo'              return '-oo'
91          else:          else:
92              return "%g" % value              return "%g" % (value,)
93    
94      def string(self, range):      def string(self, range):
95          """convert internal representation to string"""          """convert internal representation to string"""

Legend:
Removed from v.887  
changed lines
  Added in v.993

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26