code: def subnode_parse(self, node, pieces=None, indent=0, ignore=[], restrict=None):
          
          if pieces is not None:
              old_pieces, self.pieces = self.pieces, pieces
          else:
              old_pieces = []
          if type(indent) is int:
              indent = indent * ' '
          if len(indent) > 0:
              pieces = ''.join(self.pieces)
              i_piece = pieces[:len(indent)]
              if self.pieces[-1:] == ['']:
                  self.pieces = [pieces[len(indent):]] + ['']
              elif self.pieces != []:
                  self.pieces = [pieces[len(indent):]]
          self.indent += len(indent)
          for n in node.childNodes:
              if restrict is not None:
                  if n.nodeType == n.ELEMENT_NODE and n.tagName in restrict:
                      self.parse(n)
              elif n.nodeType != n.ELEMENT_NODE or n.tagName not in ignore:
                  self.parse(n)
          if len(indent) > 0:
              self.pieces = shift(self.pieces, indent, i_piece)
          self.indent -= len(indent)
          old_pieces.extend(self.pieces)
          self.pieces = old_pieces
docs: 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.