diff --git a/400_xowa/src/gplx/langs/jsons/Json_wtr.java b/400_xowa/src/gplx/langs/jsons/Json_wtr.java index 80e458d98..6e82d860a 100644 --- a/400_xowa/src/gplx/langs/jsons/Json_wtr.java +++ b/400_xowa/src/gplx/langs/jsons/Json_wtr.java @@ -267,7 +267,8 @@ public class Json_wtr { bfr.Add_byte(b); break; case Byte_ascii.Nl: bfr.Add_byte_repeat(Byte_ascii.Backslash, 2).Add_byte(Byte_ascii.Ltr_n); break; // "\n" -> "\\n" - case Byte_ascii.Cr: break;// skip + case Byte_ascii.Cr: bfr.Add_byte_repeat(Byte_ascii.Backslash, 2).Add_byte(Byte_ascii.Ltr_r); break; // "\r" -> "\\r"; DATE:2017-03-02 + case Byte_ascii.Tab: bfr.Add_byte_repeat(Byte_ascii.Backslash, 2).Add_byte(Byte_ascii.Ltr_t); break; // "\t" -> "\\t"; DATE:2017-03-02 default: bfr.Add_byte(b); break; } } diff --git a/400_xowa/src/gplx/langs/jsons/Json_wtr_tst.java b/400_xowa/src/gplx/langs/jsons/Json_wtr_tst.java index db77ebde7..a5f630ff6 100644 --- a/400_xowa/src/gplx/langs/jsons/Json_wtr_tst.java +++ b/400_xowa/src/gplx/langs/jsons/Json_wtr_tst.java @@ -16,7 +16,7 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt package gplx.langs.jsons; import gplx.*; import gplx.langs.*; import org.junit.*; public class Json_wtr_tst { - @Before public void init() {fxt.Clear();} private final Json_wtr_fxt fxt = new Json_wtr_fxt(); + @Before public void init() {fxt.Clear();} private final Json_wtr_fxt fxt = new Json_wtr_fxt(); @Test public void Root() { fxt.Wtr().Doc_nde_bgn().Doc_nde_end(); fxt.Test @@ -36,6 +36,26 @@ public class Json_wtr_tst { , "}" ); } + @Test public void Escaped() { + fxt.Wtr() + .Doc_nde_bgn() + .Kv_str("backslash", "\\") + .Kv_str("quote", "\"") + .Kv_str("apos", "'") + .Kv_str("nl", "\n") + .Kv_str("cr", "\r") + .Kv_str("tab", "\t") + .Doc_nde_end(); + fxt.Test + ( "{ 'backslash':'\\\\'" + , ", 'quote':'\\\"'" + , ", 'apos':'\''" + , ", 'nl':'\\\\n'" + , ", 'cr':'\\\\r'" + , ", 'tab':'\\\\t'" + , "}" + ); + } @Test public void Nde() { fxt.Wtr() .Doc_nde_bgn() @@ -100,7 +120,7 @@ public class Json_wtr_tst { } } class Json_wtr_fxt { - private final Json_wtr wtr = new Json_wtr().Opt_quote_byte_(Byte_ascii.Apos); + private final Json_wtr wtr = new Json_wtr().Opt_quote_byte_(Byte_ascii.Apos); public void Clear() {wtr.Clear();} public Json_wtr Wtr() {return wtr;} public void Test(String... expd) { 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 691cf0357..097021590 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 @@ -31,16 +31,21 @@ class Xosearch_fulltext_svc implements Gfo_invk { this.app = app; cbk_highlight = new Xosearch_finder_cbk__highlight(app, cbk_trg); } - private void Search(Xosearch_search_args args) { - byte[][] wiki_domains = Bry_split_.Split(args.wikis, Byte_ascii.Pipe_bry); - for (byte[] wiki_domain : wiki_domains) { - Xow_wiki wiki = app.Wiki_mgri().Get_by_or_make_init_y(wiki_domain); - Search_wiki(wiki, args.query, args.case_match, args.auto_wildcard_bgn, args.auto_wildcard_end, args.max_pages_per_wiki, args.max_snips_per_page); - } - } public void Search(Json_nde args) { gplx.core.threads.Thread_adp_.Start_by_val("search", Cancelable_.Never, this, Invk__search, Xosearch_search_args.New_by_json(args)); } + private void Search(Xosearch_search_args args) { + try { + byte[][] wiki_domains = Bry_split_.Split(args.wikis, Byte_ascii.Pipe_bry); + for (byte[] wiki_domain : wiki_domains) { + Xow_wiki wiki = app.Wiki_mgri().Get_by_or_make_init_y(wiki_domain); + Search_wiki(wiki, args.query, args.case_match, args.auto_wildcard_bgn, args.auto_wildcard_end, args.max_pages_per_wiki, args.max_snips_per_page); + } + } catch (Exception exc) { + if (app.Tid_is_edit()) + ((Xoae_app)app).Gui_mgr().Kit().Ask_ok("", "", Err_.Message_gplx_full(exc)); + } + } 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(); 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 0d07e6c65..82f5c0940 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 @@ -84,6 +84,11 @@ public class Xosearch_finder_cbk__eval__tst { // y: slash before, after fxt.Test__eval_y("a/b/c", "b/a/c", "b/c/a"); } + @Test public void Brack() { + fxt.Init__search("a"); + // y + fxt.Test__eval_y("[[a]]"); + } // . // ... // -