Changeset 179
- Timestamp:
- 04/11/08 23:21:22 (9 months ago)
- Files:
-
- packages/feaTools/trunk/Lib/feaTools/parser.py (modified) (3 diffs)
- packages/feaTools/trunk/Lib/feaTools/test.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
packages/feaTools/trunk/Lib/feaTools/parser.py
r178 r179 68 68 ] 69 69 70 # used for finding all table names. 71 table_findAll_RE = re.compile( 72 "([\s;\{\}]|^)" # whitepace, ; {, } or start of line 73 "table\s+" # table 74 "([\w\d]{4})" # name 75 "\s*{" # { 76 ) 77 78 # used for finding the content of tables. 79 # this regular expression will be compiled 80 # for each table name found. 81 tableContentRE = [ 82 "([\s;\{\}]|^)", # whitepace, ; {, } or start of line 83 "table\s+", # feature 84 # table name # name 85 "\s*\{", # { 86 "([\S\s]*)", # content 87 "}\s*", # } 88 # table name # name 89 "\s*;" # ; 90 ] 91 70 92 # used for finding all class definitions. 71 93 classDefinitionRE = re.compile( … … 220 242 def _parseUnknown(writer, text): 221 243 text = text.strip() 244 ## extract all table names 245 tableNames = table_findAll_RE.findall(text) 246 for precedingMark, tableName in tableNames: 247 # a regular expression specific to this lookup must 248 # be created so that nested lookups are safely handled 249 thisTableContentRE = list(tableContentRE) 250 thisTableContentRE.insert(2, tableName) 251 thisTableContentRE.insert(6, tableName) 252 thisTableContentRE = re.compile("".join(thisTableContentRE)) 253 found = thisTableContentRE.search(text) 254 tableText = found.group(2) 255 start, end = found.span() 256 precedingText = text[:start] 257 if precedingMark: 258 precedingText += precedingMark 259 _parseUnknown(writer, precedingText) 260 _parseTable(writer, tableName, tableText) 261 text = text[end:] 222 262 ## extract all feature names 223 263 featureNames = feature_findAll_RE.findall(text) … … 352 392 parsed = _parseUnknown(lookupWriter, lookup) 353 393 394 def _parseTable(writer, name, table): 395 # this could parse table secific data. 396 # for now, simply ignore the text. 397 pass 398 354 399 def _parseClass(writer, name, content): 355 400 content = classContentRE.findall(content) packages/feaTools/trunk/Lib/feaTools/test.py
r178 r179 188 188 ("lookup", ("TEST", [])) 189 189 ]))] 190 self.assertEqual(result, expected) 191 192 def testTableBlocks(self): 193 test = """ 194 table test { 195 } test; 196 """ 197 writer = TestFeatureWriter() 198 parseFeatures(writer, test) 199 result = writer.getData() 200 expected = [] 201 self.assertEqual(result, expected) 202 # 203 test = """ 204 table test{}test; 205 """ 206 writer = TestFeatureWriter() 207 parseFeatures(writer, test) 208 result = writer.getData() 209 expected = [] 210 self.assertEqual(result, expected) 211 # 212 test = """ 213 table test { 214 lookup TEST {} TEST; 215 } test; 216 """ 217 writer = TestFeatureWriter() 218 parseFeatures(writer, test) 219 result = writer.getData() 220 expected = [] 221 self.assertEqual(result, expected) 222 # 223 test = """ 224 table test { 225 feature TEST {} TEST; 226 } test; 227 """ 228 writer = TestFeatureWriter() 229 parseFeatures(writer, test) 230 result = writer.getData() 231 expected = [] 190 232 self.assertEqual(result, expected) 191 233
