예제 #1
0
 def default(self, node):
     debug('walker.default({})'.format(''))
     table = TABLE_DIRECT
     key = node.type
     if key in table:
         self.engine(table[key], node)
         self.prune()
     else:
         debug('leaving walker.default(), no key')
예제 #2
0
 def default(self, node):
     debug('walker.default({})'.format(''))
     table = TABLE_DIRECT
     key = node.type
     if key in table:
         self.engine(table[key], node)
         self.prune()
     else:
         debug('leaving walker.default(), no key')
예제 #3
0
 def engine(self, info, node):
     debug('walker.engine()')
     debug('entry: \"{}\"'.format(info))
     for arg in info.arguments:
         if isinstance(arg, IndentCurrent):
             debug("picked IndentCurrent")
             word = StackData(self.indent)
             self.datastack.append(word)
         elif isinstance(arg, IndentIncrease):
             debug("picked IndentIncrease")
             self.indent += INDENT_STEP
             word = StackData('')
             self.datastack.append(word)
         elif isinstance(arg, IndentDecrease):
             self.indent = self.indent[:-4]
             word = StackData('')
             self.datastack.append(word)
         elif isinstance(arg, FormatChild):
             debug("picked FormatChild")
             self.preorder(node[arg.child])
             if arg.reformat is not None:
                 word_old = self.datastack[-1]
                 word_new = StackData(self.__reformat(arg.reformat, word_old.data), word_old.precedence)
                 self.datastack[-1] = word_new
         elif isinstance(arg, FormatRange):
             debug("picked FormatRangePrec")
             subnodes = node[arg.first:arg.last]
             subnodenum = len(subnodes)
             for subnode in subnodes:
                 self.preorder(subnode)
             if subnodenum == 0:
                 word = StackData('')
             else:
                 data = arg.separator.join(word.data for word in self.datastack[-subnodenum:])
                 del self.datastack[-subnodenum:]
                 if arg.reformat is not None:
                     data = self.__reformat(arg.reformat, data)
                 word = StackData(data)
             self.datastack.append(word)
         elif isinstance(arg, FormatAttr):
             debug("picked FormatAttr")
             newnode = node[arg.child] if arg.child is not None else node
             data = getattr(newnode, arg.attrname)
             if arg.reformat is not None:
                 data = self.__reformat(arg.reformat, data)
             word = StackData(data)
             self.datastack.append(word)
         else:
             raise UnknownParameterError(arg)
     arglen = len(info.arguments)
     if arglen == 0:
         word = StackData(info.format)
     else:
         data = info.format.format(*(word.data for word in self.datastack[-arglen:]))
         del self.datastack[-arglen:]
         word = StackData(data)
     self.datastack.append(word)
     debug("Engine:", self.datastack)
예제 #4
0
 def engine(self, info, node):
     debug('walker.engine()')
     debug('entry: \"{}\"'.format(info))
     for arg in info.arguments:
         if isinstance(arg, IndentCurrent):
             debug("picked IndentCurrent")
             word = StackData(self.indent)
             self.datastack.append(word)
         elif isinstance(arg, IndentIncrease):
             debug("picked IndentIncrease")
             self.indent += INDENT_STEP
             word = StackData('')
             self.datastack.append(word)
         elif isinstance(arg, IndentDecrease):
             self.indent = self.indent[:-4]
             word = StackData('')
             self.datastack.append(word)
         elif isinstance(arg, FormatChild):
             debug("picked FormatChild")
             self.preorder(node[arg.child])
             if arg.reformat is not None:
                 word_old = self.datastack[-1]
                 word_new = StackData(
                     self.__reformat(arg.reformat, word_old.data),
                     word_old.precedence)
                 self.datastack[-1] = word_new
         elif isinstance(arg, FormatRange):
             debug("picked FormatRangePrec")
             subnodes = node[arg.first:arg.last]
             subnodenum = len(subnodes)
             for subnode in subnodes:
                 self.preorder(subnode)
             if subnodenum == 0:
                 word = StackData('')
             else:
                 data = arg.separator.join(
                     word.data for word in self.datastack[-subnodenum:])
                 del self.datastack[-subnodenum:]
                 if arg.reformat is not None:
                     data = self.__reformat(arg.reformat, data)
                 word = StackData(data)
             self.datastack.append(word)
         elif isinstance(arg, FormatAttr):
             debug("picked FormatAttr")
             newnode = node[arg.child] if arg.child is not None else node
             data = getattr(newnode, arg.attrname)
             if arg.reformat is not None:
                 data = self.__reformat(arg.reformat, data)
             word = StackData(data)
             self.datastack.append(word)
         else:
             raise UnknownParameterError(arg)
     arglen = len(info.arguments)
     if arglen == 0:
         word = StackData(info.format)
     else:
         data = info.format.format(*(word.data
                                     for word in self.datastack[-arglen:]))
         del self.datastack[-arglen:]
         word = StackData(data)
     self.datastack.append(word)
     debug("Engine:", self.datastack)