mirror of
https://github.com/facebook/duckling.git
synced 2024-11-28 08:34:46 +03:00
f70f991b38
Summary: Duckling didn't support Lao numerals, this diff adds it. Reviewed By: patapizza Differential Revision: D9323242 fbshipit-source-id: 5dad0d4dfb4843281a327947690e664c91ab8f1a
204 lines
7.5 KiB
Haskell
204 lines
7.5 KiB
Haskell
-- Copyright (c) 2016-present, Facebook, Inc.
|
|
-- All rights reserved.
|
|
--
|
|
-- This source code is licensed under the BSD-style license found in the
|
|
-- LICENSE file in the root directory of this source tree. An additional grant
|
|
-- of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
|
|
{-# LANGUAGE GADTs #-}
|
|
{-# LANGUAGE NoRebindableSyntax #-}
|
|
|
|
module Duckling.Rules
|
|
( allRules
|
|
, rulesFor
|
|
) where
|
|
|
|
import Data.HashSet (HashSet)
|
|
import Prelude
|
|
import qualified Data.HashSet as HashSet
|
|
|
|
import Duckling.Dimensions
|
|
import Duckling.Dimensions.Types
|
|
import Duckling.Locale
|
|
import Duckling.Types
|
|
import qualified Duckling.Rules.AR as ARRules
|
|
import qualified Duckling.Rules.Common as CommonRules
|
|
import qualified Duckling.Rules.BG as BGRules
|
|
import qualified Duckling.Rules.BN as BNRules
|
|
import qualified Duckling.Rules.CS as CSRules
|
|
import qualified Duckling.Rules.DA as DARules
|
|
import qualified Duckling.Rules.DE as DERules
|
|
import qualified Duckling.Rules.EL as ELRules
|
|
import qualified Duckling.Rules.EN as ENRules
|
|
import qualified Duckling.Rules.ES as ESRules
|
|
import qualified Duckling.Rules.ET as ETRules
|
|
import qualified Duckling.Rules.FI as FIRules
|
|
import qualified Duckling.Rules.FR as FRRules
|
|
import qualified Duckling.Rules.GA as GARules
|
|
import qualified Duckling.Rules.HE as HERules
|
|
import qualified Duckling.Rules.HI as HIRules
|
|
import qualified Duckling.Rules.HR as HRRules
|
|
import qualified Duckling.Rules.HU as HURules
|
|
import qualified Duckling.Rules.ID as IDRules
|
|
import qualified Duckling.Rules.IT as ITRules
|
|
import qualified Duckling.Rules.JA as JARules
|
|
import qualified Duckling.Rules.KA as KARules
|
|
import qualified Duckling.Rules.KM as KMRules
|
|
import qualified Duckling.Rules.KO as KORules
|
|
import qualified Duckling.Rules.LO as LORules
|
|
import qualified Duckling.Rules.MY as MYRules
|
|
import qualified Duckling.Rules.NB as NBRules
|
|
import qualified Duckling.Rules.NE as NERules
|
|
import qualified Duckling.Rules.NL as NLRules
|
|
import qualified Duckling.Rules.PL as PLRules
|
|
import qualified Duckling.Rules.PT as PTRules
|
|
import qualified Duckling.Rules.RO as RORules
|
|
import qualified Duckling.Rules.RU as RURules
|
|
import qualified Duckling.Rules.SV as SVRules
|
|
import qualified Duckling.Rules.TA as TARules
|
|
import qualified Duckling.Rules.TR as TRRules
|
|
import qualified Duckling.Rules.UK as UKRules
|
|
import qualified Duckling.Rules.VI as VIRules
|
|
import qualified Duckling.Rules.ZH as ZHRules
|
|
|
|
-- | Returns the minimal set of rules required for `targets`.
|
|
rulesFor :: Locale -> HashSet (Some Dimension) -> [Rule]
|
|
rulesFor locale targets
|
|
| HashSet.null targets = allRules locale
|
|
| otherwise = [ rules | dims <- HashSet.toList $ explicitDimensions targets
|
|
, rules <- rulesFor' locale dims ]
|
|
|
|
-- | Returns all the rules for the provided locale.
|
|
-- We can't really use `allDimensions` as-is, since `TimeGrain` is not present.
|
|
allRules :: Locale -> [Rule]
|
|
allRules locale@(Locale lang _) = concatMap (rulesFor' locale) . HashSet.toList
|
|
. explicitDimensions . HashSet.fromList $ allDimensions lang
|
|
|
|
rulesFor' :: Locale -> Some Dimension -> [Rule]
|
|
rulesFor' (Locale lang (Just region)) dim =
|
|
CommonRules.rules dim ++ langRules lang dim ++ localeRules lang region dim
|
|
rulesFor' (Locale lang Nothing) dim =
|
|
CommonRules.rules dim ++ defaultRules lang dim
|
|
|
|
-- | Default rules when no locale, for backward compatibility.
|
|
defaultRules :: Lang -> Some Dimension -> [Rule]
|
|
defaultRules AR = ARRules.defaultRules
|
|
defaultRules BG = BGRules.defaultRules
|
|
defaultRules BN = BNRules.defaultRules
|
|
defaultRules CS = CSRules.defaultRules
|
|
defaultRules DA = DARules.defaultRules
|
|
defaultRules DE = DERules.defaultRules
|
|
defaultRules EL = ELRules.defaultRules
|
|
defaultRules EN = ENRules.defaultRules
|
|
defaultRules ES = ESRules.defaultRules
|
|
defaultRules ET = ETRules.defaultRules
|
|
defaultRules FI = FIRules.defaultRules
|
|
defaultRules FR = FRRules.defaultRules
|
|
defaultRules GA = GARules.defaultRules
|
|
defaultRules HE = HERules.defaultRules
|
|
defaultRules HI = HIRules.defaultRules
|
|
defaultRules HR = HRRules.defaultRules
|
|
defaultRules HU = HURules.defaultRules
|
|
defaultRules ID = IDRules.defaultRules
|
|
defaultRules IT = ITRules.defaultRules
|
|
defaultRules JA = JARules.defaultRules
|
|
defaultRules KA = KARules.defaultRules
|
|
defaultRules KM = KMRules.defaultRules
|
|
defaultRules KO = KORules.defaultRules
|
|
defaultRules LO = LORules.defaultRules
|
|
defaultRules MY = MYRules.defaultRules
|
|
defaultRules NB = NBRules.defaultRules
|
|
defaultRules NE = NERules.defaultRules
|
|
defaultRules NL = NLRules.defaultRules
|
|
defaultRules PL = PLRules.defaultRules
|
|
defaultRules PT = PTRules.defaultRules
|
|
defaultRules RO = RORules.defaultRules
|
|
defaultRules RU = RURules.defaultRules
|
|
defaultRules SV = SVRules.defaultRules
|
|
defaultRules TA = TARules.defaultRules
|
|
defaultRules TR = TRRules.defaultRules
|
|
defaultRules UK = UKRules.defaultRules
|
|
defaultRules VI = VIRules.defaultRules
|
|
defaultRules ZH = ZHRules.defaultRules
|
|
|
|
localeRules :: Lang -> Region -> Some Dimension -> [Rule]
|
|
localeRules AR = ARRules.localeRules
|
|
localeRules BG = BGRules.localeRules
|
|
localeRules BN = BNRules.localeRules
|
|
localeRules CS = CSRules.localeRules
|
|
localeRules DA = DARules.localeRules
|
|
localeRules DE = DERules.localeRules
|
|
localeRules EL = ELRules.localeRules
|
|
localeRules EN = ENRules.localeRules
|
|
localeRules ES = ESRules.localeRules
|
|
localeRules ET = ETRules.localeRules
|
|
localeRules FI = FIRules.localeRules
|
|
localeRules FR = FRRules.localeRules
|
|
localeRules GA = GARules.localeRules
|
|
localeRules HE = HERules.localeRules
|
|
localeRules HI = HIRules.localeRules
|
|
localeRules HR = HRRules.localeRules
|
|
localeRules HU = HURules.localeRules
|
|
localeRules ID = IDRules.localeRules
|
|
localeRules IT = ITRules.localeRules
|
|
localeRules JA = JARules.localeRules
|
|
localeRules KA = KARules.localeRules
|
|
localeRules KM = KMRules.localeRules
|
|
localeRules KO = KORules.localeRules
|
|
localeRules LO = LORules.localeRules
|
|
localeRules MY = MYRules.localeRules
|
|
localeRules NB = NBRules.localeRules
|
|
localeRules NE = NERules.localeRules
|
|
localeRules NL = NLRules.localeRules
|
|
localeRules PL = PLRules.localeRules
|
|
localeRules PT = PTRules.localeRules
|
|
localeRules RO = RORules.localeRules
|
|
localeRules RU = RURules.localeRules
|
|
localeRules SV = SVRules.localeRules
|
|
localeRules TA = TARules.localeRules
|
|
localeRules TR = TRRules.localeRules
|
|
localeRules UK = UKRules.localeRules
|
|
localeRules VI = VIRules.localeRules
|
|
localeRules ZH = ZHRules.localeRules
|
|
|
|
langRules :: Lang -> Some Dimension -> [Rule]
|
|
langRules AR = ARRules.langRules
|
|
langRules BG = BGRules.langRules
|
|
langRules BN = BNRules.langRules
|
|
langRules CS = CSRules.langRules
|
|
langRules DA = DARules.langRules
|
|
langRules DE = DERules.langRules
|
|
langRules EL = ELRules.langRules
|
|
langRules EN = ENRules.langRules
|
|
langRules ES = ESRules.langRules
|
|
langRules ET = ETRules.langRules
|
|
langRules FI = FIRules.langRules
|
|
langRules FR = FRRules.langRules
|
|
langRules GA = GARules.langRules
|
|
langRules HE = HERules.langRules
|
|
langRules HI = HIRules.langRules
|
|
langRules HR = HRRules.langRules
|
|
langRules HU = HURules.langRules
|
|
langRules ID = IDRules.langRules
|
|
langRules IT = ITRules.langRules
|
|
langRules JA = JARules.langRules
|
|
langRules KA = KARules.langRules
|
|
langRules KM = KMRules.langRules
|
|
langRules KO = KORules.langRules
|
|
langRules LO = LORules.langRules
|
|
langRules MY = MYRules.langRules
|
|
langRules NB = NBRules.langRules
|
|
langRules NE = NERules.langRules
|
|
langRules NL = NLRules.langRules
|
|
langRules PL = PLRules.langRules
|
|
langRules PT = PTRules.langRules
|
|
langRules RO = RORules.langRules
|
|
langRules RU = RURules.langRules
|
|
langRules SV = SVRules.langRules
|
|
langRules TA = TARules.langRules
|
|
langRules TR = TRRules.langRules
|
|
langRules UK = UKRules.langRules
|
|
langRules VI = VIRules.langRules
|
|
langRules ZH = ZHRules.langRules
|