From af337493af2d53c2652043e6c87b55c610662de8 Mon Sep 17 00:00:00 2001
From: gnosygnu
Date: Sun, 19 Jan 2020 11:38:01 -0500
Subject: [PATCH] Pages: Forward unknown args to header template [#635]
---
.../xowa/xtns/proofreadPage/Pp_pages_nde.java | 18 ++++++++++-----
.../proofreadPage/Pp_pages_nde_hdr_tst.java | 22 +++++++++++++++++++
2 files changed, 35 insertions(+), 5 deletions(-)
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
+ , "
"
+ , ""
+ , " "
+ , "
"
+ ));
+ }
}