summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-10 10:23:35 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-10 10:23:35 +0000
commiteb7b0286016714128aae742b4cedccc3dc30a9a0 (patch)
treee47841adbafe272068f0720348b16f68c569bc8f /src
parentba735d802bd5904949de2e6d6bd9be9b32c69057 (diff)
printing grammarReference.js with gfc -jsref
Diffstat (limited to 'src')
-rw-r--r--src/GF/Devel/GFC.hs21
-rw-r--r--src/GF/Devel/GFCCtoJS.hs22
-rw-r--r--src/GF/Devel/PrintGFCC.hs1
3 files changed, 33 insertions, 11 deletions
diff --git a/src/GF/Devel/GFC.hs b/src/GF/Devel/GFC.hs
index 1e66d29a5..917a469e9 100644
--- a/src/GF/Devel/GFC.hs
+++ b/src/GF/Devel/GFC.hs
@@ -50,20 +50,21 @@ file2gfcc f =
---- TODO: nicer and richer print options
-alsoPrint opts abs gr (opt,name) =
- if oElem (iOpt opt) opts
- then do
- let outfile = name
- let output = prGFCC opt gr
- writeFile outfile output
- putStrLn $ "wrote file " ++ outfile
- else return ()
+alsoPrint opts abs gr (opt,name) = do
+ if oElem (iOpt opt) opts
+ then do
+ let outfile = name
+ let output = prGFCC opt gr
+ writeFile outfile output
+ putStrLn $ "wrote file " ++ outfile
+ else return ()
printOptions = [
("haskell","GSyntax.hs"),
("haskell_gadt","GSyntax.hs"),
- ("js","grammar.js")
+ ("js","grammar.js"),
+ ("jsref","grammarReference.js")
]
usageMsg =
- "usage: gfc (-h | --make (-noopt) (-js | -haskell | -haskell_gadt)) (-src) FILES"
+ "usage: gfc (-h | --make (-noopt) (-js | -jsref | -haskell | -haskell_gadt)) (-src) FILES"
diff --git a/src/GF/Devel/GFCCtoJS.hs b/src/GF/Devel/GFCCtoJS.hs
index 65d3185e2..5ec438bc7 100644
--- a/src/GF/Devel/GFCCtoJS.hs
+++ b/src/GF/Devel/GFCCtoJS.hs
@@ -1,4 +1,4 @@
-module GF.Devel.GFCCtoJS (gfcc2js) where
+module GF.Devel.GFCCtoJS (gfcc2js,gfcc2grammarRef) where
import qualified GF.GFCC.Macros as M
import qualified GF.GFCC.DataGFCC as D
@@ -84,3 +84,23 @@ children = JS.Ident "cs"
new :: String -> [JS.Expr] -> JS.Expr
new f xs = JS.ENew (JS.Ident f) xs
+
+-- grammar reference file for js applications. AR 10/11/2007
+
+gfcc2grammarRef :: D.GFCC -> String
+gfcc2grammarRef gfcc =
+ encodeUTF8 $ refs
+ where
+ C.CId abstr = D.absname gfcc
+ refs = unlines $ [
+ "// Grammar Reference",
+ "function concreteReference(concreteSyntax, concreteSyntaxName) {",
+ "this.concreteSyntax = concreteSyntax;",
+ "this.concreteSyntaxName = concreteSyntaxName;",
+ "}",
+ "var myAbstract = " ++ abstr ++ " ;",
+ "var myConcrete = new Array();"
+ ] ++ [
+ "myConcrete.push(new concreteReference(" ++ c ++ ",\"" ++ c ++ "\"));"
+ | C.CId c <- D.cncnames gfcc]
+
diff --git a/src/GF/Devel/PrintGFCC.hs b/src/GF/Devel/PrintGFCC.hs
index 462c175c7..18c174cd7 100644
--- a/src/GF/Devel/PrintGFCC.hs
+++ b/src/GF/Devel/PrintGFCC.hs
@@ -11,4 +11,5 @@ prGFCC printer gr = case printer of
"haskell" -> grammar2haskell gr
"haskell_gadt" -> grammar2haskellGADT gr
"js" -> gfcc2js gr
+ "jsref" -> gfcc2grammarRef gr
_ -> printGFCC gr