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 494697032..6815cc78a 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 @@ -64,20 +64,22 @@ class Xosearch_fulltext_svc implements Gfo_invk { int page_id = page_rdr.Read_int("page_id"); int text_db_id = page_rdr.Read_int("page_text_db_id"); byte[] text_mcase = wiki.Data__core_mgr().Dbs__get_by_id_or_fail(text_db_id).Tbl__text().Select(page_id); + int ns_id = page_rdr.Read_int("page_namespace"); + byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title"); + Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry); - cbk_eval.found = false; + // do eval + cbk_eval.Init(ttl.Full_db()); finder.Match(text_mcase, 0, text_mcase.length, cbk_eval); searched++; if (cbk_eval.found) { - int ns_id = page_rdr.Read_int("page_namespace"); - byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title"); - Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry); ++found; Notify_pages_found_and_searched(wiki_domain, found, searched); + // do highlight if (found <= max_pages_per_wiki) { - cbk_highlight.Init(wiki, page_id, max_snips_per_page); + cbk_highlight.Init(wiki, page_id, ttl.Full_db(), 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) .Add_int("page_id", page_id) diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk.java index 82eeb5456..79a6de0d2 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk.java @@ -16,6 +16,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt package gplx.xowa.addons.wikis.searchs.fulltexts.finders; 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.xowa.guis.cbks.*; public interface Xosearch_finder_cbk { + byte[] Page_ttl(); void Process_item_found(byte[] src, int hook_bgn, int hook_end, int word_bgn, int word_end, Xosearch_word_node term); void Process_page_done(byte[] src, Xosearch_word_node tree_root); } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval.java index b2922466f..a77be71cb 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/finders/Xosearch_finder_cbk__eval.java @@ -16,6 +16,11 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt package gplx.xowa.addons.wikis.searchs.fulltexts.finders; 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.*; public class Xosearch_finder_cbk__eval implements Xosearch_finder_cbk { public boolean found; + public byte[] Page_ttl() {return page_ttl;} private byte[] page_ttl; + public void Init(byte[] page_ttl) { + this.found = false; + this.page_ttl = page_ttl; + } public void Process_item_found(byte[] src, int hook_bgn, int hook_end, int word_bgn, int word_end, Xosearch_word_node term) { term.found = true; } 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 4f03019a7..600fcbe82 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 @@ -27,9 +27,11 @@ public class Xosearch_finder_cbk__highlight implements Xosearch_finder_cbk { this.app = app; this.cbk_trg = cbk_trg; } - public void Init(Xow_wiki wiki, int page_id, int max_snips_per_page) { + public byte[] Page_ttl() {return page_ttl;} private byte[] page_ttl; + public void Init(Xow_wiki wiki, int page_id, byte[] page_ttl, int max_snips_per_page) { this.wiki = wiki; this.page_id = page_id; + this.page_ttl= page_ttl; this.max_snips_per_page = max_snips_per_page; found = 0; } 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 c87e3bd57..ce3d91da0 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 @@ -56,18 +56,23 @@ public class Xosearch_finder_mgr { int hook_bgn = cur; int hook_end = cur + hook.word_hook.length; - // get word_bounds - lang.Get_word_bounds(word_bounds, trv, src, src_end, hook_bgn, hook_end); - int word_bgn = word_bounds.word_bgn; - int word_end = word_bounds.word_end; + try { + // get word_bounds + lang.Get_word_bounds(word_bounds, trv, src, src_end, hook_bgn, hook_end); + int word_bgn = word_bounds.word_bgn; + int word_end = word_bounds.word_end; - // check if current word matches criteria-word - if (hook.Match_word(lang, src, hook_bgn, hook_end, word_bgn, word_end)) { - cbk.Process_item_found(src, hook_bgn, hook_end, word_bgn, word_end, hook); - } + // check if current word matches criteria-word + if (hook.Match_word(lang, src, hook_bgn, hook_end, word_bgn, word_end)) { + cbk.Process_item_found(src, hook_bgn, hook_end, word_bgn, word_end, hook); + } - // update position to word_end - cur = word_end; + // update position to word_end + cur = word_end; + } catch (Exception e) { + cur = hook_end; + Gfo_usr_dlg_.Instance.Warn_many("", "", "fatal error in match; page=~{0} hook=~{1} src=~{2}", cbk.Page_ttl(), hook.word_orig, Err_.Message_gplx_log(e)); + } } // mark page done