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", "abc");
}
- @Test public void Template__args() {
+ @Test public void Template__args__idx() {
fxt.Test__parse("a{{b|c|d}}e", "abcde");
}
+ @Test public void Template__args__key() {
+ fxt.Test__parse("a{{b|c=d}}e", "abc=de");
+ }
+ @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"
+ , "b"
+ ));
+ }
+ @Test public void Template__max() { // COVERS: "do we still qualify for any callback with remaining count?"
+ fxt.Test__parse("a{{{{{b}}}}}c", "abc");
+ }
@Test public void Tplarg() {
fxt.Test__parse("a{{{b}}}c", "abc");
}