1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2015-05-24 22:43:55 -04:00
parent 6eec99a713
commit 51e6188c1e
1577 changed files with 11555 additions and 10080 deletions

View File

@@ -21,7 +21,7 @@ public class Bfmtr_eval_wiki implements Bry_fmtr_eval_mgr {
public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled = true;
public byte[] Eval(byte[] cmd) {
Object rslt = GfsCore._.Exec_bry(cmd, wiki);
return Bry_.new_utf8_(Object_.Xto_str_strict_or_null_mark(rslt));
return Bry_.new_u8(Object_.Xto_str_strict_or_null_mark(rslt));
}
public void Eval_mgr_(Bry_fmtr... fmtrs) {
int fmtrs_len = fmtrs.length;

View File

@@ -45,7 +45,7 @@ public class Xow_fragment_mgr implements GfoInvkAble {
public static final String Invk_html_js_edit_toolbar_fmt_ = "html_js_edit_toolbar_fmt_", Invk_html_js_edit_toolbar = "html_js_edit_toolbar";
public void Evt_lang_changed(Xol_lang lang) {
Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b512();
Xow_msg_mgr msg_mgr = wiki.Appe().User().Msg_mgr();
Xow_msg_mgr msg_mgr = wiki.Appe().Usere().Msg_mgr();
html_js_edit_toolbar = html_js_edit_toolbar_fmtr.Bld_bry_many(bfr
, msg_mgr.Val_by_id(Xol_msg_itm_.Id_edit_toolbar_bold_tip)
, msg_mgr.Val_by_id(Xol_msg_itm_.Id_edit_toolbar_bold_sample)

View File

@@ -47,11 +47,11 @@ class Xow_fragment_mgr_fxt {
wiki = Xoa_app_fxt.wiki_tst_(app);
}
} private Xowe_wiki wiki;
public Xol_lang Make_lang(String key) {return wiki.Appe().Lang_mgr().Get_by_key_or_new(Bry_.new_ascii_(key));}
public Xol_lang Make_lang(String key) {return wiki.Appe().Lang_mgr().Get_by_key_or_new(Bry_.new_a7(key));}
public void Test_fragment(String key, String expd) {Test_fragment(wiki.Lang(), key, expd);}
public void Test_fragment(Xol_lang lang, String key, String expd) {
wiki.Fragment_mgr().Evt_lang_changed(lang);
byte[] actl = (byte[])GfoInvkAble_.InvkCmd(wiki.Fragment_mgr(), key);
Tfds.Eq_str_lines(expd, String_.new_utf8_(actl));
Tfds.Eq_str_lines(expd, String_.new_u8(actl));
}
}

View File

@@ -28,5 +28,5 @@ public class Xow_mainpage_finder {
tmp_bfr.Mkr_rls();
return rv;
}
public static final byte[] Msg_mainpage = Bry_.new_ascii_("mainpage");
public static final byte[] Msg_mainpage = Bry_.new_a7("mainpage");
}

View File

@@ -57,17 +57,17 @@ class Xow_mainpage_finder_fxt {
fxt.Reset_for_msgs();
} private Xop_fxt fxt = new Xop_fxt();
public void Init_siteinfo(String mainpage_val) {
fxt.Wiki().Props().Main_page_(Bry_.new_ascii_(mainpage_val));
fxt.Wiki().Props().Main_page_(Bry_.new_a7(mainpage_val));
}
public void Init_mediawiki_page(String mainpage_val) {
fxt.Init_page_create(String_.new_ascii_(Ttl_mainpage), mainpage_val);
} private static final byte[] Ttl_mainpage = Bry_.new_ascii_("MediaWiki:Mainpage"); // TEST:
fxt.Init_page_create(String_.new_a7(Ttl_mainpage), mainpage_val);
} private static final byte[] Ttl_mainpage = Bry_.new_a7("MediaWiki:Mainpage"); // TEST:
public void Init_lang(String mainpage_val) {
Xol_msg_itm msg_itm = fxt.Wiki().Lang().Msg_mgr().Itm_by_key_or_new(Xow_mainpage_finder.Msg_mainpage);
msg_itm.Atrs_set(Bry_.new_ascii_(mainpage_val), false, false);
msg_itm.Atrs_set(Bry_.new_a7(mainpage_val), false, false);
}
public void Test_mainpage(String expd) {
byte[] actl = Xow_mainpage_finder.Find_or(fxt.Wiki(), fxt.Wiki().Props().Main_page());
Tfds.Eq(expd, String_.new_ascii_(actl));
Tfds.Eq(expd, String_.new_a7(actl));
}
}

View File

@@ -53,7 +53,7 @@ public class Xow_msg_mgr implements GfoInvkAble {
return itm;
}
public byte[] Val_by_key_args(byte[] key, Object... args) {return Val_by_key(key, args);}
public byte[] Val_by_key_obj(String key) {return Val_by_key(Bry_.new_utf8_(key), null);}
public byte[] Val_by_key_obj(String key) {return Val_by_key(Bry_.new_u8(key), null);}
public byte[] Val_by_key_obj(byte[] key) {return Val_by_key(key, null);}
private byte[] Val_by_key(byte[] key, Object[] args) {
Xol_msg_itm itm = msg_mgr.Itm_by_key_or_null(key);
@@ -104,7 +104,7 @@ public class Xow_msg_mgr implements GfoInvkAble {
itm.Accesskey_(accesskey_val).Title_(tooltip_val).Atr_accesskey_and_title_(rv);
return null;
}
} static final byte[] CONST_prefix_tooltip = Bry_.new_ascii_("tooltip-"), CONST_prefix_accesskey = Bry_.new_ascii_("accesskey-"), CONST_atr_title = Bry_.new_ascii_(" title=\""), CONST_atr_accesskey = Bry_.new_ascii_(" accesskey=\"");
} static final byte[] CONST_prefix_tooltip = Bry_.new_a7("tooltip-"), CONST_prefix_accesskey = Bry_.new_a7("accesskey-"), CONST_atr_title = Bry_.new_a7(" title=\""), CONST_atr_accesskey = Bry_.new_a7(" accesskey=\"");
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_get)) return this.Val_by_key_obj(m.ReadBry("v"));
else if (ctx.Match(k, Invk_get_html_accesskey_and_title)) return this.Val_html_accesskey_and_title(m.ReadBry("v"));

