1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

'v3.9.4.1'

This commit is contained in:
gnosygnu
2016-09-25 22:05:47 -04:00
parent 35d78f6106
commit e3b393650d
211 changed files with 3148 additions and 2197 deletions

View File

@@ -106,7 +106,7 @@ public class Xoh_page_wtr_wkr {
, portal_mgr.Div_ns_bry(wiki.Utl__bfr_mkr(), page_ttl, wiki.Ns_mgr())
, portal_mgr.Div_view_bry(wiki.Utl__bfr_mkr(), html_gen_tid, page.Html_data().Xtn_search_text())
, portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), new Xopg_xtn_skin_fmtr_arg(page, Xopg_xtn_skin_itm_tid.Tid_sidebar)
, portal_mgr.Div_sync_bry(tmp_bfr, wiki, page)
, portal_mgr.Div_sync_bry(tmp_bfr, app.Api_root().Addon().Bldr().Sync().Manual_enabled(), wiki, page)
, portal_mgr.Div_wikis_bry(wiki.Utl__bfr_mkr())
, portal_mgr.Sidebar_mgr().Html_bry()
, mgr.Edit_rename_div_bry(page_ttl), page.Html_data().Edit_preview_w_dbg(), js_edit_toolbar_bry
@@ -132,9 +132,10 @@ public class Xoh_page_wtr_wkr {
Write_body_edit(bfr, data_raw, page_ns_id, page_tid);
else {
switch (page_tid) {
case Xow_page_tid.Tid_msg:
case Xow_page_tid.Tid_js:
case Xow_page_tid.Tid_css:
case Xow_page_tid.Tid_lua: Write_body_pre (bfr, app, wiki, data_raw, tmp_bfr); page_tid_uses_pre = true; break;
case Xow_page_tid.Tid_lua: Write_body_pre (bfr, app, wiki, hctx, data_raw, tmp_bfr); page_tid_uses_pre = true; break;
case Xow_page_tid.Tid_json: app.Wiki_mgr().Wdata_mgr().Write_json_as_html(bfr, page_ttl.Full_db(), data_raw); break;
case Xow_page_tid.Tid_wikitext: Write_body_wikitext (bfr, app, wiki, data_raw, ctx, hctx, page, page_tid, page_ns_id); break;
}
@@ -154,7 +155,7 @@ public class Xoh_page_wtr_wkr {
}
// dump and exit if MediaWiki message;
if (ns_id == Xow_ns_.Tid__mediawiki) { // if MediaWiki and wikitext, must be a message; convert args back to php; DATE:2014-06-13
bfr.Add(Xoa_gfs_php_mgr.Xto_php(tmp_bfr, Bool_.N, data_raw));
bfr.Add(Gfs_php_converter.Xto_php(tmp_bfr, Bool_.N, data_raw));
return;
}
// if [[File]], add boilerplate header; note that html is XOWA-generated so does not need to be tidied
@@ -175,7 +176,7 @@ public class Xoh_page_wtr_wkr {
}
// if [[Category]], render rest of html (Subcategories; Pages; Files); note that a category may have other html which requires wikitext processing
if (ns_id == Xow_ns_.Tid__category) wiki.Html_mgr().Ns_ctg().Write_catpage(tidy_bfr, wiki, page, hctx);
if (ns_id == Xow_ns_.Tid__category) wiki.Html_mgr().Catpage_mgr().Write_catpage(tidy_bfr, wiki, page, hctx);
// tidy html
wiki.Html_mgr().Tidy_mgr().Exec_tidy(tidy_bfr, !hctx.Mode_is_hdump(), page.Url_bry_safe());
@@ -199,16 +200,19 @@ public class Xoh_page_wtr_wkr {
Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
if (vnt_mgr.Enabled()) bfr.Add(vnt_mgr.Convert_lang().Parse_page(vnt_mgr.Cur_itm(), page.Db().Page().Id(), bfr.To_bry_and_clear()));
}
private void Write_body_pre(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, byte[] data_raw, Bry_bfr tmp_bfr) {
private void Write_body_pre(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xoh_wtr_ctx hctx, byte[] data_raw, Bry_bfr tmp_bfr) {
Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), tmp_bfr, data_raw, 0, data_raw.length, false, false);
app.Html_mgr().Page_mgr().Content_code_fmtr().Bld_bfr_many(bfr, tmp_bfr);
if (hctx.Mode_is_hdump())
bfr.Add(data_raw);
else
app.Html_mgr().Page_mgr().Content_code_fmtr().Bld_bfr_many(bfr, tmp_bfr);
tmp_bfr.Clear();
}
private void Write_body_edit(Bry_bfr bfr, byte[] data_raw, int ns_id, byte page_tid) {
if ( ns_id == Xow_ns_.Tid__mediawiki // if MediaWiki and wikitext, must be a message; convert args back to php; DATE:2014-06-13
&& page_tid == Xow_page_tid.Tid_wikitext
)
data_raw = Xoa_gfs_php_mgr.Xto_php(tmp_bfr, Bool_.N, data_raw);
data_raw = Gfs_php_converter.Xto_php(tmp_bfr, Bool_.N, data_raw);
int data_raw_len = data_raw.length;
if (mgr.Html_capable())
Xoh_html_wtr_escaper.Escape(page.Wikie().Appe().Parser_amp_mgr(), bfr, data_raw, 0, data_raw_len, false, false); // NOTE: must escape; assume that browser will automatically escape (<) (which Mozilla does)

View File

@@ -53,24 +53,19 @@ public class Xow_html_mgr implements Gfo_invk {
public Xop_xatr_whitelist_mgr Whitelist_mgr() {return whitelist_mgr;} private final Xop_xatr_whitelist_mgr whitelist_mgr = new Xop_xatr_whitelist_mgr().Ini();
public Xow_portal_mgr Portal_mgr() {return portal_mgr;} private Xow_portal_mgr portal_mgr;
public Xow_module_mgr Head_mgr() {return module_mgr;} private Xow_module_mgr module_mgr;
public Xoctg_catpage_mgr Catpage_mgr() {return catpage_mgr;} private final Xoctg_catpage_mgr catpage_mgr = new Xoctg_catpage_mgr();
public boolean Importing_ctgs() {return importing_ctgs;} public void Importing_ctgs_(boolean v) {importing_ctgs = v;} private boolean importing_ctgs;
public int Img_thumb_width() {return img_thumb_width;} private int img_thumb_width = 220;
public byte[] Img_xowa_protocol() {return img_xowa_protocol;} private byte[] img_xowa_protocol;
public boolean Img_suppress_missing_src() {return img_suppress_missing_src;} public Xow_html_mgr Img_suppress_missing_src_(boolean v) {img_suppress_missing_src = v; return this;} private boolean img_suppress_missing_src = true;
public Xoctg_catpage_mgr Ns_ctg() {return ns_ctg;} private final Xoctg_catpage_mgr ns_ctg = new Xoctg_catpage_mgr();
public Xoh_imgs_mgr Imgs_mgr() {return imgs_mgr;} private Xoh_imgs_mgr imgs_mgr;
public void Copy_cfg(Xow_html_mgr html_mgr) {imgs_mgr.Copy_cfg(html_mgr.Imgs_mgr());}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_article)) return page_wtr_mgr;
else if (ctx.Match(k, Invk_portal)) return portal_mgr;
else if (ctx.Match(k, Invk_imgs)) return imgs_mgr;
else if (ctx.Match(k, Invk_ns_ctg)) return ns_ctg;
else if (ctx.Match(k, Invk_modules)) return module_mgr;
else return Gfo_invk_.Rv_unhandled;
}
public static final String
Invk_article = "article"
, Invk_portal = "portal", Invk_imgs = "imgs", Invk_ns_ctg = "ns_ctg"
, Invk_modules = "modules"
;
public static final String Invk_article = "article", Invk_portal = "portal", Invk_imgs = "imgs", Invk_modules = "modules";
}

