mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.5.4.1
This commit is contained in:
@@ -32,7 +32,7 @@ public class Arg_nde_tkn_mock extends Arg_nde_tkn { public Arg_nde_tkn_mock(bool
|
||||
}
|
||||
class Arg_itm_tkn_mock extends Arg_itm_tkn_base {
|
||||
public Arg_itm_tkn_mock(String v) {
|
||||
byte[] dat_ary = Bry_.new_utf8_(v);
|
||||
byte[] dat_ary = Bry_.new_u8(v);
|
||||
this.Subs_add(new Xop_bry_tkn(-1, -1, dat_ary));
|
||||
this.Dat_ary_(dat_ary);
|
||||
this.val = v;
|
||||
|
||||
@@ -26,7 +26,7 @@ public class Xop_curly_bgn_lxr implements Xop_lxr {
|
||||
public static Btrie_fast_mgr tmpl_bgn_trie_() { // hook sequences for adding new_line to tmpl return; "{|" "|-" ":" ";" "#" "*"; EX: "{{a}}" returns "*"; convert to "\n*"
|
||||
Btrie_fast_mgr rv = Btrie_fast_mgr.cs_();
|
||||
rv.Add(Xop_tblw_lxr_ws.Hook_tb, Bry_.Empty);
|
||||
rv.Add(Bry_.new_ascii_("|-"), Bry_.Empty);
|
||||
rv.Add(Bry_.new_a7("|-"), Bry_.Empty);
|
||||
rv.Add(Byte_ascii.Colon, Bry_.Empty);
|
||||
rv.Add(Byte_ascii.Semic, Bry_.Empty);
|
||||
rv.Add(Byte_ascii.Hash, Bry_.Empty);
|
||||
|
||||
@@ -131,7 +131,7 @@ public class Xop_curly_wkr implements Xop_ctx_wkr {
|
||||
if (vnt_dash_adjust) {
|
||||
Xop_tkn_itm text_tkn = root.Subs_get_or_null(root.Subs_len() - 2); // -2 to get tkn before newly-created tmpl / prm
|
||||
if (text_tkn == null || text_tkn.Tkn_tid() != Xop_tkn_itm_.Tid_txt)
|
||||
ctx.Wiki().Appe().Usr_dlg().Warn_many("", "", "token before curly_bgn was not text tkn; src=~{0}", String_.new_utf8_(src, lxr_bgn_pos, lxr_end_pos));
|
||||
ctx.Wiki().Appe().Usr_dlg().Warn_many("", "", "token before curly_bgn was not text tkn; src=~{0}", String_.new_u8(src, lxr_bgn_pos, lxr_end_pos));
|
||||
else
|
||||
text_tkn.Src_end_(text_tkn.Src_end() + 1); // +1 to extend txt_tkn with dash be 1 to include curly; EX: "-" "{{{" -> "-{" "{{"
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Xop_tkn_print_tst {
|
||||
@Test public void Tmpl_pf() {tst_Print("{{#expr:1}}");}
|
||||
private void tst_Print(String raw) {
|
||||
Xop_ctx ctx = fxt.Ctx();
|
||||
byte[] raw_bry = Bry_.new_utf8_(raw);
|
||||
byte[] raw_bry = Bry_.new_u8(raw);
|
||||
Xot_defn_tmpl defn = fxt.run_Parse_tmpl(Bry_.Empty, raw_bry);
|
||||
Xot_fmtr_prm raw_fmtr = new Xot_fmtr_prm();
|
||||
defn.Root().Tmpl_fmt(ctx, raw_bry, raw_fmtr);
|
||||
|
||||
@@ -53,7 +53,7 @@ public class Xot_defn_tmpl implements Xot_defn {
|
||||
}
|
||||
return bfr.To_bry_and_rls();
|
||||
}
|
||||
private static final byte[] Bry_onlyinclude_bgn = Bry_.new_ascii_("<onlyinclude>"), Bry_onlyinclude_end = Bry_.new_ascii_("</onlyinclude>");
|
||||
private static final byte[] Bry_onlyinclude_bgn = Bry_.new_a7("<onlyinclude>"), Bry_onlyinclude_end = Bry_.new_a7("</onlyinclude>");
|
||||
private static int Bry_onlyinclude_bgn_len = Bry_onlyinclude_bgn.length, Bry_onlyinclude_end_len = Bry_onlyinclude_end.length;
|
||||
public void Rls() {
|
||||
if (root != null) root.Clear();
|
||||
@@ -64,7 +64,7 @@ public class Xot_defn_tmpl implements Xot_defn {
|
||||
if (root == null) Parse_tmpl(ctx);
|
||||
Xoae_page page = ctx.Cur_page();
|
||||
if (!page.Tmpl_stack_add(full_name)) {
|
||||
bfr.Add_str("<span class=\"error\">Template loop detected:" + String_.new_utf8_(name) + "</span>");
|
||||
bfr.Add_str_a7("<span class=\"error\">Template loop detected:" + String_.new_u8(name) + "</span>");
|
||||
return false;
|
||||
}
|
||||
boolean rv = true;
|
||||
|
||||
@@ -32,10 +32,10 @@ class Xot_defn_trace_null implements Xot_defn_trace {
|
||||
}
|
||||
class Xot_defn_trace_brief implements Xot_defn_trace {
|
||||
public int Count() {return hash.Count();}
|
||||
public Xot_defn_trace_itm_brief GetAt(int i) {return (Xot_defn_trace_itm_brief)hash.FetchAt(i);}
|
||||
public Xot_defn_trace_itm_brief GetAt(int i) {return (Xot_defn_trace_itm_brief)hash.Get_at(i);}
|
||||
public void Trace_bgn(Xop_ctx ctx, byte[] src, byte[] name, Xot_invk caller, Xot_invk self, Xot_defn defn) {
|
||||
int hashKey = Bry_obj_ref.CalcHashCode(name, 0, name.length);
|
||||
Object o = hash.Fetch(hashKey);
|
||||
Object o = hash.Get_by(hashKey);
|
||||
Xot_defn_trace_itm_brief itm = null;
|
||||
if (o == null) {
|
||||
itm = new Xot_defn_trace_itm_brief().Name_(name);
|
||||
@@ -44,13 +44,13 @@ class Xot_defn_trace_brief implements Xot_defn_trace {
|
||||
else
|
||||
itm = (Xot_defn_trace_itm_brief)o;
|
||||
itm.Count_add();
|
||||
} private OrderedHash hash = OrderedHash_.new_();
|
||||
} private Ordered_hash hash = Ordered_hash_.new_();
|
||||
public void Trace_end(int trg_bgn, Bry_bfr trg) {}
|
||||
public void Print(byte[] src, Bry_bfr bb) {
|
||||
int count = hash.Count(); if (count == 0) return;
|
||||
if (bb.Len() != 0) bb.Add_byte_nl(); // only add newLine if something in bb; needed for tests
|
||||
for (int i = 0; i < count; i++) {
|
||||
Xot_defn_trace_itm_brief itm = (Xot_defn_trace_itm_brief)hash.FetchAt(i);
|
||||
Xot_defn_trace_itm_brief itm = (Xot_defn_trace_itm_brief)hash.Get_at(i);
|
||||
bb.Add_int_fixed(itm.Count(), 4).Add_byte(Byte_ascii.Space);
|
||||
bb.Add(itm.Name()).Add_byte_nl();
|
||||
}
|
||||
|
||||
@@ -37,8 +37,8 @@ class Xot_defn_trace_fxt {
|
||||
public void tst_(String raw, String... expd_ary) {
|
||||
Xop_ctx ctx = fxt.Ctx();
|
||||
ctx.Defn_trace().Clear();
|
||||
byte[] src = Bry_.new_utf8_(raw);
|
||||
ctx.Cur_page().Ttl_(Xoa_ttl.parse_(fxt.Wiki(), Bry_.new_ascii_("test")));
|
||||
byte[] src = Bry_.new_u8(raw);
|
||||
ctx.Cur_page().Ttl_(Xoa_ttl.parse_(fxt.Wiki(), Bry_.new_a7("test")));
|
||||
Xop_root_tkn root = ctx.Tkn_mkr().Root(src);
|
||||
fxt.Parser().Parse_page_all_clear(root, ctx, ctx.Tkn_mkr(), src);
|
||||
ctx.Defn_trace().Print(src, tmp);
|
||||
@@ -49,7 +49,7 @@ class Xot_defn_trace_fxt {
|
||||
String[] rv = new String[ary.length];
|
||||
for (int i = 0; i < rv.length; i++) {
|
||||
Xot_defn_trace_itm_brief itm = ary[i];
|
||||
sb.Add(String_.new_utf8_(itm.Name())).Add("|").Add(itm.Count());
|
||||
sb.Add(String_.new_u8(itm.Name())).Add("|").Add(itm.Count());
|
||||
rv[i] = sb.Xto_str_and_clear();
|
||||
}
|
||||
return rv;
|
||||
|
||||
@@ -83,15 +83,15 @@ public class Xot_defn_trace_dbg implements Xot_defn_trace {
|
||||
;
|
||||
if (arg.KeyTkn_exists()) {
|
||||
// byte[] key_ary = Bry_.Mid(src, arg.KeyTkn().Dat_bgn(), arg.KeyTkn().Dat_end());
|
||||
String key_str = String_.new_utf8_(arg.Key_tkn().Dat_ary());
|
||||
String key_str = String_.new_u8(arg.Key_tkn().Dat_ary());
|
||||
int key_str_len = String_.Len(key_str);
|
||||
if (key_str_len > key_max) key_max = key_str_len;
|
||||
argKeys.Add(key_str + "=" + String_.new_utf8_(arg.Val_tkn().Dat_ary()));
|
||||
argKeys.Add(key_str + "=" + String_.new_u8(arg.Val_tkn().Dat_ary()));
|
||||
}
|
||||
}
|
||||
argKeys.Sort();
|
||||
for (int i = 0; i < argKeys.Count(); i++) {
|
||||
String s = (String)argKeys.FetchAt(i);
|
||||
String s = (String)argKeys.Get_at(i);
|
||||
String key = String_.GetStrBefore(s, "=");
|
||||
String val = String_.GetStrAfter(s, "=");
|
||||
bfr.Add_byte_repeat(Byte_ascii.Space, indent + 2).Add_str(key)
|
||||
@@ -107,7 +107,7 @@ public class Xot_defn_trace_dbg implements Xot_defn_trace {
|
||||
// Fmt(ctx, defn_tmpl.Src(), root, Ary_fmt_lbl , invk, true);
|
||||
Fmt(ctx, defn_tmpl.Data_raw(), root, Ary_eval_lbl, invk, false);
|
||||
}
|
||||
} private Bry_bfr bfr = Bry_bfr.new_(128); ListAdp argKeys = ListAdp_.new_(); Xot_fmtr_prm prm_fmtr = new Xot_fmtr_prm();
|
||||
} private Bry_bfr bfr = Bry_bfr.new_(128); List_adp argKeys = List_adp_.new_(); Xot_fmtr_prm prm_fmtr = new Xot_fmtr_prm();
|
||||
private void Fmt(Xop_ctx ctx, byte[] src, Xop_tkn_itm root, byte[] lbl, Xot_invk caller, boolean newLineArgs) {
|
||||
bfr.Add_byte_repeat(Byte_ascii.Space, indent).Add(lbl);
|
||||
bfr.Add_byte_repeat(Byte_ascii.Space, indent);
|
||||
@@ -134,8 +134,8 @@ public class Xot_defn_trace_dbg implements Xot_defn_trace {
|
||||
public void Clear() {bfr.Clear(); indent = 0; count = 0;}
|
||||
int indent = 0, count = 0;
|
||||
public static final Xot_defn_trace_dbg _ = new Xot_defn_trace_dbg(); Xot_defn_trace_dbg() {}
|
||||
private static final byte[] Ary_invk_lbl = Bry_.new_ascii_("*invk\n"), Ary_lnk_lbl = Bry_.new_ascii_("*lnk: "), Ary_args_lbl = Bry_.new_ascii_("*args\n")
|
||||
, Ary_result_lbl = Bry_.new_ascii_("*result\n")
|
||||
, Ary_eval_lbl = Bry_.new_ascii_("*eval\n")
|
||||
, Ary_source_lbl = Bry_.new_ascii_("*source\n");
|
||||
private static final byte[] Ary_invk_lbl = Bry_.new_a7("*invk\n"), Ary_lnk_lbl = Bry_.new_a7("*lnk: "), Ary_args_lbl = Bry_.new_a7("*args\n")
|
||||
, Ary_result_lbl = Bry_.new_a7("*result\n")
|
||||
, Ary_eval_lbl = Bry_.new_a7("*eval\n")
|
||||
, Ary_source_lbl = Bry_.new_a7("*source\n");
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.junit.*;
|
||||
public class Xot_examples_tst {
|
||||
private Xop_fxt fxt = new Xop_fxt();
|
||||
@Before public void init() {
|
||||
Io_mgr._.InitEngine_mem();
|
||||
Io_mgr.I.InitEngine_mem();
|
||||
fxt.Reset();
|
||||
}
|
||||
@Test public void Arg_0() {Init_tmpl_for(); fxt.Test_parse_tmpl_str("{{For}}" , "For other uses, see [[Test page (disambiguation)]].");}
|
||||
|
||||
@@ -30,13 +30,13 @@ public class Xot_invk_mock implements Xot_invk {
|
||||
public int Frame_lifetime() {return frame_lifetime;} public void Frame_lifetime_(int v) {frame_lifetime = v;} private int frame_lifetime;
|
||||
public boolean Rslt_is_redirect() {return rslt_is_redirect;} public void Rslt_is_redirect_(boolean v) {rslt_is_redirect = v;} private boolean rslt_is_redirect;
|
||||
public Arg_nde_tkn Name_tkn() {return Arg_nde_tkn.Null;}
|
||||
public int Args_len() {return args.Count() + idx_adj;} private OrderedHash args = OrderedHash_.new_bry_();
|
||||
public Arg_nde_tkn Args_get_by_idx(int i) {return (Arg_nde_tkn)args.FetchAt(i - idx_adj);}
|
||||
public int Args_len() {return args.Count() + idx_adj;} private Ordered_hash args = Ordered_hash_.new_bry_();
|
||||
public Arg_nde_tkn Args_get_by_idx(int i) {return (Arg_nde_tkn)args.Get_at(i - idx_adj);}
|
||||
public Arg_nde_tkn Args_eval_by_idx(byte[] src, int idx) {// DUPE:MW_ARG_RETRIEVE
|
||||
int cur = 0, list_len = args.Count();
|
||||
if (idx >= list_len) return null;
|
||||
for (int i = 0; i < list_len; i++) { // iterate over list to find nth *non-keyd* arg; SEE:NOTE_1
|
||||
Arg_nde_tkn nde = (Arg_nde_tkn)args.FetchAt(i);
|
||||
Arg_nde_tkn nde = (Arg_nde_tkn)args.Get_at(i);
|
||||
if (nde.KeyTkn_exists()) {
|
||||
int key_int = Bry_.Xto_int_or(nde.Key_tkn().Dat_ary(), -1);
|
||||
if (key_int == -1)
|
||||
@@ -55,7 +55,7 @@ public class Xot_invk_mock implements Xot_invk {
|
||||
}
|
||||
return Args_get_by_key(src, Bry_.XtoStrBytesByInt(idx + 1, 1));
|
||||
}
|
||||
public Arg_nde_tkn Args_get_by_key(byte[] src, byte[] key) {return (Arg_nde_tkn)args.Fetch(key);}
|
||||
public Arg_nde_tkn Args_get_by_key(byte[] src, byte[] key) {return (Arg_nde_tkn)args.Get_by(key);}
|
||||
public static Xot_invk_mock new_(byte defn_tid, byte[] frame_ttl, KeyVal... args) {return new_(defn_tid, 1, frame_ttl, args);}
|
||||
public static Xot_invk_mock new_(byte[] frame_ttl, KeyVal... args) {return new_(Xot_defn_.Tid_null, 1, frame_ttl, args);}
|
||||
public static Xot_invk_mock test_(byte[] frame_ttl, KeyVal... args) {return new_(Xot_defn_.Tid_null, 0, frame_ttl, args);}
|
||||
@@ -78,7 +78,7 @@ public class Xot_invk_mock implements Xot_invk {
|
||||
}
|
||||
else // regular nde
|
||||
nde_tkn = new Arg_nde_tkn_mock(kv_key_str, kv.Val_to_str_or_empty()); // add regular key, val strings
|
||||
rv.args.AddReplace(Bry_.new_utf8_(kv_key_str), nde_tkn);
|
||||
rv.args.Add_if_dupe_use_nth(Bry_.new_u8(kv_key_str), nde_tkn);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -19,9 +19,9 @@ package gplx.xowa; import gplx.*;
|
||||
import gplx.core.primitives.*;
|
||||
import gplx.xowa.xtns.scribunto.*;
|
||||
public class Xot_invk_temp implements Xot_invk {
|
||||
private ListAdp list = ListAdp_.new_();
|
||||
private List_adp list = List_adp_.new_();
|
||||
private Hash_adp_bry arg_key_hash;
|
||||
private HashAdp arg_idx_hash; private Int_obj_ref arg_idx_ref;
|
||||
private Hash_adp arg_idx_hash; private Int_obj_ref arg_idx_ref;
|
||||
Xot_invk_temp() {}
|
||||
public Xot_invk_temp(boolean root_frame) {this.root_frame = root_frame;}
|
||||
public Xot_invk_temp(byte defn_tid, byte[] src, Arg_nde_tkn name_tkn, int src_bgn, int src_end) {
|
||||
@@ -42,27 +42,27 @@ public class Xot_invk_temp implements Xot_invk {
|
||||
public Arg_nde_tkn Args_eval_by_idx(byte[] src, int idx) { // NOTE: idx is base0
|
||||
return arg_idx_hash == null // only true if no args, or all args are keys; EX: {{A|b=1|c=2}}
|
||||
? null
|
||||
: (Arg_nde_tkn)arg_idx_hash.Fetch(arg_idx_ref.Val_(idx)); // lookup int in hash; needed b/c multiple identical keys should retrieve last, not first; EX: {{A|1=a|1=b}}; PAGE:el.d:ἔχω DATE:2014-07-23
|
||||
: (Arg_nde_tkn)arg_idx_hash.Get_by(arg_idx_ref.Val_(idx)); // lookup int in hash; needed b/c multiple identical keys should retrieve last, not first; EX: {{A|1=a|1=b}}; PAGE:el.d:ἔχω DATE:2014-07-23
|
||||
}
|
||||
public Arg_nde_tkn Args_get_by_idx(int i) {return (Arg_nde_tkn)list.FetchAt(i);}
|
||||
public Arg_nde_tkn Args_get_by_idx(int i) {return (Arg_nde_tkn)list.Get_at(i);}
|
||||
public Arg_nde_tkn Args_get_by_key(byte[] src, byte[] key) {
|
||||
return arg_key_hash == null ? null : (Arg_nde_tkn)arg_key_hash.Get_by_bry(key);
|
||||
}
|
||||
public void Args_add(Arg_nde_tkn arg) {list.Add(arg);}
|
||||
public void Args_add_by_key(byte[] key, Arg_nde_tkn arg) {
|
||||
if (arg_key_hash == null) arg_key_hash = Hash_adp_bry.cs_(); // PERF: lazy
|
||||
arg_key_hash.AddReplace(key, arg);
|
||||
arg_key_hash.Add_if_dupe_use_nth(key, arg);
|
||||
int key_as_int = Bry_.Xto_int_or(key, Int_.MinValue);
|
||||
if (key_as_int != Int_.MinValue) // key is int; add it to arg_idx_hash; EX:{{A|1=a}} vs {{A|a}}; DATE:2014-07-23
|
||||
Arg_idx_hash_add(key_as_int - ListAdp_.Base1, arg);
|
||||
Arg_idx_hash_add(key_as_int - List_adp_.Base1, arg);
|
||||
}
|
||||
public void Args_add_by_idx(Arg_nde_tkn arg) {Arg_idx_hash_add(++args_add_by_idx, arg);} private int args_add_by_idx = -1; // NOTE: args_add_by_idx needs to be a separate variable; keeps track of args which don't have a key;
|
||||
private void Arg_idx_hash_add(int int_key, Arg_nde_tkn arg) {
|
||||
if (arg_idx_hash == null) {
|
||||
arg_idx_hash = HashAdp_.new_();
|
||||
arg_idx_hash = Hash_adp_.new_();
|
||||
arg_idx_ref = Int_obj_ref.neg1_();
|
||||
}
|
||||
arg_idx_hash.AddReplace(Int_obj_ref.new_(int_key), arg); // AddReplace to keep latest version; needed for {{A|1=a|1=b}} DATE:2014-07-23
|
||||
arg_idx_hash.Add_if_dupe_use_nth(Int_obj_ref.new_(int_key), arg); // Add_if_dupe_use_nth to keep latest version; needed for {{A|1=a|1=b}} DATE:2014-07-23
|
||||
}
|
||||
public static final Xot_invk_temp Page_is_caller = new Xot_invk_temp(true); // SEE NOTE_2
|
||||
}
|
||||
|
||||
@@ -234,9 +234,9 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk {
|
||||
rv = true;
|
||||
} catch (Exception e) {
|
||||
if (Env_.Mode_testing())
|
||||
throw Err_.err_(e, "failed to evaluate function: page={0} defn={1} src={2} err={3}", String_.new_utf8_(ctx.Cur_page().Ttl().Full_txt()), String_.new_utf8_(defn.Name()), String_.new_utf8_(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_brief(e));
|
||||
throw Err_.err_(e, "failed to evaluate function: page={0} defn={1} src={2} err={3}", String_.new_u8(ctx.Cur_page().Ttl().Full_txt()), String_.new_u8(defn.Name()), String_.new_u8(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_brief(e));
|
||||
else {
|
||||
wiki.Appe().Usr_dlg().Warn_many("", "", "failed to evaluate function: page=~{0} defn=~{1} src=~{2} err=~{3}", String_.new_utf8_(ctx.Cur_page().Ttl().Full_txt()), String_.new_utf8_(defn.Name()), String_.new_utf8_(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_brief(e));
|
||||
wiki.Appe().Usr_dlg().Warn_many("", "", "failed to evaluate function: page=~{0} defn=~{1} src=~{2} err=~{3}", String_.new_u8(ctx.Cur_page().Ttl().Full_txt()), String_.new_u8(defn.Name()), String_.new_u8(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_brief(e));
|
||||
rv = false;
|
||||
}
|
||||
}
|
||||
@@ -252,7 +252,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk {
|
||||
try {
|
||||
Bld_key(invk_tmpl, name_ary, rslt_bfr);
|
||||
byte[] rslt_key = rslt_bfr.Xto_bry_and_clear();
|
||||
Object o = wiki.Cache_mgr().Tmpl_result_cache().Fetch(rslt_key);
|
||||
Object o = wiki.Cache_mgr().Tmpl_result_cache().Get_by(rslt_key);
|
||||
Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Cur_page().Tmpl_prepend_mgr().Bgn(bfr);
|
||||
if (o != null) {
|
||||
byte[] rslt = (byte[])o;
|
||||
@@ -269,7 +269,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk {
|
||||
if (Cache_enabled) {
|
||||
byte[] rslt_val = rslt_bfr.Xto_bry_and_clear();
|
||||
bfr.Add(rslt_val);
|
||||
HashAdp cache = wiki.Cache_mgr().Tmpl_result_cache();
|
||||
Hash_adp cache = wiki.Cache_mgr().Tmpl_result_cache();
|
||||
cache.Del(rslt_key);
|
||||
cache.Add(rslt_key, rslt_val);
|
||||
}
|
||||
@@ -281,7 +281,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk {
|
||||
break;
|
||||
}
|
||||
return rv;
|
||||
} private static final byte[] Ary_unknown_bgn = Bry_.new_ascii_("(? [["), Ary_unknown_end = Bry_.new_ascii_("]] ?)"), Ary_dynamic_is_blank = Bry_.new_ascii_("dynamic is blank");
|
||||
} private static final byte[] Ary_unknown_bgn = Bry_.new_a7("(? [["), Ary_unknown_end = Bry_.new_a7("]] ?)"), Ary_dynamic_is_blank = Bry_.new_a7("dynamic is blank");
|
||||
private boolean Popup_skip(Xop_ctx ctx, byte[] ttl, Bry_bfr bfr) {
|
||||
boolean skip = false;
|
||||
skip = this.Src_end() - this.Src_bgn() > ctx.Tmpl_tkn_max();
|
||||
|
||||
@@ -210,7 +210,7 @@ public class Xot_invk_wkr_basic_tst {
|
||||
@Test public void Missing_foreign() {
|
||||
Xow_ns ns = fxt.Wiki().Ns_mgr().Ns_template();
|
||||
byte[] old_ns = ns.Name_bry();
|
||||
ns.Name_bry_(Bry_.new_ascii_("Template_foreign"));
|
||||
ns.Name_bry_(Bry_.new_a7("Template_foreign"));
|
||||
fxt.Test_parse_tmpl_str("{{Missing}}", "[[:Template_foreign:Missing]]");
|
||||
ns.Name_bry_(old_ns);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ public class Xot_prm_tkn extends Xop_tkn_itm_base {
|
||||
else { // prm is idx; EX: "{{{1}}}"
|
||||
// int invk_args_len = caller.Args_len();
|
||||
// if (prm_idx > invk_args_len) {Tmpl_write_missing(ctx, src, caller, bfr); return true;}
|
||||
arg_nde = caller.Args_eval_by_idx(src, prm_idx - ListAdp_.Base1); // MW args are Base1; EX: {{test|a|b}}; a is {{{1}}}; b is {{{2}}}
|
||||
arg_nde = caller.Args_eval_by_idx(src, prm_idx - List_adp_.Base1); // MW args are Base1; EX: {{test|a|b}}; a is {{{1}}}; b is {{{2}}}
|
||||
if (arg_nde == null) {Tmpl_write_missing(ctx, src, caller, bfr); return true;} // EX: handles "{{{1}}}{{{2}}}" "{{test|a|keyd=b}}" -> "a{{{2}}}"
|
||||
}
|
||||
Arg_itm_tkn arg_val = arg_nde.Val_tkn();
|
||||
|
||||
@@ -98,11 +98,11 @@ public class Xot_tmpl_wtr {
|
||||
tkn.Tmpl_evaluate(ctx, src, Xot_invk_temp.Page_is_caller.Src_(src), rslt_bfr);
|
||||
}
|
||||
catch (Exception exc) {
|
||||
Err_string = String_.new_utf8_(src, tkn.Src_bgn(), tkn.Src_end()) + "|" + ClassAdp_.NameOf_obj(exc) + "|" + Err_.Message_lang(exc);
|
||||
Err_string = String_.new_u8(src, tkn.Src_bgn(), tkn.Src_end()) + "|" + ClassAdp_.NameOf_obj(exc) + "|" + Err_.Message_lang(exc);
|
||||
if (Env_.Mode_testing())
|
||||
throw Err_.err_(exc, Err_string);
|
||||
else
|
||||
ctx.App().Usr_dlg().Warn_many("", "", "failed to write tkn: page=~{0} err=~{1}", String_.new_utf8_(ctx.Cur_page().Ttl().Page_db()), Err_string);
|
||||
ctx.App().Usr_dlg().Warn_many("", "", "failed to write tkn: page=~{0} err=~{1}", String_.new_u8(ctx.Cur_page().Ttl().Page_db()), Err_string);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user