google-handwriting-api-elm/src/ResultFiltering.elm

67 lines
2.0 KiB
Elm
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

module ResultFiltering exposing (FilterState, Filter, Msg(..), initFilterState, filterUpdate, postProcess)
import Regex as R
import Tuple exposing (first, second)
import List exposing (filter, head)
import Maybe as M
import List exposing (foldl)
type alias CharRange = String
type alias Filter = (Bool, CharRange)
type alias FilterState = {
kanji : Filter
, hiragana : Filter
, katakana : Filter
, all : Filter
}
initFilterState : FilterState
initFilterState = {
kanji = (True, "-")
, hiragana = (True, "")
, katakana = (True, "-")
, all = (False, ".+")
}
toggleFilterState : Filter -> Filter
toggleFilterState (b, r) = (not b, r)
type Msg = Kanji
| Hiragana
| Katakana
| All
| Reset
{-| Handle updates regarding the filter -}
filterUpdate : Msg -> FilterState -> FilterState
filterUpdate msg filters=
case msg of
Kanji -> { filters | kanji = toggleFilterState filters.kanji }
Hiragana -> { filters | hiragana = toggleFilterState filters.hiragana }
Katakana -> { filters | katakana = toggleFilterState filters.katakana }
All -> { filters | all = toggleFilterState filters.all }
Reset -> initFilterState
{-| Filter out different kanji based on the current filters -}
postProcess : List String -> FilterState -> List String
postProcess xs filterState =
let
regex =
(if first filterState.all
then second filterState.all
else [ filterState.kanji, filterState.hiragana, filterState.katakana ]
|> List.map (\(b,r) -> if b then r else "")
|> foldl (++) ""
|> \s -> "^[" ++ s ++ "]*$")
|> R.fromString
|> M.withDefault R.never
matchesRegex : String -> Bool
matchesRegex x = head (R.find regex x)
|> Maybe.map .match
|> Maybe.withDefault ""
|> (==) x
in
filter matchesRegex xs