diff --git a/cmd/sklad/main.go b/cmd/sklad/main.go index 5f10348..aebb5c1 100644 --- a/cmd/sklad/main.go +++ b/cmd/sklad/main.go @@ -2,6 +2,7 @@ package main import ( "errors" + "html" "html/template" "io" "log" @@ -11,6 +12,7 @@ import ( "os" "path" "path/filepath" + "regexp" "strings" "sync" "time" @@ -355,6 +357,19 @@ var funcMap = template.FuncMap{ "lines": func(s string) int { return strings.Count(s, "\n") + 1 }, + "highlight": func(highlight, s string) template.HTML { + b, last := strings.Builder{}, 0 + for _, m := range regexp.MustCompile( + `(?i:`+regexp.QuoteMeta(highlight)+`)`).FindAllStringIndex(s, -1) { + b.WriteString(html.EscapeString(s[last:m[0]])) + b.WriteString(``) + b.WriteString(html.EscapeString(s[m[0]:m[1]])) + b.WriteString(``) + last = m[1] + } + b.WriteString(html.EscapeString(s[last:])) + return template.HTML(b.String()) + }, } func main() { diff --git a/cmd/sklad/search.tmpl b/cmd/sklad/search.tmpl index 0c58bf9..b7a890e 100644 --- a/cmd/sklad/search.tmpl +++ b/cmd/sklad/search.tmpl @@ -9,7 +9,7 @@

{{ .Prefix }}

-

{{ .Description }} +

{{ .Description | highlight $.Query }}

{{ else }} @@ -28,7 +28,7 @@ {{- if .Description }} -

{{ .Description }} +

{{ .Description | highlight $.Query }} {{- end }} {{ else }}