Пример #1
0
def test_match_optional():
    optional_a = pg.Optional("a")

    match, rest = optional_a("abc", 'optional_a')
    assert match == ['', "a"]
    assert rest == "bc"

    match, rest = optional_a("bc", 'optional_a')
    assert match == []
    assert rest == "bc"

    letter_a = pg.NamedPattern(
        'letter_a',
        "a")

    optional_a = pg.Optional(letter_a)
    match, rest = optional_a("abc", 'optional_a')
    assert match == ['letter_a', "a"]
    assert rest == "bc"

    optional_ignore = pg.Optional(pg.Ignore("a"))

    match, rest = optional_ignore("abc", 'optional_ignore')
    assert match == []
    assert rest == "bc"
Пример #2
0
def attribute_list():
    return pg.AllOf(
        pg.Ignore("("), attribute,
        pg.Optional(
            pg.Many(
                pg.AllOf(pg.Ignore(","), pg.Ignore(pg.Optional(" ")),
                         attribute))), pg.Ignore(")"))
Пример #3
0
 def ordered_list():
     return pg.AllOf(
         pg.Ignore(pg.Optional(pg.Many("\n"))),
         pg.Indented(pg.AllOf(
             numbered_bullet,
             pg.Optional(pg.Many(numbered_bullet, ordered_list))),
                     optional=True))
Пример #4
0
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")))))))
Пример #5
0
def title_level_2():
    return pg.AllOf(
        pg.Ignore("## "),
        pg.Words(),
        pg.Ignore(
            pg.AllOf(
                pg.Optional(" "),
                pg.Optional("##"),
                "\n")))
Пример #6
0
 def nested_list():
     return pg.AllOf(
         pg.Ignore(
             pg.Optional(
                 pg.Many("\n"))),
         pg.Indented(
             pg.AllOf(
                 list_item,
             pg.Optional(
                 pg.Many(
                     list_item,
                     nested_list))),
             optional=True))
Пример #7
0
 def indented_bullets():
     return pg.Indented(
         pg.AllOf(
             bullet,
             pg.Optional(
                 indented_bullets)),
         optional=True)
Пример #8
0
def test_match_indented_nested_bullets():
    bullet = pg.NamedPattern(
        'bullet',
        pg.AllOf(
            pg.Ignore(
                pg.Optional(
                    pg.Many("\n"))),
            pg.Ignore("* "),
            pg.Words()))

    @pg.lazy
    def indented_bullets():
        return pg.Indented(
            pg.AllOf(
                bullet,
                pg.Optional(
                    indented_bullets)),
            optional=True)

    data = """
* Line One
* Line Two
"""

    expected = [
        'indented_bullets',
        ['bullet', "Line One"],
        ['indented_bullets',
         ['bullet', "Line Two"]]]

    match, rest = indented_bullets(data, 'indented_bullets')
    assert match == expected
    assert rest == "\n"
Пример #9
0
def test_indented_bullet():
    paragraph = pg.NamedPattern(
        'paragraph',
        pg.AllOf(
            pg.Ignore(pg.Optional("\n")),
            pg.Words()))

    indented_paragraphs =  pg.Indented(
        pg.Many(paragraph),
        initial_indent="*   ")

    data = """
*   Paragraph One
    Paragraph Two
""".strip()

    expected = [
        'indented_paragraphs',
        ['paragraph',
         "Paragraph One"],
        ['paragraph',
         "Paragraph Two"]]

    match, rest = indented_paragraphs(data, "indented_paragraphs")
    assert match == expected
Пример #10
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 .,'>"
Пример #11
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,
                    ".",
                    " "))))
Пример #12
0
def horizontal_rule():
    return pg.AllOf(
        pg.OneOf(
            "---",
            "___",
            "***",
            "- - -",
            "_ _ _",
            "* * *"),
        pg.Optional(
            pg.Ignore(
                pg.Many(
                    pg.Not("\n")))))
Пример #13
0
def test_match_optional():
    optional_a = pg.Optional("a")

    match, rest = pg.match_optional("abc", optional_a, 'optional_a')
    assert match == ['', "a"]
    assert rest == "bc"

    match, rest = pg.match_optional("bc", optional_a, 'optional_a')
    assert match == []
    assert rest == "bc"

    def letter_a():
        return "a"

    optional_a = pg.Optional(letter_a)
    match, rest = pg.match_optional("abc", optional_a, 'optional_a')
    assert match == ['letter_a', "a"]
    assert rest == "bc"

    optional_ignore = pg.Optional(pg.Ignore("a"))

    match, rest = pg.match_optional("abc", optional_ignore, 'optional_ignore')
    assert match == []
    assert rest == "bc"
