diff options
| author | hallgren <hallgren@chalmers.se> | 2013-01-09 13:28:45 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2013-01-09 13:28:45 +0000 |
| commit | 1497fd863ae7b1d4b2c1f7144a1d2753875bae75 (patch) | |
| tree | b0ef46ada23c974e8b59492b73295ebcb6d4e9ab | |
| parent | 580e443a5eb731b50a84a7bc9aa9c3007d3a50f2 (diff) | |
PGF service: new command: download
This makes it possible to download PGF files from servers where the PGF service
is installed.
I am also considering making commmand=download the default instead of
command=grammar.
| -rw-r--r-- | src/server/FastCGIUtils.hs | 14 | ||||
| -rw-r--r-- | src/server/PGFService.hs | 7 |
2 files changed, 13 insertions, 8 deletions
diff --git a/src/server/FastCGIUtils.hs b/src/server/FastCGIUtils.hs index 2abc66072..05aa29eac 100644 --- a/src/server/FastCGIUtils.hs +++ b/src/server/FastCGIUtils.hs @@ -3,9 +3,8 @@ module FastCGIUtils (--initFastCGI, loopFastCGI, throwCGIError, handleCGIErrors, stderrToFile,logError, outputJSONP,outputEncodedJSONP, - outputPNG, - outputHTML, - outputPlain, + outputPNG,outputBinary, + outputHTML,outputPlain, splitBy) where import Control.Concurrent @@ -177,14 +176,19 @@ outputPNG x = do setHeader "Content-Type" "image/png" outputFPS x +outputBinary :: BS.ByteString -> CGI CGIResult +outputBinary x = do + setHeader "Content-Type" "application/binary" + outputFPS x + outputHTML :: String -> CGI CGIResult outputHTML x = do - setHeader "Content-Type" "text/html" + setHeader "Content-Type" "text/html; charset=utf-8" outputStrict $ UTF8.encodeString x outputPlain :: String -> CGI CGIResult outputPlain x = do - setHeader "Content-Type" "text/plain" + setHeader "Content-Type" "text/plain; charset=utf-8" outputStrict $ UTF8.encodeString x outputStrict :: String -> CGI CGIResult diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs index ed19541f1..ee83394da 100644 --- a/src/server/PGFService.hs +++ b/src/server/PGFService.hs @@ -51,11 +51,12 @@ cgiMain' cache path = do pgf <- liftIO $ readCache cache path command <- liftM (maybe "grammar" (urlDecodeUnicode . UTF8.decodeString)) (getInput "command") - pgfMain pgf command + pgfMain path pgf command -pgfMain :: PGF -> String -> CGI CGIResult -pgfMain pgf command = +pgfMain :: FilePath -> PGF -> String -> CGI CGIResult +pgfMain path pgf command = case command of + "download" -> outputBinary =<< liftIO (BS.readFile path) "parse" -> outputJSONP =<< doParse pgf `fmap` getText `ap` getCat `ap` getFrom `ap` getLimit "complete" -> outputJSONP =<< doComplete pgf `fmap` getText `ap` getCat `ap` getFrom `ap` getLimit "linearize" -> outputJSONP =<< doLinearize pgf `fmap` getTree `ap` getTo |
