def start_list(ltype):
     """Create a new list element. """
     if ltype == 'ol':
         node = Element('enumerate')
     else:
         node = Element('itemize')
     node.append_child(Element('li'))
     return node
示例#2
0
 def make_node(self):
     parser = self.parser
     index = self.is_auto_link(parser, parser.caret, parser.end)
     if index is None:
         return None
     url = parser.text[parser.caret + 1:index]
     node = Element('a')
     node['href'] = url
     node.append_child(Text(url))
     parser.update(index + 1)
     parser['ElementNP'].get_attribute_list(parser, node)
     return [node]
示例#3
0
 def make_node(self):
     parser = self.parser
     index = self.is_auto_link(parser, parser.caret, parser.end)
     if index is None:
         return None
     url = parser.text[parser.caret + 1 : index]
     node = Element("a")
     node["href"] = url
     node.append_child(Text(url))
     parser.update(index + 1)
     parser["ElementNP"].get_attribute_list(parser, node)
     return [node]
示例#4
0
 def make_node(self):
     parser = self.parser
     index = self.is_auto_mail(parser, parser.caret, parser.end)
     if index is None:
         return None
     email = parser.text[parser.caret + 1 : index]
     mailto = "mailto:" + email
     node = Element("a")
     node["href"] = mailto
     node.append_child(Text(email))
     parser.update(index + 1)
     parser["ElementNP"].get_attribute_list(parser, node)
     return [node]
示例#5
0
 def make_node(self):
     parser = self.parser
     caret = parser.caret
     if caret != 0:
         return None
     entry = self.get_entry(parser)
     if entry is None:
         return None
     node = Element('lexor-meta')
     while entry is not None:
         node.append_child(entry)
         entry = self.get_entry(parser)
     return [node]
示例#6
0
 def make_node(self):
     parser = self.parser
     caret = parser.caret
     if caret != 0:
         return None
     entry = self.get_entry(parser)
     if entry is None:
         return None
     node = Element('lexor-meta')
     while entry is not None:
         node.append_child(entry)
         entry = self.get_entry(parser)
     return [node]
示例#7
0
 def make_node(self):
     parser = self.parser
     index = self.is_auto_mail(parser, parser.caret, parser.end)
     if index is None:
         return None
     email = parser.text[parser.caret + 1:index]
     mailto = "mailto:" + email
     node = Element('a')
     node['href'] = mailto
     node.append_child(Text(email))
     parser.update(index + 1)
     parser['ElementNP'].get_attribute_list(parser, node)
     return [node]
示例#8
0
 def _create_node(self, parser, end_index, misaligned, doc_string):
     """Parse the doc_string and return the node. """
     node = Element('doc-comment')
     if self.lexor_parser and not misaligned:
         self.lexor_parser.parse(doc_string)
         node['parsed'] = 'true'
         node.extend_children(self.lexor_parser.document)
         if self.lexor_parser.log:
             parser.update_log(
                 self.lexor_parser.log,
                 delta=[self.line_start - 1, self.indentation + 2]
             )
     else:
         if not misaligned:
             self.msg('E404', parser.pos, [self.parser_name])
         node['parsed'] = 'false'
         node.append_child(Text(doc_string))
     parser.update(end_index)
     return [node]
示例#9
0
    def make_node(self):
        parser = self.parser
        match = FENCED.match(parser.text, parser.caret-1)
        if match:
            return self.get_fenced_block(match)
        text = self.parser.text[parser.caret:parser.caret+4]
        if text != 4*' ' and text[0:1] != '\t':
            return None
        node = Element('codeblock')

        index = parser.text.find('\n', parser.caret, parser.end)
        if index == -1:
            index = parser.end
        left_b = parser.text.find('{', parser.caret, index)
        if left_b != -1:
            line = parser.text[parser.caret:left_b]
        else:
            line = parser.text[parser.caret:index]
        line_one = line[1:] if line[0:1] == '\t' else line[4:]

        block = code_hilite(line_one, node)

        if left_b != -1:
            parser.update(left_b)
            self.parser['ElementNP'].get_attribute_list(parser, node)

        while index < parser.end:
            old_index = index + 1
            index = parser.text.find('\n', old_index, parser.end)
            if index == -1:
                index = parser.end
            line = parser.text[old_index:index]
            if line[0:4] == 4*' ':
                block.append(line[4:])
            elif line[0:1] == '\t':
                block.append(line[1:])
            else:
                index = index + 1
                break
        node.append_child(Text('\n'.join(block)))
        parser.update(index)
        return [node]
示例#10
0
    def get_fenced_block(self, match):
        """Parse a fenced block code. """
        parser = self.parser
        text = parser.text
        total = text[match.start()+1:match.end()].count('~')
        parser.update(match.end())
        node = Element('codeblock')

        index = parser.text.find('\n', parser.caret)
        if index == -1:
            index = parser.end
        left_b = parser.text.find('{', parser.caret, index)
        if left_b != -1:
            line = parser.text[parser.caret:left_b]
        else:
            line = parser.text[parser.caret:index]

        block = code_hilite(line, node)
        if block:
            append = block[0] + '\n'
        else:
            append = ''

        if left_b != -1:
            parser.update(left_b)
            self.parser['ElementNP'].get_attribute_list(parser, node)
            if text[parser.caret] == '\n':
                parser.update(parser.caret+1)
        else:
            parser.update(index+1)

        rfenced = re.compile(r'\n~{'+str(total-1)+',}[~]+[ ]*(\n|$)')
        match = rfenced.search(text, parser.caret)
        if not match:
            self.msg('E200', parser.pos, [total])
            node.append_child(append+text[parser.caret:])
            parser.update(parser.end)
            return [node]
        node.append_child(append+text[parser.caret:match.start()])
        parser.update(match.end())
        return [node]
示例#11
0
 def start_list(ltype):
     """Create a new list element. """
     node = Element(ltype)
     node.append_child(Element('li'))
     return node
示例#12
0
 def build_node(parser, content):
     """Build the actual node with the given content. """
     node = Element('code')
     node.append_child(Text(content))
     parser['ElementNP'].get_attribute_list(parser, node)
     return [node]