From 61ae1920b3afb227c3305447f2ccc552147cfdfb Mon Sep 17 00:00:00 2001 From: bringert Date: Wed, 19 Sep 2007 08:58:39 +0000 Subject: [PATCH] Include startcat in generated JavaScript. --- src/GF/Canon/CanonToJS.hs | 25 ++++++++++++++++++------- src/GF/UseGrammar/Custom.hs | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/GF/Canon/CanonToJS.hs b/src/GF/Canon/CanonToJS.hs index 161a21fb0..bcd64e282 100644 --- a/src/GF/Canon/CanonToJS.hs +++ b/src/GF/Canon/CanonToJS.hs @@ -2,20 +2,31 @@ module GF.Canon.CanonToJS (prCanon2js) where import GF.Canon.GFC import GF.Canon.CanonToGFCC +import GF.Canon.Look +import GF.Data.ErrM +import GF.Infra.Option import qualified GF.Canon.GFCC.AbsGFCC as C import qualified GF.JavaScript.AbsJS as JS import qualified GF.JavaScript.PrintJS as JS -prCanon2js :: CanonGrammar -> String -prCanon2js gr = gfcc2js $ mkCanon2gfcc gr +import Control.Monad (mplus) +import Data.Maybe (fromMaybe) -gfcc2js :: C.Grammar -> String -gfcc2js (C.Grm (C.Hdr n _) as cs) = JS.printTree $ JS.Program $ abstract2js n as ++ concatMap (concrete2js n) cs +prCanon2js :: Options -> CanonGrammar -> String +prCanon2js opts gr = gfcc2js start $ mkCanon2gfcc gr + where + start = fromMaybe "S" (getOptVal opts gStartCat + `mplus` getOptVal grOpts gStartCat) + grOpts = errVal noOptions $ lookupOptionsCan gr -abstract2js :: C.CId -> C.Abstract -> [JS.Element] -abstract2js (C.CId n) (C.Abs ds) = - [JS.ElStmt $ JS.SDeclOrExpr $ JS.Decl [JS.DInit a (new "Abstract" [])]] +gfcc2js :: String -> C.Grammar -> String +gfcc2js start (C.Grm (C.Hdr n _) as cs) = + JS.printTree $ JS.Program $ abstract2js start n as ++ concatMap (concrete2js n) cs + +abstract2js :: String -> C.CId -> C.Abstract -> [JS.Element] +abstract2js start (C.CId n) (C.Abs ds) = + [JS.ElStmt $ JS.SDeclOrExpr $ JS.Decl [JS.DInit a (new "Abstract" [JS.EStr start])]] ++ concatMap (absdef2js a) ds where a = JS.Ident n diff --git a/src/GF/UseGrammar/Custom.hs b/src/GF/UseGrammar/Custom.hs index a358f26b3..b1b3995b8 100644 --- a/src/GF/UseGrammar/Custom.hs +++ b/src/GF/UseGrammar/Custom.hs @@ -328,7 +328,7 @@ customMultiGrammarPrinter = [ (strCI "gfcm", const MC.prCanon) ,(strCI "gfcc", const GFCC.prCanon2gfcc) - ,(strCI "js", const JS.prCanon2js) + ,(strCI "js", JS.prCanon2js) ,(strCI "header", const (MC.prCanonMGr . unoptimizeCanon)) ,(strCI "cfgm", prCanonAsCFGM) ,(strCI "graph", visualizeCanonGrammar)