{- |
Module : ./MMT/Hets2mmt.hs
Description : interface for MMT jar
Copyright :
License :
Maintainer : a.jakubauskas@jacobs-university.de
Stability : experimental
Portability :
-}
module MMT.Hets2mmt (
mmtRes,
callSpec
)
where
import System.Process
import System.IO
import Common.Result
import Common.Id
import Static.DevGraph
import Common.LibName
import Framework.Analysis (addLogic2LogicList)
import System.FilePath
import Common.Utils
-- import MMT.XMLtoPT
{- import System.IO.Unsafe
import Text.ParserCombinators.Parsec -}
jar :: String
jar = "hets-mmt-standalone.jar"
staloneclass :: String
staloneclass = "com.simontuffs.onejar.Boot"
calljar :: FilePath -> IO (String, Maybe String)
calljar fileName = do
(_, Just hout, maybeErr, _) <- createProcess (
proc "java" ["-cp",
jar,
staloneclass,
"-newLogic",
fileName])
{ std_out = CreatePipe }
cont <- hGetContents hout
case maybeErr of
(Just hErr) -> do
err <- hGetContents hErr
putStr err
return (cont, Just err)
Nothing -> return (cont, Nothing)
callSpec :: FilePath -> IO (String, Maybe String)
callSpec fileName = do
putStr "creating process\n"
(_, Just hout, maybeErr, _) <- createProcess (
proc "java" ["-cp",
jar,
staloneclass,
"-readSpec",
fileName])
{ std_out = CreatePipe }
cont <- hGetContents hout
-- putStr cont
case maybeErr of
(Just hErr) -> do
err <- hGetContents hErr
putStr err
return (cont, Just err)
Nothing -> return (cont, Nothing)
callMMT :: FilePath -> IO [Diagnosis]
callMMT fp = do
(out, maybeErr) <- calljar fp
case maybeErr of
(Just err) -> return [Diag Warning out nullRange,
Diag Error err nullRange]
Nothing -> return [Diag Warning out nullRange]
mmtRes :: FilePath -> IO (Result (LibName, LibEnv))
mmtRes fname = do
libDir <- getEnvDef "HETS_LIB" ""
putStr $ "HETS_LIB at " ++ libDir
putStr $ "calling MMT on " ++ libDir ++ fname
dgs <- callMMT (libDir </> fname)
putStr $ show dgs
addLogic2LogicList $ dropExtension fname
return (emptyRes (dropExtension fname) dgs)
emptyRes :: String -> [Diagnosis] -> Result (LibName, LibEnv)
emptyRes lname = (`Result` Just (emptyLibName lname, emptyLibEnv))