diff --git a/go.mod b/go.mod index f212181..d9226b0 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module git.adyxax.org/adyxax/ods/v2 go 1.22.1 + +require golang.org/x/text v0.14.0 // indirect diff --git a/main.go b/main.go index 6fe702d..42ea1a1 100644 --- a/main.go +++ b/main.go @@ -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