summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GF/Speech/SRG.hs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/GF/Speech/SRG.hs b/src/GF/Speech/SRG.hs
index 3bf431eb1..7ac5ab081 100644
--- a/src/GF/Speech/SRG.hs
+++ b/src/GF/Speech/SRG.hs
@@ -140,8 +140,8 @@ cfRulesToSRGRule rs@(r:_) = SRGRule (lhsCat r) rhs
mkSRGSymbols i (NonTerminal c:ss) = NonTerminal (c,i) : mkSRGSymbols (i+1) ss
mkSRGSymbols i (Terminal t:ss) = Terminal t : mkSRGSymbols i ss
-allSRGCats :: SRG -> [String]
-allSRGCats SRG { srgRules = rs } = [c | SRGRule c _ <- rs]
+srgLHSCat :: SRGRule -> Cat
+srgLHSCat (SRGRule c _) = c
isExternalCat :: SRG -> Cat -> Bool
isExternalCat srg c = c `Set.member` srgExternalCats srg
@@ -175,8 +175,9 @@ ungroupTokens = joinRE . mapRE (symbol (RESymbol . NonTerminal) (REConcat . map
--
prSRG :: SRG -> String
-prSRG = prProductions . map prRule . srgRules
+prSRG srg = prProductions $ map prRule $ ext ++ int
where
+ (ext,int) = partition (isExternalCat srg . srgLHSCat) (srgRules srg)
prRule (SRGRule c alts) = (c,unwords (intersperse "|" (map prAlt alts)))
prAlt (SRGAlt _ _ rhs) = prRE prSym rhs
prSym = symbol fst (\t -> "\""++ t ++"\"")