summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-10-15 11:32:25 +0000
committerkrasimir <krasimir@chalmers.se>2009-10-15 11:32:25 +0000
commit861e0a4c13db96d10be40156ebdc2783d27e78ff (patch)
tree8df61b7fadf4a380e80e9b90a05554733555ebba /src/server
parent93da32c1d43945c709fadf3fcaaedef369cc8046 (diff)
make the GF server to compile after that changes in the PGF runtime
Diffstat (limited to 'src/server')
-rw-r--r--src/server/MorphoService.hs30
-rw-r--r--src/server/PGFService.hs8
2 files changed, 23 insertions, 15 deletions
diff --git a/src/server/MorphoService.hs b/src/server/MorphoService.hs
index cd1aac8b0..c078145e1 100644
--- a/src/server/MorphoService.hs
+++ b/src/server/MorphoService.hs
@@ -1,15 +1,19 @@
import GF.Compile
+import GF.Compile.Compute (computeConcrete)
+import GF.Compile.Rename (renameSourceTerm)
+import GF.Compile.CheckGrammar (inferLType)
import GF.Data.Operations
-import GF.Grammar.API
+import GF.Grammar
import GF.Grammar.Parser
-import GF.Grammar.Grammar (Term)
---import GF.Grammar.PrGrammar (prTermTabular)
import GF.Infra.Option
import GF.Infra.UseIO
+import GF.Infra.Modules (greatestResource)
+import GF.Infra.CheckM
import GF.Text.UTF8
import Network.FastCGI
import Text.JSON
+import Text.PrettyPrint
import qualified Codec.Binary.UTF8.String as UTF8 (decodeString, encodeString)
import Data.ByteString.Char8 as BS
@@ -33,17 +37,17 @@ main = do initFastCGI
r <- newCache readGrammar
loopFastCGI (handleErrors (handleCGIErrors (fcgiMain r)))
-fcgiMain :: Cache Grammar -> CGI CGIResult
+fcgiMain :: Cache SourceGrammar -> CGI CGIResult
fcgiMain cache = liftIO (readCache cache grammarFile) >>= cgiMain
-readGrammar :: FilePath -> IO Grammar
+readGrammar :: FilePath -> IO SourceGrammar
readGrammar file =
do let opts = concatOptions [modifyFlags $ \fs -> fs { optVerbosity = Quiet },
modifyFlags $ \fs -> fs { optLibraryPath = [grammarPath] }]
mgr <- appIOE $ batchCompile opts [file]
err (fail "Grammar loading error") return mgr
-cgiMain :: Grammar -> CGI CGIResult
+cgiMain :: SourceGrammar -> CGI CGIResult
cgiMain sgr =
do path <- pathInfo
json <- case path of
@@ -56,17 +60,20 @@ cgiMain sgr =
getTerm = do mt <- getInput "term"
maybe (throwCGIError 400 "No term given" ["No term given"]) (return . urlDecodeUnicode . UTF8.decodeString) mt
-doEval :: Grammar -> String -> Err JSValue
+doEval :: SourceGrammar -> String -> Err JSValue
doEval sgr t = liftM termToJSValue $ eval sgr t
termToJSValue :: Term -> JSValue
-termToJSValue t = error "prTermTabular undefined"
----- showJSON [toJSObject [("name", name), ("value",value)] | (name,value) <- prTermTabular t]
+termToJSValue t =
+ showJSON [toJSObject [("name", render name), ("value",render value)] | (name,value) <- ppTermTabular Unqualified t]
-eval :: Grammar -> String -> Err Term
+eval :: SourceGrammar -> String -> Err Term
eval sgr t =
case runP pExp (BS.pack t) of
- Right e -> checkTerm sgr e >>= computeTerm sgr
+ Right t -> do mo <- maybe (Bad "no source grammar in scope") return $ greatestResource sgr
+ (t,_) <- runCheck (renameSourceTerm sgr mo t)
+ ((t,_),_) <- runCheck (inferLType sgr [] t)
+ computeConcrete sgr t
Left (_,msg) -> fail msg
-- * General CGI and JSON stuff
@@ -78,3 +85,4 @@ outputJSON x = do setHeader "Content-Type" "text/json; charset=utf-8"
outputStrict :: String -> CGI CGIResult
outputStrict x | x == x = output x
| otherwise = fail "I am the pope."
+
diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs
index 576ba7a30..d0fac03d9 100644
--- a/src/server/PGFService.hs
+++ b/src/server/PGFService.hs
@@ -57,7 +57,7 @@ pgfMain pgf command =
getTree :: CGI PGF.Tree
getTree = do mt <- getInput "tree"
t <- maybe (throwCGIError 400 "No tree given" ["No tree given"]) return mt
- maybe (throwCGIError 400 "Bad tree" ["Bad tree: " ++ t]) return (PGF.readTree t)
+ maybe (throwCGIError 400 "Bad tree" ["Bad tree: " ++ t]) return (PGF.readExpr t)
getCat :: CGI (Maybe PGF.Type)
getCat =
@@ -106,7 +106,7 @@ doTranslate pgf input mcat mfrom mto = showJSON $ map toJSObject
doParse :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> JSValue
doParse pgf input mcat mfrom = showJSON $ map toJSObject
- [[("from", PGF.showLanguage from),("tree",PGF.showTree tree)]
+ [[("from", PGF.showLanguage from),("tree",PGF.showExpr [] tree)]
| (from,trees) <- parse' pgf input mcat mfrom,
tree <- trees ]
@@ -125,7 +125,7 @@ doLinearize pgf tree mto = showJSON $ map toJSObject
doRandom :: PGF -> Maybe PGF.Type -> Maybe Int -> IO JSValue
doRandom pgf mcat mlimit =
do trees <- random' pgf mcat
- return $ showJSON $ map toJSObject [[("tree", PGF.showTree tree)] | tree <- limit trees]
+ return $ showJSON $ map toJSObject [[("tree", PGF.showExpr [] tree)] | tree <- limit trees]
where limit = take (fromMaybe 1 mlimit)
doGrammar :: PGF -> Maybe (Accept Language) -> JSValue
@@ -139,7 +139,7 @@ doGrammar pgf macc = showJSON $ toJSObject
("languageCode", showJSON $ fromMaybe "" (PGF.languageCode pgf l)),
("canParse", showJSON $ PGF.canParse pgf l)]
| l <- PGF.languages pgf]
- categories = map toJSObject [[("cat", PGF.showType cat)] | cat <- PGF.categories pgf]
+ categories = map toJSObject [[("cat", PGF.showType [] cat)] | cat <- PGF.categories pgf]
instance JSON PGF.CId where
readJSON x = readJSON x >>= maybe (fail "Bad language.") return . PGF.readLanguage