diff --git a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_stack.java b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_stack.java index 29472ac7b..f67ebeb7a 100644 --- a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_stack.java +++ b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_stack.java @@ -107,6 +107,10 @@ class Xomw_prepro_piece { this.line_start = line_start; parts.Add(new Xomw_prepro_part(Bry_.Empty)); } + public void Parts__renew() { + parts.Clear(); + this.Add_part(Bry_.Empty); + } public Xomw_prepro_part Get_current_part() { return (Xomw_prepro_part)parts.Get_at(parts.Len() - 1); } diff --git a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr.java b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr.java index f1d013524..e9abed2b2 100644 --- a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr.java @@ -691,7 +691,7 @@ public class Xomw_prepro_wkr { // THREAD.UNSAFE: caching for repeated calls // Re-add the old stack element if it still has unmatched opening characters remaining if (matching_count < piece.count) { - piece.parts.Clear(); // PORTED: piece.parts = [ new PPDPart ]; + piece.Parts__renew(); // PORTED: piece.parts = [ new PPDPart ]; piece.count -= matching_count; // do we still qualify for any callback with remaining count? diff --git a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr__tst.java b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr__tst.java index f89295119..8b343d030 100644 --- a/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr__tst.java +++ b/400_xowa/src/gplx/xowa/parsers/mws/prepros/Xomw_prepro_wkr__tst.java @@ -25,12 +25,33 @@ public class Xomw_prepro_wkr__tst { @Test public void Brack() { fxt.Test__parse("a[[b]]c", "a[[b]]c"); } + @Test public void Brack__one() { // COVERS: "Add literal brace(s)" + fxt.Test__parse("a[b]c", "a[b]c"); + } + @Test public void Brack__max() { // COVERS: "The specified maximum exists in the callback array, unless the caller" + fxt.Test__parse("a[[[[[b]]]]]c", "a[[[[[b]]]]]c"); + } @Test public void Template() { fxt.Test__parse("a{{b}}c", "ac"); } - @Test public void Template__args() { + @Test public void Template__args__idx() { fxt.Test__parse("a{{b|c|d}}e", "ae"); } + @Test public void Template__args__key() { + fxt.Test__parse("a{{b|c=d}}e", "ae"); + } + @Test public void Template__line_start() { // COVERS: "The invocation is at the start of the line if lineStart is set in" + fxt.Test__parse(String_.Concat_lines_nl_skip_last + ( "a" + , "{{b}}" + ), String_.Concat_lines_nl_skip_last + ( "a" + , "" + )); + } + @Test public void Template__max() { // COVERS: "do we still qualify for any callback with remaining count?" + fxt.Test__parse("a{{{{{b}}}}}c", "ac"); + } @Test public void Tplarg() { fxt.Test__parse("a{{{b}}}c", "abc"); }