diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java
index c4afd7f40..75c7eca4c 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java
@@ -32,17 +32,21 @@ class Xosearch_fulltext_svc {
cbk_highlight = new Xosearch_finder_cbk__highlight(app, cbk_trg);
}
public void Search(Json_nde args) {
+ boolean case_match = args.Get_as_bool_or("case_match", false);
+ boolean auto_wildcard_bgn = args.Get_as_bool_or("auto_wildcard_bgn", false);
+ boolean auto_wildcard_end = args.Get_as_bool_or("auto_wildcard_end", false);
+ int max_pages_per_wiki = args.Get_as_int_or("max_pages_per_wiki", 25);
+ int max_snips_per_page = args.Get_as_int_or("max_snips_per_page", 10);
String wikis = args.Get_as_str("wikis");
- byte[] query_mcase = args.Get_as_bry("query");
+ byte[] query = args.Get_as_bry("query");
String[] wikis_ary = String_.Split(wikis, "|");
for (String wiki_domain : wikis_ary) {
Xow_wiki wiki = app.Wiki_mgri().Get_by_or_make_init_y(Bry_.new_u8(wiki_domain));
- byte[] query_lcase = wiki.Case_mgr().Case_build_lower(query_mcase);
- Search_wiki(wiki, query_lcase);
+ Search_wiki(wiki, query, case_match, auto_wildcard_bgn, auto_wildcard_end, max_pages_per_wiki, max_snips_per_page);
}
}
- private void Search_wiki(Xow_wiki wiki, byte[] query_lcase) {
+ private void Search_wiki(Xow_wiki wiki, byte[] query, boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end, int max_pages_per_wiki, int max_snips_per_page) {
Db_conn page_conn = wiki.Data__core_mgr().Tbl__page().Conn();
Db_rdr page_rdr = page_conn.Stmt_sql("SELECT * FROM page WHERE page_namespace IN (0) ORDER BY page_score DESC").Exec_select__rls_auto();
@@ -51,7 +55,7 @@ class Xosearch_fulltext_svc {
.Add_long("page_count", 0)
);
- finder.Init(query_lcase, false, false, Byte_ascii.Star, Byte_ascii.Dash);
+ finder.Init(query, case_match, auto_wildcard_bgn, auto_wildcard_end, Byte_ascii.Star, Byte_ascii.Dash);
try {
int found = 0;
while (page_rdr.Move_next()) {
@@ -64,19 +68,24 @@ class Xosearch_fulltext_svc {
if (cbk_eval.found) {
int ns_id = page_rdr.Read_int("page_namespace");
byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title");
+ ++found;
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__wiki__update__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry())
- .Add_int("found", ++found)
+ .Add_int("found", found)
);
Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry);
- cbk_highlight.Init(wiki, ttl);
- app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__page__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
+
+ if (found <= max_pages_per_wiki) {
+ cbk_highlight.Init(wiki, ttl, max_snips_per_page);
+ app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__page__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry())
.Add_bry("page", ttl.Full_db())
.Add_int("found", 0)
);
- finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight);
+
+ finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight);
+ }
}
}
} finally {
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval__tst.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval__tst.java
index e5ce1f2b5..0d07e6c65 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval__tst.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval__tst.java
@@ -95,13 +95,14 @@ public class Xosearch_finder_cbk__eval__tst {
}
class Xosearch_finder_cbk__eval__fxt {
private boolean case_match = false;
- private boolean auto_wildcard = false;
+ private boolean auto_wildcard_bgn = false;
+ private boolean auto_wildcard_end = false;
private byte wildcard_byte = Byte_ascii.Star;
private byte not_byte = Byte_ascii.Dash;
private final Xosearch_finder_mgr finder = new Xosearch_finder_mgr();
private final Xosearch_finder_cbk__eval cbk = new Xosearch_finder_cbk__eval();
public void Init__search(String query) {
- finder.Init(Bry_.new_u8(query), case_match, auto_wildcard, wildcard_byte, not_byte);
+ finder.Init(Bry_.new_u8(query), case_match, auto_wildcard_bgn, auto_wildcard_end, wildcard_byte, not_byte);
}
public void Test__eval_y(String... texts) {Test__eval(Bool_.Y, texts);}
public void Test__eval_n(String... texts) {Test__eval(Bool_.N, texts);}
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__highlight.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__highlight.java
index 770d39c35..58ea74638 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__highlight.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__highlight.java
@@ -22,47 +22,52 @@ public class Xosearch_finder_cbk__highlight implements Xosearch_finder_cbk {
private Xoa_ttl ttl;
private final Bry_bfr tmp_bfr = Bry_bfr_.New();
public int found;
+ private int max_snips_per_page;
public Xosearch_finder_cbk__highlight(Xoa_app app, Xog_cbk_trg cbk_trg) {
this.app = app;
this.cbk_trg = cbk_trg;
}
- public void Init(Xow_wiki wiki, Xoa_ttl ttl) {
+ public void Init(Xow_wiki wiki, Xoa_ttl ttl, int max_snips_per_page) {
this.wiki = wiki;
this.ttl = ttl;
+ this.max_snips_per_page = max_snips_per_page;
found = 0;
}
public void Process_item_found(byte[] src, int hook_bgn, int hook_end, int word_bgn, int word_end, Xosearch_word_node term) {
- // get snip bounds by finding flanking 50 chars and then expanding to word-bounds
- int snip_bgn = hook_bgn - 50;
- if (snip_bgn < 0)
- snip_bgn = 0;
- else {
- snip_bgn = Bry_find_.Find_bwd_ws(src, snip_bgn, 0) + 1;
- }
- int snip_end = hook_end + 50;
- if (snip_end >= src.length)
- snip_end = src.length;
- else {
- snip_end = Bry_find_.Find_fwd_until_ws(src, snip_end, src.length);
- if (snip_end == Bry_find_.Not_found) { // when snip_end == src.length
+ ++found;
+ if (found <= max_snips_per_page) {
+ // get snip bounds by finding flanking 50 chars and then expanding to word-bounds
+ int snip_bgn = hook_bgn - 50;
+ if (snip_bgn < 0)
+ snip_bgn = 0;
+ else {
+ snip_bgn = Bry_find_.Find_bwd_ws(src, snip_bgn, 0) + 1;
+ }
+ int snip_end = hook_end + 50;
+ if (snip_end >= src.length)
snip_end = src.length;
+ else {
+ snip_end = Bry_find_.Find_fwd_until_ws(src, snip_end, src.length);
+ if (snip_end == Bry_find_.Not_found) { // when snip_end == src.length
+ snip_end = src.length;
+ }
}
- }
- // build snip
- Add_snip(tmp_bfr, src, snip_bgn, hook_bgn);
- tmp_bfr.Add_str_a7("");
- Add_snip(tmp_bfr, src, hook_bgn, hook_end);
- tmp_bfr.Add_str_a7("");
- Add_snip(tmp_bfr, src, hook_end, snip_end);
+ // build snip
+ Add_snip(tmp_bfr, src, snip_bgn, hook_bgn);
+ tmp_bfr.Add_str_a7("");
+ Add_snip(tmp_bfr, src, hook_bgn, hook_end);
+ tmp_bfr.Add_str_a7("");
+ Add_snip(tmp_bfr, src, hook_end, snip_end);
- // send notification
- app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__line__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
- .Add_bry("wiki", wiki.Domain_bry())
- .Add_bry("page", ttl.Full_db())
- .Add_int("line", ++found)
- .Add_bry("html", tmp_bfr.To_bry_and_clear())
- );
+ // send notification
+ app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__line__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
+ .Add_bry("wiki", wiki.Domain_bry())
+ .Add_bry("page", ttl.Full_db())
+ .Add_int("line", found)
+ .Add_bry("html", tmp_bfr.To_bry_and_clear())
+ );
+ }
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__page__update__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry())
.Add_bry("page", ttl.Full_db())
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_mgr.java
index 9fb9b8ba6..c87e3bd57 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_mgr.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_mgr.java
@@ -26,13 +26,13 @@ public class Xosearch_finder_mgr {
private final Xosearch_word_bounds word_bounds = new Xosearch_word_bounds();
public byte[] Query() {return query;} private byte[] query;
- public void Init(byte[] query, boolean case_match, boolean auto_wildcard, byte wildchar_byte, byte not_byte) {
+ public void Init(byte[] query, boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end, byte wildchar_byte, byte not_byte) {
this.query = query;
// create a new hook_trie based on case_match
this.hook_trie = case_match ? Btrie_slim_mgr.cs() : Btrie_slim_mgr.ci_u8();
// create a new tree_root for eval
- this.tree_root = Xosearch_word_node_.New_root(parser.Parse_or_invalid(query, auto_wildcard).Root, hook_trie, wildchar_byte, not_byte);
+ this.tree_root = Xosearch_word_node_.New_root(parser.Parse_or_invalid(query).Root, hook_trie, auto_wildcard_bgn, auto_wildcard_end, wildchar_byte, not_byte);
}
public void Match(byte[] src, int src_bgn, int src_end, Xosearch_finder_cbk cbk) {
// init and clear
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_lang.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_lang.java
index 969b4398b..6ed758974 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_lang.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_lang.java
@@ -18,7 +18,7 @@ import gplx.core.btries.*;
import gplx.core.intls.*;
public class Xosearch_word_lang {
private final Btrie_slim_mgr ws_bgn = Btrie_slim_mgr.cs()
- .Add_many_str("\t", "\n", "\r", " ", "/");
+ .Add_many_str("\t", "\n", "\r", " ", "/", "(", ")");
private final Btrie_slim_mgr ws_end;
private final Btrie_slim_mgr punct_bgn = Btrie_slim_mgr.cs()
.Add_many_str(".", ",", "?", "!", ":", ";", "'", "\"")
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_node_.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_node_.java
index ec6525518..6b92db516 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_node_.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_word_node_.java
@@ -17,7 +17,7 @@ package gplx.xowa.addons.wikis.searchs.fulltexts.finders; import gplx.*; import
import gplx.core.btries.*;
import gplx.xowa.addons.wikis.searchs.searchers.crts.*;
public class Xosearch_word_node_ {
- public static Xosearch_word_node New_root(Srch_crt_itm src, Btrie_slim_mgr word_trie, byte wildchar_byte, byte not_byte) {
+ public static Xosearch_word_node New_root(Srch_crt_itm src, Btrie_slim_mgr word_trie, boolean auto_wildcard_bgn, boolean auto_wildcard_end, byte wildchar_byte, byte not_byte) {
Xosearch_word_node trg = new Xosearch_word_node();
trg.tid = src.Tid;
@@ -34,14 +34,14 @@ public class Xosearch_word_node_ {
int hook_end = word_orig_len;
// handle wildcard at bgn; EX: "*a"
- boolean wildcard_at_bgn = false;
+ boolean wildcard_at_bgn = auto_wildcard_bgn;
if (word_orig_len > hook_bgn + 1 && word_orig[hook_bgn] == wildchar_byte) {
wildcard_at_bgn = true;
hook_bgn++;
}
// handle wildcard at end; EX: "a*"
- boolean wildcard_at_end = false;
+ boolean wildcard_at_end = auto_wildcard_end;
if (word_orig_len > hook_bgn + 1 && word_orig[hook_end - 1] == wildchar_byte) {
wildcard_at_end = true;
hook_end--;
@@ -69,7 +69,7 @@ public class Xosearch_word_node_ {
trg.subs = trg_subs;
int len = src_subs.length;
for (int i = 0; i < len; i++) {
- trg.subs[i] = New_root(src_subs[i], word_trie, wildchar_byte, not_byte);
+ trg.subs[i] = New_root(src_subs[i], word_trie, auto_wildcard_bgn, auto_wildcard_end, wildchar_byte, not_byte);
}
return trg;
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_doc.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_doc.java
index a9ec3dc92..6b5bab67b 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_doc.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_doc.java
@@ -16,14 +16,41 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
package gplx.xowa.addons.wikis.searchs.fulltexts.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.fulltexts.*;
import gplx.langs.mustaches.*;
public class Xosearch_fulltext_doc implements Mustache_doc_itm {
- public Xosearch_fulltext_doc() {
+ private final boolean case_match, auto_wildcard_bgn, auto_wildcard_end;
+ private final int max_pages_per_wiki, max_snips_per_page;
+ private final String wikis, namespaces;
+ public Xosearch_fulltext_doc
+ ( boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end
+ , int max_pages_per_wiki, int max_snips_per_page
+ , String wikis, String namespaces) {
+ this.case_match = case_match;
+ this.auto_wildcard_bgn = auto_wildcard_bgn;
+ this.auto_wildcard_end = auto_wildcard_end;
+ this.max_pages_per_wiki = max_pages_per_wiki;
+ this.max_snips_per_page = max_snips_per_page;
+ this.wikis = wikis;
+ this.namespaces = namespaces;
}
public boolean Mustache__write(String key, Mustache_bfr bfr) {
-// if (String_.Eq(key, "domain")) bfr.Add_str_u8(domain);
-// else return false;
+ if (String_.Eq(key, "wikis"))
+ bfr.Add_str_u8(wikis);
+ else if (String_.Eq(key, "namespaces"))
+ bfr.Add_str_u8(namespaces);
+ else if (String_.Eq(key, "max_pages_per_wiki"))
+ bfr.Add_int(max_pages_per_wiki);
+ else if (String_.Eq(key, "max_snips_per_page"))
+ bfr.Add_int(max_snips_per_page);
+ else
+ return false;
return true;
}
public Mustache_doc_itm[] Mustache__subs(String key) {
+ if (String_.Eq(key, "case_match"))
+ return Mustache_doc_itm_.Ary__bool(case_match);
+ else if (String_.Eq(key, "auto_wildcard_bgn"))
+ return Mustache_doc_itm_.Ary__bool(auto_wildcard_bgn);
+ else if (String_.Eq(key, "auto_wildcard_end"))
+ return Mustache_doc_itm_.Ary__bool(auto_wildcard_end);
return Mustache_doc_itm_.Ary__empty;
}
}
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_html.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_html.java
index fcd42a9ea..67e60d45b 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_html.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_html.java
@@ -17,12 +17,25 @@ package gplx.xowa.addons.wikis.searchs.fulltexts.specials; import gplx.*; import
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
import gplx.dbs.*;
class Xosearch_fulltext_html extends Xow_special_wtr__base {
- public Xosearch_fulltext_html() {
+ private final boolean case_match, auto_wildcard_bgn, auto_wildcard_end;
+ private final int max_pages_per_wiki, max_snips_per_page;
+ private final String wikis, namespaces;
+ public Xosearch_fulltext_html
+ ( boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end
+ , int max_pages_per_wiki, int max_snips_per_page
+ , String wikis, String namespaces) {
+ this.case_match = case_match;
+ this.auto_wildcard_bgn = auto_wildcard_bgn;
+ this.auto_wildcard_end = auto_wildcard_end;
+ this.max_pages_per_wiki = max_pages_per_wiki;
+ this.max_snips_per_page = max_snips_per_page;
+ this.wikis = wikis;
+ this.namespaces = namespaces;
}
@Override protected Io_url Get_addon_dir(Xoa_app app) {return Addon_dir(app);}
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xosearch_fulltext.template.html");}
@Override protected Mustache_doc_itm Bld_mustache_root(Xoa_app app) {
- return new Xosearch_fulltext_doc();
+ return new Xosearch_fulltext_doc(case_match, auto_wildcard_bgn, auto_wildcard_end, max_pages_per_wiki, max_snips_per_page, wikis, namespaces);
}
@Override protected void Bld_tags(Xoa_app app, Io_url addon_dir, Xopage_html_data page_data) {
Xopg_tag_mgr head_tags = page_data.Head_tags();
@@ -38,6 +51,8 @@ class Xosearch_fulltext_html extends Xow_special_wtr__base {
head_tags.Add(Xopg_tag_itm.New_css_file(addon_dir.GenSubFil_nest("bin", "xosearch_fulltext.css")));
head_tags.Add(Xopg_tag_itm.New_js_file(addon_dir.GenSubFil_nest("bin", "xosearch_fulltext.js")));
+
+ page_data.Js_enabled_y_();
}
public static Io_url Addon_dir(Xoa_app app) {
return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "search", "fulltext");
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java
index e5c07aa61..9eeb95c90 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java
@@ -18,12 +18,8 @@ import gplx.xowa.specials.*; import gplx.core.net.qargs.*;
public class Xosearch_fulltext_special implements Xow_special_page {
public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) {
// Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
-
-// String domain = url_args.Read_str_or("domain", "[xowa.home]");
-// String db = url_args.Read_str_or("db", "core");
-// String sql = url_args.Read_str_or("sql", "SELECT * FROM xowa_cfg;");
- new Xosearch_fulltext_html().Bld_page_by_mustache(wiki.App(), page, this);
+ new Xosearch_fulltext_html(false, false, false, 20, 10, wiki.Domain_str(), "0|4").Bld_page_by_mustache(wiki.App(), page, this);
}
Xosearch_fulltext_special(Xow_special_meta special__meta) {this.special__meta = special__meta;}
public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta;
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java
index a8c000500..9d36e789b 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java
@@ -60,7 +60,7 @@ public class Srch_search_mgr implements Gfo_invk {
cur_cmd.Cancel();
// create new one; run it;
- Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(qry.Phrase.Compiled, qry.Phrase.Wildcard);
+ Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(qry.Phrase.Compiled);
if (crt_mgr == Srch_crt_mgr.Invalid) return; // handle "\\" which is invalid or other fatal errors
Srch_rslt_list rslts_list = cache__rslts.Get_or_new(crt_mgr.Key);
cur_cmd = new Srch_search_cmd(this, qry, crt_mgr, cbk, rslts_list);
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser.java
index 6b63b781d..f4726b84c 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser.java
@@ -26,7 +26,7 @@ public class Srch_crt_parser {
this.scanner = new Srch_crt_scanner(trie_bldr);
}
public int Next_uid() {return ++uid_next;}
- public Srch_crt_mgr Parse_or_invalid(byte[] src, boolean auto_wildcard) {
+ public Srch_crt_mgr Parse_or_invalid(byte[] src) {
this.uid_next = -1;
Srch_crt_tkn[] tkns_ary = scanner.Scan(src);
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser_tst.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser_tst.java
index 7c9fd279b..9f2be3a02 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser_tst.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/crts/Srch_crt_parser_tst.java
@@ -60,7 +60,7 @@ class Srch_crt_parser_fxt {
}
public void Test__parse(String src_str, String expd) {
byte[] src_bry = Bry_.new_a7(src_str);
- Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(src_bry, Bool_.N);
+ Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(src_bry);
Tfds.Eq(expd, String_.new_u8(visitor__to_str.Print(crt_mgr.Root)));
}
}
diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr_tst.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr_tst.java
index c29ef5cfb..3e6fa88c8 100644
--- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr_tst.java
+++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr_tst.java
@@ -39,7 +39,7 @@ class Srch_page_tbl_wkr_fxt {
}
public void Test__to_bry_or_null(String src_str, String expd) {
byte[] src_bry = Bry_.new_a7(src_str);
- Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(src_bry, Bool_.N);
+ Srch_crt_mgr crt_mgr = crt_parser.Parse_or_invalid(src_bry);
Tfds.Eq(expd, String_.new_u8(Srch_page_tbl_wkr.To_bry_or_null(tmp_bfr, Srch_search_addon.Wildcard__star, crt_mgr)));
}
}
diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
index 7c50dd2a1..b3dc5e969 100644
--- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
+++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java
@@ -142,6 +142,7 @@ public class Xoh_page_wtr_wkr {
}
}
if ( wiki.Domain_tid() != Xow_domain_tid_.Tid__home // allow home wiki to use javascript
+ && !page.Html_data().Js_enabled() // allow special pages to use js
&& !page_tid_uses_pre) { // if .js, .css or .lua, skip test; may have js fragments, but entire text is escaped and put in pre; don't show spurious warning; DATE:2013-11-21
wiki.Html_mgr().Js_cleaner().Clean_bfr(wiki, page_ttl, bfr, bfr_page_bgn);
}
diff --git a/400_xowa/src/gplx/xowa/wikis/pages/Xopage_html_data.java b/400_xowa/src/gplx/xowa/wikis/pages/Xopage_html_data.java
index 8107f262a..6f927ae2c 100644
--- a/400_xowa/src/gplx/xowa/wikis/pages/Xopage_html_data.java
+++ b/400_xowa/src/gplx/xowa/wikis/pages/Xopage_html_data.java
@@ -23,6 +23,7 @@ public class Xopage_html_data {
public byte[] Display_ttl() {return display_ttl;} private byte[] display_ttl;
public byte[] Body() {return body;} private final byte[] body;
public boolean Cbk_enabled() {return cbk_enabled;} private boolean cbk_enabled; public void Cbk_enabled_y_() {this.cbk_enabled = true;}
+ public boolean Js_enabled() {return js_enabled;} private boolean js_enabled; public void Js_enabled_y_() {this.js_enabled = true;}
public Xopg_tag_mgr Head_tags() {return head_tags;} private final Xopg_tag_mgr head_tags = new Xopg_tag_mgr(Bool_.Y);
public Xopg_tag_mgr Tail_tags() {return tail_tags;} private final Xopg_tag_mgr tail_tags = new Xopg_tag_mgr(Bool_.N);
@@ -35,6 +36,7 @@ public class Xopage_html_data {
html_data.Custom_head_tags().Copy(head_tags);
html_data.Custom_tail_tags().Copy(tail_tags);
html_data.Cbk_enabled_(cbk_enabled);
+ html_data.Js_enabled_(js_enabled);
}
public static Xopage_html_data err_(String msg) {return new Xopage_html_data(Bry_.Empty, Bry_.new_u8(msg));}
diff --git a/400_xowa/src/gplx/xowa/wikis/pages/htmls/Xopg_html_data.java b/400_xowa/src/gplx/xowa/wikis/pages/htmls/Xopg_html_data.java
index 7c72f0f3c..97d4ba17e 100644
--- a/400_xowa/src/gplx/xowa/wikis/pages/htmls/Xopg_html_data.java
+++ b/400_xowa/src/gplx/xowa/wikis/pages/htmls/Xopg_html_data.java
@@ -42,7 +42,8 @@ public class Xopg_html_data {
public byte[] Edit_preview_w_dbg() {return Bry_.Add(xtn_scribunto_dbg, edit_preview);} public void Edit_preview_(byte[] v) {edit_preview = v;} private byte[] edit_preview = Bry_.Empty;
public int Lnke_autonumber_next() {return lnke_autonumber++;} private int lnke_autonumber = 1;
public int Sect_uid() {return sect_uid;} private int sect_uid = -1; public int Sect_uid_next() {return ++sect_uid;}
- public boolean Cbk_enabled() {return cbk_enabled;} private boolean cbk_enabled; public void Cbk_enabled_(boolean v) {this.cbk_enabled = v;}
+ public boolean Cbk_enabled() {return cbk_enabled;} private boolean cbk_enabled; public void Cbk_enabled_(boolean v) {this.cbk_enabled = v;}
+ public boolean Js_enabled() {return js_enabled;} private boolean js_enabled; public void Js_enabled_(boolean v) {this.js_enabled = v;}
public boolean Hdump_exists() {return hdump_exists;} private boolean hdump_exists; public void Hdump_exists_(boolean v) {this.hdump_exists = v;}
public byte[] Catpage_data() {return catpage_data;} private byte[] catpage_data; public void Catpage_data_(byte[] v) {this.catpage_data = v;}