Пример #14
0
def test_match_ignore():
    ignore_a = pg.Ignore("a")

    match, rest = pg.match_ignore("a", ignore_a, "ignore_a")
    assert match == []
    assert rest == ""

    ignore_a = pg.Ignore(pg.AllOf(pg.Optional("#"), "abc"))

    match, rest = pg.match_ignore("#abc", ignore_a, "ignore_a")
    assert match == []
    assert rest == ""

    with py.test.raises(pg.NoPatternFound):
        match, rest = pg.match_ignore("123", ignore_a, "ignore_a")
Пример #15
0
def test_optional():
    optional_a = pg.NamedPattern(
        'optional_a',
        pg.Optional("a"))

    result = pg.parse_string("a", optional_a)
    expected = ['', "a"]
    assert expected == result

    letters = pg.NamedPattern(
        'letters',
        pg.Words())

    body = pg.NamedPattern(
        'body',
        pg.AllOf(optional_a, letters))

    result = pg.parse_string("abc", body)
    expected = [
        'body',
        "a",
        ['letters', "bc"]]
    assert expected == result
Пример #16
0
def sub_element():
    return pg.AllOf(pg.Ignore(": "), open_tag, pg.Optional(sub_element))
Пример #17
0
def comment():
    return pg.AllOf(pg.Optional(pg.Ignore(pg.Many(" "))), pg.Ignore("// "),
                    pg.Join(pg.Many(pg.Not(newline_or_eof))),
                    pg.Ignore(newline_or_eof))
Пример #18
0
def element():
    return pg.AllOf(open_tag, pg.Optional(sub_element),
                    pg.Ignore(newlines_or_eof), pg.Optional(nested_elements))
Пример #19
0
def custom_tag(tag_name):
    return pg.NamedPattern(
        tag_name,
        pg.AllOf(pg.Ignore(tag_name), pg.Ignore(" "), identifier_parts,
                 pg.Ignore(newline_or_eof), pg.Optional(nested_elements)))
Пример #20
0
span_text = pg.Many(
    plain,
    emphasis,
    link,
    code)

def code_line():
    return pg.Escaped(
        pg.Join(
            pg.Many(
                pg.Not("\n"))))

code_paragraph = pg.AllOf(
    pg.Ignore(
        pg.Optional(
            pg.Many("\n"))),
    pg.Many(
        code_line))

def code_block():
    return pg.AllOf(
        pg.Indented(
            code_paragraph))

def horizontal_rule():
    return pg.AllOf(
        pg.OneOf(
            "---",
            "___",
            "***",
            "- - -",
Пример #21
0
 def numbered_bullet():
     return pg.AllOf(pg.Ignore(pg.Optional(pg.Many("\n"))),
                     pg.Ignore(pg.Words(letters="1234567890")),
                     pg.Ignore(". "), pg.Words())
Пример #22
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))))
Пример #23
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)))
Пример #24
0
 def bullet():
     return pg.AllOf(pg.Ignore(pg.Optional(pg.Many("\n"))), pg.Ignore("* "),
                     pg.Words())
Пример #25
0
 def optional_a():
     return pg.Optional("a")
Пример #26
0
 def paragraph():
     return pg.AllOf(pg.Ignore(pg.Optional("\n")), pg.Words())
Пример #27
0
def test_indented():
    list_item = pg.NamedPattern(
        'list_item',
        pg.AllOf(
            pg.Ignore(
                pg.Optional(
                    pg.Many("\n"))),
            pg.Ignore("* "),
            pg.Words()))

    @pg.lazy
    def nested_list():
        return pg.AllOf(
            pg.Ignore(
                pg.Optional(
                    pg.Many("\n"))),
            pg.Indented(
                pg.AllOf(
                    list_item,
                pg.Optional(
                    pg.Many(
                        list_item,
                        nested_list))),
                optional=True))

    data = """
* A bullet
"""

    expected = [
        'nested_list',
        ['list_item', "A bullet"]]

    result = pg.parse_string(data, nested_list)
    assert expected == result

    data = """
* A bullet
  * A bullet in a sublist
"""

    expected = [
        'nested_list',
        ['list_item', "A bullet"],
        ['nested_list',
         ['list_item', "A bullet in a sublist"]]]

    result = pg.parse_string(data, nested_list)
    assert expected == result

    data = """
* A bullet
  * A bullet in a sublist
  * Another bullet in a sublist
* Another bullet in the first list
"""

    expected = [
        'nested_list',
        ['list_item', "A bullet"],
        ['nested_list',
         ['list_item', "A bullet in a sublist"],
         ['list_item', "Another bullet in a sublist"]],
        ['list_item', "Another bullet in the first list"]]

    result = pg.parse_string(data, nested_list)
    assert expected == result
Пример #28
0
 def list_item():
     return pg.AllOf(pg.Ignore(pg.Optional(pg.Many("\n"))), pg.Ignore("* "),
                     pg.Words())
Пример #29
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('"')))