View File

@@ -34,11 +34,12 @@ public class Xow_hdump_mgr__save {
Bld_hdump(page);
tmp_hpg.Ctor_by_hdiff(tmp_bfr, page, page.Wikie().Msg_mgr().Val_by_id(gplx.xowa.langs.msgs.Xol_msg_itm_.Id_toc));
Xow_db_file html_db = Get_html_db(wiki, page, html_db_is_new.Val_n_());
return Save(tmp_hpg, html_db.Tbl__html(), html_db_is_new.Val());
return Save(tmp_hpg, html_db.Tbl__html(), html_db_is_new.Val(), true);
}
}
public int Save(Xoh_page hpg, Xowd_html_tbl html_tbl, boolean insert) {
byte[] db_body = Write(tmp_bfr, wiki, hpg, hzip_mgr, zip_mgr, dflt_zip_tid, dflt_hzip_tid, hpg.Db().Html().Html_bry());
public int Save(Xoh_page hpg, Xowd_html_tbl html_tbl, boolean insert, boolean use_hzip_dflt) {
int hzip_tid = use_hzip_dflt ? dflt_hzip_tid : Xoh_hzip_dict_.Hzip__none;
byte[] db_body = Write(tmp_bfr, wiki, hpg, hzip_mgr, zip_mgr, dflt_zip_tid, hzip_tid, hpg.Db().Html().Html_bry());
if (insert) html_tbl.Insert(hpg, dflt_zip_tid, dflt_hzip_tid, db_body);
else html_tbl.Update(hpg, dflt_zip_tid, dflt_hzip_tid, db_body);
return db_body.length;

View File

@@ -19,7 +19,7 @@ package gplx.xowa.htmls.core.bldrs; import gplx.*; import gplx.xowa.*; import gp
import gplx.core.brys.*; import gplx.dbs.*;
import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; import gplx.xowa.apps.apis.xowa.bldrs.imports.*;
import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.dbs.*;
import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.data.*;
import gplx.xowa.wikis.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.data.*;
import gplx.xowa.parsers.*;
public class Xob_hdump_bldr implements Gfo_invk {
private boolean enabled, hzip_enabled, hzip_diff, hzip_b256; private byte zip_tid = Byte_.Max_value_127;
@@ -52,17 +52,25 @@ public class Xob_hdump_bldr implements Gfo_invk {
wpg.File_queue().Clear(); // need to reset uid to 0, else xowa_file_# will resume from last
// write to html
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_page_.Tid_read).Write_hdump(tmp_bfr, ctx, Xoh_wtr_ctx.Hdump, wpg);
byte[] orig_bry = tmp_bfr.To_bry_and_clear();
wpg.Db().Html().Html_bry_(orig_bry);
Xoa_ttl ttl = wpg.Ttl();
boolean is_wikitext = Xow_page_tid.Identify(wpg.Wiki().Domain_tid(), ttl.Ns().Id(), ttl.Page_db()) == Xow_page_tid.Tid_wikitext;
byte[] orig_bry = Bry_.Empty;
if (is_wikitext) {
wiki.Html_mgr().Page_wtr_mgr().Wkr(Xopg_page_.Tid_read).Write_hdump(tmp_bfr, ctx, Xoh_wtr_ctx.Hdump, wpg);
orig_bry = tmp_bfr.To_bry_and_clear();
wpg.Db().Html().Html_bry_(orig_bry);
}
else { // not wikitext; EX: pages in MediaWiki: ns; DATE:2016-09-12
wpg.Db().Html().Html_bry_(wpg.Db().Text().Text_bry());
}
// save to db
Xowd_html_tbl html_tbl = html_tbl_retriever.Get_html_tbl(wpg.Ttl().Ns(), prv_row_len); // get html_tbl
this.prv_row_len = hdump_mgr.Save_mgr().Save(tmp_hpg.Ctor_by_hdiff(tmp_bfr, wpg, toc_label), html_tbl, true); // save to db
this.prv_row_len = hdump_mgr.Save_mgr().Save(tmp_hpg.Ctor_by_hdiff(tmp_bfr, wpg, toc_label), html_tbl, true, is_wikitext); // save to db
stat_tbl.Insert(tmp_hpg, stat_itm, wpg.Root().Root_src().length, tmp_hpg.Db().Html().Html_bry().length, prv_row_len); // save stats
// run hzip diff if enabled
if (hzip_diff) {
if (hzip_diff && is_wikitext) {
byte[] expd_bry = op_sys_is_wnt ? Bry_.Replace(tmp_bfr, orig_bry, Byte_ascii.Cr_lf_bry, Byte_ascii.Nl_bry) : orig_bry; // tidy adds crlf if wnt
byte[] actl_bry = hdump_mgr.Load_mgr().Decode_as_bry(tmp_bfr, tmp_hpg, hdump_mgr.Save_mgr().Src_as_hzip(), Bool_.Y);
byte[][] diff = Bry_diff_.Diff_1st_line(expd_bry, actl_bry);

View File

@@ -26,6 +26,7 @@ public class Xoh_hdoc_ctx {
public byte[] Fsys__root() {return fsys__root;} private byte[] fsys__root;
public byte[] Fsys__file__comm() {return fsys__file__comm;} private byte[] fsys__file__comm;
public byte[] Fsys__file__wiki() {return fsys__file__wiki;} private byte[] fsys__file__wiki;
public byte[] Fsys__file__math() {return fsys__file__math;} private byte[] fsys__file__math;
public Xof_repo_itm Fsys__repo(boolean local) {return local ? repo_local : repo_remote;} private Xof_repo_itm repo_remote, repo_local;
public boolean Fsys__is_wnt() {return fsys__is_wnt;} private boolean fsys__is_wnt;
public Xoa_app App() {return app;} private Xoa_app app;
@@ -53,6 +54,7 @@ public class Xoh_hdoc_ctx {
this.fsys__root = fsys_mgr.Root_dir().To_http_file_bry();
this.fsys__file = fsys_mgr.File_dir().To_http_file_bry();
this.fsys__file__comm = Bry_.Add(fsys__file, Xow_domain_itm_.Bry__commons, Byte_ascii.Slash_bry);
this.fsys__file__math = Bry_.Add(fsys__file, Bry_.new_a7("math"), Byte_ascii.Slash_bry);
this.fsys__res = gplx.core.envs.Op_sys.Cur().Tid_is_drd() ? Fsys__res__drd : fsys__root;
this.fsys__is_wnt = gplx.core.envs.Op_sys.Cur().Tid_is_wnt();
Xou_cache_mgr usr_cache_mgr = app.User().User_db_mgr().Cache_mgr();

View File

@@ -21,7 +21,7 @@ import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htm
import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.hzips.*;
import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*;
import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.xtns.pagebanners.*;
import gplx.xowa.files.*; import gplx.xowa.files.repos.*;
import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*;
public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
private final Bry_bfr tmp_bfr = Bry_bfr_.New_w_size(32);
private final Xoh_img_xoimg_hzip xoimg = new Xoh_img_xoimg_hzip();
@@ -272,13 +272,16 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm {
// set url_bldr
Xof_url_bldr url_bldr = hctx.File__url_bldr();
url_bldr.Init_by_root(file__repo_is_local ? hctx.Fsys__file__wiki() : hctx.Fsys__file__comm(), hctx.Fsys__is_wnt(), Byte_ascii.Slash, false, false, Md5_depth);
byte repo_tid = file__repo_is_local ? Xof_repo_tid_.Tid__local : Xof_repo_tid_.Tid__remote;
byte[] fsys_root = file__repo_is_local ? hctx.Fsys__file__wiki() : hctx.Fsys__file__comm();
url_bldr.Init_by_repo(repo_tid, fsys_root, hctx.Fsys__is_wnt(), Byte_ascii.Slash, false, false, Md5_depth);
// NOTE: set md5 / ext now b/c src_page will be changed for gui mode
byte[] md5 = Xof_file_wkr_.Md5(src_page);
Xof_ext ext = Xof_ext_.new_by_ttl_(src_page);
if (!hpg.Wiki().File__fsdb_mode().Tid__bld()) // if gui, do not url-encode; else "View HTML" will not work, since fsys uses non-url-decoded form; note needs to be url-encoded else hdiff will return different values
src_page = Xoa_ttl.Replace_spaces(Gfo_url_encoder_.Href.Decode(src_page));
url_bldr.Init_for_trg_html(file__is_orig ? Xof_repo_itm_.Mode_orig : Xof_repo_itm_.Mode_thumb, hctx.Fsys__repo(file__repo_is_local), src_page, md5, ext, file_w, file_time, file_page);
url_bldr.Init_for_trg_html(hctx.Fsys__repo(file__repo_is_local), file__is_orig ? Xof_img_mode_.Tid__orig : Xof_img_mode_.Tid__thumb, src_page, md5, ext, file_w, file_time, file_page);
// set data vars for wtr
data.Init_by_decode(anch_rel_is_nofollow, anch_title_bgn, anch_title_end, img__wo_anch, img__is_vid, img_w, img_h, img_alt_bgn, img_alt_end, img_imap_idx);

View File

@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*;
import gplx.core.brys.*; import gplx.core.btries.*;
import gplx.xowa.files.*;
import gplx.xowa.files.*; import gplx.xowa.files.repos.*;
import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*;
import gplx.xowa.wikis.domains.*;
public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
@@ -29,6 +29,7 @@ public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
public int Repo_bgn() {return repo_bgn;} private int repo_bgn;
public int Repo_end() {return repo_end;} private int repo_end;
public boolean Repo_is_commons() {return repo_is_commons;} private boolean repo_is_commons;
public byte Repo_tid() {return repo_tid;} private byte repo_tid;
public int File_ttl_bgn() {return file_ttl_bgn;} private int file_ttl_bgn;
public int File_ttl_end() {return file_ttl_end;} private int file_ttl_end;
public boolean File_ttl_exists() {return file_ttl_end > file_ttl_bgn;}
@@ -44,6 +45,7 @@ public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
src_bgn = src_end = repo_bgn = repo_end = file_ttl_bgn = file_ttl_end = file_w = file_page = -1;
file_time = -1;
repo_is_commons = file_is_orig = false;
repo_tid = Xof_repo_tid_.Tid__null;
file_ttl_bry = null;
}
public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] domain_bry, Gfh_tag tag) {
@@ -59,14 +61,23 @@ public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
// get repo_bgn; note that some <img> may be hiero / enlarge / magnify and should exit
rdr.Init_by_wkr(err_wkr, "img.src.xowa", src_bgn, src_end).Fail_throws_err_(Bool_.N);
repo_bgn = rdr.Find_fwd_rr(Bry__file); // skip past /file/; EX: "file:///J:/xowa/file/commons.wikimedia.org/"
if (repo_bgn == -1) return false;
repo_bgn = rdr.Find_fwd_rr(Bry__file);
if (repo_bgn == -1) {
repo_bgn = rdr.Find_fwd_rr(Bry__math);
if (repo_bgn == Bry_find_.Not_found) return false;
this.file_ttl_bry = Bry_.Mid(rdr.Src(), repo_bgn, src_end);
this.repo_is_commons = true;
this.repo_tid = Xof_repo_tid_.Tid__math;
this.file_is_orig = true;
return true;
}
rdr.Fail_throws_err_(Bool_.Y);
// get repo
repo_end = rdr.Find_fwd_lr();
repo_is_commons = Bry_.Match(rdr.Src(), repo_bgn, repo_end, Xow_domain_itm_.Bry__commons);
repo_tid = repo_is_commons ? Xof_repo_tid_.Tid__remote : Xof_repo_tid_.Tid__local;
if (!repo_is_commons) {
if (!Bry_.Match(rdr.Src(), repo_bgn, repo_end, domain_bry)) rdr.Err_wkr().Fail("repo must be commons or self", "repo", Bry_.Mid(rdr.Src(), repo_bgn, repo_end));
}
@@ -120,7 +131,7 @@ public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
}
return rdr.Move_to(pos);
}
private static final byte[] Bry__file = Bry_.new_a7("/file/"), Bry__orig = Bry_.new_a7("orig/"), Bry__thumb = Bry_.new_a7("thumb/");
private static final byte[] Bry__file = Bry_.new_a7("/file/"), Bry__math = Bry_.new_a7("/math/"), Bry__orig = Bry_.new_a7("orig/"), Bry__thumb = Bry_.new_a7("thumb/");
private static final byte Tid__orig = 1, Tid__thumb = 2;
private static final Btrie_slim_mgr trie = Btrie_slim_mgr.cs().Add_bry_byte(Bry__orig, Tid__orig).Add_bry_byte(Bry__thumb, Tid__thumb);
}

View File

@@ -106,15 +106,14 @@ public class Xow_portal_mgr implements Gfo_invk {
} public static final byte[] Cls_selected_y = Bry_.new_a7("selected"), Cls_new = Bry_.new_a7("new"), Cls_display_none = Bry_.new_a7("xowa_display_none");
public byte[] Div_logo_bry() {return div_logo_bry;} private byte[] div_logo_bry = Bry_.Empty;
public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty;
public byte[] Div_sync_bry(Bry_bfr tmp_bfr, Xow_wiki wiki, Xoa_page page) {
public byte[] Div_sync_bry(Bry_bfr tmp_bfr, boolean manual_enabled, Xow_wiki wiki, Xoa_page page) {
// only show update_html if wmf; DATE:2016-08-31
switch (wiki.Domain_itm().Domain_type().Src()) {
case Xow_domain_tid.Src__wmf:
div_sync_fmtr.Bld_bfr_many(tmp_bfr, page.Ttl().Full_url());
return tmp_bfr.To_bry_and_clear();
default:
return Bry_.Empty;
if ( wiki.Domain_itm().Domain_type().Src() == Xow_domain_tid.Src__wmf
&& manual_enabled) {
div_sync_fmtr.Bld_bfr_many(tmp_bfr, page.Ttl().Full_url());
return tmp_bfr.To_bry_and_clear();
}
return Bry_.Empty;
}
public byte[] Div_wikis_bry(Bry_bfr_mkr bfr_mkr) {
if (toggle_itm == null) // TEST:lazy-new b/c Init_by_wiki