diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java index 0c7e94439..589f17c70 100644 --- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java @@ -36,9 +36,14 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner1 { private Xoae_app app; private Xowe_wiki wiki; private Xop_ctx ctx; private Gfo_usr_dlg usr_dlg; private byte[] src; private Xop_xnde_tkn xnde_tkn; private Xoa_ttl cur_page_ttl; + private List_adp unknown_xatrs = List_adp_.New(); public void Xatr__set(Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) { - if (xatr_id_obj == null) return; + // cache unknown xatrs for header usage; ISSUE#:635; DATE:2020-01-19 + if (xatr_id_obj == null) { + unknown_xatrs.Add(new Pp_index_arg(xatr.Key_bry(), xatr.Val_as_bry())); + return; + } Byte_obj_val xatr_id = (Byte_obj_val)xatr_id_obj; byte[] val_bry = xatr.Val_as_bry(); switch (xatr_id.Val()) { @@ -196,7 +201,13 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner1 { full_bfr.Add(Bry_page_bgn).Add_int_variable(bgn_page_int); // |from=1" if (end_page_int != -1) full_bfr.Add(Bry_page_end).Add_int_variable(end_page_int); // |to=3" - List_adp invk_args = index_page.Invk_args(); + Add_args(full_bfr, index_page.Invk_args()); + Add_args(full_bfr, unknown_xatrs); + full_bfr.Add(gplx.xowa.parsers.tmpls.Xop_curly_end_lxr.Hook); + full_bfr.Add(rv); + return full_bfr.To_bry_and_clear(); + } + private void Add_args(Bry_bfr full_bfr, List_adp invk_args) { int invk_args_len = invk_args.Count(); for (int i = 0; i < invk_args_len; i++) { Pp_index_arg arg = (Pp_index_arg)invk_args.Get_at(i); @@ -207,9 +218,6 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner1 { .Add(arg.Val()) ; } - full_bfr.Add(gplx.xowa.parsers.tmpls.Xop_curly_end_lxr.Hook); - full_bfr.Add(rv); - return full_bfr.To_bry_and_clear(); } private Xoa_ttl[] Get_ttls_from_xnde_args(Gfo_number_parser num_parser) { if (!Chk_step()) return Ttls_null; diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java index 352d0aaa7..f80473817 100644 --- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java @@ -159,4 +159,26 @@ public class Pp_pages_nde_hdr_tst { , "

" )); } + @Test public void Unknown_args() { // PURPOSE:unknown args should be captured; ISSUE#:635; DATE:2020-01-19 + Io_mgr.Instance.InitEngine_mem(); // NOTE: Init_page_update doesn't actually update, so for now, just reset file_system + fxt.Init_page_create("MediaWiki:Proofreadpage_header_template", String_.Concat + ( "{{#if:{{{value|}}}|value={{{value}}};|value=nil;}}" + , "{{#if:{{{current|}}}|current={{{current}}};|}}" + , "{{#if:{{{prev|}}}|prev={{{prev}}};|}}" + , "{{#if:{{{next|}}}|next={{{next}}};|}}" + , "{{#if:{{{from|}}}|from={{{from}}};|}}" + , "{{#if:{{{to|}}}|to={{{to}}};|}}" + , "{{#if:{{{custom|}}}|custom={{{custom}}};|}}" + , "{{Template1|arg1={{{arg1|missing1}}}}}" + , "\n\n" + )); + fxt.Init_page_create("Template:Template1", "{{{arg1|missing}}}-xyz"); + fxt.Test__parse__tmpl_to_html("", String_.Concat_lines_nl + ( "

value=1;from=1;to=1;abc-xyz" // fails if "abc-xyz" is missing + , "

" + , "" + , "

" + , "

" + )); + } }