Improved search highlight

This commit is contained in:
M66B 2023-09-26 10:50:45 +02:00
parent 19c7d36e2b
commit 6aa1bfea9d
3 changed files with 16 additions and 15 deletions

View File

@ -881,7 +881,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
if (TextUtils.isEmpty(text))
return false;
text = Fts4DbHelper.breakText(text);
text = Fts4DbHelper.processBreakText(text);
List<String> word = new ArrayList<>();
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))))
return false;
} else
word.addAll(Arrays.asList(Fts4DbHelper.breakText(w).split("\\s+")));
word.addAll(Arrays.asList(Fts4DbHelper.processBreakText(w).split("\\s+")));
if (word.size() == 0)
return true;

View File

@ -118,10 +118,10 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
cv.put("folder", message.folder);
cv.put("time", message.received);
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("text", breakText(text));
cv.put("notes", breakText(message.notes));
cv.put("text", processBreakText(text));
cv.put("notes", processBreakText(message.notes));
db.insertWithOnConflict("message", null, cv, SQLiteDatabase.CONFLICT_FAIL);
}
@ -138,12 +138,14 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
}
static String breakText(String text) {
static String processBreakText(String text) {
if (TextUtils.isEmpty(text))
return "";
text = preprocessText(text);
return breakText(preprocessText(text));
}
static String breakText(String text) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
return text;
@ -187,7 +189,7 @@ public class Fts4DbHelper extends SQLiteOpenHelper {
SQLiteDatabase db,
Long account, Long folder, long[] exclude,
BoundaryCallbackMessages.SearchCriteria criteria, String query) {
String search = escape(breakText(query));
String search = escape(processBreakText(query));
String select = "";
if (account != null)

View File

@ -3009,7 +3009,8 @@ public class HtmlHelper {
sb.insert(0, ".*?\\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() {
@Override
@ -3017,9 +3018,7 @@ public class HtmlHelper {
if (node instanceof TextNode)
try {
TextNode tnode = (TextNode) node;
String whole = tnode.getWholeText();
String text = Fts4DbHelper.preprocessText(whole);
String ref = (whole.length() == text.length() ? whole : text);
String text = tnode.getWholeText();
Matcher result = p.matcher(text);
@ -3029,7 +3028,7 @@ public class HtmlHelper {
int start = result.start(1);
int end = result.end(1);
holder.appendText(ref.substring(prev, start));
holder.appendText(text.substring(prev, start));
Element span = document.createElement("span");
span.attr("style", mergeStyles(
@ -3037,7 +3036,7 @@ public class HtmlHelper {
"font-size:larger !important;" +
"font-weight:bold !important;" +
"background-color:" + encodeWebColor(color) + " !important"));
span.text(ref.substring(start, end));
span.text(text.substring(start, end));
holder.appendChild(span);
prev = end;
@ -3047,7 +3046,7 @@ public class HtmlHelper {
return;
if (prev < text.length())
holder.appendText(ref.substring(prev));
holder.appendText(text.substring(prev));
tnode.before(holder);
tnode.text("");