Full-text search: Escape tab and carriage return in json callbacks

pull/620/head
gnosygnu 8 years ago
parent 1d509aa232
commit 389726f219

@ -267,7 +267,8 @@ public class Json_wtr {
bfr.Add_byte(b); bfr.Add_byte(b);
break; 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.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; default: bfr.Add_byte(b); break;
} }
} }

@ -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() { @Test public void Nde() {
fxt.Wtr() fxt.Wtr()
.Doc_nde_bgn() .Doc_nde_bgn()

@ -31,15 +31,20 @@ class Xosearch_fulltext_svc implements Gfo_invk {
this.app = app; this.app = app;
cbk_highlight = new Xosearch_finder_cbk__highlight(app, cbk_trg); cbk_highlight = new Xosearch_finder_cbk__highlight(app, cbk_trg);
} }
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) { private void Search(Xosearch_search_args args) {
try {
byte[][] wiki_domains = Bry_split_.Split(args.wikis, Byte_ascii.Pipe_bry); byte[][] wiki_domains = Bry_split_.Split(args.wikis, Byte_ascii.Pipe_bry);
for (byte[] wiki_domain : wiki_domains) { for (byte[] wiki_domain : wiki_domains) {
Xow_wiki wiki = app.Wiki_mgri().Get_by_or_make_init_y(wiki_domain); 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); 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));
} }
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_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) { 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_conn page_conn = wiki.Data__core_mgr().Tbl__page().Conn();

@ -84,6 +84,11 @@ public class Xosearch_finder_cbk__eval__tst {
// y: slash before, after // y: slash before, after
fxt.Test__eval_y("a/b/c", "b/a/c", "b/c/a"); 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]]");
}
// . // .
// ... // ...
// - // -

Loading…
Cancel
Save