示例#1
0
    def parse(self):
        """
        Parse the forms list and return a list of VariantForm objects.
        """
        # Build a list of all the elements of the vfsectLoose, in sequence,
        #  including all tagged nodes (vd, variant_form, grammar, etc.)
        #  and all text
        elements = []

        # Handle any text preceding the very first tag
        pretag_nodes = _handle_tail(self.node.text)
        elements.extend(pretag_nodes)

        for node in self.node.xpath(SALIENT_NODES_XPATH):
            elements.append(VfsectLooseNode(node=node))
            # Handle any significant text following the element (tail)
            tail_nodes = _handle_tail(node.tail)
            elements.extend(tail_nodes)

        # Add the previous and following tags to each element as 'previous'
        #   and 'next'
        for i, element in enumerate(elements):
            try:
                element.previous = elements[i - 1].tag
            except IndexError:
                element.previous = None
            try:
                element.next = elements[i + 1].tag
            except IndexError:
                element.next = None

        vf_list = _build_vflist(elements)
        return utilities.unpack_parentheses(vf_list)