def make_node(self):
     parser = self.parser
     caret = parser.caret
     endindex = self.is_element(parser)
     if endindex is None:
         return None
     pos = parser.copy_pos()
     match = RE.search(parser.text, caret+1)
     tagname = parser.text[parser.caret+1:match.end(0)-1].lower()
     if tagname in VOID_ELEMENT:
         node = Void(tagname)
     elif tagname in RAWTEXT_ELEMENT:
         node = RawText(tagname)
     else:
         node = Element(tagname)
     parser.update(match.end(0)-1)
     if parser.text[parser.caret] is '>':
         parser.update(parser.caret+1)
     elif parser.text[parser.caret] is '/':
         parser.update(endindex+1)
     else:
         self.read_attributes(parser, node, endindex, tagname)
     if isinstance(node, Void):
         return [node]
     if isinstance(node, RawText):
         node.data = self.get_raw_text(parser, tagname, pos)
         return [node]
     node.pos = pos
     return node
    def make_node(self):
        parser = self.parser
        if parser.text[parser.caret] not in "![":
            return None
        if parser.text[parser.caret] == "!":
            tagtype = "img"
            if parser.text[parser.caret + 1 : parser.caret + 2] != "[":
                return None
            ref_begin = parser.caret + 2
        else:
            tagtype = "a"
            ref_begin = parser.caret + 1

        parity, ref_end = check_parity(parser, ref_begin)
        if parity != 0:
            return None

        if tagtype == "img":
            node = Void("reference")
            node["alt"] = parser.text[ref_begin:ref_end]
            node["_pos"] = parser.copy_pos()
            parser.update(ref_end + 1)
            char = parser.text[ref_end + 1 : ref_end + 2]
            if char == "(":
                node.name = "img"
                self.get_inline_info(parser, node)
            elif char in "[ ":
                get_inline_id(parser, node)
            else:
                parser.update(ref_end + 1)
            parser["ElementNP"].get_attribute_list(parser, node)
            return node
        node = Element("reference")
        node.pos = parser.copy_pos()
        node["_pos"] = parser.copy_pos()
        node.ref_end = ref_end
        parser.update(parser.caret + 1)
        return node
    def make_node(self):
        parser = self.parser
        if parser.text[parser.caret] not in '![':
            return None
        if parser.text[parser.caret] == '!':
            tagtype = 'img'
            if parser.text[parser.caret+1:parser.caret+2] != '[':
                return None
            ref_begin = parser.caret+2
        else:
            tagtype = 'a'
            ref_begin = parser.caret+1

        parity, ref_end = check_parity(parser, ref_begin)
        if parity != 0:
            return None

        if tagtype == 'img':
            node = Void('reference')
            node['alt'] = parser.text[ref_begin:ref_end]
            node['_pos'] = parser.copy_pos()
            parser.update(ref_end+1)
            char = parser.text[ref_end+1:ref_end+2]
            if char == '(':
                node.name = 'img'
                self.get_inline_info(parser, node)
            elif char in '[ ':
                get_inline_id(parser, node)
            else:
                parser.update(ref_end+1)
            parser['ElementNP'].get_attribute_list(parser, node)
            return node
        node = Element('reference')
        node.pos = parser.copy_pos()
        node['_pos'] = parser.copy_pos()
        node.ref_end = ref_end
        parser.update(parser.caret+1)
        return node
Example #4
0
 def make_node(self):
     """Returns an `Element` node. """
     parser = self.parser
     caret = parser.caret
     tmp = self.is_element(parser)
     if tmp is None:
         return None
     endindex = tmp[0]
     shift = tmp[1]
     pos = parser.copy_pos()
     match = RE.search(parser.text, caret+shift)
     tagname = parser.text[parser.caret+shift:match.end(0)-1].lower()
     if tagname == '' or tagname[0] in '.#!@':
         tagname = 'span'
         parser.update(caret+3)
     else:
         parser.update(match.end(0)-1)
     if tagname in VOID_ELEMENT:
         node = Void(tagname)
     elif tagname in RAWTEXT_ELEMENT:
         node = RawText(tagname)
     else:
         node = Element(tagname)
     if parser.text[parser.caret] == END_CHAR[shift]:
         parser.update(parser.caret+1)
     elif parser.text[parser.caret] == '/':
         parser.update(endindex+1)
     else:
         self.read_attributes(parser, node, endindex)
     if isinstance(node, Void):
         return [node]
     if isinstance(node, RawText):
         node.data = self.get_raw_text(parser, tagname, pos, shift)
         return [node]
     node.pos = pos
     node.type__ = shift
     return node