summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-06-03 19:20:18 +0000
committerbjorn <bjorn@bringert.net>2008-06-03 19:20:18 +0000
commit2ee8ab8a714a1b2b4cf906583c04df1ee38b2cdc (patch)
tree2047f21c3c389a5d7a942e9d7ee24c8108935a18
parent61ccd948d3798dc0b74dd1d82ac6e6dc8ef49840 (diff)
Added options to support SRG printing.
-rw-r--r--src-3.0/GF/Compile/Export.hs20
-rw-r--r--src-3.0/GF/Infra/Option.hs24
-rw-r--r--src-3.0/GFC.hs9
3 files changed, 42 insertions, 11 deletions
diff --git a/src-3.0/GF/Compile/Export.hs b/src-3.0/GF/Compile/Export.hs
index d6780147e..81d9e3140 100644
--- a/src-3.0/GF/Compile/Export.hs
+++ b/src-3.0/GF/Compile/Export.hs
@@ -1,11 +1,13 @@
module GF.Compile.Export where
-import PGF.Data (PGF)
+import PGF.CId
+import PGF.Data (PGF(..))
import PGF.Raw.Print (printTree)
import PGF.Raw.Convert (fromPGF)
import GF.Compile.GFCCtoHaskell
import GF.Compile.GFCCtoJS
import GF.Infra.Option
+import GF.Speech.SRGS
import GF.Text.UTF8
-- top-level access to code generation
@@ -16,10 +18,18 @@ prPGF :: OutputFormat
-- module name.
-> String
prPGF fmt gr name = case fmt of
- FmtPGF -> printPGF gr
- FmtJavaScript -> pgf2js gr
- FmtHaskell -> grammar2haskell gr name
- FmtHaskellGADT -> grammar2haskellGADT gr name
+ FmtPGF -> printPGF gr
+ FmtJavaScript -> pgf2js gr
+ FmtHaskell -> grammar2haskell gr name
+ FmtHaskell_GADT -> grammar2haskellGADT gr name
+ FmtSRGS_XML -> srgsXmlPrinter Nothing gr (outputConcr gr)
+
+-- | Get the name of the concrete syntax to generate output from.
+-- FIXME: there should be an option to change this.
+outputConcr :: PGF -> CId
+outputConcr pgf = case cncnames pgf of
+ [] -> error "No concrete syntax."
+ cnc:_ -> cnc
printPGF :: PGF -> String
printPGF = encodeUTF8 . printTree . fromPGF
diff --git a/src-3.0/GF/Infra/Option.hs b/src-3.0/GF/Infra/Option.hs
index 3b390e98e..be3ddfadb 100644
--- a/src-3.0/GF/Infra/Option.hs
+++ b/src-3.0/GF/Infra/Option.hs
@@ -78,7 +78,18 @@ data Phase = Preproc | Convert | Compile | Link
data Encoding = UTF_8 | ISO_8859_1
deriving (Show,Eq,Ord)
-data OutputFormat = FmtPGF | FmtJavaScript | FmtHaskell | FmtHaskellGADT
+data OutputFormat = FmtPGF
+ | FmtJavaScript
+ | FmtHaskell
+ | FmtHaskell_GADT
+ | FmtSRGS_XML
+ | FmtSRGS_ABNF
+ | FmtJSGF
+ | FmtGSL
+ | FmtVoiceXML
+ | FmtSLF
+ | FmtRegExp
+ | FmtFA
deriving (Eq,Ord)
data Optimization = OptStem | OptCSE | OptExpand | OptParametrize | OptValues
@@ -406,7 +417,16 @@ outputFormats =
[("pgf", FmtPGF),
("js", FmtJavaScript),
("haskell", FmtHaskell),
- ("haskell_gadt", FmtHaskellGADT)]
+ ("haskell_gadt", FmtHaskell_GADT),
+ ("srgs", FmtSRGS_XML),
+ ("srgs_xml", FmtSRGS_XML),
+ ("srgs_abnf", FmtSRGS_ABNF),
+ ("jsgf", FmtJSGF),
+ ("gsl", FmtGSL),
+ ("vxml", FmtVoiceXML),
+ ("slf", FmtSLF),
+ ("regexp", FmtRegExp),
+ ("fa", FmtFA)]
instance Show OutputFormat where
show = lookupShow outputFormats
diff --git a/src-3.0/GFC.hs b/src-3.0/GFC.hs
index 4e553659b..8967ca495 100644
--- a/src-3.0/GFC.hs
+++ b/src-3.0/GFC.hs
@@ -41,10 +41,11 @@ outputFilePath opts fmt name0 = addDir name <.> fmtExtension fmt
addDir = maybe id (</>) (flag optOutputDir opts)
fmtExtension :: OutputFormat -> String
-fmtExtension FmtPGF = "pgf"
-fmtExtension FmtJavaScript = "js"
-fmtExtension FmtHaskell = "hs"
-fmtExtension FmtHaskellGADT = "hs"
+fmtExtension FmtPGF = "pgf"
+fmtExtension FmtJavaScript = "js"
+fmtExtension FmtHaskell = "hs"
+fmtExtension FmtHaskell_GADT = "hs"
+fmtExtension FmtSRGS_XML = "grxml"
writeOutputFile :: FilePath -> String -> IOE ()
writeOutputFile outfile output = ioeIO $