glance/app/Main.hs

43 lines
1.6 KiB
Haskell
Raw Normal View History

2016-01-05 04:18:42 +03:00
{-# LANGUAGE NoMonomorphismRestriction, FlexibleContexts, TypeFamilies #-}
module Main where
import Prelude hiding (return)
2016-01-05 04:18:42 +03:00
2016-05-10 09:45:37 +03:00
-- Note: (#) and (&) are hidden in all Glance source files, since they would require
-- - an special case when translating when Glance is run on its own source code.
import Diagrams.Prelude hiding ((#), (&))
2016-01-05 04:18:42 +03:00
import Diagrams.Backend.SVG.CmdLine
2016-02-24 10:14:00 +03:00
import qualified Language.Haskell.Exts as Exts
2016-05-29 06:53:51 +03:00
import Icons(ColorStyle(..), colorScheme, multilineComment)
import Rendering(renderIngSyntaxGraph)
import Translate(drawingsFromModule)
2016-02-24 10:14:00 +03:00
2016-01-05 04:18:42 +03:00
renderFile :: String -> String -> IO (Diagram B)
renderFile inputFilename includeComments = do
parseResult <- Exts.parseFileWithComments
(Exts.defaultParseMode
{Exts.extensions = [Exts.EnableExtension Exts.MultiParamTypeClasses, Exts.EnableExtension Exts.FlexibleContexts],
Exts.parseFilename = inputFilename
})
inputFilename
2016-02-24 10:14:00 +03:00
let
(parsedModule, comments) = Exts.fromParseResult parseResult
2016-02-24 10:14:00 +03:00
drawings = drawingsFromModule parsedModule
--print parsedModule
--print "\n\n"
2016-02-25 01:46:49 +03:00
--print drawings
2016-02-24 10:14:00 +03:00
diagrams <- traverse renderIngSyntaxGraph drawings
2016-02-24 10:14:00 +03:00
let
2016-05-29 06:53:51 +03:00
commentsInBoxes = fmap (\(Exts.Comment _ _ c) -> alignL $ multilineComment white (opaque white) c) comments
diagramsAndComments = vsep 2 $ zipWith (\x y -> x === strutY 0.4 === y) commentsInBoxes (fmap alignL diagrams)
justDiagrams = vsep 1 $ fmap alignL diagrams
diagramsAndMaybeComments = if includeComments == "c" then diagramsAndComments else justDiagrams
--print comments
pure (bgFrame 1 (backgroundC colorScheme) diagramsAndMaybeComments :: Diagram B)
2016-02-24 10:14:00 +03:00
2016-01-05 04:18:42 +03:00
main :: IO ()
main = mainWith renderFile