From ea28172885832b7b3e036ed651b38afaed220a07 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Wed, 25 Sep 2019 23:37:52 -0400 Subject: [PATCH] Parser: Add hdump wkrs [#553] --- .../src/gplx/xowa/addons/Xoax_addon_mgr.java | 3 ++ .../gplx/xowa/htmls/core/Xow_hdump_mgr.java | 4 ++- .../xowa/htmls/core/makes/Xoh_make_mgr.java | 4 +++ .../xowa/htmls/core/wkrs/Xoh_hdoc_parser.java | 3 ++ .../htmls/core/wkrs/tags/Xoh_tag_parser.java | 28 +++++++++++++++++-- 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java index 865ae8403..e49aeb670 100644 --- a/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/Xoax_addon_mgr.java @@ -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() diff --git a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr.java index c1865ee28..d4765ea0f 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr.java @@ -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); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java index d18281c8b..d1cf09e82 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java @@ -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 diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java index 58be5d2b2..b6c4b78f1 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java @@ -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); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java index a5dbb87b0..462da60ac 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java @@ -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"); }