module FMP
( module FMP.Canvas
, module FMP.Color
, module FMP.Core
, module FMP.File
, module FMP.Frames
, module FMP.Matrix
, module FMP.Picture
, Doc
, module FMP.RedBlack
, module FMP.Resolve
, module FMP.Symbols
, module FMP.Syntax
, module FMP.Term
, module FMP.Tree
, module FMP.Turtle
, module FMP.Types
, metaPost, generate, funcmp
)
where
import Paths_funcmp (getDataDir)
import FMP.Canvas
import FMP.Color
import FMP.Core
import FMP.File
import FMP.Frames
import FMP.Matrix
import FMP.Picture
import FMP.PP
import FMP.RedBlack
import FMP.Resolve
import FMP.Symbols
import FMP.Syntax
import FMP.Term
import FMP.Tree
import FMP.Turtle
import FMP.Types
import System.Exit ( ExitCode(..) )
import System.FilePath ( combine )
import System.Cmd ( system )
metaPost :: Int -> Picture -> Parameters -> MetaPost
metaPost n t param = MPVerbatim "batchmode;"
& MPVerbatim (prolog param)
& MPFigure n
(MPAssign (Id "warningcheck") 0
& MPVerbatim "picture p[], q[], r[];"
& MPVerbatim "transform t[],tr[];"
& MPVerbatim "pair s[];"
& MPVerbatim "pair pv[][];"
& MPVerbatim "pair pvi[][];"
& MPVerbatim "numeric nv[][];"
& MPVerbatim "numeric nvi[][];"
& MPVerbatim "path tempPath;"
& MPAssign defDX (Const (defaultDX param))
& MPAssign defDY (Const (defaultDY param))
& MPAssign txtDX (Const (textDX param))
& MPAssign txtDY (Const (textDY param))
& l & z)
& MPVerbatim (epilog param)
where (_, _, l, z ) = mp t (1, relax)
generate :: IsPicture a => String -> Int -> a -> IO ()
generate prefix n pic = getParameters >>= doOutput
where
filePath = prefix ++ "." ++ show n
fileName param = if newmp param
then prefix ++ ".mp"
else filePath ++ ".mp"
mpDoc param = emit (metaPost n (toPicture pic) param)
doOutput param = do writeFile (fileName param)
(show (mpDoc param))
dataDir <- getDataDir
err <- system ("MPINPUTS=${MPINPUTS}:"
++ combine dataDir "texmf"
++ " " ++ mpBin param ++ " "
++ fileName param
++ " >> /dev/null")
if err==ExitSuccess
then putStr ("\\includegraphics{"
++filePath++"}")
else putStr ("Generation of picture "
++filePath++" failed!")
funcmp :: IsPicture a => String -> Int -> a -> IO ()
funcmp filePath n pic = do param <- getParameters
writeFile cacheName (show picture)
system (funcmpBin param
++ " " ++ filePath
++ " " ++ show n
++ " " ++ funcmpRTS param)
return ()
where
picture = toPicture pic
prefix = filePath ++ "." ++ show n
cacheName = prefix ++ ".cache"