Improved search highlight

pull/214/head
M66B 11 months ago
parent 19c7d36e2b
commit 6aa1bfea9d

@ -881,7 +881,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
if (TextUtils.isEmpty(text)) if (TextUtils.isEmpty(text))
return false; return false;
text = Fts4DbHelper.breakText(text); text = Fts4DbHelper.processBreakText(text);
List<String> word = new ArrayList<>(); List<String> word = new ArrayList<>();
for (String w : query.trim().split("\\s+")) for (String w : query.trim().split("\\s+"))
@ -892,7 +892,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
if (!html && text.contains(Fts4DbHelper.preprocessText(w.substring(1)))) if (!html && text.contains(Fts4DbHelper.preprocessText(w.substring(1))))
return false; return false;
} else } else
word.addAll(Arrays.asList(Fts4DbHelper.breakText(w).split("\\s+"))); word.addAll(Arrays.asList(Fts4DbHelper.processBreakText(w).split("\\s+")));
if (word.size() == 0) if (word.size() == 0)
return true; return true;

@ -118,10 +118,10 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
cv.put("folder", message.folder); cv.put("folder", message.folder);
cv.put("time", message.received); cv.put("time", message.received);
cv.put("address", MessageHelper.formatAddresses(address.toArray(new Address[0]), true, false)); cv.put("address", MessageHelper.formatAddresses(address.toArray(new Address[0]), true, false));
cv.put("subject", breakText(message.subject)); cv.put("subject", processBreakText(message.subject));
cv.put("keyword", TextUtils.join(" ", message.keywords)); cv.put("keyword", TextUtils.join(" ", message.keywords));
cv.put("text", breakText(text)); cv.put("text", processBreakText(text));
cv.put("notes", breakText(message.notes)); cv.put("notes", processBreakText(message.notes));
db.insertWithOnConflict("message", null, cv, SQLiteDatabase.CONFLICT_FAIL); db.insertWithOnConflict("message", null, cv, SQLiteDatabase.CONFLICT_FAIL);
} }
@ -138,12 +138,14 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
.replaceAll("[\\p{InCombiningDiacriticalMarks}]", ""); .replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
} }
static String breakText(String text) { static String processBreakText(String text) {
if (TextUtils.isEmpty(text)) if (TextUtils.isEmpty(text))
return ""; return "";
text = preprocessText(text); return breakText(preprocessText(text));
}
static String breakText(String text) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
return text; return text;
@ -187,7 +189,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
SQLiteDatabase db, SQLiteDatabase db,
Long account, Long folder, long[] exclude, Long account, Long folder, long[] exclude,
BoundaryCallbackMessages.SearchCriteria criteria, String query) { BoundaryCallbackMessages.SearchCriteria criteria, String query) {
String search = escape(breakText(query)); String search = escape(processBreakText(query));
String select = ""; String select = "";
if (account != null) if (account != null)

@ -3009,7 +3009,8 @@ public class HtmlHelper {
sb.insert(0, ".*?\\b("); sb.insert(0, ".*?\\b(");
sb.append(")\\b.*?"); sb.append(")\\b.*?");
Pattern p = Pattern.compile(sb.toString(), Pattern.DOTALL); // TODO: match für for fur
Pattern p = Pattern.compile(sb.toString(), Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
NodeTraversor.traverse(new NodeVisitor() { NodeTraversor.traverse(new NodeVisitor() {
@Override @Override
@ -3017,9 +3018,7 @@ public class HtmlHelper {
if (node instanceof TextNode) if (node instanceof TextNode)
try { try {
TextNode tnode = (TextNode) node; TextNode tnode = (TextNode) node;
String whole = tnode.getWholeText(); String text = tnode.getWholeText();
String text = Fts4DbHelper.preprocessText(whole);
String ref = (whole.length() == text.length() ? whole : text);
Matcher result = p.matcher(text); Matcher result = p.matcher(text);
@ -3029,7 +3028,7 @@ public class HtmlHelper {
int start = result.start(1); int start = result.start(1);
int end = result.end(1); int end = result.end(1);
holder.appendText(ref.substring(prev, start)); holder.appendText(text.substring(prev, start));
Element span = document.createElement("span"); Element span = document.createElement("span");
span.attr("style", mergeStyles( span.attr("style", mergeStyles(
@ -3037,7 +3036,7 @@ public class HtmlHelper {
"font-size:larger !important;" + "font-size:larger !important;" +
"font-weight:bold !important;" + "font-weight:bold !important;" +
"background-color:" + encodeWebColor(color) + " !important")); "background-color:" + encodeWebColor(color) + " !important"));
span.text(ref.substring(start, end)); span.text(text.substring(start, end));
holder.appendChild(span); holder.appendChild(span);
prev = end; prev = end;
@ -3047,7 +3046,7 @@ public class HtmlHelper {
return; return;
if (prev < text.length()) if (prev < text.length())
holder.appendText(ref.substring(prev)); holder.appendText(text.substring(prev));
tnode.before(holder); tnode.before(holder);
tnode.text(""); tnode.text("");

Loading…
Cancel
Save