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

'v3.8.1.1'

This commit is contained in:
gnosygnu
2016-07-31 21:41:19 -04:00
parent 8e91ac0bc4
commit b0fdf78a41
388 changed files with 3517 additions and 2553 deletions

View File

@@ -19,9 +19,6 @@ package gplx.xowa.parsers.xndes; import gplx.*; import gplx.xowa.*; import gplx.
import gplx.core.primitives.*; import gplx.core.btries.*;
import gplx.xowa.xtns.pfuncs.strings.*;
class Xop_xnde_wkr_ {
private static final Btrie_slim_mgr xtn_end_tag_trie = Btrie_slim_mgr.ci_a7(); // NOTE:ci.ascii:MW_const.en; listed XML node names are en
private static final int Find_xtn_end__tid__bgn = 0, Find_xtn_end__tid__end = 1, Find_xtn_end__tid__xtag = 2;
private static final Int_obj_ref Find_xtn_end__key__bgn = Int_obj_ref.New(Find_xtn_end__tid__bgn), Find_xtn_end__key__end = Int_obj_ref.New(Find_xtn_end__tid__end), Find_xtn_end__key__xtag = Int_obj_ref.New(Find_xtn_end__tid__xtag);
public static void AutoClose_handle_dangling_nde_in_caption(Xop_root_tkn root, Xop_tkn_itm owner) {
int subs_bgn = -1, subs_len = owner.Subs_len();
for (int i = 0; i < subs_len; i++) {
@@ -35,39 +32,38 @@ class Xop_xnde_wkr_ {
root.Subs_move(owner, subs_bgn, subs_len); // move everything after "|" back to root
}
public static int Find_xtn_end(Xop_ctx ctx, byte[] src, int open_end, int src_end, byte[] open_bry, byte[] close_bry) {
synchronized (xtn_end_tag_trie) { // LOCK:static-obj; DATE:2016-07-06
xtn_end_tag_trie.Clear();
xtn_end_tag_trie.Add_obj(Pfunc_tag.Xtag_bgn_lhs, Find_xtn_end__key__xtag);
xtn_end_tag_trie.Add_obj(open_bry, Find_xtn_end__key__bgn);
xtn_end_tag_trie.Add_obj(close_bry, Find_xtn_end__key__end);
int depth = 0;
for (int i = open_end; i < src_end; ++i) {
Object o = xtn_end_tag_trie.Match_bgn(src, i, src_end);
if (o != null) {
int tid = ((Int_obj_ref)o).Val();
switch (tid) {
case Find_xtn_end__tid__bgn: // handle nested refs; PAGE:en.w:UK; DATE:2015-12-26
int angle_end_pos = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, i, src_end); if (angle_end_pos == Bry_find_.Not_found) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not find angle_end: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;}
if (src[angle_end_pos -1] == Byte_ascii.Slash) {}
else
++depth;
break;
case Find_xtn_end__tid__end: // xtn_end found; use it
if (depth == 0)
return i;
else
--depth;
break;
case Find_xtn_end__tid__xtag: // xtag found; skip over it; PAGE:it.s:La_Secchia_rapita/Canto_primo DATE:2015-12-03
int xtag_end = Find_xtag_end(ctx, src, i, src_end);
int angle_end = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, xtag_end, src_end);
i = angle_end;
break;
}
Btrie_slim_mgr xtn_end_tag_trie = ctx.Tmp_mgr().Xnde__xtn_end();
xtn_end_tag_trie.Clear();
xtn_end_tag_trie.Add_obj(Pfunc_tag.Xtag_bgn_lhs, Find_xtn_end__key__xtag);
xtn_end_tag_trie.Add_obj(open_bry, Find_xtn_end__key__bgn);
xtn_end_tag_trie.Add_obj(close_bry, Find_xtn_end__key__end);
int depth = 0;
for (int i = open_end; i < src_end; ++i) {
Object o = xtn_end_tag_trie.Match_at(ctx.Tmp_mgr().Xnde__trv(), src, i, src_end);
if (o != null) {
int tid = ((Int_obj_val)o).Val();
switch (tid) {
case Find_xtn_end__tid__bgn: // handle nested refs; PAGE:en.w:UK; DATE:2015-12-26
int angle_end_pos = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, i, src_end); if (angle_end_pos == Bry_find_.Not_found) {Xoa_app_.Usr_dlg().Warn_many("", "", "parser.xtn: could not find angle_end: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;}
if (src[angle_end_pos -1] == Byte_ascii.Slash) {}
else
++depth;
break;
case Find_xtn_end__tid__end: // xtn_end found; use it
if (depth == 0)
return i;
else
--depth;
break;
case Find_xtn_end__tid__xtag: // xtag found; skip over it; PAGE:it.s:La_Secchia_rapita/Canto_primo DATE:2015-12-03
int xtag_end = Find_xtag_end(ctx, src, i, src_end);
int angle_end = Bry_find_.Find_fwd(src, Byte_ascii.Angle_end, xtag_end, src_end);
i = angle_end;
break;
}
}
return Bry_find_.Not_found;
}
return Bry_find_.Not_found;
}
public static int Find_xtag_end(Xop_ctx ctx, byte[] src, int pos, int src_end) {
int xtag_bgn = pos + Pfunc_tag.Xtag_bgn_lhs.length;
@@ -80,4 +76,9 @@ class Xop_xnde_wkr_ {
rv = Bry_find_.Find_bwd(src, Byte_ascii.Lt, rv - 1); if (rv == Bry_find_.Not_found) {ctx.App().Usr_dlg().Warn_many("", "", "parser.xtn: could not find <: page=~{0}", ctx.Page().Url().To_str()); return Bry_find_.Not_found;}
return rv;
}
private static final int Find_xtn_end__tid__bgn = 0, Find_xtn_end__tid__end = 1, Find_xtn_end__tid__xtag = 2;
private static final Int_obj_val
Find_xtn_end__key__bgn = new Int_obj_val(Find_xtn_end__tid__bgn)
, Find_xtn_end__key__end = new Int_obj_val(Find_xtn_end__tid__end)
, Find_xtn_end__key__xtag = new Int_obj_val(Find_xtn_end__tid__xtag);
}