No newlines in validate-output
[L-seed.git] / src / validate.hs
1 {- 
2  
3 Helper program: Expects a L-seed grammar on stdin and outputs its validity in JSON format:
4 $ echo "RULE is invalid" | ./validate 
5 {"valid":false,"line":1,"column":9,"msg":"\nunexpected \"i\"\nexpecting \"WHEN\", \"BRANCH\" or \"GROW\""}
6 $ echo "RULE trivial GROW BY 1" | ./validate 
7 {"valid":true}
8 -}
9
10 import Text.Parsec.Error
11 import Text.Parsec.Pos
12 import Lseed.Grammar.Parse
13 import Text.JSON
14 import System.Exit
15
16 valid = encode $ makeObj [ ("valid", showJSON True) ]
17
18 invalid error = encode $ makeObj
19         [ ("valid", showJSON False)
20         , ("line",  showJSON . sourceLine .   errorPos $ error) 
21         , ("column",showJSON . sourceColumn . errorPos $ error) 
22         , ("msg",   showJSON .
23                     showErrorMessages "or" "unknown parse error"
24                                       "expecting" "unexpected" "end of input" .
25                     errorMessages $ error)
26         ]
27
28 main = do
29         file <- getContents
30         case (parseGrammar "stdin" file) of
31                 Left err -> do
32                         putStr (invalid err)
33                         exitWith (ExitFailure 1)
34                 Right _ -> do
35                         putStr valid
36                         exitWith ExitSuccess