summaryrefslogtreecommitdiff
path: root/src-3.0/GF/Speech/SRG.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src-3.0/GF/Speech/SRG.hs')
-rw-r--r--src-3.0/GF/Speech/SRG.hs38
1 files changed, 18 insertions, 20 deletions
diff --git a/src-3.0/GF/Speech/SRG.hs b/src-3.0/GF/Speech/SRG.hs
index defd647d7..e331f1881 100644
--- a/src-3.0/GF/Speech/SRG.hs
+++ b/src-3.0/GF/Speech/SRG.hs
@@ -96,17 +96,12 @@ stats g = "Categories: " ++ show (countCats g)
makeNonRecursiveSRG :: PGF
-> CId -- ^ Concrete syntax name.
-> SRG
-makeNonRecursiveSRG pgf cnc =
- SRG { srgName = prCId cnc,
- srgStartCat = start,
- srgExternalCats = cfgExternalCats cfg,
- srgLanguage = getSpeechLanguage pgf cnc,
- srgRules = rs }
- where
- cfg = pgfToCFG pgf cnc
- MFA start dfas = cfgToMFA cfg
- rs = [SRGRule l [SRGAlt Nothing dummyCFTerm (dfaToSRGItem dfa)] | (l,dfa) <- dfas]
- where dfaToSRGItem = mapRE dummySRGNT . minimizeRE . dfa2re
+makeNonRecursiveSRG = mkSRG mkRules
+ where
+ mkRules cfg = [SRGRule l [SRGAlt Nothing dummyCFTerm (dfaToSRGItem dfa)] | (l,dfa) <- dfas]
+ where
+ MFA _ dfas = cfgToMFA cfg
+ dfaToSRGItem = mapRE dummySRGNT . minimizeRE . dfa2re
dummyCFTerm = CFMeta (mkCId "dummy")
dummySRGNT = mapSymbol (\c -> (c,0)) id
@@ -114,16 +109,19 @@ makeSRG :: (CFG -> CFG)
-> PGF
-> CId -- ^ Concrete syntax name.
-> SRG
-makeSRG preprocess pgf cnc =
- SRG { srgName = prCId cnc,
- srgStartCat = cfgStartCat cfg,
- srgExternalCats = cfgExternalCats cfg,
- srgLanguage = getSpeechLanguage pgf cnc,
- srgRules = rs }
+makeSRG preprocess = mkSRG mkRules
where
- cfg = pgfToCFG pgf cnc
- (_,cfgRules) = unzip $ allRulesGrouped $ preprocess cfg
- rs = map cfRulesToSRGRule cfgRules
+ mkRules = map cfRulesToSRGRule . snd . unzip . allRulesGrouped . preprocess
+
+mkSRG :: (CFG -> [SRGRule]) -> PGF -> CId -> SRG
+mkSRG mkRules pgf cnc =
+ SRG { srgName = prCId cnc,
+ srgStartCat = cfgStartCat cfg,
+ srgExternalCats = cfgExternalCats cfg,
+ srgLanguage = getSpeechLanguage pgf cnc,
+ srgRules = mkRules cfg }
+ where cfg = renameExternal $ pgfToCFG pgf cnc
+ renameExternal cfg' = mapCFGCats (\c -> if c `Set.member` cfgExternalCats cfg' then c ++ "_cat" else c) cfg'
getSpeechLanguage :: PGF -> CId -> Maybe String
getSpeechLanguage pgf cnc = fmap (replace '_' '-') $ lookConcrFlag pgf cnc (mkCId "language")