mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v3.1.4.2
This commit is contained in:
@@ -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 = "";
|
||||
|
||||
@@ -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 <span class='mw-headline' id='A'>
|
||||
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();
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
31
400_xowa/src/gplx/xowa/bldrs/cmds/randoms/Xob_rnd_cmd.java
Normal file
31
400_xowa/src/gplx/xowa/bldrs/cmds/randoms/Xob_rnd_cmd.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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() {}
|
||||
}
|
||||
@@ -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();}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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/");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -302,16 +302,16 @@ public class Xoh_thm_hzip_tst {
|
||||
, "</div>"
|
||||
));
|
||||
}
|
||||
// @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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <p>; 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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 <div> cancels pre
|
||||
|| lnki.Align_h() != Xop_lnki_align_h_.Null // halign (left, right, none) also produces <div>; DATE:2014-02-17
|
||||
|| lnki.Align_h() != Xop_lnki_align_h_.Null // halign (left, right, none) also produces <div>; 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("|");
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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("<!-- template loop detected:" + gplx.langs.htmls.Gfh_utl.Escape_html_as_str(String_.new_u8(name)) + " -->");
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
@@ -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:<section>; 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:<trecho> 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:<section>
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
24
400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_row.java
Normal file
24
400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_row.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
49
400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_tbl.java
Normal file
49
400_xowa/src/gplx/xowa/specials/randoms/Rndm_core_tbl.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
57
400_xowa/src/gplx/xowa/specials/randoms/Rndm_range_tbl.java
Normal file
57
400_xowa/src/gplx/xowa/specials/randoms/Rndm_range_tbl.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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();
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
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"));
|
||||
|
||||
@@ -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: <references group="note"/>
|
||||
Ref_itm_lst lst = ctx.Page().Ref_mgr().Lst_get(references.Group(), references.List_idx()); // get group; EX: <references group="note"/>
|
||||
if (lst == null) return; // NOTE: possible to have a grouped references without references; EX: Infobox planet; <references group=note> in sidebar, but no refs
|
||||
if (lst.Itms_len() == 0) return;
|
||||
bfr.Add(cfg.Grp_bgn());
|
||||
|
||||
@@ -53,7 +53,7 @@ public class Ref_nde implements Xox_xnde, Mwh_atr_itm_owner {
|
||||
nested = true; // refs nested in references don't show <a> entry in <references>
|
||||
}
|
||||
if (!ctx.Ref_ignore()) // sub_ctx may be marked to ignore <ref>; EX: <pages>,{{#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) {
|
||||
|
||||
@@ -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 <references> else refs will be lost; EX:"<references><references/></references>"; PAGE:en.w:Hwair; DATE:2014-06-27
|
||||
ctx.Para().Process_block__bgn_n__end_y(Xop_xnde_tag_.Tag_div); // xnde generates <block_node>; <references> -> <ol>; close any blocks; PAGE:fr.w:Heidi_(roman); DATE:2014-02-17
|
||||
Xox_xnde_.Xatr__set(wiki, this, xatrs_hash, src, xnde);
|
||||
|
||||
@@ -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: <dynamicPageList> 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));
|
||||
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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());
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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"
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -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()))
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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: <gallery><ref><gallery>; 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 <gallery>; 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));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 <noinclude>
|
||||
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -24,7 +24,7 @@ public class Xof_math_html_wtr {
|
||||
private Bry_fmtr math_fmtr_latex = Bry_fmtr.new_("<img id='xowa_math_img_~{math_idx}' src='' width='' height=''/><span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "math_idx", "math_text");
|
||||
private Bry_fmtr math_fmtr_mathjax = Bry_fmtr.new_("<span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "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();
|
||||
|
||||
@@ -16,135 +16,16 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -16,25 +16,24 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -16,10 +16,28 @@ You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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
|
||||
// ( "<div class='ext-wpb-pagebanner noprint pre-content'>"
|
||||
// , " <div class='wpb-topbanner'>"
|
||||
// , " <h1 class='wpb-name'>Test page</h1>"
|
||||
// , " <a class='image' title='Test page' href=''><img src='' srcset=' 640w' class='wpb-banner-image ' data-pos-x='0' data-pos-y='0' style='max-width:1px'></a>"
|
||||
// , " </div>"
|
||||
// , " <div class='wpb-topbanner-toc '><div class='wpb-banner-toc'></div></div>"
|
||||
// , "</div>"
|
||||
// ));
|
||||
}
|
||||
}
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
34
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_icon.java
Normal file
34
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_icon.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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];
|
||||
}
|
||||
59
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_itm.java
Normal file
59
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_itm.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
58
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java
Normal file
58
400_xowa/src/gplx/xowa/xtns/pagebanners/Pgbnr_xtn_mgr.java
Normal file
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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
|
||||
( "<div class='ext-wpb-pagebanner noprint pre-content'>"
|
||||
, " <div class='wpb-topbanner'>"
|
||||
, " {{#isHeadingOverrideEnabled}}<h1 class='wpb-name'>{{title}}</h1>{{/isHeadingOverrideEnabled}}"
|
||||
, " <a class='image' title='{{tooltip}}' href='{{bannerfile}}'><img src='{{banner}}' srcset='{{srcset}}' class='wpb-banner-image {{originx}}' data-pos-x='{{data-pos-x}}' data-pos-y='{{data-pos-y}}' style='max-width:{{maxWidth}}px'></a>"
|
||||
, " {{#hasIcons}}"
|
||||
, " <div class='wpb-iconbox'>"
|
||||
, " {{#icons}}"
|
||||
, " <a href='{{url}}'>{{{html}}}</a>"
|
||||
, " {{/icons}}"
|
||||
, " </div>"
|
||||
, " {{/hasIcons}}"
|
||||
, " </div>"
|
||||
, " <div class='wpb-topbanner-toc {{#bottomtoc}}wpb-bottomtoc{{/bottomtoc}}'><div class='wpb-banner-toc'>{{{toc}}}</div></div>"
|
||||
, "</div>"
|
||||
);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user