예제 #1
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))
예제 #2
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
예제 #3
0
 def indented_bullets():
     return pg.Indented(
         pg.AllOf(
             bullet,
             pg.Optional(
                 indented_bullets)),
         optional=True)
예제 #4
0
    def test_with_indent_chars(self):
        "Test that Indented can match with indents other than whitespace"
        lines = pg.Many(
            pg.OneOf(
                pg.Words(),
                pg.Text("\n")))
        indented_text = pg.Indented(
            lines,
            indent_pattern="> ")

        data = """
> Some text
> indented with
> non whitespace
""".strip()

        expected = ['indented_text',
                    "Some text",
                    "\n",
                    "indented with",
                    "\n",
                    "non whitespace"]

        match, rest = indented_text(data, 'indented_text')
        assert match == expected
        assert rest == ""
예제 #5
0
def test_get_current_indentation_initial_indent():
    indented_text = pg.Indented(pg.Words(), initial_indent=pg.AllOf("*   "))

    data = "*   foo"
    expected = ("    ", "    foo")
    result = pg._get_current_indentation(data, indented_text)
    assert expected == result
예제 #6
0
def test_get_current_indentation_initial_indent_with_tabs():
    indented_text = pg.Indented(pg.Words(),
                                initial_indent=pg.AllOf(pg.Ignore("*"), "\t"))

    data = "*\tfoo"
    expected = ("\t", "\tfoo")
    result = pg._get_current_indentation(data, indented_text)
    assert expected == result
예제 #7
0
    def test_indented_with_anonymous_pattern_and_subpattern(self):
        paragraph = (pg.Words())

        indented_text = pg.Indented(paragraph)

        data = "  Some text"

        expected = [None, "Some text"]

        match, rest = pg.match_indented(data, indented_text, None)
        assert match == expected
        assert rest == ""
예제 #8
0
    def test_retaining_linebreaks(self):
        paragraph = (pg.Words())

        indented_text = pg.Indented(paragraph)

        data = "  Some text\n"

        expected = ['indented_text', "Some text"]

        match, rest = pg.match_indented(data, indented_text, 'indented_text')
        assert match == expected
        assert rest == "\n"
예제 #9
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))
예제 #10
0
    def test_reindenting_indented_rest(self):
        paragraph = (pg.Words())

        indented_text = pg.Indented(paragraph)

        data = "  Some text\n  Unmatched text\n  More unmatched text"

        expected = ['indented_text', "Some text"]
        expected_rest = "\n  Unmatched text\n  More unmatched text"

        match, rest = pg.match_indented(data, indented_text, 'indented_text')
        assert match == expected
        assert rest == expected_rest
예제 #11
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)
예제 #12
0
    def test_indented_with_anonymous_subpattern(self):
        paragraph = (
            pg.Words())

        indented_text = pg.Indented(paragraph)

        data = "  Some text"

        expected = [
            'indented_text',
            "Some text"]

        match, rest = indented_text(data, 'indented_text')
        assert match == expected
        assert rest == ""
예제 #13
0
    def test_with_optional(self):
        """Test that optional allows you to match without an indent"""
        def list_item():
            return pg.AllOf(pg.Ignore("* "), pg.Words())

        indented_bullets = pg.Indented(pg.Many(list_item), optional=True)

        data = """* A bullet"""

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

        match, rest = pg.match_indented(data, indented_bullets,
                                        'indented_bullets')
        assert match == expected
        assert rest == ""
예제 #14
0
    def test_without_optional(self):
        """Test that without optional, no match is made"""
        def list_item():
            return (pg.Ignore("\n* "), pg.Words())

        indented_bullets = pg.Indented(pg.Many(list_item))

        data = """
    * A bullet"""

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

        with py.test.raises(pg.NoPatternFound):
            match, rest = pg.match_indented(data, indented_bullets,
                                            'indented_bullets')
예제 #15
0
    def test_indented_with_named_subpattern(self):
        def paragraph():
            return (pg.Words())

        indented_text = pg.Indented(paragraph)

        data_with_spaces = """  Some text"""
        data_with_tabs = """\tSome text"""

        expected = ['indented_text', ['paragraph', "Some text"]]

        for data in [data_with_spaces, data_with_tabs]:
            match, rest = pg.match_indented(data, indented_text,
                                            'indented_text')
            assert match == expected
            assert rest == ""
예제 #16
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,
                    ".",
                    " "))))
예제 #17
0
    def test_with_optional(self):
        """Test that optional allows you to match without an indent"""
        list_item = pg.NamedPattern(
            'list_item',
            pg.AllOf(
                pg.Ignore("* "),
                pg.Words()))

        indented_bullets = pg.Indented(
            pg.Many(list_item),
            optional=True)

        data = """* A bullet"""

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

        match, rest = indented_bullets(data, 'indented_bullets')
        assert match == expected
        assert rest == ""
예제 #18
0
def _ordered_list_with_single_bullet_nested():
    return pg.Indented(
        numbered_bullet_without_paragraph,
        optional=False)
예제 #19
0
def code_block():
    return pg.AllOf(
        pg.Indented(
            code_paragraph))
예제 #20
0
def _unordered_list_with_single_bullet():
    return pg.Indented(
        bullet_without_paragraph,
        optional=True)
예제 #21
0
파일: jade.py 프로젝트: Singletoned/jade
def nested_elements():
    return pg.AllOf(
        pg.Indented(
            pg.Many(pg.OneOf(block, code_block, element, comment, text))),
        pg.Ignore(newlines_or_eof))