mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Full-text search: Escape tab and carriage return in json callbacks
This commit is contained in:
parent
1d509aa232
commit
389726f219
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
|
@ -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]]");
|
||||
}
|
||||
// .
|
||||
// ...
|
||||
// -
|
||||
|
Loading…
Reference in New Issue
Block a user