mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.8.1.1
This commit is contained in:
@@ -67,7 +67,7 @@ public class Xop_curly_wkr implements Xop_ctx_wkr {
|
||||
int curly_end_dash = lxr_end_pos;
|
||||
if (curly_end_dash < src_len && src[curly_end_dash] == Byte_ascii.Dash) { // "-" exists after curlies; EX: "}}-"
|
||||
if (bgn_tkn_len > 2 && end_tkn_len > 2) { // more than 3 curlies at bgn / end with flanking dashes; EX: "-{{{ }}}-"; NOTE: 3 is needed b/c 2 will never be reduced; EX: "-{{" will always be "-" and "{{", not "-{" and "{"
|
||||
int numeric_val = Bry_.Xto_int_or(src, bgn_tkn.Src_end(), lxr_bgn_pos, -1);
|
||||
int numeric_val = Bry_.To_int_or(src, bgn_tkn.Src_end(), lxr_bgn_pos, -1);
|
||||
if ( numeric_val != -1 // do not apply if numeric val; EX:"-{{{0}}}-" vs "-{{{#expr:0}}}-" sr.w:Template:Link_FA
|
||||
&& bgn_tkn_len == 3 && end_tkn_len == 3 // exactly 3 tokens; assume param token; "-{{{" -> "-" + "{{{" x> -> "-{" + "{{"; if unbalanced (3,4 or 4,3) fall into code below
|
||||
) {
|
||||
|
||||
@@ -64,7 +64,8 @@ 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_a7("<span class=\"error\">Template loop detected:" + String_.new_u8(name) + "</span>");
|
||||
bfr.Add_str_a7("<!-- template loop detected:" + gplx.html.Html_utl.Escape_html_as_str(String_.new_u8(name)) + " -->");
|
||||
Xoa_app_.Usr_dlg().Warn_many("", "", "template loop detected: url=~{0} name=~{1}", ctx.Cur_page().Url().To_str(), name);
|
||||
return false;
|
||||
}
|
||||
boolean rv = true;
|
||||
|
||||
@@ -38,7 +38,7 @@ public class Xot_invk_mock implements Xot_invk {
|
||||
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.Get_at(i);
|
||||
if (nde.KeyTkn_exists()) {
|
||||
int key_int = Bry_.Xto_int_or(nde.Key_tkn().Dat_ary(), -1);
|
||||
int key_int = Bry_.To_int_or(nde.Key_tkn().Dat_ary(), -1);
|
||||
if (key_int == -1)
|
||||
continue;
|
||||
else { // key is numeric
|
||||
@@ -53,7 +53,7 @@ public class Xot_invk_mock implements Xot_invk {
|
||||
if ((cur + idx_adj) == idx) return nde;
|
||||
else ++cur;
|
||||
}
|
||||
return Args_get_by_key(src, Bry_.XtoStrBytesByInt(idx + 1, 1));
|
||||
return Args_get_by_key(src, Bry_.To_a7_bry(idx + 1, 1));
|
||||
}
|
||||
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);}
|
||||
|
||||
@@ -50,9 +50,9 @@ public class Xot_invk_temp implements Xot_invk {
|
||||
}
|
||||
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
|
||||
if (arg_key_hash == null) arg_key_hash = Hash_adp_bry.cs(); // PERF: lazy
|
||||
arg_key_hash.Add_if_dupe_use_nth(key, arg);
|
||||
int key_as_int = Bry_.Xto_int_or(key, Int_.MinValue);
|
||||
int key_as_int = Bry_.To_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 - List_adp_.Base1, arg);
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk {
|
||||
switch (defn.Defn_tid()) {
|
||||
case Xot_defn_.Tid_null: // defn is unknown
|
||||
if (ignore_hash == null) { // ignore SafeSubst templates
|
||||
ignore_hash = Hash_adp_bry.ci_ascii_();
|
||||
ignore_hash = Hash_adp_bry.ci_a7();
|
||||
ignore_hash.Add_str_obj("Citation needed{{subst", String_.Empty);
|
||||
ignore_hash.Add_str_obj("Clarify{{subst", String_.Empty);
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ public class Xot_invk_wkr_basic_tst {
|
||||
@Test public void Recurse() {
|
||||
fxt.Init_defn_clear();
|
||||
fxt.Init_defn_add("test_recurse", "bgn:{{test_recurse}}:end");
|
||||
fxt.Test_parse_page_all_str("{{test_recurse}}", "bgn:<span class=\"error\">Template loop detected:test_recurse</span>:end");
|
||||
fxt.Test_parse_page_all_str("{{test_recurse}}", "bgn::end");
|
||||
fxt.Init_defn_clear();
|
||||
}
|
||||
@Test public void Ws_nl() {
|
||||
|
||||
@@ -34,7 +34,7 @@ public class Xot_prm_tkn extends Xop_tkn_itm_base {
|
||||
if (find_tkn_static) { // subs_are_static, so extract idx/key; EX: {{{a b}}} will have 3 subs which are all static; {{{a{{{1}}}b}}} will be dynamic
|
||||
int find_tkn_bgn = find_tkn.Dat_bgn(), find_tkn_end = find_tkn.Dat_end();
|
||||
if (find_tkn_end - find_tkn_bgn > 0) { // NOTE: handles empty find_tkns; EX: {{{|safesubst:}}}
|
||||
prm_idx = Bry_.Xto_int_or(src, find_tkn_bgn, find_tkn_end, -1); // parse as number first; note that bgn,end should not include ws; EX: " 1 " will fail
|
||||
prm_idx = Bry_.To_int_or(src, find_tkn_bgn, find_tkn_end, -1); // parse as number first; note that bgn,end should not include ws; EX: " 1 " will fail
|
||||
if (prm_idx == -1) prm_key = Bry_.Mid(src, find_tkn_bgn, find_tkn_end);// not a number; parse as key
|
||||
}
|
||||
}
|
||||
@@ -47,7 +47,7 @@ public class Xot_prm_tkn extends Xop_tkn_itm_base {
|
||||
Bry_bfr find_bfr = Bry_bfr.new_();
|
||||
for (int i = 0; i < subs_len; i++)
|
||||
find_tkn.Subs_get(i).Tmpl_evaluate(ctx, src, caller, find_bfr);
|
||||
prm_idx = Bry_.Xto_int_or_trim(find_bfr.Bfr(), 0, find_bfr.Len(), -1); // parse as number first; NOTE: trim needed to transform "{{{ 1 }}}" to "1"; it.w:Portale:Giochi_da_tavolo; DATE:2014-02-09
|
||||
prm_idx = Bry_.To_int_or__trim_ws(find_bfr.Bfr(), 0, find_bfr.Len(), -1); // parse as number first; NOTE: trim needed to transform "{{{ 1 }}}" to "1"; it.w:Portale:Giochi_da_tavolo; DATE:2014-02-09
|
||||
if (prm_idx == -1)
|
||||
prm_key = find_bfr.Xto_bry_and_clear_and_trim(); // not a number; parse as key; NOTE: must trim; PAGE:en.w:William Shakespeare; {{Relatebardtree}}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public class Xot_tmpl_wtr {
|
||||
tkn.Tmpl_evaluate(ctx, src, Xot_invk_temp.Page_is_caller.Src_(src), rslt_bfr);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Err_string = String_.new_u8(src, tkn.Src_bgn(), tkn.Src_end()) + "|" + ClassAdp_.NameOf_obj(e) + "|" + Err_.Message_lang(e);
|
||||
Err_string = String_.new_u8(src, tkn.Src_bgn(), tkn.Src_end()) + "|" + ClassAdp_.NameOf_obj(e) + "|" + Err_.cast_or_make(e).To_str__log();
|
||||
if (Env_.Mode_testing())
|
||||
throw Err_.new_exc(e, "xo", Err_string);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user