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 == ""
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 == ""
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 .,'>"
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 == ""
def horizontal_rule(): return pg.AllOf( pg.OneOf( "---", "___", "***", "- - -", "_ _ _", "* * *"), pg.Optional( pg.Ignore( pg.Many( pg.Not("\n")))))
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 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 ordered_list_nested(): return pg.OneOf( _ordered_list_without_paragraphs_nested, _ordered_list_with_paragraphs_nested, _ordered_list_with_single_bullet_nested, )
def ordered_list(): return pg.OneOf( _ordered_list_without_paragraphs, _ordered_list_with_paragraphs, _ordered_list_with_single_bullet )
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('"')))
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)))
def linebreaks(): return pg.Many(pg.OneOf(pg.Ignore("\n")))
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))))
def nested_elements(): return pg.AllOf( pg.Indented( pg.Many(pg.OneOf(block, code_block, element, comment, text))), pg.Ignore(newlines_or_eof))
def content(): return pg.AllOf(pg.Ignore(pg.OneOf(" | ", " ")), pg.Join(pg.Many(pg.Not(newline_or_eof))))
def attribute(): return pg.OneOf( pg.AllOf(identifier_parts, pg.Ignore("="), pg.OneOf(quoted_string, attribute_value_code)), alphanumerics)
def attribute_value_code(): return pg.OneOf( pg.AllOf(pg.Ignore("{{"), pg.Join(pg.Many(pg.Not("}}"))), pg.Ignore("}}")), identifier_parts)
def phrase(): return pg.OneOf(words, emphasis)
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