View File

@@ -31,10 +31,10 @@ public class Xow_ns implements GfoInvkAble {
else {
this.name_bry = v;
this.name_db_w_colon = Bry_.Add(v, Byte_ascii.Colon);
this.name_str = String_.new_utf8_(v);
this.name_str = String_.new_u8(v);
}
this.num_str = Int_.Xto_str_pad_bgn_zero(id, 3);
this.num_bry = Bry_.new_ascii_(num_str);
this.num_bry = Bry_.new_a7(num_str);
this.name_enc = Xoa_url_encoder._.Encode(name_bry);
this.name_txt = Bry_.Replace(name_enc, Byte_ascii.Underline, Byte_ascii.Space);
this.name_txt_w_colon = Bry_.Replace(name_db_w_colon, Byte_ascii.Underline, Byte_ascii.Space);
@@ -79,16 +79,16 @@ public class Xow_ns implements GfoInvkAble {
public byte[] Gen_ttl(byte[] page) {return id == Xow_ns_.Id_main ? page : Bry_.Add(name_db_w_colon, page);}
public void Aliases_add(String alias) {
if (String_.Eq(alias, name_str)) return;
if (aliases == null) aliases = OrderedHash_.new_();
aliases.Add_if_new(alias, alias);
} private OrderedHash aliases;
if (aliases == null) aliases = Ordered_hash_.new_();
aliases.Add_if_dupe_use_1st(alias, alias);
} private Ordered_hash aliases;
public KeyVal[] Aliases_as_scrib_ary() { // NOTE: intended for Scrib_lib_site; DATE:2014-02-15
if (aliases == null) return KeyVal_.Ary_empty;
int len = aliases.Count();
KeyVal[] rv = new KeyVal[len];
for (int i = 0; i < len; i++) {
String alias = (String)aliases.FetchAt(i);
rv[i] = KeyVal_.int_(i + ListAdp_.Base1, alias);
String alias = (String)aliases.Get_at(i);
rv[i] = KeyVal_.int_(i + List_adp_.Base1, alias);
}
return rv;
}

View File

@@ -47,21 +47,21 @@ public class Xow_ns_ {
, Key_module = "Module" , Key_module_talk = "Module talk"
, Key_null = "null"
;
public static final byte[] Bry_template = Bry_.new_ascii_(Key_template);
public static final byte[] Name_ui_main = Bry_.new_ascii_(Key_main);
public static final byte[] Bry_template = Bry_.new_a7(Key_template);
public static final byte[] Name_ui_main = Bry_.new_a7(Key_main);
public static int Canonical_id(byte[] canonical_name) {
if (canonical_hash == null) {
Xow_ns[] ary = Canonical;
int len = ary.length;
canonical_hash = OrderedHash_.new_bry_();
canonical_hash = Ordered_hash_.new_bry_();
for (int i = 0; i < len; i++) {
Xow_ns ns = ary[i];
canonical_hash.Add(ns.Name_bry(), Int_obj_val.new_(ns.Id()));
}
}
Object rv_obj = canonical_hash.Fetch(canonical_name);
Object rv_obj = canonical_hash.Get_by(canonical_name);
return rv_obj == null ? Xow_ns_.Id_null : ((Int_obj_val)rv_obj).Val();
} private static OrderedHash canonical_hash;
} private static Ordered_hash canonical_hash;
public static int Canonical_idx_media = 0;
public static final Xow_ns[] Canonical = new Xow_ns[] // REF.MW: Namespace.php|$wgCanonicalNamespaceNames
{ Canonical_new_(Id_media, Key_media)
@@ -83,7 +83,7 @@ public class Xow_ns_ {
, Canonical_new_(Id_category_talk, Key_category_talk)
};
public static final String Ns_name_wikipedia = "Wikipedia";
public static final byte[] Ns_name_main_bry = Bry_.new_ascii_(Key_main);
public static final byte[] Ns_prefix_main = Bry_.new_ascii_("Main:");
private static Xow_ns Canonical_new_(int id, String name) {return new Xow_ns(id, Xow_ns_case_.Id_1st, Bry_.new_ascii_(name), false);} // NOTE: for id/name reference only; case_match and alias does not matter;
public static final byte[] Ns_name_main_bry = Bry_.new_a7(Key_main);
public static final byte[] Ns_prefix_main = Bry_.new_a7("Main:");
private static Xow_ns Canonical_new_(int id, String name) {return new Xow_ns(id, Xow_ns_case_.Id_1st, Bry_.new_a7(name), false);} // NOTE: for id/name reference only; case_match and alias does not matter;
}

View File

@@ -18,9 +18,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa; import gplx.*;
public class Xow_ns_case_ {
public static final byte Id_all = 0, Id_1st = 1;
public static final String Key_all = "case-sensitive", Key_1st = "first-letter";
public static byte parse_(String s) {
if (String_.Eq(s, "first-letter")) return Id_1st;
else if (String_.Eq(s, "case-sensitive")) return Id_all;
else throw Err_mgr._.unhandled_(s);
if (String_.Eq(s, Key_1st)) return Id_1st;
else if (String_.Eq(s, Key_all)) return Id_all;
else throw Err_mgr._.unhandled_(s);
}
public static String To_str(byte uid) {
switch (uid) {
case Id_all: return Key_all;
case Id_1st: return Key_1st;
default: throw Err_.unhandled(uid);
}
}
}

View File

@@ -19,10 +19,10 @@ package gplx.xowa; import gplx.*;
import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.xowa.langs.cases.*;
import gplx.xowa.xtns.scribunto.*;
public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
private OrderedHash id_hash = OrderedHash_.new_(); // hash for retrieval by id
private Ordered_hash id_hash = Ordered_hash_.new_(); // hash for retrieval by id
private Hash_adp_bry name_hash; // hash for retrieval by name; note that ns names are case-insensitive "File:" == "fILe:"
private Hash_adp_bry tmpl_hash; // hash for retrieval by name; PERF for templates
private OrderedHash aliases = OrderedHash_.new_(); // hash to store aliases; used to populate name_hash;
private Ordered_hash aliases = Ordered_hash_.new_(); // hash to store aliases; used to populate name_hash;
public Xow_ns_mgr(Xol_case_mgr case_mgr) {
name_hash = Hash_adp_bry.ci_utf8_(case_mgr);
tmpl_hash = Hash_adp_bry.ci_utf8_(case_mgr);
@@ -53,8 +53,8 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
public int Ords_len() {return ords_len;} private int ords_len;
public Xow_ns Ords_get_at(int ord) {return ords[ord];}
public int Ids_len() {return id_hash.Count();}
public Xow_ns Ids_get_at(int idx) {return (Xow_ns)id_hash.FetchAt(idx);}
public Xow_ns Ids_get_or_null(int id) {return (Xow_ns)id_hash.Fetch(ns_hash_lkp.Val_(id));} private Int_obj_ref ns_hash_lkp = Int_obj_ref.zero_();
public Xow_ns Ids_get_at(int idx) {return (Xow_ns)id_hash.Get_at(idx);}
public Xow_ns Ids_get_or_null(int id) {return (Xow_ns)id_hash.Get_by(ns_hash_lkp.Val_(id));} private Int_obj_ref ns_hash_lkp = Int_obj_ref.zero_();
private Xow_ns Ids_get_or_empty(int id) {
Xow_ns rv = Ids_get_or_null(id);
return rv == null ? Ns__empty : rv;
@@ -83,7 +83,7 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
public void Aliases_clear() {aliases.Clear();}
public Xow_ns_mgr Aliases_add(int ns_id, String name) {
KeyVal kv = KeyVal_.new_(name, Int_obj_val.new_(ns_id));
aliases.AddReplace(name, kv);
aliases.Add_if_dupe_use_nth(name, kv);
return this;
}
public Xow_ns_mgr Init() {
@@ -106,16 +106,16 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
}
int aliases_len = aliases.Count();
for (int i = 0; i < aliases_len; i++) {
KeyVal kv = (KeyVal)aliases.FetchAt(i);
KeyVal kv = (KeyVal)aliases.Get_at(i);
int ns_id = ((Int_obj_val)kv.Val()).Val();
Xow_ns ns = Ids_get_or_null(ns_id); if (ns == null) continue; // happens when alias exists, but not ns; EX: test has Image alias, but not File alias; should not happen "live" but don't want to fail
ns.Aliases_add(kv.Key()); // register alias with official ns; EX: "Image" will be placed in "File"'s .Aliases
byte[] alias_bry = Bry_.new_utf8_(kv.Key());
byte[] alias_bry = Bry_.new_u8(kv.Key());
Rebuild_hashes__add(name_hash, ns, alias_bry);
if (ns.Id_tmpl()) {
byte[] alias_name = Bry_.new_utf8_(kv.Key());
byte[] alias_name = Bry_.new_u8(kv.Key());
alias_name = Bry_.Add(alias_name, Byte_ascii.Colon);
tmpl_hash.AddReplace(alias_name, alias_name);
tmpl_hash.Add_if_dupe_use_nth(alias_name, alias_name);
}
}
}
@@ -125,12 +125,12 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
Xow_ns project_ns = ords[ns.Ord_subj_id()];
if (project_ns == null) return; // should warn or throw error; for now just exit
ns.Name_bry_(Bry_.Replace(ns_name, Project_talk_fmt_arg, project_ns.Name_bry()));
} private static final byte[] Project_talk_fmt_arg = Bry_.new_ascii_("$1");
} private static final byte[] Project_talk_fmt_arg = Bry_.new_a7("$1");
private void Rebuild_hashes__add(Hash_adp_bry hash, Xow_ns ns, byte[] key) {
Xow_ns_mgr_name_itm ns_itm = new Xow_ns_mgr_name_itm(key, ns);
hash.AddReplace(key, ns_itm);
hash.Add_if_dupe_use_nth(key, ns_itm);
if (Bry_finder.Find_fwd(key, Byte_ascii.Underline) != Bry_.NotFound) // ns has _; add another entry for space; EX: Help_talk -> Help talk
hash.AddReplace(Bry_.Replace(key, Byte_ascii.Underline, Byte_ascii.Space), ns_itm);
hash.Add_if_dupe_use_nth(Bry_.Replace(key, Byte_ascii.Underline, Byte_ascii.Space), ns_itm);
}
public Xow_ns_mgr Add_defaults() { // NOTE: needs to happen after File ns is added; i.e.: cannot be put in Xow_ns_mgr() {} ctor
Aliases_add(Xow_ns_.Id_file , "Image"); // REF.MW: Setup.php; add "Image", "Image talk" for backward compatibility; note that MW hardcodes Image ns as well
@@ -139,7 +139,7 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
Aliases_add(gplx.xowa.xtns.scribunto.Scrib_xtn_mgr.Ns_id_module, "Module"); // always add "Module" ns; de.wikipedia.org has "Modul" defined in siteinfo.xml, but also uses Module
return this;
}
public Xow_ns_mgr Add_new(int nsId, String name) {return Add_new(nsId, Bry_.new_utf8_(name), Xow_ns_case_.Id_1st, false);} // for tst_ constructor
public Xow_ns_mgr Add_new(int nsId, String name) {return Add_new(nsId, Bry_.new_u8(name), Xow_ns_case_.Id_1st, false);} // for tst_ constructor
public Xow_ns_mgr Add_new(int ns_id, byte[] name, byte caseMatchId, boolean alias) {
Bry_.Replace_all_direct(name, Byte_ascii.Space, Byte_ascii.Underline); // standardize on _; EX: User talk -> User_talk; DATE:2013-04-21
Xow_ns ns = new Xow_ns(ns_id, caseMatchId, name, alias);
@@ -161,7 +161,7 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
++ns_count;
if (!id_hash.Has(ns_hash_lkp.Val_(ns_id))) // NOTE: do not add if already exists; avoids alias
id_hash.Add(Int_obj_ref.new_(ns.Id()), ns);
name_hash.AddReplace(ns.Name_bry(), new Xow_ns_mgr_name_itm(ns.Name_bry(), ns));
name_hash.Add_if_dupe_use_nth(ns.Name_bry(), new Xow_ns_mgr_name_itm(ns.Name_bry(), ns));
return this;
}
public int compare(Object lhsObj, Object rhsObj) {
@@ -172,12 +172,12 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
private void Ords_sort() {
int ords_cur = 0;
int ns_len = id_hash.Count();
id_hash.SortBy(this);
id_hash.Sort_by(this);
// assert that all items are grouped in pairs of subj, talk; note that subj is even and talk is odd
int nxt_ns_id = Int_.MinValue;
int prv_ns_id = Int_.MinValue;
for (int i = 0; i < ns_len; i++) {
Xow_ns ns = (Xow_ns)id_hash.FetchAt(i);
Xow_ns ns = (Xow_ns)id_hash.Get_at(i);
int ns_id = ns.Id();
if (ns_id < 0 // ignore negative ns (which don't have subj/talk pairing)
|| ns.Is_alias() // ignore alias
@@ -199,12 +199,12 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
Ords_sort_add(nxt_ns_id);
// sort again b/c new ns may have been added
id_hash.SortBy(this);
id_hash.Sort_by(this);
ns_len = id_hash.Count();
// assign ords; assert that subj has even ordinal index
ords_len = 0;
for (int i = 0; i < ns_len; i++) {
Xow_ns ns = (Xow_ns)id_hash.FetchAt(i);
Xow_ns ns = (Xow_ns)id_hash.Get_at(i);
int ns_id = ns.Id();
if (ns.Is_alias()) continue; // ignore alias
if (ns_id < 0) {}
@@ -255,7 +255,7 @@ public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
if (line.length == 0) continue;
byte[][] flds = Bry_.Split(line, Byte_ascii.Pipe);
int cur_id = Bry_.Xto_int_or(flds[0], Int_.MinValue);
this.Aliases_add(cur_id, String_.new_utf8_(flds[1]));
this.Aliases_add(cur_id, String_.new_u8(flds[1]));
}
Ords_sort();
}

View File

@@ -31,7 +31,7 @@ public class Xow_ns_mgr_tst {
fxt.Ns_mgr().Add_new(Xow_ns_.Id_template, "Template");
fxt.Ns_mgr().Aliases_add(Xow_ns_.Id_template, "Templatex");
fxt.Ns_mgr().Init();
byte[] name = Bry_.new_ascii_("Templatex:Abc");
byte[] name = Bry_.new_a7("Templatex:Abc");
Tfds.Eq(10, fxt.Ns_mgr().Tmpls_get_w_colon(name, 0, name.length));
}
@Test public void Utf8() {// PURPOSE: handle different casings for ns_names; PAGE:ru.w:Портрет_итальянского_Ренессанса DATE:2014-07-04
@@ -71,7 +71,7 @@ class Xow_ns_mgr_fxt {
int ns_names_len = ns_names.length;
for (int i = 0; i < ns_names_len; ++i) {
String ns_name = ns_names[i];
Xow_ns actl_ns = ns_mgr.Names_get_or_null(Bry_.new_utf8_(ns_name));
Xow_ns actl_ns = ns_mgr.Names_get_or_null(Bry_.new_u8(ns_name));
int actl_id = actl_ns == null ? Int_.MinValue : actl_ns.Id();
Tfds.Eq(expd_id, actl_id, ns_name);
}

View File

@@ -27,10 +27,10 @@ public class Xow_script_mgr implements GfoInvkAble {
int len = hash.Count();
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_k004();
for (int i = 0; i < len; i++) {
Xow_script_itm itm = (Xow_script_itm)hash.FetchAt(i);
Xow_script_itm itm = (Xow_script_itm)hash.Get_at(i);
int wiki_tid = wiki.Domain_tid();
if (Int_.In(wiki_tid, itm.Wiki_tids())) // wiki_tid matches itm
itm.Fmtr().Bld_bfr_many(bfr, wiki.Domain_bry(), Xow_domain_.Tid__get_bry(wiki_tid), wiki.Lang().Key_bry());
itm.Fmtr().Bld_bfr_many(bfr, wiki.Domain_bry(), Xow_domain_type_.Get_type_as_bry(wiki_tid), wiki.Lang().Key_bry());
}
String gfs_script = String_.Replace(bfr.Xto_str_and_clear(), Op_sys.Wnt.Nl_str(), Op_sys.Lnx.Nl_str());
wiki.Appe().Gfs_mgr().Run_str(gfs_script);
@@ -41,12 +41,12 @@ public class Xow_script_mgr implements GfoInvkAble {
int len = wiki_tid_names.length;
int[] wiki_tids = new int[len];
for (int i = 0; i < len; i++)
wiki_tids[i] = Xow_domain_.Tid__get_int(wiki_tid_names[i]);
wiki_tids[i] = Xow_domain_type_.Get_type_as_tid(wiki_tid_names[i]);
Xow_script_itm itm = new Xow_script_itm(key, wiki_tids, script);
hash.AddReplace(itm.Key(), itm);
hash.Add_if_dupe_use_nth(itm.Key(), itm);
}
public OrderedHash hash = OrderedHash_.new_bry_();
public Ordered_hash hash = Ordered_hash_.new_bry_();
}
class Xow_script_itm {
public Xow_script_itm(byte[] key, int[] wiki_tids, byte[] script) {

View File

@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa; import gplx.*;
public class Xow_user implements GfoInvkAble {
public byte[] Name() {return name;} private byte[] name = Bry_.new_ascii_("anonymous");
public byte[] Name() {return name;} private byte[] name = Bry_.new_a7("anonymous");
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_name_)) name = m.ReadBry("v");
else return GfoInvkAble_.Rv_unhandled;

View File

@@ -24,7 +24,7 @@ public interface Xow_wiki extends Xow_ttl_parser {
boolean Type_is_edit();
byte[] Domain_bry(); // EX: en.wikipedia.org
String Domain_str();
int Domain_tid(); // Xow_domain_.Tid_int_wikipedia
int Domain_tid(); // Xow_domain_type_.Tid_wikipedia
byte[] Domain_abrv(); // enwiki
Xow_domain Domain_itm();
Xow_fsys_mgr Fsys_mgr();
@@ -39,5 +39,6 @@ public interface Xow_wiki extends Xow_ttl_parser {
boolean Html__hdump_enabled();
Xow_hzip_mgr Html__hzip_mgr();
Xohd_hdump_rdr Html__hdump_rdr();
Xoh_page_wtr_mgr_base Html__page_wtr_mgr();
Xoh_page_wtr_mgr_base Html__page_wtr_mgr();
void Init_by_wiki();
}

View File

@@ -18,12 +18,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa; import gplx.*;
import gplx.xowa.wikis.*;
public class Xow_wiki_props implements GfoInvkAble {
public byte[] SiteName() {return siteName;} public Xow_wiki_props SiteName_(int v) {siteName = Bry_.new_ascii_(String_.UpperFirst(String_.new_ascii_(Xow_domain_.Tid__get_bry(v)))); return this;} private byte[] siteName = Bry_.Empty;
public byte[] ServerName() {return serverName;} public Xow_wiki_props ServerName_(byte[] v) {serverName = v; server = Bry_.Add(bry_http, v); return this;} private byte[] serverName = Bry_.new_ascii_("localhost");
public byte[] Server() {return server;} private byte[] server = Bry_.new_ascii_("http://localhost"); static final byte[] bry_http = Bry_.new_ascii_("http://");
public byte[] SiteName() {return siteName;} public Xow_wiki_props SiteName_(int v) {siteName = Bry_.new_a7(String_.UpperFirst(String_.new_a7(Xow_domain_type_.Get_type_as_bry(v)))); return this;} private byte[] siteName = Bry_.Empty;
public byte[] ServerName() {return serverName;} public Xow_wiki_props ServerName_(byte[] v) {serverName = v; server = Bry_.Add(bry_http, v); return this;} private byte[] serverName = Bry_.new_a7("localhost");
public byte[] Server() {return server;} private byte[] server = Bry_.new_a7("http://localhost"); static final byte[] bry_http = Bry_.new_a7("http://");
public byte[] ArticlePath() {return articlePath;} public Xow_wiki_props ArticlePath_(byte[] v) {articlePath = v; return this;} private byte[] articlePath = Xoh_href_parser.Href_wiki_bry;
public byte[] ScriptPath() {return scriptPath;} public Xow_wiki_props ScriptPath_(byte[] v) {scriptPath = v; return this;} private byte[] scriptPath = Bry_.new_ascii_("/wiki");
public byte[] StylePath() {return stylePath;} public Xow_wiki_props StylePath_(byte[] v) {stylePath = v; return this;} private byte[] stylePath = Bry_.new_ascii_("/wiki/skins");
public byte[] ScriptPath() {return scriptPath;} public Xow_wiki_props ScriptPath_(byte[] v) {scriptPath = v; return this;} private byte[] scriptPath = Bry_.new_a7("/wiki");
public byte[] StylePath() {return stylePath;} public Xow_wiki_props StylePath_(byte[] v) {stylePath = v; return this;} private byte[] stylePath = Bry_.new_a7("/wiki/skins");
public byte[] ContentLanguage() {return contentLanguage;} public Xow_wiki_props ContentLanguage_(byte[] v) {contentLanguage = v; return this;} private byte[] contentLanguage = Bry_.Empty;
public byte[] DirectionMark() {return directionMark;} public Xow_wiki_props DirectionMark_(byte[] v) {directionMark = v; return this;} private byte[] directionMark = Bry_.Empty;
public byte[] CurrentVersion() {return MediaWiki_version;}
@@ -60,5 +60,5 @@ public class Xow_wiki_props implements GfoInvkAble {
, Invk_css_version_ = "css_version_"
, Invk_modified_latest_ = "modified_latest_"
;
public static final byte[] MediaWiki_version = Bry_.new_ascii_("1.21wmf11"); // approximate level of compatibility
public static final byte[] MediaWiki_version = Bry_.new_a7("1.21wmf11"); // approximate level of compatibility
}

View File

@@ -19,7 +19,7 @@ package gplx.xowa; import gplx.*;
import org.junit.*;
public class Xow_wiki_tst {
@Before public void init() {fxt.Clear();} private Xow_wiki_fxt fxt = new Xow_wiki_fxt();
@Test public void GetPageByTtl() { // PURPOSE.fix: unknown page causes null reference error in scribunto; DATE:2013-08-27
@Test public void Load_page_by_ttl() { // PURPOSE.fix: unknown page causes null reference error in scribunto; DATE:2013-08-27
gplx.xowa.xtns.scribunto.Scrib_core.Core_new_(fxt.Fxt().App(), fxt.Fxt().Ctx());
fxt.Test_getPageByTtl("Does_not_exist", null);
}
@@ -31,11 +31,11 @@ class Xow_wiki_fxt {
public Xop_fxt Fxt() {return fxt;} private Xop_fxt fxt;
public void Test_getPageByTtl(String ttl_str, String expd) {
Xowe_wiki wiki = fxt.Wiki();
byte[] ttl_bry = Bry_.new_ascii_(ttl_str);
byte[] ttl_bry = Bry_.new_a7(ttl_str);
Xoa_url url = Xoa_url.blank_().Raw_(ttl_bry);
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ttl_bry);
Xoae_page actl = fxt.Wiki().GetPageByTtl(url, ttl);
Xoae_page actl = fxt.Wiki().Load_page_by_ttl(url, ttl);
if (expd == null) Tfds.Eq_true(actl.Missing());
else Tfds.Eq(expd, String_.new_utf8_(actl.Ttl().Raw()));
else Tfds.Eq(expd, String_.new_u8(actl.Ttl().Raw()));
}
}

View File

@@ -58,7 +58,7 @@ public class Xowc_xtn_pages implements GfoInvkAble {
if ( ns == null // ns doesn't exist; should throw error;
|| !Bry_.Eq(ns.Name_bry(), name) // ns exists, but name doesn't match canonical
) {
ns_mgr.Aliases_add(id, String_.new_ascii_(name));
ns_mgr.Aliases_add(id, String_.new_a7(name));
++aliases_added;
}
return aliases_added;
@@ -68,13 +68,13 @@ public class Xowc_xtn_pages implements GfoInvkAble {
else return GfoInvkAble_.Rv_unhandled;
return this;
} private static final String Invk_ns_names_ = "ns_names_";
public static final byte[] Xtn_key = Bry_.new_ascii_("pages");
public static final byte[] Xtn_key = Bry_.new_a7("pages");
public static final int Ns_index_id_default = 102, Ns_page_id_default = 104;
private static final byte[]
Default_ns_page_name = Bry_.new_ascii_("Page")
, Default_ns_page_talk_name = Bry_.new_ascii_("Page_talk")
, Default_ns_index_name = Bry_.new_ascii_("Index")
, Default_ns_index_talk_name = Bry_.new_ascii_("Index_talk")
Default_ns_page_name = Bry_.new_a7("Page")
, Default_ns_page_talk_name = Bry_.new_a7("Page_talk")
, Default_ns_index_name = Bry_.new_a7("Index")
, Default_ns_index_talk_name = Bry_.new_a7("Index_talk")
;
}

View File

@@ -39,7 +39,7 @@ class Xowc_xtn_pages_fxt {
return this;
}
public void Init_names(String page_name, String page_talk_name, String index_name, String index_talk_name) {
cfg_pages.Ns_names_(Bry_.new_ascii_(page_name), Bry_.new_ascii_(page_talk_name), Bry_.new_ascii_(index_name), Bry_.new_ascii_(index_talk_name));
cfg_pages.Ns_names_(Bry_.new_a7(page_name), Bry_.new_a7(page_talk_name), Bry_.new_a7(index_name), Bry_.new_a7(index_talk_name));
}
public void Exec_init() {
ns_mgr.Init_w_defaults(); // init ns_msg
@@ -58,7 +58,7 @@ class Xowc_xtn_pages_fxt {
Test_ns_canonical_itm(index_talk_name , cfg_pages.Ns_index_talk_id());
}
private void Test_ns_canonical_itm(String name, int expd_ns_id) {
Xow_ns ns = ns_mgr.Names_get_or_null(Bry_.new_ascii_(name));
Xow_ns ns = ns_mgr.Names_get_or_null(Bry_.new_a7(name));
int actl_ns_id = ns == null ? Int_.MinValue : ns.Id();
Tfds.Eq(expd_ns_id, actl_ns_id);
}

View File

@@ -22,7 +22,7 @@ import gplx.fsdb.*;
import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.data.tbls.*;
import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.fsdb.meta.*;
import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.wikis.xwikis.*;
import gplx.xowa.html.wtrs.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.css.*;
import gplx.xowa.html.wtrs.*; import gplx.xowa.html.hzips.*; import gplx.xowa.html.hdumps.*; import gplx.xowa.html.css.*; import gplx.xowa.html.ns_files.*;
import gplx.xowa.setup.maints.*; import gplx.xowa.wikis.caches.*;
import gplx.xowa.bldrs.xmls.*; import gplx.xowa.xtns.pfuncs.*;
import gplx.xowa.tdbs.*;
@@ -30,7 +30,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
private Xow_html_util util;
public Xowe_wiki(Xoae_app app, Io_url wiki_dir, Xow_ns_mgr ns_mgr, Xol_lang lang) {
this.app = app; this.ns_mgr = ns_mgr; this.lang = lang;
domain_str = wiki_dir.NameOnly(); domain_bry = Bry_.new_utf8_(domain_str);
domain_str = wiki_dir.NameOnly(); domain_bry = Bry_.new_u8(domain_str);
domain_itm = Xow_domain_.parse(domain_bry);
domain_tid = domain_itm.Domain_tid();
domain_abrv = Xow_wiki_alias.Build_alias(Xow_domain_.parse(domain_bry));
@@ -64,8 +64,8 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
eval_mgr = new Bfmtr_eval_wiki(this);
fragment_mgr = new Xow_fragment_mgr(this);
xtn_mgr = new Xow_xtn_mgr().Ctor_by_wiki(this);
if (domain_tid == Xow_domain_.Tid_int_home) {
wdata_wiki_tid = Xow_domain_.Tid_int_wikipedia;
if (domain_tid == Xow_domain_type_.Tid_home) {
wdata_wiki_tid = Xow_domain_type_.Tid_wikipedia;
wdata_wiki_lang = Xol_lang_.Key_en;
}
else {
@@ -138,7 +138,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
public Xop_parser Parser() {return parser;} private Xop_parser parser;
public Xop_redirect_mgr Redirect_mgr() {return redirect_mgr;} private Xop_redirect_mgr redirect_mgr;
public Xop_ctx Ctx() {return ctx;} private Xop_ctx ctx;
public ListAdp Rls_list() {if (rls_list == null) rls_list = ListAdp_.new_(); return rls_list;} private ListAdp rls_list;
public List_adp Rls_list() {if (rls_list == null) rls_list = List_adp_.new_(); return rls_list;} private List_adp rls_list;
public Xow_file_mgr File_mgr() {return file_mgr;} private Xow_file_mgr file_mgr;
public Xow_cfg_wiki_core Cfg_wiki_core() {return cfg_wiki_core;} private Xow_cfg_wiki_core cfg_wiki_core;
@@ -150,7 +150,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
public Xow_wiki_props Props() {return props;} private Xow_wiki_props props = new Xow_wiki_props();
public Xou_history_cfg Cfg_history() {return cfg_history;} private Xou_history_cfg cfg_history = new Xou_history_cfg();
public Xoh_cfg_gallery Cfg_gallery() {return cfg_gallery;} private Xoh_cfg_gallery cfg_gallery = new Xoh_cfg_gallery();
public Xoh_file_page Cfg_file_page() {return cfg_file_page;} private Xoh_file_page cfg_file_page = new Xoh_file_page();
public Xoh_file_page_wtr Cfg_file_page() {return cfg_file_page;} private Xoh_file_page_wtr cfg_file_page = new Xoh_file_page_wtr();
public Xow_sys_cfg Sys_cfg() {return sys_cfg;} private Xow_sys_cfg sys_cfg;
public Xowc_parser Cfg_parser() {return cfg_parser;} private Xowc_parser cfg_parser;
public boolean Cfg_parser_lnki_xwiki_repos_enabled() {return cfg_parser_lnki_xwiki_repos_enabled;} public Xowe_wiki Cfg_parser_lnki_xwiki_repos_enabled_(boolean v) {cfg_parser_lnki_xwiki_repos_enabled = v; return this;} private boolean cfg_parser_lnki_xwiki_repos_enabled;
@@ -160,23 +160,34 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
file_mgr.Meta_mgr().Clear();
db_mgr.Load_mgr().Clear();
}
public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl) {return GetPageByTtl(url, ttl, lang, app.Gui_mgr().Browser_win().Active_tab(), true);}
public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl, Xog_tab_itm tab) {return GetPageByTtl(url, ttl, lang, tab, true);}
public Xoae_page GetPageByTtl(Xoa_url url, Xoa_ttl ttl, Xol_lang lang, Xog_tab_itm tab, boolean parse_page) {
if (init_needed) Init_wiki(app.User());
public Xoae_page Load_page_by_ttl(Xoa_url url, Xoa_ttl ttl) {return Load_page_by_ttl(url, ttl, lang, app.Gui_mgr().Browser_win().Active_tab(), true);}
public Xoae_page Load_page_by_ttl(Xoa_url url, Xoa_ttl ttl, Xog_tab_itm tab) {return Load_page_by_ttl(url, ttl, lang, tab, true);}
public Xoae_page Load_page_by_ttl(Xoa_url url, Xoa_ttl ttl, Xol_lang lang, Xog_tab_itm tab, boolean parse_page) {
if (init_needed) Init_wiki(app.Usere());
Xoae_page page = Xoae_page.new_(this, ttl); page.Tab_data().Tab_(tab);
data_mgr.Get_page(page, url, ttl, false, false); // get page from data_mgr
if (page.Missing()) { // page doesn't exist
if (ttl.Ns().Id_file()) {
Xowe_wiki commons_wiki = app.Wiki_mgr().Get_by_key_or_null(commons_wiki_key);
if (commons_wiki != null
&& !Bry_.Eq(domain_bry, commons_wiki.Domain_bry())) // if file, check commons wiki; note that !Bry_.Eq is recursion guard
return commons_wiki.GetPageByTtl(url, ttl, this.lang, tab, true);
if (commons_wiki != null) { // commons exists
if (!Bry_.Eq(domain_bry, commons_wiki.Domain_bry())) { // !Bry_.Eq is recursion guard
Xoae_page rv = commons_wiki.Load_page_by_ttl(url, ttl, this.lang, tab, true);
if (rv.Exists()) {
rv.Commons_mgr().Source_wiki_(this);
return rv;
}
else {
page.Missing_(false);
page.Commons_mgr().Xowa_mockup_(true);
return page;
}
}
}
}
else
return page.Missing_();
}
if (page.Missing()) return page; // NOTE: commons can return null page
if (page.Missing()) return page; // NOTE: commons can return null page
page.Tab_data().Tab_(tab);
page.Lang_(lang);
if (parse_page)
@@ -185,7 +196,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
}
public void ParsePage_root(Xoae_page page, boolean clear) {ParsePage(page, clear);}
public void ParsePage(Xoae_page page, boolean clear) {
if (init_needed && !Env_.Mode_testing()) Init_wiki(app.User());
if (init_needed && !Env_.Mode_testing()) Init_wiki(app.Usere());
gplx.xowa.xtns.scribunto.Scrib_core.Core_page_changed(page); // notify scribunto about page changed
ctx.Cur_page_(page);
Xop_root_tkn root = ctx.Tkn_mkr().Root(page.Data_raw());
@@ -197,7 +208,8 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
root.Data_htm_(root.Root_src());
}
public Xodb_mgr_sql Db_mgr_create_as_sql() {Xodb_mgr_sql rv = new Xodb_mgr_sql(this); db_mgr = rv; return rv;}
public Xowe_wiki Init_assert() {if (init_needed) Init_wiki(app.User()); return this;}
public void Init_by_wiki() {Init_assert();}
public Xowe_wiki Init_assert() {if (init_needed) Init_wiki(app.Usere()); return this;}
private boolean init_in_process = false;
public void Init_db_mgr() {
Io_url core_db_url = gplx.xowa.wikis.Xow_fsys_mgr.Find_core_fil(this);
@@ -210,7 +222,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
file_mgr.Init_file_mgr_by_load(this);
}
}
private void Init_wiki(Xou_user user) { // NOTE: (a) one-time initialization for all wikis; (b) not called by tests
private void Init_wiki(Xoue_user user) { // NOTE: (a) one-time initialization for all wikis; (b) not called by tests
if (init_in_process) {
app.Usr_dlg().Log_many("", "", "wiki.init: circular call canceled: ~{0}", domain_str);
return; // NOTE: may be called multiple times due to "if (app.Stage() == Xoa_stage_.Tid_launch) init_needed = false;"; TODO: call this only once; DATE:2014-06-07
@@ -228,7 +240,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
gplx.xowa.utls.upgrades.Xoa_upgrade_mgr.Check(this);
// init ns_mgr
if (lang.Init_by_load()) {
if (domain_tid == Xow_domain_.Tid_int_wikipedia) // NOTE: if type is wikipedia, add "Wikipedia" as an alias; PAGE:en.w:pt.wikipedia.org/wiki/Página principal which redirects to Wikipedia:Página principal
if (domain_tid == Xow_domain_type_.Tid_wikipedia) // NOTE: if type is wikipedia, add "Wikipedia" as an alias; PAGE:en.w:pt.wikipedia.org/wiki/Página principal which redirects to Wikipedia:Página principal
ns_mgr.Aliases_add(Xow_ns_.Id_project, Xow_ns_.Ns_name_wikipedia);
}
app.Gfs_mgr().Run_url_for(this, app.Fsys_mgr().Cfg_wiki_core_dir().GenSubFil(domain_str + ".gfs")); // NOTE: must be run after lang.Init_by_load b/c lang will reload ns_mgr; DATE:2015-04-17run cfg for wiki by user ; EX: /xowa/user/anonymous/wiki/en.wikipedia.org/cfg/user_wiki.gfs
@@ -244,8 +256,8 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
app.Html__css_installer().Install(this, Xowd_css_core_mgr.Key_default);
Html__hdump_enabled_(html_mgr__hdump_enabled);
html_mgr.Init_by_wiki(this);
this.Copy_cfg(app.User().Wiki());
File_repos_assert(app, this);
this.Copy_cfg(app.Usere().Wiki());
Xow_repo_mgr_.Assert_repos(app, this);
xtn_mgr.Init_by_wiki(this);
log_bfr.Add("wiki.init.end");
app.Log_wtr().Log_to_session_direct(log_bfr.Xto_str());
@@ -264,7 +276,7 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
if (rls_list == null) return;
int len = rls_list.Count();
for (int i = 0; i < len; i++) {
RlsAble rls = (RlsAble)rls_list.FetchAt(i);
RlsAble rls = (RlsAble)rls_list.Get_at(i);
rls.Rls();
}
}
@@ -314,34 +326,14 @@ public class Xowe_wiki implements Xow_wiki, GfoInvkAble {
Invk_db_mgr = "db_mgr" // SERIALIZED:000.sqlite3|xowa_cfg
;
public static final String Invk_lang_ = "lang_";
private static void File_repos_assert(Xoae_app app, Xowe_wiki wiki) {
byte[] wiki_key = wiki.Domain_bry();
Xoa_repo_mgr repo_mgr = app.File_mgr().Repo_mgr();
Xof_repo_itm repo_itm = repo_mgr.Get_by(wiki_key);
Xoa_fsys_mgr app_fsys_mgr = app.Fsys_mgr();
Xof_rule_mgr ext_rule_mgr = app.File_mgr().Ext_rules();
if (repo_itm == null) {
repo_itm = new Xof_repo_itm(wiki_key, app_fsys_mgr, ext_rule_mgr).Wiki_key_(wiki_key);
repo_mgr.Add(repo_itm);
}
Xowe_repo_mgr pair_mgr = wiki.File_mgr().Repo_mgr();
if (pair_mgr.Repos_len() == 0) {
Xof_repo_itm repo_src = repo_mgr.Get_by(File_repo_xowa_null);
if (repo_src == null) {
repo_itm = new Xof_repo_itm(File_repo_xowa_null, app_fsys_mgr, ext_rule_mgr).Wiki_key_(Xow_domain_.Tid_bry_home);
repo_mgr.Add(repo_itm);
}
pair_mgr.Add_repo(File_repo_xowa_null, wiki_key);
}
} static byte[] File_repo_xowa_null = Bry_.new_ascii_("xowa_repo_null");
private static int Xwiki_tid(int tid) {
switch (tid) {
case Xow_domain_.Tid_int_commons:
case Xow_domain_.Tid_int_species:
case Xow_domain_.Tid_int_incubator:
case Xow_domain_.Tid_int_mediawiki:
case Xow_domain_.Tid_int_wikimediafoundation:
case Xow_domain_.Tid_int_home: return Xow_domain_.Tid_int_wikipedia; // set xwiki_tid to wikipedia; allows [[da:Page]] to point to da.wikipedia.org; PAGE:species:Puccinia; DATE:2014-09-14
case Xow_domain_type_.Tid_commons:
case Xow_domain_type_.Tid_species:
case Xow_domain_type_.Tid_incubator:
case Xow_domain_type_.Tid_mediawiki:
case Xow_domain_type_.Tid_wmforg:
case Xow_domain_type_.Tid_home: return Xow_domain_type_.Tid_wikipedia; // set xwiki_tid to wikipedia; allows [[da:Page]] to point to da.wikipedia.org; PAGE:species:Puccinia; DATE:2014-09-14
default: return tid;
}
}