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))
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
def indented_bullets(): return pg.Indented( pg.AllOf( bullet, pg.Optional( indented_bullets)), optional=True)
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 == ""
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
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
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 == ""
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"
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))
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
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)
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 == ""
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 == ""
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')
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 == ""
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, ".", " "))))
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 == ""
def _ordered_list_with_single_bullet_nested(): return pg.Indented( numbered_bullet_without_paragraph, optional=False)
def code_block(): return pg.AllOf( pg.Indented( code_paragraph))
def _unordered_list_with_single_bullet(): return pg.Indented( bullet_without_paragraph, optional=True)
def nested_elements(): return pg.AllOf( pg.Indented( pg.Many(pg.OneOf(block, code_block, element, comment, text))), pg.Ignore(newlines_or_eof))