"
));
}
+ @Test public void Redlink() {
+ fxt .Init_data_redlink(2, 1, 2);
+ fxt .Init_body(String_.Concat_lines_nl_skip_last
+ ( "
A"
+ , "
B"
+ , "
C"
+ ))
+ .Test_html(String_.Concat_lines_nl_skip_last
+ ( "
A"
+ , "
B"
+ , "
C"
+ ));
+ }
}
class Hdump_html_mgr_fxt {
private Hdump_html_mgr html_mgr;
@@ -101,8 +114,29 @@ class Hdump_html_mgr_fxt {
public void Clear_imgs() {img_list.Clear();}
public Hdump_html_mgr_fxt Init_body(String body) {hpg.Page_body_(Bry_.new_utf8_(body)); return this;}
public Hdump_html_mgr_fxt Init_data_gly(int uid, int box_max) {hpg.Gly_itms().Add(uid, new Hdump_data_gallery(uid, box_max)); return this;}
- public Hdump_html_mgr_fxt Init_data_img_basic(int uid, int w, int h, String ttl, String src) {img_list.Add(new Hdump_data_img__basic().Init_by_base(uid, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;}
- public Hdump_html_mgr_fxt Init_data_img_gly(int uid, int w, int h, String ttl, String src, int box_w, int img_w, int img_pad) {img_list.Add(new Hdump_data_img__gallery().Init_by_gallery(box_w, img_w, img_pad).Init_by_base(uid, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;}
+ public Hdump_html_mgr_fxt Init_data_img_basic(String ttl, int html_uid, int html_w, int html_h) {
+ Hdump_data_img__basic img = new Hdump_data_img__basic();
+ img.Init_by_base(Bry_.new_utf8_(ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null);
+ img_list.Add(img);
+ return this;
+ }
+ public Hdump_html_mgr_fxt Init_data_img_gly(String ttl, int html_uid, int html_w, int html_h, int box_w, int img_w, int img_pad) {
+ Hdump_data_img__gallery img = new Hdump_data_img__gallery();
+ img.Init_by_gallery(box_w, img_w, img_pad);
+ img.Init_by_base(Bry_.new_utf8_(ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null);
+ img_list.Add(img);
+ return this;
+ }
+ public Hdump_html_mgr_fxt Init_data_redlink(int max, int... uids) {
+ int[] ary = new int[max + ListAdp_.Base1];
+ int uids_len = uids.length;
+ for (int i = 0; i < uids_len; ++i) {
+ int uid = uids[i];
+ ary[uid] = 1;
+ }
+ hpg.Redlink_uids_(ary);
+ return this;
+ }
public Hdump_html_mgr_fxt Test_html(String expd) {
if (img_list.Count() > 0) hpg.Img_itms_((Hdump_data_img__base[])img_list.XtoAryAndClear(Hdump_data_img__base.class));
html_mgr.Write(bfr, wiki, hpg);
diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java
index 7154f34eb..543d25e22 100644
--- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java
+++ b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr.java
@@ -55,16 +55,22 @@ public class Hdump_load_mgr {
}
private void Load_data_img() {
int tid = rdr.Read_int_to_pipe();
- int uid = rdr.Read_int_to_pipe();
- int w = rdr.Read_int_to_pipe();
- int h = rdr.Read_int_to_pipe();
- byte[] ttl = rdr.Read_bry_to_pipe();
- byte[] src = rdr.Read_bry_to_pipe();
+ byte[] lnki_ttl = rdr.Read_bry_to_pipe();
+ int html_uid = rdr.Read_int_to_pipe();
+ int html_w = rdr.Read_int_to_pipe();
+ int html_h = rdr.Read_int_to_pipe();
+ int file_repo_id = rdr.Read_int_to_pipe();
+ int file_ext_id = rdr.Read_int_to_pipe();
+ boolean file_is_orig = rdr.Read_yn_to_pipe();
+ int file_w = rdr.Read_int_to_pipe();
+ double file_time = rdr.Read_double_to_pipe();
+ int file_page = rdr.Read_int_to_pipe();
Hdump_data_img__base img_itm = null;
switch (tid) {
- case Hdump_data_img__base.Tid_basic : img_itm = new Hdump_data_img__basic().Init_by_base(uid, w, h, ttl, src); break;
- case Hdump_data_img__base.Tid_gallery : img_itm = new Hdump_data_img__gallery().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()).Init_by_base(uid, w, h, ttl, src); break;
+ case Hdump_data_img__base.Tid_basic : img_itm = new Hdump_data_img__basic(); break;
+ case Hdump_data_img__base.Tid_gallery : img_itm = new Hdump_data_img__gallery().Init_by_gallery(rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe(), rdr.Read_int_to_pipe()); break;
}
+ img_itm.Init_by_base(lnki_ttl, html_uid, html_w, html_h, file_repo_id, file_ext_id, file_is_orig, file_w, file_time, file_page);
rdr.Pos_add_one();
img_itms.Add(img_itm);
}
diff --git a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java
index 7daa56f8e..849f5e0b9 100644
--- a/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java
+++ b/400_xowa/src/gplx/xowa/hdumps/loads/Hdump_load_mgr_tst.java
@@ -34,11 +34,11 @@ public class Hdump_load_mgr_tst {
}
@Test public void Img() {
fxt.Init_row_img
- ( fxt.Make_img(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png")
- , fxt.Make_img(1, 200, 100, "B.png", "commons.wikimedia.org/thumb/7/0/B.png/200.png")
+ ( fxt.Make_img("A.png", 0, 220, 110)
+ , fxt.Make_img("B.png", 1, 200, 100)
);
- fxt.Expd_img(0, 220, 110, "A.png", "commons.wikimedia.org/thumb/7/0/A.png/220.png");
- fxt.Expd_img(1, 200, 100, "B.png", "commons.wikimedia.org/thumb/7/0/B.png/200.png");
+ fxt.Expd_img(fxt.Make_img("A.png", 0, 220, 110));
+ fxt.Expd_img(fxt.Make_img("B.png", 1, 200, 100));
fxt.Test_load(0);
}
}
@@ -57,7 +57,9 @@ class Hdump_load_mgr_fxt {
expd_imgs.Clear();
page_url = Xoa_url.new_(Bry_.new_ascii_("enwiki"), Bry_.new_ascii_("Page_1"));
}
- public Hdump_data_img__base Make_img(int uid, int img_w, int img_h, String lnki_ttl, String img_src_rel) {return new Hdump_data_img__basic().Init_by_base(uid, img_w, img_h, Bry_.new_utf8_(lnki_ttl), Bry_.new_utf8_(img_src_rel));}
+ public Hdump_data_img__base Make_img(String lnki_ttl, int html_uid, int html_w, int html_h) {
+ return new Hdump_data_img__basic().Init_by_base(Bry_.new_utf8_(lnki_ttl), html_uid, html_w, html_h, Hdump_data_img__base.File_repo_id_commons, Xof_ext_.Id_png, Bool_.N, html_w, Xof_doc_thumb.Null, Xof_doc_page.Null);
+ }
public void Init_row_img(Hdump_data_img__base... itms) {
ListAdp tmp_list = ListAdp_.new_();
Bry_bfr bfr = Bry_bfr.new_(255);
@@ -83,7 +85,7 @@ class Hdump_load_mgr_fxt {
public Hdump_load_mgr_fxt Expd_display_ttl(String v) {this.expd_display_ttl = v; return this;}
public Hdump_load_mgr_fxt Expd_content_sub(String v) {this.expd_content_sub = v; return this;}
public Hdump_load_mgr_fxt Expd_sidebar_div(String v) {this.expd_sidebar_div = v; return this;}
- public Hdump_load_mgr_fxt Expd_img(int idx, int w, int h, String ttl, String src) {expd_imgs.Add(new Hdump_data_img__basic().Init_by_base(idx, w, h, Bry_.new_utf8_(ttl), Bry_.new_utf8_(src))); return this;}
+ public Hdump_load_mgr_fxt Expd_img(Hdump_data_img__base img) {expd_imgs.Add(img); return this;}
public Hdump_load_mgr_fxt Test_load(int page_id) {
load_mgr.Load_rows(hpg, page_id, page_url, init_rows);
if (expd_body != null) Tfds.Eq(expd_body, String_.new_utf8_(hpg.Page_body()));
diff --git a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java b/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java
index fd1248f32..9039c67d8 100644
--- a/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java
+++ b/400_xowa/src/gplx/xowa/hdumps/pages/Xopg_hdump_data.java
@@ -18,15 +18,13 @@ along with this program. If not, see
.
package gplx.xowa.hdumps.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.hdumps.*;
import gplx.xowa.hdumps.core.*; import gplx.xowa.files.*;
public class Xopg_hdump_data {
- private final int file_dir_bry_len;
- public Xopg_hdump_data(Xoa_app app) {file_dir_bry_len = app.Fsys_mgr().File_dir_bry_len();}
+ public Xopg_redlink_mgr Redlink_mgr() {return redlink_mgr;} private Xopg_redlink_mgr redlink_mgr = new Xopg_redlink_mgr();
public int Data_count_imgs() {return data_count_imgs;} public void Data_count_imgs_(int v) {data_count_imgs = v;} private int data_count_imgs;
public ListAdp Data() {return data;} private final ListAdp data = ListAdp_.new_();
public void Data_add(Hdump_data_itm itm) {data.Add(itm);}
public void Data_add_img(Hdump_data_img__base img, Xof_xfer_itm xfer_itm, int tid) {
- byte[] img_src = xfer_itm.Html_view_src();
- img_src = Bry_.Len_eq_0(img_src) ? Bry_.Empty : Bry_.Mid(img_src, file_dir_bry_len);
- img.Init_by_base(xfer_itm.Html_uid(), xfer_itm.Html_w(), xfer_itm.Html_h(), xfer_itm.Lnki_ttl(), img_src);
+ img.Init_by_base(xfer_itm.Lnki_ttl(), xfer_itm.Html_uid(), xfer_itm.Html_w(), xfer_itm.Html_h()
+ , xfer_itm.Trg_repo_idx(), xfer_itm.Lnki_ext().Id(), xfer_itm.Img_is_orig(), xfer_itm.File_w(), xfer_itm.Lnki_thumbtime(), xfer_itm.Lnki_page());
data.Add(img);
++data_count_imgs;
}
@@ -35,5 +33,6 @@ public class Xopg_hdump_data {
data_count_imgs = 0;
data.Clear();
body = null;
+ redlink_mgr.Clear();
}
}
diff --git a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java
index a8ee42e5e..8e25b321d 100644
--- a/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java
+++ b/400_xowa/src/gplx/xowa/hdumps/saves/Hdump_save_mgr.java
@@ -19,23 +19,27 @@ package gplx.xowa.hdumps.saves; import gplx.*; import gplx.xowa.*; import gplx.x
import gplx.dbs.*; import gplx.xowa.files.*; import gplx.xowa.hdumps.dbs.*;
import gplx.xowa.hdumps.core.*; import gplx.xowa.hdumps.pages.*; import gplx.xowa.pages.*; import gplx.xowa.pages.skins.*; import gplx.xowa.hdumps.loads.*;
public class Hdump_save_mgr {
- private Bry_bfr tmp_bfr = Bry_bfr.reset_(10 * Io_mgr.Len_mb);
- private Hdump_text_tbl text_tbl;
- public void Tbl_(Hdump_text_tbl v) {text_tbl = v;}
+ private Bry_bfr tmp_bfr = Bry_bfr.reset_(10 * Io_mgr.Len_mb);
+ public Hdump_text_tbl Tbl() {return text_tbl;} public void Tbl_(Hdump_text_tbl v) {text_tbl = v;} private Hdump_text_tbl text_tbl;
public void Update(Xoa_page page) {
int page_id = page.Revision_data().Id();
text_tbl.Delete_by_page(page_id);
this.Insert(page);
}
public void Insert(Xoa_page page) {
- Hdump_page_body_srl.Save(tmp_bfr, page);
int page_id = page.Revision_data().Id();
- text_tbl.Insert(page_id, Hdump_text_row_tid.Tid_body, tmp_bfr.XtoAryAndClear());
- byte[] redlinks_bry = Write_redlinks(tmp_bfr, page.Html_data().Redlink_mgr());
+ Insert_body(page, page_id);
+ byte[] redlinks_bry = Write_redlinks(tmp_bfr, page.Hdump_data().Redlink_mgr());
if (redlinks_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_redlink, redlinks_bry);
byte[] imgs_bry = Write_imgs(tmp_bfr, page.Hdump_data().Data());
if (imgs_bry != null) text_tbl.Insert(page_id, Hdump_data_tid.Tid_img, imgs_bry);
}
+ public int Insert_body(Xoa_page page, int page_id) {
+ Hdump_page_body_srl.Save(tmp_bfr, page);
+ byte[] body_bry = tmp_bfr.XtoAryAndClear();
+ text_tbl.Insert(page_id, Hdump_text_row_tid.Tid_body, body_bry);
+ return body_bry.length;
+ }
public static byte[] Write_imgs(Bry_bfr bfr, ListAdp imgs) {
int len = imgs.Count(); if (len == 0) return null; // no images; exit early, else will write blank String
for (int i = 0; i < len; ++i) {
@@ -44,9 +48,9 @@ public class Hdump_save_mgr {
}
return bfr.XtoAryAndClear();
}
- private static byte[] Write_redlinks(Bry_bfr bfr, Int_list redlink_mgr) {
+ public static byte[] Write_redlinks(Bry_bfr bfr, Xopg_redlink_mgr redlink_mgr) {
int len = redlink_mgr.Len(); if (len == 0) return null;
- bfr.Add_int_variable(len);
+ bfr.Add_int_variable(redlink_mgr.Max());
for (int i = 0; i < len; ++i) {
bfr.Add_byte_pipe().Add_int_variable(redlink_mgr.Get_at(i));
}
diff --git a/400_xowa/src/gplx/xowa/html/Xoh_cfg_file.java b/400_xowa/src/gplx/xowa/html/Xoh_cfg_file.java
new file mode 100644
index 000000000..c727a1324
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/html/Xoh_cfg_file.java
@@ -0,0 +1,29 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see
.
+*/
+package gplx.xowa.html; import gplx.*; import gplx.xowa.*;
+public class Xoh_cfg_file {
+ public Xoh_cfg_file(Url_encoder url_encoder, Io_url xowa_dir) {
+ Io_url mw_file_dir = xowa_dir.GenSubDir_nest("file", "mw.file");
+ img_media_play_btn = url_encoder.Encode_http(mw_file_dir.GenSubFil("play.png"));
+ img_media_info_btn = url_encoder.Encode_http(mw_file_dir.GenSubFil("info.png"));
+ img_thumb_magnify = url_encoder.Encode_http(mw_file_dir.GenSubFil("magnify-clip.png"));
+ }
+ public byte[] Img_media_play_btn() {return img_media_play_btn;} private final byte[] img_media_play_btn;
+ public byte[] Img_media_info_btn() {return img_media_info_btn;} private final byte[] img_media_info_btn;
+ public byte[] Img_thumb_magnify() {return img_thumb_magnify;} private final byte[] img_thumb_magnify;
+}
diff --git a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java
index a0c2578ce..69098c938 100644
--- a/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java
+++ b/400_xowa/src/gplx/xowa/html/lnkis/Xoh_lnki_wtr.java
@@ -41,16 +41,20 @@ 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();
- Xow_xwiki_itm lang = lnki_ttl == null ? null : lnki_ttl.Wik_itm();
- if (lang != null && lang.Type_is_lang(wiki.Lang().Lang_id()) && !lnki_ttl.ForceLiteralLink()) {
- page.Xwiki_langs().Add(lnki_ttl);
- return;
- }
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().Xto_full_str(), String_.new_utf8_(src, lnki.Src_bgn(), lnki.Src_end()));
Xoh_html_wtr_escaper.Escape(app, bfr, src, lnki.Src_bgn(), lnki.Src_end(), true, false);
return;
}
+ Xow_xwiki_itm xwiki_lang = lnki_ttl.Wik_itm();
+ if ( xwiki_lang != null // lnki is xwiki; EX: [[commons:]] [[en:]] [[wikt:]]
+ && xwiki_lang.Wiki_tid() == wiki.Xwiki_domain_tid() // xwiki is same type as cur wiki; EX: cur=w xwiki=w -> add to xwiki_langs; cur=w xwikid=d -> don't add to xwiki_langs; DATE:2014-09-14
+ && xwiki_lang.Type_is_xwiki_lang(wiki.Domain_itm().Lang_orig_id()) // NOTE: use Lang_orig_id to handle xwikis between s.w and en.w; PAGE:s.q:Anonymous DATE:2014-09-10
+ && !lnki_ttl.ForceLiteralLink() // not literal; [[:en:A]]
+ ) {
+ page.Xwiki_langs().Add(lnki_ttl);
+ return;
+ }
boolean literal_link = lnki_ttl.ForceLiteralLink(); // NOTE: if literal link, then override ns behavior; for File, do not show image; for Ctg, do not display at bottom of page
redlinks_mgr.Lnki_add(lnki);
boolean stage_is_alt = hctx.Mode_is_alt();
@@ -102,10 +106,17 @@ public class Xoh_lnki_wtr {
if (cfg.Lnki_title())
bfr .Add(Xoh_consts.A_bgn_lnki_0) // '" title=\"'
.Add(lnki_ttl.Page_txt()); // 'Abcd' NOTE: use Page_txt to (a) replace underscores with spaces; (b) get title casing; EX:[[roman_empire]] -> Roman empire
- if (cfg.Lnki_visited()
- && history_mgr.Has(wiki.Domain_bry(), ttl_bry))
- bfr.Add(Bry_xowa_visited); // '" class="xowa-visited'
- bfr.Add(Xoh_consts.__end_quote); // '">'
+ if (hctx.Mode_is_hdump()) {
+ bfr.Add(gplx.xowa.hdumps.htmls.Hdump_html_consts.Html_redlink_bgn);
+ bfr.Add_int_variable(lnki.Html_id());
+ bfr.Add(gplx.xowa.hdumps.htmls.Hdump_html_consts.Html_redlink_end);
+ }
+ else {
+ if (cfg.Lnki_visited()
+ && history_mgr.Has(wiki.Domain_bry(), ttl_bry))
+ bfr.Add(Bry_xowa_visited); // '" class="xowa-visited'
+ bfr.Add(Xoh_consts.__end_quote); // '">'
+ }
if (lnki_ttl.Anch_bgn() != -1 && !lnki_ttl.Ns().Id_main()) { // anchor exists and not main_ns; anchor must be manually added b/c Xoa_ttl does not handle # for non main-ns
byte[] anch_txt = lnki_ttl.Anch_txt();
byte anch_spr
diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java
index 655586bda..274183373 100644
--- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java
+++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java
@@ -33,8 +33,9 @@ public class Xoh_module_itm__popups implements Xoh_module_itm {
public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {}
public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {
if (!enabled) return;
+ wtr.Write_js_line(Jquery_init); // NOTE: must assert that jquery is init'd, else popup.js will not compile after going back / forward; DATE:2014-09-10
wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "xowa.popups", "xowa.popups.js"));
- }
+ } private static final byte[] Jquery_init = Bry_.new_utf8_("xowa.js.jquery.init();");
public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {
if (!enabled) return;
Xoapi_popups api_popups = app.Api_root().Html().Modules().Popups();
diff --git a/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy_tst.java b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy_tst.java
new file mode 100644
index 000000000..a55cd1dba
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/html/tidy/Xoh_tidy_wkr_jtidy_tst.java
@@ -0,0 +1,53 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see
.
+*/
+package gplx.xowa.html.tidy; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import org.w3c.tidy.Tidy;
+import org.junit.*;
+public class Xoh_tidy_wkr_jtidy_tst {
+ @Before public void init() {fxt.Clear();} private Jtidy_fxt fxt = new Jtidy_fxt();
+ @Test public void Image_full() {
+ fxt.Test_tidy("
𐎍𐎁_𐎜", "
ðð_ð\r\n");
+ }
+}
+class Jtidy_fxt {
+ public void Clear() {
+ }
+ public void Test_tidy(String raw, String expd) {
+ Tidy tidy = new Tidy();
+ tidy.setPrintBodyOnly(true);
+ tidy.setWraplen(0);
+ tidy.setQuiet(true);
+ tidy.setShowWarnings(false);
+ tidy.setShowErrors(0);
+ ByteArrayInputStream rdr = null;
+ try {
+ rdr = new ByteArrayInputStream(raw.getBytes("UTF-8"));
+ } catch (Exception e) {}
+ ByteArrayOutputStream wtr = new ByteArrayOutputStream();
+ tidy.parse(rdr, wtr);
+ String actl = wtr.toString();
+ Test_mgr.Eq_str(expd, actl);
+ }
+}
+class Test_mgr {
+ public static void Eq_str(String expd, String actl) {
+ if (!expd.equals(actl)) throw new RuntimeException(String.format("expd != actl; expd:%s actl:%s", expd, actl));
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/pages/Xopg_html_data.java b/400_xowa/src/gplx/xowa/pages/Xopg_html_data.java
index 9e4ae0b8d..fe3b0c0d1 100644
--- a/400_xowa/src/gplx/xowa/pages/Xopg_html_data.java
+++ b/400_xowa/src/gplx/xowa/pages/Xopg_html_data.java
@@ -48,7 +48,6 @@ public class Xopg_html_data {
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 Xoh_module_mgr Module_mgr() {return module_mgr;} private Xoh_module_mgr module_mgr = new Xoh_module_mgr();
- public Int_list Redlink_mgr() {return redlink_mgr;} private Int_list redlink_mgr = new Int_list();
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_name() {return custom_name;} public Xopg_html_data Custom_name_(byte[] v) {custom_name = v; return this;} private byte[] custom_name;
public byte[] Custom_head_end() {return custom_head_end;}
@@ -77,7 +76,6 @@ public class Xopg_html_data {
xtn_search_txt = Bry_.Empty;
xtn_scribunto_dbg = Bry_.Empty;
module_mgr.Clear();
- redlink_mgr.Clear();
custom_html = custom_html_end = custom_head_end = custom_name = null;
if (ctg_hash != null) ctg_hash.Clear();
}
diff --git a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java
index 9abb2905d..ffcd6c761 100644
--- a/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java
+++ b/400_xowa/src/gplx/xowa/parsers/lnkis/redlinks/Xop_lnki_logger_redlinks_wkr.java
@@ -17,7 +17,7 @@ along with this program. If not, see
.
*/
package gplx.xowa.parsers.lnkis.redlinks; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.*;
import gplx.xowa.dbs.tbls.*;
-import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*;
+import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.pages.*; import gplx.xowa.hdumps.core.*;
public class Xop_lnki_logger_redlinks_wkr implements GfoInvkAble {
private Xow_wiki wiki; private Xog_win_itm win; private Xoa_page page;
private ListAdp lnki_list; private boolean log_enabled; private Gfo_usr_dlg usr_dlg;
@@ -72,7 +72,7 @@ public class Xop_lnki_logger_redlinks_wkr implements GfoInvkAble {
Bry_bfr bfr = null;
boolean variants_enabled = wiki.Lang().Vnt_mgr().Enabled();
Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
- Int_list redlink_mgr = page.Html_data().Redlink_mgr();
+ Xopg_redlink_mgr redlink_mgr = page.Hdump_data().Redlink_mgr();
for (int j = 0; j < len; j++) {
Xop_lnki_tkn lnki = (Xop_lnki_tkn)work_list.FetchAt(j);
byte[] full_db = lnki.Ttl().Full_db();
@@ -109,3 +109,15 @@ public class Xop_lnki_logger_redlinks_wkr implements GfoInvkAble {
public static final Xop_lnki_logger_redlinks_wkr Null = new Xop_lnki_logger_redlinks_wkr(); Xop_lnki_logger_redlinks_wkr() {}
private static final int Batch_size = 32;
}
+class Xog_redlink_wkr {
+ public static void Redlink(Xog_html_itm html_itm, Int_list list) {
+ int len = list.Len();
+ for (int i = 0; i < len; ++i) {
+ int uid = list.Get_at(i);
+ Redlink(html_itm, uid);
+ }
+ }
+ public static void Redlink(Xog_html_itm html_itm, int uid) {
+ gplx.xowa.files.gui.Js_img_mgr.Update_link_missing(html_itm, Xop_lnki_logger_redlinks_mgr.Lnki_id_prefix + Int_.Xto_str(uid));
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java
index ee50ca53f..d7e80d959 100644
--- a/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java
+++ b/400_xowa/src/gplx/xowa/setup/maints/Wmf_dump_list_parser_tst.java
@@ -41,65 +41,65 @@ public class Wmf_dump_list_parser_tst {
, fxt.itm("zh-classicalwiki", "20131128", Wmf_dump_itm.Status_tid_complete, "Dump complete", "2013-11-28 06:08:56")
);
}
-// @Test public void Update() { // 2014-07-06
-// Hash_adp_bry excluded_domains = Hash_adp_bry.cs_().Add_many_str
-// ( "advisory.wikipedia.org", "beta.wikiversity.org", "donate.wikipedia.org", "login.wikipedia.org"
-// , "nostalgia.wikipedia.org", "outreach.wikipedia.org", "quality.wikipedia.org", "sources.wikipedia.org"
-// , "strategy.wikipedia.org", "ten.wikipedia.org", "test2.wikipedia.org", "test.wikipedia.org"
-// , "usability.wikipedia.org", "vote.wikipedia.org");
-// Wmf_dump_itm[] itms = new Wmf_dump_list_parser().Parse(Io_mgr._.LoadFilBry("C:\\xowa\\bin\\any\\html\\xowa\\maint\\backup-index.html"));
-// Array_.Sort(itms);
-// Bry_bfr sql_bfr = Bry_bfr.new_();
-// Bry_bfr bld_bfr = Bry_bfr.new_();
-// int itms_len = itms.length;
-// int counter = 1;
-// for (int i = 0; i < itms_len; i++) {
-// Wmf_dump_itm itm = itms[i];
-// byte[] abrv = itm.Wiki_abrv();
-// if (Bry_.Eq(abrv, Bry_.new_ascii_("testwikidatawiki"))) continue;
-// byte[] domain_bry = Xob_bz2_file.Parse__domain_name(abrv, 0, abrv.length);
-// if (domain_bry == null) continue; // not a standard WMF wiki; ignore
-// if (Bry_finder.Find_fwd(domain_bry, Bry_.new_ascii_("wikimania")) != Bry_.NotFound) continue;
-// if (excluded_domains.Has(domain_bry)) continue;
-// Xow_wiki_domain domain_itm = Xow_wiki_domain_.parse_by_domain(domain_bry);
-// byte[] tid_name = Xto_display_name(Xow_wiki_domain_.Key_by_tid(domain_itm.Tid()));
-// sql_bfr
-// .Add_byte(Byte_ascii.Paren_bgn)
-// .Add_int_variable(counter++)
-// .Add_byte(Byte_ascii.Comma)
-// .Add_int_variable(1)
-// .Add_byte(Byte_ascii.Comma)
-// .Add_byte(Byte_ascii.Apos)
-// .Add(domain_itm.Lang_orig())
-// .Add_byte(Byte_ascii.Apos)
-// .Add_byte(Byte_ascii.Comma)
-// .Add_byte(Byte_ascii.Apos)
-// .Add(tid_name)
-// .Add_byte(Byte_ascii.Apos)
-// .Add_byte(Byte_ascii.Paren_end)
-// .Add_byte(Byte_ascii.Comma)
-// .Add_str("--" + String_.new_utf8_(abrv))
-// .Add_byte_nl()
-// ;
-// bld_bfr
-// .Add_byte(Byte_ascii.Comma)
-// .Add_byte(Byte_ascii.Space)
-// .Add_byte(Byte_ascii.Quote)
-// .Add(domain_bry)
-// .Add_byte(Byte_ascii.Quote)
-// .Add_byte_nl()
-// ;
-// }
-// Io_url temp = Io_url_.new_fil_("C:\\import_update.txt");
-// Io_mgr._.SaveFilBfr(temp, sql_bfr);
-//// Io_mgr._.AppendFilBfr(temp, bld_bfr);
-// }
-// private static byte[] Xto_display_name(byte[] v) {
-// if (Bry_.Eq(v, Xow_wiki_domain_.Key_wikimediafoundation_bry)) return Bry_.new_ascii_("Wikimedia Foundation");
-// else if (Bry_.Eq(v, Xow_wiki_domain_.Key_species_bry)) return Bry_.new_ascii_("Wikispecies");
-// else if (Bry_.Eq(v, Xow_wiki_domain_.Key_mediawiki_bry)) return Bry_.new_ascii_("MediaWiki");
-// else return Bry_.Add(Byte_ascii.Case_upper(v[0]), Bry_.Mid(v, 1, v.length));
-// }
+ @Test public void Update() { // 2014-07-06
+ Hash_adp_bry excluded_domains = Hash_adp_bry.cs_().Add_many_str
+ ( "advisory.wikipedia.org", "beta.wikiversity.org", "donate.wikipedia.org", "login.wikipedia.org"
+ , "nostalgia.wikipedia.org", "outreach.wikipedia.org", "quality.wikipedia.org", "sources.wikipedia.org"
+ , "strategy.wikipedia.org", "ten.wikipedia.org", "test2.wikipedia.org", "test.wikipedia.org"
+ , "usability.wikipedia.org", "vote.wikipedia.org");
+ Wmf_dump_itm[] itms = new Wmf_dump_list_parser().Parse(Io_mgr._.LoadFilBry("C:\\xowa\\bin\\any\\html\\xowa\\maint\\backup-index.html"));
+ Array_.Sort(itms);
+ Bry_bfr sql_bfr = Bry_bfr.new_();
+ Bry_bfr bld_bfr = Bry_bfr.new_();
+ int itms_len = itms.length;
+ int counter = 1;
+ for (int i = 0; i < itms_len; i++) {
+ Wmf_dump_itm itm = itms[i];
+ byte[] abrv = itm.Wiki_abrv();
+ if (Bry_.Eq(abrv, Bry_.new_ascii_("testwikidatawiki"))) continue;
+ byte[] domain_bry = Xob_bz2_file.Parse__domain_name(abrv, 0, abrv.length);
+ if (domain_bry == null) continue; // not a standard WMF wiki; ignore
+ if (Bry_finder.Find_fwd(domain_bry, Bry_.new_ascii_("wikimania")) != Bry_.NotFound) continue;
+ if (excluded_domains.Has(domain_bry)) continue;
+ Xow_wiki_domain domain_itm = Xow_wiki_domain_.parse_by_domain(domain_bry);
+ byte[] tid_name = Xto_display_name(Xow_wiki_domain_.Key_by_tid(domain_itm.Tid()));
+ sql_bfr
+ .Add_byte(Byte_ascii.Paren_bgn)
+ .Add_int_variable(counter++)
+ .Add_byte(Byte_ascii.Comma)
+ .Add_int_variable(1)
+ .Add_byte(Byte_ascii.Comma)
+ .Add_byte(Byte_ascii.Apos)
+ .Add(domain_itm.Lang_orig())
+ .Add_byte(Byte_ascii.Apos)
+ .Add_byte(Byte_ascii.Comma)
+ .Add_byte(Byte_ascii.Apos)
+ .Add(tid_name)
+ .Add_byte(Byte_ascii.Apos)
+ .Add_byte(Byte_ascii.Paren_end)
+ .Add_byte(Byte_ascii.Comma)
+ .Add_str("--" + String_.new_utf8_(abrv))
+ .Add_byte_nl()
+ ;
+ bld_bfr
+ .Add_byte(Byte_ascii.Comma)
+ .Add_byte(Byte_ascii.Space)
+ .Add_byte(Byte_ascii.Quote)
+ .Add(domain_bry)
+ .Add_byte(Byte_ascii.Quote)
+ .Add_byte_nl()
+ ;
+ }
+ Io_url temp = Io_url_.new_fil_("C:\\import_update.txt");
+ Io_mgr._.SaveFilBfr(temp, sql_bfr);
+// Io_mgr._.AppendFilBfr(temp, bld_bfr);
+ }
+ private static byte[] Xto_display_name(byte[] v) {
+ if (Bry_.Eq(v, Xow_wiki_domain_.Key_wikimediafoundation_bry)) return Bry_.new_ascii_("Wikimedia Foundation");
+ else if (Bry_.Eq(v, Xow_wiki_domain_.Key_species_bry)) return Bry_.new_ascii_("Wikispecies");
+ else if (Bry_.Eq(v, Xow_wiki_domain_.Key_mediawiki_bry)) return Bry_.new_ascii_("MediaWiki");
+ else return Bry_.Add(Byte_ascii.Case_upper(v[0]), Bry_.Mid(v, 1, v.length));
+ }
}
class Wmf_dump_list_parser_fxt {
public void Clear() {}
diff --git a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java
index e84884a05..0b5a2dc3f 100644
--- a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java
+++ b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page.java
@@ -57,15 +57,11 @@ class Xop_statistics_stats_page_grp implements Bry_fmtr_arg {
, "
~{lbl_header_pages} | "
, " "
, "
"
- , " "
- , " ~{lbl_articles}"
- , " | "
+ , " ~{lbl_articles} | "
, " ~{page_count_main} | "
, "
"
, "
"
- , " ~{lbl_pages} "
- , " ~{lbl_pages_desc}"
- , " | "
+ , " ~{lbl_pages} ~{lbl_pages_desc} | "
, " ~{page_count_all} | "
, "
"
), "lbl_header_pages", "lbl_articles", "lbl_pages", "lbl_pages_desc", "page_count_main", "page_count_all");
diff --git a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page_tst.java b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page_tst.java
index 3907364cb..3a2b24c8e 100644
--- a/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page_tst.java
+++ b/400_xowa/src/gplx/xowa/specials/statistics/Xop_statistics_page_tst.java
@@ -27,15 +27,11 @@ public class Xop_statistics_page_tst {
, "
Page statistics | "
, " "
, "
"
- , " "
- , " Content pages"
- , " | "
+ , " Content pages | "
, " 0 | "
, "
"
, "
"
- , " Pages "
- , " All pages in the wiki, including talk pages, redirects, etc."
- , " | "
+ , " Pages All pages in the wiki, including talk pages, redirects, etc. | "
, " 0 | "
, "
"
, "
"
diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain.java b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain.java
index 563f88502..3815080c7 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain.java
@@ -17,10 +17,23 @@ along with this program. If not, see .
*/
package gplx.xowa.wikis; import gplx.*; import gplx.xowa.*;
public class Xow_wiki_domain {
- public Xow_wiki_domain(byte[] raw, byte tid, byte[] lang) {this.raw = raw; this.tid = tid; this.lang = this.lang_orig = lang;}
- public Xow_wiki_domain(byte[] raw, byte tid, byte[] lang, byte[] lang_orig) {this.raw = raw; this.tid = tid; this.lang = lang; this.lang_orig = lang_orig;}
+ public Xow_wiki_domain(byte[] raw, byte tid, byte[] lang) {
+ this.raw = raw; this.tid = tid; this.lang = this.lang_orig = lang;
+ Lang_orig_id_();
+ }
+ public Xow_wiki_domain(byte[] raw, byte tid, byte[] lang, byte[] lang_orig) {
+ this.raw = raw; this.tid = tid; this.lang = lang; this.lang_orig = lang_orig;
+ Lang_orig_id_();
+ }
public byte[] Raw() {return raw;} private byte[] raw;
public byte Tid() {return tid;} private byte tid;
public byte[] Lang_orig() {return lang_orig;} private byte[] lang_orig;
+ public int Lang_orig_id() {return lang_orig_id;} private int lang_orig_id;
public byte[] Lang() {return lang;} private byte[] lang;
+ private void Lang_orig_id_() {
+// if (Bry_.Eq(lang_orig, Commons_bry))
+// lang_orig_id = Xol_lang_itm_.Id_en;
+// else
+ lang_orig_id = Xol_lang_itm_.Get_by_key_or_intl(lang_orig, 0, lang_orig.length).Id();
+ } // private static final byte[] Commons_bry = Bry_.new_ascii_("commons");
}
diff --git a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain_.java b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain_.java
index d3d1d60c3..f1bb89177 100644
--- a/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain_.java
+++ b/400_xowa/src/gplx/xowa/wikis/Xow_wiki_domain_.java
@@ -23,6 +23,17 @@ public class Xow_wiki_domain_ {
Object o = key_hash.Get_by_bry(key);
return o == null ? Tid_by_key_null : ((Byte_obj_val)o).Val();
}
+ public static byte Xwiki_tid(byte tid) {
+ switch (tid) {
+ case Tid_commons:
+ case Tid_species:
+ case Tid_incubator:
+ case Tid_mediawiki:
+ case Tid_wikimediafoundation:
+ case Tid_home: return 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;
+ }
+ }
public static Xow_wiki_domain new_other_(byte[] raw) {return new Xow_wiki_domain(raw, Xow_wiki_domain_.Tid_other, Xol_lang_itm_.Key__unknown);}
public static Xow_wiki_domain parse_by_domain(byte[] raw) {
/*
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java
index b8547d80f..93521ca73 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java
@@ -21,14 +21,23 @@ public class Xow_xwiki_itm implements gplx.CompareAble {
this.key_bry = key_bry; this.key_str = String_.new_utf8_(key_bry);
this.fmt = fmt; this.wiki_tid = wiki_tid; this.lang_id = lang_id; this.domain = domain;
this.name = key_bry;
+ if (Bry_.Eq(domain, Xow_wiki_domain_.Url_commons))
+ domain_is_commons = true;
}
+ private boolean domain_is_commons;
public byte[] Key_bry() {return key_bry;} private byte[] key_bry;
public String Key_str() {return key_str;} private String key_str;
public byte[] Fmt() {return fmt;} private byte[] fmt;
public byte[] Domain() {return domain;} private byte[] domain;
public byte Wiki_tid() {return wiki_tid;} private byte wiki_tid;
public int Lang_id() {return lang_id;} private int lang_id;
- public boolean Type_is_lang(int cur_lang_id) {return lang_id != Xol_lang_itm_.Id__unknown && cur_lang_id != lang_id && Bry_.Len_gt_0(fmt);}
+ public boolean Type_is_xwiki_lang(int cur_lang_id) {
+ return lang_id != Xol_lang_itm_.Id__unknown // valid lang code
+ && !domain_is_commons // commons should never be considered an xwiki_lang; EX:[[commons:A]] PAGE:species:Scarabaeidae; DATE:2014-09-10
+ && lang_id != cur_lang_id // lang is different than current; EX: [[en:A]] in en.wikipedia.org shouldn't link back to self
+ && Bry_.Len_gt_0(fmt) // fmt exists
+ ;
+ }
public byte[] Name() {return name;} public Xow_xwiki_itm Name_(byte[] v) {name = v; return this;} private byte[] name;
public boolean Offline() {return offline;} public Xow_xwiki_itm Offline_(boolean v) {offline = v; return this;} private boolean offline;
public int compareTo(Object obj) {Xow_xwiki_itm comp = (Xow_xwiki_itm)obj; return Bry_.Compare(key_bry, comp.key_bry);}
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
index ead15da8f..6d9f4327f 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java
@@ -111,7 +111,6 @@ public class Xow_xwiki_mgr implements GfoInvkAble {
if (lang_key_bry == Xol_lang_itm_.Key__unknown) lang_key_bry = Xol_lang_.Key_en; // default non-lang wikis to english
String lang_key_str = String_.new_utf8_(lang_key_bry);
int lang_id = Xol_lang_itm_.Get_by_key(lang_key_bry).Id();
- byte wiki_tid = wiki.Domain_tid();
for (int i = 0; i < len; i++) {
Xoac_wiki_itm wiki_itm = (Xoac_wiki_itm)peers.FetchAt(i);
byte[] wiki_name_bry = wiki_itm.Key_bry();
@@ -136,7 +135,7 @@ public class Xow_xwiki_mgr implements GfoInvkAble {
for (int j = 0; j < aliases_len; j++) {
byte[] alias = wiki_itm.Aliases()[j];
if (wiki.Ns_mgr().Names_get_or_null(alias, 0, alias.length) != null) continue; // NOTE: do not add xwiki if alias matches namespace; EX: en.wiktionary.org has ns of "Wiktionary"; do not add alias of "wiktionary"; note that wikipedia does have an alias to wiktionary
- Xow_xwiki_itm xwiki = new Xow_xwiki_itm(alias, Bry_.new_utf8_(fmt), wiki_tid, lang_id, domain_bry).Offline_(offline_exists);
+ Xow_xwiki_itm xwiki = new Xow_xwiki_itm(alias, Bry_.new_utf8_(fmt), xwiki_tid_val, lang_id, domain_bry).Offline_(offline_exists); // NOTE: xwiki_tid_val must be used, not wiki.Domain_tid; DATE:2014-09-14
Add_itm(xwiki, null);
}
}
diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
index 61a8e6fd9..a88a9f7bb 100644
--- a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
+++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java
@@ -17,25 +17,27 @@ along with this program. If not, see .
*/
package gplx.xowa.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*;
import org.junit.*; import gplx.xowa.wikis.*; import gplx.xowa.langs.*;
-public class Xow_xwiki_mgr_tst {
- Xow_xwiki_mgr_fxt fxt = new Xow_xwiki_mgr_fxt();
- @Before public void init() {fxt.Clear();}
- @Test public void Add_bulk_wiki_en() {fxt.Tst_add_bulk("w|en.wikipedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_wikipedia , "w" , "http://en.wikipedia.org/wiki/~{0}", "en.wikipedia.org");}
- @Test public void Add_bulk_wiki_fr() {fxt.Tst_add_bulk("fr|fr.wikipedia.org" , Xol_lang_itm_.Id_fr , Xow_wiki_domain_.Tid_wikipedia , "fr" , "http://fr.wikipedia.org/wiki/~{0}", "fr.wikipedia.org");}
- @Test public void Add_bulk_wikt_en() {fxt.Tst_add_bulk("wikt|en.wiktionary.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_wiktionary , "wikt" , "http://en.wiktionary.org/wiki/~{0}", "en.wiktionary.org");}
- @Test public void Add_bulk_commons() {fxt.Tst_add_bulk("commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_commons , "commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
- @Test public void Add_bulk_commons_cap() {fxt.Tst_add_bulk("Commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_commons , "Commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
- @Test public void Add_bulk_langs_wiki() {fxt.Langs_ini().Tst_add_bulk_langs("wiki", fxt.xwiki_("en", "en.wikipedia.org", "http://en.wikipedia.org/wiki/~{0}"), fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
- @Test public void Add_bulk_langs_grps() {fxt.Langs_ini().Tst_add_bulk_langs("europe_west~asia_east", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
- @Test public void Add_bulk_langs_grp_itm() {fxt.Langs_ini().Tst_add_bulk_langs("europe_west~ja", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
- @Test public void Add_bulk_langs_grp_commons() {
- fxt.Langs_ini();
+public class Xow_xwiki_mgr_tst {
+ @Before public void init() {fxt.Clear();} private Xow_xwiki_mgr_fxt fxt = new Xow_xwiki_mgr_fxt();
+ @Test public void Add_bulk_wiki_en() {fxt.Test_add_bulk("w|en.wikipedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_wikipedia , "w" , "http://en.wikipedia.org/wiki/~{0}", "en.wikipedia.org");}
+ @Test public void Add_bulk_wiki_fr() {fxt.Test_add_bulk("fr|fr.wikipedia.org" , Xol_lang_itm_.Id_fr , Xow_wiki_domain_.Tid_wikipedia , "fr" , "http://fr.wikipedia.org/wiki/~{0}", "fr.wikipedia.org");}
+ @Test public void Add_bulk_wikt_en() {fxt.Test_add_bulk("wikt|en.wiktionary.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_wiktionary , "wikt" , "http://en.wiktionary.org/wiki/~{0}", "en.wiktionary.org");}
+ @Test public void Add_bulk_commons() {fxt.Test_add_bulk("commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_commons , "commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
+ @Test public void Add_bulk_commons_cap() {fxt.Test_add_bulk("Commons|commons.wikimedia.org" , Xol_lang_itm_.Id__unknown , Xow_wiki_domain_.Tid_commons , "Commons" , "http://commons.wikimedia.org/wiki/~{0}", "commons.wikimedia.org");}
+ @Test public void Add_bulk_langs_wiki() {fxt.Init_langs().Test_add_bulk_langs("wiki", fxt.xwiki_("en", "en.wikipedia.org", "http://en.wikipedia.org/wiki/~{0}"), fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
+ @Test public void Add_bulk_langs_grps() {fxt.Init_langs().Test_add_bulk_langs("europe_west~asia_east", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
+ @Test public void Add_bulk_langs_grp_itm() {fxt.Init_langs().Test_add_bulk_langs("europe_west~ja", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));}
+ @Test public void Add_bulk_langs_grp_commons() {
+ fxt.Init_langs();
fxt.Wiki().Xwiki_mgr().Add_bulk_langs(Bry_.new_ascii_("europe_west"), Xow_wiki_domain_.Tid_wikipedia);
fxt.Tst_itms(fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"));
}
- @Test public void Add_bulk_peers() {fxt.Peers_ini().Tst_add_bulk_peers("peer", fxt.xwiki_null_("commons"), fxt.xwiki_null_("m"), fxt.xwiki_("wikt", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("wiktionary", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("s", "en.wikisource.org", "http://en.wikisource.org/wiki/~{0}"));}
- @Test public void Add_bulk_peers_skip_self() {fxt.Peers_ini().Tst_add_bulk_peers("peer", fxt.xwiki_null_("wikipedia"), fxt.xwiki_("w", "en.wikipedia.org", "http://en.wikipedia.org/wiki/~{0}"));} // PURPOSE: skip "wikipedia" as alias since "Wikipedia" is namespace; needed for titles of "Wikipedia:Main page" (which would otherwise try to go to page "Main Page" in the main names of xwiki "Wikipedia"
- @Test public void Add_bulk_core_wikidata() {fxt.Peers_ini().Tst_add_bulk_peers("core", fxt.xwiki_("d", "www.wikidata.org", "http://www.wikidata.org/wiki/~{0}"));}
+ @Test public void Add_bulk_peers() {fxt.Init_peers().Test_add_bulk_peers("peer", fxt.xwiki_null_("commons"), fxt.xwiki_null_("m"), fxt.xwiki_("wikt", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("wiktionary", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("s", "en.wikisource.org", "http://en.wikisource.org/wiki/~{0}"));}
+ @Test public void Add_bulk_peers_skip_self() {fxt.Init_peers().Test_add_bulk_peers("peer", fxt.xwiki_null_("wikipedia"), fxt.xwiki_("w", "en.wikipedia.org", "http://en.wikipedia.org/wiki/~{0}"));} // PURPOSE: skip "wikipedia" as alias since "Wikipedia" is namespace; needed for titles of "Wikipedia:Main page" (which would otherwise try to go to page "Main Page" in the main names of xwiki "Wikipedia"
+ @Test public void Add_bulk_core_wikidata() {fxt.Init_peers().Test_add_bulk_peers("core", fxt.xwiki_("d", "www.wikidata.org", "http://www.wikidata.org/wiki/~{0}"));}
+ @Test public void Add_bulk_peers_tid() { // PURPOSE:wikt should generate wiki_tid of wiktionary, not wikipedia; PAGE:en.s:Main_Page DATE:2014-09-14
+ fxt.Init_wikt ().Test_add_bulk_peers("peer", fxt.xwiki_("wikt", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"));
+ }
}
class Xow_xwiki_mgr_fxt {
Xow_xwiki_mgr xwiki_mgr; Xoa_lang_mgr lang_mgr; String_bldr sb = String_bldr_.new_(); Xoa_app app; Xow_wiki wiki;
@@ -51,8 +53,11 @@ class Xow_xwiki_mgr_fxt {
}
public Xow_wiki Wiki() {return wiki;}
public Xow_xwiki_itm xwiki_null_(String key) {return new Xow_xwiki_itm(Bry_.new_utf8_(key), Bry_.Empty, Xow_wiki_domain_.Tid_other, Xol_lang_itm_.Id__unknown, Bry_.Empty);}
- public Xow_xwiki_itm xwiki_(String key, String domain, String fmt) {return new Xow_xwiki_itm(Bry_.new_utf8_(key), Bry_.new_utf8_(fmt), Xow_wiki_domain_.Tid_other, Xol_lang_itm_.Id__unknown, Bry_.new_utf8_(domain));}
- public Xow_xwiki_mgr_fxt Tst_add_bulk(String raw, int lang_tid, byte wiki_tid, String alias, String fmt, String domain) {
+ public Xow_xwiki_itm xwiki_(String key, String domain, String fmt) {
+ Xow_wiki_domain domain_itm = Xow_wiki_domain_.parse_by_domain(Bry_.new_utf8_(domain));
+ return new Xow_xwiki_itm(Bry_.new_utf8_(key), Bry_.new_utf8_(fmt), domain_itm.Tid(), Xol_lang_itm_.Id__unknown, Bry_.new_utf8_(domain));
+ }
+ public Xow_xwiki_mgr_fxt Test_add_bulk(String raw, int lang_tid, byte wiki_tid, String alias, String fmt, String domain) {
Xow_xwiki_itm itm = xwiki_mgr.Add_bulk_row(Xol_lang_itm_.Regy(), Bry_.new_ascii_(raw));
Tfds.Eq(alias, String_.new_ascii_(itm.Key_bry()));
Tfds.Eq(fmt, String_.new_ascii_(itm.Fmt()));
@@ -60,7 +65,7 @@ class Xow_xwiki_mgr_fxt {
Tfds.Eq(lang_tid, itm.Lang_id(), "lang_id");
return this;
}
- public Xow_xwiki_mgr_fxt Langs_ini() {
+ public Xow_xwiki_mgr_fxt Init_langs() {
lang_mgr.Groups().Set_bulk(Bry_.new_utf8_(String_.Concat_lines_nl
( "+||grp|wiki"
, "+|wiki|grp|english"
@@ -73,7 +78,7 @@ class Xow_xwiki_mgr_fxt {
)));
return this;
}
- public Xow_xwiki_mgr_fxt Peers_ini() {
+ public Xow_xwiki_mgr_fxt Init_peers() {
app.Wiki_mgr().Groups().Set_bulk(Bry_.new_utf8_(String_.Concat_lines_nl
( "+|core|itm|commons|commons"
, "+|core|itm|meta|meta;m"
@@ -84,13 +89,19 @@ class Xow_xwiki_mgr_fxt {
)));
return this;
}
- public Xow_xwiki_mgr_fxt Tst_add_bulk_langs(String langs, Xow_xwiki_itm... itms) {
+ public Xow_xwiki_mgr_fxt Init_wikt() {
+ app.Wiki_mgr().Groups().Set_bulk(Bry_.new_utf8_(String_.Concat_lines_nl
+ ( "+|peer|itm|wiktionary|wikt;wiktionary"
+ )));
+ return this;
+ }
+ public Xow_xwiki_mgr_fxt Test_add_bulk_langs(String langs, Xow_xwiki_itm... itms) {
xwiki_mgr.Add_bulk_langs(Bry_.new_utf8_(langs));
Tfds.Eq_str_lines(Xto_str(itms), Xto_str(Xto_ary(itms)));
return this;
}
- public Xow_xwiki_mgr_fxt Tst_add_bulk_peers(String exclude, Xow_xwiki_itm... itms) {
- xwiki_mgr.Add_bulk_peers(Bry_.new_utf8_(exclude));
+ public Xow_xwiki_mgr_fxt Test_add_bulk_peers(String peers, Xow_xwiki_itm... itms) {
+ xwiki_mgr.Add_bulk_peers(Bry_.new_utf8_(peers));
Tfds.Eq_str_lines(Xto_str(itms), Xto_str(Xto_ary(itms)));
return this;
}
@@ -116,7 +127,7 @@ class Xow_xwiki_mgr_fxt {
if (Bry_.Len_eq_0(itm.Domain())) // "null", ignore
sb.Add(itm.Key_bry()).Add_char_nl();
else {
- sb.Add(itm.Key_bry()).Add_char_pipe().Add(itm.Domain()).Add_char_pipe().Add(itm.Fmt()).Add_char_nl();
+ sb.Add(itm.Key_bry()).Add_char_pipe().Add(itm.Domain()).Add_char_pipe().Add(itm.Fmt()).Add_char_pipe().Add(itm.Wiki_tid()).Add_char_nl();
}
}
return sb.XtoStrAndClear();
diff --git a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java
index 1a5d29b6d..e88906bd7 100644
--- a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java
+++ b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.xtns; import gplx.*; import gplx.xowa.*;
import gplx.core.btries.*;
-import gplx.xowa.xtns.cite.*; import gplx.xowa.xtns.imaps.*; import gplx.xowa.xtns.relatedSites.*; import gplx.xowa.xtns.insiders.*;
+import gplx.xowa.xtns.cite.*; import gplx.xowa.xtns.imaps.*; import gplx.xowa.xtns.relatedSites.*; import gplx.xowa.xtns.insiders.*; import gplx.xowa.xtns.proofreadPage.*;
public class Xow_xtn_mgr implements GfoInvkAble {
private OrderedHash regy = OrderedHash_.new_bry_();
public int Count() {return regy.Count();}
@@ -25,11 +25,13 @@ public class Xow_xtn_mgr implements GfoInvkAble {
public Imap_xtn_mgr Xtn_imap() {return xtn_imap;} private Imap_xtn_mgr xtn_imap;
public Sites_xtn_mgr Xtn_sites() {return xtn_sites;} private Sites_xtn_mgr xtn_sites;
public Insider_xtn_mgr Xtn_insider() {return xtn_insider;} private Insider_xtn_mgr xtn_insider;
+ public Pp_xtn_mgr Xtn_proofread() {return xtn_proofread;} private Pp_xtn_mgr xtn_proofread;
public Xow_xtn_mgr Ctor_by_app(Xoa_app app) { // NOTE: needed for options
Add(app, new Cite_xtn_mgr());
Add(app, new Imap_xtn_mgr());
Add(app, new Sites_xtn_mgr());
Add(app, new Insider_xtn_mgr());
+ Add(app, new Pp_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());
@@ -38,7 +40,6 @@ 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.proofreadPage.Pp_xtn_mgr());
return this;
}
public Xow_xtn_mgr Ctor_by_wiki(Xow_wiki wiki) {
@@ -85,14 +86,16 @@ public class Xow_xtn_mgr implements GfoInvkAble {
case Tid_sites: xtn_sites = (Sites_xtn_mgr)mgr; break;
case Tid_insider: xtn_insider = (Insider_xtn_mgr)mgr; break;
case Tid_imap: xtn_imap = (Imap_xtn_mgr)mgr; break;
+ case Tid_proofread: xtn_proofread = (Pp_xtn_mgr)mgr; break;
}
}
- private static final byte Tid_cite = 0, Tid_sites = 1, Tid_insider = 2, Tid_imap = 3;
+ private static final byte Tid_cite = 0, Tid_sites = 1, Tid_insider = 2, Tid_imap = 3, Tid_proofread = 4;
private static final Btrie_slim_mgr xtn_tid_trie = Btrie_slim_mgr.cs_()
.Add_bry_bval(Cite_xtn_mgr.XTN_KEY , Tid_cite)
.Add_bry_bval(Sites_xtn_mgr.XTN_KEY , Tid_sites)
.Add_bry_bval(Insider_xtn_mgr.XTN_KEY , Tid_insider)
.Add_bry_bval(Imap_xtn_mgr.XTN_KEY , Tid_imap)
+ .Add_bry_bval(Pp_xtn_mgr.XTN_KEY , Tid_proofread)
;
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_get)) return Get_or_fail(m.ReadBry("v"));
diff --git a/400_xowa/src/gplx/xowa/xtns/Xox_mgr_base.java b/400_xowa/src/gplx/xowa/xtns/Xox_mgr_base.java
index f936ede57..caa10d309 100644
--- a/400_xowa/src/gplx/xowa/xtns/Xox_mgr_base.java
+++ b/400_xowa/src/gplx/xowa/xtns/Xox_mgr_base.java
@@ -25,14 +25,16 @@ public abstract class Xox_mgr_base implements Xox_mgr {
public abstract Xox_mgr Clone_new();
public boolean Enabled() {return enabled;} private boolean enabled;
@gplx.Virtual public boolean Enabled_default() {return true;}
- public void Enabled_y_() {enabled = true;} public void Enabled_n_() {enabled = false;} // TEST:
+ public void Enabled_y_() {enabled = true; enabled_manually = true;} public void Enabled_n_() {enabled = false; enabled_manually = true;} // TEST:
+ public void Enabled_(boolean v) {enabled = v;}
+ public boolean Enabled_manually() {return enabled_manually;} private boolean enabled_manually;
@gplx.Virtual public void Xtn_ctor_by_app(Xoa_app app) {}
@gplx.Virtual public void Xtn_ctor_by_wiki(Xow_wiki wiki) {}
@gplx.Virtual public void Xtn_init_by_app(Xoa_app app) {}
@gplx.Virtual public void Xtn_init_by_wiki(Xow_wiki wiki) {}
@gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_enabled)) return Yn.Xto_str(enabled);
- else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v");
+ else if (ctx.Match(k, Invk_enabled_)) {enabled = m.ReadYn("v"); enabled_manually = true;}
else return GfoInvkAble_.Rv_unhandled;
return this;
}
@@ -58,7 +60,7 @@ public abstract class Xox_mgr_base implements Xox_mgr {
}
public static void Xtn_load_i18n(Xow_wiki wiki, byte[] xtn_key) {
Xoa_app app = wiki.App();
- Io_url url = app.Fsys_mgr().Bin_extensions_dir().GenSubFil_nest(String_.new_utf8_(xtn_key), "i18n", wiki.Lang().Key_str() + ".json");
+ Io_url url = app.Fsys_mgr().Bin_xtns_dir().GenSubFil_nest(String_.new_utf8_(xtn_key), "i18n", wiki.Lang().Key_str() + ".json");
wiki.App().Bldr().I18n_parser().Load_msgs(false, wiki.Lang(), url);
}
private static final byte[] Xowa_not_implemented = Bry_.new_ascii_("XOWA does not support this extension: ");
diff --git a/400_xowa/src/gplx/xowa/xtns/cite/Ref_html_wtr_cfg.java b/400_xowa/src/gplx/xowa/xtns/cite/Ref_html_wtr_cfg.java
index 1d3d43fed..d1b6a0182 100644
--- a/400_xowa/src/gplx/xowa/xtns/cite/Ref_html_wtr_cfg.java
+++ b/400_xowa/src/gplx/xowa/xtns/cite/Ref_html_wtr_cfg.java
@@ -23,7 +23,7 @@ public class Ref_html_wtr_cfg {
public Bry_fmtr Itm_id_key_many() {return itm_id_key_many;} private Bry_fmtr itm_id_key_many; public Ref_html_wtr_cfg Itm_id_key_many_(String v) {itm_id_key_many = Bry_fmtr.new_(v, "itm_key", "uid"); return this;}
public Bry_fmtr Itm_grp_text() {return itm_grp_text;} private Bry_fmtr itm_grp_text; public Ref_html_wtr_cfg Itm_grp_text_(String v) {itm_grp_text = Bry_fmtr.new_(v, "grp_key", "major"); return this;}
public Bry_fmtr Grp_html_one() {return grp_html_one;} private Bry_fmtr grp_html_one; public Ref_html_wtr_cfg Grp_html_one_(String v) {grp_html_one = Bry_fmtr.new_(v, "grp_id", "itm_id", "text"); return this;}
- public Bry_fmtr Grp_html_many() {return grp_html_many;} private Bry_fmtr grp_html_many; public Ref_html_wtr_cfg Grp_html_many_(String v) {grp_html_many = Bry_fmtr.new_(v, "grp_id", "related_ids", "text"); return this;}
+ public Bry_fmtr Grp_html_many() {return grp_html_many;} private Bry_fmtr grp_html_many; public Ref_html_wtr_cfg Grp_html_many_(String v) {grp_html_many = Bry_fmtr.new_(v, "grp_id", "related_ids", "text"); return this;}
public Bry_fmtr Grp_html_list() {return grp_html_list;} private Bry_fmtr grp_html_list; public Ref_html_wtr_cfg Grp_html_list_(String v) {grp_html_list = Bry_fmtr.new_(v, "itm_id", "backlabel"); return this;}
public Bry_fmtr Grp_id_uid() {return grp_id_uid;} private Bry_fmtr grp_id_uid; public Ref_html_wtr_cfg Grp_id_uid_(String v) {grp_id_uid = Bry_fmtr.new_(v, "uid"); return this;}
public Bry_fmtr Grp_id_key() {return grp_id_key;} private Bry_fmtr grp_id_key; public Ref_html_wtr_cfg Grp_id_key_(String v) {grp_id_key = Bry_fmtr.new_(v, "itm_key", "major"); return this;}
diff --git a/400_xowa/src/gplx/xowa/xtns/cite/References_nde.java b/400_xowa/src/gplx/xowa/xtns/cite/References_nde.java
index 2b21ab7ce..f4ab4ab07 100644
--- a/400_xowa/src/gplx/xowa/xtns/cite/References_nde.java
+++ b/400_xowa/src/gplx/xowa/xtns/cite/References_nde.java
@@ -27,7 +27,7 @@ public class References_nde implements Xox_xnde, Xop_xnde_atr_parser {
case Xatr_id_group: group = xatr.Val_as_bry(src); break;
}
}
- public void Xtn_parse(Xow_wiki wiki, Xop_ctx ctx, Xop_root_tkn cur_root, byte[] src, Xop_xnde_tkn xnde) {
+ public void Xtn_parse(Xow_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();
if (ref_mgr.References__recursing()) return; // skip nested else refs will be lost; EX:""; PAGE:en.w:Hwair; DATE:2014-06-27
@@ -39,10 +39,10 @@ public class References_nde implements Xox_xnde, Xop_xnde_atr_parser {
references_ctx.Para().Enabled_n_(); // disable para during parsing
byte[] references_src = Bry_.Mid(src, itm_bgn, itm_end);
Xop_tkn_mkr tkn_mkr = ctx.Tkn_mkr();
- Xop_root_tkn root = tkn_mkr.Root(src);
+ Xop_root_tkn sub_root = tkn_mkr.Root(src);
boolean prv_recursing = ref_mgr.References__recursing();
ref_mgr.References__recursing_(true);
- wiki.Parser().Parse_text_to_wdom(root, references_ctx, tkn_mkr, references_src, Xop_parser_.Doc_bgn_char_0); // NOTE: parse @gplx.Internal protected contents, but root will be discarded; only picking up [ tags; DATE:2014-06-27
+ wiki.Parser().Parse_text_to_wdom(sub_root, references_ctx, tkn_mkr, references_src, Xop_parser_.Doc_bgn_char_0); // NOTE: parse @gplx.Internal protected contents, but root will be discarded; only picking up ][ tags; DATE:2014-06-27
ref_mgr.References__recursing_(prv_recursing);
}
list_idx = ref_mgr.Grps_get(group).Grp_seal(); // NOTE: needs to be sealed at end; else inner refs will end up in new group; EX: ][don't seal prematurely]
diff --git a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xtn_mgr.java
index 6bae2abbf..b9a1da32e 100644
--- a/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xtn_mgr.java
+++ b/400_xowa/src/gplx/xowa/xtns/hieros/Hiero_xtn_mgr.java
@@ -52,5 +52,5 @@ public class Hiero_xtn_mgr extends Xox_mgr_base implements GfoInvkAble {
else return super.Invk(ctx, ikey, k, m);
}
public static final String Invk_prefabs = "prefabs", Invk_files = "files", Invk_phonemes = "phonemes";
- public static Io_url Hiero_root_dir(Xoa_app app) {return app.Fsys_mgr().Bin_extensions_dir().GenSubDir("Wikihiero");}
+ public static Io_url Hiero_root_dir(Xoa_app app) {return app.Fsys_mgr().Bin_xtns_dir().GenSubDir("Wikihiero");}
}
diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xtn_mgr.java
index 0e79b3e9a..a3089ae33 100644
--- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xtn_mgr.java
+++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xtn_mgr.java
@@ -27,7 +27,7 @@ public class Imap_xtn_mgr extends Xox_mgr_base implements GfoInvkAble {
if (desc_trie != null) return;
desc_trie = Imap_desc_tid.trie_(wiki);
desc_msg = wiki.Msg_mgr().Val_by_key_obj("imagemap_description");
- desc_icon_url = wiki.App().Fsys_mgr().Bin_extensions_dir().GenSubFil_nest("ImageMap", "imgs", "desc-20.png").To_http_file_bry();
+ desc_icon_url = wiki.App().Fsys_mgr().Bin_xtns_dir().GenSubFil_nest("ImageMap", "imgs", "desc-20.png").To_http_file_bry();
}
public Btrie_slim_mgr Desc_trie() {return desc_trie;} private Btrie_slim_mgr desc_trie;
public byte[] Desc_msg() {return desc_msg;} private byte[] desc_msg;
diff --git a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_mgr.java b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_mgr.java
index 0c0c6187a..1d93775a0 100644
--- a/400_xowa/src/gplx/xowa/xtns/math/Xof_math_mgr.java
+++ b/400_xowa/src/gplx/xowa/xtns/math/Xof_math_mgr.java
@@ -22,7 +22,7 @@ public class Xof_math_mgr implements GfoInvkAble {
public ProcessAdp Cmd_convert_tex_to_dvi() {return cmd_convert_tex_to_dvi;} private ProcessAdp cmd_convert_tex_to_dvi = new ProcessAdp();
public ProcessAdp Cmd_convert_dvi_to_png() {return cmd_convert_dvi_to_png;} private ProcessAdp cmd_convert_dvi_to_png = new ProcessAdp();
public void Init(Xoa_app app) {
- Launcher_app_mgr app_mgr = app.Fsys_mgr().App_mgr();
+ Launcher_app_mgr app_mgr = app.Launcher();
cmd_convert_tex_to_dvi = app_mgr.App_convert_tex_to_dvi();
cmd_convert_dvi_to_png = app_mgr.App_convert_dvi_to_png();
}
@@ -52,7 +52,7 @@ public class Xof_math_mgr implements GfoInvkAble {
}
public boolean MakePng(byte[] math, String hash, Io_url png_url, String prog_fmt) {
if (!enabled) return false;
- Io_url tmp_dir = app.Fsys_mgr().Temp_dir().GenSubDir("math"); // cmd_convert_tex_to_dvi.Tmp_dir();
+ Io_url tmp_dir = app.User().Fsys_mgr().App_temp_dir().GenSubDir("math"); // cmd_convert_tex_to_dvi.Tmp_dir();
Io_url tex_url = tmp_dir.GenSubFil("xowa_math_temp.tex");
String latex = Latex_wrap(math);
prog_fmt = String_.Replace(prog_fmt, "~", "~~"); // double-up ~ or else will break in progress bar
diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java
index f6a67d831..b629c866b 100644
--- a/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java
+++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/scribunto/Pfunc_scrib_lib.java
@@ -26,7 +26,7 @@ public class Pfunc_scrib_lib implements Scrib_lib {
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_extensions_dir().GenSubFil_nest("ParserFunctions", "mw.ext.ParserFunctions.lua"));
+ mod = core.RegisterInterface(this, core.App().Fsys_mgr().Bin_xtns_dir().GenSubFil_nest("ParserFunctions", "mw.ext.ParserFunctions.lua"));
return mod;
}
public Scrib_proc_mgr Procs() {return procs;} private Scrib_proc_mgr procs = new Scrib_proc_mgr();
diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_filepath.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_filepath.java
index 4d562c347..45fd6a601 100644
--- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_filepath.java
+++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_filepath.java
@@ -33,7 +33,7 @@ public class Pfunc_filepath extends Pf_func_base {
if (tmp_rslt .Repo_idx() == Byte_.MaxValue_127) return;
Xof_repo_itm trg_repo = wiki.File_mgr().Repo_mgr().Repos_get_at(tmp_rslt.Repo_idx()).Trg();
xfer_itm.Set__ttl(ttl_bry, Bry_.Empty); // redirect is empty b/c Get_page does all redirect lookups
- byte[] url = url_bldr.Set_trg_html_(Xof_repo_itm.Mode_orig, trg_repo, ttl_bry, xfer_itm.Lnki_md5(), xfer_itm.Lnki_ext(), Xof_img_size.Size_null_deprecated, Xof_doc_thumb.Null, Xof_doc_page.Null).Xto_bry();
+ byte[] url = url_bldr.Init_for_trg_html(Xof_repo_itm.Mode_orig, trg_repo, ttl_bry, xfer_itm.Lnki_md5(), xfer_itm.Lnki_ext(), Xof_img_size.Size_null_deprecated, Xof_doc_thumb.Null, Xof_doc_page.Null).Xto_bry();
bb.Add(url);
} private static final byte[] Bry_file = Bry_.new_ascii_("File:");
private static final Xof_xfer_itm xfer_itm = new Xof_xfer_itm();
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java
index 0c283c227..d341e38ee 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde.java
@@ -52,6 +52,7 @@ public class Pp_pages_nde implements Xox_xnde, Xop_xnde_atr_parser {
}
}
public void Xtn_parse(Xow_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;
Xoa_page page = ctx.Cur_page();
if (page.Pages_recursed()) return; // moved from Pp_index_parser; DATE:2014-05-21s
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_basic_tst.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_basic_tst.java
index 0896f3f19..8ef12e361 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_basic_tst.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_basic_tst.java
@@ -21,6 +21,7 @@ public class Pp_pages_nde_basic_tst {
private Xop_fxt fxt = new Xop_fxt();
@Before public void Init() {
Io_mgr._.InitEngine_mem();
+ fxt.Wiki().Xtn_mgr().Xtn_proofread().Enabled_y_();
fxt.Wiki().Db_mgr().Load_mgr().Clear(); // must clear; otherwise fails b/c files get deleted, but wiki.data_mgr caches the Xowd_regy_mgr (the .reg file) in memory;
fxt.Wiki().Ns_mgr().Add_new(Xowc_xtn_pages.Ns_page_id_default, "Page").Add_new(Xowc_xtn_pages.Ns_index_id_default, "Index").Init();
}
@@ -95,4 +96,12 @@ public class Pp_pages_nde_basic_tst {
, ""
));
}
+ @Test public void Disable() { // PURPOSE: simulate disabled wiki; PAGE:en.w:Wikipedia:Requests_for_adminship/Phantomsteve DATE:2014-09-08
+ fxt.Wiki().Xtn_mgr().Xtn_proofread().Enabled_n_();
+ fxt.Init_page_create("Page:A/1", "A");
+ fxt.Test_parse_page_wiki_str
+ ( "a"
+ , "<pages index="A" from=1 to=1>a"
+ );
+ }
}
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java
index d676963eb..15d095abb 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_hdr_tst.java
@@ -21,6 +21,7 @@ public class Pp_pages_nde_hdr_tst {
private Xop_fxt fxt = new Xop_fxt();
@Before public void Init() {
Io_mgr._.InitEngine_mem();
+ fxt.Wiki().Xtn_mgr().Xtn_proofread().Enabled_y_();
fxt.Wiki().Cache_mgr().Page_cache().Free_mem_all();
fxt.Wiki().Db_mgr().Load_mgr().Clear(); // must clear; otherwise fails b/c files get deleted, but wiki.data_mgr caches the Xowd_regy_mgr (the .reg file) in memory;
fxt.Wiki().Ns_mgr().Add_new(Xowc_xtn_pages.Ns_page_id_default, "Page").Add_new(Xowc_xtn_pages.Ns_index_id_default, "Index").Init();
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_index_tst.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_index_tst.java
index 8aaf6648b..acca2be1e 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_index_tst.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_index_tst.java
@@ -21,6 +21,7 @@ public class Pp_pages_nde_index_tst {
private Xop_fxt fxt = new Xop_fxt();
@Before public void Init() {
Io_mgr._.InitEngine_mem();
+ fxt.Wiki().Xtn_mgr().Xtn_proofread().Enabled_y_();
fxt.Wiki().Db_mgr().Load_mgr().Clear(); // must clear; otherwise fails b/c files get deleted, but wiki.data_mgr caches the Xowd_regy_mgr (the .reg file) in memory;
fxt.Wiki().Ns_mgr().Add_new(Xowc_xtn_pages.Ns_page_id_default, "Page").Add_new(Xowc_xtn_pages.Ns_index_id_default, "Index").Init();
}
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_recursion_tst.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_recursion_tst.java
index aeb521a62..1c4580a5e 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_recursion_tst.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_pages_nde_recursion_tst.java
@@ -21,6 +21,7 @@ public class Pp_pages_nde_recursion_tst {
private Xop_fxt fxt = new Xop_fxt();
@Before public void Init() {
Io_mgr._.InitEngine_mem();
+ fxt.Wiki().Xtn_mgr().Xtn_proofread().Enabled_y_();
fxt.Wiki().Db_mgr().Load_mgr().Clear(); // must clear; otherwise fails b/c files get deleted, but wiki.data_mgr caches the Xowd_regy_mgr (the .reg file) in memory;
fxt.Wiki().Ns_mgr().Add_new(Xowc_xtn_pages.Ns_page_id_default, "Page").Add_new(Xowc_xtn_pages.Ns_index_id_default, "Index").Init();
}
diff --git a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_xtn_mgr.java
index 37be59cb2..806b94746 100644
--- a/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_xtn_mgr.java
+++ b/400_xowa/src/gplx/xowa/xtns/proofreadPage/Pp_xtn_mgr.java
@@ -22,5 +22,7 @@ public class Pp_xtn_mgr extends Xox_mgr_base {
@Override public byte[] Xtn_key() {return XTN_KEY;} public static final byte[] XTN_KEY = Bry_.new_ascii_("ProofreadPages");
@Override public Xox_mgr Clone_new() {return new Pp_xtn_mgr();}
@Override public void Xtn_init_by_wiki(Xow_wiki wiki) {
+ if (!this.Enabled_manually())
+ this.Enabled_(wiki.Domain_tid() == Xow_wiki_domain_.Tid_wikisource); // only enable for wikisource
}
}
diff --git a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java
index 0d1eec34a..9cd903cb3 100644
--- a/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java
+++ b/400_xowa/src/gplx/xowa/xtns/scores/Score_xnde.java
@@ -58,7 +58,7 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm {
Xow_wiki wiki = ctx.Wiki(); Xoa_page page = ctx.Cur_page();
Score_xtn_mgr score_xtn = (Score_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Score_xtn_mgr.XTN_KEY);
if (!score_xtn.Enabled()) {Html_write_code_as_pre(bfr, app); return;}
- ProcessAdp ly_process = app.Fsys_mgr().App_mgr().App_lilypond();
+ ProcessAdp ly_process = app.Launcher().App_lilypond();
if (ly_process.Exe_exists() == Bool_.__byte && ly_process.Exe_url() != null) { // TEST: ly_process.Exe_url() is null
boolean exists = Io_mgr._.ExistsFil(ly_process.Exe_url());
ly_process.Exe_exists_(exists ? Bool_.Y_byte : Bool_.N_byte);
@@ -113,12 +113,12 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm {
Score_xtn_mgr score_xtn = (Score_xtn_mgr)wiki.Xtn_mgr().Get_or_fail(Score_xtn_mgr.XTN_KEY);
Io_url ly_file = output_dir.GenSubFil(sha1_prefix + ".ly");
byte[] ly_text = null;
- ProcessAdp ly_process = app.Fsys_mgr().App_mgr().App_lilypond();
+ ProcessAdp ly_process = app.Launcher().App_lilypond();
if (Score_xtn_mgr.Lilypond_version == null) Score_xtn_mgr.Lilypond_version = Get_lilypond_version(ly_process);
if (lang_is_abc) {
Io_url abc_file = output_dir.GenSubFil(sha1_prefix + ".abc");
Io_mgr._.SaveFilBry(abc_file, code);
- ProcessAdp abc2ly_process = app.Fsys_mgr().App_mgr().App_abc2ly();
+ ProcessAdp abc2ly_process = app.Launcher().App_abc2ly();
if (!abc2ly_process.Run(abc_file, ly_file).Exit_code_pass()) {
fail_msg = abc2ly_process.Rslt_out();
app.Usr_dlg().Warn_many("", "", "abc2ly failed: ~{0}", fail_msg);
@@ -141,7 +141,7 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm {
return;
}
if (output_ogg) {
- ProcessAdp timidity_process = app.Fsys_mgr().App_mgr().App_convert_midi_to_ogg();
+ ProcessAdp timidity_process = app.Launcher().App_convert_midi_to_ogg();
Io_url ogg_file = ly_file.GenNewExt(".ogg");
if (!timidity_process.Run(ly_file.GenNewExt(".midi"), ogg_file).Exit_code_pass()) { // NOTE: do not exit; timidity currently not working for windows
fail_msg = timidity_process.Rslt_out();
@@ -152,7 +152,7 @@ public class Score_xnde implements Xox_xnde, Xop_xnde_atr_parser, Xoh_cmd_itm {
Io_mgr._.DeleteFil(ly_file);
Io_url png_file_untrimmed = png_file.GenNewNameOnly("untrimmed");
Io_mgr._.MoveFil(png_file, png_file_untrimmed);
- app.Fsys_mgr().App_mgr().App_trim_img().Run(png_file_untrimmed, png_file);
+ app.Launcher().App_trim_img().Run(png_file_untrimmed, png_file);
Io_mgr._.DeleteFil(png_file_untrimmed);
fail_msg = null;
} private String fail_msg = null;
diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java
index 877086a05..186312b42 100644
--- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java
+++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java
@@ -24,7 +24,7 @@ public class Scrib_core {
this.app = app; this.ctx = ctx;
this.wiki = ctx.Wiki(); this.page = ctx.Cur_page(); // NOTE: wiki / page needed for title reg; DATE:2014-02-05
this.Engine_(Scrib_engine_type.Type_lua, false); // TEST: default to lua
- fsys_mgr.Root_dir_(app.Fsys_mgr().Bin_extensions_dir().GenSubDir_nest("Scribunto"));
+ fsys_mgr.Root_dir_(app.Fsys_mgr().Bin_xtns_dir().GenSubDir_nest("Scribunto"));
lib_mw = new Scrib_lib_mw(this);
lib_uri = new Scrib_lib_uri(this);
lib_ustring = new Scrib_lib_ustring(this);
@@ -69,7 +69,7 @@ public class Scrib_core {
enabled = xtn_mgr.Enabled();
Io_url root_dir = fsys_mgr.Root_dir(), script_dir = fsys_mgr.Script_dir();
engine.Server().Init
- ( app.Fsys_mgr().App_mgr().App_lua().Exe_url().Raw()
+ ( app.Launcher().App_lua().Exe_url().Raw()
, root_dir.GenSubFil_nest("engines", "LuaStandalone", "mw_main.lua").Raw()
, root_dir.Raw()
);
diff --git a/400_xowa/src/gplx/xowa/xtns/titleBlacklists/Blacklist_scrib_lib.java b/400_xowa/src/gplx/xowa/xtns/titleBlacklists/Blacklist_scrib_lib.java
index 9588281a7..cc7441671 100644
--- a/400_xowa/src/gplx/xowa/xtns/titleBlacklists/Blacklist_scrib_lib.java
+++ b/400_xowa/src/gplx/xowa/xtns/titleBlacklists/Blacklist_scrib_lib.java
@@ -22,7 +22,7 @@ public class Blacklist_scrib_lib implements Scrib_lib {
public Scrib_lib Init() {procs.Init_by_lib(this, Proc_names); return this;}
public Scrib_lua_mod Register(Scrib_core core, Io_url script_dir) {
Init();
- mod = core.RegisterInterface(this, core.App().Fsys_mgr().Bin_extensions_dir().GenSubFil_nest("TitleBlacklist", "mw.ext.TitleBlacklist.lua"));
+ mod = core.RegisterInterface(this, core.App().Fsys_mgr().Bin_xtns_dir().GenSubFil_nest("TitleBlacklist", "mw.ext.TitleBlacklist.lua"));
return mod;
}
public Scrib_proc_mgr Procs() {return procs;} private Scrib_proc_mgr procs = new Scrib_proc_mgr();
diff --git a/400_xowa/src_060_utl/gplx/Int_list.java b/400_xowa/src_060_utl/gplx/Int_list.java
index 5b7abdb3b..1af56e28f 100644
--- a/400_xowa/src_060_utl/gplx/Int_list.java
+++ b/400_xowa/src_060_utl/gplx/Int_list.java
@@ -35,4 +35,10 @@ public class Int_list {
ary = Int_.Ary_empty;
ary_len = ary_max = 0;
}
+ public static Int_list new_(int... ary) {
+ Int_list rv = new Int_list();
+ int len = ary.length;
+ rv.ary = ary; rv.ary_len = len; rv.ary_max = len;
+ return rv;
+ }
}
diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java
index ef4a6c63f..68bb04aea 100644
--- a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java
+++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java
@@ -26,8 +26,9 @@ public class Xow_wiki implements GfoInvkAble {
public Xow_wiki(Xoa_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);
- Xow_wiki_domain domain = Xow_wiki_domain_.parse_by_domain(domain_bry);
- domain_tid = domain.Tid();
+ domain_itm = Xow_wiki_domain_.parse_by_domain(domain_bry);
+ domain_tid = domain_itm.Tid();
+ xwiki_domain_tid = Xow_wiki_domain_.Xwiki_tid(domain_tid);
fsys_mgr = new Xow_fsys_mgr(this, wiki_dir);
redirect_mgr = new Xop_redirect_mgr(this);
data_mgr = new Xow_data_mgr(this);
@@ -72,6 +73,8 @@ public class Xow_wiki implements GfoInvkAble {
public String Domain_str() {return domain_str;} private String domain_str;
public byte Domain_tid() {return domain_tid;} private byte domain_tid;
public byte[] Domain_abrv() {return domain_abrv;} private byte[] domain_abrv;
+ public Xow_wiki_domain Domain_itm() {return domain_itm;} private Xow_wiki_domain domain_itm;
+ public byte Xwiki_domain_tid() {return xwiki_domain_tid;} private byte xwiki_domain_tid;
public Xol_lang Lang() {return lang;} private Xol_lang lang;
public Xow_fsys_mgr Fsys_mgr() {return fsys_mgr;} private Xow_fsys_mgr fsys_mgr;
public Xow_utl_mgr Utl_mgr() {return utl_mgr;} private Xow_utl_mgr utl_mgr;
diff --git a/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm.java b/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm.java
index f5b5c48c7..8d4d98667 100644
--- a/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm.java
+++ b/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm.java
@@ -18,8 +18,8 @@ along with this program. If not, see .
package gplx.xowa; import gplx.*;
public class Xol_lang_itm {
public Xol_lang_itm(int id, byte[] key, byte[] canonical_name) {this.id = id; this.key = key; this.canonical_name = canonical_name; this.local_name = canonical_name;}
- public int Id() {return id;} private int id;
- public byte[] Key() {return key;} private byte[] key;
+ public int Id() {return id;} private final int id;
+ public byte[] Key() {return key;} private final byte[] key;
public byte[] Canonical_name() {return canonical_name;} private byte[] canonical_name;
public byte[] Local_name() {return local_name;} private byte[] local_name;
public byte[] Local_grp() {return local_grp;} private byte[] local_grp = Bry_.Empty;
diff --git a/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm_.java b/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm_.java
index 391b1020d..7a1e2fe3d 100644
--- a/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm_.java
+++ b/400_xowa/src_140_lang/gplx/xowa/Xol_lang_itm_.java
@@ -854,9 +854,9 @@ Regy_add(regy, Id_zu, "zu", "isiZulu");
}
return regy;
}
- private static Hash_adp_bry regy; static Xol_lang_itm[] langs = new Xol_lang_itm[Id__max];
+ private static Hash_adp_bry regy; private static Xol_lang_itm[] langs = new Xol_lang_itm[Id__max];
private static void Regy_add(Hash_adp_bry regy, int id, String code_str, String canonical) {
- byte[] code = Bry_.new_utf8_(code_str);
+ byte[] code = Bry_.new_ascii_(code_str); // ASCII:lang_code should always be ASCII
Xol_lang_itm itm = new Xol_lang_itm(id, code, Bry_.new_utf8_(canonical));
langs[id] = itm;
regy.Add(code, itm);
diff --git a/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java b/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java
index c57d2695e..d06ca08ac 100644
--- a/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java
+++ b/400_xowa/src_160_file/gplx/xowa/Xof_img_mgr.java
@@ -24,7 +24,7 @@ public class Xof_img_mgr {
public int Thumb_w_img() {return thumb_w_img;} private int thumb_w_img = Xof_img_size.Thumb_width_img;
public int Thumb_w_ogv() {return thumb_w_ogv;} private int thumb_w_ogv = Xof_img_size.Thumb_width_ogv;
public void Init_app(Xoa_app app) {
- Launcher_app_mgr app_mgr = app.Fsys_mgr().App_mgr();
+ Launcher_app_mgr app_mgr = app.Launcher();
wkr_query_img_size = new Xof_img_wkr_query_img_size_imageMagick(app, app_mgr.App_query_img_size());
wkr_resize_img = new Xof_img_wkr_resize_img_imageMagick(app, app_mgr.App_resize_img(), app_mgr.App_convert_svg_to_png());
wkr_convert_djvu_to_tiff = new Xof_img_wkr_convert_djvu_to_tiff_app(app_mgr.App_convert_djvu_to_tiff());
diff --git a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java
index 92ce8384c..a2a74a015 100644
--- a/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java
+++ b/400_xowa/src_162_xfer/gplx/xowa/Xof_xfer_mgr.java
@@ -348,8 +348,8 @@ public class Xof_xfer_mgr {
file_w = file_size.Width(); file_h = file_size.Height();
return true;
}
- String Src_url(Xof_repo_itm repo, byte mode, int lnki_w) {return url_bldr.Set_src_file_(mode, repo, ttl, md5, ext, lnki_w, lnki_thumbtime, lnki_page).Xto_str();}
- Io_url Trg_url(Xof_repo_itm repo, byte mode, int lnki_w) {return url_bldr.Set_trg_file_(mode, repo, ttl, md5, ext, lnki_w, lnki_thumbtime, lnki_page).Xto_url();}
+ String Src_url(Xof_repo_itm repo, byte mode, int lnki_w) {return url_bldr.Init_for_src_file(mode, repo, ttl, md5, ext, lnki_w, lnki_thumbtime, lnki_page).Xto_str();}
+ Io_url Trg_url(Xof_repo_itm repo, byte mode, int lnki_w) {return url_bldr.Init_for_trg_file(mode, repo, ttl, md5, ext, lnki_w, lnki_thumbtime, lnki_page).Xto_url();}
private Xof_url_bldr url_bldr = new Xof_url_bldr();
}
/*
diff --git a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java
index 3ae60a271..16cdb6cd8 100644
--- a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java
+++ b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java
@@ -118,7 +118,7 @@ public class Xoi_cmd_mgr implements GfoInvkAble {
Gfo_thread_cmd Cmd_new(GfoMsg m) {
String cmd_key = m.ReadStr("v");
if (String_.Eq(cmd_key, Gfo_thread_cmd_download.KEY)) return new Gfo_thread_cmd_download().Init("downloading", m.ReadStr("src"), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("trg"))).Url_eval_mgr_(app.Url_cmd_eval()).Owner_(this).Ctor(app.Usr_dlg(), app.Gui_mgr().Kit());
- else if (String_.Eq(cmd_key, Gfo_thread_cmd_unzip.KEY)) return new Gfo_thread_cmd_unzip().Url_eval_mgr_(app.Url_cmd_eval()).Owner_(this).Init(app.Usr_dlg(), app.Gui_mgr().Kit(), app.Fsys_mgr().App_mgr().App_decompress_bz2(), app.Fsys_mgr().App_mgr().App_decompress_zip(), app.Fsys_mgr().App_mgr().App_decompress_gz(), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("src")), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("trg")));
+ else if (String_.Eq(cmd_key, Gfo_thread_cmd_unzip.KEY)) return new Gfo_thread_cmd_unzip().Url_eval_mgr_(app.Url_cmd_eval()).Owner_(this).Init(app.Usr_dlg(), app.Gui_mgr().Kit(), app.Launcher().App_decompress_bz2(), app.Launcher().App_decompress_zip(), app.Launcher().App_decompress_gz(), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("src")), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("trg")));
else if (String_.Eq(cmd_key, Gfo_thread_cmd_replace.KEY)) return new Gfo_thread_cmd_replace().Url_eval_mgr_(app.Url_cmd_eval()).Owner_(this).Init(app.Usr_dlg(), app.Gui_mgr().Kit(), Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("fil")));
else if (String_.Eq(cmd_key, Xoi_cmd_wiki_image_cfg.KEY_dump)) return new Xoi_cmd_wiki_image_cfg(app, Bry_fmtr_eval_mgr_.Eval_url(app.Url_cmd_eval(), m.ReadBry("fil"))).Owner_(this);
else if (String_.Eq(cmd_key, Xoi_cmd_wiki_goto_page.KEY)) return new Xoi_cmd_wiki_goto_page(app, m.ReadStr("v")).Owner_(this);
diff --git a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki.java b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki.java
index 0e0692abd..514a37ca2 100644
--- a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki.java
+++ b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki.java
@@ -65,7 +65,7 @@ class Xoi_cmd_wiki_unzip extends Gfo_thread_cmd_unzip implements Gfo_thread_cmd
}
Io_url src = urls[urls.length - 1];
Io_url trg = app.Fsys_mgr().Wiki_dir().GenSubFil_nest(wiki_key, src.NameOnly()); // NOTE: NameOnly() will strip trailing .bz2; EX: a.xml.bz2 -> a.xml
- super.Init(app.Usr_dlg(), app.Gui_mgr().Kit(), app.Fsys_mgr().App_mgr().App_decompress_bz2(), app.Fsys_mgr().App_mgr().App_decompress_zip(), app.Fsys_mgr().App_mgr().App_decompress_gz(), src, trg);
+ super.Init(app.Usr_dlg(), app.Gui_mgr().Kit(), app.Launcher().App_decompress_bz2(), app.Launcher().App_decompress_zip(), app.Launcher().App_decompress_gz(), src, trg);
this.Term_cmd_for_src_(Term_cmd_for_src_move);
this.Term_cmd_for_src_url_(app.Fsys_mgr().Wiki_dir().GenSubFil_nest("#dump", "done", src.NameAndExt()));
if (Io_mgr._.ExistsFil(trg)) {
diff --git a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki_tst.java b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki_tst.java
index 322764ea5..928e4dba2 100644
--- a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki_tst.java
+++ b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_wiki_tst.java
@@ -21,7 +21,7 @@ import gplx.brys.*; import gplx.threads.*; import gplx.xowa.wikis.*;
public class Xoi_cmd_wiki_tst {
@Test public void Run() {
// Bld_import_list(Wikis);
-// Bld_cfg_files(Wikis); // NOTE: remember to carry over the wikisource / page / index commands from the existing xowa_build_cfg.gfs; also, only run the xowa_build_cfg.gfs once; DATE:2013-10-15
+// Bld_cfg_files(Wikis); // NOTE: remember to carry over the wikisource / page / index commands from the existing xowa_build_cfg.gfs; also, only run the xowa_build_cfg.gfs once; DATE:2013-10-15; last run: DATE:2014-09-09
}
public void Bld_import_list(String... ary) {
int ary_len = ary.length;
@@ -82,7 +82,7 @@ public class Xoi_cmd_wiki_tst {
ConsoleAdp._.WriteLine(Err_.Message_gplx_brief(e));
}
}
- bfr.Add_str("app.wiki_cfg_bldr.run;").Add_byte_nl();
+ bfr.Add_str("app.bldr.wiki_cfg_bldr.run;").Add_byte_nl();
Io_mgr._.SaveFilStr("C:\\xowa_build_cfg.gfs", bfr.XtoStr());
}
public static String[] Wikis = new String[]
diff --git a/400_xowa/src_300_html/gplx/xowa/Xoa_page.java b/400_xowa/src_300_html/gplx/xowa/Xoa_page.java
index 2464fdabb..d6aef1355 100644
--- a/400_xowa/src_300_html/gplx/xowa/Xoa_page.java
+++ b/400_xowa/src_300_html/gplx/xowa/Xoa_page.java
@@ -24,7 +24,7 @@ public class Xoa_page {
Xoa_page(Xow_wiki wiki, Xoa_ttl ttl) {
this.wiki = wiki; this.ttl = ttl;
this.app = wiki.App(); this.lang = wiki.Lang(); // default to wiki.lang; can be override later by wikitext
- hdump_data = new Xopg_hdump_data(app);
+ hdump_data = new Xopg_hdump_data();
hdr_mgr = new Xow_hdr_mgr(wiki, this);
lnki_redlinks_mgr = new Xop_lnki_logger_redlinks_mgr(this);
Ttl_(ttl);
diff --git a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java
index 51ef2ead7..8157f66dc 100644
--- a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java
+++ b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java
@@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package gplx.xowa; import gplx.*;
-import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.net.*;
+import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.net.*; import gplx.xowa.files.*;
public class Xoa_url_parser {
private Url_encoder encoder = Url_encoder.new_html_href_mw_().Itms_raw_same_many(Byte_ascii.Underline); private Bry_bfr tmp_bfr = Bry_bfr.reset_(255);
public Gfo_url_parser Url_parser() {return url_parser;} private Gfo_url_parser url_parser = new Gfo_url_parser(); private Gfo_url gfo_url = new Gfo_url();
@@ -150,8 +150,8 @@ public class Xoa_url_parser {
byte[] wiki_bry = rv.Wiki_bry();
if (Bry_.Len_gt_0(wiki_bry)) { // NOTE: wiki_bry null when passing in Category:A from home_wiki
Xow_xwiki_itm xwiki_itm = app.User().Wiki().Xwiki_mgr().Get_by_key(wiki_bry); // see if url.Wiki_bry is actually wiki;
- if ( xwiki_itm != null // null-check
- && !xwiki_itm.Type_is_lang(cur_wiki.Lang().Lang_id())) // in xwiki, but not lang; EX: "fr.wikipedia.org" vs "fr"; ca.s:So/Natura_del_so; DATE:2014-04-26
+ if ( xwiki_itm != null // null-check
+ && !xwiki_itm.Type_is_xwiki_lang(cur_wiki.Lang().Lang_id())) // in xwiki, but not lang; EX: "fr.wikipedia.org" vs "fr"; ca.s:So/Natura_del_so; DATE:2014-04-26
wiki = app.Wiki_mgr().Get_by_key_or_make(xwiki_itm.Domain());
}
if (rv.Page_bry() == null) { // 1 seg; EX: "Earth"; "fr.wikipedia.org"
@@ -214,7 +214,7 @@ public class Xoa_url_parser {
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, page_bry);
if (ttl != null) { // can still be empty; EX: "en.wikipedia.org"
Xow_xwiki_itm lang_xwiki = ttl.Wik_itm();
- if (lang_xwiki != null && lang_xwiki.Type_is_lang(wiki.Lang().Lang_id())) { // format of http://en.wikipedia.org/wiki/fr:A
+ if (lang_xwiki != null && lang_xwiki.Type_is_xwiki_lang(wiki.Lang().Lang_id())) { // format of http://en.wikipedia.org/wiki/fr:A
wiki = app.Wiki_mgr().Get_by_key_or_make(lang_xwiki.Domain());
page_bry = ttl.Page_txt();
}
diff --git a/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java b/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java
index 9d5c659b3..78b6b043d 100644
--- a/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java
+++ b/400_xowa/src_400_parser/gplx/xowa/Xop_fxt.java
@@ -342,7 +342,7 @@ public class Xop_fxt {
}
public static void Reg_xwiki_alias(Xow_wiki wiki, String alias, String domain) {
byte[] domain_bry = Bry_.new_ascii_(domain);
- wiki.Xwiki_mgr().Add_full(Bry_.new_ascii_(alias), domain_bry);
+ wiki.Xwiki_mgr().Add_full(Bry_.new_ascii_(alias), domain_bry, Bry_.Add(domain_bry, Bry_.new_ascii_("/wiki/~{0}")));
wiki.App().User().Wiki().Xwiki_mgr().Add_full(domain_bry, domain_bry);
}
public static String html_img_none(String trg, String alt, String src, String ttl) {
diff --git a/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__basic_tst.java b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__basic_tst.java
index c945a5cd3..96f877966 100644
--- a/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__basic_tst.java
+++ b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__basic_tst.java
@@ -261,52 +261,6 @@ public class Xop_lnki_wkr__basic_tst {
, ""
));
}
- @Test public void Xwiki_file() { // PURPOSE: if xwiki and File, ignore xwiki (hackish); DATE:2013-12-22
- Reg_xwiki_alias("test", "test.wikimedia.org"); // must register xwiki, else ttl will not parse it
- fxt.Wiki().Cfg_parser().Lnki_cfg().Xwiki_repo_mgr().Add_or_mod(Bry_.new_ascii_("test")); // must add to xwiki_repo_mgr
- fxt.Test_parse_page_wiki_str
- ( "[[test:File:A.png|12x10px]]", String_.Concat_lines_nl_skip_last
- ( "
"
- ));
- fxt.Wiki().Cfg_parser_lnki_xwiki_repos_enabled_(false); // disable for other tests
- }
- @Test public void Xwiki_anchor() {
- Reg_xwiki_alias("test", "test.wikimedia.org");
- fxt.Test_parse_page_wiki_str
- ( "[[test:A#b]]", String_.Concat_lines_nl_skip_last
- ( "test:A#b"
- ));
- }
- @Test public void Xwiki_empty() {
- Reg_xwiki_alias("test", "test.wikimedia.org");
- fxt.Test_parse_page_wiki_str
- ( "[[test:]]", String_.Concat_lines_nl_skip_last
- ( "test:"
- ));
- }
- @Test public void Xwiki_empty_literal() {
- Reg_xwiki_alias("test", "test.wikimedia.org");
- fxt.Test_parse_page_wiki_str
- ( "[[:test:]]", String_.Concat_lines_nl_skip_last
- ( "test:"
- ));
- }
- @Test public void Xwiki_not_registered() {
- fxt.App().User().Wiki().Xwiki_mgr().Clear();
- fxt.Wiki().Xwiki_mgr().Add_full(Bry_.new_ascii_("test"), Bry_.new_ascii_("test.wikimedia.org")); // register alias only, but not in user_wiki
- fxt.Test_parse_page_wiki_str
- ( "[[test:A|A]]", String_.Concat_lines_nl_skip_last
- ( "A"
- ));
- }
- @Test public void Literal_lang() {
- Reg_xwiki_alias("fr", "fr.wikipedia.org");
- fxt.Test_parse_page_wiki_str
- ( "[[:fr:A]]", String_.Concat_lines_nl_skip_last
- ( "A"
- ));
- Tfds.Eq(0, fxt.Page().Xwiki_langs().Count());
- }
@Test public void Html_ent_pound() {
fxt.Test_parse_page_wiki_str
( "[[A#b|c]]", String_.Concat_lines_nl_skip_last
@@ -323,9 +277,6 @@ public class Xop_lnki_wkr__basic_tst {
fxt.Test_parse_page_wiki_str("[[Page1|]]" , "Page1");
fxt.Test_parse_page_wiki_str("[[Help:Page1|]]" , "Page1");
}
- private void Reg_xwiki_alias(String alias, String domain) {
- Xop_fxt.Reg_xwiki_alias(fxt.Wiki(), alias, domain);
- }
@Test public void Thumb_first_align_trumps_all() { // PURPOSE: if there are multiple alignment instructions, take the first EX:[[File:A.png|thumb|center|left]] DATE:20121226
fxt.Test_parse_page_wiki_str("[[File:A.png|thumb|right|center]]" // NOTE: right trumps center
, String_.Concat_lines_nl_skip_last
diff --git a/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__xwiki_tst.java b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__xwiki_tst.java
new file mode 100644
index 000000000..4eeedb256
--- /dev/null
+++ b/400_xowa/src_440_lnki/gplx/xowa/Xop_lnki_wkr__xwiki_tst.java
@@ -0,0 +1,115 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa; import gplx.*;
+import org.junit.*;
+public class Xop_lnki_wkr__xwiki_tst {
+ @Before public void init() {fxt.Reset(); fxt.Init_para_n_();} private Xop_fxt fxt = new Xop_fxt();
+ @Test public void Xwiki_file() { // PURPOSE: if xwiki and File, ignore xwiki (hackish); DATE:2013-12-22
+ Reg_xwiki_alias("test", "test.wikimedia.org"); // must register xwiki, else ttl will not parse it
+ fxt.Wiki().Cfg_parser().Lnki_cfg().Xwiki_repo_mgr().Add_or_mod(Bry_.new_ascii_("test")); // must add to xwiki_repo_mgr
+ fxt.Test_parse_page_wiki_str
+ ( "[[test:File:A.png|12x10px]]", String_.Concat_lines_nl_skip_last
+ ( "
"
+ ));
+ fxt.Wiki().Cfg_parser_lnki_xwiki_repos_enabled_(false); // disable for other tests
+ }
+ @Test public void Xwiki_anchor() {
+ Reg_xwiki_alias("test", "test.wikimedia.org");
+ fxt.Test_parse_page_wiki_str
+ ( "[[test:A#b]]", String_.Concat_lines_nl_skip_last
+ ( "test:A#b"
+ ));
+ }
+ @Test public void Xwiki_empty() {
+ Reg_xwiki_alias("test", "test.wikimedia.org");
+ fxt.Test_parse_page_wiki_str
+ ( "[[test:]]", String_.Concat_lines_nl_skip_last
+ ( "test:"
+ ));
+ }
+ @Test public void Xwiki_empty_literal() {
+ Reg_xwiki_alias("test", "test.wikimedia.org");
+ fxt.Test_parse_page_wiki_str
+ ( "[[:test:]]", String_.Concat_lines_nl_skip_last
+ ( "test:"
+ ));
+ }
+ @Test public void Xwiki_not_registered() {
+ fxt.App().User().Wiki().Xwiki_mgr().Clear();
+ fxt.Wiki().Xwiki_mgr().Add_full(Bry_.new_ascii_("test"), Bry_.new_ascii_("test.wikimedia.org")); // register alias only, but not in user_wiki
+ fxt.Test_parse_page_wiki_str
+ ( "[[test:A|A]]", String_.Concat_lines_nl_skip_last
+ ( "A"
+ ));
+ }
+ @Test public void Literal_lang() {
+ Reg_xwiki_alias("fr", "fr.wikipedia.org");
+ fxt.Test_parse_page_wiki_str
+ ( "[[:fr:A]]", String_.Concat_lines_nl_skip_last
+ ( "A"
+ ));
+ Tfds.Eq(0, fxt.Page().Xwiki_langs().Count());
+ }
+ @Test public void Simple_and_english() { // PURPOSE: s.w xwiki links to en were not working b/c s.w and en had same super lang of English; PAGE:s.q:Anonymous DATE:2014-09-10
+ Xoa_app app = Xoa_app_fxt.app_();
+ Xow_wiki wiki = Xoa_app_fxt.wiki_(app, "simple.wikipedia.org");
+ fxt = new Xop_fxt(app, wiki); // change fxt to simple.wikipedia.org
+ Reg_xwiki_alias("en", "en.wikipedia.org"); // register "en" alias
+ fxt.Test_parse_page_wiki_str // test nothing printed
+ ( "[[en:A]]"
+ , ""
+ );
+ Tfds.Eq(1, fxt.Page().Xwiki_langs().Count()); // test 1 xwiki lang
+ }
+ @Test public void Species_and_commons() { // PURPOSE: species xwiki links to commons should not put link in wikidata langs; PAGE:species:Scarabaeidae DATE:2014-09-10
+ Xoa_app app = Xoa_app_fxt.app_();
+ Xow_wiki wiki = Xoa_app_fxt.wiki_(app, "species.wikimedia.org");
+ fxt = new Xop_fxt(app, wiki); // change fxt to species.wikimedia.org
+ Reg_xwiki_alias("commons", "commons.wikimedia.org"); // register "en" alias
+ fxt.Test_parse_page_wiki_str // test something printed
+ ( "[[commons:A]]"
+ , "commons:A"
+ );
+ Tfds.Eq(0, fxt.Page().Xwiki_langs().Count()); // no xwiki langs
+ }
+ @Test public void Wiktionary_and_wikipedia() { // PURPOSE: do not create xwiki links if same lang and differet type; PAGE:s.d:water DATE:2014-09-14
+ Xoa_app app = Xoa_app_fxt.app_();
+ Xow_wiki wiki = Xoa_app_fxt.wiki_(app, "simple.wiktionary.org");
+ fxt = new Xop_fxt(app, wiki); // change fxt to simple.wiktionary.org
+ Reg_xwiki_alias("w", "simple.wikipedia.org"); // register "w" alias
+ fxt.Test_parse_page_wiki_str // test something printed
+ ( "[[w:A]]"
+ , "w:A"
+ );
+ Tfds.Eq(0, fxt.Page().Xwiki_langs().Count()); // test 0 xwiki lang
+ }
+ @Test public void Species_and_wikipedia() { // PURPOSE: species creates xwiki links to wikipedia; PAGE:species:Puccinia DATE:2014-09-14
+ Xoa_app app = Xoa_app_fxt.app_();
+ Xow_wiki wiki = Xoa_app_fxt.wiki_(app, "species.wikimedia.org");
+ fxt = new Xop_fxt(app, wiki); // change fxt to species.wikimedia.org
+ Reg_xwiki_alias("fr", "fr.wikipedia.org"); // register "fr" alias
+ fxt.Test_parse_page_wiki_str // nothing printed
+ ( "[[fr:A]]"
+ , ""
+ );
+ Tfds.Eq(1, fxt.Page().Xwiki_langs().Count()); // 1 xwiki lang
+ }
+ private void Reg_xwiki_alias(String alias, String domain) {
+ Xop_fxt.Reg_xwiki_alias(fxt.Wiki(), alias, domain);
+ }
+}
diff --git a/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java b/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java
index 65610f7f8..2fac5a9b1 100644
--- a/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java
+++ b/400_xowa/src_490_xnde/gplx/xowa/Xop_xnde_wkr.java
@@ -625,6 +625,7 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr {
case Xop_parser_.Parse_tid_page_wiki: {
Xox_xnde xnde_xtn = null;
int tag_id = tag.Id();
+ boolean escaped = false;
switch (tag_id) {
case Xop_xnde_tag_.Tid_xowa_cmd: xnde_xtn = tkn_mkr.Xnde_xowa_cmd(); break;
case Xop_xnde_tag_.Tid_math: xnde_xtn = tkn_mkr.Xnde_math(); break;
@@ -635,7 +636,14 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr {
case Xop_xnde_tag_.Tid_imageMap: xnde_xtn = tkn_mkr.Xnde_imageMap(); break;
case Xop_xnde_tag_.Tid_hiero: xnde_xtn = tkn_mkr.Xnde_hiero(); break;
case Xop_xnde_tag_.Tid_inputBox: xnde_xtn = tkn_mkr.Xnde_inputbox(); break;
- case Xop_xnde_tag_.Tid_pages: xnde_xtn = tkn_mkr.Xnde_pages(); break;
+ case Xop_xnde_tag_.Tid_pages: {
+ boolean enabled = ctx.Wiki().Xtn_mgr().Xtn_proofread().Enabled();
+ if (enabled)
+ xnde_xtn = tkn_mkr.Xnde_pages();
+ else
+ escaped = true;
+ break;
+ }
case Xop_xnde_tag_.Tid_pagequality: xnde_xtn = tkn_mkr.Xnde_pagequality(); break;
case Xop_xnde_tag_.Tid_pagelist: xnde_xtn = tkn_mkr.Xnde_pagelist(); break;
case Xop_xnde_tag_.Tid_section: xnde_xtn = tkn_mkr.Xnde_section(); break;
@@ -670,6 +678,10 @@ public class Xop_xnde_wkr implements Xop_ctx_wkr {
ctx.Para().Process_block__xnde(tag, Xop_xnde_tag.Block_end);
break;
}
+ if (escaped) {
+ root.Subs_del_after(root.Subs_len() - 1); // since content is escaped, delete xnde_xtn; DATE:2014-09-08
+ return ctx.Lxr_make_txt_(open_end); // return after lhs_end, not entire xnde;
+ }
if (xnde_xtn != null) {
try {
xnde.Xnde_xtn_(xnde_xtn); // NOTE: must set xnde_xtn, else null ref (html_wtr expects non-null nde)
diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3 b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3
index 6778de16f..344a1a0ed 100644
Binary files a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3 and b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3 differ