diff --git a/http-ui/Cargo.toml b/http-ui/Cargo.toml
index 7406a1c1b..f45a85753 100644
--- a/http-ui/Cargo.toml
+++ b/http-ui/Cargo.toml
@@ -17,7 +17,6 @@ once_cell = "1.5.2"
rayon = "1.5.0"
structopt = { version = "0.3.21", default-features = false, features = ["wrap_help"] }
tempfile = "3.2.0"
-unicode-segmentation = "1.6.0"
# http server
askama = "0.10.5"
diff --git a/http-ui/src/main.rs b/http-ui/src/main.rs
index 386f10cb4..6502bf83a 100644
--- a/http-ui/src/main.rs
+++ b/http-ui/src/main.rs
@@ -34,7 +34,6 @@ use structopt::StructOpt;
use tokio::fs::File as TFile;
use tokio::io::AsyncWriteExt;
use tokio::sync::broadcast;
-use unicode_segmentation::UnicodeSegmentation;
use warp::filters::ws::Message;
use warp::http::Response;
use warp::Filter;
@@ -161,21 +160,19 @@ impl<'a, A: AsRef<[u8]>> Highlighter<'a, A> {
let analyzed = self.analyzer.analyze(&old_string);
for (word, token) in analyzed.reconstruct() {
if token.is_word() {
- let chars_to_highlight = matching_words.matching_bytes(&token).unwrap_or(0);
- if chars_to_highlight > 0 {
- let graphemes = word.graphemes(true);
- let chars = graphemes.clone().into_iter();
+ match matching_words.matching_bytes(&token) {
+ Some(chars_to_highlight) => {
+ let mut chars = word.chars();
- string.push_str("");
- string.push_str(
- chars.take(chars_to_highlight).collect::().as_str(),
- );
- string.push_str("");
-
- let chars = graphemes.into_iter().skip(chars_to_highlight);
- string.push_str(chars.collect::().as_str());
- } else {
- string.push_str(word);
+ string.push_str("");
+ // push the part to highlight
+ string.extend(chars.by_ref().take(chars_to_highlight));
+ string.push_str("");
+ // push the suffix after highlight
+ string.extend(chars);
+ }
+ // no highlight
+ None => string.push_str(word),
}
} else {
string.push_str(word);