module Duckling.Ordinal.ES.Rules
( rules ) where
import qualified Data.HashMap.Strict as HashMap
import qualified Data.Text as Text
import Prelude
import Data.String
import Duckling.Dimensions.Types
import Duckling.Ordinal.Helpers
import Duckling.Regex.Types
import Duckling.Types
ordinalsMap :: HashMap.HashMap Text.Text Int
ordinalsMap = HashMap.fromList
[ ( "primer" , 1 )
, ( "primero" , 1 )
, ( "primeros" , 1 )
, ( "primera" , 1 )
, ( "primeras" , 1 )
, ( "segundo" , 2 )
, ( "segunda" , 2 )
, ( "segundas" , 2 )
, ( "segundos" , 2 )
, ( "terceros" , 3 )
, ( "tercera" , 3 )
, ( "terceras" , 3 )
, ( "tercero" , 3 )
, ( "tercer" , 3 )
, ( "cuarta" , 4 )
, ( "cuartas" , 4 )
, ( "cuartos" , 4 )
, ( "cuarto" , 4 )
, ( "quinto" , 5 )
, ( "quinta" , 5 )
, ( "quintas" , 5 )
, ( "quintos" , 5 )
, ( "sextos" , 6 )
, ( "sexto" , 6 )
, ( "sexta" , 6 )
, ( "sextas" , 6 )
, ( "s\x00e9ptimas" , 7 )
, ( "septimas" , 7 )
, ( "s\x00e9ptima" , 7 )
, ( "septimos" , 7 )
, ( "septima" , 7 )
, ( "s\x00e9ptimo" , 7 )
, ( "s\x00e9ptimos" , 7 )
, ( "septimo" , 7 )
, ( "octavas" , 8 )
, ( "octavo" , 8 )
, ( "octavos" , 8 )
, ( "octava" , 8 )
, ( "novenos" , 9 )
, ( "novena" , 9 )
, ( "noveno" , 9 )
, ( "novenas" , 9 )
, ( "d\x00e9cimos" , 10 )
, ( "decimo" , 10 )
, ( "decimos" , 10 )
, ( "d\x00e9cimo" , 10 )
, ( "decimas" , 10 )
, ( "d\x00e9cima" , 10 )
, ( "decima" , 10 )
, ( "d\x00e9cimas" , 10 )
]
ruleOrdinalsPrimero :: Rule
ruleOrdinalsPrimero = Rule
{ name = "ordinals (primero..10)"
, pattern =
[ regex "(primer|tercer(os?|as?)?|(primer|segund|cuart|quint|sext|s[e\x00e9]ptim|octav|noven|d[e\x00e9]cim)(os?|as?))"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) ->
ordinal <$> HashMap.lookup (Text.toLower match) ordinalsMap
_ -> Nothing
}
rules :: [Rule]
rules =
[ ruleOrdinalsPrimero
]