1
0
forked from GitHub/gf-core

Fix handling of external categories in SRG generation.

This commit is contained in:
bjorn
2008-06-16 15:49:17 +00:00
parent 361c6cb096
commit 395dd70f58
5 changed files with 27 additions and 13 deletions

View File

@@ -32,16 +32,19 @@ srgsXmlNonRecursivePrinter pgf cnc = prSrgsXml Nothing $ makeNonRecursiveSRG pgf
prSrgsXml :: Maybe SISRFormat -> SRG -> String
prSrgsXml sisr srg = showXMLDoc (optimizeSRGS xmlGr)
where
xmlGr = grammar sisr (srgStartCat srg) (srgLanguage srg) $
xmlGr = grammar sisr (externalCat (srgStartCat srg)) (srgLanguage srg) $
[meta "description"
("SRGS XML speech recognition grammar for " ++ srgName srg ++ "."),
meta "generator" "Grammatical Framework"]
++ map ruleToXML (srgRules srg)
ruleToXML (SRGRule cat alts) = Tag "rule" ([("id",cat)]++pub) (prRhs alts)
where pub | isExternalCat srg cat = [("scope","public")]
| otherwise = []
ruleToXML (SRGRule cat alts)
| isExternalCat srg cat = Tag "rule" [("id",externalCat cat),("scope","public")] (prRhs alts)
| otherwise = Tag "rule" [("id",cat)] (prRhs alts)
prRhs rhss = [oneOf (map (mkProd sisr) rhss)]
externalCat :: Cat -> Cat
externalCat c = c ++ "_cat"
mkProd :: Maybe SISRFormat -> SRGAlt -> XML
mkProd sisr (SRGAlt mp n rhs) = Tag "item" [] (ti ++ [x] ++ tf)
where x = mkItem sisr n rhs