diagrams-builder 0.2.0.0 → 0.2.1.0
raw patch · 9 files changed
+221/−55 lines, 9 filesdep +blaze-svgdep +diagrams-svgdep ~basedep ~bytestringdep ~cryptohashnew-component:exe:diagrams-builder-svgPVP ok
version bump matches the API change (PVP)
Dependencies added: blaze-svg, diagrams-svg
Dependency ranges changed: base, bytestring, cryptohash, diagrams-cairo, diagrams-lib
API changes (from Hackage documentation)
+ Diagrams.Builder: Build :: Maybe Double -> Maybe Double -> String -> String -> String -> String -> Build
+ Diagrams.Builder: data Build
+ Diagrams.Builder: defaultBuildOpts :: Build
+ Diagrams.Builder: dir :: Build -> String
+ Diagrams.Builder: expr :: Build -> String
+ Diagrams.Builder: height :: Build -> Maybe Double
+ Diagrams.Builder: outFile :: Build -> String
+ Diagrams.Builder: srcFile :: Build -> String
+ Diagrams.Builder: width :: Build -> Maybe Double
+ Diagrams.Builder.CmdLine: Build :: Maybe Double -> Maybe Double -> String -> String -> String -> String -> Build
+ Diagrams.Builder.CmdLine: data Build
+ Diagrams.Builder.CmdLine: defaultBuildOpts :: Build
+ Diagrams.Builder.CmdLine: dir :: Build -> String
+ Diagrams.Builder.CmdLine: expr :: Build -> String
+ Diagrams.Builder.CmdLine: height :: Build -> Maybe Double
+ Diagrams.Builder.CmdLine: instance Data Build
+ Diagrams.Builder.CmdLine: instance Typeable Build
+ Diagrams.Builder.CmdLine: outFile :: Build -> String
+ Diagrams.Builder.CmdLine: srcFile :: Build -> String
+ Diagrams.Builder.CmdLine: width :: Build -> Maybe Double
+ Diagrams.Builder.Modules: emptyModule :: Module
Files
- CHANGES +0/−3
- CHANGES.markdown +16/−0
- README.markdown +31/−0
- diagrams-builder.cabal +47/−17
- src/Diagrams/Builder.hs +8/−2
- src/Diagrams/Builder/CmdLine.hs +45/−0
- src/Diagrams/Builder/Modules.hs +5/−3
- src/tools/diagrams-builder-cairo.hs +15/−30
- src/tools/diagrams-builder-svg.hs +54/−0
− CHANGES
@@ -1,3 +0,0 @@-* 0.2.0.0: 26 August 2012-- Initial release
+ CHANGES.markdown view
@@ -0,0 +1,16 @@+0.2.1.0: 11 December 2012+-------------------------+++ new `diagrams-builder-svg` tool++ deal properly with an empty list of sources ([\#2](https://github.com/diagrams/diagrams-builder/issues/2))++ put cached diagrams in `.diagrams_cache` instead of `diagrams` by default++ bug fix: cached files should use same extension as requested output, not "png"++ bug fix: create output directory for cached images if it doesn't exist++ new module `Diagrams.Builder.CmdLine`; factor out common utilities+ for command-line tools++ depend on 0.6 versions of diagrams libs++0.2.0.0: 26 August 2012+-----------------------++Initial release
+ README.markdown view
@@ -0,0 +1,31 @@+[](http://travis-ci.org/diagrams/diagrams-builder)++`diagrams-builder` provides backend-agnostic tools for dynamically+turning code into rendered+[diagrams](http://projects.haskell.org/diagrams), using the+[hint](http://hackage.haskell.org/package/hint) wrapper to the GHC+API. It supports conditional recompilation using hashing of diagrams+source code, to avoid recompiling code that has not changed. It is+useful for creating tools which compile diagrams code embedded in+other documents. For example, it is used by the+[BlogLiterately-diagrams](http://hackage.haskell.org/package/BlogLiterately%2Ddiagrams)+package (a plugin for+[BlogLiterately](http://hackage.haskell.org/package/BlogLiterately))+to compile diagrams embedded in+[Markdown](http://daringfireball.net/projects/markdown/)-formatted+blog posts.++An executable specific to the+[cairo backend](http://github.com/diagrams/diagrams-cairo) is included+(more executables specific to other backends will be included in the+future). It takes an input file and an expression to render and+outputs an image file, using the cairo backend. If you want it you+must explicitly enable the cairo flag with `-fcairo`.+ +A LaTeX package, `diagrams-latex.sty`, is also provided in the+`latex/` directory of the source distribution, which renders diagrams+code found within `diagram` environments. It makes use of the+`diagrams-builder-cairo` executable, so if you want to use+`diagrams-latex.sty` you should install `diagrams-builder` with the+`-fcairo` option. Note that `diagrams-latex.sty` is licensed under+the GPL.
diagrams-builder.cabal view
@@ -1,5 +1,5 @@ name: diagrams-builder-version: 0.2.0.0+version: 0.2.1.0 synopsis: hint-based build service for the diagrams graphics EDSL. description: @diagrams-builder@ provides backend-agnostic tools for@@ -14,13 +14,13 @@ plugin for @BlogLiterately@) to compile diagrams embedded in Markdown-formatted blog posts. .- An executable specific to the cairo backend is- included (more executables specific to other- backends will be included in the future). It- takes an input file and an expression to render- and outputs an image file, using the cairo- backend. If you want it you must explicitly- enable the cairo flag with @-fcairo@.+ Executables specific to the cairo and SVG+ backends are included (more executables specific+ to other backends may be included in the future).+ Both take an input file and an expression to+ render, and outputs an image file. If you want+ these executables you must explicitly enable the+ @-fcairo@ and/or @-fsvg@ flags. . A LaTeX package, @diagrams-latex.sty@, is also provided in the @latex/@ directory of the source@@ -34,12 +34,13 @@ homepage: http://projects.haskell.org/diagrams license: BSD3 license-file: LICENSE-extra-source-files: CHANGES, latex/diagrams-latex.sty+extra-source-files: CHANGES.markdown, README.markdown, latex/diagrams-latex.sty author: Brent Yorgey maintainer: diagrams-discuss@googlegroups.com category: Graphics build-type: Simple cabal-version: >=1.10+tested-with: GHC == 7.4.2, GHC == 7.6.1 bug-reports: https://github.com/diagrams/diagrams-builder/issues Source-repository head type: git@@ -48,15 +49,17 @@ library exposed-modules: Diagrams.Builder Diagrams.Builder.Modules+ Diagrams.Builder.CmdLine build-depends: base >=4.2 && < 4.7,- diagrams-lib >=0.3 && < 0.6,+ diagrams-lib >=0.6 && < 0.7, hint ==0.3.*, directory, filepath, haskell-src-exts >= 1.13.1 && < 1.14,- cryptohash >= 0.7.4 && < 0.8,- bytestring >= 0.9.2 && < 0.10,- base16-bytestring >= 0.1.1 && < 0.2+ cryptohash >= 0.7.4 && < 0.9,+ bytestring >= 0.9.2 && < 0.11,+ base16-bytestring >= 0.1.1 && < 0.2,+ cmdargs >= 0.6 && < 0.11 hs-source-dirs: src default-language: Haskell2010 other-extensions: StandaloneDeriving,@@ -67,13 +70,19 @@ flag cairo description: install cairo-specific builder tool default: False+ manual: True +flag svg+ description: install svg-specific builder tool+ default: False+ manual: True+ executable diagrams-builder-cairo main-is: diagrams-builder-cairo.hs hs-source-dirs: src/tools default-language: Haskell2010- other-extensions: StandaloneDeriving,- DeriveDataTypeable+ other-extensions: DeriveDataTypeable+ RecordWildCards if !flag(cairo) buildable: False@@ -83,6 +92,27 @@ filepath, directory, diagrams-builder,- diagrams-lib >= 0.5 && < 0.6,- diagrams-cairo >= 0.5 && < 0.6,+ diagrams-lib >= 0.6 && < 0.7,+ diagrams-cairo >= 0.6 && < 0.7,+ cmdargs >= 0.6 && < 0.11++executable diagrams-builder-svg+ main-is: diagrams-builder-svg.hs+ hs-source-dirs: src/tools+ default-language: Haskell2010+ other-extensions: DeriveDataTypeable+ RecordWildCards++ if !flag(svg)+ buildable: False++ if flag(svg)+ build-depends: base >= 4 && < 5,+ filepath,+ directory,+ diagrams-builder,+ diagrams-lib >= 0.6 && < 0.7,+ diagrams-svg >= 0.6 && < 0.7,+ blaze-svg >= 0.3.3 && < 0.4,+ bytestring >= 0.9.2 && < 0.11, cmdargs >= 0.6 && < 0.11
src/Diagrams/Builder.hs view
@@ -30,9 +30,15 @@ , setDiagramImports , interpretDiagram + -- * Tools for creating standalone builder executables++ , Build(..)+ , defaultBuildOpts+ ) where import Diagrams.Builder.Modules+import Diagrams.Builder.CmdLine import Diagrams.Prelude hiding ((<.>), e) @@ -67,7 +73,7 @@ -> [String] -- ^ Additional necessary -- imports. @Prelude@, -- @Diagrams.Prelude@,- -- @Graphics.Rendering.Diagrams.Core@,+ -- @Diagrams.Core.Types@, -- and @Data.Monoid@ are included -- by default. -> m ()@@ -76,7 +82,7 @@ setTopLevelModules [takeBaseName m] setImports $ [ "Prelude" , "Diagrams.Prelude"- , "Graphics.Rendering.Diagrams.Core"+ , "Diagrams.Core.Types" , "Data.Monoid" ] ++ imps
+ src/Diagrams/Builder/CmdLine.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE DeriveDataTypeable #-}++-----------------------------------------------------------------------------+-- |+-- Module : Diagrams.Builder.CmdLine+-- Copyright : (c) 2012 diagrams-lib team (see LICENSE)+-- License : BSD-style (see LICENSE)+-- Maintainer : diagrams-discuss@googlegroups.com+--+-- Tools for creating standalone command-line diagram builder utilities.+--+-----------------------------------------------------------------------------+module Diagrams.Builder.CmdLine+ ( Build(..)+ , defaultBuildOpts+ )+ where++import System.Console.CmdArgs++-- | Record of command-line options.+data Build = Build { width :: Maybe Double+ , height :: Maybe Double+ , srcFile :: String+ , expr :: String+ , outFile :: String+ , dir :: String+ }+ deriving (Typeable, Data)++-- | Default command-line options record.+defaultBuildOpts :: Build+defaultBuildOpts =+ Build+ { width = def &= typ "INT"+ , height = def &= typ "INT"+ , srcFile = "" &= argPos 0 &= typFile+ , expr = "dia"+ &= typ "EXPRESSION"+ &= help "Expression to render (default: \"dia\")"+ , outFile = def &= typFile &= help "Output file"+ , dir = ".diagrams_cache"+ &= typDir+ &= help "Directory in which to store rendered diagrams by hash (default: \".diagrams_cache\")"+ }
src/Diagrams/Builder/Modules.hs view
@@ -12,7 +12,7 @@ module Diagrams.Builder.Modules where import Data.Function (on)-import Data.List (foldl1', isPrefixOf, groupBy, sortBy, nub)+import Data.List (foldl', isPrefixOf, groupBy, sortBy, nub) import Data.Ord (comparing) import Language.Haskell.Exts@@ -35,7 +35,6 @@ -> [String] -- ^ Imports to add -> [String] -- ^ Source code -> Either String Module-createModule _ _ _ [] = Left "createModule: no source code given" createModule nm langs imps srcs = do ms <- mapM doModuleParse srcs return@@ -43,8 +42,11 @@ . maybe id replaceModuleName nm . addPragmas langs . addImports imps- . foldl1' combineModules+ . foldl' combineModules emptyModule $ ms++emptyModule :: Module+emptyModule = Module noLoc (ModuleName "Main") [] Nothing Nothing [] [] -- | Run the haskell-src-exts parser on a @String@ representing some -- Haskell code, producing a @Module@ or an error message.
src/tools/diagrams-builder-cairo.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE RecordWildCards #-} @@ -10,14 +9,15 @@ import Diagrams.Builder -import System.Directory (copyFile)+import System.Directory (createDirectoryIfMissing, copyFile) import qualified System.FilePath as FP import System.Console.CmdArgs compileExample :: Build -> IO () compileExample (Build{..}) = do- let fmt = case FP.takeExtension outFile of+ let ext = FP.takeExtension outFile+ fmt = case ext of ".png" -> PNG ".svg" -> SVG ".ps" -> PS@@ -26,50 +26,35 @@ f <- readFile srcFile + createDirectoryIfMissing True dir+ res <- buildDiagram Cairo zeroV- (CairoOptions outFile (mkSizeSpec width height) fmt)+ (CairoOptions outFile (mkSizeSpec width height) fmt False) [f] expr [] [ "Diagrams.Backend.Cairo" ] (hashedRegenerate- (\hash opts -> opts { cairoFileName = mkFile hash })+ (\hash opts -> opts { cairoFileName = mkFile hash ext }) dir ) case res of ParseErr err -> putStrLn ("Parse error in " ++ srcFile) >> putStrLn err InterpErr ierr -> putStrLn ("Error while compiling " ++ srcFile) >> putStrLn (ppInterpError ierr)- Skipped hash -> copyFile (mkFile hash) outFile- OK hash (act,_) -> act >> copyFile (mkFile hash) outFile+ Skipped hash -> copyFile (mkFile hash ext) outFile+ OK hash (act,_) -> act >> copyFile (mkFile hash ext) outFile where- mkFile base = dir FP.</> base FP.<.> "png"--data Build = Build { width :: Maybe Double- , height :: Maybe Double- , srcFile :: String- , expr :: String- , outFile :: String- , dir :: String- }- deriving (Typeable, Data)+ mkFile base ext = dir FP.</> base FP.<.> ext build :: Build-build = Build { width = def &= typ "INT"- , height = def &= typ "INT"- , srcFile = "" &= argPos 0 &= typFile- , expr = "dia"- &= typ "EXPRESSION"- &= help "Expression to render (default: \"dia\")"- , outFile = "out.png" &= typFile &= help "Output file (default: \"out.png\")"- , dir = "diagrams"- &= typDir- &= help "Directory in which to store rendered diagrams by hash (default: \"diagrams\")"- }- &= summary "The diagrams-builder-cairo program, for dynamically rendering diagrams using the cairo backend. Give it a source file and an expression to render (which may refer to things declared in the source file), and it outputs an image, using hashing to avoid rerendering images unnecessarily."- &= program "diagrams-builder-cairo"+build =+ defaultBuildOpts+ { outFile = "out.png" &= typFile &= help "Output file (default: \"out.png\")" }+ &= summary "The diagrams-builder-cairo program, for dynamically rendering diagrams using the cairo backend. Give it a source file and an expression to render (which may refer to things declared in the source file), and it outputs an image, using hashing to avoid rerendering images unnecessarily."+ &= program "diagrams-builder-cairo" main :: IO () main = do
+ src/tools/diagrams-builder-svg.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE RecordWildCards #-}++module Main where++import Diagrams.Backend.SVG+import Diagrams.Builder+import Diagrams.Prelude hiding (width, height)++import qualified Data.ByteString.Lazy as BS+import System.Console.CmdArgs+import System.Directory (createDirectoryIfMissing, copyFile)+import qualified System.FilePath as FP+import Text.Blaze.Svg.Renderer.Utf8 (renderSvg)++compileExample :: Build -> IO ()+compileExample (Build{..}) = do+ f <- readFile srcFile++ createDirectoryIfMissing True dir++ res <- buildDiagram+ SVG+ zeroV+ (SVGOptions (mkSizeSpec width height))+ [f]+ expr+ []+ [ "Diagrams.Backend.SVG" ]+ (hashedRegenerate (\_ opts -> opts) dir)++ case res of+ ParseErr err -> putStrLn ("Parse error in " ++ srcFile) >> putStrLn err+ InterpErr ierr -> putStrLn ("Error while compiling " ++ srcFile) >>+ putStrLn (ppInterpError ierr)+ Skipped hash -> copyFile (mkFile hash) outFile+ OK hash svg -> do let cached = mkFile hash+ BS.writeFile cached (renderSvg svg)+ copyFile cached outFile+ where+ mkFile base = dir FP.</> base FP.<.> "svg"++build :: Build+build =+ defaultBuildOpts+ { outFile = "out.svg" &= typFile &= help "Output file (default: \"out.svg\")"+ }+ &= summary "The diagrams-builder-svg program, for dynamically rendering diagrams using the native SVG backend. Give it a source file and an expression to render (which may refer to things declared in the source file), and it outputs an image, using hashing to avoid rerendering images unnecessarily."+ &= program "diagrams-builder-svg"++main :: IO ()+main = do+ opts <- cmdArgs build+ compileExample opts