Changeset 204
- Timestamp:
- 05/18/05 20:04:06 (4 years ago)
- Files:
-
- manage/branches/python/CLI.py (modified) (7 diffs)
- manage/branches/python/__init__.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
manage/branches/python/CLI.py
r203 r204 11 11 HELP = 'HELP' 12 12 HELP_HEADER = 'HELP_HEADER' 13 HELP_FOOTER = 'HELP_FOOTER' 13 14 ERROR = 'ERROR' 14 15 FLAGS = 'FLAGS' … … 46 47 # the grammar at the current depth. 47 48 MERGE = 'MERGE' 49 # A hook allows external grammars to be merged 50 HOOK = 'HOOK' 48 51 49 52 # Context states … … 258 261 out[key] = branch 259 262 return out 260 261 263 262 264 def sort_grammar_keys(self, keys, grammar): … … 283 285 return cmp(l, r) 284 286 285 k = keys.keys() 286 k.sort(cmp = key_sort) 287 return k 287 return sorted(keys.keys(), key_sort) 288 288 289 289 def grammar_branches(self, grammar): … … 346 346 347 347 def extract_help(self, grammar): 348 """ Extract help from the given grammar node. Returns a dictionary 349 with the keys of the dictionary being either a tuple of 350 (order, group), or HELP_HEADER or HELP_FOOTER. If the key is a 351 tuple, the value is an array of (command, help) pairs. If the key 352 is HELP_HEADER or HELP_FOOTER then the value is the actual help 353 text. """ 348 354 out = {(9999, None) : []} 349 355 grammar = self.copy_grammar_shallow(grammar) 356 if HELP_HEADER in grammar: out[HELP_HEADER] = grammar[HELP_HEADER] 357 if HELP_FOOTER in grammar: out[HELP_FOOTER] = grammar[HELP_FOOTER] 350 358 for k in self.sort_grammar_keys(self.filter_grammar(grammar), grammar): 351 359 group = (9999, None) … … 380 388 # Do a real sort? 381 389 for k in out: 382 out[k].sort() 390 if type(out[k]) is list: 391 out[k].sort() 383 392 return out 384 393 385 394 def candidates(self, grammar): 395 """ The flattened list of command candidates for grammar. Excludes 396 help headers and footers. """ 386 397 out = [] 387 398 for group in self.extract_help(grammar).values(): 388 for help in group: 389 out.append(help[0]) 399 if type(group) is list: 400 for help in group: 401 out.append(help[0]) 390 402 return out 391 403 … … 463 475 self.__tokenise = re.compile(r'(\'(?:[^\\\']|.)*\'|"(?:[^\\"]|.)*")|(\S+)') 464 476 477 def __walk(self, source_grammar, callback): 478 out = [] 479 grammar = self.grammar_branches(self.copy_grammar_shallow(source_grammar)) 480 for k, v in grammar.iteritems(): 481 if callback(k, v): 482 out.append((k, v)) 483 if type(v) is dict: 484 out.extend(self.__walk(v, callback)) 485 return out 486 487 def walk(self, callback): 488 self.__walk(self.__grammar, callback) 489 490 def hook(self, hook, grammar): 491 print self.walk(lambda k, v: k == HOOK and v == hook) 492 465 493 def parse(self, command): 466 494 tokens = [] manage/branches/python/__init__.py
r199 r204 2 2 'GROUP_HEADING', 'HELP', 'IF', 'IF_LABEL', 'IF_VAR', 'JUMP', 'JUMP_TO', 3 3 'LABEL', 'MERGE', 'ORDER', 'ParseNode', 'RANGE', 'RETURN', 'Result', 'UNLESS', 4 'UNLESS_LABEL', 'UNLESS_VAR', 'VAR' ]4 'UNLESS_LABEL', 'UNLESS_VAR', 'VAR', 'HOOK']
