From 3af333e563dcebee289fb9cdc8a4c32962c11a52 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Wed, 11 Jan 2017 08:48:57 -0500 Subject: [PATCH] Mw_parse: Add more comment support --- .../parsers/mws/prepros/Xomw_prepro_wkr.java | 4 ++-- .../mws/prepros/Xomw_prepro_wkr__tst.java | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) 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 921c73e74..dbe0b1c2a 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 @@ -295,7 +295,7 @@ public class Xomw_prepro_wkr { // TS.UNSAFE:caching for repeated calls // comments. comments_list.Clear(); comments_list.Add(new int[] {ws_bgn, ws_end}); - while (Bry_.Eq(src, ws_end + 1, ws_end + 5, Bry__comment_bgn)) { + while (ws_end + 5 < src_len && Bry_.Eq(src, ws_end + 1, ws_end + 5, Bry__comment_bgn)) { int cur_char_pos = Bry_find_.Find_fwd(src, Bry__comment_end, ws_end + 4); if (cur_char_pos == Bry_find_.Not_found) { break; @@ -358,8 +358,8 @@ public class Xomw_prepro_wkr { // TS.UNSAFE:caching for repeated calls i = end_pos + 1; inner = Bry_.Mid(src, bgn_pos, end_pos + 1); accum.Add_str_a7("").Add_bry_escape_html(inner).Add_str_a7(""); - continue; } + continue; } byte[] name = element.name; 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 52ee53260..359ef6543 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 @@ -34,8 +34,27 @@ public class Xomw_prepro_wkr__tst { @Test public void Comment() { fxt.Test__parse("ac", "a<!--b-->c"); } - @Test public void Comment__nl__ws() { - fxt.Test__parse("xo\n \n \nz", "xo\n <!--1--> \n <!--2--> \nz"); + @Test public void Comment__dangling() { + fxt.Test__parse("a c", "a <!--b--> c"); + } + @Test public void Comment__many__ws() { // NOTE: space is outside comment + fxt.Test__parse("a z", "a <!--1--> <!--2--> z"); + } + @Test public void Comment__nl__ws() { // NOTE: space is inside comment if flanked by nl + fxt.Test__parse(String_.Concat_lines_nl_skip_last + ( "a" + , " " + , " " + , "z" + ), String_.Concat_lines_nl_skip_last + ( "a" + , " <!--1--> " + , " <!--2--> " + , "z" + )); } @Test public void Ext__pre() { fxt.Test__parse("a
b
c", "apre id="1"b</pre>c");