Beispiel #1
0
def test_match_one_of():
    asterix = pg.Ignore("*")

    emphasis = pg.AllOf(
        asterix,
        pg.Many(pg.Not("*")),
        asterix)

    phrase = pg.OneOf(
            pg.Words(),
            emphasis)

    expected = ['phrase', "b", "o", "l", "d"]
    match, rest = phrase("*bold*", "phrase")
    assert match == expected
    assert rest == ""

    with py.test.raises(pg.NoPatternFound):
        match, rest = phrase("123", "phrase")

    match, rest = phrase("text", "phrase")
    assert match == ['phrase', "text"]
    assert rest == ""

    # Test match with no name
    match, rest = phrase("text", "")
    assert match == ['', "text"]
    assert rest == ""
Beispiel #2
0
def test_match_one_of_empty():
    b1 = pg.Ignore("*")
    b2 = pg.Ignore("-")

    bullet = pg.OneOf(b1, b2)

    data = "*"
    expected = ['bullet', ""]
    match, rest = pg.match_one_of(data, bullet, 'bullet')
    assert match == expected
    assert rest == ""
Beispiel #3
0
def test_reprs():
    # Pattern matchers
    assert repr(pg.Some("a")) == "<Some pattern='a'>"
    assert repr(pg.Ignore("#")) == "<Ignore pattern=<Text pattern='#'>>"
    assert repr(pg.Not("#")) == "<Not pattern=<Text pattern='#'>>"
    assert repr(pg.Optional("#")) == "<Optional pattern=<Text pattern='#'>>"

    # Option matchers
    assert repr(pg.OneOf("abc", pg.Not("#"))) == "<OneOf options=(<Text pattern='abc'>, <Not pattern=<Text pattern='#'>>)>"
    assert repr(pg.Many("abc", pg.Not("#"))) == "<Many options=(<Text pattern='abc'>, <Not pattern=<Text pattern='#'>>)>"
    assert repr(pg.Words()) == "<Words letters='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz .,'>"
Beispiel #4
0
def test_match_many_empty():
    "Test that empty matches don't raise NoPatternFound"
    linebreaks = pg.Many(
        pg.OneOf(
            pg.Ignore(
                "\n")))

    data = "\n\n"
    expected = ['linebreaks', ""]
    match, rest = linebreaks(data, 'linebreaks')
    assert match == expected
    assert rest == ""
Beispiel #5
0
def horizontal_rule():
    return pg.AllOf(
        pg.OneOf(
            "---",
            "___",
            "***",
            "- - -",
            "_ _ _",
            "* * *"),
        pg.Optional(
            pg.Ignore(
                pg.Many(
                    pg.Not("\n")))))
Beispiel #6
0
def _unordered_list_template(bullet_type, spacing):
    return pg.Indented(
        pg.AllOf(
            bullet_type,
            pg.Many(
                pg.AllOf(
                    pg.Ignore(
                        spacing),
                    pg.OneOf(
                        bullet_type,
                        unordered_list,
                        ordered_list)))),
        optional=True)
Beispiel #7
0
def numbered_bullet_with_paragraph():
    return pg.Indented(
        pg.AllOf(
            paragraph,
            pg.Optional(
                pg.AllOf(
                    linebreaks,
                    paragraph))),
        initial_indent=pg.AllOf(
            pg.Optional(
                linebreaks),
            pg.OneOf(
                pg.AllOf(
                    pg.Ignore(digits),
                    pg.Ignore("."),
                    pg.Many('\t')),
                pg.AllOf(
                    digits,
                    ".",
                    " "))))
Beispiel #8
0
def ordered_list_nested():
    return pg.OneOf(
        _ordered_list_without_paragraphs_nested,
        _ordered_list_with_paragraphs_nested,
        _ordered_list_with_single_bullet_nested,
        )
Beispiel #9
0
def ordered_list():
    return pg.OneOf(
        _ordered_list_without_paragraphs,
        _ordered_list_with_paragraphs,
        _ordered_list_with_single_bullet
        )
Beispiel #10
0
def quoted_string():
    return pg.OneOf(
        pg.AllOf(pg.Ignore("'"), pg.Optional(pg.Join(pg.Many(pg.Not("'")))),
                 pg.Ignore("'")),
        pg.AllOf(pg.Ignore('"'), pg.Optional(pg.Join(pg.Many(pg.Not('"')))),
                 pg.Ignore('"')))
Beispiel #11
0
def open_tag():
    return pg.AllOf(
        alphanumerics,
        pg.Optional(pg.Many(pg.OneOf(tag_id, tag_class, attribute_list))),
        pg.Optional(pg.OneOf(content, code)))
Beispiel #12
0
 def linebreaks():
     return pg.Many(pg.OneOf(pg.Ignore("\n")))
Beispiel #13
0
def extends():
    return pg.AllOf(pg.Ignore("extends"), pg.Ignore(" "), filename_parts,
                    pg.Ignore(newlines_or_eof),
                    pg.Optional(pg.Many(pg.OneOf(replace, append))))
Beispiel #14
0
def nested_elements():
    return pg.AllOf(
        pg.Indented(
            pg.Many(pg.OneOf(block, code_block, element, comment, text))),
        pg.Ignore(newlines_or_eof))
Beispiel #15
0
def content():
    return pg.AllOf(pg.Ignore(pg.OneOf(" | ", " ")),
                    pg.Join(pg.Many(pg.Not(newline_or_eof))))
Beispiel #16
0
def attribute():
    return pg.OneOf(
        pg.AllOf(identifier_parts, pg.Ignore("="),
                 pg.OneOf(quoted_string, attribute_value_code)), alphanumerics)
Beispiel #17
0
def attribute_value_code():
    return pg.OneOf(
        pg.AllOf(pg.Ignore("{{"), pg.Join(pg.Many(pg.Not("}}"))),
                 pg.Ignore("}}")), identifier_parts)
Beispiel #18
0
 def phrase():
     return pg.OneOf(words, emphasis)
Beispiel #19
0
import lxml

import wiseguy.html

import pegger as pg
from pegger import lazy

alphabet = pg.Words(string.lowercase + string.uppercase)
alphanumerics = pg.Words(string.lowercase + string.uppercase + string.digits)
identifier_parts = pg.Words(string.lowercase + string.uppercase +
                            string.digits + "-_")
filename_parts = pg.Words(string.lowercase + string.uppercase + string.digits +
                          "-_.")
whitespace = pg.Words(" \t")

newline_or_eof = pg.OneOf("\n", pg.EOF())
newlines_or_eof = pg.OneOf(pg.Many("\n"), pg.EOF())


@lazy
def document():
    return pg.AllOf(
        pg.Optional(pg.Ignore(newlines_or_eof)), pg.Optional(doctype),
        pg.OneOf(
            extends,
            pg.Many(
                pg.AllOf(pg.OneOf(element, code_block, comment),
                         pg.Optional(pg.Ignore(pg.Many("\n")))))))


@lazy