diagrams-builder 0.7.0.4 → 0.7.1
raw patch · 5 files changed
+122/−15 lines, 5 filesdep +diagrams-pgfdep ~basedep ~base-orphansdep ~bytestringnew-component:exe:diagrams-builder-pgfPVP ok
version bump matches the API change (PVP)
Dependencies added: diagrams-pgf
Dependency ranges changed: base, base-orphans, bytestring, diagrams-lib, lens
API changes (from Hackage documentation)
Files
- CHANGES.markdown +8/−0
- README.markdown +17/−12
- diagrams-builder.cabal +28/−2
- latex/diagrams-latex.sty +10/−1
- src/tools/diagrams-builder-pgf.hs +59/−0
CHANGES.markdown view
@@ -1,3 +1,11 @@+0.7.1 (16 June 2015)+--------------------++- allow `base-orphans-0.4`+- add `diagrams-pgf` executable+- add diagrams-latex option to use \input instead of \includegraphics,+ for use with diagrams-pgf+ 0.7.0.4 (1 June 2015) ---------------------
README.markdown view
@@ -13,19 +13,24 @@ [BlogLiterately](http://hackage.haskell.org/package/BlogLiterately)) to compile diagrams embedded in [Markdown](http://daringfireball.net/projects/markdown/)-formatted-blog posts.+blog posts, and by the+[diagrams-latex.sty](https://github.com/diagrams/diagrams-builder/blob/master/latex/diagrams-latex.sty)+package for embedding diagrams in LaTeX documents (see below). -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`.- +Executables specific to the+[cairo](http://github.com/diagrams/diagrams-cairo), [svg](http://github.com/diagrams/diagrams-svg),+[postscript](http://github.com/diagrams/diagrams-postscript), [rasterific](http://github.com/diagrams/diagrams-rasterific), and [PGF](http://github.com/diagrams/diagrams-pgf) backends are included. Each+takes an input file and an expression to render and outputs an image+file using the appropriate backend. You must explicitly enable+whichever executables you want using flags like `-fcairo`, `-fsvg`,+and so on.+ 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+code found within `diagram` environments. It can make use of any of+the `diagrams-builder-cairo`, `diagrams-builder-postscript`, or+`diagrams-builder-pgf` executables, 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.+appropriate option. Note that `diagrams-latex.sty` is licensed under+the GPL. For more information on using `diagrams-latex.sty`, see+[this tutorial](http://projects.haskell.org/diagrams/doc/latex.html).
diagrams-builder.cabal view
@@ -1,5 +1,5 @@ name: diagrams-builder-version: 0.7.0.4+version: 0.7.1 synopsis: hint-based build service for the diagrams graphics EDSL. description: @diagrams-builder@ provides backend-agnostic tools for@@ -49,7 +49,7 @@ Diagrams.Builder.Modules Diagrams.Builder.CmdLine build-depends: base >=4.2 && < 4.9,- base-orphans >= 0.3 && < 0.4,+ base-orphans >= 0.3 && < 0.5, mtl >= 2.1 && < 2.3, diagrams-lib >= 1.3 && < 1.4, hint >= 0.4 && < 0.5,@@ -94,6 +94,11 @@ default: False manual: True +flag pgf+ description: install PGF-specific builder tool+ default: False+ manual: True+ executable diagrams-builder-cairo main-is: diagrams-builder-cairo.hs hs-source-dirs: src/tools@@ -175,3 +180,24 @@ cmdargs >= 0.6 && < 0.11, lens >= 3.8 && < 4.12, JuicyPixels >= 3.1.5 && < 3.3++executable diagrams-builder-pgf+ main-is: diagrams-builder-pgf.hs+ hs-source-dirs: src/tools+ default-language: Haskell2010+ other-extensions: DeriveDataTypeable+ RecordWildCards++ if !flag(pgf)+ buildable: False++ if flag(pgf)+ build-depends: base >= 4 && < 5,+ filepath,+ directory,+ diagrams-builder,+ diagrams-lib >= 0.6 && < 1.4,+ diagrams-pgf,+ bytestring >= 0.10.2 && < 0.11,+ cmdargs >= 0.6 && < 0.11,+ lens >= 3.8 && < 4.12
latex/diagrams-latex.sty view
@@ -88,6 +88,9 @@ \def\dtt@backend{cairo} % use cairo as the default backend \DeclareOptionX{extension}[]{\def\dtt@extension{#1}} \def\dtt@extension{pdf} % default output extension of .pdf+\newif\ifdtt@input \dtt@inputfalse+\DeclareOptionX{input}{\dtt@inputtrue}+\DeclareOptionX{noinput}{\dtt@inputfalse} \ExecuteOptionsX{shell} @@ -234,7 +237,13 @@ } \long\gdef\diagramslatexgraphicsinclude{\diagramslatexgraphicsprocess%- \IfFileExists{\dtt@figname.\dtt@extension}{{\includegraphics{\dtt@figname.\dtt@extension}}}+ \IfFileExists{\dtt@figname.\dtt@extension}{+ \ifdtt@input+ {\input{\dtt@figname.\dtt@extension}}+ \else+ {\includegraphics{\dtt@figname.\dtt@extension}}+ \fi+ } {\PackageWarningNoLine{diagrams-latex} {Please convert \dtt@figname.hs manually}} }
+ src/tools/diagrams-builder-pgf.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE RecordWildCards #-}++module Main where++import qualified Data.ByteString.Builder as BSB+import qualified Data.ByteString.Lazy as BSL+import Diagrams.Backend.PGF+import Diagrams.Backend.PGF.Render (Options (..))+import Diagrams.Builder+import Diagrams.Prelude hiding (height, width)++import System.Directory (copyFile,+ createDirectoryIfMissing)+import qualified System.FilePath as FP++import System.Console.CmdArgs hiding (def)++compileExample :: Build -> IO ()+compileExample (Build{..}) = do+ let ext = FP.takeExtension outFile+ standalone = case ext of+ ".pgf" -> False+ ".tex" -> True+ f <- readFile srcFile++ createDirectoryIfMissing True dir++ let w = fmap realToFrac width :: Maybe Double+ h = fmap realToFrac height :: Maybe Double+ bopts = mkBuildOpts PGF (zero :: V2 Double) (PGFOptions def (mkSizeSpec2D w h) False standalone)+ & snippets .~ [f]+ & imports .~ [ "Diagrams.Backend.PGF" ]+ & diaExpr .~ expr+ & decideRegen .~ (hashedRegenerate (\_ opts -> opts) dir)++ res <- buildDiagram bopts+ 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 (hashToHexStr hash) ext) outFile+ OK hash pgf -> let cached = mkFile (hashToHexStr hash) ext+ in do BSL.writeFile cached (BSB.toLazyByteString pgf)+ copyFile cached outFile+ where+ mkFile base ext = dir FP.</> base FP.<.> ext++build :: Build+build =+ defaultBuildOpts+ { outFile = "out.pgf" &= typFile &= help "Output file (default: \"out.pgf\")" }+ &= summary "The diagrams-builder-PGF program, for dynamically rendering diagrams using the PGF 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. Use a .pgf extension to get PGF code, suitable for inputting directly into a LaTeX file. Use a .tex extensions to get a standalone TeX file.\n\nIf you have installed the diagrams-lib and diagrams-pgf packages in a sandbox, set the environment variable DIAGRAMS_SANDBOX to that directory so the builder can compile your diagram. For example, \"export DIAGRAMS_SANDBOX=~/diagrams/.cabal-sandbox\". If you have package databases for multiple versions of GHC in that sandbox, you will need to set the full path to the package database (it ends in \".conf.d\")."+ &= program "diagrams-builder-pgf"++main :: IO ()+main = do+ opts <- cmdArgs build+ compileExample opts