Ejemplo n.º 1
0
def build_html(tree, writable):
    for node in tree:
        if isinstance(node, ParagraphNode):
            writable.write("<p>")
        elif isinstance(node, TextNode):
            writable.write(node.value)
        elif isinstance(node, LiteralNode):
            writable.write(node.value)
        elif isinstance(node, CommentNode):
            writable.write(node.value)
        elif isinstance(node, InlineTagNode):
            writable.write(node.value)
        elif isinstance(node, BlockTagNode):
            writable.write(node.value)
        elif isinstance(node, SelfClosingTagNode):
            tag = extract_tag_name(node.value)
            if tag == 'br':
                writable.write("<br>\n")
            else:
                writable.write(node.value)

        build_html(node, writable)

        if isinstance(node, ParagraphNode):
            writable.write("</p>\n")
        elif isinstance(node, InlineTagNode):
            tag = extract_tag_name(node.value)
            writable.write("</%s>" % tag)
        elif isinstance(node, BlockTagNode):
            tag = extract_tag_name(node.value)
            writable.write("</%s>\n" % tag)
Ejemplo n.º 2
0
def build_html(parse_tree, writable):
    for node in parse_tree:
        traverse_children = True
        if isinstance(node, ParagraphNode):
            writable.write("<p>")
        elif isinstance(node, TextNode):
            writable.write(node.value)
        elif isinstance(node, InlineTagNode) or \
                isinstance(node, BlockTagNode):
            tag = extract_tag_name(node.value)
            handle_tag_node(node, tag, writable)
            traverse_children = should_traverse_children(tag)
        elif isinstance(node, SelfClosingTagNode):
            tag = extract_tag_name(node.value)
            if tag == 'br':
                writable.write("<br>\n")

        if traverse_children:
            build_html(node, writable)

            if isinstance(node, ParagraphNode):
                writable.write("</p>\n")
            elif isinstance(node, InlineTagNode):
                tag = extract_tag_name(node.value)
                writable.write("</%s>" % tag)
            elif isinstance(node, BlockTagNode):
                tag = extract_tag_name(node.value)
                writable.write("</%s>\n" % tag)
Ejemplo n.º 3
0
def gblock(token_stream):
    block = BlockTagNode(token_stream.value)
    tag_name = extract_tag_name(block.value)
    while True:
        if accept_token(token_stream, Token.Tag.Close): #assume correctly nested and closed tags
            skip_token(token_stream)
            return block
        elif accept_token(token_stream, Token.Par):
            skip_token(token_stream)
        elif accept_token(token_stream, Token.Br):
            if tag_name in RESPECT_BR:
                block.append(SelfClosingTagNode('<br>'))
            skip_token(token_stream)
        elif accept_token(token_stream, Token.Literal):
            block.append(LiteralNode(token_stream.value))
        elif accept_token(token_stream, Token.Comment):
            block.append(CommentNode(token_stream.value))
        elif accept_token(token_stream, Token.Text):
            block.append(block_try_p(tag_name, token_stream, TextNode))
        elif accept_token(token_stream, Token.Tag.SelfClosingTag):
            block.append(block_try_p(tag_name, token_stream, SelfClosingTagNode))
        elif accept_token(token_stream, Token.Tag.InlineTag):
            block.append(block_try_p(tag_name, token_stream, InlineTagNode, ginline_tag))
        elif accept_token(token_stream, Token.Tag.BlockTag):
            nested_block = gblock(token_stream)
            block.append(nested_block)
        else:
            return block
Ejemplo n.º 4
0
def build_plain_text(tree, writable):
    for node in tree:
        if isinstance(node, TextNode):
            writable.write(node.value)
        elif isinstance(node, ParagraphNode):
            writable.write(' ')
        elif isinstance(node, SelfClosingTagNode):
            tag = extract_tag_name(node.value)
            if tag == 'br':
                writable.write(' ')

        build_plain_text(node, writable)
Ejemplo n.º 5
0
def empty_pred(node):
    if isinstance(node, TextNode):
        return empty_text(node.value)
    elif isinstance(node, SelfClosingTagNode):
        return extract_tag_name(node.value) == 'br'
    return False