diff options
author | Julien Dessaux | 2024-03-27 10:08:09 +0100 |
---|---|---|
committer | Julien Dessaux | 2024-03-27 10:08:09 +0100 |
commit | a6fd4a153d28a8c1c801003cec4e09ddfe1dcd60 (patch) | |
tree | e50e668927796c47b3610e0764346c7058d5d325 | |
parent | feat(ods): trim spaces around the searched word (diff) | |
download | ods-a6fd4a153d28a8c1c801003cec4e09ddfe1dcd60.tar.gz ods-a6fd4a153d28a8c1c801003cec4e09ddfe1dcd60.tar.bz2 ods-a6fd4a153d28a8c1c801003cec4e09ddfe1dcd60.zip |
feat(ods): normalize all unicode characters to their ascii equivalents
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | main.go | 15 |
2 files changed, 12 insertions, 5 deletions
@@ -1,3 +1,5 @@ module git.adyxax.org/adyxax/ods/v2 go 1.22.1 + +require golang.org/x/text v0.14.0 // indirect @@ -2,10 +2,14 @@ package main import ( "embed" + "golang.org/x/text/runes" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" "html/template" "log/slog" "net/http" "strings" + "unicode" ) // Variables to customise the search behaviour @@ -28,14 +32,14 @@ var indexTemplate = template.Must(template.New("index").ParseFS(templatesFS, "in type IndexData struct { HasQuery bool Query string - Invalid bool + Invalid bool } func getIndex() http.Handler { data := IndexData{ HasQuery: false, Query: "", - Invalid: true, + Invalid: true, } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-store, no-cache") @@ -44,14 +48,15 @@ func getIndex() http.Handler { } func postIndex() http.Handler { - words := strings.Split(ods,"\n") + normalizer := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) + words := strings.Split(ods, "\n") return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { data := IndexData{ HasQuery: true, Query: r.FormValue("query"), - Invalid: true, + Invalid: true, } - query := strings.TrimSpace(strings.ToUpper(data.Query)) + query, _, _ := transform.String(normalizer, strings.TrimSpace(strings.ToUpper(data.Query))) for _, w := range words { if w == query { data.Invalid = false |