module Duckling.Ordinal.SV.Rules
( rules ) where
import qualified Data.Text as Text
import Prelude
import Data.String
import Duckling.Dimensions.Types
import Duckling.Numeral.Helpers (parseInt)
import Duckling.Ordinal.Helpers
import Duckling.Regex.Types
import Duckling.Types
ruleOrdinalsFirstst :: Rule
ruleOrdinalsFirstst = Rule
{ name = "ordinals (first..31st)"
, pattern =
[ regex "(f\x00f6rste|f\x00f6rsta|andra|tredje|fj\x00e4rde|femte|sj\x00e4tte|sjunde|\x00e5ttonde|nionde|tionde|ellevte|tolfte|trettonde|fjortonde|femtonde|sekstende|syttende|attende|nittende|tyvende|tjuende|enogtyvende|toogtyvende|treogtyvende|fireogtyvende|femogtyvende|seksogtyvende|syvogtyvende|\x00e5tteogtyvende|niogtyvende|enogtjuende|toogtjuende|treogtjuende|fireogtjuende|femogtjuende|seksogtjuende|syvogtjuende|\x00e5tteogtyvend|niogtjuende|tredefte|enogtredefte)"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) -> case Text.toLower match of
"f\x00f6rsta" -> Just $ ordinal 1
"f\x00f6rste" -> Just $ ordinal 1
"andra" -> Just $ ordinal 2
"tredje" -> Just $ ordinal 3
"fj\x00e4rde" -> Just $ ordinal 4
"femte" -> Just $ ordinal 5
"sj\x00e4tte" -> Just $ ordinal 6
"sjunde" -> Just $ ordinal 7
"\x00e5ttonde" -> Just $ ordinal 8
"nionde" -> Just $ ordinal 9
"tionde" -> Just $ ordinal 10
"ellevte" -> Just $ ordinal 11
"tolfte" -> Just $ ordinal 12
"trettonde" -> Just $ ordinal 13
"fjortonde" -> Just $ ordinal 14
"femtonde" -> Just $ ordinal 15
"sekstende" -> Just $ ordinal 16
"syttende" -> Just $ ordinal 17
"attende" -> Just $ ordinal 18
"nittende" -> Just $ ordinal 19
"tyvende" -> Just $ ordinal 20
"tjuende" -> Just $ ordinal 20
"enogtjuende" -> Just $ ordinal 21
"enogtyvende" -> Just $ ordinal 21
"toogtyvende" -> Just $ ordinal 22
"toogtjuende" -> Just $ ordinal 22
"treogtyvende" -> Just $ ordinal 23
"treogtjuende" -> Just $ ordinal 23
"fireogtjuende" -> Just $ ordinal 24
"fireogtyvende" -> Just $ ordinal 24
"femogtyvende" -> Just $ ordinal 25
"femogtjuende" -> Just $ ordinal 25
"seksogtjuende" -> Just $ ordinal 26
"seksogtyvende" -> Just $ ordinal 26
"syvogtyvende" -> Just $ ordinal 27
"syvogtjuende" -> Just $ ordinal 27
"\x00e5tteogtyvende" -> Just $ ordinal 28
"\x00e5tteogtjuende" -> Just $ ordinal 28
"niogtyvende" -> Just $ ordinal 29
"niogtjuende" -> Just $ ordinal 29
"tredefte" -> Just $ ordinal 30
"enogtredefte" -> Just $ ordinal 31
_ -> Nothing
_ -> Nothing
}
ruleOrdinalDigits :: Rule
ruleOrdinalDigits = Rule
{ name = "ordinal (digits)"
, pattern =
[ regex "0*(\\d+)(\\.|e|\\:[ae])?"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) -> ordinal <$> parseInt match
_ -> Nothing
}
rules :: [Rule]
rules =
[ ruleOrdinalDigits
, ruleOrdinalsFirstst
]