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,7 +19,7 @@ package gplx.xowa.parsers; import gplx.*; import gplx.xowa.*;
import gplx.core.btries.*; import gplx.core.log_msgs.*;
import gplx.xowa.langs.*;
import gplx.xowa.guis.*;
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.xtns.lst.*;
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wbases.*; import gplx.xowa.xtns.lst.*;
import gplx.xowa.parsers.apos.*; import gplx.xowa.parsers.amps.*; import gplx.xowa.parsers.lnkes.*; import gplx.xowa.parsers.hdrs.*; import gplx.xowa.parsers.lists.*; import gplx.xowa.parsers.tblws.*; import gplx.xowa.parsers.paras.*; import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.parsers.tmpls.*;
import gplx.xowa.parsers.logs.*; import gplx.xowa.htmls.modules.popups.keeplists.*;
public class Xop_ctx {

View File

@@ -51,7 +51,7 @@ public class Xop_parser { // NOTE: parsers are reused; do not keep any read-writ
}
public byte[] Parse_text_to_html(Xop_ctx ctx, byte[] src) {
Bry_bfr bfr = Xoa_app_.Utl__bfr_mkr().Get_b512();
Bry_bfr bfr = wiki.Utl__bfr_mkr().Get_b512();
Parse_text_to_html(bfr, ctx, ctx.Page(), false, src);
return bfr.To_bry_and_rls();
}

View File

@@ -16,13 +16,15 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.parsers; import gplx.*; import gplx.xowa.*;
import gplx.core.primitives.*;
import gplx.core.primitives.*; import gplx.core.btries.*;
import gplx.xowa.files.*;
import gplx.xowa.xtns.pfuncs.exprs.*; import gplx.xowa.xtns.math.*;
public class Xop_tmp_mgr {
public Xof_math_itm Math_itm() {return math_itm;} private final Xof_math_itm math_itm = new Xof_math_itm();
public Xof_xfer_itm Xfer_itm() {return xfer_itm;} private final Xof_xfer_itm xfer_itm = new Xof_xfer_itm();
public Number_parser Pfunc_num_parser_0() {return num_parser_0;} private final Number_parser num_parser_0 = new Number_parser().Hex_enabled_(true);
public Number_parser Pfunc_num_parser_1() {return num_parser_1;} private final Number_parser num_parser_1 = new Number_parser().Hex_enabled_(true);
public Gfo_number_parser Pfunc_num_parser_0() {return num_parser_0;} private final Gfo_number_parser num_parser_0 = new Gfo_number_parser().Hex_enabled_(true);
public Gfo_number_parser Pfunc_num_parser_1() {return num_parser_1;} private final Gfo_number_parser num_parser_1 = new Gfo_number_parser().Hex_enabled_(true);
public Pfunc_expr_shunter Expr_shunter() {return expr_shunter;} private final Pfunc_expr_shunter expr_shunter = new Pfunc_expr_shunter();
public Btrie_slim_mgr Xnde__xtn_end() {return xnde__xtn_end;} private final Btrie_slim_mgr xnde__xtn_end = Btrie_slim_mgr.ci_a7(); // NOTE:ci.ascii:MW_const.en; listed XML node names are en
public Btrie_rv Xnde__trv() {return xnde__trv;} private final Btrie_rv xnde__trv = new Btrie_rv();
}

View File

@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.parsers; import gplx.*; import gplx.xowa.*;
// using gplx.langs.jsons;
import gplx.core.primitives.*; import gplx.core.brys.fmtrs.*;
import gplx.xowa.wikis.*; import gplx.core.envs.*;
import gplx.xowa.files.*;
import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.pfuncs.times.*;
import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.pfuncs.times.*; import gplx.xowa.xtns.wbases.hwtrs.*;
public class Xow_parser_mgr {
private final Xowe_wiki wiki; private final Xop_tkn_mkr tkn_mkr;
private Xop_parser anchor_encode_parser;
@@ -35,7 +35,14 @@ public class Xow_parser_mgr {
public Xof_url_bldr Url_bldr() {return url_bldr;} private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2();
public List_adp Time_parser_itms() {return time_parser_itms;} private final List_adp time_parser_itms = List_adp_.New();
public Pft_func_formatdate_bldr Date_fmt_bldr() {return date_fmt_bldr;} private final Pft_func_formatdate_bldr date_fmt_bldr = new Pft_func_formatdate_bldr();
// public Json_parser Wbase_jdoc_parser() {return wbase_jdoc_parser;} private final Json_parser wbase_jdoc_parser = new Json_parser();
public Gfo_number_parser Pp_num_parser() {return pp_num_parser;} private final Gfo_number_parser pp_num_parser = new Gfo_number_parser().Ignore_space_at_end_y_();
public Bry_bfr Wbase__time__bfr() {return wbase__time__bfr;} private final Bry_bfr wbase__time__bfr = Bry_bfr_.New();
public Bry_fmtr Wbase__time__fmtr() {return wbase__time__fmtr;} private final Bry_fmtr wbase__time__fmtr = Bry_fmtr.new_();
public Wdata_hwtr_msgs Wbase__time__msgs() {
if (wbase__time__msgs == null)
wbase__time__msgs = Wdata_hwtr_msgs.new_(wiki.Msg_mgr());
return wbase__time__msgs;
} private Wdata_hwtr_msgs wbase__time__msgs;
public Xop_parser Anchor_encoder() {
if (anchor_encode_parser == null) {
anchor_encode_parser = Xop_parser.new_(wiki, wiki.Parser_mgr().Main().Tmpl_lxr_mgr(), Xop_lxr_mgr.new_anchor_encoder());

View File

@@ -22,7 +22,7 @@ import gplx.xowa.wikis.*; import gplx.xowa.parsers.lnkis.files.*; import gplx.xo
import gplx.xowa.parsers.tmpls.*; import gplx.xowa.parsers.miscs.*;
public class Xop_lnki_wkr implements Xop_ctx_wkr, Xop_arg_wkr {
private Arg_bldr arg_bldr = Arg_bldr.Instance;
private Number_parser number_parser = new Number_parser();
private Gfo_number_parser number_parser = new Gfo_number_parser();
private Sites_regy_mgr sites_regy_mgr;
public void Ctor_ctx(Xop_ctx ctx) {}
public void Page_bgn(Xop_ctx ctx, Xop_root_tkn root) {

View File

@@ -92,7 +92,7 @@ public class Xop_lnki_wkr_ {
else
return bgn_pos;
}
public static void Page_parse(Xop_ctx ctx, byte[] src, Number_parser number_parser, Xop_lnki_tkn lnki, Arg_nde_tkn arg) {
public static void Page_parse(Xop_ctx ctx, byte[] src, Gfo_number_parser number_parser, Xop_lnki_tkn lnki, Arg_nde_tkn arg) {
int val_tkn_bgn = arg.Val_tkn().Src_bgn(), val_tkn_end = arg.Val_tkn().Src_end();
byte[] val_bry = Bry_.Trim(src, val_tkn_bgn, val_tkn_end); // some tkns have trailing space; EX.WWI: [[File:Bombers of WW1.ogg|thumb |thumbtime=3]]
number_parser.Parse(val_bry);
@@ -105,7 +105,7 @@ public class Xop_lnki_wkr_ {
int val_tkn_bgn = arg.Val_tkn().Src_bgn(), val_tkn_end = arg.Val_tkn().Src_end();
return Bry_.Trim(src, val_tkn_bgn, val_tkn_end); // trim trailing space
}
public static void Thumbtime_parse(Xop_ctx ctx, byte[] src, Number_parser number_parser, Xop_lnki_tkn lnki, Arg_nde_tkn arg) {
public static void Thumbtime_parse(Xop_ctx ctx, byte[] src, Gfo_number_parser number_parser, Xop_lnki_tkn lnki, Arg_nde_tkn arg) {
int val_tkn_bgn = arg.Val_tkn().Src_bgn(), val_tkn_end = arg.Val_tkn().Src_end();
long fracs = Time_span_.parse_to_fracs(src, val_tkn_bgn, val_tkn_end, false);
if (fracs == Time_span_.parse_null) {

View File

@@ -308,7 +308,7 @@ public class Xop_lnki_wkr__basic_tst {
Xowe_wiki wiki = fxt.Wiki();
Xoa_ttl ttl = Xoa_ttl.Parse(wiki, Bry_.new_a7("Src")); // simulate requrest for "Src" page
Xoae_page previous_page = Xoae_page.New_test(wiki, ttl);
previous_page.Redirect().Itms__add__article(previous_page.Url(), ttl, null); // simulate redirect from "Src"
previous_page.Redirect_trail().Itms__add__article(previous_page.Url(), ttl, null); // simulate redirect from "Src"
fxt.App().Usere().History_mgr().Add(previous_page); // simulate "Src" already being clicked once; this is the key call
fxt.Wtr_cfg().Lnki_visited_y_();
fxt.Test_parse_page_all_str("[[Src]]" , "<a href=\"/wiki/Src\" class=\"xowa-visited\">Src</a>"); // show [[Src]] as visited since it exists in history

View File

@@ -71,8 +71,9 @@ public class Xop_redirect_mgr {
);
}
public static byte[] Bld_redirect_msg(Xoae_app app, Xowe_wiki wiki, Xopg_redirect_mgr redirect_mgr) {
// NOTE: this assumes that redirect_mgr only has redirect_src, not redirect_trg; note that #REDIRECT [[A]] only adds redirect_src, whereas special redirects add redirect_trg; DATE:2016-07-31
int len = redirect_mgr.Itms__len(); if (len == 0) return Bry_.Empty;
Bry_bfr redirect_bfr = Xoa_app_.Utl__bfr_mkr().Get_b512();
Bry_bfr redirect_bfr = wiki.Utl__bfr_mkr().Get_b512();
boolean dirty = false;
for (int i = 0; i < len; i++) {
Xopg_redirect_itm redirect_itm = redirect_mgr.Itms__get_at(i);

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);
}