From d0769c32b48b9e208a61b9aed46ed81a0fa5f0b5 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Wed, 12 Oct 2016 10:02:08 -0400 Subject: [PATCH] parse wgCategoryCollation to create cfg lines in bin\any\xowa\cfg\wiki --- 400_xowa/src/gplx/xowa/Xoa_app_.java | 2 +- .../wm_server_cfgs/Xowm_server_cfg_cmd.java | 3 +- .../wm_server_cfgs/Xowm_server_cfg_mgr.java | 67 ++++++++++++++++--- .../catpages/doms/Xoctg_catpage_itm.java | 2 +- 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index b719318ee..bb8a54dcf 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -32,7 +32,7 @@ public class Xoa_app_ { } } public static final String Name = "xowa"; - public static final String Version = "3.9.4.4"; + public static final String Version = "3.9.4.5"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys_str; public static String User_agent = ""; diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_cmd.java b/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_cmd.java index 924270d46..314ad5798 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_cmd.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_cmd.java @@ -20,8 +20,7 @@ import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*; public class Xowm_server_cfg_cmd extends Xob_cmd__base { public Xowm_server_cfg_cmd(Xob_bldr bldr, Xowe_wiki wiki) {super(bldr, wiki);} @Override public void Cmd_run() { -// wiki.Init_assert(); -// mgr.Exec(wiki); + new Xowm_server_cfg_mgr().Exec(bldr.App()); } public static final String BLDR_CMD_KEY = "cfg.wikis.wm_server_cfg"; diff --git a/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_mgr.java b/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_mgr.java index e1e29d425..65a93cd27 100644 --- a/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/bldrs/app_cfgs/wm_server_cfgs/Xowm_server_cfg_mgr.java @@ -16,21 +16,68 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.bldrs.app_cfgs.wm_server_cfgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.bldrs.*; import gplx.xowa.addons.bldrs.app_cfgs.*; +import gplx.core.ios.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.wkrs.*; +import gplx.langs.phps.*; +import gplx.xowa.wikis.domains.*; public class Xowm_server_cfg_mgr { - public void Exec() { - byte[] src = Load_or_download(); + public void Exec(Xoa_app app) { + // get local file + Io_url tmp_url = app.Fsys_mgr().Bin_xowa_dir().GenSubFil_nest("cfg", "wiki", "InitialiseSettings.php.txt"); + Assert_recent_or_download(tmp_url, "https://noc.wikimedia.org/conf/InitialiseSettings.php.txt", 1440); + byte[] src = Io_mgr.Instance.LoadFilBry(tmp_url); Parse_cat_collation(src); } - private byte[] Load_or_download() { - // Io_mgr.Instance.DownloadFil_args("", Io_url_.NullPtr).Exec_as_bry("https://noc.wikimedia.org/conf/InitialiseSettings.php.txt"); - return null; - } - private void Parse_cat_collation(byte[] src) { - int bgn_pos = Bry_find_.Find_fwd(src, Bry_.new_a7("wgCategoryCollation")); + private void Parse_cat_collation(byte[] all) { + // extract cat_collation + int bgn_pos = Bry_find_.Find_fwd(all, Bry_.new_a7("wgCategoryCollation")); if (bgn_pos == Bry_find_.Not_found) throw Err_.new_wo_type("could not find wgCategoryCollation bgn"); - int end_pos = Bry_find_.Find_fwd(src, Bry_.new_a7("],")); + bgn_pos = Bry_find_.Move_fwd(all, Byte_ascii.Nl_bry, bgn_pos); + + int end_pos = Bry_find_.Find_fwd(all, Bry_.new_a7("\n],"), bgn_pos); if (end_pos == Bry_find_.Not_found) throw Err_.new_wo_type("could not find wgCategoryCollation end"); - Tfds.Write(src, bgn_pos, end_pos); + byte[] src = Bry_.Mid(all, bgn_pos, end_pos + 2); // +2="]," + src = Bry_.Add(Bry_.new_a7("$test=["), src, Bry_.new_a7("];")); + + // parse php + Php_parser php_parser = new Php_parser(); + Php_evaluator eval = new Php_evaluator(new gplx.core.log_msgs.Gfo_msg_log("test")); + php_parser.Parse_tkns(src, eval); + Php_line[] lines = (Php_line[])eval.List().To_ary(Php_line.class); + Php_line_assign line = (Php_line_assign)lines[0]; + Php_itm_ary root_ary = (Php_itm_ary)line.Val(); + + // loop tkns and build String + Bry_bfr bfr = Bry_bfr_.New(); + bfr.Add_byte_nl(); + int len = root_ary.Subs_len(); + byte[] wiki_abrv__default = Bry_.new_a7("default"); + for (int i = 0; i < len; ++i) { + Php_itm_kv kv = (Php_itm_kv)root_ary.Subs_get(i); + byte[] wiki_abrv = kv.Key().Val_obj_bry(); + byte[] collation = kv.Val().Val_obj_bry(); + + if (Bry_.Eq(wiki_abrv, wiki_abrv__default)) continue; // skip "'default' => 'uppercase'," + try { + byte[] wiki_domain = Xow_abrv_wm_.Parse_to_domain_bry(wiki_abrv); + + Xow_domain_itm itm = Xow_domain_itm_.parse(wiki_domain); + bfr.Add_str_u8_fmt("app.bldr.wiki_cfg_bldr.get('{0}').new_cmd_('wiki.ctgs.collations', \"catpage_mgr.collation_('{1}');\");\n", itm.Domain_bry(), collation); + } catch (Exception e) {throw Err_.new_("failed to parse line", "wiki", wiki_abrv, "collation", collation, "err", Err_.Message_lang(e));} + } + Tfds.Write(bfr.To_str_and_clear()); + } + private static void Assert_recent_or_download(Io_url trg, String src, int min) { + // get file + IoItmFil trg_fil = Io_mgr.Instance.QueryFil(trg); + + // exit if file exists and is recent + if (trg_fil != null) { + DateAdp now = Datetime_now.Get(); + if (now.Diff(trg_fil.ModifiedTime()).Total_mins().To_int() < min) return; + } + + // load b/c file doesn't exist, or is not recent + Io_mgr.Instance.DownloadFil(src, trg); } } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/ctgs/htmls/catpages/doms/Xoctg_catpage_itm.java b/400_xowa/src/gplx/xowa/addons/wikis/ctgs/htmls/catpages/doms/Xoctg_catpage_itm.java index d3fd4b6ea..fe6160f61 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/ctgs/htmls/catpages/doms/Xoctg_catpage_itm.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/ctgs/htmls/catpages/doms/Xoctg_catpage_itm.java @@ -47,7 +47,7 @@ public class Xoctg_catpage_itm { public byte[] Sortkey_handle_make(Bry_bfr tmp_bfr, byte[] prv_sortkey_handle) { // page.tbl missing even though in cat_link.tbl; happens for "User:" namespace pages; if (page_ttl == Xoa_ttl.Null) { - // sortkey_prefix exists; happens for [[Category:A]] as opposed to [[Category:A|some_sortkey_prefix]] + // sortkey_prefix exists; happens for [[Category:A]] as opposed to [[Category:A|some_sortkey_prefix]]; also, {{DEFAULTSORTKEY:some_sortkey_prefix}} if (Bry_.Len_gt_0(sortkey_prefix)) { sortkey_handle = sortkey_prefix; return sortkey_handle; // set sortkey_prefix as new prv_sortkey_handle;