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')
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')
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)
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)