diff --git a/100_core/src/gplx/Bry_.java b/100_core/src/gplx/Bry_.java index 0ca394c86..c720c0388 100644 --- a/100_core/src/gplx/Bry_.java +++ b/100_core/src/gplx/Bry_.java @@ -84,6 +84,37 @@ public class Bry_ { } return rv; } + public static byte[] New_u8_nl_apos(String... lines) { + Bry_bfr bfr = Bry_bfr_.Get(); + try { + New_u8_nl_apos(bfr, lines); + return bfr.To_bry_and_clear(); + } + finally {bfr.Mkr_rls();} + } + public static void New_u8_nl_apos(Bry_bfr bfr, String... lines) { + int lines_len = lines.length; + for (int i = 0; i < lines_len; ++i) { + if (i != 0) bfr.Add_byte_nl(); + byte[] line = Bry_.new_u8(lines[i]); + boolean dirty = false; + int prv = 0; + int line_len = line.length; + for (int j = 0; j < line_len; ++j) { + byte b = line[j]; + if (b == Byte_ascii.Apos) { + bfr.Add_mid(line, prv, j); + bfr.Add_byte(Byte_ascii.Quote); + dirty = true; + prv = j + 1; + } + } + if (dirty) + bfr.Add_mid(line, prv, line_len); + else + bfr.Add(line); + } + } public static void new_u8__write(String str, int str_len, byte[] bry, int bry_pos) { for (int i = 0; i < str_len; ++i) { char c = str.charAt(i); diff --git a/100_core/src/gplx/Bry__tst.java b/100_core/src/gplx/Bry__tst.java index 31b152e7f..934478846 100644 --- a/100_core/src/gplx/Bry__tst.java +++ b/100_core/src/gplx/Bry__tst.java @@ -271,6 +271,11 @@ public class Bry__tst { fxt.Test_Mid_w_trim("", ""); // handle 0 bytes fxt.Test_Mid_w_trim(" ", ""); // handle all ws } + @Test public void New_u8_nl_apos() { + fxt.Test__new_u8_nl_apos(String_.Ary("a"), "a"); + fxt.Test__new_u8_nl_apos(String_.Ary("a", "b"), "a\nb"); + fxt.Test__new_u8_nl_apos(String_.Ary("a", "b'c", "d"), "a\nb\"c\nd"); + } } class Bry__fxt { public void Test_trim_end(String raw, byte trim, String expd) { @@ -284,4 +289,7 @@ class Bry__fxt { public void Test_add_w_dlm(String dlm, String[] itms, String expd) {Tfds.Eq(expd, String_.new_u8(Bry_.Add_w_dlm(Bry_.new_u8(dlm), Bry_.Ary(itms))));} public void Test_add_w_dlm(byte dlm, String[] itms, String expd) {Tfds.Eq(expd, String_.new_u8(Bry_.Add_w_dlm(dlm, Bry_.Ary(itms))));} public void Test_Mid_w_trim(String src, String expd) {byte[] bry = Bry_.new_u8(src); Tfds.Eq(expd, String_.new_u8(Bry_.Mid_w_trim(bry, 0, bry.length)));} + public void Test__new_u8_nl_apos(String[] ary, String expd) { + Tfds.Eq_str_lines(expd, String_.new_u8(Bry_.New_u8_nl_apos(ary))); + } } diff --git a/100_core/src/gplx/String_.java b/100_core/src/gplx/String_.java index f1c37b842..0f8ae794f 100644 --- a/100_core/src/gplx/String_.java +++ b/100_core/src/gplx/String_.java @@ -319,6 +319,14 @@ public class String_ implements GfoInvkAble { sb.Add(val).Add("\n"); return sb.To_str(); } + public static String Concat_lines_nl_apos_skip_last(String... lines) { + Bry_bfr bfr = Bry_bfr_.Get(); + try { + Bry_.New_u8_nl_apos(bfr, lines); + return bfr.To_str_and_clear(); + } + finally {bfr.Mkr_rls();} + } public static String Concat_lines_nl_skip_last(String... ary) { String_bldr sb = String_bldr_.new_(); int ary_len = ary.length; int ary_end = ary_len - 1; diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm.java b/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm.java index 3ed228c05..6cb7a3d0b 100644 --- a/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm.java +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm.java @@ -17,38 +17,7 @@ along with this program. If not, see . */ package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; import gplx.langs.jsons.*; -interface Mustache_doc_itm { - byte[] Get_by_key(byte[] key); - Mustache_doc_itm Get_owner(); - void Move_next(); - void Move_down(byte[] key); - void Move_up(); -} -class Mustache_doc_itm_ { - public static final byte[] Null_val = null; - public static final Mustache_doc_itm Null_itm = null; -} -class Mustache_doc_itm__json implements Mustache_doc_itm { - // private Json_doc jdoc; - private final List_adp stack = List_adp_.new_(); - private Json_nde cur; private int cur_idx = -1; - public void Init_by_jdoc(Json_doc jdoc) { - // this.jdoc = jdoc; - this.cur = jdoc.Root_nde(); - } - public byte[] Get_by_key(byte[] key) {return cur.Get_bry_or_null(key);} - public Mustache_doc_itm Get_owner() {return Mustache_doc_itm_.Null_itm;} - public void Move_next() { - ++cur_idx; - // cur = cur.Owner().Get_at(); - } - public void Move_down(byte[] key) { - stack.Add(cur); - cur_idx = 0; - cur = (Json_nde)cur.Get_itm(key); - } - public void Move_up() { - if (cur_idx == 0) {} - cur = (Json_nde)stack.Get_at_last(); - } +public interface Mustache_doc_itm { + byte[] Get_prop(String key); + Mustache_doc_itm[] Get_subs(String key); } diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm_.java b/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm_.java new file mode 100644 index 000000000..27857d680 --- /dev/null +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_doc_itm_.java @@ -0,0 +1,31 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; +public class Mustache_doc_itm_ { + public static final byte[] Null_val = null; + public static final Mustache_doc_itm Null_itm = null; + public static final Mustache_doc_itm Itm__bool__y = new Mustache_doc_itm__bool(Bool_.Y), Itm__bool__n = new Mustache_doc_itm__bool(Bool_.N); + public static final Mustache_doc_itm[] Ary__empty = new Mustache_doc_itm[0], Ary__bool__y = new Mustache_doc_itm[] {Itm__bool__y}, Ary__bool__n = new Mustache_doc_itm[] {Itm__bool__n}; + public static Mustache_doc_itm[] Ary__bool(boolean v) {return v ? Ary__bool__y : Ary__bool__n;} +} +class Mustache_doc_itm__bool implements Mustache_doc_itm { + public Mustache_doc_itm__bool(boolean val) {this.val = val;} + public boolean Val() {return val;} private final boolean val; + public byte[] Get_prop(String key) {return Mustache_doc_itm_.Null_val;} + public Mustache_doc_itm[] Get_subs(String key) {return Mustache_doc_itm_.Ary__empty;} +} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_dom_itm.java b/400_xowa/src/gplx/langs/mustaches/Mustache_dom_itm.java deleted file mode 100644 index a86fcff32..000000000 --- a/400_xowa/src/gplx/langs/mustaches/Mustache_dom_itm.java +++ /dev/null @@ -1,88 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; -interface Mustache_elem_itm { - int Tid(); - byte[] Key(); - Mustache_elem_itm[] Subs_ary(); - void Subs_ary_(Mustache_elem_itm[] v); - void Render(Bry_bfr bfr, Mustache_render_ctx ctx); -} -class Mustache_elem_itm_ {// for types, see http://mustache.github.io/mustache.5.html - public static final int Tid__root = 0, Tid__text = 1, Tid__variable = 2, Tid__escape = 3, Tid__section = 4, Tid__inverted = 5, Tid__comment = 6, Tid__partial = 7, Tid__delimiter = 8; - public static final Mustache_elem_itm[] Ary_empty = new Mustache_elem_itm[0]; -} -abstract class Mustache_elem_base implements Mustache_elem_itm { - public Mustache_elem_base(int tid, byte[] key) {this.tid = tid; this.key = key;} - public int Tid() {return tid;} private final int tid; - public byte[] Key() {return key;} private final byte[] key; - @gplx.Virtual public Mustache_elem_itm[] Subs_ary() {return Mustache_elem_itm_.Ary_empty;} - @gplx.Virtual public void Subs_ary_(Mustache_elem_itm[] v) {} - @gplx.Virtual public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) {} -} -class Mustache_elem_root extends Mustache_elem_base { // EX: {{variable}} -> <a> - private Mustache_elem_itm[] subs_ary; - public Mustache_elem_root() {super(Mustache_elem_itm_.Tid__root, Bry_.Empty);} - @Override public Mustache_elem_itm[] Subs_ary() {return subs_ary;} - @Override public void Subs_ary_(Mustache_elem_itm[] v) {subs_ary = v;} - @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { - int subs_len = subs_ary.length; - for (int i = 0; i < subs_len; ++i) { - Mustache_elem_itm sub = subs_ary[i]; - sub.Render(bfr, ctx); - } - } -} -class Mustache_elem_text extends Mustache_elem_base { // EX: text -> text - private final byte[] src; private final int src_bgn, src_end; - public Mustache_elem_text(byte[] src, int src_bgn, int src_end) {super(Mustache_elem_itm_.Tid__text, Bry_.Empty); - this.src = src; - this.src_bgn = src_bgn; - this.src_end = src_end; - } - @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { - bfr.Add_mid(src, src_bgn, src_end); - } -} -class Mustache_elem_variable extends Mustache_elem_base { // EX: {{variable}} -> <a> - public Mustache_elem_variable(byte[] key) {super(Mustache_elem_itm_.Tid__variable, key);} - @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { - byte[] key = this.Key(); - byte[] val = ctx.Render_variable(key); - if (val != Mustache_doc_itm_.Null_val) // if not found, return empty String by default - bfr.Add(val); - } -} -class Mustache_elem_escape extends Mustache_elem_base { // EX: {{{variable}}} -> - public Mustache_elem_escape(byte[] key) {super(Mustache_elem_itm_.Tid__escape, key);} -} -class Mustache_elem_section extends Mustache_elem_base { // EX: {{#section}}val{{/section}} -> val (if boolean) or valvalval (if list) - public Mustache_elem_section(byte[] key) {super(Mustache_elem_itm_.Tid__section, key);} -} -class Mustache_elem_inverted extends Mustache_elem_base { // EX: {{^section}}missing{{/section}} -> missing - public Mustache_elem_inverted(byte[] key) {super(Mustache_elem_itm_.Tid__inverted, key);} -} -class Mustache_elem_comment extends Mustache_elem_base { // EX: {{!section}}commentent{{/section}} -> - public Mustache_elem_comment(byte[] key) {super(Mustache_elem_itm_.Tid__inverted, key);} -} -class Mustache_elem_partial extends Mustache_elem_base { // EX: {{>a}} -> abc (deferred eval) - public Mustache_elem_partial(byte[] key) {super(Mustache_elem_itm_.Tid__partial, key);} -} -class Mustache_elem_delimiter extends Mustache_elem_base {// EX: {{=<% %>=}} -> <% variable %> - public Mustache_elem_delimiter(byte[] key) {super(Mustache_elem_itm_.Tid__delimiter, key);} -} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser.java b/400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser.java deleted file mode 100644 index 9ec7fef54..000000000 --- a/400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -XOWA: the XOWA Offline Wiki Application -Copyright (C) 2012 gnosygnu@gmail.com - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation, either version 3 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . -*/ -package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; -import gplx.core.btries.*; -class Mustache_itm_parser { - private byte[] src; private int src_end; - private final Mustache_tkn_def tkn_def = new Mustache_tkn_def(); - public Mustache_elem_itm Parse(byte[] src, int src_bgn, int src_end) { - this.src = src; this.src_end = src_end; - Mustache_elem_root root = new Mustache_elem_root(); - Parse_grp(root, src_bgn); - return root; - } - private void Parse_grp(Mustache_elem_itm owner, int src_bgn) { - List_adp subs_list = List_adp_.new_(); - int pos = src_bgn; - boolean loop = true; - while (loop) { - int tkn_lhs_bgn = Bry_find_.Find_fwd(src, tkn_def.Variable_lhs, pos, src_end); // next "{{" - if (tkn_lhs_bgn == Bry_find_.Not_found) { // no "{{"; EOS - loop = false; - tkn_lhs_bgn = src_end; - } - subs_list.Add(new Mustache_elem_text(src, pos, tkn_lhs_bgn)); // add everything between last "}}" and cur "{{" - if (!loop) break; - pos = Parse_itm(subs_list, tkn_lhs_bgn + tkn_def.Variable_lhs_len); - } - if (subs_list.Count() > 0) - owner.Subs_ary_((Mustache_elem_itm[])subs_list.To_ary_and_clear(Mustache_elem_itm.class)); - } - private int Parse_itm(List_adp subs_list, int tkn_lhs_end) { - if (tkn_lhs_end >= src_end) throw Fail(tkn_lhs_end, "early eos"); - byte b = src[tkn_lhs_end]; - int tkn_rhs_bgn = Bry_find_.Find_fwd(src, tkn_def.Variable_rhs, tkn_lhs_end, src_end); - if (tkn_rhs_bgn == Bry_find_.Not_found) throw Fail(tkn_lhs_end, "dangling tkn"); - byte[] tkn_val = Bry_.Mid(src, tkn_lhs_end, tkn_rhs_bgn); - Mustache_elem_itm elem = null; - byte rhs_chk_byte = Byte_ascii.Null; - switch (b) { - default: elem = new Mustache_elem_variable(tkn_val); break; - case Mustache_tkn_def.Comment: elem = new Mustache_elem_comment(tkn_val); break; - case Mustache_tkn_def.Partial: elem = new Mustache_elem_partial(tkn_val); break; - case Mustache_tkn_def.Delimiter_bgn: elem = new Mustache_elem_delimiter(tkn_val); rhs_chk_byte = Mustache_tkn_def.Delimiter_end; break; // TODO: change tkn_def{{=<% %>=}} - case Mustache_tkn_def.Escape_bgn: elem = new Mustache_elem_escape(tkn_val); rhs_chk_byte = Mustache_tkn_def.Escape_end; break; - case Mustache_tkn_def.Section: elem = new Mustache_elem_section(tkn_val); break; - case Mustache_tkn_def.Inverted: elem = new Mustache_elem_inverted(tkn_val); break; - case Mustache_tkn_def.Grp_end: break; - } - subs_list.Add(elem); - if (rhs_chk_byte != Byte_ascii.Null) { - if (src[tkn_rhs_bgn] != rhs_chk_byte) throw Fail(tkn_lhs_end, "invalid check byte"); - ++tkn_rhs_bgn; - } - return tkn_rhs_bgn + tkn_def.Variable_rhs_len; - } - private Err Fail(int pos, String fmt, Object... args) { - return Err_.new_("mustache", fmt, "excerpt", Bry_.Mid_by_len_safe(src, pos, 32)); - } -} -class Mustache_tkn_def { - public byte[] Variable_lhs = Dflt_variable_lhs; - public byte[] Variable_rhs = Dflt_variable_rhs; - public int Variable_lhs_len; - public int Variable_rhs_len; - public static final byte[] - Dflt_variable_lhs = Bry_.new_a7("{{") - , Dflt_variable_rhs = Bry_.new_a7("}}") - ; - public static final byte - Escape_bgn = Byte_ascii.Curly_bgn // {{{escape}}} - , Escape_end = Byte_ascii.Curly_end // {{{escape}}} - , Section = Byte_ascii.Hash // {{#section}} - , Grp_end = Byte_ascii.Slash // {{/section}} - , Inverted = Byte_ascii.Pow // {{^inverted}} - , Comment = Byte_ascii.Bang // {{!comment}} - , Partial = Byte_ascii.Angle_bgn // {{>partial}} - , Delimiter_bgn = Byte_ascii.Eq // {{=<% %>=}} - , Delimiter_end = Byte_ascii.Curly_end // {{=<% %>=}} - ; - public Mustache_tkn_def() { - Variable_lhs_len = Variable_lhs.length; - Variable_rhs_len = Variable_rhs.length; - } -} -/* -root -txt -key -txt -section - txt - key - txt -txt -*/ diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_itm_render_tst.java b/400_xowa/src/gplx/langs/mustaches/Mustache_itm_render_tst.java new file mode 100644 index 000000000..97146bffe --- /dev/null +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_itm_render_tst.java @@ -0,0 +1,133 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; +import org.junit.*; import gplx.core.primitives.*; +public class Mustache_itm_render_tst { + private final Mustache_itm_render_fxt fxt = new Mustache_itm_render_fxt(); + @Test public void Text() { + fxt.Test__parse("a b c", "a b c"); + } + @Test public void Variable() { + fxt.Init__root(fxt.Make_mock(0).Add_prop("prop1", "1").Add_prop("prop2", "2")); + fxt.Test__parse("{{prop1}}", "1"); + fxt.Test__parse("a{{prop1}}b{{prop2}}c", "a1b2c"); + } + @Test public void Escape() { + fxt.Init__root(fxt.Make_mock(0).Add_prop("prop1", "<")); + fxt.Test__parse("{{{prop1}}}", "<"); + fxt.Test__parse("{{prop1}}", "<"); + } + @Test public void Section_bool() { + fxt.Init__root(fxt.Make_mock(0).Add_bool_y("bool_y").Add_bool_n("bool_n")); + fxt.Test__parse("a{{#bool_y}}b{{/bool_y}}c", "abc"); + fxt.Test__parse("a{{#bool_n}}b{{/bool_n}}c", "ac"); + fxt.Test__parse("a{{#bool_y}}b{{/bool_y}}c{{#bool_n}}d{{/bool_n}}e", "abce"); + } + @Test public void Section_ws() { + fxt.Init__root(fxt.Make_mock(0).Add_bool_y("bool_y")); + fxt.Test__parse("a\n {{#bool_y}} \nb\n {{/bool_y}} \nc", "a\nb\nc"); + } + @Test public void Section_subs_flat() { + fxt.Init__root(fxt.Make_mock(0).Add_subs("subs1" + , fxt.Make_mock(1).Add_prop("prop1", "1").Add_subs("subs2") + , fxt.Make_mock(2).Add_prop("prop1", "2").Add_subs("subs2") + )); + fxt.Test__parse("a{{#subs1}}({{prop1}}){{/subs1}}d", "a(1)(2)d"); + } + @Test public void Section_subs_nest_1() { + fxt.Init__root + ( fxt.Make_mock(0).Add_subs("subs1" + , fxt.Make_mock(1).Add_prop("prop1", "a").Add_subs("subs2" + , fxt.Make_mock(11).Add_prop("prop2", "1") + , fxt.Make_mock(12).Add_prop("prop2", "2")) + )); + fxt.Test__parse + ( "{{#subs1}}{{prop1}}{{#subs2}}{{prop2}}{{/subs2}}{{/subs1}}" + , "a12" + ); + } + @Test public void Section_subs_nest_2() { + fxt.Init__root + ( fxt.Make_mock(0).Add_subs("subs1" + , fxt.Make_mock(1).Add_prop("prop1", "a").Add_subs("subs2" + , fxt.Make_mock(11).Add_prop("prop2", "1") + , fxt.Make_mock(12).Add_prop("prop2", "2") + ) + , fxt.Make_mock(2).Add_prop("prop1", "b") + ) + ); + fxt.Test__parse + ( "{{#subs1}}{{prop1}}{{#subs2}}{{prop2}}{{/subs2}}{{/subs1}}" + , "a12b" + ); + } + @Test public void Section_subs_nest_3() { + fxt.Init__root + ( fxt.Make_mock(0).Add_subs("subs1" + , fxt.Make_mock(1).Add_prop("prop1", "a").Add_subs("subs2" + , fxt.Make_mock(11).Add_prop("prop2", "1") + , fxt.Make_mock(12).Add_prop("prop2", "2") + ) + , fxt.Make_mock(2).Add_prop("prop1", "b").Add_subs("subs2" + , fxt.Make_mock(21).Add_prop("prop2", "3") + , fxt.Make_mock(22).Add_prop("prop2", "4") + ) + ) + ); + fxt.Test__parse + ( "{{#subs1}}{{prop1}}{{#subs2}}{{prop2}}{{/subs2}}{{prop1}}{{/subs1}}" + , "a12ab34b" + ); + } +} +class Mustache_itm_render_fxt { + private final Mustache_tkn_parser parser = new Mustache_tkn_parser(); + private final Mustache_render_ctx ctx = new Mustache_render_ctx(); + private final Bry_bfr tmp_bfr = Bry_bfr.new_(); + private Mustache_doc_itm__mock root; + public Mustache_doc_itm__mock Make_mock(int id) {return new Mustache_doc_itm__mock(id);} + public void Init__root(Mustache_doc_itm__mock v) {this.root = v;} + public void Test__parse(String src_str, String expd) { + byte[] src_bry = Bry_.new_a7(src_str); + Mustache_tkn_itm actl_itm = parser.Parse(src_bry, 0, src_bry.length); + ctx.Init(root); + actl_itm.Render(tmp_bfr, ctx); + Tfds.Eq_str_lines(expd, tmp_bfr.To_str_and_clear()); + } +} +class Mustache_doc_itm__mock implements Mustache_doc_itm { + private final Hash_adp hash_prop = Hash_adp_.new_(), hash_bool = Hash_adp_.new_(), hash_subs = Hash_adp_.new_(); + public Mustache_doc_itm__mock(int id) {this.id = id;} + public int id; + public Mustache_doc_itm__mock Add_prop(String key, String val) {hash_prop.Add(key, Bry_.new_u8(val)); return this;} + public Mustache_doc_itm__mock Add_bool_y(String key) {hash_bool.Add(key, Bool_obj_ref.y_()); return this;} + public Mustache_doc_itm__mock Add_bool_n(String key) {hash_bool.Add(key, Bool_obj_ref.n_()); return this;} + public Mustache_doc_itm__mock Add_subs(String key, Mustache_doc_itm__mock... ary) {hash_subs.Add(key, ary); return this;} + public byte[] Get_prop(String key) { + byte[] rv = (byte[])hash_prop.Get_by(key); + return rv == null ? Mustache_doc_itm_.Null_val : rv; + } + public Mustache_doc_itm[] Get_subs(String key) { + Object rv = hash_bool.Get_by(key); + if (rv != null) { + boolean bool_val = ((Bool_obj_ref)rv).Val(); + return bool_val ? Mustache_doc_itm_.Ary__bool__y : Mustache_doc_itm_.Ary__bool__n; + } + return (Mustache_doc_itm__mock[])hash_subs.Get_by(key); + } +} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_render_ctx.java b/400_xowa/src/gplx/langs/mustaches/Mustache_render_ctx.java index 489bde598..1e7d0f7d8 100644 --- a/400_xowa/src/gplx/langs/mustaches/Mustache_render_ctx.java +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_render_ctx.java @@ -16,17 +16,67 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; -class Mustache_render_ctx { - private Mustache_doc_itm doc; - public void Init_dom_doc(Mustache_doc_itm doc) {this.doc = doc;} - public byte[] Render_variable(byte[] key) { +public class Mustache_render_ctx { + private final List_adp stack = List_adp_.new_(); + private Mustache_doc_itm cur; + private Mustache_doc_itm[] subs; private int subs_idx, subs_len; private boolean cur_is_bool; + public Mustache_render_ctx Init(Mustache_doc_itm cur) { + this.cur = cur; + this.subs = null; + this.subs_idx = subs_len = 0; this.cur_is_bool = false; + return this; + } + public byte[] Render_variable(String key) { byte[] rv = Mustache_doc_itm_.Null_val; - Mustache_doc_itm cur = doc; - while (cur != Mustache_doc_itm_.Null_itm) { - rv = doc.Get_by_key(key); + Mustache_doc_itm itm = cur; + while (itm != Mustache_doc_itm_.Null_itm) { + rv = cur.Get_prop(key); if (rv != Mustache_doc_itm_.Null_val) break; - cur = cur.Get_owner(); + else break; + // TODO: itm = itm.Get_owner(); } return rv; } + public void Section_bgn(String key) { + subs = cur.Get_subs(key); if (subs == null) subs = Mustache_doc_itm_.Ary__empty; + subs_len = subs.length; + subs_idx = -1; + cur_is_bool = false; + } + public boolean Section_do() { + if (++subs_idx >= subs_len) return false; + Mustache_doc_itm sub = subs[subs_idx]; + if (subs_idx == 0) { // special logic to handle 1st item; note that there always be at least one item + if (subs_len == 1) { + if (sub == Mustache_doc_itm_.Itm__bool__y) {cur_is_bool = true; return Bool_.Y;} + else if (sub == Mustache_doc_itm_.Itm__bool__n) {cur_is_bool = true; return Bool_.N;} + } + Mustache_stack_itm stack_itm = new Mustache_stack_itm(cur, subs, subs_idx, subs_len); // note that cur is "owner" since subs_idx == 0 + stack.Add(stack_itm); + } + cur = sub; + return true; + } + public void Section_end() { + if (cur_is_bool) return; + if (stack.Count() == 0) return; + Mustache_stack_itm itm = (Mustache_stack_itm)List_adp_.Pop(stack); + subs = itm.subs; + subs_len = itm.subs_len; + subs_idx = itm.subs_idx; + cur = itm.cur; + // cur = subs_idx < subs_len ? subs[subs_idx] : null; + } +} +class Mustache_stack_itm { + public Mustache_stack_itm(Mustache_doc_itm cur, Mustache_doc_itm[] subs, int subs_idx, int subs_len) { + this.cur = cur; + this.subs = subs; + this.subs_idx = subs_idx; + this.subs_len = subs_len; + } + public Mustache_doc_itm cur; + public Mustache_doc_itm[] subs; + public int subs_idx; + public int subs_len; } diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_def.java b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_def.java new file mode 100644 index 000000000..4ad8ecabb --- /dev/null +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_def.java @@ -0,0 +1,44 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; +class Mustache_tkn_def { + public byte[] Variable_lhs = Dflt_variable_lhs; + public byte[] Variable_rhs = Dflt_variable_rhs; + public int Variable_lhs_len; + public int Variable_rhs_len; + public static final byte[] + Dflt_variable_lhs = Bry_.new_a7("{{") + , Dflt_variable_rhs = Bry_.new_a7("}}") + ; + public static final byte + Variable = Byte_ascii.Curly_end // {{=<% %>=}} + , Escape_bgn = Byte_ascii.Curly_bgn // {{{escape}}} + , Escape_end = Byte_ascii.Curly_end // {{{escape}}} + , Section = Byte_ascii.Hash // {{#section}} + , Grp_end = Byte_ascii.Slash // {{/section}} + , Inverted = Byte_ascii.Pow // {{^inverted}} + , Comment = Byte_ascii.Bang // {{!comment}} + , Partial = Byte_ascii.Angle_bgn // {{>partial}} + , Delimiter_bgn = Byte_ascii.Eq // {{=<% %>=}} + , Delimiter_end = Byte_ascii.Curly_end // {{=<% %>=}} + ; + public Mustache_tkn_def() { + Variable_lhs_len = Variable_lhs.length; + Variable_rhs_len = Variable_rhs.length; + } +} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_itm.java b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_itm.java new file mode 100644 index 000000000..fe8c01306 --- /dev/null +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_itm.java @@ -0,0 +1,111 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; +public interface Mustache_tkn_itm { + int Tid(); + String Key(); + Mustache_tkn_itm[] Subs_ary(); + void Subs_ary_(Mustache_tkn_itm[] v); + void Render(Bry_bfr bfr, Mustache_render_ctx ctx); +} +class Mustache_tkn_itm_ {// for types, see http://mustache.github.io/mustache.5.html + public static final int Tid__root = 0, Tid__text = 1, Tid__variable = 2, Tid__escape = 3, Tid__section = 4, Tid__inverted = 5, Tid__comment = 6, Tid__partial = 7, Tid__delimiter = 8; + public static final Mustache_tkn_itm[] Ary_empty = new Mustache_tkn_itm[0]; +} +abstract class Mustache_tkn_base implements Mustache_tkn_itm { + public Mustache_tkn_base(int tid, byte[] key_bry) {this.tid = tid; this.key = String_.new_u8(key_bry);} + public int Tid() {return tid;} private final int tid; + public String Key() {return key;} private final String key; + @gplx.Virtual public Mustache_tkn_itm[] Subs_ary() {return Mustache_tkn_itm_.Ary_empty;} + @gplx.Virtual public void Subs_ary_(Mustache_tkn_itm[] v) {throw Err_.new_unsupported();} // fail if trying to set and not overridden + @gplx.Virtual public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) {throw Err_.new_unsupported();} // should be abstract +} +class Mustache_tkn_root extends Mustache_tkn_base { // EX: {{variable}} -> <a> + private Mustache_tkn_itm[] subs_ary; + public Mustache_tkn_root() {super(Mustache_tkn_itm_.Tid__root, Bry_.Empty);} + @Override public Mustache_tkn_itm[] Subs_ary() {return subs_ary;} + @Override public void Subs_ary_(Mustache_tkn_itm[] v) {subs_ary = v;} + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { + int subs_len = subs_ary.length; + for (int i = 0; i < subs_len; ++i) { + Mustache_tkn_itm sub = subs_ary[i]; + sub.Render(bfr, ctx); + } + } +} +class Mustache_tkn_text extends Mustache_tkn_base { // EX: text -> text + private final byte[] src; private final int src_bgn, src_end; + public Mustache_tkn_text(byte[] src, int src_bgn, int src_end) {super(Mustache_tkn_itm_.Tid__text, Bry_.Empty); + this.src = src; + this.src_bgn = src_bgn; + this.src_end = src_end; + } + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { + bfr.Add_mid(src, src_bgn, src_end); + } +} +class Mustache_tkn_comment extends Mustache_tkn_base { // EX: {{!section}}comment{{/section}} -> + public Mustache_tkn_comment() {super(Mustache_tkn_itm_.Tid__comment, Bry_.Empty);} + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) {} +} +class Mustache_tkn_variable extends Mustache_tkn_base { // EX: {{variable}} -> <a> + public Mustache_tkn_variable(byte[] key) {super(Mustache_tkn_itm_.Tid__variable, key);} + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { + String key = this.Key(); + byte[] val = ctx.Render_variable(key); + if (val != Mustache_doc_itm_.Null_val) // if not found, return empty String by default + gplx.langs.htmls.Gfh_utl.Escape_html_to_bfr(bfr, val, 0, val.length, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y); + } +} +class Mustache_tkn_escape extends Mustache_tkn_base { // EX: {{{variable}}} -> + public Mustache_tkn_escape(byte[] key) {super(Mustache_tkn_itm_.Tid__escape, key);} + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { + String key = this.Key(); + byte[] val = ctx.Render_variable(key); + if (val != Mustache_doc_itm_.Null_val) // if not found, return empty String by default + bfr.Add(val); + } +} +class Mustache_tkn_section extends Mustache_tkn_base { // EX: {{#section}}val{{/section}} -> val (if boolean) or valvalval (if list) + private Mustache_tkn_itm[] subs_ary; + public Mustache_tkn_section(byte[] key) {super(Mustache_tkn_itm_.Tid__section, key);} + @Override public Mustache_tkn_itm[] Subs_ary() {return subs_ary;} + @Override public void Subs_ary_(Mustache_tkn_itm[] v) {subs_ary = v;} + @Override public void Render(Bry_bfr bfr, Mustache_render_ctx ctx) { + String key = this.Key(); + Mustache_tkn_itm[] subs_ary = this.Subs_ary(); + ctx.Section_bgn(key); + while (ctx.Section_do()) { + int subs_len = subs_ary.length; + for (int i = 0; i < subs_len; ++i) { + Mustache_tkn_itm sub = subs_ary[i]; + sub.Render(bfr, ctx); + } + } + ctx.Section_end(); + } +} +class Mustache_tkn_inverted extends Mustache_tkn_base { // EX: {{^section}}missing{{/section}} -> missing + public Mustache_tkn_inverted(byte[] key) {super(Mustache_tkn_itm_.Tid__inverted, key);} +} +class Mustache_tkn_partial extends Mustache_tkn_base { // EX: {{>a}} -> abc (deferred eval) + public Mustache_tkn_partial(byte[] key) {super(Mustache_tkn_itm_.Tid__partial, key);} +} +class Mustache_tkn_delimiter extends Mustache_tkn_base {// EX: {{=<% %>=}} -> <% variable %> + public Mustache_tkn_delimiter(byte[] key) {super(Mustache_tkn_itm_.Tid__delimiter, key);} +} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser.java b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser.java new file mode 100644 index 000000000..86757bf0c --- /dev/null +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser.java @@ -0,0 +1,153 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; +public class Mustache_tkn_parser { + private byte[] src; private int src_end; + private final Mustache_tkn_def tkn_def = new Mustache_tkn_def(); + public Mustache_tkn_itm Parse(byte[] src, int src_bgn, int src_end) { + this.src = src; this.src_end = src_end; + Mustache_tkn_root root = new Mustache_tkn_root(); + Parse_grp(root, src_bgn); + return root; + } + private int Parse_grp(Mustache_tkn_itm owner, int src_bgn) { + List_adp subs_list = List_adp_.new_(); + int txt_bgn = src_bgn; + boolean end_grp = false; + while (true) {// loop for "{{" + int lhs_bgn = Bry_find_.Find_fwd(src, tkn_def.Variable_lhs, txt_bgn, src_end); // next "{{" + if (lhs_bgn == Bry_find_.Not_found) { // no more "{{" + subs_list.Add(new Mustache_tkn_text(src, txt_bgn, src_end)); // add everything between prv "}}" and cur "{{" + break; + } + int lhs_end = lhs_bgn + tkn_def.Variable_lhs_len; + + Mustache_tkn_data tkn_data = new Mustache_tkn_data(src[lhs_end]); // preview tkn + lhs_end += tkn_data.lhs_end_adj; + + int rhs_bgn = Bry_find_.Find_fwd(src, tkn_def.Variable_rhs, lhs_end, src_end); // next "}}" + if (rhs_bgn == Bry_find_.Not_found) throw Fail(lhs_bgn, "unclosed tag"); // fail if no "}}" + int rhs_end = rhs_bgn + tkn_def.Variable_rhs_len; + if (tkn_data.rhs_bgn_chk != Byte_ascii.Null) { + if (src[rhs_bgn] != tkn_data.rhs_bgn_chk) throw Fail(lhs_end, "invalid check byte"); + ++rhs_end; // skip the chk_byte; note that bottom of function will skip "}}" by adding +2 + } + + + int txt_end = lhs_bgn; // get text tkn + if (tkn_data.ws_ignore) { + int new_txt_bgn = Trim_bwd_to_nl(src, txt_bgn, txt_end); + if (new_txt_bgn != -1) { + int new_txt_end = Trim_fwd_to_nl(src, rhs_end, src_end); + if (new_txt_end != -1) { + txt_end = new_txt_bgn; + rhs_end = new_txt_end == src_end ? src_end : new_txt_end + 1; + } + } + } + if (txt_end > txt_bgn) // ignore 0-byte text tkns; occurs when consecutive tkns; EX: {{v1}}{{v2}} will try to create text tkn between "}}{{" + subs_list.Add(new Mustache_tkn_text(src, txt_bgn, txt_end)); // add everything between prv "}}" and cur "{{" + + txt_bgn = Parse_itm(tkn_data, subs_list, lhs_end, rhs_bgn, rhs_end); // do parse + if (txt_bgn < 0) { // NOTE: txt_bgn < 0 means end grp + txt_bgn *= -1; + end_grp = true; + } + if (end_grp) break; + } + if (subs_list.Count() > 0) // don't create subs if no members + owner.Subs_ary_((Mustache_tkn_itm[])subs_list.To_ary_and_clear(Mustache_tkn_itm.class)); + return txt_bgn; + } + private int Parse_itm(Mustache_tkn_data tkn_data, List_adp subs_list, int lhs_end, int rhs_bgn, int rhs_end) { + byte[] val_bry = Bry_.Mid(src, lhs_end, rhs_bgn); + Mustache_tkn_base tkn = null; + switch (tkn_data.tid) { + default: throw Err_.new_unhandled(tkn_data.tid); + case Mustache_tkn_def.Variable: tkn = new Mustache_tkn_variable(val_bry); break; + case Mustache_tkn_def.Comment: tkn = new Mustache_tkn_comment(); break; + case Mustache_tkn_def.Partial: tkn = new Mustache_tkn_partial(val_bry); break; + case Mustache_tkn_def.Delimiter_bgn: tkn = new Mustache_tkn_delimiter(val_bry); break; // TODO: implement delimiter; EX: {{=<% %>=}} + case Mustache_tkn_def.Escape_bgn: tkn = new Mustache_tkn_escape(val_bry); break; + case Mustache_tkn_def.Section: tkn = new Mustache_tkn_section(val_bry); break; + case Mustache_tkn_def.Inverted: tkn = new Mustache_tkn_inverted(val_bry); break; + case Mustache_tkn_def.Grp_end: { + return -(rhs_end); // pop the stack + } + } + subs_list.Add(tkn); + if (tkn_data.parse_grp) { + return Parse_grp(tkn, rhs_end); + } + else + return rhs_end; + } + private Err Fail(int pos, String fmt, Object... args) { + return Err_.new_("mustache", fmt, "excerpt", Bry_.Mid_by_len_safe(src, pos, 32)); + } + private static int Trim_bwd_to_nl(byte[] src, int txt_bgn, int txt_end) { + int stop = txt_bgn - 1; + int pos = txt_end - 1; + while (pos > stop) { + byte b = src[pos]; + switch (b) { + case Byte_ascii.Tab: + case Byte_ascii.Space: --pos; break; + case Byte_ascii.Nl: return pos + 1; // 1 char after \n + default: return -1; + } + } + return -1; + } + private static int Trim_fwd_to_nl(byte[] src, int txt_bgn, int txt_end) { + int pos = txt_bgn; + while (pos < txt_end) { + byte b = src[pos]; + switch (b) { + case Byte_ascii.Tab: + case Byte_ascii.Space: ++pos; break; + case Byte_ascii.Nl: return pos; + default: return -1; + } + } + return -1; + } +} +class Mustache_tkn_data { + public int tid; + public int lhs_end_adj; + public byte rhs_bgn_chk; + public boolean parse_grp; + public boolean ws_ignore; + public Mustache_tkn_data(byte b) { + tid = b; + parse_grp = ws_ignore = false; + lhs_end_adj = 1; + rhs_bgn_chk = Byte_ascii.Null; + switch (b) { + default: lhs_end_adj = 0; tid = Mustache_tkn_def.Variable; break; + case Mustache_tkn_def.Comment: + case Mustache_tkn_def.Partial: + case Mustache_tkn_def.Grp_end: ws_ignore = true; break; + case Mustache_tkn_def.Delimiter_bgn: rhs_bgn_chk = Mustache_tkn_def.Delimiter_end; break; // check for "=}}"; TODO: implement delimiter; EX: {{=<% %>=}} + case Mustache_tkn_def.Escape_bgn: rhs_bgn_chk = Mustache_tkn_def.Escape_end; break; // check for "" + case Mustache_tkn_def.Section: + case Mustache_tkn_def.Inverted: ws_ignore = true; parse_grp = true; break; + } + } +} diff --git a/400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser_tst.java b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser_tst.java similarity index 81% rename from 400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser_tst.java rename to 400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser_tst.java index 972469777..9cf86fb81 100644 --- a/400_xowa/src/gplx/langs/mustaches/Mustache_itm_parser_tst.java +++ b/400_xowa/src/gplx/langs/mustaches/Mustache_tkn_parser_tst.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.langs.mustaches; import gplx.*; import gplx.langs.*; import org.junit.*; -public class Mustache_itm_parser_tst { - private final Mustache_itm_parser_fxt fxt = new Mustache_itm_parser_fxt(); +public class Mustache_tkn_parser_tst { + private final Mustache_tkn_parser_fxt fxt = new Mustache_tkn_parser_fxt(); @Test public void Basic() { fxt.Test_parse("a{{b}}c", "ac"); } @@ -26,13 +26,13 @@ public class Mustache_itm_parser_tst { fxt.Test_parse("a{{!b}}c", "ac"); } } -class Mustache_itm_parser_fxt { - private final Mustache_itm_parser parser = new Mustache_itm_parser(); +class Mustache_tkn_parser_fxt { + private final Mustache_tkn_parser parser = new Mustache_tkn_parser(); private final Mustache_render_ctx ctx = new Mustache_render_ctx(); private final Bry_bfr tmp_bfr = Bry_bfr.new_(); public void Test_parse(String src_str, String expd) { byte[] src_bry = Bry_.new_a7(src_str); - Mustache_elem_itm actl_itm = parser.Parse(src_bry, 0, src_bry.length); + Mustache_tkn_itm actl_itm = parser.Parse(src_bry, 0, src_bry.length); actl_itm.Render(tmp_bfr, ctx); Tfds.Eq_str_lines(expd, tmp_bfr.To_str_and_clear()); } diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 1576957e3..b67705f25 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -34,7 +34,7 @@ public class Xoa_app_ { } } public static final String Name = "xowa"; - public static final String Version = "3.1.4.1"; + public static final String Version = "3.1.4.2"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys_str; public static String User_agent = ""; diff --git a/400_xowa/src/gplx/xowa/Xop_fxt.java b/400_xowa/src/gplx/xowa/Xop_fxt.java index b23c0a578..9f5816438 100644 --- a/400_xowa/src/gplx/xowa/Xop_fxt.java +++ b/400_xowa/src/gplx/xowa/Xop_fxt.java @@ -57,13 +57,13 @@ public class Xop_fxt { public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; public Xop_ctx Ctx() {return ctx;} private Xop_ctx ctx; public Xop_parser Parser() {return parser;} private Xop_parser parser; - public Xoae_page Page() {return ctx.Cur_page();} - public void Lang_by_id_(int id) {ctx.Cur_page().Lang_(wiki.Appe().Lang_mgr().Get_by_or_new(Xol_lang_stub_.Get_by_id(id).Key()));} + public Xoae_page Page() {return ctx.Page();} + public void Lang_by_id_(int id) {ctx.Page().Lang_(wiki.Appe().Lang_mgr().Get_by_or_new(Xol_lang_stub_.Get_by_id(id).Key()));} public Xoh_html_wtr_cfg Wtr_cfg() {return hdom_wtr.Cfg();} private Xoh_html_wtr hdom_wtr; public Xop_fxt Reset() { ctx.Clear_all(); ctx.App().Free_mem(false); - ctx.Cur_page().Clear_all(); + ctx.Page().Clear_all(); wiki.File_mgr().Clear_for_tests(); wiki.Db_mgr().Load_mgr().Clear(); app.Wiki_mgr().Clear(); @@ -80,7 +80,7 @@ public class Xop_fxt { } public Xoa_ttl Page_ttl_(String txt) { Xoa_ttl rv = Xoa_ttl.parse(wiki, Bry_.new_u8(txt)); - ctx.Cur_page().Ttl_(rv); + ctx.Page().Ttl_(rv); return rv; } @@ -222,8 +222,8 @@ public class Xop_fxt { public byte[] Test_parse_tmpl_str_rv(String raw) { byte[] raw_bry = Bry_.new_u8(raw); Xop_root_tkn root = tkn_mkr.Root(raw_bry); - ctx.Cur_page().Root_(root); - ctx.Cur_page().Data_raw_(raw_bry); + ctx.Page().Root_(root); + ctx.Page().Data_raw_(raw_bry); return parser.Parse_text_to_wtxt(root, ctx, tkn_mkr, raw_bry); } public Xot_defn_tmpl run_Parse_tmpl(byte[] name, byte[] raw) {return parser.Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), wiki.Ns_mgr().Ns_template(), name, raw);} @@ -437,7 +437,7 @@ public class Xop_fxt { Xoh_wtr_ctx hctx = Xoh_wtr_ctx.Hdump; Xoh_html_wtr html_wtr = wiki.Html_mgr().Html_wtr(); html_wtr.Cfg().Toc__show_(Bool_.Y); // needed for hdr to show - ctx.Cur_page().Redlink_lnki_list().Clear(); + ctx.Page().Redlink_lnki_list().Clear(); html_wtr.Write_all(tmp_bfr, ctx, hctx, src_bry, root); // Tfds.Dbg(tmp_bfr.To_str()); return tmp_bfr.To_str_and_clear(); diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java index 007f86290..1875ffd57 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java @@ -49,6 +49,7 @@ public class Xob_cmd_keys { , Key_util_cleanup = "util.cleanup" // "core.cleanup" , Key_util_download = "util.download" // "file.download" , Key_util_xml_dump = "util.xml_dump" + , Key_util_random = "util.random" , Key_wbase_json_dump = "wbase.json_dump" , Key_wbase_qid = "wbase.qid" // "text.wdata.qid" , Key_wbase_pid = "wbase.pid" // "text.wdata.pid" diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java index 7df3b6d2b..20248fdbb 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base.java @@ -41,8 +41,7 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_ int ttl_bgn = end, ttl_end = -1; int pos = end; while (true) { - if (pos == src_len) { - Log(Tid_eos, page, src, bgn); + if (pos == src_len) { // fail: EOS return end; } Object o = trie.Match_bgn(src, pos, src_len); @@ -56,11 +55,9 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_ if (ttl_end > ttl_bgn) // NOTE: ignore examples like [[Category: ]] Process_ctg(page, src, src_len, ttl_bgn, ttl_end); break; - case Tid_brack_bgn: - Log(Tid_brack_bgn, page, src, bgn); + case Tid_brack_bgn: // fail: [[ is invalid return pos; - case Tid_nl: - Log(Tid_nl, page, src, bgn); + case Tid_nl: // fail: \n is invalid return pos; } return pos + bry.length; @@ -68,19 +65,6 @@ public abstract class Xob_ctg_v1_base extends Xob_itm_dump_base implements Xobd_ ++pos; } } - @gplx.Virtual public void Log(byte err_tid, Xowd_page_itm page, byte[] src, int ctg_bgn) { - String title = String_.new_u8(page.Ttl_full_db()); - int ctg_end = ctg_bgn + 40; if (ctg_end > src.length) ctg_end = src.length; - String ctg_str = String_.Replace(String_.new_u8(src, ctg_bgn, ctg_end), "\n", ""); - String err = ""; - switch (err_tid) { - case Tid_eos: err = "eos"; break; - case Tid_nl: err = "bad \\n"; break; - case Tid_brack_bgn: err = "bad [["; break; - } - bldr.Usr_dlg().Log_many(GRP_KEY, "ctg_fail", "~{0}\n>> ~{1}\n~{2}\n~{3}\n\n", LogErr_hdr, err + " " + ctg_str, "http://" + wiki.Domain_str() + "/wiki/" + title, Bry_.MidByLenToStr(src, ctg_bgn, 100)); - log_idx++; - } int log_idx = 0; final String LogErr_hdr = String_.Repeat("-", 80); @gplx.Virtual public void Process_ctg(Xowd_page_itm page, byte[] src, int src_len, int bgn, int end) { Process_ctg_row(fld_wtr, dump_fil_len, dump_url_gen, page.Id(), src, src_len, bgn, end); } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java index 81a2122ff..6f612beae 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Xob_ctg_v1_base_tst.java @@ -56,6 +56,4 @@ class Xobd_parser_wkr_ctg_tstr extends Xob_ctg_v1_txt { public List_adp Found() @Override public void Process_ctg(Xowd_page_itm page, byte[] src, int src_len, int bgn, int end) { found.Add(Bry_.Mid(src, bgn, end)); } - @Override public void Log(byte err_tid, Xowd_page_itm page, byte[] src, int ctg_bgn) { - } } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java index 09befb9dc..1d0781430 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java @@ -91,7 +91,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink byte[] ttl_bry = ttl.Page_db(); byte page_tid = Xow_page_tid.Identify(wiki.Domain_tid(), ns.Id(), ttl_bry); if (page_tid != Xow_page_tid.Tid_wikitext) return; // ignore js, css, lua, json - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); page.Clear_all(); page.Bldr__ns_ord_(ns_ord); page.Ttl_(ttl).Revision_data().Id_(db_page.Id()); @@ -102,7 +102,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink else { parser.Parse_page_all_clear(root, ctx, ctx.Tkn_mkr(), page_src); if (gen_html && !page.Redirected()) - wiki.Html_mgr().Page_wtr_mgr().Gen(ctx.Cur_page().Root_(root), Xopg_page_.Tid_read); + wiki.Html_mgr().Page_wtr_mgr().Gen(ctx.Page().Root_(root), Xopg_page_.Tid_read); if (gen_hdump) hdump_bldr.Insert(page.Root_(root)); root.Clear(); @@ -134,10 +134,10 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink byte[] ttl_commons = Xto_commons(ns_file_is_case_match_all, commons_wiki, ttl); if ( Xof_lnki_page.Null_n(lnki_page) // page set && Xof_lnki_time.Null_n(lnki_time)) // thumbtime set - usr_dlg.Warn_many("", "", "page and thumbtime both set; this may be an issue with fsdb: page=~{0} ttl=~{1}", ctx.Cur_page().Ttl().Page_db_as_str(), String_.new_u8(ttl)); + usr_dlg.Warn_many("", "", "page and thumbtime both set; this may be an issue with fsdb: page=~{0} ttl=~{1}", ctx.Page().Ttl().Page_db_as_str(), String_.new_u8(ttl)); if (lnki.Ns_id() == Xow_ns_.Tid__media) lnki_src_tid = Xob_lnki_src_tid.Tid_media; - tbl.Insert_cmd_by_batch(ctx.Cur_page().Bldr__ns_ord(), ctx.Cur_page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.W(), lnki.H(), lnki.Upright(), lnki_time, lnki_page); + tbl.Insert_cmd_by_batch(ctx.Page().Bldr__ns_ord(), ctx.Page().Revision_data().Id(), ttl, ttl_commons, Byte_.By_int(ext.Id()), lnki.Lnki_type(), lnki_src_tid, lnki.W(), lnki.H(), lnki.Upright(), lnki_time, lnki_page); } @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_wdata_enabled_)) wdata_enabled = m.ReadYn("v"); diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/randoms/Xob_rnd_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/randoms/Xob_rnd_cmd.java new file mode 100644 index 000000000..dc5349362 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/randoms/Xob_rnd_cmd.java @@ -0,0 +1,31 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.bldrs.cmds.randoms; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; +public class Xob_rnd_cmd implements Xob_cmd { + // private final Xob_bldr bldr; private final Xowe_wiki wiki; + public Xob_rnd_cmd(Xob_bldr bldr, Xowe_wiki wiki) {}//this.bldr = bldr; this.wiki = wiki;} + public String Cmd_key() {return Xob_cmd_keys.Key_util_random;} + public void Cmd_run() { + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return this;} + + public void Cmd_init(Xob_bldr bldr) {} + public void Cmd_bgn(Xob_bldr bldr) {} + public void Cmd_end() {} + public void Cmd_term() {} +} diff --git a/400_xowa/src/gplx/xowa/bldrs/wtrs/Xob_tmp_wtr.java b/400_xowa/src/gplx/xowa/bldrs/wtrs/Xob_tmp_wtr.java index 1912d0a01..165d3e15a 100644 --- a/400_xowa/src/gplx/xowa/bldrs/wtrs/Xob_tmp_wtr.java +++ b/400_xowa/src/gplx/xowa/bldrs/wtrs/Xob_tmp_wtr.java @@ -33,8 +33,6 @@ public class Xob_tmp_wtr { public void Flush(Gfo_usr_dlg usr_dlg) { if (bfr.Len() == 0) return; // nothing to flush Io_url url = url_gen.Nxt_url(); - if (bfr.Len() > fil_max) // NOTE: data can exceed proscribed len; EX: wikt:Category for Italian nouns is 1 MB+ - usr_dlg.Log_many("xowa.tmp_wtr", "flush", "--fil exceeds len: ~{0} ~{1} ~{2}", bfr.Len(), fil_max, url.Xto_api()); Io_mgr.Instance.AppendFilBfr(url, bfr); } public void Rls() {bfr.Rls();} diff --git a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue_html_fxt.java b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue_html_fxt.java index 5a386b7ce..5b3fe8022 100644 --- a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue_html_fxt.java +++ b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue_html_fxt.java @@ -32,7 +32,7 @@ public class Xof_xfer_queue_html_fxt extends Xof_xfer_queue_base_fxt { public Xof_xfer_queue_html_fxt Lnki_(String lnki_ttl, boolean thumb, int lnki_w, int lnki_h, double upright, int seek_time) { // NOTE: only one xfer_itm; supports one Lnki_ per test only Xowe_wiki wiki = this.En_wiki(); Xop_ctx ctx = wiki.Parser_mgr().Ctx(); - xfer_itm = wiki.Html_mgr().Html_wtr().Lnki_wtr().File_wtr().Lnki_eval(Xof_exec_tid.Tid_wiki_page, ctx, ctx.Cur_page(), queue, Bry_.new_u8(lnki_ttl), thumb ? Xop_lnki_type.Id_thumb : Xop_lnki_type.Id_null, upright, lnki_w, lnki_h, Xof_lnki_time.X_int(seek_time), Xof_lnki_page.Null, false); + xfer_itm = wiki.Html_mgr().Html_wtr().Lnki_wtr().File_wtr().Lnki_eval(Xof_exec_tid.Tid_wiki_page, ctx, ctx.Page(), queue, Bry_.new_u8(lnki_ttl), thumb ? Xop_lnki_type.Id_thumb : Xop_lnki_type.Id_null, upright, lnki_w, lnki_h, Xof_lnki_time.X_int(seek_time), Xof_lnki_page.Null, false); return this; } public Xof_file_itm Xfer_itm() {return xfer_itm;} private Xof_file_itm xfer_itm; diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java index 2d2bb99b5..b3dd52ef1 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java @@ -138,7 +138,7 @@ public class Xog_tab_itm implements GfoInvkAble { Xoae_app app = wiki.Appe(); Gfo_usr_dlg usr_dlg = app.Usr_dlg(); try { if (page.Tab_data().Cancel_show()) return; // Special:Search canceled show; NOTE: must be inside try b/c finally handles thread - wiki.Parser_mgr().Ctx().Cur_page_(page); + wiki.Parser_mgr().Ctx().Page_(page); if (page.Missing()) { if (wiki.Db_mgr().Save_mgr().Create_enabled()) { page = Xoae_page.New_edit(wiki, ttl); diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr.java index 5c4b49a07..3e9b73e55 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr.java @@ -83,7 +83,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { { "app_root_dir", "app_version", "app_build_date", "xowa_mode_is_server" , "page_id", "page_name", "page_title", "page_modified_on_msg" , "html_css_common_path", "html_css_wiki_path", "xowa_head" - , "page_lang_ltr", "page_indicators", "page_content_sub", "page_jumpto", "page_body_cls", "html_content_editable" + , "page_lang_ltr", "page_indicators", "page_content_sub", "page_jumpto", "page_pgbnr", "page_body_cls", "html_content_editable" , "page_data", "page_langs" , "portal_div_personal", "portal_div_ns", "portal_div_view" , "portal_div_logo", "portal_div_home", "portal_div_xtn" diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr_tst.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr_tst.java index 5076c6585..f9006d58a 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_mgr_tst.java @@ -27,7 +27,7 @@ public class Xoh_page_wtr_mgr_tst { GfoInvkAble_.InvkCmd_val(portal_mgr, Xow_portal_mgr.Invk_div_logo_, Bry_.new_a7("~{portal_nav_main_href}")); portal_mgr.Init_assert(); Xoh_page_wtr_mgr page_wtr_mgr = new Xoh_page_wtr_mgr(true); - page_wtr_mgr.Gen(wiki.Parser_mgr().Ctx().Cur_page(), Xopg_page_.Tid_read); + page_wtr_mgr.Gen(wiki.Parser_mgr().Ctx().Page(), Xopg_page_.Tid_read); Tfds.Eq(String_.new_a7(portal_mgr.Div_logo_bry()), "/site/en.wikipedia.org/wiki/"); } } diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java index 4c6f73fbb..4d4598585 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java @@ -31,7 +31,7 @@ public class Xoh_page_wtr_wkr { public byte[] Write_page(Xoae_page page, Xop_ctx ctx, Bry_bfr bfr) { synchronized (thread_lock_1) { this.page = page; this.ctx = ctx; this.wiki = page.Wikie(); this.app = wiki.Appe(); - ctx.Cur_page_(page); // HACK: must update page for toc_mgr; WHEN: Xoae_page rewrite + ctx.Page_(page); // HACK: must update page for toc_mgr; WHEN: Xoae_page rewrite Bry_fmtr fmtr = null; if (mgr.Html_capable()) { wdata_lang_wtr.Page_(page); @@ -40,7 +40,7 @@ public class Xoh_page_wtr_wkr { case Xopg_page_.Tid_edit: fmtr = mgr.Page_edit_fmtr(); break; case Xopg_page_.Tid_html: fmtr = mgr.Page_read_fmtr(); view_mode = Xopg_page_.Tid_read; break; // set view_mode to read, so that "read" is highlighted in HTML case Xopg_page_.Tid_read: fmtr = mgr.Page_read_fmtr(); - ctx.Cur_page().Redlink_lnki_list().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately) + ctx.Page().Redlink_lnki_list().Clear(); // not sure if this is the best place to put it, but redlinks (a) must only fire once; (b) must fire before html generation; (c) cannot fire during edit (preview will handle separately) break; } Bry_bfr page_bfr = Xoa_app_.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page bfr to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do @@ -94,7 +94,7 @@ public class Xoh_page_wtr_wkr { , page_name, page_display , modified_on_msg , mgr.Css_common_bry(), mgr.Css_wiki_bry(), page.Html_data().Head_mgr().Init(app, wiki, page).Init_dflts() - , page.Lang().Dir_ltr_bry(), page.Html_data().Indicators(), page_content_sub, wiki.Html_mgr().Portal_mgr().Div_jump_to(), page_body_class, html_content_editable + , page.Lang().Dir_ltr_bry(), page.Html_data().Indicators(), page_content_sub, wiki.Html_mgr().Portal_mgr().Div_jump_to(), wiki.Xtn_mgr().Xtn_pgbnr().Write_html(ctx, page), page_body_class, html_content_editable , page_data, wdata_lang_wtr , portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl__bfr_mkr(), page_ttl, wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl__bfr_mkr(), html_gen_tid, page.Html_data().Xtn_search_text()) , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar), portal_mgr.Div_wikis_bry(app.Utl__bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_tst.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_tst.java index 3d1741f29..c6b44c748 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_tst.java @@ -56,7 +56,7 @@ class Xoh_page_wtr_fxt { } public void Test_edit(String raw, String expd) { wiki.Html_mgr().Page_wtr_mgr().Html_capable_(true); - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); page.Data_raw_(Bry_.new_u8(raw)); Xoh_page_wtr_mgr mgr = wiki.Html_mgr().Page_wtr_mgr(); Xoh_page_wtr_wkr wkr = mgr.Wkr(Xopg_page_.Tid_edit); @@ -65,7 +65,7 @@ class Xoh_page_wtr_fxt { } public void Test_read(String page_name, String page_text, String expd) { wiki.Html_mgr().Page_wtr_mgr().Html_capable_(true); - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); page.Ttl_(Xoa_ttl.parse(wiki, Bry_.new_a7(page_name))); page.Data_raw_(Bry_.new_u8(page_text)); Xoh_page_wtr_mgr mgr = wiki.Html_mgr().Page_wtr_mgr(); diff --git a/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr_tst.java b/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr_tst.java index 4b0105210..efe2d8440 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr_tst.java @@ -48,7 +48,7 @@ class Xoh_ctg_mgr_fxt { public Xoh_ctg_mgr_fxt Init_ctgs(String... v) {init_ctgs = v; return this;} private String[] init_ctgs; public void Test_html(String expd) { byte[][] ctgs_bry_ary = Bry_.Ary(init_ctgs); - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); page.Category_list_(ctgs_bry_ary); ctg_grp_mgr.Bld(tmp_bfr, page, ctgs_bry_ary.length); Tfds.Eq_str_lines(expd, tmp_bfr.To_str_and_clear()); diff --git a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java index abf4e2ee7..c1dfb7bff 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java @@ -115,7 +115,7 @@ class Xodb_hdump_mgr__base_fxt { if (fxt == null) { fxt = new Xop_fxt(); wiki = fxt.Wiki(); - page = wiki.Parser_mgr().Ctx().Cur_page(); + page = wiki.Parser_mgr().Ctx().Page(); hdump_mgr = wiki.Html__hdump_mgr(); hdump_mgr.Init_by_db(gplx.core.ios.Io_stream_.Tid_raw, false, false); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java index cb4299f4b..06ce4a1f4 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java @@ -45,9 +45,9 @@ public class Xoh_html_wtr { public void Write_all(Bry_bfr bfr, Xop_ctx ctx, byte[] src, Xop_root_tkn root) {Write_all(bfr, ctx, Xoh_wtr_ctx.Basic, src, root);} public void Write_all(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_root_tkn root) { try { - indent_level = 0; this.page = ctx.Cur_page(); + indent_level = 0; this.page = ctx.Page(); page.Slink_list().Clear(); // HACK: always clear langs; necessary for reload - lnki_wtr.Init_by_page(ctx, hctx, src, ctx.Cur_page()); + lnki_wtr.Init_by_page(ctx, hctx, src, ctx.Page()); Write_tkn(bfr, ctx, hctx, src, null, -1, root); } finally { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java index 7c2e5cf47..fa4cbabbd 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java @@ -22,7 +22,7 @@ import gplx.xowa.htmls.core.htmls.*; public class Xoh_hdr_html { public void Write_html(Bry_bfr bfr, Xoh_html_wtr wtr, Xowe_wiki wiki, Xoae_page page, Xop_ctx ctx, Xoh_wtr_ctx hctx, Xoh_html_wtr_cfg cfg, Xop_tkn_grp grp, int sub_idx, byte[] src, Xop_hdr_tkn hdr) { if (hdr.Hdr_html_first() && cfg.Toc__show() && !page.Hdr_mgr().Toc_manual()) // __TOC__ not specified; place at top; NOTE: if __TOC__ was specified, then it would be placed wherever __TOC__ appears - wiki.Html_mgr().Toc_mgr().Html(ctx.Cur_page(), hctx, src, bfr); + wiki.Html_mgr().Toc_mgr().Html(ctx.Page(), hctx, src, bfr); int hdr_len = hdr.Hdr_level(); if (hdr_len > 0) { // NOTE: need to check hdr_len b/c it could be dangling diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java index 3ab856043..057c8f61c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java @@ -71,7 +71,7 @@ public class Xoh_lnke_html { if (lnke.Lnke_typ() == Xop_lnke_tkn.Lnke_typ_text) // EX: 'http://a.org' -> 'http://a.org' bfr.Add_mid(src, href_bgn, href_end); else // EX: '[http://a.org]' -> '[1]' - bfr.Add_byte(Byte_ascii.Brack_bgn).Add_int_variable(ctx.Cur_page().Html_data().Lnke_autonumber_next()).Add_byte(Byte_ascii.Brack_end); + bfr.Add_byte(Byte_ascii.Brack_bgn).Add_int_variable(ctx.Page().Html_data().Lnke_autonumber_next()).Add_byte(Byte_ascii.Brack_end); } else { // EX: '[http://a.org a]' -> 'a' for (int i = 0; i < subs_len; i++) diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_mgr.java index af3eec027..247799ae5 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_mgr.java @@ -54,7 +54,7 @@ public class Xoh_file_mgr { ) return false; if (source_wiki.File_mgr().Version() == Xow_file_mgr.Version_2) - return ctx.App().User().User_db_mgr().File__xfer_itm_finder().Find(source_wiki, xfer.Lnki_exec_tid(), xfer, ctx.Cur_page().Url_bry_safe()); + return ctx.App().User().User_db_mgr().File__xfer_itm_finder().Find(source_wiki, xfer.Lnki_exec_tid(), xfer, ctx.Page().Url_bry_safe()); else return source_wiki.File_mgr().Find_meta(xfer); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java index e5717e5a7..91a66b014 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java @@ -141,7 +141,7 @@ public class Xoh_file_wtr__basic { else { // thumb Arg_itm_tkn link_tkn = lnki_link_tkn.Val_tkn(); byte[] link_arg = Xoa_ttl.Replace_spaces(link_tkn.Dat_to_bry(src)); // replace spaces with unders, else "/wiki/File:A b.ogg" instead of "A_b.ogg"; DATE:2015-11-27 - if (Bry_.Has_at_bgn(link_arg, Xop_tkn_.Anchor_byte)) link_arg = Bry_.Add(ctx.Cur_page().Ttl().Page_db(), link_arg); + if (Bry_.Has_at_bgn(link_arg, Xop_tkn_.Anchor_byte)) link_arg = Bry_.Add(ctx.Page().Ttl().Page_db(), link_arg); byte[] link_arg_html = tmp_link_parser.Parse(tmp_bfr, tmp_url, wiki, link_arg, lnki_href); byte[] xowa_title_bry = tmp_link_parser.Html_xowa_ttl(); // NOTE: xowa_title_bry will be link arg; [[File:A.png|link=file:///A.ogg]] -> A.ogg x> A.png boolean a_href_is_file = true; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java index 8a41993bb..cf868f3cb 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java @@ -46,7 +46,7 @@ public class Xoh_lnki_wtr { public void Write(Bry_bfr bfr, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki) { Xoa_ttl lnki_ttl = lnki.Ttl(); if (lnki_ttl == null) {// NOTE: parser failed to properly invalidate lnki; escape tkn now and warn; DATE:2014-06-06 - app.Usr_dlg().Warn_many("", "", "invalid lnki evaded parser; page=~{0} ex=~{1}", ctx.Cur_page().Url().To_str(), String_.new_u8(src, lnki.Src_bgn(), lnki.Src_end())); + app.Usr_dlg().Warn_many("", "", "invalid lnki evaded parser; page=~{0} ex=~{1}", ctx.Page().Url().To_str(), String_.new_u8(src, lnki.Src_bgn(), lnki.Src_end())); Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), bfr, src, lnki.Src_bgn(), lnki.Src_end(), true, false); return; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java index db8aa37e8..d4fbff123 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java @@ -99,8 +99,8 @@ public class Xoh_tag_parser implements Gfh_doc_wkr { private int Parse_by_data(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag cur, Gfh_tag nxt, int tid) { Xoh_data_itm data = hctx.Pool_mgr__data().Get_by_tid(tid); data.Clear(); - if (!data.Init_by_parse(hdoc_wkr, hctx, tag_rdr, src, cur, nxt)) return -1; - if (!hdoc_wkr.Process_parse(data)) return -1; + if (!data.Init_by_parse(hdoc_wkr, hctx, tag_rdr, src, cur, nxt)) {data.Pool__rls(); return -1;} + if (!hdoc_wkr.Process_parse(data)) {data.Pool__rls(); return -1;} int rv = data.Src_end(); data.Pool__rls(); return rv; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java index 6365438d3..eab68be9c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java @@ -302,16 +302,16 @@ public class Xoh_thm_hzip_tst { , "" )); } -// @Test public void Dump() { -// Xowe_wiki en_d = fxt.Init_wiki_alias("wikt", "en.wiktionary.org"); -// gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = en_d.Ns_mgr(); -// ns_mgr.Ns_main().Case_match_(gplx.xowa.wikis.nss.Xow_ns_case_.Tid__all); -// -// fxt.Wiki().Ns_mgr().Aliases_add(gplx.xowa.wikis.nss.Xow_ns_.Tid__portal, "WP"); -// fxt.Wiki().Ns_mgr().Init(); -// -// fxt.Init_mode_is_b256_(Bool_.N); -// fxt.Exec_write_to_fsys(Io_url_.new_dir_("J:\\xowa\\dev_rls\\html\\"), "debug.html"); -// fxt.Init_mode_is_b256_(Bool_.N); -// } + @Test public void Dump() { + Xowe_wiki en_d = fxt.Init_wiki_alias("wikt", "en.wiktionary.org"); + gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = en_d.Ns_mgr(); + ns_mgr.Ns_main().Case_match_(gplx.xowa.wikis.nss.Xow_ns_case_.Tid__all); + + fxt.Wiki().Ns_mgr().Aliases_add(gplx.xowa.wikis.nss.Xow_ns_.Tid__portal, "WP"); + fxt.Wiki().Ns_mgr().Init(); + + fxt.Init_mode_is_b256_(Bool_.N); + fxt.Exec_write_to_fsys(Io_url_.new_dir_("J:\\xowa\\dev_rls\\html\\"), "debug.html"); + fxt.Init_mode_is_b256_(Bool_.N); + } } diff --git a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser.java b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser.java index 847539082..3532d9e3b 100644 --- a/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/modules/popups/Xow_popup_parser.java @@ -63,11 +63,11 @@ public class Xow_popup_parser { private boolean Canceled(Xow_popup_itm popup_itm, Xog_tab_itm cur_tab) {return popup_itm.Canceled() || cur_tab != null && cur_tab.Tab_is_loading();} private void Init_ctxs(byte[] tmpl_src, Xoa_ttl ttl) { tmpl_ctx.Clear_all(); - tmpl_ctx.Cur_page().Ttl_(ttl); // NOTE: must set cur_page, else page-dependent templates won't work; EX: {{FULLPAGENAME}}; PAGE:en.w:June_20; DATE:2014-06-20 - tmpl_ctx.Cur_page().Html_data().Html_restricted_(data.Html_restricted()); // NOTE: must set data.Html_restricted() if Special:XowaPopupHistory - tmpl_ctx.Page_bgn(tmpl_root, tmpl_src); + tmpl_ctx.Page().Ttl_(ttl); // NOTE: must set cur_page, else page-dependent templates won't work; EX: {{FULLPAGENAME}}; PAGE:en.w:June_20; DATE:2014-06-20 + tmpl_ctx.Page().Html_data().Html_restricted_(data.Html_restricted()); // NOTE: must set data.Html_restricted() if Special:XowaPopupHistory + tmpl_ctx.Parser__page_init(tmpl_root, tmpl_src); Wtxt_ctx_init(true, tmpl_src); - wtxt_ctx.Cur_page().Ttl_(ttl); // NOTE: must set cur_page, or rel lnkis won't work; EX: [[../A]] + wtxt_ctx.Page().Ttl_(ttl); // NOTE: must set cur_page, or rel lnkis won't work; EX: [[../A]] } public byte[] Parse(Xowe_wiki cur_wiki, Xoae_page page, Xog_tab_itm cur_tab, Xow_popup_itm popup_itm) { // NOTE: must pass cur_wiki for xwiki label; DATE:2014-07-02 if (Bry_.Eq(popup_itm.Wiki_domain(), Xow_domain_itm_.Bry__wikidata)) { @@ -125,7 +125,7 @@ public class Xow_popup_parser { wtxt_root.Clear(); // now start parsing wrdx_bry from wtxt to html Wtxt_ctx_init(false, wrdx_bry); parser.Parse_to_src_end(wtxt_root, wtxt_ctx, tkn_mkr, wrdx_bry, wtxt_trie, Xop_parser_.Doc_bgn_bos, wrdx_bry.length); - wtxt_ctx.Page_end(wtxt_root, wrdx_bry, wrdx_bry.length); + wtxt_ctx.Parser__page_term(wtxt_root, wrdx_bry, wrdx_bry.length); wiki.Html_mgr().Html_wtr().Write_all(wrdx_bfr, wtxt_ctx, hctx, wrdx_bry, wtxt_root); } private void Adjust_wrdx_end(Xow_popup_itm popup_itm, Bry_bfr wrdx_bfr) { @@ -195,10 +195,10 @@ public class Xow_popup_parser { } private void Wtxt_ctx_init(boolean incremental, byte[] bry) { wtxt_ctx.Clear_all(); - wtxt_ctx.Cur_page().Html_data().Html_restricted_(data.Html_restricted()); + wtxt_ctx.Page().Html_data().Html_restricted_(data.Html_restricted()); wtxt_ctx.Para().Enabled_(!incremental); // NOTE: if incremental, disable para; easier to work with \n rather than

; also, must be enabled before Page_bgn; DATE:2014-06-18DATE:2014-06-18 wtxt_ctx.Lnke().Dangling_goes_on_stack_(incremental); - wtxt_ctx.Page_bgn(wtxt_root, bry); + wtxt_ctx.Parser__page_init(wtxt_root, bry); } private byte[] Parse_to_wtxt(byte[] src) { int subs_len = tmpl_root.Subs_len(); diff --git a/400_xowa/src/gplx/xowa/htmls/ns_files/Xoh_ns_file_page_mgr.java b/400_xowa/src/gplx/xowa/htmls/ns_files/Xoh_ns_file_page_mgr.java index b03ccf821..480259b3b 100644 --- a/400_xowa/src/gplx/xowa/htmls/ns_files/Xoh_ns_file_page_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/ns_files/Xoh_ns_file_page_mgr.java @@ -30,7 +30,7 @@ public class Xoh_ns_file_page_mgr implements gplx.core.brys.Bfr_arg { Xowe_wiki wiki = (Xowe_wiki)page.Commons_mgr().Source_wiki_or(cur_wiki); this.ttl = ttl; this.html_wtr = html_wtr; this.repo_mgr = wiki.File__repo_mgr(); this.play_btn_icon = wiki.Html_mgr().Img_media_play_btn(); - this.xfer_itm = wiki.Html_mgr().Html_wtr().Lnki_wtr().File_wtr().Lnki_eval(Xof_exec_tid.Tid_wiki_file, ctx, ctx.Cur_page(), queue, ttl.Page_txt() + this.xfer_itm = wiki.Html_mgr().Html_wtr().Lnki_wtr().File_wtr().Lnki_eval(Xof_exec_tid.Tid_wiki_file, ctx, ctx.Page(), queue, ttl.Page_txt() , Xop_lnki_type.Id_thumb, Xop_lnki_tkn.Upright_null, html_wtr.Main_img_w(), html_wtr.Main_img_h(), Xof_lnki_time.Null, Xof_lnki_page.Null, Bool_.N); Xof_orig_itm orig = wiki.File_mgr().Orig_mgr().Find_by_ttl_or_null(xfer_itm.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return; // no orig; diff --git a/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java b/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java index 476328f94..1d9acb360 100644 --- a/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java +++ b/400_xowa/src/gplx/xowa/langs/Xol_lang_itm_.java @@ -267,6 +267,7 @@ kwd_mgr.New(Bool_.N, Xol_kwd_grp_.Id_pagesincategory_pages, "pagesincategory_pag kwd_mgr.New(Bool_.N, Xol_kwd_grp_.Id_pagesincategory_subcats, "pagesincategory_subcats", "subcats"); kwd_mgr.New(Bool_.N, Xol_kwd_grp_.Id_pagesincategory_files, "pagesincategory_files", "files"); kwd_mgr.New(Bool_.Y, Xol_kwd_grp_.Id_rev_revisionsize, "REVISIONSIZE"); -kwd_mgr.New(Bool_.Y, Xol_kwd_grp_.Id_pagebanner, "PAGEBANNER"); // NOTE: must be casematch; EX:{{pagebanner}} +kwd_mgr.New(Bool_.Y, Xol_kwd_grp_.Id_pagebanner, "PAGEBANNER"); // NOTE: must be casematch; EX: in en.v, {{pagebanner}} is actually template name which calls {{PAGEBANNER}} +kwd_mgr.New(Bool_.Y, Xol_kwd_grp_.Id_rev_protectionexpiry, "PROTECTIONEXPIRY"); } } diff --git a/400_xowa/src/gplx/xowa/langs/kwds/Xol_kwd_grp_.java b/400_xowa/src/gplx/xowa/langs/kwds/Xol_kwd_grp_.java index cb45476f0..7d96d0565 100644 --- a/400_xowa/src/gplx/xowa/langs/kwds/Xol_kwd_grp_.java +++ b/400_xowa/src/gplx/xowa/langs/kwds/Xol_kwd_grp_.java @@ -230,8 +230,9 @@ public static final int , Id_pagesincategory_files = 208 , Id_rev_revisionsize = 209 , Id_pagebanner = 210 +, Id_rev_protectionexpiry = 211 ; -public static final int Id__max = 211; +public static final int Id__max = 212; private static byte[] ary_itm_(int id) { switch (id) { @@ -446,6 +447,7 @@ case Xol_kwd_grp_.Id_pagesincategory_subcats: return Bry_.new_u8("pagesincategor case Xol_kwd_grp_.Id_pagesincategory_files: return Bry_.new_u8("pagesincategory_files"); case Xol_kwd_grp_.Id_rev_revisionsize: return Bry_.new_u8("revisionsize"); case Xol_kwd_grp_.Id_pagebanner: return Bry_.new_u8("pagebanner"); +case Xol_kwd_grp_.Id_rev_protectionexpiry: return Bry_.new_u8("protectionexpiry"); default: throw Err_.new_unhandled(id); } } diff --git a/400_xowa/src/gplx/xowa/parsers/Xop_ctx.java b/400_xowa/src/gplx/xowa/parsers/Xop_ctx.java index 623f80a62..c7f23ee72 100644 --- a/400_xowa/src/gplx/xowa/parsers/Xop_ctx.java +++ b/400_xowa/src/gplx/xowa/parsers/Xop_ctx.java @@ -36,7 +36,7 @@ public class Xop_ctx { public Xowe_wiki Wiki() {return wiki;} private final Xowe_wiki wiki; public Xol_lang_itm Lang() {return lang;} private final Xol_lang_itm lang; public Xop_tkn_mkr Tkn_mkr() {return tkn_mkr;} private final Xop_tkn_mkr tkn_mkr; - public Xoae_page Cur_page() {return cur_page;} public void Cur_page_(Xoae_page v) {cur_page = v;} private Xoae_page cur_page; + public Xoae_page Page() {return cur_page;} public void Page_(Xoae_page v) {cur_page = v;} private Xoae_page cur_page; public byte Parse_tid() {return parse_tid;} public Xop_ctx Parse_tid_(byte v) {parse_tid = v; xnde_names_tid = v; return this;} private byte parse_tid = Xop_parser_.Parse_tid_null; public byte Xnde_names_tid() {return xnde_names_tid;} public Xop_ctx Xnde_names_tid_(byte v) {xnde_names_tid = v; return this;} private byte xnde_names_tid = Xop_parser_.Parse_tid_null; public Xop_amp_wkr Amp() {return amp;} private final Xop_amp_wkr amp = new Xop_amp_wkr(); @@ -88,12 +88,12 @@ public class Xop_ctx { try {return cur_page.Url().To_str();} catch (Exception e) {Err_.Noop(e); return "page_url shouldn't fail";} } - public void Page_bgn(Xop_root_tkn root, byte[] src) { + public void Parser__page_init(Xop_root_tkn root, byte[] src) { this.Msg_log().Clear(); cur_tkn_tid = Xop_tkn_itm_.Tid_null; empty_ignored = false; for (Xop_ctx_wkr wkr : wkrs) wkr.Page_bgn(this, root); } - public void Page_end(Xop_root_tkn root, byte[] src, int src_len) { + public void Parser__page_term(Xop_root_tkn root, byte[] src, int src_len) { Stack_pop_til(root, src, 0, true, src_len, src_len, Xop_tkn_itm_.Tid_txt); for (Xop_ctx_wkr wkr : wkrs) wkr.Page_end(this, root, src, src_len); } @@ -320,7 +320,7 @@ public class Xop_ctx { } public static Xop_ctx New_sub_by_ctx(Xop_ctx ctx) { Xowe_wiki wiki = ctx.Wiki(); - Xop_ctx rv = new Xop_ctx(wiki, Xoae_page.New(wiki, wiki.Ttl_parse(ctx.Cur_page().Ttl().Full_db()))); + Xop_ctx rv = new Xop_ctx(wiki, Xoae_page.New(wiki, wiki.Ttl_parse(ctx.Page().Ttl().Full_db()))); new_copy(ctx, rv); return rv; } diff --git a/400_xowa/src/gplx/xowa/parsers/Xop_ctx_.java b/400_xowa/src/gplx/xowa/parsers/Xop_ctx_.java index cec9f9256..c2d8ecd12 100644 --- a/400_xowa/src/gplx/xowa/parsers/Xop_ctx_.java +++ b/400_xowa/src/gplx/xowa/parsers/Xop_ctx_.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.parsers; import gplx.*; import gplx.xowa.*; public class Xop_ctx_ { - public static String Page_as_str(Xop_ctx ctx) {return String_.new_u8(ctx.Cur_page().Ttl().Full_db());} + public static String Page_as_str(Xop_ctx ctx) {return String_.new_u8(ctx.Page().Ttl().Full_db());} public static String Src_limit_and_escape_nl(byte[] src, int bgn, int limit) { int end = bgn + limit; int src_len = src.length; diff --git a/400_xowa/src/gplx/xowa/parsers/Xop_parser.java b/400_xowa/src/gplx/xowa/parsers/Xop_parser.java index 53f20053b..ec064d81e 100644 --- a/400_xowa/src/gplx/xowa/parsers/Xop_parser.java +++ b/400_xowa/src/gplx/xowa/parsers/Xop_parser.java @@ -39,7 +39,7 @@ public class Xop_parser { // NOTE: parsers are reused; do not keep any read-writ } public byte[] Parse_text_to_html(Xop_ctx ctx, byte[] src) { Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b512(); - Parse_text_to_html(bfr, ctx.Cur_page(), false, src); + Parse_text_to_html(bfr, ctx.Page(), false, src); return bfr.To_bry_and_rls(); } public void Parse_text_to_html(Bry_bfr trg, Xoae_page page, boolean para_enabled, byte[] src) {Parse_text_to_html(trg, page, Xoh_wtr_ctx.Basic, para_enabled, src);} @@ -70,7 +70,7 @@ public class Xop_parser { // NOTE: parsers are reused; do not keep any read-writ tmpl.Init_by_new(ns, name, src, root, tmpl_props.OnlyInclude_exists); } private Xot_compile_data tmpl_props = new Xot_compile_data(); public void Parse_page_all_clear(Xop_root_tkn root, Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, byte[] src) { - ctx.Cur_page().Clear_all(); ctx.App().Msg_log().Clear(); + ctx.Page().Clear_all(); ctx.App().Msg_log().Clear(); Parse_text_to_wdom(root, ctx, tkn_mkr, src, Xop_parser_.Doc_bgn_bos); } public Xop_root_tkn Parse_text_to_wdom_old_ctx(Xop_ctx old_ctx, byte[] src, boolean doc_bgn_pos) {return Parse_text_to_wdom(Xop_ctx.new_sub_(old_ctx.Wiki()), src, doc_bgn_pos);} @@ -112,10 +112,10 @@ public class Xop_parser { // NOTE: parsers are reused; do not keep any read-writ int len = src.length; if (len == 0) return; // nothing to parse; byte parse_tid_old = ctx.Parse_tid(); // NOTE: must store parse_tid b/c ctx can be reused by other classes ctx.Parse_tid_(parse_type); - ctx.Page_bgn(root, src); + ctx.Parser__page_init(root, src); ctx.App().Parser_mgr().Core__uniq_mgr().Clear(); Parse_to_src_end(root, ctx, tkn_mkr, src, trie, doc_bgn_pos, len); - ctx.Page_end(root, src, len); + ctx.Parser__page_term(root, src, len); ctx.Parse_tid_(parse_tid_old); } public int Parse_to_src_end(Xop_root_tkn root, Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, byte[] src, Btrie_fast_mgr trie, int pos, int len) { diff --git a/400_xowa/src/gplx/xowa/parsers/Xow_parser_mgr.java b/400_xowa/src/gplx/xowa/parsers/Xow_parser_mgr.java index aa06de173..2bad3a1a8 100644 --- a/400_xowa/src/gplx/xowa/parsers/Xow_parser_mgr.java +++ b/400_xowa/src/gplx/xowa/parsers/Xow_parser_mgr.java @@ -38,7 +38,7 @@ public class Xow_parser_mgr { public void Parse(Xoae_page page, boolean clear) { if (!Env_.Mode_testing()) wiki.Init_assert(); gplx.xowa.xtns.scribunto.Scrib_core.Core_page_changed(page); // notify scribunto about page changed - ctx.Cur_page_(page); + ctx.Page_(page); Xop_root_tkn root = ctx.Tkn_mkr().Root(page.Data_raw()); if (clear) {page.Clear_all();} Xoa_ttl ttl = page.Ttl(); diff --git a/400_xowa/src/gplx/xowa/parsers/hdrs/Xop_hdr_wkr.java b/400_xowa/src/gplx/xowa/parsers/hdrs/Xop_hdr_wkr.java index 5e0ea1b01..6347da269 100644 --- a/400_xowa/src/gplx/xowa/parsers/hdrs/Xop_hdr_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/hdrs/Xop_hdr_wkr.java @@ -77,7 +77,7 @@ public class Xop_hdr_wkr implements Xop_ctx_wkr { hdr.Subs_move(root); hdr.Src_end_(cur_pos); if (ctx.Parse_tid() == Xop_parser_.Parse_tid_page_wiki) - ctx.Cur_page().Hdr_mgr().Add(ctx, hdr, src); + ctx.Page().Hdr_mgr().Add(ctx, hdr, src); return cur_pos; } private void Close_open_itms(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int bgn_pos, int cur_pos) { diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr.java b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr.java index be8f7fe9b..47e1d5dc5 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr.java @@ -57,7 +57,7 @@ public class Xop_lnki_wkr implements Xop_ctx_wkr, Xop_arg_wkr { switch (lnki.Ns_id()) { case Xow_ns_.Tid__file: if ( Xop_lnki_type.Id_is_thumbable(lnki.Lnki_type()) // thumbs produce

cancels pre - || lnki.Align_h() != Xop_lnki_align_h_.Null // halign (left, right, none) also produces
; DATE:2014-02-17 + || lnki.Align_h() != Xop_lnki_align_h_.Null // halign (left, right, none) also produces
; DATE:2014-02-17 ) ctx.Para().Process_block_lnki_div(); lnki_is_file = true; @@ -71,14 +71,14 @@ public class Xop_lnki_wkr implements Xop_ctx_wkr, Xop_arg_wkr { break; } if (lnki_is_file) { - ctx.Cur_page().Lnki_list().Add(lnki); + ctx.Page().Lnki_list().Add(lnki); if (file_wkr != null) file_wkr.Wkr_exec(ctx, src, lnki, gplx.xowa.bldrs.cmds.files.Xob_lnki_src_tid.Tid_file); } Xoa_ttl lnki_ttl = lnki.Ttl(); if ( lnki_ttl.Wik_bgn() != -1 // lnki is xwiki && sites_regy_mgr != null // relatedSites xtn is enabled ) { - lnki.Xtn_sites_link_(sites_regy_mgr.Match(ctx.Cur_page(), lnki_ttl)); + lnki.Xtn_sites_link_(sites_regy_mgr.Match(ctx.Page(), lnki_ttl)); } return cur_pos; } @@ -174,7 +174,7 @@ public class Xop_lnki_wkr implements Xop_ctx_wkr, Xop_arg_wkr { } return true; } catch (Exception e) { - ctx.App().Usr_dlg().Warn_many("", "", "fatal error in lnki: page=~{0} src=~{1} err=~{2}", String_.new_u8(ctx.Cur_page().Ttl().Full_db()), String_.new_u8(src, lnki.Src_bgn(), lnki.Src_end()), Err_.Message_gplx_full(e)); + ctx.App().Usr_dlg().Warn_many("", "", "fatal error in lnki: page=~{0} src=~{1} err=~{2}", String_.new_u8(ctx.Page().Ttl().Full_db()), String_.new_u8(src, lnki.Src_bgn(), lnki.Src_end()), Err_.Message_gplx_full(e)); return false; } } private static final byte[] Const_pipe = Bry_.new_a7("|"); diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java index b03567829..5ab659fe0 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkis/Xop_lnki_wkr_.java @@ -45,7 +45,7 @@ public class Xop_lnki_wkr_ { byte[] ttl_bry = Bry_.Mid(src, ttl_bgn, ttl_end); ttl_bry = gplx.langs.htmls.encoders.Gfo_url_encoder_.Http_url_ttl.Decode(ttl_bry); int ttl_bry_len = ttl_bry.length; - Xoa_ttl page_ttl = ctx.Cur_page().Ttl(); + Xoa_ttl page_ttl = ctx.Page().Ttl(); if (page_ttl.Ns().Subpages_enabled() && Pfunc_rel2abs.Rel2abs_ttl(ttl_bry, 0, ttl_bry_len)) { // Linker.php|normalizeSubpageLink Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512(); diff --git a/400_xowa/src/gplx/xowa/parsers/miscs/Xop_under_lxr.java b/400_xowa/src/gplx/xowa/parsers/miscs/Xop_under_lxr.java index e37793369..a7e3fbbec 100644 --- a/400_xowa/src/gplx/xowa/parsers/miscs/Xop_under_lxr.java +++ b/400_xowa/src/gplx/xowa/parsers/miscs/Xop_under_lxr.java @@ -95,7 +95,7 @@ public class Xop_under_lxr implements Xop_lxr { return rv; } public static void Make_tkn(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int bgn_pos, int cur_pos, int kwd_id) { - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); Xow_hdr_mgr hdr_mgr = page.Hdr_mgr(); switch (kwd_id) { case Xol_kwd_grp_.Id_toc: diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_tmpl.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_tmpl.java index 80c5ee84b..5d1b5e56a 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_tmpl.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_tmpl.java @@ -63,10 +63,10 @@ public class Xot_defn_tmpl implements Xot_defn { public void Parse_tmpl(Xop_ctx ctx) {ctx.Wiki().Parser_mgr().Main().Parse_text_to_defn(this, ctx, ctx.Tkn_mkr(), ns, name, data_raw);} boolean onlyinclude_parsed = false; public boolean Tmpl_evaluate(Xop_ctx ctx, Xot_invk caller, Bry_bfr bfr) { if (root == null) Parse_tmpl(ctx); - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); if (!page.Tmpl_stack_add(full_name)) { bfr.Add_str_a7(""); - Xoa_app_.Usr_dlg().Log_many("", "", "template loop detected: url=~{0} name=~{1}", ctx.Cur_page().Url().To_str(), name); + Xoa_app_.Usr_dlg().Log_many("", "", "template loop detected: url=~{0} name=~{1}", ctx.Page().Url().To_str(), name); return false; } boolean rv = true; diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_trace_brief_tst.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_trace_brief_tst.java index 978055710..54206161d 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_trace_brief_tst.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_defn_trace_brief_tst.java @@ -38,7 +38,7 @@ class Xot_defn_trace_fxt { Xop_ctx ctx = fxt.Ctx(); ctx.Defn_trace().Clear(); byte[] src = Bry_.new_u8(raw); - ctx.Cur_page().Ttl_(Xoa_ttl.parse(fxt.Wiki(), Bry_.new_a7("test"))); + ctx.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); diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_tkn.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_tkn.java index 052fcc29c..b606d93b2 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_tkn.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_tkn.java @@ -221,7 +221,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { if (ignore_hash.Get_by_bry(name_ary) == null) { if (Pfunc_rel2abs.Rel2abs_ttl(name_ary, name_bgn, name_ary_len)) {// rel_path; EX: {{/../Peer page}}; DATE:2013-03-27 Bry_bfr tmp_bfr = ctx.App().Utl__bfr_mkr().Get_b512(); - name_ary = Pfunc_rel2abs.Rel2abs(tmp_bfr, Bry_.Mid(name_ary, name_bgn, name_ary_len), ctx.Cur_page().Ttl().Raw()); + name_ary = Pfunc_rel2abs.Rel2abs(tmp_bfr, Bry_.Mid(name_ary, name_bgn, name_ary_len), ctx.Page().Ttl().Raw()); tmp_bfr.Mkr_rls(); return SubEval(ctx, wiki, bfr, name_ary, caller, src); } @@ -237,9 +237,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_.new_exc(e, "xo", "failed to evaluate function", "page", ctx.Cur_page().Ttl().Full_txt(), "defn", defn.Name(), "src", String_.new_u8(src, this.Src_bgn(), this.Src_end())); + throw Err_.new_exc(e, "xo", "failed to evaluate function", "page", ctx.Page().Ttl().Full_txt(), "defn", defn.Name(), "src", String_.new_u8(src, this.Src_bgn(), this.Src_end())); else { - wiki.Appe().Usr_dlg().Warn_many("", "", "failed to evaluate function: page=~{0} defn=~{1} src=~{2} err=~{3}", ctx.Cur_page().Ttl().Full_txt(), defn.Name(), String_.new_u8(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_log(e)); + wiki.Appe().Usr_dlg().Warn_many("", "", "failed to evaluate function: page=~{0} defn=~{1} src=~{2} err=~{3}", ctx.Page().Ttl().Full_txt(), defn.Name(), String_.new_u8(src, this.Src_bgn(), this.Src_end()), Err_.Message_gplx_log(e)); rv = false; } } @@ -256,7 +256,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { Bld_key(invk_tmpl, name_ary, rslt_bfr); byte[] rslt_key = rslt_bfr.To_bry_and_clear(); 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); + Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Page().Tmpl_prepend_mgr().Bgn(bfr); if (o != null) { byte[] rslt = (byte[])o; prepend_mgr.End(ctx, bfr, rslt, rslt.length, Bool_.Y); @@ -316,7 +316,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { if (caller.Rslt_is_redirect()) // do not prepend if page is redirect; EX:"#REDIRECT" x> "\n#REDIRECT" DATE:2014-07-11 caller.Rslt_is_redirect_(false); // reset flag; needed for TEST; kludgy, but Rslt_is_redirect is intended for single use else - ctx.Cur_page().Tmpl_prepend_mgr().End(ctx, bfr, bfr_func.Bfr(), bfr_func.Len(), Bool_.N); + ctx.Page().Tmpl_prepend_mgr().End(ctx, bfr, bfr_func.Bfr(), bfr_func.Len(), Bool_.N); bfr.Add_bfr_and_clear(bfr_func); } private static Hash_adp_bry ignore_hash; @@ -345,7 +345,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { if (transclude_src == null && ctx.Tmpl_load_enabled()) { // ttl is template not in cache, or some other ns; do load Xow_page_cache_itm cache_itm = wiki.Cache_mgr().Page_cache().Get_or_load_as_itm(page_ttl); if ( cache_itm != null -// && Bry_.Eq(cache_itm.Ttl().Full_db(), ctx.Cur_page().Page_ttl().Full_db()) // make sure that transcluded item is not same as page_ttl; DATE:2014-01-10 +// && Bry_.Eq(cache_itm.Ttl().Full_db(), ctx.Page().Page_ttl().Full_db()) // make sure that transcluded item is not same as page_ttl; DATE:2014-01-10 ) { transclude_src = cache_itm.Wtxt(); page_ttl = cache_itm.Ttl(); @@ -364,7 +364,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { boolean rv = false; Xot_invk tmp_tmpl = Xot_defn_tmpl_.CopyNew(ctx, transclude_tmpl, this, caller, src, transclude_tmpl.Name()); Bry_bfr tmp_bfr = Bry_bfr.new_(); - Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Cur_page().Tmpl_prepend_mgr().Bgn(doc); + Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Page().Tmpl_prepend_mgr().Bgn(doc); rv = transclude_tmpl.Tmpl_evaluate(ctx, tmp_tmpl, tmp_bfr); prepend_mgr.End(ctx, doc, tmp_bfr.Bfr(), tmp_bfr.Len(), Bool_.Y); doc.Add_bfr_and_clear(tmp_bfr); @@ -408,7 +408,7 @@ public class Xot_invk_tkn extends Xop_tkn_itm_base implements Xot_invk { if (transclude_tmpl == null && ctx.Tmpl_load_enabled()) { // ttl is template not in cache, or some other ns; do load Xow_page_cache_itm cache_itm = wiki.Cache_mgr().Page_cache().Get_or_load_as_itm(page_ttl); if ( cache_itm != null) { - if (!Bry_.Eq(cache_itm.Ttl().Full_db(), ctx.Cur_page().Ttl().Full_db())) { // make sure that transcluded item is not same as page_ttl; DATE:2014-01-10 + if (!Bry_.Eq(cache_itm.Ttl().Full_db(), ctx.Page().Ttl().Full_db())) { // make sure that transcluded item is not same as page_ttl; DATE:2014-01-10 transclude_tmpl = ctx.Wiki().Parser_mgr().Main().Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), page_ttl.Ns(), page_ttl.Page_db(), cache_itm.Wtxt()); page_ttl = cache_itm.Ttl(); } diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_wkr.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_wkr.java index 56e3f7562..bdb5e0b07 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_invk_wkr.java @@ -72,7 +72,7 @@ public class Xot_invk_wkr implements Xop_ctx_wkr, Xop_arg_wkr { int subst_bgn = finder.Subst_bgn(), subst_end = finder.Subst_end(); invk.Tmpl_subst_props_(finder_typeId, subst_bgn, subst_end); if ((ctx.Parse_tid() == Xop_parser_.Parse_tid_tmpl && finder_typeId == Xot_defn_.Tid_subst) // NOTE: if subst, but in tmpl stage, do not actually subst; PAGE:en.w:Unreferenced; DATE:2013-01-31 - || ctx.Cur_page().Ttl().Ns().Id_is_tmpl()) { // also, if on tmpl page, never evaluate (questionable, but seems to be needed) + || ctx.Page().Ttl().Ns().Id_is_tmpl()) { // also, if on tmpl page, never evaluate (questionable, but seems to be needed) } else { key_tkn.Dat_rng_ary_(src, subst_end, txt_end); // redo txt_rng to ignore subst diff --git a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java index 9b23ab40a..c7b962a2e 100644 --- a/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java +++ b/400_xowa/src/gplx/xowa/parsers/tmpls/Xot_tmpl_wtr.java @@ -104,7 +104,7 @@ public class Xot_tmpl_wtr { if (Env_.Mode_testing()) throw Err_.new_exc(e, "xo", Err_string); else - 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); + ctx.App().Usr_dlg().Warn_many("", "", "failed to write tkn: page=~{0} err=~{1}", String_.new_u8(ctx.Page().Ttl().Page_db()), Err_string); } break; } diff --git a/400_xowa/src/gplx/xowa/parsers/utils/Xop_sanitizer.java b/400_xowa/src/gplx/xowa/parsers/utils/Xop_sanitizer.java index 62ff86e54..d6cb7f8f9 100644 --- a/400_xowa/src/gplx/xowa/parsers/utils/Xop_sanitizer.java +++ b/400_xowa/src/gplx/xowa/parsers/utils/Xop_sanitizer.java @@ -96,9 +96,6 @@ public class Xop_sanitizer { } return dirty; } - public static byte[] Escape_cls(byte[] v) { - return v; - } // static function escapeClass( $class ) { // // Convert ugly stuff to underscores and kill underscores in ugly places // return rtrim( preg_replace( @@ -106,15 +103,8 @@ public class Xop_sanitizer { // '_', // $class ), '_' ); // } + public static byte[] Escape_cls(byte[] v) { + return v; + } static final byte Tid_amp = 1, Tid_space = 2, Tid_colon = 3, Tid_percent = 4; } -/* -NOTE: original escapeID does following -1: ' ' -> _ -2: decode_html_ent(); -3: '%3A' -> : -4: % -> . -for performance -. combine 1,2,3,4: this will fail in cases like which will become " " instead of "_". -. if that happens, go to 2 passes and move 2: to 1 (this should have no side-effect) -*/ \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr.java b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr.java index 5aa740331..295bff70b 100644 --- a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr.java @@ -309,7 +309,7 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr { return Make_xnde_xtn(ctx, tkn_mkr, root, src, src_len, tag, bgn_pos, gtPos + 1, name_bgn, name_end, atrs_bgn, atrs_end, atrs, inline, pre2_hack); // find end tag and do not parse anything inbetween } if (tag.Restricted()) { - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); if ( page.Html_data().Html_restricted() && page.Wiki().Domain_tid() != Xow_domain_tid_.Int__home) { int end_pos = gtPos + 1; @@ -557,7 +557,7 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr { else { byte[] close_bry = tag.Xtn_end_tag_tmp(); // get tmp bry (so as not to new) if (tag.Langs() != null) { // cur tag has langs; EX:
; DATE:2014-07-18 - Xop_xnde_tag_lang tag_lang = tag.Langs_get(ctx.Lang().Case_mgr(), ctx.Cur_page().Lang().Lang_id(), src, name_bgn, name_end); + Xop_xnde_tag_lang tag_lang = tag.Langs_get(ctx.Lang().Case_mgr(), ctx.Page().Lang().Lang_id(), src, name_bgn, name_end); if (tag_lang == null) // tag does not match lang; EX: and lang=de; return ctx.Lxr_make_txt_(open_end); if (tag_lang != Xop_xnde_tag_lang.Instance) // tag matches; note Xop_xnde_tag_lang._ is a wildcard match; EX:
@@ -647,8 +647,8 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr { case Xop_xnde_tag_.Tid_listing_see: case Xop_xnde_tag_.Tid_listing_sleep: xnde_xtn = tkn_mkr.Xnde_listing(tag_id); break; case Xop_xnde_tag_.Tid_timeline: - boolean log_wkr_enabled = Timeline_log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Timeline_log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_timeline, src, xnde); - ctx.Cur_page().Html_data().Head_mgr().Itm__timeline().Enabled_y_(); + boolean log_wkr_enabled = Timeline_log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Timeline_log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_timeline, src, xnde); + ctx.Page().Html_data().Head_mgr().Itm__timeline().Enabled_y_(); break; case Xop_xnde_tag_.Tid_xowa_tag_bgn: case Xop_xnde_tag_.Tid_xowa_tag_end: @@ -670,7 +670,7 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr { xnde_xtn.Xtn_parse(ctx.Wiki(), ctx, root, src, xnde); } catch (Exception e) { - String err_msg = String_.Format("failed to render extension: title={0} excerpt={1} err={2}", ctx.Cur_page().Ttl().Full_txt() + String err_msg = String_.Format("failed to render extension: title={0} excerpt={1} err={2}", ctx.Page().Ttl().Full_txt() , Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()) , Err_.Message_gplx_log(e)); if (Env_.Mode_testing()) diff --git a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr_.java b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr_.java index a0b7a0c19..f05552cbd 100644 --- a/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr_.java +++ b/400_xowa/src/gplx/xowa/parsers/xndes/Xop_xnde_wkr_.java @@ -47,7 +47,7 @@ class Xop_xnde_wkr_ { int tid = ((Int_obj_ref)o).Val(); switch (tid) { case Find_xtn_end__tid__bgn: // handle nested refs; PAGE:en.w:UK; DATE:2015-12-26 - int angle_end_pos = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, i, src_end); if (angle_end_pos == Bry_find_.Not_found) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not find angle_end: page=~{0}", ctx.Cur_page().Url().To_str()); return Bry_find_.Not_found;} + int angle_end_pos = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, i, src_end); if (angle_end_pos == Bry_find_.Not_found) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not find angle_end: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;} if (src[angle_end_pos -1] == Byte_ascii.Slash) {} else ++depth; @@ -70,11 +70,11 @@ class Xop_xnde_wkr_ { } public static int Find_xtag_end(Xop_ctx ctx, byte[] src, int pos, int src_end) { int xtag_bgn = pos + Pfunc_tag.Xtag_bgn_lhs.length; - int tag_id = Bry_.To_int_or(src, xtag_bgn, xtag_bgn + Pfunc_tag.Id_len, -1); if (tag_id == -1) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not extract id from xtag_bgn: page=~{0}", ctx.Cur_page().Url().To_str()); return Bry_find_.Not_found;} + int tag_id = Bry_.To_int_or(src, xtag_bgn, xtag_bgn + Pfunc_tag.Id_len, -1); if (tag_id == -1) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not extract id from xtag_bgn: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;} Find_xtag_end__bfr.Add(Pfunc_tag.Xtag_end_lhs).Add_int_pad_bgn(Byte_ascii.Num_0, Pfunc_tag.Id_len, tag_id).Add(Pfunc_tag.Xtag_rhs); byte[] tag_end = Find_xtag_end__bfr.To_bry_and_clear(); - int rv = Bry_find_.Find_fwd(src, tag_end, pos + Pfunc_tag.Xtag_rhs.length); if (rv == Bry_find_.Not_found) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not find xtag end: page=~{0}", ctx.Cur_page().Url().To_str()); return Bry_find_.Not_found;} - rv = Bry_find_.Find_bwd(src, Byte_ascii.Lt, rv - 1); if (rv == Bry_find_.Not_found) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not find <: page=~{0}", ctx.Cur_page().Url().To_str()); return Bry_find_.Not_found;} + int rv = Bry_find_.Find_fwd(src, tag_end, pos + Pfunc_tag.Xtag_rhs.length); if (rv == Bry_find_.Not_found) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not find xtag end: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;} + rv = Bry_find_.Find_bwd(src, Byte_ascii.Lt, rv - 1); if (rv == Bry_find_.Not_found) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not find <: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;} return rv; } } diff --git a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java index 86338eae6..869394e62 100644 --- a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java +++ b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages.java @@ -73,7 +73,7 @@ public class Xows_page_allpages implements gplx.core.brys.Bfr_arg, GfoInvkAble, public int Rslt_list_len() {return rslt_list_len;} public void Rslt_list_len_(int v) {rslt_list_len = v;} private int rslt_list_len; public Xowd_page_itm[] Rslt_list_ttls() {return rslt_list_ttls;} private Xowd_page_itm[] rslt_list_ttls; public void Special_gen(Xowe_wiki wiki, Xoae_page page, Xoa_url url, Xoa_ttl ttl) { - wiki.Parser_mgr().Ctx().Cur_page().Html_data().Display_ttl_(wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_sp_allpages_hdr)); + wiki.Parser_mgr().Ctx().Page().Html_data().Display_ttl_(wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_sp_allpages_hdr)); url.Page_bry_(Bry_.Add(Bry_.new_a7("Special:"), ttl.Page_txt_wo_qargs())); // HACK: need to re-set Page b/c href_wtr does not eliminate qargs; DATE:2013-02-08 if (wiki.Domain_tid() == Xow_domain_tid_.Int__home) {wiki.Appe().Usr_dlg().Prog_many(GRP_KEY, "home.invalid", "AllPages not implemented for home wiki"); return;} if (rslt_list_ttls == null) this.Itms_per_page_(itms_per_page); diff --git a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java index 9422cafcc..7c69fa93b 100644 --- a/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java +++ b/400_xowa/src/gplx/xowa/specials/allPages/Xows_page_allpages_tst.java @@ -173,8 +173,8 @@ class Xows_page_allpages_fxt { public Xows_page_allpages_fxt Test_special_gen() { init_url = app.User().Wikii().Utl__url_parser().Parse(Xows_special_meta_.Itm__all_pages.Ttl_bry()); Xoa_ttl init_ttl = Make_init_ttl(); - allpages.Special_gen(wiki, wiki.Parser_mgr().Ctx().Cur_page(), init_url, init_ttl); - if (expd_display_ttl != null) Tfds.Eq(expd_display_ttl, String_.new_u8(wiki.Parser_mgr().Ctx().Cur_page().Html_data().Display_ttl())); + allpages.Special_gen(wiki, wiki.Parser_mgr().Ctx().Page(), init_url, init_ttl); + if (expd_display_ttl != null) Tfds.Eq(expd_display_ttl, String_.new_u8(wiki.Parser_mgr().Ctx().Page().Html_data().Display_ttl())); if (expd_address_page != null) Tfds.Eq(expd_address_page, String_.new_u8(init_url.Page_bry())); return this; } @@ -191,8 +191,8 @@ class Xows_page_allpages_fxt { } private Xoa_url init_url = Xoa_url.blank(); public Xows_page_allpages_fxt Test_build_html(String expd) { Exec_build(); - allpages.Build_html(wiki.Parser_mgr().Ctx().Cur_page()); - Tfds.Eq_str_lines(expd, String_.new_a7(wiki.Parser_mgr().Ctx().Cur_page().Data_raw())); + allpages.Build_html(wiki.Parser_mgr().Ctx().Page()); + Tfds.Eq_str_lines(expd, String_.new_a7(wiki.Parser_mgr().Ctx().Page().Data_raw())); return this; } private void Exec_build() { diff --git a/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_row.java b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_row.java new file mode 100644 index 000000000..f2e67587f --- /dev/null +++ b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_row.java @@ -0,0 +1,24 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.specials.randoms; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*; +public class Rndm_core_row { + public Rndm_core_row(int type, int total, int interval) {this.type = type; this.total = total; this.interval = interval;} + public final int type; + public final int total; + public final int interval; +} diff --git a/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_tbl.java b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_tbl.java new file mode 100644 index 000000000..f8bd41f44 --- /dev/null +++ b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_tbl.java @@ -0,0 +1,49 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.specials.randoms; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*; +import gplx.core.ios.*; import gplx.dbs.*; import gplx.dbs.utls.*; +public class Rndm_core_tbl implements Rls_able { + private final String tbl_name = "rndm_core"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_(); + private final String fld_rndm_uid, fld_rndm_total, fld_rndm_interval; + private final Db_conn conn; private Db_stmt stmt_select, stmt_insert; + public Rndm_core_tbl(Db_conn conn) { + this.conn = conn; + fld_rndm_uid = flds.Add_int("rndm_uid"); + fld_rndm_total = flds.Add_int("rndm_total"); + fld_rndm_interval = flds.Add_int("rndm_interval"); + conn.Rls_reg(this); + } + public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, "core", fld_rndm_uid)));} + public void Insert(int uid, int total, int interval) { + if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds); + stmt_insert.Clear().Val_int(fld_rndm_uid, uid).Val_int(fld_rndm_total, total).Val_int(interval).Exec_insert(); + } + public Rndm_core_row Select(int uid) { + if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, flds, fld_rndm_uid); + Db_rdr rdr = stmt_select.Clear().Val_int(fld_rndm_uid, uid).Exec_select__rls_manual(); + try { + int total = rdr.Read_int(fld_rndm_total); + int interval = rdr.Read_int(fld_rndm_interval); + return new Rndm_core_row(uid, total, interval); + } finally {rdr.Rls();} + } + public void Rls() { + stmt_select = Db_stmt_.Rls(stmt_select); + stmt_insert = Db_stmt_.Rls(stmt_insert); + } +} diff --git a/400_xowa/src/gplx/xowa/specials/randoms/Rndm_range_tbl.java b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_range_tbl.java new file mode 100644 index 000000000..2d72dbbf9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/specials/randoms/Rndm_range_tbl.java @@ -0,0 +1,57 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.specials.randoms; import gplx.*; import gplx.xowa.*; import gplx.xowa.specials.*; +import gplx.core.ios.*; import gplx.dbs.*; import gplx.dbs.utls.*; +public class Rndm_range_tbl implements Rls_able { + private final String tbl_name = "rng_range"; private final Dbmeta_fld_list flds = Dbmeta_fld_list.new_(); + private final String fld_rng_uid, fld_rng_idx, fld_rng_page_id; + private final Db_conn conn; private Db_stmt stmt_select, stmt_insert; + public Rndm_range_tbl(Db_conn conn) { + this.conn = conn; + fld_rng_uid = flds.Add_int("rng_uid"); + fld_rng_idx = flds.Add_int("rng_idx"); + fld_rng_page_id = flds.Add_int("rng_page_id"); + conn.Rls_reg(this); + } + public void Create_tbl() {conn.Ddl_create_tbl(Dbmeta_tbl_itm.New(tbl_name, flds, Dbmeta_idx_itm.new_unique_by_name(tbl_name, "core", fld_rng_uid, fld_rng_idx)));} + public void Insert(int uid, int idx, int page_id) { + if (stmt_insert == null) stmt_insert = conn.Stmt_insert(tbl_name, flds); + stmt_insert.Clear().Val_int(fld_rng_uid, uid).Val_int(fld_rng_idx, idx).Val_int(fld_rng_page_id, page_id).Exec_insert(); + } + public void Select(int type) { +// if (stmt_select == null) stmt_select = conn.Stmt_select(tbl_name, flds, fld_rng_uid); +// Db_rdr rdr = stmt_select.Clear().Val_int(fld_rng_type, type).Exec_select__rls_manual(); +// try { +// int total = rdr.Read_int(fld_rng_total); +// int interval = rdr.Read_int(fld_rng_interval); +// return new Rndm_core_row(type, total, interval); +// } finally {rdr.Rls();} + } + public void Rls() { + stmt_select = Db_stmt_.Rls(stmt_select); + stmt_insert = Db_stmt_.Rls(stmt_insert); + } + public void Get_random(int uid) { +// Rndm_core_row core_row = core_tbl.Get(uid); +// int rnd = RandomAdp_.new_().Next(core_row.total); +// int idx = rnd / core_row.interval; +// int off = rnd % core_row.interval; +// Rndm_rng_row rng_row = rng_tbl.Get(uid, idx); +// Xowd_page page = page_tbl.Get_by_page_offset(rng_row.page_id_bgn, off); + } +} diff --git a/400_xowa/src/gplx/xowa/specials/randoms/Xop_randomRootPage_page_tst.java b/400_xowa/src/gplx/xowa/specials/randoms/Xop_randomRootPage_page_tst.java index 36d9ea9da..87758231c 100644 --- a/400_xowa/src/gplx/xowa/specials/randoms/Xop_randomRootPage_page_tst.java +++ b/400_xowa/src/gplx/xowa/specials/randoms/Xop_randomRootPage_page_tst.java @@ -44,7 +44,7 @@ class Xop_randomRootPage_page_fxt { Tfds.Eq(expd, String_.new_a7(page.Data_raw())); } public static Xoae_page Test_special_open(Xowe_wiki wiki, Xows_page special_page, String special_url) { - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); Xoa_url url = wiki.Utl__url_parser().Parse(Bry_.new_u8(special_url)); page.Url_(url); Xoa_ttl ttl = Xoa_ttl.parse(wiki, Bry_.new_a7(special_url)); diff --git a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java index db2dc1a7b..be91a82e4 100644 --- a/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java +++ b/400_xowa/src/gplx/xowa/specials/search/Xosrh_core_tst.java @@ -201,7 +201,7 @@ public class Xosrh_core_tst { // byte[] url_raw = Bry_.new_a7("Special:Search/" + ttl_str + ((match_tid == Xows_page__search.Match_tid_all) ? "" : "*") + "?fulltext=y" + Xosrh_rslt_itm_sorter.Xto_url_arg(sort_tid) + "&xowa_page_size=1&xowa_page_index=" + page_idx); // Xoa_url url = url_parser.Parse(url_raw); // Xoa_ttl ttl = Xoa_ttl.parse(wiki, url_raw); -// Xoae_page page = wiki.Ctx().Cur_page(); +// Xoae_page page = wiki.Ctx().Page(); // search_mgr.Special_gen(url, page, wiki, ttl); // Xosrh_rslt_grp cur_grp = search_mgr.Cur_grp(); // bfr.Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_html_data.java b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_html_data.java index de9590a37..d8ae415f1 100644 --- a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_html_data.java +++ b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_html_data.java @@ -17,6 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.wikis.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import gplx.langs.htmls.*; import gplx.xowa.htmls.heads.*; import gplx.xowa.wikis.pages.skins.*; import gplx.xowa.xtns.indicators.*; +import gplx.xowa.xtns.pagebanners.*; public class Xopg_html_data { private Ordered_hash ctg_hash; public boolean Html_restricted() {return html_restricted;} private boolean html_restricted = true; @@ -50,6 +51,7 @@ public class Xopg_html_data { public int Xtn_imap_next_id() {return ++xtn_imap_next_id;} private int xtn_imap_next_id; // NOTE: must keep separate imap_id b/c html_elem_id is not always set; public byte[] Xtn_search_text() {return xtn_search_txt;} public void Xtn_search_text_(byte[] v) {xtn_search_txt = v;} private byte[] xtn_search_txt = Bry_.Empty; public byte[] Xtn_scribunto_dbg() {return xtn_scribunto_dbg;} public void Xtn_scribunto_dbg_(byte[] v) {xtn_scribunto_dbg = Bry_.Add(xtn_scribunto_dbg, v);} private byte[] xtn_scribunto_dbg = Bry_.Empty; + public Pgbnr_itm Xtn__pgbnr() {return xtn__pgbnr;} public void Xtn__pgbnr_(Pgbnr_itm v) {xtn__pgbnr = v;} private Pgbnr_itm xtn__pgbnr; public Xoh_head_mgr Head_mgr() {return module_mgr;} private Xoh_head_mgr module_mgr = new Xoh_head_mgr(); public byte[] Custom_html() {return custom_html;} public Xopg_html_data Custom_html_(byte[] v) {custom_html = v; return this;} private byte[] custom_html; public byte[] Custom_tab_name() {return custom_tab_name;} public Xopg_html_data Custom_tab_name_(byte[] v) {custom_tab_name = v; return this;} private byte[] custom_tab_name; @@ -79,6 +81,7 @@ public class Xopg_html_data { xtn_imap_exists = false; xtn_search_txt = Bry_.Empty; xtn_scribunto_dbg = Bry_.Empty; + xtn__pgbnr = null; module_mgr.Clear(); custom_html = custom_html_end = custom_head_end = custom_tab_name = null; if (ctg_hash != null) ctg_hash.Clear(); diff --git a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_revision_data.java b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_revision_data.java index 7976a08b1..50c237f7b 100644 --- a/400_xowa/src/gplx/xowa/wikis/pages/Xopg_revision_data.java +++ b/400_xowa/src/gplx/xowa/wikis/pages/Xopg_revision_data.java @@ -21,6 +21,8 @@ public class Xopg_revision_data { public DateAdp Modified_on() {return modified_on;} public Xopg_revision_data Modified_on_(DateAdp v) {modified_on = v; return this;} private DateAdp modified_on = DateAdp_.MinValue; public byte[] User() {return user;} public Xopg_revision_data User_(byte[] v) {user = v; return this;} private byte[] user = Bry_.Empty; public byte[] Protection_level() {return protection_level;} public Xopg_revision_data Protection_level_(byte[] v) {protection_level = v; return this;} private byte[] protection_level = Bry_.Empty; + public byte[] Protection_expiry() {return protection_expiry;} private byte[] protection_expiry = Bry__protection_expiry__infinite; public int Html_db_id() {return html_db_id;} public void Html_db_id_(int v) {html_db_id = v;} private int html_db_id = -1; public void Clear() {}// NOTE: do not clear data b/c saving in Edit will call clear and id will be reset to 0 + public static final byte[] Bry__protection_expiry__infinite = Bry_.new_a7("infinite"); } diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr.java index a1ba0d0cd..b49fd0c79 100644 --- a/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr.java @@ -46,7 +46,7 @@ public class Xoa_sitelink_div_wtr { byte[] ttl_bry = ttl.Page_txt_w_anchor(); boolean ttl_is_empty = false; if (Bry_.Len_eq_0(ttl_bry)) { // NOTE: handles ttls like [[fr:]] and [[:fr;]] which have an empty Page_txt, but a valued Full_txt_raw - ttl_bry = wiki.Parser_mgr().Ctx().Cur_page().Ttl().Page_txt(); + ttl_bry = wiki.Parser_mgr().Ctx().Page().Ttl().Page_txt(); ttl_is_empty = true; } itm.Init_by_page(slink.Domain_info(), ttl_bry, ttl_is_empty, slink.Badges()); diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr_fxt.java b/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr_fxt.java index e3eea0753..fbebd663e 100644 --- a/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr_fxt.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/sitelinks/htmls/Xoa_sitelink_div_wtr_fxt.java @@ -48,7 +48,7 @@ class Xoa_sitelink_div_wtr_fxt { Xoae_app app; public void tst(String raw, String expd) { Xop_ctx ctx = wiki.Parser_mgr().Ctx(); - ctx.Cur_page().Ttl_(Xoa_ttl.parse(wiki, Bry_.new_a7("test_page"))); + ctx.Page().Ttl_(Xoa_ttl.parse(wiki, Bry_.new_a7("test_page"))); byte[] raw_bry = Bry_.new_u8(raw); Bry_bfr bfr = Bry_bfr.new_(); Xop_root_tkn root = ctx.Tkn_mkr().Root(raw_bry); @@ -56,7 +56,7 @@ class Xoa_sitelink_div_wtr_fxt { wiki.Html_mgr().Html_wtr().Write_all(bfr, ctx, raw_bry, root); Bry_bfr html_bfr = Bry_bfr.new_(); - wiki.App().Xwiki_mgr__sitelink_mgr().Write_html(html_bfr, wiki, ctx.Cur_page().Slink_list(), gplx.xowa.xtns.wdatas.Wdata_xwiki_link_wtr.Qid_null); + wiki.App().Xwiki_mgr__sitelink_mgr().Write_html(html_bfr, wiki, ctx.Page().Slink_list(), gplx.xowa.xtns.wdatas.Wdata_xwiki_link_wtr.Qid_null); Tfds.Eq_str_lines(expd, html_bfr.To_str_and_clear()); } } diff --git a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java index 0e18bafef..281457070 100644 --- a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.xtns; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.xowa.xtns.cites.*; import gplx.xowa.xtns.imaps.*; import gplx.xowa.xtns.relatedSites.*; import gplx.xowa.xtns.proofreadPage.*; import gplx.xowa.xtns.wdatas.*; -import gplx.xowa.xtns.insiders.*; import gplx.xowa.xtns.indicators.*; +import gplx.xowa.xtns.insiders.*; import gplx.xowa.xtns.indicators.*; import gplx.xowa.xtns.pagebanners.*; public class Xow_xtn_mgr implements GfoInvkAble { private Ordered_hash regy = Ordered_hash_.New_bry(); public int Count() {return regy.Count();} @@ -29,6 +29,7 @@ public class Xow_xtn_mgr implements GfoInvkAble { public Indicator_xtn_mgr Xtn_indicator() {return xtn_indicator;} private Indicator_xtn_mgr xtn_indicator; public Pp_xtn_mgr Xtn_proofread() {return xtn_proofread;} private Pp_xtn_mgr xtn_proofread; public Wdata_xtn_mgr Xtn_wikibase() {return xtn_wikibase;} private Wdata_xtn_mgr xtn_wikibase; + public Pgbnr_xtn_mgr Xtn_pgbnr() {return xtn_pgbnr;} private Pgbnr_xtn_mgr xtn_pgbnr; public Xow_xtn_mgr Ctor_by_app(Xoae_app app) { // NOTE: needed for options Add(app, new Cite_xtn_mgr()); Add(app, new Imap_xtn_mgr()); @@ -37,6 +38,7 @@ public class Xow_xtn_mgr implements GfoInvkAble { Add(app, new Indicator_xtn_mgr()); Add(app, new Pp_xtn_mgr()); Add(app, new Wdata_xtn_mgr()); + Add(app, new Pgbnr_xtn_mgr()); Add(app, new gplx.xowa.xtns.scribunto.Scrib_xtn_mgr()); Add(app, new gplx.xowa.xtns.gallery.Gallery_xtn_mgr()); Add(app, new gplx.xowa.xtns.poems.Poem_xtn_mgr()); @@ -45,7 +47,7 @@ public class Xow_xtn_mgr implements GfoInvkAble { Add(app, new gplx.xowa.xtns.listings.Listing_xtn_mgr()); Add(app, new gplx.xowa.xtns.titleBlacklists.Blacklist_xtn_mgr()); Add(app, new gplx.xowa.xtns.pfuncs.scribunto.Pfunc_xtn_mgr()); -// Add(app, new gplx.xowa.xtns.graphs.Graph_xtn()); + Add(app, new gplx.xowa.xtns.flaggedRevs.Flagged_revs_xtn_mgr()); return this; } public Xow_xtn_mgr Ctor_by_wiki(Xowe_wiki wiki) { @@ -95,17 +97,19 @@ public class Xow_xtn_mgr implements GfoInvkAble { case Tid_imap: xtn_imap = (Imap_xtn_mgr)mgr; break; case Tid_proofread: xtn_proofread = (Pp_xtn_mgr)mgr; break; case Tid_wikibase: xtn_wikibase = (Wdata_xtn_mgr)mgr; break; + case Tid_pgbnr: xtn_pgbnr = (Pgbnr_xtn_mgr)mgr; break; } } - private static final byte Tid_cite = 0, Tid_sites = 1, Tid_insider = 2, Tid_imap = 3, Tid_proofread = 4, Tid_wikibase = 5, Tid_indicator = 6; + private static final byte Tid_cite = 0, Tid_sites = 1, Tid_insider = 2, Tid_imap = 3, Tid_proofread = 4, Tid_wikibase = 5, Tid_indicator = 6, Tid_pgbnr = 7; private static final Btrie_slim_mgr xtn_tid_trie = Btrie_slim_mgr.cs() - .Add_bry_byte(Cite_xtn_mgr.XTN_KEY , Tid_cite) - .Add_bry_byte(Sites_xtn_mgr.XTN_KEY , Tid_sites) - .Add_bry_byte(Insider_xtn_mgr.XTN_KEY , Tid_insider) - .Add_bry_byte(Indicator_xtn_mgr.XTN_KEY , Tid_indicator) - .Add_bry_byte(Imap_xtn_mgr.XTN_KEY , Tid_imap) - .Add_bry_byte(Pp_xtn_mgr.XTN_KEY , Tid_proofread) - .Add_bry_byte(Wdata_xtn_mgr.XTN_KEY , Tid_wikibase) + .Add_bry_byte(Cite_xtn_mgr.XTN_KEY , Tid_cite) + .Add_bry_byte(Sites_xtn_mgr.XTN_KEY , Tid_sites) + .Add_bry_byte(Insider_xtn_mgr.XTN_KEY , Tid_insider) + .Add_bry_byte(Indicator_xtn_mgr.XTN_KEY , Tid_indicator) + .Add_bry_byte(Imap_xtn_mgr.XTN_KEY , Tid_imap) + .Add_bry_byte(Pp_xtn_mgr.XTN_KEY , Tid_proofread) + .Add_bry_byte(Wdata_xtn_mgr.XTN_KEY , Tid_wikibase) + .Add_bry_byte(Pgbnr_xtn_mgr.Xtn_key_static , Tid_pgbnr) ; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_get)) return Get_or_fail(m.ReadBry("v")); diff --git a/400_xowa/src/gplx/xowa/xtns/cites/Ref_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/cites/Ref_html_wtr.java index 36e611f7f..1f2c3bf38 100644 --- a/400_xowa/src/gplx/xowa/xtns/cites/Ref_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/cites/Ref_html_wtr.java @@ -67,7 +67,7 @@ public class Ref_html_wtr { } public void Xnde_references(Xoh_html_wtr wtr, Xop_ctx ctx, Xoh_wtr_ctx opts, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) { References_nde references = (References_nde)xnde.Xnde_xtn(); - Ref_itm_lst lst = ctx.Cur_page().Ref_mgr().Lst_get(references.Group(), references.List_idx()); // get group; EX: + Ref_itm_lst lst = ctx.Page().Ref_mgr().Lst_get(references.Group(), references.List_idx()); // get group; EX: if (lst == null) return; // NOTE: possible to have a grouped references without references; EX: Infobox planet; in sidebar, but no refs if (lst.Itms_len() == 0) return; bfr.Add(cfg.Grp_bgn()); diff --git a/400_xowa/src/gplx/xowa/xtns/cites/Ref_nde.java b/400_xowa/src/gplx/xowa/xtns/cites/Ref_nde.java index 7124c3b7a..a70e028cb 100644 --- a/400_xowa/src/gplx/xowa/xtns/cites/Ref_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/cites/Ref_nde.java @@ -53,7 +53,7 @@ public class Ref_nde implements Xox_xnde, Mwh_atr_itm_owner { nested = true; // refs nested in references don't show entry in } if (!ctx.Ref_ignore()) // sub_ctx may be marked to ignore ; EX: ,{{#lst}}; DATE:2014-04-24 - ctx.Cur_page().Ref_mgr().Grps_add(group, name, follow, this); + ctx.Page().Ref_mgr().Grps_add(group, name, follow, this); this.xnde = xnde; } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { diff --git a/400_xowa/src/gplx/xowa/xtns/cites/References_nde.java b/400_xowa/src/gplx/xowa/xtns/cites/References_nde.java index 99d5bd50f..0497f352d 100644 --- a/400_xowa/src/gplx/xowa/xtns/cites/References_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/cites/References_nde.java @@ -31,7 +31,7 @@ public class References_nde implements Xox_xnde, Mwh_atr_itm_owner { } public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { if (ctx.Tid_is_popup()) return; - Ref_itm_mgr ref_mgr = ctx.Cur_page().Ref_mgr(); + Ref_itm_mgr ref_mgr = ctx.Page().Ref_mgr(); if (ref_mgr.References__recursing()) return; // skip nested else refs will be lost; EX:""; PAGE:en.w:Hwair; DATE:2014-06-27 ctx.Para().Process_block__bgn_n__end_y(Xop_xnde_tag_.Tag_div); // xnde generates ; ->
    ; close any blocks; PAGE:fr.w:Heidi_(roman); DATE:2014-02-17 Xox_xnde_.Xatr__set(wiki, this, xatrs_hash, src, xnde); diff --git a/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_xnde.java b/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_xnde.java index 6830a1241..4828be2ab 100644 --- a/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/dynamicPageList/Dpl_xnde.java @@ -24,7 +24,7 @@ public class Dpl_xnde implements Xox_xnde { private Dpl_itm itm = new Dpl_itm(); private List_adp pages = List_adp_.new_(); public void Xatr__set(Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) {} // NOTE: has no attributes public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { - itm.Parse(wiki, ctx, ctx.Cur_page().Ttl().Full_txt(), src, xnde); + itm.Parse(wiki, ctx, ctx.Page().Ttl().Full_txt(), src, xnde); Dpl_page_finder.Find_pages(pages, wiki, itm); if (itm.Sort_ascending() != Bool_.__byte) pages.Sort_by(new Dpl_page_sorter(itm)); diff --git a/400_xowa/src/gplx/xowa/xtns/flaggedRevs/Flagged_revs_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/Flagged_revs_xtn_mgr.java new file mode 100644 index 000000000..3f1f98032 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/Flagged_revs_xtn_mgr.java @@ -0,0 +1,27 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.flaggedRevs; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.flaggedRevs.scribunto.*; +public class Flagged_revs_xtn_mgr extends Xox_mgr_base { + @Override public byte[] Xtn_key() {return XTN_KEY;} public static final byte[] XTN_KEY = Bry_.new_a7("FlaggedRevs"); + @Override public Xox_mgr Clone_new() {return new Flagged_revs_xtn_mgr();} + @Override public void Xtn_init_by_app(Xoae_app app) { + Scrib_xtn_mgr scrib_xtn = (Scrib_xtn_mgr)app.Xtn_mgr().Get_or_fail(Scrib_xtn_mgr.XTN_KEY); + scrib_xtn.Lib_mgr().Add(new Flagged_revs_lib()); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib.java b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib.java new file mode 100644 index 000000000..3d2114618 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib.java @@ -0,0 +1,61 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.flaggedRevs.scribunto; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.flaggedRevs.*; +import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*; +import gplx.xowa.xtns.pfuncs.exprs.*; +public class Flagged_revs_lib implements Scrib_lib { + private Scrib_core core; + public Scrib_lua_mod Mod() {return mod;} private Scrib_lua_mod mod; + public Scrib_lib Init() {procs.Init_by_lib(this, Proc_names); return this;} + public Scrib_lib Core_(Scrib_core v) {this.core = v; return this;} // TEST: + public Scrib_lua_mod Register(Scrib_core core, Io_url script_dir) { + this.core = core; + Init(); + mod = core.RegisterInterface(this, core.App().Fsys_mgr().Bin_xtns_dir().GenSubFil_nest("FlaggedRevs", "scribunto", "mw.ext.FlaggedRevs.lua")); + return mod; + } + public Scrib_proc_mgr Procs() {return procs;} private final Scrib_proc_mgr procs = new Scrib_proc_mgr(); + public boolean Procs_exec(int key, Scrib_proc_args args, Scrib_proc_rslt rslt) { + switch (key) { + case Proc_getStabilitySettings: return GetStabilitySettings(args, rslt); + default: throw Err_.new_unhandled(key); + } + } + private static final int Proc_getStabilitySettings = 0; + public static final String Invk_getStabilitySettings = "getStabilitySettings"; + private static final String[] Proc_names = String_.Ary(Invk_getStabilitySettings); + public boolean GetStabilitySettings(Scrib_proc_args args, Scrib_proc_rslt rslt) { + byte[] page_name = args.Cast_bry_or_null(0); + Xoa_ttl page_ttl = null; + if (page_name == null) + page_ttl = core.Ctx().Page().Ttl(); + else { + page_ttl = core.Wiki().Ttl_parse(page_name); + if (page_ttl == null) return rslt.Init_null(); + } + // if ( !FlaggedRevs::inReviewNamespace( $title ) ) return rslt.Init_null(); + return rslt.Init_obj(getDefaultVisibilitySettings()); + } + private static KeyVal[] getDefaultVisibilitySettings() { + KeyVal[] rv = new KeyVal[3]; + rv[0] = KeyVal_.new_("over"+"ride", 0); // FlaggedRevs::isStableShownByDefault() ? 1 : 0, + rv[1] = KeyVal_.new_("autoreview", ""); + rv[2] = KeyVal_.new_("expiry", "infinity"); + return rv; + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib_tst.java b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib_tst.java new file mode 100644 index 000000000..2d802172e --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/flaggedRevs/scribunto/Flagged_revs_lib_tst.java @@ -0,0 +1,37 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.flaggedRevs.scribunto; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.flaggedRevs.*; +import org.junit.*; +import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*; import gplx.xowa.xtns.scribunto.engines.mocks.*; +public class Flagged_revs_lib_tst { + private final Mock_scrib_fxt fxt = new Mock_scrib_fxt(); private Flagged_revs_lib lib; + @Before public void init() { + fxt.Clear(); + lib = new Flagged_revs_lib(); + lib.Init(); + lib.Core_(fxt.Core()); + } + @Test public void GetStabilitySettings() { + fxt.Test__proc__objs__nest(lib, Flagged_revs_lib.Invk_getStabilitySettings, Object_.Ary("Page1"), String_.Concat_lines_nl_skip_last + ( "1=" + , " over"+"ride=0" + , " autoreview=" + , " expiry=infinity" + )); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java index e591ae148..0ad708dda 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm.java @@ -50,7 +50,7 @@ public class Gallery_itm implements Js_img_wkr { Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004(), tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); try { xfer_itm.Init_at_gallery_end(html_w, html_h, html_view_url, html_orig_url); - gallery_mgr.Write_html_itm(bfr, tmp_bfr, wiki.Appe(), wiki, ctx.Cur_page(), ctx, wiki.Html_mgr().Html_wtr(), Xoh_wtr_ctx.Basic, src, xnde, Bry_.Empty, gallery_itm_idx, xfer_itm, false); + gallery_mgr.Write_html_itm(bfr, tmp_bfr, wiki.Appe(), wiki, ctx.Page(), ctx, wiki.Html_mgr().Html_wtr(), Xoh_wtr_ctx.Basic, src, xnde, Bry_.Empty, gallery_itm_idx, xfer_itm, false); String itm_html = bfr.To_str_and_clear(); js_wkr.Html_elem_replace_html(String_.new_u8(gallery_li_id_bry), itm_html); if (gallery_itm_idx == xnde.Itms_len() - 1 && Gallery_mgr_base_.Mode_is_packed(xnde.Mode())) diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java index c62c4eda5..43f4aadab 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_itm_parser.java @@ -69,7 +69,7 @@ public class Gallery_itm_parser { cur_itm.Lnki_tkn_(lnki_tkn); if (cur_itm.Page_bgn() != -1) { int page_val = Bry_.To_int_or(src, cur_itm.Page_bgn(), cur_itm.Page_end(), -1); - if (page_val == -1) Xoa_app_.Usr_dlg().Warn_many("", "", "page is not an int: wiki=~{0} ttl=~{1} page=~{2}", wiki.Domain_str(), ctx.Cur_page().Ttl().Page_db(), String_.new_u8(src, cur_itm.Page_bgn(), cur_itm.Page_end())); + if (page_val == -1) Xoa_app_.Usr_dlg().Warn_many("", "", "page is not an int: wiki=~{0} ttl=~{1} page=~{2}", wiki.Domain_str(), ctx.Page().Ttl().Page_db(), String_.new_u8(src, cur_itm.Page_bgn(), cur_itm.Page_end())); lnki_tkn.Page_(page_val); } byte[] lnki_caption = cur_itm.Caption_bry(); @@ -78,8 +78,8 @@ public class Gallery_itm_parser { cur_itm.Caption_tkn_(caption_tkn); } Xopg_redlink_logger file_wkr = ctx.Lnki().File_wkr(); // NOTE: do not set file_wkr ref early (as member var); parse_all sets late - ctx.Cur_page().Lnki_list().Add(lnki_tkn); - mgr.Get_thumb_size(lnki_tkn, cur_itm.Ext()); // NOTE: set thumb size, so that lnki.temp parse picks it up + ctx.Page().Lnki_list().Add(lnki_tkn); + mgr.Get_thumb_size(lnki_tkn, cur_itm.Ext()); // NOTE: set thumb size, so that lnki.temp parse picks it up if (file_wkr != null) file_wkr.Wkr_exec(ctx, src, lnki_tkn, gplx.xowa.bldrs.cmds.files.Xob_lnki_src_tid.Tid_gallery); lnki_tkn.W_(-1).H_(-1); // NOTE: reset lnki back to defaults, else itm will show as large missing caption } diff --git a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_xnde.java b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_xnde.java index 4830f4167..830a60bac 100644 --- a/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/gallery/Gallery_xnde.java @@ -63,11 +63,11 @@ public class Gallery_xnde implements Xox_xnde, Mwh_atr_itm_owner { Xox_xnde_.Xatr__set(wiki, this, Gallery_xnde_atrs.Key_hash, src, xnde); xtn_mgr = (Gallery_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Gallery_xtn_mgr.XTN_KEY); Init_atrs(wiki); - gallery_mgr.Get_modules(ctx.Cur_page()); + gallery_mgr.Get_modules(ctx.Page()); Gallery_itm_parser parser = xtn_mgr.Parser(); if (parser.Parse_in_progress()) parser = new Gallery_itm_parser().Init_by_wiki(wiki); // handle nested galleries; EX: ; PAGE:es.w:Arquitectura_medieval DATE:2015-07-10 parser.Parse_all(itms, gallery_mgr, this, src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_gallery, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_gallery, src, xnde); ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_end); // cancel pre for ; DATE:2014-03-11 } catch (Exception exc) { wiki.Appe().Usr_dlg().Warn_many("", "", "failed to write gallery; src=~{0} err=~{1}", String_.new_u8(src, xnde.Src_bgn(), xnde.Src_end()), Err_.Message_gplx_full(exc)); @@ -77,9 +77,9 @@ public class Gallery_xnde implements Xox_xnde, Mwh_atr_itm_owner { Xowe_wiki wiki = ctx.Wiki(); try { if (html_wtr_v1) - xtn_mgr.Html_wtr().Write_html(bfr, app, wiki, ctx, html_wtr, hctx, ctx.Cur_page(), this, src); + xtn_mgr.Html_wtr().Write_html(bfr, app, wiki, ctx, html_wtr, hctx, ctx.Page(), this, src); else { - gallery_mgr.Write_html(bfr, wiki, ctx.Cur_page(), ctx, hctx, src, this); + gallery_mgr.Write_html(bfr, wiki, ctx.Page(), ctx, hctx, src, this); } } catch (Exception exc) { wiki.Appe().Usr_dlg().Warn_many("", "", "failed to write gallery; src=~{0} err=~{1}", String_.new_u8(src, xnde.Src_bgn(), xnde.Src_end()), Err_.Message_gplx_full(exc)); diff --git a/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java b/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java index cdb675a17..841f15849 100644 --- a/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java +++ b/400_xowa/src/gplx/xowa/xtns/geoCrumbs/Geoc_isin_func.java @@ -28,8 +28,8 @@ public class Geoc_isin_func extends Pf_func_base { Xoa_ttl ttl = Xoa_ttl.parse(wiki, ttl_bry); if (ttl == null) return; byte[] lnki_ttl = Bry_.Add(Xop_tkn_.Lnki_bgn, ttl_bry, Xop_tkn_.Lnki_end); // make "[[ttl]]" Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_b128(); - wiki.Parser_mgr().Main().Parse_text_to_html(tmp_bfr, ctx.Cur_page(), false, lnki_ttl); - ctx.Cur_page().Html_data().Content_sub_(tmp_bfr.To_bry_and_rls()); + wiki.Parser_mgr().Main().Parse_text_to_html(tmp_bfr, ctx.Page(), false, lnki_ttl); + ctx.Page().Html_data().Content_sub_(tmp_bfr.To_bry_and_rls()); } public static final Geoc_isin_func Instance = new Geoc_isin_func(); } diff --git a/400_xowa/src/gplx/xowa/xtns/graphs/Graph_xnde.java b/400_xowa/src/gplx/xowa/xtns/graphs/Graph_xnde.java index 8f797b9e4..00ed3c449 100644 --- a/400_xowa/src/gplx/xowa/xtns/graphs/Graph_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/graphs/Graph_xnde.java @@ -22,8 +22,8 @@ public class Graph_xnde implements Xox_xnde { public void Xatr__set(Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) {} public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_bgn); - ctx.Cur_page().Html_data().Head_mgr().Itm__graph().Enabled_y_(); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_graph, src, xnde); + ctx.Page().Html_data().Head_mgr().Itm__graph().Enabled_y_(); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_graph, src, xnde); ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_end); } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { diff --git a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xnde.java b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xnde.java index 12fb4857f..41576f951 100644 --- a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xnde.java @@ -26,9 +26,9 @@ public class Hiero_xnde implements Xox_xnde { ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_bgn); xtn_mgr = (Hiero_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Hiero_xtn_mgr.Xtn_key_static); xtn_mgr.Xtn_init_assert(wiki); - ctx.Cur_page().Html_data().Head_mgr().Itm__hiero().Enabled_y_(); + ctx.Page().Html_data().Head_mgr().Itm__hiero().Enabled_y_(); blocks = xtn_mgr.Parser().Parse(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_hiero, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_hiero, src, xnde); ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_end); switch (ctx.Cur_tkn_tid()) { case Xop_tkn_itm_.Tid_list: // NOTE: if inside list, do not reenable para mode; questionable logic; PAGE:de.d:Damascus;DATE:2014-06-06 diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java index 0669f45bb..6d1dae326 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java @@ -41,8 +41,8 @@ class Imap_parser { shapes.Clear(); pts.Clear(); errs.Clear(); } public Imap_map Parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { - Imap_map rv = new Imap_map(ctx.Cur_page().Html_data().Xtn_imap_next_id()); - Init(wiki, ctx.Cur_page(), wiki.Appe().Usr_dlg()); + Imap_map rv = new Imap_map(ctx.Page().Html_data().Xtn_imap_next_id()); + Init(wiki, ctx.Page(), wiki.Appe().Usr_dlg()); this.Parse(rv, src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); return rv; } @@ -197,7 +197,7 @@ class Imap_parser { Xop_lnki_tkn lnki_tkn = (Xop_lnki_tkn)tkn_itm; imap_img = new Imap_itm_img(lnki_tkn); lnki_tkn.Lnki_file_wkr_(imap); - wiki_ctx.Cur_page().Lnki_list().Add(lnki_tkn); + wiki_ctx.Page().Lnki_list().Add(lnki_tkn); if (file_wkr != null) file_wkr.Wkr_exec(wiki_ctx, src, lnki_tkn, gplx.xowa.bldrs.cmds.files.Xob_lnki_src_tid.Tid_imageMap); } return img_end; diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde.java index c947489f1..09b232923 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde.java @@ -24,13 +24,13 @@ public class Imap_xnde implements Xox_xnde { public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { xtn_mgr = wiki.Xtn_mgr().Xtn_imap(); xtn_mgr.Xtn_assert(); - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); page.Html_data().Head_mgr().Itm__popups().Bind_hover_area_(true); page.Html_data().Xtn_imap_exists_y_(); ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_end); imap_data = xtn_mgr.Parser().Parse(wiki, ctx, root, src, xnde); ctx.Para().Process_block__xnde(xnde.Tag(), Xop_xnde_tag.Block_end); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_imageMap, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_imageMap, src, xnde); } public static Xop_log_basic_wkr Log_wkr = Xop_log_basic_wkr.Null; public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { if (imap_data.Invalid()) return; diff --git a/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_html_bldr_tst.java b/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_html_bldr_tst.java index 83f11a336..e5c399cdc 100644 --- a/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_html_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_html_bldr_tst.java @@ -50,7 +50,7 @@ class Indicator_html_bldr_fxt { this.xtn_mgr = wiki.Xtn_mgr().Xtn_indicator(); xtn_mgr.Enabled_y_(); xtn_mgr.Xtn_init_by_wiki(wiki); - this.page = wiki.Parser_mgr().Ctx().Cur_page(); + this.page = wiki.Parser_mgr().Ctx().Page(); } public void Init_indicator(String name, String html) { Indicator_xnde xnde = new Indicator_xnde(); diff --git a/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_xnde.java b/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_xnde.java index bbadadc30..4269a51cb 100644 --- a/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/indicators/Indicator_xnde.java @@ -31,8 +31,8 @@ public class Indicator_xnde implements Xox_xnde, Mwh_atr_itm_owner { } public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { Xox_xnde_.Xatr__set(wiki, this, xatrs_hash, src, xnde); - this.html = Xop_parser_.Parse_text_to_html(wiki, ctx.Cur_page(), ctx.Cur_page().Ttl(), Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()), false); - Indicator_html_bldr html_bldr = ctx.Cur_page().Html_data().Indicators(); + this.html = Xop_parser_.Parse_text_to_html(wiki, ctx.Page(), ctx.Page().Ttl(), Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()), false); + Indicator_html_bldr html_bldr = ctx.Page().Html_data().Indicators(); if (this.name != null) html_bldr.Add(this); // NOTE: must do null-check b/c Add will use Name as key for hashtable } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { diff --git a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_func.java b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_func.java index b74fbf908..771271163 100644 --- a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_func.java +++ b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_func.java @@ -24,7 +24,7 @@ public class Insider_func extends Pf_func_base { @Override public Pf_func New(int id, byte[] name) {return new Insider_func().Name_(name);} @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] val = Eval_argx(ctx, src, caller, self); - Xopg_xtn_skin_mgr skin_mgr = ctx.Cur_page().Html_data().Xtn_skin_mgr(); + Xopg_xtn_skin_mgr skin_mgr = ctx.Page().Html_data().Xtn_skin_mgr(); Insider_xtn_skin_itm skin_itm = (Insider_xtn_skin_itm)skin_mgr.Get_or_null(Insider_xtn_skin_itm.KEY); if (skin_itm == null) { skin_itm = new Insider_xtn_skin_itm(ctx.Wiki().Xtn_mgr().Xtn_insider().Html_bldr()); diff --git a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java index 4c89cf1e3..92636fb72 100644 --- a/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/insiders/Insider_html_bldr_tst.java @@ -47,7 +47,7 @@ class Insider_html_bldr_fxt { this.xtn_mgr = wiki.Xtn_mgr().Xtn_insider(); xtn_mgr.Enabled_y_(); xtn_mgr.Xtn_init_by_wiki(wiki); - this.page = wiki.Parser_mgr().Ctx().Cur_page(); + this.page = wiki.Parser_mgr().Ctx().Page(); skin_itm = new Insider_xtn_skin_itm(xtn_mgr.Html_bldr()); page.Html_data().Xtn_skin_mgr().Add(skin_itm); } diff --git a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java index 6b76c92d8..213efa9ff 100644 --- a/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java +++ b/400_xowa/src/gplx/xowa/xtns/lst/Lst_pfunc_wkr.java @@ -40,7 +40,7 @@ public class Lst_pfunc_wkr { sub_ctx = Xop_ctx.new_sub_(wiki).Ref_ignore_(true); byte[] src_page_bry = wiki.Cache_mgr().Page_cache().Get_or_load_as_src(src_ttl); if (src_page_bry == null) return; // {{#lst:missing}} -> "" - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); if (!page.Tmpl_stack_add(src_ttl.Full_db())) return; defn_tmpl = wiki.Parser_mgr().Main().Parse_text_to_defn_obj(sub_ctx, sub_ctx.Tkn_mkr(), src_ttl.Ns(), src_ttl_bry, src_page_bry); // NOTE: parse as tmpl to ignore Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001(); diff --git a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_math.java b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_math.java index ef4d90965..869e6de4d 100644 --- a/400_xowa/src/gplx/xowa/xtns/mapSources/Map_math.java +++ b/400_xowa/src/gplx/xowa/xtns/mapSources/Map_math.java @@ -44,7 +44,7 @@ class Map_math {// REF.MW:MapSources_math.php return error == 0; } public void Fail(Xop_ctx ctx, byte[] src, Xot_invk self, Bry_bfr bfr, byte[] pfunc_name) { - String page_str = ctx.Cur_page().Url().To_str(); + String page_str = ctx.Page().Url().To_str(); String pfunc_name_str = String_.new_u8(pfunc_name); String self_str = String_.new_u8(src, self.Src_bgn(), self.Src_end()); switch (error) { diff --git a/400_xowa/src/gplx/xowa/xtns/math/Math_nde.java b/400_xowa/src/gplx/xowa/xtns/math/Math_nde.java index 561eda7bc..14b3779e3 100644 --- a/400_xowa/src/gplx/xowa/xtns/math/Math_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/math/Math_nde.java @@ -23,9 +23,9 @@ public class Math_nde implements Xox_xnde { public void Xatr__set(Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) {} public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { Xof_math_mgr math_mgr = wiki.Appe().File_mgr().Math_mgr(); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_math, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_math, src, xnde); if (math_mgr.Enabled() && math_mgr.Renderer_is_mathjax()) - ctx.Cur_page().Html_data().Head_mgr().Itm__mathjax().Enabled_y_(); + ctx.Page().Html_data().Head_mgr().Itm__mathjax().Enabled_y_(); } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { app.File_mgr().Math_mgr().Html_wtr().Write(html_wtr, ctx, hctx, bfr, src, xnde); diff --git a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java index 84bcd9ba7..5b5729ac0 100644 --- a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_html_wtr.java @@ -24,7 +24,7 @@ public class Xof_math_html_wtr { private Bry_fmtr math_fmtr_latex = Bry_fmtr.new_("~{math_text}", "math_idx", "math_text"); private Bry_fmtr math_fmtr_mathjax = Bry_fmtr.new_("~{math_text}", "math_idx", "math_text"); public void Write(Xoh_html_wtr wtr, Xop_ctx ctx, Xoh_wtr_ctx opts, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) { - Xoae_app app = ctx.App(); Xowe_wiki wiki = ctx.Wiki(); Xoae_page page = ctx.Cur_page(); + Xoae_app app = ctx.App(); Xowe_wiki wiki = ctx.Wiki(); Xoae_page page = ctx.Page(); boolean renderer_is_latex = !app.File_mgr().Math_mgr().Renderer_is_mathjax(); byte[] math_bry = Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); Bry_bfr tmp_bfr = app.Utl__bfr_mkr().Get_b512().Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_cfg.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_cfg.java index 3684568be..0ef92e7e7 100644 --- a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_cfg.java +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_cfg.java @@ -16,135 +16,16 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.xowa.parsers.*; -class Pgbnr_cfg { +public class Pgbnr_cfg { + private static final int[] wpb_standard_sizes = new int[] {640, 1280, 2560}; public byte[] Default_file() {return null;} public boolean Enabled_in_ns(int ns_id) {return false;} -} -class Pgbnr_icon { - public byte[] Name; - public byte[] Title; - public byte[] Url; - public Pgbnr_icon(byte[] name, byte[] title, byte[] url) { - this.Name = name; this.Title = title; this.Url = url; + public boolean Get__wpb_enable_default_banner() {return false;} + public boolean Get__wpb_enable_heading_override() {return false;} + public byte[] Get__wpb_image() {return null;} + public int[] Get__wpb_standard_sizes() {return wpb_standard_sizes;} + public boolean Chk_pgbnr_allowed(Xoa_ttl ttl, Xowe_wiki wiki) { + return this.Enabled_in_ns(ttl.Ns().Id()) // chk if ns allows banner + && !Bry_.Eq(ttl.Page_db(), wiki.Props().Main_page()); // never show on main page } - public static final Pgbnr_icon[] Ary_empty = new Pgbnr_icon[0]; -} -class Pgbnr_itm { - public byte[] Name; - public byte[] Tooltip; - public byte[] Title; - public boolean Bottomtoc; - public boolean Toc; - public Xoa_ttl File_ttl; - public Pgbnr_icon[] Icons; - public Pgbnr_itm(byte[] name, byte[] tooltip, byte[] title, boolean bottomtoc, boolean toc, Xoa_ttl file_ttl, Pgbnr_icon[] icons) { - this.Name = name; - this.Tooltip = tooltip; this.Title = title; this.Bottomtoc = bottomtoc; this.Toc = toc; this.File_ttl = file_ttl; this.Icons = icons; - } -// public static void Do(Bry_bfr bfr, Xop_ctx ctx, Pgbnr_cfg cfg, Pgbnr_itm itm) { -// if (itm != null) { -// byte[] name = itm.Name; -//// if ( isset( $params['icons'] ) ){ -//// $out->enableOOUI(); -//// $params['icons'] = self::expandIconTemplateOptions( $params['icons'] ); -//// } -// // $banner = $wpbFunctionsClass::getBannerHtml( $bannername, $params ); -// } -// else {} -// } - public static void Get_banner_html(Bry_bfr bfr, byte[] banner_name, Pgbnr_itm itm, Pgbnr_cfg cfg) { - byte[][] urls = Bry_.Ary(Bry_.Empty); // $urls = static::getStandardSizeUrls( $bannername ); - if (urls.length == 0) return; - } -// public static function getBannerHtml( $bannername, $options = array() ) { -// // @var int index variable -// $i = 0; -// foreach ( $urls as $url ) { -// $size = $config->get( 'WPBStandardSizes' ); -// $size = $size[$i]; -// // add url with width and a comma if not adding the last url -// if ( $i < count( $urls ) ) { -// $srcset[] = "$url {$size}w"; -// } -// $i++; -// } -// // create full src set from individual urls, separated by comma -// $srcset = implode( ',', $srcset ); -// // use largest image url as src attribute -// $bannerurl = $urls[count( $urls ) - 1]; -// $bannerfile = Title::newFromText( "File:$bannername" ); -// $templateParser = new TemplateParser( __DIR__ . '/../templates' ); -// $options['bannerfile'] = $bannerfile->getLocalUrl(); -// $options['banner'] = $bannerurl; -// $options['srcset'] = $srcset; -// $file = wfFindFile( $bannerfile ); -// $options['maxWidth'] = $file->getWidth(); -// $options['isHeadingOverrideEnabled'] = $config->get( 'WPBEnableHeadingOverride' ); -// $banner = $templateParser->processTemplate( -// 'banner', -// $options -// ); -// } - -// public static function addBanner( OutputPage $out, Skin $skin ) { -// $config = WikidataPageBannerFunctions::getWPBConfig(); -// $title = $out->getTitle(); -// $isDiff = $out->getRequest()->getVal( 'diff' ); -// $wpbFunctionsClass = self::$wpbFunctionsClass; -// -// // if banner-options are set and not a diff page, add banner anyway -// if ( $out->getProperty( 'wpb-banner-options' ) !== null && !$isDiff ) { -// $params = $out->getProperty( 'wpb-banner-options' ); -// $bannername = $params['name']; -// $banner = $wpbFunctionsClass::getBannerHtml( $bannername, $params ); -// // attempt to get WikidataBanner -// if ( $banner === null ) { -// $bannername = $wpbFunctionsClass::getWikidataBanner( $title ); -// $banner = $wpbFunctionsClass::getBannerHtml( $bannername, $params ); -// } -// // only add banner and styling if valid banner generated -// if ( $banner !== null ) { -// if ( isset( $params['toc'] ) ) { -// $out->addModuleStyles( 'ext.WikidataPageBanner.toc.styles' ); -// } -// $wpbFunctionsClass::insertBannerIntoOutputPage( $out, $banner ); -// -// // FIXME: This is currently only needed to support testing -// $out->setProperty( 'articlebanner-name', $bannername ); -// } -// } -// // if the page uses no 'PAGEBANNER' invocation and if article page, insert default banner -// elseif ( -// $title->isKnown() && -// $out->isArticle() && -// $config->get( 'WPBEnableDefaultBanner' ) && -// !$isDiff -// ) { -// $ns = $title->getNamespace(); -// // banner only on specified namespaces, and not Main Page of wiki -// if ( in_array( $ns, $config->get( 'WPBNamespaces' ) ) -// && !$title->isMainPage() ) { -// // first try to obtain bannername from Wikidata -// $bannername = $wpbFunctionsClass::getWikidataBanner( $title ); -// if ( $bannername === null ) { -// // if Wikidata banner not found, set bannername to default banner -// $bannername = $config->get( 'WPBImage' ); -// } -// // add title to template parameters -// $paramsForBannerTemplate = array( 'title' => $title ); -// $banner = $wpbFunctionsClass:: -// getBannerHtml( $bannername, $paramsForBannerTemplate ); -// // only add banner and styling if valid banner generated -// if ( $banner !== null ) { -// $wpbFunctionsClass::insertBannerIntoOutputPage( $out, $banner ); -// -// // set articlebanner property on OutputPage -// // FIXME: This is currently only needed to support testing -// $out->setProperty( 'articlebanner-name', $bannername ); -// } -// } -// } -// return true; -// } } diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func.java index ed40cccb2..3e9e47564 100644 --- a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func.java +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func.java @@ -16,25 +16,24 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.core.btries.*; +import gplx.core.btries.*; import gplx.langs.mustaches.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.tmpls.*; import gplx.xowa.xtns.pfuncs.*; import gplx.xowa.langs.kwds.*; import gplx.xowa.parsers.utils.*; public class Pgbnr_func extends Pf_func_base { @Override public int Id() {return Xol_kwd_grp_.Id_pagebanner;} @Override public Pf_func New(int id, byte[] name) {return new Pgbnr_func().Name_(name);} - @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { // WikidataPageBanner.hooks.php|addCustomBanner + @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { // {{PAGEBANNER}} appears on page; WikidataPageBanner.hooks.php|addCustomBanner Xowe_wiki wiki = ctx.Wiki(); - Pgbnr_cfg cfg = new Pgbnr_cfg(); // ctx.Wiki().Xtn_mgr().Xtn_pgbnr(); - Xoa_ttl ttl = ctx.Cur_page().Ttl(); - if ( !cfg.Enabled_in_ns(ttl.Ns().Id()) // chk if ns allows banner - || Bry_.Eq(ttl.Page_db(), wiki.Props().Main_page())) // never show on main page - return; - Bry_bfr tmp_bfr = Bry_bfr.new_(); - boolean bottomtoc = false, toc = false; - byte[] tooltip = ttl.Page_txt(); - byte[] title = ttl.Page_txt(); - int args_len = self.Args_len(); + Pgbnr_xtn_mgr xtn_mgr = wiki.Xtn_mgr().Xtn_pgbnr(); + Pgbnr_cfg cfg = xtn_mgr.Cfg(); + Xoa_ttl ttl = ctx.Page().Ttl(); + if (!cfg.Chk_pgbnr_allowed(ttl, wiki)) return; + byte[] tooltip = ttl.Page_txt(), title = ttl.Page_txt(), toc = Bry_.Empty, origin_x = Bry_.Empty; + boolean bottomtoc = false;; + double data_pos_x = 0, data_pos_y = 0; List_adp icons_list = null; + Bry_bfr tmp_bfr = Bry_bfr.new_(); + int args_len = self.Args_len(); for (int i = 0; i < args_len; ++i) { Arg_nde_tkn arg = self.Args_get_by_idx(i); byte[] key = Pf_func_.Eval_tkn(tmp_bfr, ctx, src, caller, arg.Key_tkn()); @@ -46,34 +45,141 @@ public class Pgbnr_func extends Pf_func_base { tooltip = val; if (tid == Arg__bottomtoc && Bry_.Eq(val, Bry__yes)) bottomtoc = true; - if (tid == Arg__toc && Bry_.Eq(val, Bry__yes)) - toc = true; - if (tid == -1 && Bry_.Has_at_bgn(key, Bry__icon) && Bry_.Len_gt_0(val)) { + if (tid == Arg__toc && Bry_.Eq(val, Bry__yes)) // REF.MW:addToc + toc = Bry_.Empty; // note that "" will be overwritten later by actual toc html + if ( tid == -1 // handle "icon-*"; + && Bry_.Has_at_bgn(key, Bry__icon) // if (substr($key, 0, 5) === 'icon-') + && Bry_.Len(Bry__icon) > 5 // if ( !isset( $iconname) ) + && Bry_.Len_gt_0(val) // if ( !isset( $$value ) ) + ) { // REF.MW:addIcons + tid = Arg__icon; if (icons_list == null) icons_list = List_adp_.new_(); - byte[] icon_name = Xop_sanitizer.Escape_cls(val); + byte[] icon_key = Bry_.Mid(key, 5); + byte[] icon_name = Xop_sanitizer.Escape_cls(icon_key); byte[] icon_title = icon_name; Xoa_ttl icon_url_ttl = wiki.Ttl_parse(val); +// TODO: get icon_url byte[] icon_url_bry = Bry_.Empty; - if (icon_url_ttl == null) icon_url_bry = Bry__url_dflt; + if (icon_url_ttl == null) + icon_url_bry = Bry__url_dflt; // $iconUrl = Title::newFromText( $value ); if ( $iconUrl ) else { - icon_url_bry = Bry_.Empty;// $iconUrl->getLocalUrl(); + icon_url_bry = Bry_.Empty; // $iconUrl->getLocalUrl(); icon_title = ttl.Page_txt(); } icons_list.Add(new Pgbnr_icon(icon_name, icon_title, icon_url_bry)); - tid = Arg__icon; } - if (tid == -1) Gfo_usr_dlg_.Instance.Warn_many("", "", "unknown arg type; page=~{0} key=~{1} val=~{2}", "page", ctx.Cur_page().Url_bry_safe(), key, val); - // WikidataPageBannerFunctions::addFocus( $paramsForBannerTemplate, $argumentsFromParserFunction ); + if (tid == Arg__origin) { // REF.MW:addFocus + double tmp_data_pos_x = Double_.NaN, tmp_data_pos_y = Double_.NaN; + int comma_pos = Bry_find_.Find_fwd(val, Byte_ascii.Comma); + if (comma_pos != Bry_find_.Not_found) { + tmp_data_pos_x = Bry_.To_double_or(val, 0, comma_pos, Double_.NaN); + if (!Double_.IsNaN(tmp_data_pos_x)) { + if (tmp_data_pos_x >= -1 && tmp_data_pos_x <= 1) { + data_pos_x = tmp_data_pos_x; + origin_x = tmp_data_pos_x <= .25d ? Bry__origin_x__left : Bry__origin_x__right; + } + } + if (!Double_.IsNaN(tmp_data_pos_y)) { + if (tmp_data_pos_y >= -1 && tmp_data_pos_y <= 1) + data_pos_y = tmp_data_pos_y; + } + } + } + if (tid == -1) Gfo_usr_dlg_.Instance.Warn_many("", "", "unknown arg type; page=~{0} key=~{1} val=~{2}", "page", ctx.Page().Url_bry_safe(), key, val); } byte[] name = Eval_argx(ctx, src, caller, self); - if (Bry_.Len_eq_0(name)) - name = cfg.Default_file(); - Xoa_ttl file_ttl = wiki.Ttl_parse(name); - Pgbnr_itm itm = new Pgbnr_itm(name, tooltip, title, bottomtoc, toc, file_ttl, icons_list == null ? Pgbnr_icon.Ary_empty : (Pgbnr_icon[])icons_list.To_ary_and_clear(Pgbnr_icon.class)); - Tfds.Write(itm); + // Xoa_ttl file_ttl = wiki.Ttl_parse(name); SKIP?: MW creates title to auto-register page and image in imagelinks + Pgbnr_itm itm = new Pgbnr_itm(); + ctx.Page().Html_data().Xtn__pgbnr_(itm); + itm.Init_from_wtxt(name, tooltip, title, bottomtoc, toc, data_pos_x, data_pos_y, origin_x, icons_list == null ? Pgbnr_icon.Ary_empty : (Pgbnr_icon[])icons_list.To_ary_and_clear(Pgbnr_icon.class)); } - private static final byte[] Bry__yes = Bry_.new_a7("yes"), Bry__icon = Bry_.new_a7("icon-"), Bry__url_dflt = Bry_.new_a7("#"); - private static final int Arg__pgname = 0, Arg__tooltip = 1, Arg__bottomtoc = 2, Arg__toc = 3, Arg__icon = 4; + public static void Add_banner(Bry_bfr bfr, Xop_ctx ctx) { + Xowe_wiki wiki = ctx.Wiki(); + Pgbnr_cfg cfg = wiki.Xtn_mgr().Xtn_pgbnr().Cfg(); + Xoa_ttl ttl = ctx.Page().Ttl(); + Pgbnr_itm itm = ctx.Page().Html_data().Xtn__pgbnr(); + byte[] banner_name = null, banner_html = null; + if (itm != null) { // {{PAGEBANNER}} exists in wikitext + banner_name = itm.name; + banner_html = Get_banner_html(wiki, cfg, banner_name, itm); + if (banner_html == null) { // no banner; try again using title from wikidata; + banner_name = Get_wikidata_banner(ttl); + banner_html = Get_banner_html(wiki, cfg, banner_name, itm); + } + if (banner_html != null) { // only add banner and styling if valid banner generated + if (itm.toc != null) { + // $out->addModuleStyles( 'ext.WikidataPageBanner.toc.styles' ); + } + bfr.Add(banner_html); + } + } + else if ( ttl.Ns().Id_is_main() // if the page uses no 'PAGEBANNER' invocation and if article page, insert default banner + && cfg.Get__wpb_enable_default_banner() + ) { + if (cfg.Chk_pgbnr_allowed(ttl, wiki)) { + banner_name = Get_wikidata_banner(ttl); + if (banner_name == null) { + banner_name = cfg.Get__wpb_image(); + } + itm = new Pgbnr_itm(); + itm.name = banner_name; + banner_html = Get_banner_html(wiki, cfg, banner_name, itm); + if (banner_html != null) { // NOTE: same as above + bfr.Add(banner_html); + } + } + } + } + public static byte[] Get_banner_html(Xowe_wiki wiki, Pgbnr_cfg cfg, byte[] banner_name, Pgbnr_itm itm) { + byte[][] urls = Get_standard_size_urls(wiki, cfg, banner_name); + if (urls == null) return null; + Bry_bfr tmp_bfr = Bry_bfr.new_(); + int urls_len = urls.length; + int[] sizes = cfg.Get__wpb_standard_sizes(); + for (int i = 0; i < urls_len; ++i) { + int size = sizes[i]; + if (i != 0) tmp_bfr.Add_byte_comma(); + tmp_bfr.Add(urls[i]).Add_byte_space().Add_int_variable(size).Add_byte(Byte_ascii.Ltr_w); // $srcset[] = "$url {$size}w"; + } + byte[] srcset = tmp_bfr.To_bry_and_clear(); + byte[] banner_url = urls.length == 0 ? Bry_.Empty : urls[urls_len - 1]; // gets largest url + // Xoa_ttl banner_file = wiki.Ttl_parse(tmp_bfr.Add(wiki.Ns_mgr().Ns_file().Name_db_w_colon()).Add(banner_name).To_bry_and_clear()); + int maxWidth = 1; // $file = wfFindFile( banner_file ); $options['maxWidth'] = $file->getWidth(); + byte[] banner_file = null; // $bannerfile->getLocalUrl(); + itm.Init_from_html(maxWidth, banner_file, banner_url, srcset, cfg.Get__wpb_enable_heading_override()); + + Mustache_render_ctx mctx = new Mustache_render_ctx().Init(itm); + wiki.Xtn_mgr().Xtn_pgbnr().Template_root().Render(tmp_bfr, mctx); + return tmp_bfr.To_bry_and_clear(); + } + private static byte[][] Get_standard_size_urls(Xow_wiki wiki, Pgbnr_cfg cfg, byte[] file_name) { + Ordered_hash hash = Ordered_hash_.New_bry(); + int[] sizes = cfg.Get__wpb_standard_sizes(); + int sizes_len = sizes.length; + for (int i = 0; i < sizes_len; ++i) { + byte[] url = Get_image_url(wiki, file_name, sizes[i]); + if (url != null) + hash.Add_if_dupe_use_1st(url, url); + } + return (byte[][])hash.To_ary_and_clear(byte[].class); + } + private static byte[] Get_image_url(Xow_wiki wiki, byte[] file_name, int width) { + // Xoa_ttl file_ttl = wiki.Ttl_parse(file_name); + // Object file = new Object(); // $file = wfFindFile( file_ttl ); + // if (file == null) return null; + if (width >= 0 && width <= 3000) { + // $mto = $file->transform( array( 'width' => $imagewidth ) ); + byte[] url = new byte[0]; // $url = wfExpandUrl( $mto->getUrl(), PROTO_CURRENT ); + return url; + } + else + return new byte[0]; // $file->getFullUrl(); + } + private static byte[] Get_wikidata_banner(Xoa_ttl ttl) { + return null; + } + private static final byte[] Bry__yes = Bry_.new_a7("yes"), Bry__icon = Bry_.new_a7("icon-"), Bry__url_dflt = Bry_.new_a7("#"), Bry__origin_x__left = Bry_.new_a7("wpb-left"), Bry__origin_x__right = Bry_.new_a7("wpb-right"); + private static final int Arg__pgname = 0, Arg__tooltip = 1, Arg__bottomtoc = 2, Arg__toc = 3, Arg__icon = 4, Arg__origin = 5; private static final Hash_adp_bry arg_hash = Hash_adp_bry.cs().Add_str_int("pgname", Arg__pgname) - .Add_str_int("tooltip", Arg__tooltip).Add_str_int("bottomtoc", Arg__bottomtoc).Add_str_int("toc", Arg__toc); + .Add_str_int("tooltip", Arg__tooltip).Add_str_int("bottomtoc", Arg__bottomtoc).Add_str_int("toc", Arg__toc).Add_str_int("origin", Arg__origin); } diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func_tst.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func_tst.java index 7b2d5b3fd..62e65f606 100644 --- a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_func_tst.java @@ -16,10 +16,28 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import org.junit.*; import gplx.xowa.wikis.pages.skins.*; +import org.junit.*; import gplx.core.brys.*; import gplx.xowa.wikis.pages.skins.*; public class Pgbnr_func_tst { - @Before public void init() {fxt.Reset();} private final Xop_fxt fxt = new Xop_fxt(); - @Test public void Basic() { - fxt.Test_html_full_str("{{PAGEBANNER}}", ""); +// private final Pgbnr_func_fxt fxt = new Pgbnr_func_fxt(); + @Test public void Basic() { +// fxt.Test__parse__eq("{{PAGEBANNER:A.png}}", String_.Concat_lines_nl_apos_skip_last +// ( "
    " +// , " " +// , "
    " +// , "
    " +// )); + } +} +class Pgbnr_func_fxt { + private final Xop_fxt fxt = new Xop_fxt(); + public void Test__parse__eq(String raw, String expd) { + fxt.Exec_parse_page_all_as_str("{{PAGEBANNER:A.png}}"); + Bfr_arg arg = fxt.Wiki().Xtn_mgr().Xtn_pgbnr().Write_html(fxt.Ctx(), fxt.Page()); + Bry_bfr bfr = Bry_bfr.new_(); + arg.Bfr_arg__add(bfr); + Tfds.Eq_str_lines(expd, bfr.To_str_and_clear()); } } diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_icon.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_icon.java new file mode 100644 index 000000000..b381e66f9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_icon.java @@ -0,0 +1,34 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.langs.mustaches.*; +public class Pgbnr_icon implements Mustache_doc_itm { + public byte[] name; + public byte[] title; + public byte[] url; + public Pgbnr_icon(byte[] name, byte[] title, byte[] url) {this.name = name; this.title = title; this.url = url;} + public byte[] Get_prop(String key) { + if (String_.Eq(key, "name")) return name; + else if (String_.Eq(key, "title")) return title; + else if (String_.Eq(key, "url")) return url; + else if (String_.Eq(key, "html")) return Mustache_doc_itm_.Null_val; + return Mustache_doc_itm_.Null_val; + } + public Mustache_doc_itm[] Get_subs(String key) {return Mustache_doc_itm_.Ary__empty;} + public static final Pgbnr_icon[] Ary_empty = new Pgbnr_icon[0]; +} diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_itm.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_itm.java new file mode 100644 index 000000000..68191157b --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_itm.java @@ -0,0 +1,59 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.langs.mustaches.*; +public class Pgbnr_itm implements Mustache_doc_itm { + public byte[] name, toc; + private byte[] tooltip, title, originx, bannerfile, banner, srcset; + private double data_pos_x, data_pos_y; + private int maxWidth; + private boolean bottomtoc, isHeadingOverrideEnabled; + private Pgbnr_icon[] icons; + public void Init_from_wtxt(byte[] name, byte[] tooltip, byte[] title, boolean bottomtoc, byte[] toc, double data_pos_x, double data_pos_y, byte[] originx, Pgbnr_icon[] icons) { + this.name = name; + this.tooltip = tooltip; this.title = title; this.bottomtoc = bottomtoc; this.toc = toc; this.icons = icons; + this.data_pos_x = data_pos_x; this.data_pos_y = data_pos_y; this.originx = originx; + } + public void Init_from_html(int maxWidth, byte[] bannerfile, byte[] banner, byte[] srcset, boolean isHeadingOverrideEnabled) { + this.maxWidth = maxWidth; + this.bannerfile = bannerfile; + this.banner = banner; + this.srcset = srcset; + this.isHeadingOverrideEnabled = isHeadingOverrideEnabled; + } + public byte[] Get_prop(String key) { + if (String_.Eq(key, "title")) return title; + else if (String_.Eq(key, "tooltip")) return tooltip; + else if (String_.Eq(key, "bannerfile")) return bannerfile; + else if (String_.Eq(key, "banner")) return banner; + else if (String_.Eq(key, "srcset")) return srcset; + else if (String_.Eq(key, "originx")) return originx; + else if (String_.Eq(key, "data-pos-x")) return Bry_.new_a7(Double_.To_str(data_pos_x)); + else if (String_.Eq(key, "data-pos-y")) return Bry_.new_a7(Double_.To_str(data_pos_y)); + else if (String_.Eq(key, "maxWidth")) return Int_.To_bry(maxWidth); + else if (String_.Eq(key, "toc")) return toc; + return Mustache_doc_itm_.Null_val; + } + public Mustache_doc_itm[] Get_subs(String key) { + if (String_.Eq(key, "icons")) return icons; + else if (String_.Eq(key, "hasIcons")) return Mustache_doc_itm_.Ary__bool(icons.length > 0); + else if (String_.Eq(key, "bottomtoc")) return Mustache_doc_itm_.Ary__bool(bottomtoc); + else if (String_.Eq(key, "isHeadingOverrideEnabled")) return Mustache_doc_itm_.Ary__bool(isHeadingOverrideEnabled); + return Mustache_doc_itm_.Ary__empty; + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java new file mode 100644 index 000000000..9889126d0 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java @@ -0,0 +1,58 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.xowa.xtns.pagebanners; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.core.brys.*; import gplx.langs.mustaches.*; import gplx.xowa.parsers.*; +public class Pgbnr_xtn_mgr extends Xox_mgr_base implements Bfr_arg { + @Override public byte[] Xtn_key() {return Xtn_key_static;} public static final byte[] Xtn_key_static = Bry_.new_a7("pagebanner"); + @Override public Xox_mgr Clone_new() {return new Pgbnr_xtn_mgr();} + public Pgbnr_cfg Cfg() {return cfg;} private final Pgbnr_cfg cfg = new Pgbnr_cfg(); + public Mustache_tkn_itm Template_root() { + if (template_root == null) { + Mustache_tkn_parser parser = new Mustache_tkn_parser(); + template_root = parser.Parse(Template_dflt, 0, Template_dflt.length); + } + return template_root; + } private Mustache_tkn_itm template_root; + @Override public void Xtn_init_by_app(Xoae_app app) { + } + public Bfr_arg Write_html(Xop_ctx pctx, Xoae_page page) { + this.pctx = pctx; this.page = page; + return this; + } private Xop_ctx pctx; private Xoae_page page; + public void Bfr_arg__add(Bry_bfr bfr) { + Pgbnr_itm itm = page.Html_data().Xtn__pgbnr(); + if (itm == null) return; + Pgbnr_func.Add_banner(bfr, pctx); + } + private static final byte[] Template_dflt = Bry_.New_u8_nl_apos + ( "
    " + , "
    " + , " {{#isHeadingOverrideEnabled}}

    {{title}}

    {{/isHeadingOverrideEnabled}}" + , " " + , " {{#hasIcons}}" + , "
    " + , " {{#icons}}" + , " {{{html}}}" + , " {{/icons}}" + , "
    " + , " {{/hasIcons}}" + , "
    " + , "
    {{{toc}}}
    " + , "
    " + ); +} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/Pf_func_.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/Pf_func_.java index efe336db8..4f2f99037 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/Pf_func_.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/Pf_func_.java @@ -239,6 +239,7 @@ public class Pf_func_ { , Xol_kwd_grp_.Id_bang , Xol_kwd_grp_.Id_rev_revisionsize , Xol_kwd_grp_.Id_pagebanner + , Xol_kwd_grp_.Id_rev_protectionexpiry }; public static Xot_defn Get_prototype(int id) { switch (id) { @@ -323,6 +324,7 @@ public class Pf_func_ { case Xol_kwd_grp_.Id_rev_pagesize: case Xol_kwd_grp_.Id_rev_revisionsize: case Xol_kwd_grp_.Id_rev_user: + case Xol_kwd_grp_.Id_rev_protectionexpiry: case Xol_kwd_grp_.Id_rev_protectionlevel: return Pfunc_rev_props.Instance; case Xol_kwd_grp_.Id_page_displaytitle: return Pfunc_displaytitle.Instance; case Xol_kwd_grp_.Id_page_defaultsort: return Pfunc_defaultsort.Instance; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_gender.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_gender.java index fbe0369bd..4bf15116b 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_gender.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_gender.java @@ -41,7 +41,7 @@ public class Pfunc_gender extends Pf_func_base { } if (self_args_len == 1) {bfr.Add(when_m); return;} // per MW: EX: {{gender:name|a}} -> "a" int gender = Get_gender(ctx.App().User(), user_name); - Xol_lang_itm lang = ctx.Cur_page().Lang(); + Xol_lang_itm lang = ctx.Page().Lang(); bfr.Add(lang.Gender().Gender_eval(gender, when_m, when_f, when_u)); } private static int Get_gender(Xou_user user, byte[] user_name) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_grammar.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_grammar.java index 26c935d21..344e826dc 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_grammar.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_grammar.java @@ -25,7 +25,7 @@ public class Pfunc_grammar extends Pf_func_base { @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] argx = Eval_argx(ctx, src, caller, self); byte[] word = Pf_func_.Eval_arg_or_empty(ctx, src, caller, self, self.Args_len(), 0); - Xol_lang_itm lang = ctx.Cur_page().Lang(); + Xol_lang_itm lang = ctx.Page().Lang(); boolean pass = false; try {pass = lang.Grammar().Grammar_eval(bfr, lang, word, argx);} catch (Exception e) {Err_.Noop(e);} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_int.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_int.java index 3a5264841..bc96a7b9f 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_int.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/langs/Pfunc_int.java @@ -25,7 +25,7 @@ public class Pfunc_int extends Pf_func_base { @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] msg_key = Eval_argx(ctx, src, caller, self); Xowe_wiki wiki = ctx.Wiki(); - Xol_lang_itm page_lang = ctx.Cur_page().Lang(); + Xol_lang_itm page_lang = ctx.Page().Lang(); byte[][] args_ary = Bry_.Ary_empty; int args_len = self.Args_len(); if (args_len > 0) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java index 670aedbaf..f4b607f36 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_displaytitle.java @@ -33,7 +33,7 @@ public class Pfunc_displaytitle extends Pf_func_base { wiki.Html_mgr().Html_wtr().Write_tkn(tmp_bfr, display_ttl_ctx, hctx, display_ttl_root.Data_mid(), display_ttl_root, 0, display_ttl_root); byte[] val_html = tmp_bfr.To_bry_and_clear(); if (restrict) { // restrict only allows displayTitles which have text similar to the pageTitle; PAGE:de.b:Kochbuch/_Druckversion; DATE:2014-08-18 - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); wiki.Html_mgr().Html_wtr().Write_tkn(tmp_bfr, display_ttl_ctx, Xoh_wtr_ctx.Alt, display_ttl_root.Data_mid(), display_ttl_root, 0, display_ttl_root); byte[] val_html_lc = tmp_bfr.To_bry_and_clear(); Xol_case_mgr case_mgr = wiki.Lang().Case_mgr(); @@ -42,7 +42,7 @@ public class Pfunc_displaytitle extends Pf_func_base { if (!Bry_.Eq(val_html_lc, page_ttl_lc)) val_html = null; } - ctx.Cur_page().Html_data().Display_ttl_(val_html); + ctx.Page().Html_data().Display_ttl_(val_html); tmp_bfr.Mkr_rls(); } private static byte[] Standardize_displaytitle_text(Xol_case_mgr case_mgr, byte[] val) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props.java index 86b29c60e..c4cb9f36b 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props.java @@ -24,14 +24,15 @@ public class Pfunc_rev_props extends Pf_func_base { @Override public Pf_func New(int id, byte[] name) {return new Pfunc_rev_props(id).Name_(name);} @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] argx = Eval_argx(ctx, src, caller, self); - Xopg_revision_data rev_data = ctx.Cur_page().Revision_data(); + Xopg_revision_data rev_data = ctx.Page().Revision_data(); switch (id) { case Xol_kwd_grp_.Id_page_id: - case Xol_kwd_grp_.Id_rev_id: bfr.Add_int_variable(ctx.Cur_page().Revision_data().Id()); break; // NOTE: making rev_id and page_id interchangeable; XOWA does not store rev_id + case Xol_kwd_grp_.Id_rev_id: bfr.Add_int_variable(ctx.Page().Revision_data().Id()); break; // NOTE: making rev_id and page_id interchangeable; XOWA does not store rev_id case Xol_kwd_grp_.Id_rev_user: bfr.Add(rev_data.User()); break; case Xol_kwd_grp_.Id_rev_protectionlevel: bfr.Add(rev_data.Protection_level()); break; + case Xol_kwd_grp_.Id_rev_protectionexpiry: bfr.Add(rev_data.Protection_expiry()); break; case Xol_kwd_grp_.Id_rev_revisionsize: // default revsize to pagesize; MW has additional logic for subst which should not apply to XO; https://gerrit.wikimedia.org/r/#/c/82650/ - bfr.Add_int_variable(ctx.Cur_page().Data_raw().length); + bfr.Add_int_variable(ctx.Page().Data_raw().length); break; case Xol_kwd_grp_.Id_rev_pagesize: if (argx.length > 0) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props_tst.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props_tst.java index a3ecc3b50..16d00ea76 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/pages/Pfunc_rev_props_tst.java @@ -26,6 +26,7 @@ public class Pfunc_rev_props_tst { @Test public void Page_size() {fxt.Test_parse_tmpl_str_test("{{PAGESIZE:Test page}}" , "{{test}}", "0");} @Test public void Revision_size() {fxt.Test_parse_tmpl_str_test("{{REVISIONSIZE}}" , "{{test}}", "8");} @Test public void Protection_level() {fxt.Test_parse_tmpl_str_test("{{PROTECTIONLEVEL}}" , "{{test}}", "normal");} + @Test public void Protection_expiry() {fxt.Test_parse_tmpl_str_test("{{PROTECTIONEXPIRY}}" , "{{test}}", "infinite");} @Test public void PageSize_invalid_ttl() { fxt.Init_log_(Xop_ttl_log.Invalid_char); fxt.Test_parse_tmpl_str_test("{{PAGESIZE:{{{100}}}|R}}" , "{{test}}", "0"); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_int.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_int.java index f8f5123e2..bdc257e71 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_int.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_int.java @@ -28,7 +28,7 @@ public class Pft_func_date_int extends Pf_func_base { switch (date_tid) { case Date_tid_lcl: date = DateAdp_.Now(); break; case Date_tid_utc: date = DateAdp_.Now().XtoUtc(); break; - case Date_tid_rev: date = ctx.Cur_page().Revision_data().Modified_on(); break; + case Date_tid_rev: date = ctx.Page().Revision_data().Modified_on(); break; default: throw Err_.new_unhandled(date_tid); } switch (id) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_name.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_name.java index faf0b50aa..58b7043c5 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_name.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_date_name.java @@ -26,7 +26,7 @@ public class Pft_func_date_name extends Pf_func_base { switch (date_tid) { case Pft_func_date_int.Date_tid_lcl: date = DateAdp_.Now(); break; case Pft_func_date_int.Date_tid_utc: date = DateAdp_.Now().XtoUtc(); break; - case Pft_func_date_int.Date_tid_rev: date = ctx.Cur_page().Revision_data().Modified_on(); break; + case Pft_func_date_int.Date_tid_rev: date = ctx.Page().Revision_data().Modified_on(); break; default: throw Err_.new_unhandled(date_tid); } byte[] val = ctx.Wiki().Msg_mgr().Val_by_id(base_idx + date.Segment(seg_idx)); diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java index 49cccfc24..d3f74c8c9 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_rel2abs.java @@ -33,7 +33,7 @@ public class Pfunc_rel2abs extends Pf_func_base { @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) {// REF.MW:ParserFunctions_body.php byte[] qry = Eval_argx(ctx, src, caller, self); byte[] orig = Pf_func_.Eval_arg_or_empty(ctx, src, caller, self, self.Args_len(), 0); - if (orig.length == 0) orig = ctx.Cur_page().Ttl().Full_txt(); + if (orig.length == 0) orig = ctx.Page().Ttl().Full_txt(); bfr.Add(Rel2abs(ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls(), qry, orig)); } public static boolean Rel2abs_ttl(byte[] ttl, int bgn, int end) { diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_ttl.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_ttl.java index 4ab2eb43b..cc8a46542 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_ttl.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_ttl.java @@ -22,7 +22,7 @@ public class Pfunc_ttl extends Pf_func_base { @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] val_dat_ary = Eval_argx_or_null(ctx, src, caller, self, this.Name()); if (val_dat_ary == Bry_.Empty) return; // if argx is empty, return EX: {{PAGENAME:}}; DATE:2013-02-20 - Xoa_ttl ttl = val_dat_ary == null ? ctx.Cur_page().Ttl() : Xoa_ttl.parse(ctx.Wiki(), val_dat_ary); + Xoa_ttl ttl = val_dat_ary == null ? ctx.Page().Ttl() : Xoa_ttl.parse(ctx.Wiki(), val_dat_ary); if (ttl == null) return; switch (id) { case Xol_kwd_grp_.Id_ttl_page_txt: bfr.Add(ttl.Page_txt()); break; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_props.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_props.java index a7b497ad8..02422340f 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_props.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_props.java @@ -33,7 +33,7 @@ public class Pfunc_wiki_props extends Pf_func_base { case Xol_kwd_grp_.Id_site_stylepath: bfr.Add(props.StylePath()); break; case Xol_kwd_grp_.Id_site_directionmark: bfr.Add(props.DirectionMark()); break; case Xol_kwd_grp_.Id_site_currentversion: bfr.Add(props.Current_version()); break; - case Xol_kwd_grp_.Id_site_contentlanguage: bfr.Add(ctx.Cur_page().Lang().Key_bry()); break; + case Xol_kwd_grp_.Id_site_contentlanguage: bfr.Add(ctx.Page().Lang().Key_bry()); break; default: throw Err_.new_unhandled(id); } } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_stats.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_stats.java index d6d739cc4..778c0c82a 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_stats.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/wikis/Pfunc_wiki_stats.java @@ -43,7 +43,7 @@ public class Pfunc_wiki_stats extends Pf_func_base { if (raw) bfr.Add_int_variable(v); else - bfr.Add(ctx.Cur_page().Lang().Num_mgr().Format_num(v)); + bfr.Add(ctx.Page().Lang().Num_mgr().Format_num(v)); } public Pfunc_wiki_stats(int id) {this.id = id;} @Override public int Id() {return id;} private int id; diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pagelist_nde.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pagelist_nde.java index 41c278bad..966fccc08 100644 --- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pagelist_nde.java +++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pagelist_nde.java @@ -21,7 +21,7 @@ import gplx.xowa.parsers.*; import gplx.xowa.parsers.logs.*; import gplx.xowa.pa public class Pp_pagelist_nde implements Xox_xnde { // TODO: public void Xatr__set(Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) {} public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_hiero, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_hiero, src, xnde); } public static Xop_log_basic_wkr Log_wkr = Xop_log_basic_wkr.Null; public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) {} } 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 e7ce8751f..0f66e3923 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 @@ -58,7 +58,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { public void Xtn_parse(Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { // if (!wiki.Xtn_mgr().Xtn_proofread().Enabled()) return; if (!Init_vars(wiki, ctx, src, xnde)) return; - Xoae_page page = ctx.Cur_page(); + Xoae_page page = ctx.Page(); if (page.Pages_recursed()) return; // moved from Pp_index_parser; DATE:2014-05-21s page.Pages_recursed_(true); Bry_bfr full_bfr = app.Utl__bfr_mkr().Get_m001(); @@ -81,7 +81,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { } private boolean Init_vars(Xowe_wiki wiki, Xop_ctx ctx, byte[] src, Xop_xnde_tkn xnde) { this.wiki = wiki; this.ctx = ctx; app = wiki.Appe(); usr_dlg = app.Usr_dlg(); - this.src = src; this.xnde_tkn = xnde; cur_page_ttl = ctx.Cur_page().Ttl(); + this.src = src; this.xnde_tkn = xnde; cur_page_ttl = ctx.Page().Ttl(); Xox_xnde_.Xatr__set(wiki, this, xatrs_hash, src, xnde); Xop_amp_mgr amp_mgr = wiki.Appe().Parser_amp_mgr(); index_ttl_bry = amp_mgr.Decode_as_bry(index_ttl_bry); @@ -143,7 +143,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { rv = full_bfr.To_bry_and_clear(); } catch (Exception e) { - wiki.Appe().Usr_dlg().Warn_many("", "", "failed to write caption: page=~{0} lnki=~{1} err=~{2}", ctx.Cur_page().Ttl().Full_db(), String_.new_u8(index_page_src, lnki.Src_bgn(), lnki.Src_end()), Err_.Message_gplx_full(e)); + wiki.Appe().Usr_dlg().Warn_many("", "", "failed to write caption: page=~{0} lnki=~{1} err=~{2}", ctx.Page().Ttl().Full_db(), String_.new_u8(index_page_src, lnki.Src_bgn(), lnki.Src_end()), Err_.Message_gplx_full(e)); rv = lnki.Ttl().Page_txt(); } return rv; @@ -162,12 +162,12 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { int main_lnkis_len = main_lnkis.Count(); byte[] index_page_src = index_page.Src(); if (main_lnkis_len > 0) { - Xoa_ttl page_ttl = ctx.Cur_page().Ttl(); + Xoa_ttl page_ttl = ctx.Page().Ttl(); for (int i = 0; i < main_lnkis_len; i++) { Xop_lnki_tkn main_lnki = (Xop_lnki_tkn)main_lnkis.Get_at(i); if (page_ttl.Eq_full_db(main_lnki.Ttl())) { - Xoae_page old_page = ctx.Cur_page(); - wiki.Html_mgr().Html_wtr().Init_by_page(ctx, Xoh_wtr_ctx.Basic, index_page_src, ctx.Cur_page()); // HACK: should not reuse html_wtr, but should be safe to use during parse (not html_gen) + Xoae_page old_page = ctx.Page(); + wiki.Html_mgr().Html_wtr().Init_by_page(ctx, Xoh_wtr_ctx.Basic, index_page_src, ctx.Page()); // HACK: should not reuse html_wtr, but should be safe to use during parse (not html_gen) if (toc_cur == null) // do not set if "current" is specified, even if "blank" specified; EX: current='' toc_cur = Make_lnki(full_bfr, index_page_src, main_lnki); if (toc_prv == null // do not set if "prev" is specified @@ -351,7 +351,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { if (end_sect_bry != null) cur_sect_end = end_sect_bry; } - Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Cur_page().Tmpl_prepend_mgr().Bgn(full_bfr); + Xopg_tmpl_prepend_mgr prepend_mgr = ctx.Page().Tmpl_prepend_mgr().Bgn(full_bfr); lst_pfunc_wkr.Init_include(ttl.Full_db(), cur_sect_bgn, cur_sect_end).Exec(page_bfr, ctx); prepend_mgr.End(ctx, full_bfr, page_bfr.Bfr(), page_bfr.Len(), Bool_.Y); full_bfr.Add_bfr_and_clear(page_bfr); @@ -363,7 +363,7 @@ public class Pp_pages_nde implements Xox_xnde, Mwh_atr_itm_owner { } private Xop_root_tkn Bld_root_nde(Bry_bfr page_bfr, Hash_adp_bry lst_page_regy, byte[] wikitext) { Xop_ctx tmp_ctx = Xop_ctx.new_sub_page_(wiki, ctx, lst_page_regy); - tmp_ctx.Cur_page().Ttl_(ctx.Cur_page().Ttl()); // NOTE: must set tmp_ctx.Ttl to ctx.Ttl; EX: Flatland and First World; DATE:2013-04-29 + tmp_ctx.Page().Ttl_(ctx.Page().Ttl()); // NOTE: must set tmp_ctx.Ttl to ctx.Ttl; EX: Flatland and First World; DATE:2013-04-29 tmp_ctx.Lnki().File_wkr_(null); // NOTE: set file_wkr to null, else items will be double-counted tmp_ctx.Parse_tid_(Xop_parser_.Parse_tid_tmpl); Xop_parser tmp_parser = Xop_parser.new_(wiki, wiki.Parser_mgr().Main().Tmpl_lxr_mgr(), wiki.Parser_mgr().Main().Wtxt_lxr_mgr()); diff --git a/400_xowa/src/gplx/xowa/xtns/relatedArticles/Articles_func.java b/400_xowa/src/gplx/xowa/xtns/relatedArticles/Articles_func.java index 17d878321..9134a8dd5 100644 --- a/400_xowa/src/gplx/xowa/xtns/relatedArticles/Articles_func.java +++ b/400_xowa/src/gplx/xowa/xtns/relatedArticles/Articles_func.java @@ -25,10 +25,10 @@ public class Articles_func extends Pf_func_base { @Override public Pf_func New(int id, byte[] name) {return new Articles_func().Name_(name);} @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { byte[] argx = this.Eval_argx(ctx, src, caller, self); - Articles_xtn_skin_itm xtn_itm = (Articles_xtn_skin_itm)ctx.Cur_page().Html_data().Xtn_skin_mgr().Get_or_null(Articles_xtn_skin_itm.KEY); + Articles_xtn_skin_itm xtn_itm = (Articles_xtn_skin_itm)ctx.Page().Html_data().Xtn_skin_mgr().Get_or_null(Articles_xtn_skin_itm.KEY); if (xtn_itm == null) { xtn_itm = new Articles_xtn_skin_itm(); - ctx.Cur_page().Html_data().Xtn_skin_mgr().Add(xtn_itm); + ctx.Page().Html_data().Xtn_skin_mgr().Add(xtn_itm); } Parse(xtn_itm, argx); } diff --git a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java index 090d6f094..0ea37250d 100644 --- a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java @@ -53,7 +53,7 @@ class Sites_html_bldr_fxt { , "0|dmoz|http://www.dmoz.org/~{0}|DMOZ" ))); Init_regy_mgr("commons", "dmoz"); - this.page = wiki.Parser_mgr().Ctx().Cur_page(); + this.page = wiki.Parser_mgr().Ctx().Page(); } private void Init_regy_mgr(String... ary) {xtn_mgr.Regy_mgr().Set_many(ary);} public void Init_ttl(String lnki_ttl) { diff --git a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java index 04e479e78..4f844ba52 100644 --- a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java @@ -47,7 +47,7 @@ public class Score_xnde implements Xox_xnde, Mwh_atr_itm_owner, Xoh_cmd_itm { this.xnde = xnde; code = Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()); code = Bry_.Replace(code, gplx.xowa.bldrs.xmls.Xob_xml_parser_.Bry_tab_ent, gplx.xowa.bldrs.xmls.Xob_xml_parser_.Bry_tab); - boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Cur_page(), Xop_log_basic_wkr.Tid_score, src, xnde); + boolean log_wkr_enabled = Log_wkr != Xop_log_basic_wkr.Null; if (log_wkr_enabled) Log_wkr.Log_end_xnde(ctx.Page(), Xop_log_basic_wkr.Tid_score, src, xnde); } public static Xop_log_basic_wkr Log_wkr = Xop_log_basic_wkr.Null; private byte[] code; public String Hcmd_id() {return hcmd_id;} private String hcmd_id; @@ -57,7 +57,7 @@ public class Score_xnde implements Xox_xnde, Mwh_atr_itm_owner, Xoh_cmd_itm { bfr.Add(Xoh_consts.Pre_end); } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { - Xowe_wiki wiki = ctx.Wiki(); Xoae_page page = ctx.Cur_page(); + Xowe_wiki wiki = ctx.Wiki(); Xoae_page page = ctx.Page(); Score_xtn_mgr score_xtn = (Score_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Score_xtn_mgr.XTN_KEY); if (!score_xtn.Enabled()) {Html_write_code_as_pre(bfr, app); return;} Process_adp ly_process = app.Prog_mgr().App_lilypond(); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java index 475a4fbd1..b515d9f4f 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java @@ -24,7 +24,7 @@ public class Scrib_core { private Hash_adp_bry mods = Hash_adp_bry.cs(); public Scrib_core(Xoae_app app, Xop_ctx ctx) {// NOTE: ctx needed for language reg this.app = app; this.ctx = ctx; - this.wiki = ctx.Wiki(); this.page = ctx.Cur_page(); // NOTE: wiki / page needed for title reg; DATE:2014-02-05 + this.wiki = ctx.Wiki(); this.page = ctx.Page(); // NOTE: wiki / page needed for title reg; DATE:2014-02-05 this.lang = wiki.Lang(); this.Engine_(Scrib_engine_type.Type_lua, false); // TEST: default to lua fsys_mgr.Root_dir_(app.Fsys_mgr().Bin_xtns_dir().GenSubDir_nest("Scribunto")); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core_fxt.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core_fxt.java index 2a4f800e3..fdeb23de0 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core_fxt.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core_fxt.java @@ -35,7 +35,7 @@ public class Scrib_core_fxt { server.Clear(); core.Proc_mgr().Clear(); core.Frame_parent_(null); - core.When_page_changed(wiki.Parser_mgr().Ctx().Cur_page()); + core.When_page_changed(wiki.Parser_mgr().Ctx().Page()); expd_server_rcvd_list.Clear(); return this; } private Xoae_app app; Xowe_wiki wiki; Bry_bfr tmp_bfr = Bry_bfr.reset_(255); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java index 92c3e8492..9e2dfb8a7 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java @@ -36,12 +36,12 @@ public class Scrib_invoke_func extends Pf_func_base { long log_time_bgn = 0; if (invoke_wkr != null) { log_time_bgn = Env_.TickCount(); - if (!invoke_wkr.Eval_bgn(ctx.Cur_page(), mod_name, fnc_name)) return; + if (!invoke_wkr.Eval_bgn(ctx.Page(), mod_name, fnc_name)) return; } Scrib_core core = Scrib_core.Core(); if (core == null) { core = Scrib_core.Core_new_(ctx.App(), ctx).Init(); - core.When_page_changed(ctx.Cur_page()); + core.When_page_changed(ctx.Page()); } byte[] mod_raw = null; Scrib_lua_mod mod = core.Mods_get(mod_name); @@ -57,7 +57,7 @@ public class Scrib_invoke_func extends Pf_func_base { try { core.Invoke(wiki, ctx, src, caller, self, bfr, mod_name, mod_raw, fnc_name); if (invoke_wkr != null) - invoke_wkr.Eval_end(ctx.Cur_page(), mod_name, fnc_name, log_time_bgn); + invoke_wkr.Eval_end(ctx.Page(), mod_name, fnc_name, log_time_bgn); } catch (Throwable e) { Err err = Err_.cast_or_make(e); @@ -67,7 +67,7 @@ public class Scrib_invoke_func extends Pf_func_base { if ( err_filter_mgr == null // no err_filter_mgr defined; || err_filter_mgr.Count_eq_0( ) // err_filter_mgr exists, but no definitions || !err_filter_mgr.Match(String_.new_u8(mod_name), String_.new_u8(fnc_name), err.To_str__msg_only())) // NOTE: must be To_str__msg_only; err_filter_mgr has defintion and it doesn't match current; print warn; DATE:2015-07-24 - ctx.App().Usr_dlg().Warn_many("", "", "invoke failed: ~{0} ~{1} ~{2}", ctx.Cur_page().Ttl().Raw(), String_.new_u8(src, self.Src_bgn(), self.Src_end()), err.To_str__log()); + ctx.App().Usr_dlg().Warn_many("", "", "invoke failed: ~{0} ~{1} ~{2}", ctx.Page().Ttl().Raw(), String_.new_u8(src, self.Src_bgn(), self.Src_end()), err.To_str__log()); Scrib_core.Core_invalidate_when_page_changes(); // NOTE: invalidate core when page changes, not for rest of page, else page with many errors will be very slow due to multiple invalidations; PAGE:th.d:all; DATE:2014-10-03 } } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_rslt.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_rslt.java index f6fe469db..742a16828 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_rslt.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_proc_rslt.java @@ -21,7 +21,7 @@ public class Scrib_proc_rslt { public KeyVal[] Ary() {return ary;} public String Fail_msg() {return fail_msg;} private String fail_msg; public boolean Init_fail(String v) {fail_msg = v; return false;} - public boolean Init_null() {Init_obj(null); return true;} + public boolean Init_null() {Init_obj(null); return true;} // return array(null); public boolean Init_str_empty() {Init_obj(""); return true;} public boolean Init_ary_empty() {ary = KeyVal_.Ary_empty; return true;} public boolean Init_obj(Object val) { diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java index 3b79aa6e3..bf23c3d46 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/process/Process_engine.java @@ -81,7 +81,7 @@ public class Process_engine implements Scrib_engine { } else { bfr.Mkr_rls(); -// app.Usr_dlg().Warn_many("", "", "invalid dispatch: op=~{0} page=~{1}", op, String_.new_u8(core.Ctx().Cur_page().Page_ttl().Page_db())); +// app.Usr_dlg().Warn_many("", "", "invalid dispatch: op=~{0} page=~{1}", op, String_.new_u8(core.Ctx().Page().Page_ttl().Page_db())); return KeyVal_.Ary_empty; } } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java index 31aff817f..892d6df6a 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_message.java @@ -97,7 +97,7 @@ class Scrib_lib_message_data { if (exec_params) { byte[] data_ttl = title_bry; if (data_ttl == null) - ttl = ctx.Cur_page().Ttl(); + ttl = ctx.Page().Ttl(); else ttl = Xoa_ttl.parse(wiki, data_ttl); } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw__invoke_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw__invoke_tst.java index 08cb3fc9b..3cb0a0863 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw__invoke_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_mw__invoke_tst.java @@ -83,7 +83,7 @@ public class Scrib_lib_mw__invoke_tst { @Test public void CallParserFunction_displayTitle() { // PURPOSE: DISPLAYTITLE not being set when called through CallParserFunction; DATE:2013-08-05 fxt.Init_page("{{#invoke:Mod_0|Prc_0}}"); fxt.Test_lib_proc_kv(lib, Scrib_lib_mw.Invk_callParserFunction, Scrib_kv_utl_.base1_many_ary_("current", "DISPLAYTITLE", "''a''"), ""); - Tfds.Eq("a", String_.new_a7(fxt.Parser_fxt().Ctx().Cur_page().Html_data().Display_ttl())); + Tfds.Eq("a", String_.new_a7(fxt.Parser_fxt().Ctx().Page().Html_data().Display_ttl())); } @Test public void ExpandTemplate_tmpl() { fxt.Init_page("{{#invoke:Mod_0|Prc_0}}"); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java index 2b3c4ca6d..9cfc02b61 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_uri.java @@ -70,7 +70,7 @@ public class Scrib_lib_uri implements Scrib_lib { } private boolean Init_uri_for_page(Scrib_proc_args args, Scrib_proc_rslt rslt) { Xop_ctx ctx = core.Ctx(); - byte[] ttl_bry = ctx.Cur_page().Ttl().Raw(); + byte[] ttl_bry = ctx.Page().Ttl().Raw(); Bry_bfr tmp_bfr = ctx.Wiki().Utl__bfr_mkr().Get_b512(); Pfunc_urlfunc.UrlString(ctx, Pfunc_urlfunc.Tid_full, false, ttl_bry, tmp_bfr, Bry_.Empty); return rslt.Init_obj(tmp_bfr.To_bry_and_rls()); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring.java index 9df58d25d..4021a782e 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_ustring.java @@ -178,7 +178,7 @@ public class Scrib_lib_ustring implements Scrib_lib { public static Regx_adp RegxAdp_new_(Xop_ctx ctx, String regx) { Regx_adp rv = Regx_adp_.new_(regx); if (rv.Pattern_is_invalid()) { - ctx.App().Usr_dlg().Warn_many("", "", "regx is invalid: regx=~{0} page=~{1}", regx, String_.new_u8(ctx.Cur_page().Ttl().Page_db())); + ctx.App().Usr_dlg().Warn_many("", "", "regx is invalid: regx=~{0} page=~{1}", regx, String_.new_u8(ctx.Page().Ttl().Page_db())); } return rv; } diff --git a/400_xowa/src/gplx/xowa/xtns/translates/Xop_languages_xnde.java b/400_xowa/src/gplx/xowa/xtns/translates/Xop_languages_xnde.java index 22b1a863d..5f2f200be 100644 --- a/400_xowa/src/gplx/xowa/xtns/translates/Xop_languages_xnde.java +++ b/400_xowa/src/gplx/xowa/xtns/translates/Xop_languages_xnde.java @@ -36,7 +36,7 @@ public class Xop_languages_xnde implements Xox_xnde { return Xoa_ttl.parse(wiki, ttl.Ns().Id(), root_bry); } private List_adp Find_lang_pages(Xop_ctx ctx, Xowe_wiki wiki) { - this.root_ttl = Root_ttl_of(wiki, ctx.Cur_page().Ttl()); + this.root_ttl = Root_ttl_of(wiki, ctx.Page().Ttl()); List_adp rslts = List_adp_.new_(); Int_obj_ref rslt_count = Int_obj_ref.new_(0); Xow_ns page_ns = root_ttl.Ns(); @@ -71,7 +71,7 @@ public class Xop_languages_xnde implements Xox_xnde { } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) { if (langs.Count() == 0) return; // no langs; don't write anything; - fmtr_mgr_itms.Init(langs, ctx.Wiki(), root_ttl, ctx.Cur_page().Lang().Key_bry()); + fmtr_mgr_itms.Init(langs, ctx.Wiki(), root_ttl, ctx.Page().Lang().Key_bry()); fmtr_all.Bld_bfr_many(bfr, "Other languages", fmtr_mgr_itms); } private static final Xop_languages_fmtr fmtr_mgr_itms = new Xop_languages_fmtr(); diff --git a/400_xowa/src/gplx/xowa/xtns/translates/Xop_mylanguage_page_tst.java b/400_xowa/src/gplx/xowa/xtns/translates/Xop_mylanguage_page_tst.java index 3ab059fe2..344057529 100644 --- a/400_xowa/src/gplx/xowa/xtns/translates/Xop_mylanguage_page_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/translates/Xop_mylanguage_page_tst.java @@ -46,7 +46,7 @@ class Xop_mylanguage_page_fxt { public void Init_create_page(String page) {parser_fxt.Init_page_create(page, page);} public void Init_cur_lang(String lang) {app.Sys_cfg().Lang_(Bry_.new_a7(lang));} public void Test_open(String link, String expd) { - Xoae_page page = parser_fxt.Ctx().Cur_page(); + Xoae_page page = parser_fxt.Ctx().Page(); Xoa_url url = app.User().Wikii().Utl__url_parser().Parse(Bry_.new_u8(link)); page.Url_(url); Xoa_ttl ttl = Xoa_ttl.parse(wiki, Bry_.new_a7(link)); diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java index 5eb7c5690..c3f172a87 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr.java @@ -245,6 +245,6 @@ public class Wdata_wiki_mgr implements GfoEvObj, GfoInvkAble { return false; } public static void Log_missing_qid(Xop_ctx ctx, byte[] qid) { - ctx.Wiki().Appe().Usr_dlg().Log_many("", "", "qid not found in wikidata; qid=~{0} page=~{1}", String_.new_u8(qid), String_.new_u8(ctx.Cur_page().Ttl().Page_db())); + ctx.Wiki().Appe().Usr_dlg().Log_many("", "", "qid not found in wikidata; qid=~{0} page=~{1}", String_.new_u8(qid), String_.new_u8(ctx.Page().Ttl().Page_db())); } } diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java index 891e3c97c..6ac969d47 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java @@ -101,9 +101,9 @@ public class Wdata_wiki_mgr_fxt { Io_url file_orig = Xob_wdata_qid_base_tst.ttl_(app.Wiki_mgr().Wdata_mgr().Wdata_wiki(), wiki, ns_num, 0); xdat_file.Save(file_orig); } - public void Init_external_links_mgr_clear() {wiki.Parser_mgr().Ctx().Cur_page().Wdata_external_lang_links().Reset();} + public void Init_external_links_mgr_clear() {wiki.Parser_mgr().Ctx().Page().Wdata_external_lang_links().Reset();} public void Init_external_links_mgr_add(String... langs) { - Wdata_external_lang_links_data external_lang_links = wiki.Parser_mgr().Ctx().Cur_page().Wdata_external_lang_links(); + Wdata_external_lang_links_data external_lang_links = wiki.Parser_mgr().Ctx().Page().Wdata_external_lang_links(); external_lang_links.Enabled_(true); int len = langs.length; for (int i = 0; i < len; i++) { @@ -130,7 +130,7 @@ public class Wdata_wiki_mgr_fxt { } public void Test_parse_langs(String raw, String expd) { // setup langs - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); app.Xwiki_mgr__sitelink_mgr().Parse(Bry_.new_u8(String_.Concat_lines_nl ( "0|grp1" , "1|en|English" @@ -155,7 +155,7 @@ public class Wdata_wiki_mgr_fxt { } public void Test_xwiki_links(String ttl, String... expd) { tmp_langs.Clear(); - Wdata_xwiki_link_wtr.Write_wdata_links(tmp_langs, wiki, Xoa_ttl.parse(wiki, Bry_.new_u8(ttl)), wiki.Parser_mgr().Ctx().Cur_page().Wdata_external_lang_links()); + Wdata_xwiki_link_wtr.Write_wdata_links(tmp_langs, wiki, Xoa_ttl.parse(wiki, Bry_.new_u8(ttl)), wiki.Parser_mgr().Ctx().Page().Wdata_external_lang_links()); Tfds.Eq_ary_str(expd, Test_xwiki_links_xto_str_ary(tmp_langs)); } List_adp tmp_langs = List_adp_.new_(); String[] Test_xwiki_links_xto_str_ary(List_adp list) { diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks.java index b73785a6d..7ab057fc2 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks.java @@ -24,7 +24,7 @@ public class Wdata_pf_noExternalLangLinks extends Pf_func_base { @Override public int Id() {return Xol_kwd_grp_.Id_noexternallanglinks;} @Override public Pf_func New(int id, byte[] name) {return new Wdata_pf_noExternalLangLinks().Name_(name);} @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) { - ctx.Cur_page().Wdata_external_lang_links().Parse(ctx, src, caller, self, this); + ctx.Page().Wdata_external_lang_links().Parse(ctx, src, caller, self, this); } public static void Print_self(Gfo_usr_dlg usr_dlg, Bry_bfr bfr, byte[] src, Xot_invk self, String warn_cls, String warn_fmt, Object... args) { bfr.Add_mid(src, self.Src_bgn(), self.Src_end()); diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks_tst.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks_tst.java index 9cd29d3ef..3bdaa32bb 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_noExternalLangLinks_tst.java @@ -36,7 +36,7 @@ class Wdata_pf_noExternalLangLinks_fxt { parser_fxt = new Xop_fxt(); app = parser_fxt.App(); wiki = parser_fxt.Wiki(); - data = wiki.Parser_mgr().Ctx().Cur_page().Wdata_external_lang_links(); + data = wiki.Parser_mgr().Ctx().Page().Wdata_external_lang_links(); } expd_sort = expd_enabled = Bool_.__byte; expd_langs = null; diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property.java index 10cb978ef..2b507fe6d 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property.java @@ -30,14 +30,14 @@ public class Wdata_pf_property extends Pf_func_base { long log_time_bgn = 0; if (property_wkr != null) { log_time_bgn = Env_.TickCount(); - if (!property_wkr.Eval_bgn(ctx.Cur_page(), id)) return; + if (!property_wkr.Eval_bgn(ctx.Page(), id)) return; } Xoae_app app = ctx.App(); Wdata_wiki_mgr wdata_mgr = app.Wiki_mgr().Wdata_mgr(); if (!wdata_mgr.Enabled()) return; Xowe_wiki wiki = ctx.Wiki(); - Xoa_ttl ttl = ctx.Cur_page().Ttl(); + Xoa_ttl ttl = ctx.Page().Ttl(); Wdata_pf_property_data data = new Wdata_pf_property_data(); data.Init_by_parse(ctx, src, caller, self, this, id); @@ -47,9 +47,9 @@ public class Wdata_pf_property extends Pf_func_base { pid = wdata_mgr.Pids__get_by_name(wiki.Wdata_wiki_lang(), data.Id()); if (pid == Wdata_wiki_mgr.Pid_null) {Print_self(app.Usr_dlg(), bfr, src, self, "prop_not_found", "prop id not found: ~{0} ~{1} ~{2}", wiki.Domain_str(), ttl.Page_db_as_str(), data.Id()); return;} Wdata_claim_grp prop_grp = prop_doc.Claim_list_get(pid); if (prop_grp == null) return;// NOTE: some props may not exist; EX: {{#property:P345}} for "Unknown_movie" may have a qid, but doesn't have a defined pid - wdata_mgr.Resolve_to_bfr(bfr, prop_grp, wiki.Wdata_wiki_lang()); // NOTE: was ctx.Cur_page().Lang().Key_bry(), but fails in simplewiki; DATE:2013-12-02 + wdata_mgr.Resolve_to_bfr(bfr, prop_grp, wiki.Wdata_wiki_lang()); // NOTE: was ctx.Page().Lang().Key_bry(), but fails in simplewiki; DATE:2013-12-02 if (property_wkr != null) - property_wkr.Eval_end(ctx.Cur_page(), id, log_time_bgn); + property_wkr.Eval_end(ctx.Page(), id, log_time_bgn); } public static int Parse_pid(Number_parser num_parser, byte[] bry) { int bry_len = bry.length; diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java index 515334c94..92b23b38e 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/pfuncs/Wdata_pf_property_data.java @@ -40,7 +40,7 @@ public class Wdata_pf_property_data { if (nde_key_bgn == nde_key_end && nde_key_bgn == -1) continue; // null arg; ignore, else will throw warning below; EX: {{#property:p1|}}; DATE:2013-11-15 Object o = Atr_keys.Get_by_mid(src, nde_key_bgn, nde_key_end); if (o == null) { - ctx.App().Usr_dlg().Warn_many("", "", "unknown key for property: ~{0} ~{1}", String_.new_u8(ctx.Cur_page().Ttl().Full_txt()), String_.new_u8(src, self.Src_bgn(), self.Src_end())); + ctx.App().Usr_dlg().Warn_many("", "", "unknown key for property: ~{0} ~{1}", String_.new_u8(ctx.Page().Ttl().Full_txt()), String_.new_u8(src, self.Src_bgn(), self.Src_end())); continue; } nde.Val_tkn().Tmpl_evaluate(ctx, src, self, tmp_bfr); diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java index 9f62d2937..db6d5dcf1 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/specials/Wdata_itemByTitle_page_tst.java @@ -60,7 +60,7 @@ class Wdata_itemByTitle_page_fxt { wdata_fxt.Init_qids_add("en", Xow_domain_tid_.Int__wikipedia, wdata_label, qid); } public void Test_open(String link, String expd) { - Xoae_page page = wiki.Parser_mgr().Ctx().Cur_page(); + Xoae_page page = wiki.Parser_mgr().Ctx().Page(); Xoa_url url = app.User().Wikii().Utl__url_parser().Parse(Bry_.new_u8(link)); page.Url_(url); Xoa_ttl ttl = Xoa_ttl.parse(wiki, Bry_.new_a7(link)); diff --git a/400_xowa/src/gplx/xowa/xtns/xowa_cmds/Xox_xowa_html_cmd.java b/400_xowa/src/gplx/xowa/xtns/xowa_cmds/Xox_xowa_html_cmd.java index 59f716330..2fc69e90f 100644 --- a/400_xowa/src/gplx/xowa/xtns/xowa_cmds/Xox_xowa_html_cmd.java +++ b/400_xowa/src/gplx/xowa/xtns/xowa_cmds/Xox_xowa_html_cmd.java @@ -41,9 +41,9 @@ public class Xox_xowa_html_cmd implements Xox_xnde, Mwh_atr_itm_owner { // if (src[itm_end - 1] == Byte_ascii.Nl) --itm_end; // ignore last \n; byte[] raw = Bry_.Mid(src, itm_bgn, itm_end); if (pos_val == Pos_head_end) - ctx.Cur_page().Html_data().Custom_head_end_concat(raw); + ctx.Page().Html_data().Custom_head_end_concat(raw); else - ctx.Cur_page().Html_data().Custom_html_end_concat(raw); + ctx.Page().Html_data().Custom_html_end_concat(raw); } public void Xtn_write(Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xop_xnde_tkn xnde, byte[] src) {} private static byte Pos_val(byte[] bry) { diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file-user.xowa b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file-user.xowa deleted file mode 100644 index fab91334b..000000000 Binary files a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file-user.xowa and /dev/null differ diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file.xowa b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file.xowa deleted file mode 100644 index 1906386dc..000000000 Binary files a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-file.xowa and /dev/null differ diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-text.xowa b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-text.xowa index 3ec98d90b..4d02f463a 100644 Binary files a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-text.xowa and b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org-text.xowa differ