{-# LANGUAGE GADTs #-}
{-# LANGUAGE NoRebindableSyntax #-}
{-# LANGUAGE OverloadedStrings #-}
module Duckling.Time.EN.PH.Rules
( rules
) where
import Data.Maybe
import Prelude
import Duckling.Dimensions.Types
import Duckling.Numeral.Helpers (parseInt)
import Duckling.Regex.Types
import Duckling.Time.Helpers
import Duckling.Time.Types (TimeData (..))
import Duckling.Types
ruleMMDD :: Rule
ruleMMDD = Rule
{ name = "mm/dd"
, pattern =
[ regex "(1[0-2]|0?[1-9])\\s?[/-]\\s?(3[01]|[12]\\d|0?[1-9])"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (mm:dd:_)):_) -> do
m <- parseInt mm
d <- parseInt dd
tt $ monthDay m d
_ -> Nothing
}
ruleMMDDYYYY :: Rule
ruleMMDDYYYY = Rule
{ name = "mm/dd/yyyy"
, pattern =
[ regex "(1[0-2]|0?[1-9])[-/\\s](3[01]|[12]\\d|0?[1-9])[-/\\s](\\d{2,4})"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (mm:dd:yy:_)):_) -> do
y <- parseInt yy
m <- parseInt mm
d <- parseInt dd
tt $ yearMonthDay y m d
_ -> Nothing
}
ruleMMDDYYYYDot :: Rule
ruleMMDDYYYYDot = Rule
{ name = "mm.dd.yyyy"
, pattern =
[ regex "(1[0-2]|0?[1-9])\\.(3[01]|[12]\\d|0?[1-9])\\.(\\d{4})"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (mm:dd:yy:_)):_) -> do
y <- parseInt yy
m <- parseInt mm
d <- parseInt dd
tt $ yearMonthDay y m d
_ -> Nothing
}
rulePeriodicHolidays :: [Rule]
rulePeriodicHolidays = mkRuleHolidays
[ ( "Arbor Day", "arbor day", monthDay 6 25 )
, ( "Bonifacio Day", "bonifacio day", monthDay 11 30 )
, ( "Independence Day", "independence day", monthDay 6 12 )
, ( "Labour Day", "labour day", monthDay 5 1 )
, ( "Ninoy Aquino Day", "ninoy aquino day", monthDay 8 21 )
, ( "People Power Anniversary", "(edsa revolution|people power) anniversary"
, monthDay 2 25 )
, ( "Rizal Day", "rizal day", monthDay 12 30 )
, ( "The Day of Valor", "the day of valor", monthDay 4 9 )
, ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )
, ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )
, ( "National Elections Day", "national elections day", nthDOWOfMonth 2 1 5 )
, ( "National Heroes' Day", "(national )?heroes' day"
, predLastOf (dayOfWeek 1) (month 8) )
, ( "Parents' Day", "parents' day", nthDOWOfMonth 1 1 12 )
, ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )
]
rules :: [Rule]
rules =
[ ruleMMDD
, ruleMMDDYYYY
, ruleMMDDYYYYDot
]
++ rulePeriodicHolidays