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

HTML Databases: Make plain-text parser thread-safe; Simplify code; Fix gallery not working [#320]

This commit is contained in:
gnosygnu
2019-01-06 21:27:33 -05:00
parent 2b4320b302
commit 42d15b726c
18 changed files with 91 additions and 137 deletions

View File

@@ -27,9 +27,6 @@ public class Xow_hdump_mgr {
public Xow_hdump_mgr__save Save_mgr() {return save_mgr;} private Xow_hdump_mgr__save save_mgr;
public Xow_hdump_mgr__load Load_mgr() {return load_mgr;} private Xow_hdump_mgr__load load_mgr;
public Xoh_hzip_mgr Hzip_mgr() {return hzip_mgr;} private final Xoh_hzip_mgr hzip_mgr = new Xoh_hzip_mgr();
public void Init_by_app(Xoae_app app) {
save_mgr.Init_by_app(app);
}
public void Init_by_db(Xow_wiki wiki) {
byte dflt_zip_tid = gplx.core.ios.streams.Io_stream_tid_.Tid__raw;
boolean dflt_hzip_enable = false;

View File

@@ -81,8 +81,13 @@ public class Xow_hdump_mgr__load implements Gfo_invk {
src = zip_mgr.Unzip((byte)zip_tid, src);
switch (hzip_tid) {
case Xoh_hzip_dict_.Hzip__none:
case Xoh_hzip_dict_.Hzip__plain:
src = make_mgr.Parse(src, hpg, hpg.Wiki());
break;
// case Xoh_hzip_dict_.Hzip__plain:
// gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader page_loader = new gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader();
// src = page_loader.Parse(wiki, hpg, src);
// break;
case Xoh_hzip_dict_.Hzip__v1:
if (override_mgr__html != null) // null when Parse is called directly
src = override_mgr__html.Get_or_same(hpg.Ttl().Page_db(), src);
@@ -90,10 +95,6 @@ public class Xow_hdump_mgr__load implements Gfo_invk {
src = Decode_as_bry(tmp_bfr.Clear(), hpg, src, Bool_.N);
hpg.Section_mgr().Set_content(hpg.Section_mgr().Len() - 1, src, src.length);
break;
case Xoh_hzip_dict_.Hzip__plain:
gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader page_loader = new gplx.xowa.addons.wikis.pages.syncs.core.loaders.Xosync_page_loader();
src = page_loader.Parse(wiki, hpg, src);
break;
}
return src;
}

View File

@@ -16,18 +16,15 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
package gplx.xowa.htmls.core; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*;
import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.heads.*; import gplx.xowa.htmls.core.dbs.*;
import gplx.core.ios.*; import gplx.core.primitives.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.pages.*;
import gplx.xowa.addons.wikis.pages.syncs.core.*;
import gplx.xowa.addons.wikis.pages.syncs.core.parsers.*;
public class Xow_hdump_mgr__save {
private final Xow_wiki wiki; private final Xoh_hzip_mgr hzip_mgr; private final Io_stream_zip_mgr zip_mgr;
private final Xosync_update_mgr update_mgr = new Xosync_update_mgr();
private final Xosync_hdoc_parser plain_parser = new Xosync_hdoc_parser();
private final Xoh_page tmp_hpg; private final Xoh_hzip_bfr tmp_bfr = Xoh_hzip_bfr.New_txt(32); private Bool_obj_ref html_db_is_new = Bool_obj_ref.n_();
private int dflt_zip_tid, dflt_hzip_tid;
public Xow_hdump_mgr__save(Xow_wiki wiki, Xoh_hzip_mgr hzip_mgr, Io_stream_zip_mgr zip_mgr, Xoh_page tmp_hpg) {
this.wiki = wiki; this.hzip_mgr = hzip_mgr; this.zip_mgr = zip_mgr; this.tmp_hpg = tmp_hpg;
}
public void Init_by_app(Xoae_app app) {
update_mgr.Init_by_app(app);
}
public void Init_by_db(int dflt_zip_tid, int dflt_hzip_tid, boolean mode_is_b256) {
this.dflt_zip_tid = dflt_zip_tid; this.dflt_hzip_tid = dflt_hzip_tid; tmp_bfr.Mode_is_b256_(mode_is_b256);
}
@@ -55,8 +52,7 @@ public class Xow_hdump_mgr__save {
private byte[] Write(Xoh_hzip_bfr bfr, Xow_wiki wiki, Xoae_page page, Xoh_page hpg, Xoh_hzip_mgr hzip_mgr, Io_stream_zip_mgr zip_mgr, int zip_tid, int hzip_tid, byte[] src) {
switch (hzip_tid) {
case Xoh_hzip_dict_.Hzip__none:
update_mgr.Parse(hpg, wiki, page.Url_bry_safe(), src);
src = hpg.Db().Html().Html_bry();
src = plain_parser.Parse_hdoc(wiki.Domain_itm(), page.Url_bry_safe(), hpg.Hdump_mgr().Imgs(), src);
break;
case Xoh_hzip_dict_.Hzip__v1:
src = hzip_mgr.Encode_as_bry((Xoh_hzip_bfr)bfr.Clear(), wiki, hpg, src);

View File

@@ -40,7 +40,6 @@ public class Xob_hdump_bldr implements Gfo_invk {
this.toc_label = wiki.Msg_mgr().Val_by_id(gplx.xowa.langs.msgs.Xol_msg_itm_.Id_toc);
if (zip_tid == Byte_.Max_value_127) zip_tid = Xobldr_cfg.Zip_mode__html(wiki.App());
hdump_mgr.Init_by_app(wiki.Appe());
hdump_mgr.Init_by_db(zip_tid, hzip_enabled, hzip_b256);
return true;
}

View File

@@ -37,6 +37,7 @@ public class Xoh_hdoc_wkr__make implements Xoh_hdoc_wkr {
}
public void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_data data) {
bfr.Add_mid(src, data.Src_bgn(), data.Src_end());
hpg.Xtn__gallery_exists_y_();
}
public boolean Process_parse(Xoh_data_itm data) {
switch (data.Tid()) {

View File

@@ -85,7 +85,7 @@ public class Xoh_img_data implements Xoh_data_itm {
img_alt_bgn = img_alt.Val_bgn(); img_alt_end = img_alt.Val_end();
img_cls.Init_by_parse(err_wkr, src, img_tag); // class='thumbborder'
img_alt__diff_anch_title = !Bry_.Match(src, img_alt_bgn, img_alt_end, src, anch_title_bgn, anch_title_end);
if (!img_src.Parse(err_wkr, hctx, hctx.Wiki__domain_bry(), img_tag)) return false; // src='...'
if (!img_src.Parse(err_wkr, hctx.Wiki__domain_bry(), img_tag)) return false; // src='...'
if (anch_xo_ttl.Val_is_empty()) {
anch_xo_ttl.Val_(img_src.File_ttl_bry());
if (anch_xo_ttl.Val_is_empty())

View File

@@ -47,12 +47,12 @@ public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser {
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) {
public boolean Parse(Bry_err_wkr err_wkr, byte[] domain_bry, Gfh_tag tag) {
this.Clear();
Gfh_atr atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__src);
return Parse(err_wkr, hctx, domain_bry, atr.Src(), atr.Val_bgn(), atr.Val_end());
return Parse(err_wkr, domain_bry, atr.Src(), atr.Val_bgn(), atr.Val_end());
}
public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] domain_bry, byte[] src_bry, int src_bgn, int src_end) { // EX: src="file:///C:/xowa/file/commons.wikimedia.org/thumb/7/0/1/2/A.png/220px.png"
public boolean Parse(Bry_err_wkr err_wkr, byte[] domain_bry, byte[] src_bry, int src_bgn, int src_end) { // EX: src="file:///C:/xowa/file/commons.wikimedia.org/thumb/7/0/1/2/A.png/220px.png"
this.Clear();
this.src_bry = src_bry;
this.src_bgn = src_bgn; this.src_end = src_end;

View File

@@ -61,6 +61,6 @@ class Xoh_img_src_data_fxt extends Xoh_itm_parser_fxt { private final Xoh_im
}
@Override public void Exec_parse_hook(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] src, int src_bgn, int src_end) {
parser.Fail_throws_err_(true);
parser.Parse(err_wkr, new Xoh_hdoc_ctx(), Xow_domain_itm_.Bry__enwiki, src, src_bgn, src_end);
parser.Parse(err_wkr, Xow_domain_itm_.Bry__enwiki, src, src_bgn, src_end);
}
}