{-# LANGUAGE OverloadedStrings, TemplateHaskell #-} module Main where import Prelude import Control.Monad.IO.Class (liftIO) import Control.Arrow import Data.FileEmbed import Data.List (intercalate) import Data.Version (showVersion) import Paths_smcdel (version) import Web.Scotty import qualified Data.Text as T import qualified Data.Text.Encoding as E import qualified Data.Text.Lazy as TL import Data.HasCacBDD.Visuals (svgGraph) import qualified Language.Javascript.JQuery as JQuery import Language.Haskell.TH.Syntax import SMCDEL.Internal.Lex import SMCDEL.Internal.Parse import SMCDEL.Symbolic.S5 import SMCDEL.Internal.TexDisplay import SMCDEL.Translations.S5 import SMCDEL.Language main :: IO () main = do putStrLn $ "SMCDEL " ++ showVersion version ++ " -- https://github.com/jrclogic/SMCDEL" putStrLn "Please open this link: http://localhost:3000/index.html" scotty 3000 $ do get "" $ redirect "index.html" get "/" $ redirect "index.html" get "/index.html" . html . TL.fromStrict $ addVersionNumber $ embeddedFile "index.html" get "/jquery.js" . html . TL.fromStrict $ embeddedFile "jquery.js" get "/ace.js" . html . TL.fromStrict $ embeddedFile "ace.js" get "/viz-lite.js" . html . TL.fromStrict $ embeddedFile "viz-lite.js" get "/getExample" $ do this <- param "filename" html . TL.fromStrict $ embeddedFile this post "/check" $ do smcinput <- param "smcinput" case alexScanTokensSafe smcinput of Left pos -> webError "Lex" pos Right lexResult -> case parse lexResult of Left pos -> webError "Parse" pos Right (CheckInput vocabInts lawform obs jobs) -> do let mykns = KnS (map P vocabInts) (boolBddOf lawform) (map (second (map P)) obs) knstring <- liftIO $ showStructure mykns let results = concatMap (\j -> "
" ++ doJobWeb mykns j ++ "
") jobs html $ mconcat [ TL.pack knstring , "", kind, " error in line ", show lin, ", column ", show col, "
\n" , "" ]