forked from GitHub/gf-core
VoiceXML: don't use srcexpr in subdialogs, since Opera does not support that. Also makes fewer subdialogs nows.
This commit is contained in:
@@ -105,7 +105,7 @@ skel2vxml name start skel qs =
|
|||||||
vxml (prelude ++ [startForm] ++ concatMap (uncurry (catForms gr qs)) skel)
|
vxml (prelude ++ [startForm] ++ concatMap (uncurry (catForms gr qs)) skel)
|
||||||
where
|
where
|
||||||
gr = grammarURI name
|
gr = grammarURI name
|
||||||
prelude = var "debug" (Just "1") : scriptLib
|
prelude = var "debug" (Just "0") : scriptLib
|
||||||
startForm = Tag "form" [] [subdialog "sub" [("src", "#"++start)] []]
|
startForm = Tag "form" [] [subdialog "sub" [("src", "#"++start)] []]
|
||||||
|
|
||||||
grammarURI :: String -> String
|
grammarURI :: String -> String
|
||||||
@@ -149,35 +149,32 @@ catForms :: String -> CatQuestions -> VIdent -> [(VIdent, [VIdent])] -> [XML]
|
|||||||
catForms gr qs cat fs =
|
catForms gr qs cat fs =
|
||||||
comments [cat ++ " category."]
|
comments [cat ++ " category."]
|
||||||
++ [cat2form gr qs cat fs]
|
++ [cat2form gr qs cat fs]
|
||||||
++ map (uncurry (fun2form gr)) fs
|
|
||||||
|
|
||||||
cat2form :: String -> CatQuestions -> VIdent -> [(VIdent, [VIdent])] -> XML
|
cat2form :: String -> CatQuestions -> VIdent -> [(VIdent, [VIdent])] -> XML
|
||||||
cat2form gr qs cat fs =
|
cat2form gr qs cat fs =
|
||||||
form cat [var "value" (Just "'?'"), formDebug cat,
|
form cat $ [var "value" (Just "'?'"), formDebug cat,
|
||||||
blockCond "value != '?'" [assign cat "value"],
|
blockCond "value != '?'" [assign cat "value"],
|
||||||
field cat [] [promptString (getCatQuestion cat qs),
|
field cat [] [promptString (getCatQuestion cat qs),
|
||||||
grammar (gr++"#"++cat),
|
grammar (gr++"#"++cat),
|
||||||
nomatch [Data "I didn't understand you.", reprompt],
|
nomatch [Data "I didn't understand you.", reprompt],
|
||||||
help [Data ("help_"++cat)],
|
help [Data ("help_"++cat)],
|
||||||
filled [] [if_else (cat ++ " == '?'") [reprompt] feedback]],
|
filled [] [if_else (cat ++ " == '?'") [reprompt] feedback]],
|
||||||
blockCond "debug == 1" [prompt [Data (cat ++ " = "), value ("dump("++cat++")")]],
|
catDebug]
|
||||||
subdialog "sub" [("srcexpr","'#'+"++cat++".name")]
|
++ concatMap (uncurry (fun2sub gr cat)) fs
|
||||||
[param "value" cat, filled [] subDone]]
|
++ [block [return_ [cat]]]
|
||||||
where subDone = [assign cat "sub.value", return_ [cat]]
|
where feedback = []
|
||||||
feedback = []
|
catDebug = blockCond "debug == 1" [prompt [Data (cat ++ " = "), value ("dump("++cat++")")]]
|
||||||
|
retDebug = blockCond "debug == 1" [prompt [Data "return ", value ("dump("++cat++")")]]
|
||||||
|
|
||||||
fun2form :: String -> VIdent -> [VIdent] -> XML
|
fun2sub :: String -> VIdent -> VIdent -> [VIdent] -> [XML]
|
||||||
fun2form gr fun args =
|
fun2sub gr cat fun args = comments [fun ++ " : " ++ cat] ++ ss
|
||||||
form fun ([var "value" Nothing] ++ [formDebug fun]
|
|
||||||
++ ss
|
|
||||||
++ [ret])
|
|
||||||
where
|
where
|
||||||
argNames = zip ["arg"++show n | n <- [0..]] args
|
argNames = zip ["arg"++show n | n <- [0..]] args
|
||||||
ss = map (uncurry mkSub) argNames
|
ss = map (uncurry mkSub) argNames
|
||||||
mkSub a t = subdialog a [("src","#"++t)]
|
mkSub a t = subdialog s [("src","#"++t),("cond",cat++".name == "++string fun)]
|
||||||
[param "value" ("value."++a),
|
[param "value" (cat++"."++a),
|
||||||
filled [] [assign ("value."++a) (a++"."++t)]]
|
filled [] [assign (cat++"."++a) (s++"."++t)]]
|
||||||
ret = block [return_ ["value"]]
|
where s = fun ++ "_" ++ a
|
||||||
|
|
||||||
formDebug id = blockCond "debug == 1" [prompt [Data ("Entering form " ++ id ++ ". value = "), value "dump(value)"]]
|
formDebug id = blockCond "debug == 1" [prompt [Data ("Entering form " ++ id ++ ". value = "), value "dump(value)"]]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user