mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
'v3.7.3.1'
This commit is contained in:
@@ -39,7 +39,7 @@ public class Xop_comm_lxr implements Xop_lxr {
|
||||
}
|
||||
private static int Trim_ws_if_entire_line_is_commment(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int cur_pos, int lhs_end, int rhs_bgn) {// REF.MW:Preprocessor_DOM.php|preprocessToXml|handle comments; DATE:2014-02-24
|
||||
if ( ctx.Tid_is_popup()
|
||||
&& ctx.Parse_tid() == Xop_parser_.Parse_tid_page_wiki // note that only popup parse can generate <!-- --> that makes it to wtxt
|
||||
&& ctx.Parse_tid() == Xop_parser_tid_.Tid__wtxt // note that only popup parse can generate <!-- --> that makes it to wtxt
|
||||
&& Bry_.Match(src, lhs_end, rhs_bgn, Xowa_skip_text_bry) // <!--XOWA_SKIP-->
|
||||
)
|
||||
return cur_pos; // in popup mode only do not gobble trailing \n; PAGE:en.w:Gwynedd; DATE:2014-07-01
|
||||
@@ -89,10 +89,10 @@ public class Xop_comm_lxr implements Xop_lxr {
|
||||
ctx.Subs_add(root, tkn_mkr.NewLine(nl_rhs - 1, nl_rhs, Xop_nl_tkn.Tid_char, 1).Ignore_y_()); // add tkn for nl_rhs, but mark as ignore; needed for multiple comment nls; EX: "<!-- -->\n<!-- -->\n;"; DATE:2014-02-24
|
||||
return nl_rhs;
|
||||
}
|
||||
public static final byte[] Bgn_ary = new byte[] {60, 33, 45, 45}, /*<!--*/ End_ary = new byte[] {45, 45, 62}; /*-->*/
|
||||
private static final int End_len = End_ary.length;
|
||||
public static final Xop_comm_lxr Instance = new Xop_comm_lxr(); Xop_comm_lxr() {}
|
||||
private static final String Xowa_skip_text_str = "XOWA_SKIP";
|
||||
private static final byte[] Xowa_skip_text_bry = Bry_.new_a7(Xowa_skip_text_str);
|
||||
public static final byte[] Xowa_skip_comment_bry = Bry_.new_a7("<!--" + Xowa_skip_text_str + "-->");
|
||||
public static final byte[] Bgn_ary = new byte[] {60, 33, 45, 45}, /*<!--*/ End_ary = new byte[] {45, 45, 62}; /*-->*/
|
||||
private static final int End_len = End_ary.length;
|
||||
public static final Xop_comm_lxr Instance = new Xop_comm_lxr(); Xop_comm_lxr() {}
|
||||
private static final String Xowa_skip_text_str = "XOWA_SKIP";
|
||||
private static final byte[] Xowa_skip_text_bry = Bry_.new_a7(Xowa_skip_text_str);
|
||||
public static final byte[] Xowa_skip_comment_bry = Bry_.new_a7("<!--" + Xowa_skip_text_str + "-->");
|
||||
}
|
||||
|
||||
@@ -28,11 +28,11 @@ public class Xop_pipe_lxr implements Xop_lxr {
|
||||
switch (cur_stack_tid) {
|
||||
case Xop_tkn_itm_.Tid_brack_bgn: // used for tmpl mode where full lnki_wkr is too heavyweight; matches "[ |"
|
||||
switch (ctx.Parse_tid()) {
|
||||
case Xop_parser_.Parse_tid_tmpl:
|
||||
case Xop_parser_.Parse_tid_page_tmpl:
|
||||
case Xop_parser_tid_.Tid__defn:
|
||||
case Xop_parser_tid_.Tid__tmpl:
|
||||
ctx.Subs_add(root, tkn_mkr.Txt(bgn_pos, cur_pos));
|
||||
break;
|
||||
case Xop_parser_.Parse_tid_page_wiki: // should never happen?
|
||||
case Xop_parser_tid_.Tid__wtxt: // should never happen?
|
||||
ctx.Subs_add(root, tkn_mkr.Pipe(bgn_pos, cur_pos));
|
||||
break;
|
||||
default: throw Err_.new_unhandled(ctx.Parse_tid());
|
||||
@@ -88,5 +88,5 @@ public class Xop_pipe_lxr implements Xop_lxr {
|
||||
return cur_pos;
|
||||
}
|
||||
}
|
||||
public static final Xop_pipe_lxr Instance = new Xop_pipe_lxr();
|
||||
public static final Xop_pipe_lxr Instance = new Xop_pipe_lxr();
|
||||
}
|
||||
|
||||
@@ -18,10 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package gplx.xowa.parsers.miscs; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*;
|
||||
import gplx.core.btries.*;
|
||||
import gplx.xowa.langs.*; import gplx.xowa.langs.kwds.*;
|
||||
import gplx.xowa.htmls.tocs.*;
|
||||
import gplx.xowa.addons.htmls.tocs.*;
|
||||
import gplx.xowa.wikis.pages.wtxts.*;
|
||||
public class Xop_under_lxr implements Xop_lxr {
|
||||
private final Object thread_lock = new Object();
|
||||
private Btrie_mgr words_trie_ci, words_trie_cs;
|
||||
private Btrie_mgr words_trie_ci, words_trie_cs; private final Btrie_rv trv_cs = new Btrie_rv(), trv_ci = new Btrie_rv();
|
||||
public int Lxr_tid() {return Xop_lxr_.Tid_under;}
|
||||
public void Init_by_wiki(Xowe_wiki wiki, Btrie_fast_mgr core_trie) {}
|
||||
public void Init_by_lang(Xol_lang_itm lang, Btrie_fast_mgr core_trie) {
|
||||
@@ -81,33 +82,33 @@ public class Xop_under_lxr implements Xop_lxr {
|
||||
.Add(Xop_under_hook.Key_alt, Xop_under_hook.Itm_alt)
|
||||
;
|
||||
public int Make_tkn(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int bgn_pos, int cur_pos) {
|
||||
if (cur_pos == src_len) return ctx.Lxr_make_txt_(cur_pos); // eos
|
||||
if (cur_pos == src_len) return ctx.Lxr_make_txt_(cur_pos); // eos
|
||||
int rv = cur_pos;
|
||||
Object word_obj = words_trie_cs.Match_bgn(src, cur_pos, src_len); // check cs
|
||||
Object word_obj = words_trie_cs.Match_at(trv_cs, src, cur_pos, src_len); // check cs
|
||||
if (word_obj == null) {
|
||||
word_obj = words_trie_ci.Match_bgn(src, cur_pos, src_len); // check ci
|
||||
word_obj = words_trie_ci.Match_at(trv_ci, src, cur_pos, src_len); // check ci
|
||||
if (word_obj == null)
|
||||
return ctx.Lxr_make_txt_(cur_pos); // kwd not found; EX: "TOCA__"
|
||||
return ctx.Lxr_make_txt_(cur_pos); // kwd not found; EX: "TOCA__"
|
||||
else
|
||||
rv = words_trie_ci.Match_pos();
|
||||
rv = trv_ci.Pos();
|
||||
}
|
||||
else
|
||||
rv = words_trie_cs.Match_pos();
|
||||
rv = trv_cs.Pos();
|
||||
Xop_under_word word_itm = (Xop_under_word)word_obj;
|
||||
Xop_under_lxr.Make_tkn(ctx, tkn_mkr, root, src, src_len, bgn_pos, rv, word_itm.Kwd_id());
|
||||
return rv;
|
||||
}
|
||||
public static void Make_tkn(Xop_ctx ctx, Xop_tkn_mkr tkn_mkr, Xop_root_tkn root, byte[] src, int src_len, int bgn_pos, int cur_pos, int kwd_id) {
|
||||
Xoae_page page = ctx.Page();
|
||||
Xow_hdr_mgr hdr_mgr = page.Hdr_mgr();
|
||||
Xopg_toc_mgr hdr_mgr = page.Wtxt().Toc();
|
||||
switch (kwd_id) {
|
||||
case Xol_kwd_grp_.Id_toc:
|
||||
hdr_mgr.Toc_manual_();
|
||||
hdr_mgr.Flag__toc_y_();
|
||||
ctx.Para().Process_block_lnki_div(); // NOTE: __TOC__ will manually place <div toc> here; simulate div in order to close any pres; EX:\n\s__TOC__; PAGE:de.w: DATE:2014-07-05
|
||||
ctx.Subs_add(root, tkn_mkr.Under(bgn_pos, cur_pos, kwd_id)); // NOTE: only save under_tkn for TOC (b/c its position is needed for insertion); DATE:2013-07-01
|
||||
break;
|
||||
case Xol_kwd_grp_.Id_forcetoc: hdr_mgr.Toc_force_(); break;
|
||||
case Xol_kwd_grp_.Id_notoc: hdr_mgr.Toc_hide_(); break;
|
||||
case Xol_kwd_grp_.Id_forcetoc: hdr_mgr.Flag__forcetoc_y_(); break;
|
||||
case Xol_kwd_grp_.Id_notoc: hdr_mgr.Flag__notoc_y_(); break;
|
||||
case Xol_kwd_grp_.Id_noeditsection: break; // ignore; not handling edit sections
|
||||
case Xol_kwd_grp_.Id_nocontentconvert: page.Html_data().Lang_convert_content_(false); break;
|
||||
case Xol_kwd_grp_.Id_notitleconvert: page.Html_data().Lang_convert_title_(false); break;
|
||||
|
||||
@@ -61,8 +61,10 @@ public class Xop_under_lxr_tst {
|
||||
fxt.Init_para_n_();
|
||||
}
|
||||
@Test public void Toc_works() { // PURPOSE: make sure "suppressed" pre does not somehow suppress TOC
|
||||
fxt.Wtr_cfg().Toc__show_(Bool_.Y);
|
||||
fxt.Init_para_y_();
|
||||
fxt.Test_parse_page_all_str("a\n__TOC__\n==b==\n", String_.Concat_lines_nl
|
||||
Bry_bfr tmp = Bry_bfr_.New();
|
||||
String expd = String_.Concat_lines_nl
|
||||
( "<p>a"
|
||||
, "</p>"
|
||||
, "<div id=\"toc\" class=\"toc\">"
|
||||
@@ -75,9 +77,12 @@ public class Xop_under_lxr_tst {
|
||||
, " </ul>"
|
||||
, "</div>"
|
||||
, ""
|
||||
, "<h2>b</h2>"
|
||||
));
|
||||
, "<h2><span class=\"mw-headline\" id=\"b\">b</span></h2>"
|
||||
);
|
||||
String actl = gplx.xowa.addons.htmls.tocs.Xowe_hdr_bldr_fxt.Bld_page_with_toc(tmp, fxt, "a\n__TOC__\n==b==\n");
|
||||
Tfds.Eq_str_lines(expd, actl);
|
||||
fxt.Init_para_n_();
|
||||
fxt.Wtr_cfg().Toc__show_(Bool_.N);
|
||||
}
|
||||
@Test public void Ignore_pre_after() { // PURPOSE: "__TOC__\s\n" must be trimmed at end, else false pre; assertion only (no code exists to handle this test); DATE:2013-07-08
|
||||
fxt.Init_para_y_();
|
||||
|
||||
Reference in New Issue
Block a user