Esempio n. 1
0
spaces = Suppress(Optional(White()))

nonbraced_text = CharsNotIn('{}')
nonbraced_text.set_parse_action(create1(NonbracedText))

braced_text = Forward()
braced_text_elems = Forward()

braced_text << Suppress('{') + braced_text_elems + Suppress('}')
braced_text.set_parse_action(create1(BracedText))

braced_text_elems << ZeroOrMore(nonbraced_text | braced_text)
braced_text_elems.set_parse_action(create_rec(BracedTextElements))

quoted_text = QuotedString('"', '\\', unquoteResults=False, multiline=True)
quoted_text.set_parse_action(create1(QuotedText))

entry_key = spaces + CharsNotIn('#\\@,={} \t\n') + spaces
entry_key.set_parse_action(create1(EntryKey))

tag_value_elems = delimited_list(braced_text | quoted_text | entry_key, '#')
tag_value_elems.set_parse_action(create_rec(TagValueElements))

tag_value = tag_value_elems
tag_value.set_parse_action(create1(TagValue))

tag_name = spaces + CharsNotIn('#\\@,={} \t\n') + spaces
tag_name.set_parse_action(create1(TagName))

tag = tag_name + Suppress('=') + tag_value
tag.set_parse_action(create2(Tag))