# HG changeset patch # User Paul Boddie # Date 1533123239 -7200 # Node ID 48e8846e61b721f8d671a5f54b9ee1ea659929d0 # Parent 50aa090efd452af8f40d6815cdf9c5bacc0b9a3a Attempted to fix list item continuation, ending list items only if the next line has no indent or if a recognised list item pattern is present. diff -r 50aa090efd45 -r 48e8846e61b7 moinformat/parsers/moin.py --- a/moinformat/parsers/moin.py Wed Aug 01 13:32:10 2018 +0200 +++ b/moinformat/parsers/moin.py Wed Aug 01 13:33:59 2018 +0200 @@ -25,7 +25,7 @@ # Parser functionality and pattern definition. -from moinformat.parsers.common import ParserBase, get_patterns, \ +from moinformat.parsers.common import ParserBase, get_patterns, choice, \ excl, expect, group, optional, recur, \ repeat @@ -162,9 +162,15 @@ term = DefTerm([], pad) self.parse_region_details(term, ["deftermend", "deftermsep"]) self.add_node(region, term) + if self.matching_pattern() == "deftermsep": self.parse_defitem(region) + # Add padding from the separator to the term, there being no item. + + else: + term.extra = self.match_group("pad") + def parse_defterm_empty(self, region): "Handle an empty definition term within 'region'." @@ -564,8 +570,7 @@ "defterm_empty" : join(("^", group("pad", r"\N+"), # ws... - expect("::\s+"))), # :: - # ws... (optional) + expect("::\s+"))), # :: ws... "heading" : join(("^", group("extra", r"\N*"), # ws... (optional) @@ -665,9 +670,17 @@ # nl "deftermsep" : join(("::", group("pad", r"\s+"))), # :: - # ws... (optional) + # ws... - "listitemend" : r"^", # next line + "listitemend" : join((r"^", # next line + choice((excl(r"\N"), # without indent + expect(r"\N+\*"), # or with ws... list-marker + expect(r"\N+\d\."), # or with ws... decimal-marker + expect(r"\N+[aA]\."), # or with ws... alpha-marker + expect(r"\N+[iI]\."), # or with ws... roman-marker + expect(r"\N+\."), # or with ws... dot-marker + expect(r"\N+.+?::\s"), # or with ws... text :: ws (next defterm) + expect(r"\N+::\s"))))), # or with ws... :: ws (next defitem) # Table contents: diff -r 50aa090efd45 -r 48e8846e61b7 moinformat/serialisers/html/moin.py --- a/moinformat/serialisers/html/moin.py Wed Aug 01 13:32:10 2018 +0200 +++ b/moinformat/serialisers/html/moin.py Wed Aug 01 13:33:59 2018 +0200 @@ -77,10 +77,10 @@ def end_defitem(self, pad, extra): self.out("") - def start_defterm(self, pad): + def start_defterm(self, pad, extra): self.out("
") - def end_defterm(self, pad): + def end_defterm(self, pad, extra): self.out("
") def start_emphasis(self): diff -r 50aa090efd45 -r 48e8846e61b7 moinformat/serialisers/moin/moin.py --- a/moinformat/serialisers/moin/moin.py Wed Aug 01 13:32:10 2018 +0200 +++ b/moinformat/serialisers/moin/moin.py Wed Aug 01 13:33:59 2018 +0200 @@ -49,16 +49,16 @@ pass def start_defitem(self, pad, extra): - self.out((extra and "\n" + extra + "::" or "") + pad) + self.out((extra and extra + "::" or "") + pad) def end_defitem(self, pad, extra): pass - def start_defterm(self, pad): + def start_defterm(self, pad, extra): self.out(pad) - def end_defterm(self, pad): - self.out("::") + def end_defterm(self, pad, extra): + self.out("::" + extra) def start_emphasis(self): self.out("''") diff -r 50aa090efd45 -r 48e8846e61b7 moinformat/tree/moin.py --- a/moinformat/tree/moin.py Wed Aug 01 13:32:10 2018 +0200 +++ b/moinformat/tree/moin.py Wed Aug 01 13:33:59 2018 +0200 @@ -245,21 +245,22 @@ "A definition term." - def __init__(self, nodes, pad): + def __init__(self, nodes, pad, extra=""): Container.__init__(self, nodes) self.pad = pad + self.extra = extra def __repr__(self): - return "DefTerm(%r, %r)" % (self.nodes, self.pad) + return "DefTerm(%r, %r, %r)" % (self.nodes, self.pad, self.extra) def prettyprint(self, indent=""): - l = ["%sDefTerm: pad=%r" % (indent, self.pad)] + l = ["%sDefTerm: pad=%r extra=%r" % (indent, self.pad, self.extra)] return self._prettyprint(l, indent) def to_string(self, out): - out.start_defterm(self.pad) + out.start_defterm(self.pad, self.extra) self._to_string(out) - out.end_defterm(self.pad) + out.end_defterm(self.pad, self.extra) class FontStyle(Container): diff -r 50aa090efd45 -r 48e8846e61b7 tests/test_deflists.tree --- a/tests/test_deflists.tree Wed Aug 01 13:32:10 2018 +0200 +++ b/tests/test_deflists.tree Wed Aug 01 13:33:59 2018 +0200 @@ -9,5 +9,15 @@ Text DefItem Text + DefItem + Text + DefItem + Text + List + ListItem + Text + DefTerm + Text + DefItem + Text Block - Text diff -r 50aa090efd45 -r 48e8846e61b7 tests/test_deflists.txt --- a/tests/test_deflists.txt Wed Aug 01 13:32:10 2018 +0200 +++ b/tests/test_deflists.txt Wed Aug 01 13:33:59 2018 +0200 @@ -1,5 +1,10 @@ term:: item not a term:: nor an item term:: + :: first item :: item - ::non-item + continued + :: item + ::also continued + * List! + defterm:: defitem diff -r 50aa090efd45 -r 48e8846e61b7 tests/test_lists.tree --- a/tests/test_lists.tree Wed Aug 01 13:32:10 2018 +0200 +++ b/tests/test_lists.tree Wed Aug 01 13:33:59 2018 +0200 @@ -32,3 +32,10 @@ Text Block Text + List + ListItem + Text + ListItem + Text + Block + Text diff -r 50aa090efd45 -r 48e8846e61b7 tests/test_lists.txt --- a/tests/test_lists.txt Wed Aug 01 13:32:10 2018 +0200 +++ b/tests/test_lists.txt Wed Aug 01 13:33:59 2018 +0200 @@ -11,3 +11,8 @@ * Flat * List XXX + * List with + continuation + * Continuing... + again +And stop.