mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Xtn.Math: Swap out math tags with UNIQ
This commit is contained in:
parent
2a0b5769ad
commit
1e28aa6e79
@ -32,7 +32,7 @@ public class Xoa_app_ {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static final String Name = "xowa";
|
public static final String Name = "xowa";
|
||||||
public static final String Version = "3.11.2.8";
|
public static final String Version = "3.11.2.9";
|
||||||
public static String Build_date = "2012-12-30 00:00:00";
|
public static String Build_date = "2012-12-30 00:00:00";
|
||||||
public static String Op_sys_str;
|
public static String Op_sys_str;
|
||||||
public static String User_agent = "";
|
public static String User_agent = "";
|
||||||
|
@ -417,6 +417,18 @@ public class Xop_fxt {
|
|||||||
Xol_kwd_grp kwd_grp = kwd_mgr.Get_or_new(kwd_id);
|
Xol_kwd_grp kwd_grp = kwd_mgr.Get_or_new(kwd_id);
|
||||||
kwd_grp.Srl_load(case_match, Bry_.Ary(kwds));
|
kwd_grp.Srl_load(case_match, Bry_.Ary(kwds));
|
||||||
}
|
}
|
||||||
|
public void Init_lang_vnts(String... vnts) {
|
||||||
|
wiki.Lang().Vnt_mgr().Enabled_(true);
|
||||||
|
gplx.xowa.langs.vnts.Xol_vnt_regy vnt_regy = wiki.Lang().Vnt_mgr().Regy();
|
||||||
|
for (int i = 0; i < vnts.length; i++) {
|
||||||
|
byte[] vnt = Bry_.new_u8(vnts[i]);
|
||||||
|
vnt_regy.Add(vnt, vnt);
|
||||||
|
if (i == 0) {
|
||||||
|
wiki.Lang().Vnt_mgr().Cur_itm_(vnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wiki.Lang().Vnt_mgr().Init_end();
|
||||||
|
}
|
||||||
public void Init_xtn_pages() {
|
public void Init_xtn_pages() {
|
||||||
Io_mgr.Instance.InitEngine_mem();
|
Io_mgr.Instance.InitEngine_mem();
|
||||||
wiki.Xtn_mgr().Xtn_proofread().Enabled_y_();
|
wiki.Xtn_mgr().Xtn_proofread().Enabled_y_();
|
||||||
@ -440,4 +452,17 @@ public class Xop_fxt {
|
|||||||
// Tfds.Dbg(tmp_bfr.To_str());
|
// Tfds.Dbg(tmp_bfr.To_str());
|
||||||
return tmp_bfr.To_str_and_clear();
|
return tmp_bfr.To_str_and_clear();
|
||||||
}
|
}
|
||||||
|
public void Test__parse_to_html_mgr(String src_str, String expd) {
|
||||||
|
byte[] src_bry = Bry_.new_u8(src_str);
|
||||||
|
Xop_root_tkn root = Exec_parse_page_all_as_root(src_bry);
|
||||||
|
Xoae_page page = this.Page();
|
||||||
|
page.Root_(root);
|
||||||
|
byte[] actl = wiki.Html_mgr().Page_wtr_mgr().Gen(page, gplx.xowa.wikis.pages.Xopg_page_.Tid_read);
|
||||||
|
Tfds.Eq_str_lines(expd, String_.new_u8(actl));
|
||||||
|
}
|
||||||
|
public static Xop_fxt New_app_html() {
|
||||||
|
Xop_fxt fxt = new Xop_fxt();
|
||||||
|
fxt.Wiki().Html_mgr().Page_wtr_mgr().Page_read_fmtr().Fmt_("~{page_data}");
|
||||||
|
return fxt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,4 +30,18 @@ public class Xoh_page_wtr_mgr_tst {
|
|||||||
page_wtr_mgr.Gen(wiki.Parser_mgr().Ctx().Page(), Xopg_page_.Tid_read);
|
page_wtr_mgr.Gen(wiki.Parser_mgr().Ctx().Page(), Xopg_page_.Tid_read);
|
||||||
Tfds.Eq(String_.new_a7(portal_mgr.Div_logo_bry()), "/site/en.wikipedia.org/wiki/");
|
Tfds.Eq(String_.new_a7(portal_mgr.Div_logo_bry()), "/site/en.wikipedia.org/wiki/");
|
||||||
}
|
}
|
||||||
|
@Test public void Skip__math__basic() {
|
||||||
|
Xop_fxt fxt = Xop_fxt.New_app_html();
|
||||||
|
fxt.Init_lang_vnts("zh-hans", "zh-hant");
|
||||||
|
|
||||||
|
fxt.Test__parse_to_html_mgr(String_.Concat_lines_nl_skip_last
|
||||||
|
( "<math>x_{1}-1</math>"
|
||||||
|
, "<math>x-{1+2}-1</math>"
|
||||||
|
, "-{zh-hans:A;zh-hant:B;}-"
|
||||||
|
), String_.Concat_lines_nl_skip_last
|
||||||
|
( "<span id='xowa_math_txt_0'>x_{1}-1</span>" // not converted
|
||||||
|
, "<span id='xowa_math_txt_0'>x-{1+2}-1</span>" // not converted
|
||||||
|
, "A" // converted
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,6 +207,9 @@ public class Xoh_page_wtr_wkr {
|
|||||||
// translate if variants are enabled
|
// translate if variants are enabled
|
||||||
Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
|
Xol_vnt_mgr vnt_mgr = wiki.Lang().Vnt_mgr();
|
||||||
if (vnt_mgr.Enabled()) bfr.Add(vnt_mgr.Convert_lang().Parse_page(vnt_mgr.Cur_itm(), page.Db().Page().Id(), bfr.To_bry_and_clear()));
|
if (vnt_mgr.Enabled()) bfr.Add(vnt_mgr.Convert_lang().Parse_page(vnt_mgr.Cur_itm(), page.Db().Page().Id(), bfr.To_bry_and_clear()));
|
||||||
|
|
||||||
|
// handle uniqs
|
||||||
|
wiki.Parser_mgr().Uniq_mgr().Parse(bfr);
|
||||||
}
|
}
|
||||||
private void Write_body_pre(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xoh_wtr_ctx hctx, byte[] data_raw, Bry_bfr tmp_bfr) {
|
private void Write_body_pre(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xoh_wtr_ctx hctx, byte[] data_raw, Bry_bfr tmp_bfr) {
|
||||||
Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), tmp_bfr, data_raw, 0, data_raw.length, false, false);
|
Xoh_html_wtr_escaper.Escape(app.Parser_amp_mgr(), tmp_bfr, data_raw, 0, data_raw.length, false, false);
|
||||||
|
@ -320,13 +320,6 @@ public class Xoh_html_wtr_tst {
|
|||||||
fxt.Test_parse_page_wiki_str("<div id='a*'></div>", "<div id='a.2A'></div>");
|
fxt.Test_parse_page_wiki_str("<div id='a*'></div>", "<div id='a.2A'></div>");
|
||||||
fxt.Test_parse_page_wiki_str("<div id='a b'></div>", "<div id='a_b'></div>");
|
fxt.Test_parse_page_wiki_str("<div id='a b'></div>", "<div id='a_b'></div>");
|
||||||
}
|
}
|
||||||
@Test public void Math() {
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
|
||||||
fxt.Test_parse_page_all_str("<math>x + y</math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'>x + y</span>"); // latex has img
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
|
||||||
fxt.Test_parse_page_all_str("<math>x + y</math>", "<span id='xowa_math_txt_0'>x + y</span>"); // mathjax has no img
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
|
||||||
}
|
|
||||||
@Test public void Timeline() {// PURPOSE: embed timeline contents in pre; DATE:2014-05-22
|
@Test public void Timeline() {// PURPOSE: embed timeline contents in pre; DATE:2014-05-22
|
||||||
fxt.Test_parse_page_wiki_str("<timeline>a</timeline>", "<pre class='xowa-timeline'>a</pre>");
|
fxt.Test_parse_page_wiki_str("<timeline>a</timeline>", "<pre class='xowa-timeline'>a</pre>");
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,7 @@ public class Xow_popup_parser {
|
|||||||
parser.Parse_to_src_end(wtxt_root, wtxt_ctx, tkn_mkr, wrdx_bry, wtxt_trie, Xop_parser_.Doc_bgn_bos, wrdx_bry.length);
|
parser.Parse_to_src_end(wtxt_root, wtxt_ctx, tkn_mkr, wrdx_bry, wtxt_trie, Xop_parser_.Doc_bgn_bos, wrdx_bry.length);
|
||||||
wtxt_ctx.Parser__page_term(wtxt_root, wrdx_bry, wrdx_bry.length);
|
wtxt_ctx.Parser__page_term(wtxt_root, wrdx_bry, wrdx_bry.length);
|
||||||
wiki.Html_mgr().Html_wtr().Write_doc(wrdx_bfr, wtxt_ctx, hctx, wrdx_bry, wtxt_root);
|
wiki.Html_mgr().Html_wtr().Write_doc(wrdx_bfr, wtxt_ctx, hctx, wrdx_bry, wtxt_root);
|
||||||
|
wiki.Parser_mgr().Uniq_mgr().Parse(wrdx_bfr);
|
||||||
}
|
}
|
||||||
private void Adjust_wrdx_end(Xow_popup_itm popup_itm, Bry_bfr wrdx_bfr) {
|
private void Adjust_wrdx_end(Xow_popup_itm popup_itm, Bry_bfr wrdx_bfr) {
|
||||||
popup_itm.Words_found_(data.Words_found());
|
popup_itm.Words_found_(data.Words_found());
|
||||||
|
@ -20,6 +20,7 @@ import gplx.core.primitives.*; import gplx.core.brys.fmtrs.*;
|
|||||||
import gplx.xowa.wikis.*; import gplx.core.envs.*;
|
import gplx.xowa.wikis.*; import gplx.core.envs.*;
|
||||||
import gplx.xowa.files.*;
|
import gplx.xowa.files.*;
|
||||||
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wbases.hwtrs.*; import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.xtns.pfuncs.times.*; import gplx.xowa.xtns.pfuncs.ttls.*;
|
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.wbases.hwtrs.*; import gplx.xowa.xtns.pfuncs.ifs.*; import gplx.xowa.xtns.pfuncs.times.*; import gplx.xowa.xtns.pfuncs.ttls.*;
|
||||||
|
import gplx.xowa.parsers.uniqs.*;
|
||||||
public class Xow_parser_mgr {
|
public class Xow_parser_mgr {
|
||||||
private final Xowe_wiki wiki; private final Xop_tkn_mkr tkn_mkr;
|
private final Xowe_wiki wiki; private final Xop_tkn_mkr tkn_mkr;
|
||||||
public Xow_parser_mgr(Xowe_wiki wiki) {
|
public Xow_parser_mgr(Xowe_wiki wiki) {
|
||||||
@ -37,6 +38,7 @@ public class Xow_parser_mgr {
|
|||||||
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 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 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 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 int[] Rel2abs_ary() {return rel2abs_ary;} private final int[] rel2abs_ary = new int[Pfunc_rel2abs.Ttl_max];
|
public int[] Rel2abs_ary() {return rel2abs_ary;} private final int[] rel2abs_ary = new int[Pfunc_rel2abs.Ttl_max];
|
||||||
|
public Xop_uniq_mgr Uniq_mgr() {return uniq_mgr;} private final Xop_uniq_mgr uniq_mgr = new Xop_uniq_mgr();
|
||||||
public boolean Lst__recursing() {return lst_recursing;} private boolean lst_recursing; public void Lst__recursing_(boolean v) {lst_recursing = v;}
|
public boolean Lst__recursing() {return lst_recursing;} private boolean lst_recursing; public void Lst__recursing_(boolean v) {lst_recursing = v;}
|
||||||
public Bry_bfr Wbase__time__bfr() {return wbase__time__bfr;} private final Bry_bfr wbase__time__bfr = Bry_bfr_.New();
|
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 Bry_fmtr Wbase__time__fmtr() {return wbase__time__fmtr;} private final Bry_fmtr wbase__time__fmtr = Bry_fmtr.new_();
|
||||||
@ -76,6 +78,7 @@ public class Xow_parser_mgr {
|
|||||||
if (!Env_.Mode_testing()) wiki.Init_assert();
|
if (!Env_.Mode_testing()) wiki.Init_assert();
|
||||||
tmpl_stack_ary = Bry_.Ary_empty;
|
tmpl_stack_ary = Bry_.Ary_empty;
|
||||||
tmpl_stack_ary_len = tmpl_stack_ary_max = 0;
|
tmpl_stack_ary_len = tmpl_stack_ary_max = 0;
|
||||||
|
uniq_mgr.Clear();
|
||||||
|
|
||||||
scrib.When_page_changed(page); // notify scribunto about page changed
|
scrib.When_page_changed(page); // notify scribunto about page changed
|
||||||
ctx.Page_(page);
|
ctx.Page_(page);
|
||||||
|
@ -31,6 +31,11 @@ public class Xop_uniq_mgr { // REF.MW:/parser/StripState.php
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
public byte[] Get(byte[] key) {return (byte[])general_trie.Match_exact(key, 0, key.length);}
|
public byte[] Get(byte[] key) {return (byte[])general_trie.Match_exact(key, 0, key.length);}
|
||||||
|
public void Parse(Bry_bfr bfr) {
|
||||||
|
if (general_trie.Count() == 0) return;
|
||||||
|
byte[] rv = Parse(key_bfr, general_trie, bfr.To_bry_and_clear());
|
||||||
|
bfr.Add(rv);
|
||||||
|
}
|
||||||
public byte[] Parse(byte[] src) {return Parse(key_bfr, general_trie, src);}
|
public byte[] Parse(byte[] src) {return Parse(key_bfr, general_trie, src);}
|
||||||
private byte[] Parse(Bry_bfr bfr, Btrie_slim_mgr trie, byte[] src) {
|
private byte[] Parse(Bry_bfr bfr, Btrie_slim_mgr trie, byte[] src) {
|
||||||
int src_len = src.length;
|
int src_len = src.length;
|
||||||
|
@ -184,6 +184,5 @@ public class Vnt_convert_lang {
|
|||||||
private static final Btrie_fast_mgr trie = Btrie_fast_mgr.cs()
|
private static final Btrie_fast_mgr trie = Btrie_fast_mgr.cs()
|
||||||
.Add_bry_byte(Bry__curly_bgn, Tid__curly_bgn)
|
.Add_bry_byte(Bry__curly_bgn, Tid__curly_bgn)
|
||||||
.Add_bry_byte(Bry__curly_end, Tid__curly_end);
|
.Add_bry_byte(Bry__curly_end, Tid__curly_end);
|
||||||
public static final byte[] Bry__armor_bgn = Bry_.new_a7("-{R|"), Bry__armor_end = Bry_.new_a7("}-");
|
|
||||||
private static final int max_depth = 32;
|
private static final int max_depth = 32;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
package gplx.xowa.parsers.xndes; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*;
|
package gplx.xowa.parsers.xndes; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*;
|
||||||
import org.junit.*; import gplx.xowa.wikis.nss.*;
|
import org.junit.*; import gplx.xowa.wikis.nss.*;
|
||||||
public class Xop_xnde_wkr__basic_tst {
|
public class Xop_xnde_wkr__basic_tst {
|
||||||
private final Xop_fxt fxt = new Xop_fxt();
|
private final Xop_fxt fxt = new Xop_fxt();
|
||||||
@After public void term() {fxt.Init_para_n_();}
|
@After public void term() {fxt.Init_para_n_();}
|
||||||
@Test public void Escape_lt() { // PURPOSE: some templates have unknown tags; PAGE:en.w:PHP
|
@Test public void Escape_lt() { // PURPOSE: some templates have unknown tags; PAGE:en.w:PHP
|
||||||
fxt.Init_para_y_();
|
fxt.Init_para_y_();
|
||||||
@ -103,9 +103,9 @@ public class Xop_xnde_wkr__basic_tst {
|
|||||||
}
|
}
|
||||||
@Test public void CaseSensitivity_xtn_3() {// PURPOSE: xtn xnde must do case-insensitive match DATE:2013-12-02
|
@Test public void CaseSensitivity_xtn_3() {// PURPOSE: xtn xnde must do case-insensitive match DATE:2013-12-02
|
||||||
fxt.Test_parse_page_all_str
|
fxt.Test_parse_page_all_str
|
||||||
( "<matH>a</math> b <math>c</matH>" // <matH> should match </math> not </matH>
|
( "<translatE>a</translate> b <translate>c</translatE>" // <translatE> should match </translate> not </translatE>
|
||||||
, "<span id='xowa_math_txt_0'>a</span> b <span id='xowa_math_txt_0'>c</span>"
|
, "a b c"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@Test public void Whitelist() {
|
@Test public void Whitelist() {
|
||||||
fxt.Test_parse_page_all_str("<span onload='alert()'></span>", "<span></span>");
|
fxt.Test_parse_page_all_str("<span onload='alert()'></span>", "<span></span>");
|
||||||
@ -122,11 +122,6 @@ public class Xop_xnde_wkr__basic_tst {
|
|||||||
@Test public void Script_in_syntaxhighlight() {
|
@Test public void Script_in_syntaxhighlight() {
|
||||||
fxt.Test_parse_page_all_str("<syntaxhighlight><script>alert('fail');</script></syntaxhighlight>", "<div class=\"mw-highlight\"><pre style=\"overflow:auto\"><script>alert('fail');</script></pre></div>");
|
fxt.Test_parse_page_all_str("<syntaxhighlight><script>alert('fail');</script></syntaxhighlight>", "<div class=\"mw-highlight\"><pre style=\"overflow:auto\"><script>alert('fail');</script></pre></div>");
|
||||||
}
|
}
|
||||||
@Test public void Script_in_math() {
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
|
||||||
fxt.Test_parse_page_all_str("<math><script>alert('fail');</script></math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'><script>alert('fail');</script></span>");
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
|
||||||
}
|
|
||||||
@Test public void Html5_time() {// PURPOSE: HTML5; should output self (i.e.: must be whitelisted)
|
@Test public void Html5_time() {// PURPOSE: HTML5; should output self (i.e.: must be whitelisted)
|
||||||
fxt.Test_parse_page_wiki_str("<time class=\"dtstart\" datetime=\"2010-10-10\">10 October 2010</time>", "<time class=\"dtstart\" datetime=\"2010-10-10\">10 October 2010</time>");
|
fxt.Test_parse_page_wiki_str("<time class=\"dtstart\" datetime=\"2010-10-10\">10 October 2010</time>", "<time class=\"dtstart\" datetime=\"2010-10-10\">10 October 2010</time>");
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import gplx.core.brys.fmtrs.*;
|
|||||||
import gplx.xowa.htmls.*; import gplx.langs.htmls.entitys.*; import gplx.xowa.htmls.core.htmls.*;
|
import gplx.xowa.htmls.*; import gplx.langs.htmls.entitys.*; import gplx.xowa.htmls.core.htmls.*;
|
||||||
import gplx.xowa.parsers.*; import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.vnts.*;
|
import gplx.xowa.parsers.*; import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.vnts.*;
|
||||||
public class Xof_math_html_wtr {
|
public class Xof_math_html_wtr {
|
||||||
|
public static final byte[] Bry__id_prefix = Bry_.new_a7("xowa_math_txt_");
|
||||||
private final Bry_fmtr math_fmtr_latex = Bry_fmtr.new_("<img id='xowa_math_img_~{math_idx}' src='' width='' height=''/><span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "math_idx", "math_text");
|
private final Bry_fmtr math_fmtr_latex = Bry_fmtr.new_("<img id='xowa_math_img_~{math_idx}' src='' width='' height=''/><span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "math_idx", "math_text");
|
||||||
private final Bry_fmtr math_fmtr_mathjax = Bry_fmtr.new_("<span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "math_idx", "math_text");
|
private final Bry_fmtr math_fmtr_mathjax = Bry_fmtr.new_("<span id='xowa_math_txt_~{math_idx}'>~{math_text}</span>", "math_idx", "math_text");
|
||||||
public void Write(Xoh_html_wtr wtr, Xop_ctx ctx, Xoh_wtr_ctx opts, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) {
|
public void Write(Xoh_html_wtr wtr, Xop_ctx ctx, Xoh_wtr_ctx opts, Bry_bfr bfr, byte[] src, Xop_xnde_tkn xnde) {
|
||||||
@ -45,12 +46,16 @@ public class Xof_math_html_wtr {
|
|||||||
private void Write_for_mathjax(Bry_bfr bfr, Xoae_page page, boolean enabled, boolean renderer_is_latex, byte[] math_bry, Bry_bfr tmp_bfr, Xof_math_itm math_itm) {
|
private void Write_for_mathjax(Bry_bfr bfr, Xoae_page page, boolean enabled, boolean renderer_is_latex, byte[] math_bry, Bry_bfr tmp_bfr, Xof_math_itm math_itm) {
|
||||||
int id = page.File_math().Count();
|
int id = page.File_math().Count();
|
||||||
Xof_math_itm new_math_itm = math_itm.Clone().Id_(id);
|
Xof_math_itm new_math_itm = math_itm.Clone().Id_(id);
|
||||||
|
|
||||||
|
// boolean armor_math = page.Lang().Vnt_mgr().Enabled() && !renderer_is_latex; // REF.MW:LangConverter.php|armourMath
|
||||||
|
// if (armor_math) bfr.Add(Vnt_convert_lang.Bry__armor_bgn);
|
||||||
|
// bfr.Add_bfr_and_clear(tmp_bfr);
|
||||||
|
// if (armor_math) bfr.Add(Vnt_convert_lang.Bry__armor_end);
|
||||||
|
byte[] unique_bry = page.Wikie().Parser_mgr().Uniq_mgr().Add(math_bry);
|
||||||
Bry_fmtr math_fmtr = renderer_is_latex ? math_fmtr_latex : math_fmtr_mathjax;
|
Bry_fmtr math_fmtr = renderer_is_latex ? math_fmtr_latex : math_fmtr_mathjax;
|
||||||
boolean armor_math = page.Lang().Vnt_mgr().Enabled() && !renderer_is_latex; // REF.MW:LangConverter.php|armourMath
|
math_fmtr.Bld_bfr_many(tmp_bfr, id, unique_bry);
|
||||||
if (armor_math) bfr.Add(Vnt_convert_lang.Bry__armor_bgn);
|
|
||||||
math_fmtr.Bld_bfr_many(tmp_bfr, id, math_bry);
|
|
||||||
bfr.Add_bfr_and_clear(tmp_bfr);
|
bfr.Add_bfr_and_clear(tmp_bfr);
|
||||||
if (armor_math) bfr.Add(Vnt_convert_lang.Bry__armor_end);
|
|
||||||
if (enabled && renderer_is_latex) // NOTE: only generate images if math is enabled; otherwise "downloading" prints at bottom of screen, but no action (also a lot of file IO)
|
if (enabled && renderer_is_latex) // NOTE: only generate images if math is enabled; otherwise "downloading" prints at bottom of screen, but no action (also a lot of file IO)
|
||||||
page.File_math().Add(new_math_itm);
|
page.File_math().Add(new_math_itm);
|
||||||
}
|
}
|
||||||
|
@ -18,24 +18,33 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
package gplx.xowa.xtns.math; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*;
|
package gplx.xowa.xtns.math; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*;
|
||||||
import org.junit.*;
|
import org.junit.*;
|
||||||
public class Xof_math_mgr_html_tst {
|
public class Xof_math_mgr_html_tst {
|
||||||
@Before public void init() {} private final Xop_fxt fxt = new Xop_fxt();
|
@Before public void init() {} private final Xop_fxt fxt = Xop_fxt.New_app_html();
|
||||||
@Test public void Escape_lt_gt_mathjax() { // PURPOSE: escape <>&"; EX:de.w:Vergleich_(Zahlen); DATE:2014-05-10; PAGE:s.w:Matrix_(mathematics) DATE:2014-07-19
|
@Test public void Basic__latex() {
|
||||||
fxt.Test_html_full_str("<math>a<>b</math>", "<span id='xowa_math_txt_0'>a<>b</span>");
|
|
||||||
}
|
|
||||||
@Test public void Escape_lt_gt_latex() {
|
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
||||||
fxt.Test_html_full_str("<math>a<>b</math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'>a<>b</span>");
|
fxt.Test__parse_to_html_mgr("<math>x + y</math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'>x + y</span>"); // latex has img
|
||||||
|
}
|
||||||
|
@Test public void Basic__mathjax() {
|
||||||
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
||||||
|
fxt.Test__parse_to_html_mgr("<math>x + y</math>", "<span id='xowa_math_txt_0'>x + y</span>"); // mathjax has no img
|
||||||
|
}
|
||||||
|
@Test public void Escape__mathjax() { // PURPOSE: escape <>&"; EX:de.w:Vergleich_(Zahlen); DATE:2014-05-10; PAGE:s.w:Matrix_(mathematics) DATE:2014-07-19
|
||||||
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
||||||
|
fxt.Test__parse_to_html_mgr("<math>a<>b</math>", "<span id='xowa_math_txt_0'>a<>b</span>");
|
||||||
|
}
|
||||||
|
@Test public void Escape__latex() {
|
||||||
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
||||||
|
fxt.Test__parse_to_html_mgr("<math>a<>b</math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'>a<>b</span>");
|
||||||
}
|
}
|
||||||
@Test public void Amp() { // PURPOSE: assert that amp is not escaped; DATE:2014-07-20
|
@Test public void Amp() { // PURPOSE: assert that amp is not escaped; DATE:2014-07-20
|
||||||
fxt.Test_html_full_str("<math>a&b</math>", "<span id='xowa_math_txt_0'>a&b</span>");
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
||||||
|
fxt.Test__parse_to_html_mgr("<math>a&b</math>", "<span id='xowa_math_txt_0'>a&b</span>");
|
||||||
}
|
}
|
||||||
@Test public void Quote() { // PURPOSE: assert that quote is not escaped; DATE:2014-07-20
|
@Test public void Quote() { // PURPOSE: assert that quote is not escaped; DATE:2014-07-20
|
||||||
fxt.Test_html_full_str("<math>a\"b</math>", "<span id='xowa_math_txt_0'>a\"b</span>");
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(true);
|
||||||
|
fxt.Test__parse_to_html_mgr("<math>a\"b</math>", "<span id='xowa_math_txt_0'>a\"b</span>");
|
||||||
}
|
}
|
||||||
@Test public void Vnt() { // PURPOSE: if vnt, armor math; PAGE:sr.w:Земља; DATE:2015-10-11
|
@Test public void Script() {
|
||||||
fxt.Wiki().Lang().Vnt_mgr().Enabled_(Bool_.Y);
|
fxt.App().File_mgr().Math_mgr().Renderer_is_mathjax_(false);
|
||||||
fxt.Test_html_full_str("<math>abc</math>", "-{R|<span id='xowa_math_txt_0'>abc</span>}-"); // NOTE: this also armors the id which is good for the mathjax.js
|
fxt.Test__parse_to_html_mgr("<math><script>alert('fail');</script></math>", "<img id='xowa_math_img_0' src='' width='' height=''/><span id='xowa_math_txt_0'><script>alert('fail');</script></span>");
|
||||||
fxt.Wiki().Lang().Vnt_mgr().Enabled_(Bool_.N);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user