summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2007-01-05 17:05:31 +0000
committerbringert <bringert@cs.chalmers.se>2007-01-05 17:05:31 +0000
commit36a1998ba3f4978c6a9cf9c82e539f395c8566eb (patch)
tree57b29c23a1b62fec97ec2c89af9ec9cd349b2198 /src
parent4a5b088f78021f496ba97e2103681a4eeea6f32e (diff)
Use the GFCC type from DataGFCC when building VoiceXML.
Diffstat (limited to 'src')
-rw-r--r--src/GF/Speech/GrammarToVoiceXML.hs15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/GF/Speech/GrammarToVoiceXML.hs b/src/GF/Speech/GrammarToVoiceXML.hs
index 84464db0d..62f777951 100644
--- a/src/GF/Speech/GrammarToVoiceXML.hs
+++ b/src/GF/Speech/GrammarToVoiceXML.hs
@@ -12,6 +12,7 @@ module GF.Speech.GrammarToVoiceXML (grammar2vxml) where
import GF.Canon.CanonToGFCC (mkCanon2gfcc)
import qualified GF.Canon.GFCC.AbsGFCC as C
+import GF.Canon.GFCC.DataGFCC (GFCC(..), Abstr(..), mkGFCC, lookMap)
import qualified GF.Canon.GFC as GFC
import GF.Canon.AbsGFC (Term)
@@ -37,6 +38,7 @@ import GF.Data.XML
import Control.Monad (liftM)
import Data.List (isPrefixOf, find, intersperse)
+import qualified Data.Map as Map
import Data.Maybe (fromMaybe)
import Debug.Trace
@@ -60,11 +62,14 @@ prid :: VIdent -> String
prid (C.CId x) = x
vSkeleton :: GFC.CanonGrammar -> (VIdent,VSkeleton)
-vSkeleton = gfccSkeleton . mkCanon2gfcc
-
-gfccSkeleton :: C.Grammar -> (VIdent,VSkeleton)
-gfccSkeleton (C.Grm (C.Hdr n _) (C.Abs as) _) =
- (n, buildMultiMap [(cat,(f,args)) | C.Fun f (C.Typ args cat) _ <- as])
+vSkeleton = gfccSkeleton . mkGFCC . mkCanon2gfcc
+
+gfccSkeleton :: GFCC -> (VIdent,VSkeleton)
+gfccSkeleton gfcc = (absname gfcc, ts)
+ where a = abstract gfcc
+ ts = [(c,[(f,ft f) | f <- fs]) | (c,fs) <- Map.toList (cats a)]
+ ft f = case lookMap (error $ prid f) f (funs a) of
+ C.Typ args _ -> args
--
-- * Questions to ask