Parser: Add hdump wkrs [#553]

pull/620/head
gnosygnu 5 years ago
parent d362597d8f
commit ea28172885

@ -60,6 +60,9 @@ public class Xoax_addon_mgr {
// xtns
, new gplx.xowa.xtns.math .Xomath_addon()
, new gplx.xowa.xtns.template_styles .Template_styles_addon()
, new gplx.xowa.xtns.hieros .Hiero_addon()
, new gplx.xowa.xtns.imaps .Imap_addon()
, new gplx.xowa.xtns.graphs .Graph_addon()
// specials
, new gplx.xowa.addons.wikis.registrys .Wiki_registry_addon()

@ -20,12 +20,14 @@ import gplx.xowa.wikis.data.*;
public class Xow_hdump_mgr {
private final Xoh_page tmp_hpg = new Xoh_page(); private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(255);
private final Io_stream_zip_mgr zip_mgr = new Io_stream_zip_mgr();
private final Ordered_hash wkrs = Ordered_hash_.New_bry();
public Xow_hdump_mgr(Xow_wiki wiki) {
this.save_mgr = new Xow_hdump_mgr__save(wiki, hzip_mgr, zip_mgr, tmp_hpg);
this.load_mgr = new Xow_hdump_mgr__load(wiki, hzip_mgr, zip_mgr, tmp_hpg, tmp_bfr);
}
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 Ordered_hash Wkrs() {return wkrs;}
public Xoh_hzip_mgr Hzip_mgr() {return hzip_mgr;} private final Xoh_hzip_mgr hzip_mgr = new Xoh_hzip_mgr();
public void Init_by_db(Xow_wiki wiki) {
byte dflt_zip_tid = gplx.core.ios.streams.Io_stream_tid_.Tid__raw;
@ -41,7 +43,7 @@ public class Xow_hdump_mgr {
load_mgr.Init_by_wiki(wiki);
}
public void Init_by_db(byte dflt_zip_tid, boolean dflt_hzip_enable, boolean mode_is_b256) {
int dflt_hzip_tid = dflt_hzip_enable ? Xoh_hzip_dict_.Hzip__v1 : Xoh_hzip_dict_.Hzip__none;
int dflt_hzip_tid = dflt_hzip_enable ? Xoh_hzip_dict_.Hdb__hzip : Xoh_hzip_dict_.Hdb__htxt;
save_mgr.Init_by_db(dflt_zip_tid, dflt_hzip_tid, Bool_.N);
}
}

@ -22,6 +22,10 @@ public class Xoh_make_mgr {
Xoh_make_mgr(Xoh_hdoc_wkr hdoc_wkr) {
this.make_parser = new Xoh_hdoc_parser(hdoc_wkr);
}
public Xoh_hdoc_ctx Hctx() {return hctx;}
public void Init_by_wiki(Xow_wiki wiki) {
make_parser.Init_by_wiki(wiki);
}
public byte[] Parse(byte[] src, Xow_wiki wiki, Xoh_page hpg) {
hctx.Init_by_page(wiki, hpg);
hpg.Section_mgr().Add(0, 2, Bry_.Empty, Bry_.Empty).Content_bgn_(0); // +1 to skip \n

@ -31,6 +31,9 @@ public class Xoh_hdoc_parser {
wkr_ary[i] = new Xoh_escape_data(hdoc_wkr, Xoh_pool_mgr__hzip.Hooks_ary[i - 1]);
this.hdoc_parser = new Gfh_doc_parser(new Xoh_txt_parser(hdoc_wkr), wkr_ary);
}
public void Init_by_wiki(Xow_wiki wiki) {
tag_parser.Init_by_wiki(wiki);
}
public void Parse(Xoh_hzip_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src) {
int src_len = src.length;
tag_parser.Init(hctx, src, 0, src_len);

@ -15,7 +15,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.htmls.core.wkrs.tags; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*;
import gplx.core.btries.*; import gplx.core.primitives.*;
import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*;
import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.hdumps.*;
import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*;
import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*;
import gplx.xowa.htmls.core.wkrs.addons.forms.*;
@ -29,8 +29,14 @@ public class Xoh_tag_parser implements Gfh_doc_wkr {
private final Xoh_thm_data wkr__thm = new Xoh_thm_data();
private final Xoh_gly_grp_data wkr__gly = new Xoh_gly_grp_data();
private final Xoh_form_data wkr__form = new Xoh_form_data();
private Ordered_hash hdump_wkrs;
public byte[] Hook() {return Byte_ascii.Angle_bgn_bry;}
public Xoh_tag_parser(Xoh_hdoc_wkr hdoc_wkr) {this.hdoc_wkr = hdoc_wkr;}
public Xoh_tag_parser(Xoh_hdoc_wkr hdoc_wkr) {
this.hdoc_wkr = hdoc_wkr;
}
public void Init_by_wiki(Xow_wiki wiki) {
hdump_wkrs = wiki.Html__hdump_mgr().Wkrs();
}
public void Init(Xoh_hdoc_ctx hctx, byte[] src, int src_bgn, int src_end) {
this.hctx = hctx;
tag_rdr.Init(hctx.Page__url(), src, src_bgn, src_end);
@ -43,9 +49,24 @@ public class Xoh_tag_parser implements Gfh_doc_wkr {
if (cur.Tag_is_tail())
hdoc_wkr.On_txt(pos, cur_end);
else {
int rv = -1;
Gfh_atr hdump_atr = cur.Atrs__get_by_or_empty(Bry__data_xowa_hdump);
if (hdump_atr != Gfh_atr.Noop) {
Xoh_hdump_wkr hdump_wkr = (Xoh_hdump_wkr)hdump_wkrs.Get_by(hdump_atr.Val());
if (hdump_wkr == null) {
tag_rdr.Err_wkr().Warn("unable to find hdump_wkr: " + String_.new_a7(hdump_atr.Val()));
rv = cur_end;
hdoc_wkr.On_txt(pos, rv);
}
else {
rv = hdump_wkr.Process(hdoc_wkr.Bfr(), hctx, hdoc_wkr, tag_rdr, src, cur);
}
return rv;
}
Gfh_tag nxt = null;
int cur_name_id = cur.Name_id();
int rv = -1;
switch (cur_name_id) {
case Gfh_tag_.Id__h2: case Gfh_tag_.Id__h3: case Gfh_tag_.Id__h4: case Gfh_tag_.Id__h5: case Gfh_tag_.Id__h6:
nxt = tag_rdr.Tag__peek_fwd_head();
@ -112,4 +133,5 @@ public class Xoh_tag_parser implements Gfh_doc_wkr {
data.Pool__rls();
return rv;
}
public static byte[] Bry__data_xowa_hdump = Bry_.new_a7("data-xowa-hdump");
}

Loading…
Cancel
Save