def subnode_parse(self, node, pieces=None, indent=<NUM_LIT:0>, ignore=[], restrict=None):
if pieces is not None:<EOL><INDENT>old_pieces, self.pieces = self.pieces, pieces<EOL><DEDENT>else:<EOL><INDENT>old_pieces = []<EOL><DEDENT>if type(indent) is int:<EOL><INDENT>indent = indent * '<STR_LIT:U+0020>'<EOL><DEDENT>if len(indent) > <NUM_LIT:0>:<EOL><INDENT>pieces = '<STR_LIT>'.join(self.pieces)<EOL>i_piece = pieces[:len(indent)]<EOL>if self.pieces[-<NUM_LIT:1>:] == ['<STR_LIT>']:<EOL><INDENT>self.pieces = [pieces[len(indent):]] + ['<STR_LIT>']<EOL><DEDENT>elif self.pieces != []:<EOL><INDENT>self.pieces = [pieces[len(indent):]]<EOL><DEDENT><DEDENT>self.indent += len(indent)<EOL>for n in node.childNodes:<EOL><INDENT>if restrict is not None:<EOL><INDENT>if n.nodeType == n.ELEMENT_NODE and n.tagName in restrict:<EOL><INDENT>self.parse(n)<EOL><DEDENT><DEDENT>elif n.nodeType != n.ELEMENT_NODE or n.tagName not in ignore:<EOL><INDENT>self.parse(n)<EOL><DEDENT><DEDENT>if len(indent) > <NUM_LIT:0>:<EOL><INDENT>self.pieces = shift(self.pieces, indent, i_piece)<EOL><DEDENT>self.indent -= len(indent)<EOL>old_pieces.extend(self.pieces)<EOL>self.pieces = old_pieces<EOL>
Parse the subnodes of a given node. Subnodes with tags in the
        `ignore` list are ignored. If pieces is given, use this as target for
        the parse results instead of self.pieces. Indent all lines by the amount
        given in `indent`. Note that the initial content in `pieces` is not
        indented. The final result is in any case added to self.pieces.