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 paragraph(): return pg.AllOf(pg.Ignore(pg.Optional("\n")), pg.Words())
def emphasis(): return pg.AllOf(lambda: pg.Ignore("*"), lambda: pg.Words(), lambda: pg.Ignore("*"))
def paragraph(): return pg.AllOf( span_text)
def bullet(): return pg.AllOf(pg.Ignore(pg.Optional(pg.Many("\n"))), pg.Ignore("* "), pg.Words())
def emphasis(): return pg.AllOf( pg.Ignore('*'), pg.Words(), pg.Ignore('*'))
def blockquote(): return pg.AllOf( pg.Ignore('> '), paragraph )
def nested_elements(): return pg.AllOf( pg.Indented( pg.Many(pg.OneOf(block, code_block, element, comment, text))), pg.Ignore(newlines_or_eof))
def element(): return pg.AllOf(open_tag, pg.Optional(sub_element), pg.Ignore(newlines_or_eof), pg.Optional(nested_elements))
def doctype(): return pg.AllOf("!!!", pg.Ignore(newline_or_eof))
def sub_element(): return pg.AllOf(pg.Ignore(": "), open_tag, pg.Optional(sub_element))
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 numbered_bullet(): return pg.AllOf(pg.Ignore(pg.Optional(pg.Many("\n"))), pg.Ignore(pg.Words(letters="1234567890")), pg.Ignore(". "), pg.Words())
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))
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( "---", "___", "***", "- - -",
def code_block(): return pg.AllOf(pg.Ignore("!="), pg.Join(pg.Many(pg.Not(newline_or_eof))), pg.Ignore(newline_or_eof))
def code_block(): return pg.AllOf( pg.Indented( code_paragraph))
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)))
def link(): return pg.AllOf(link_text, link_url)
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 list_item(): return pg.AllOf(pg.Ignore("* "), pg.Words())
def text(): return pg.AllOf(pg.Ignore("| "), pg.Join(pg.Many(pg.Not(newline_or_eof))), pg.Ignore(newline_or_eof))
def indented_bullets(): return pg.Indented(pg.AllOf(bullet, pg.Optional(indented_bullets, )), optional=True)
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 word_aab(): return pg.AllOf(word_a, letter_b)
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
def body(): return pg.AllOf(optional_a, letters)
def tag_class(): return pg.AllOf(pg.Ignore("."), identifier_parts)