Changeset 181
- Timestamp:
- 09/17/10 14:09:46 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/AdvancedParser.py
r142 r181 13 13 import re 14 14 import types 15 16 __author__ = "Dennis Stam" 17 __version__ = ( 1, 1, 0 ) 15 18 16 19 class AdvancedParser(OptionParser): … … 36 39 """ 37 40 41 def parse_letters( self, chars ): 42 43 if type( chars ) is not types.ListType and len( chars ) != 2: 44 self.error( 'Could not parse range' ) 45 46 start = ord( chars[ 0 ] ) 47 end = ord( chars[ 1 ] ) 48 out = list() 49 50 if start > 96 and start < 122 and end > 97 and end < 123: 51 lrange = range( start, end + 1 ) 52 53 for ichar in lrange: 54 out.append( chr( ichar ) ) 55 56 return out 57 else: 58 self.error( 'AdvanedParser module only handles letters from a to z ( lower cased )' ) 59 38 60 def return_range(self, string): 39 61 """ … … 45 67 The ranges will be return as lists 46 68 """ 47 parts = string.split( ',' )48 69 numbers_chars = list() 49 70 equal_width_length = 0 50 71 51 for part in parts: 52 part_range = part.split( '-' ) 53 if len( part_range ) == 2: 54 try: 55 if part_range[0][0] == '0' or part_range[1][0] == '0': 56 if len( part_range[0] ) > len( part_range[1] ): 57 equal_width_length = len( part_range[0] ) 58 else: 59 equal_width_length = len( part_range[1] ) 72 if string.find( ',' ) >= 0 and string.find( ',' ) < 1: 73 self.error( 'You cannot start a range with \',\'. Given range: %s' % string ) 60 74 61 numbers_chars += range( int( part_range[0] ), int( part_range[1] ) + 1 ) 62 except ValueError: 63 begin = ord( part_range[0] ) 64 end = ord( part_range[1] ) 65 tmplist = list() 75 if string.find( '-' ) >= 0 and string.find( '-' ) < 1: 76 self.error( 'You cannot start a range with \'-\'. Given range: %s' % string ) 66 77 67 if begin > 96 and end < 123: 68 tmplist = range( begin, end + 1) 78 for section in string.split( ',' ): 79 if section.find( '-' ) > 0: 80 if len( section.split( '-' ) ) != 2: 81 self.error( 'A range must be consisted of two values' ) 82 83 chars = section.split( '-' ) 69 84 70 for letter in tmplist: 71 numbers_chars.append( chr( letter ) ) 72 else: 73 if equal_width_length != 0 and len( part ) > equal_width_length: 74 equal_width_length = len( part ) 85 try: 86 if chars[ 0 ][ 0 ] == '0' or chars[ 1 ][ 0 ]: 87 if len( chars[ 0 ] ) > len( chars[ 1 ] ): 88 equal_width_length = len( chars[ 0 ] ) 89 else: 90 equal_width_lenght = len( chars[ 1 ] ) 75 91 76 numbers_chars.append( part ) 92 numbers_chars += range( int( chars[ 0 ] ), int( chars[ 1 ] ) + 1 ) 93 except ValueError: 94 numbers_chars += self.parse_letters( chars ) 77 95 78 if equal_width_length > 0: 79 tmplist = list() 80 81 for number_char in numbers_chars: 82 try: 83 nnum = int( number_char ) 84 tmplist.append( '%0*d' % (equal_width_length, nnum) ) 85 except ValueError: 86 tmplist.append( number_char ) 87 88 numbers_chars = tmplist 96 else: 97 if equal_width_length != 0 and len( section ) > equal_width_lenght: 98 equal_width_lenght = len( section ) 99 numbers_chars.append( section ) 89 100 90 101 return numbers_chars … … 152 163 if __name__ == "__main__": 153 164 import doctest 154 print 'Starting doctest'155 165 doctest.testmod()
Note: See TracChangeset
for help on using the changeset viewer.