BlogLiterately-diagrams 0.1.3.1 → 0.1.4
raw patch · 3 files changed
+36/−21 lines, 3 filesdep ~diagrams-builder
Dependency ranges changed: diagrams-builder
Files
- BlogLiterately-diagrams.cabal +9/−2
- CHANGES +5/−0
- src/Text/BlogLiterately/Diagrams.hs +22/−19
BlogLiterately-diagrams.cabal view
@@ -1,5 +1,5 @@ name: BlogLiterately-diagrams-version: 0.1.3.1+version: 0.1.4 synopsis: Include images in blog posts with inline diagrams code description: A plugin for @BlogLiterately@ (<http://hackage.haskell.org/package/BlogLiterately>) which turns inline diagrams code into images.@@ -50,6 +50,13 @@ this: . <<http://projects.haskell.org/diagrams/hosted/BLD-post-result.png>>+ .+ In addition to simple diagrams, @IO@ actions+ producing diagrams may also be used. In that+ case the @IO@ action will simply be run, and the+ resulting diagram rendered. This can be useful,+ for example, when producing a diagram built from+ some external data or using randomness. license: BSD3 license-file: LICENSE extra-source-files: CHANGES@@ -73,7 +80,7 @@ filepath, directory, diagrams-cairo >= 1.0 && < 1.1,- diagrams-builder >= 0.4.2 && < 0.5,+ diagrams-builder >= 0.5 && < 0.6, diagrams-lib >= 1.0 && < 1.1, BlogLiterately >= 0.6 && < 0.8, pandoc >= 1.9 && < 1.13,
CHANGES view
@@ -1,3 +1,8 @@+* 0.1.4: 27 January 2014++ - Require diagrams-builder-0.5, which really actually adds support+ for IO actions producing diagrams.+ * 0.1.3.1: 29 November 2013 - Update documentation: doesn't actually support IO actions yet
src/Text/BlogLiterately/Diagrams.hs view
@@ -28,7 +28,8 @@ import Diagrams.Backend.Cairo import Diagrams.Backend.Cairo.Internal import qualified Diagrams.Builder as DB-import Diagrams.Prelude (R2, zeroV, (&), (.~))+import Diagrams.Prelude (centerXY, pad, zeroV, (&),+ (.~)) import Diagrams.TwoD.Size (mkSizeSpec) import Text.BlogLiterately import Text.Pandoc@@ -93,24 +94,26 @@ -- | Given some code with declarations, some attributes, and an -- expression to render, render it and return the filename of the -- generated image (or an error message).-renderDiagram :: [String] -- ^ Declarations+renderDiagram :: Bool -- ^ Apply padding automatically?+ -> [String] -- ^ Declarations -> String -- ^ Expression to render -> Attr -- ^ Code attributes -> IO (Either String FilePath)-renderDiagram decls expr attr@(_ident, _cls, fields) = do+renderDiagram shouldPad decls expr (_ident, _cls, fields) = do createDirectoryIfMissing True diaDir- res <- DB.buildDiagram- Cairo- (zeroV :: R2)- (CairoOptions "default.png" size PNG False)- decls- expr- []- ["Diagrams.Backend.Cairo"]- (DB.hashedRegenerate- (\hash opts -> opts & cairoFileName .~ mkFile hash)- diaDir- )++ let bopts = DB.mkBuildOpts Cairo zeroV (CairoOptions "default.png" size PNG False)+ & DB.snippets .~ decls+ & DB.imports .~ ["Diagrams.Backend.Cairo"]+ & DB.diaExpr .~ expr+ & DB.postProcess .~ (if shouldPad then pad 1.1 . centerXY else id)+ & DB.decideRegen .~+ (DB.hashedRegenerate+ (\hash opts -> opts & cairoFileName .~ mkFile hash)+ diaDir+ )+ res <- DB.buildDiagram bopts+ case res of DB.ParseErr err -> do let errStr = "\nParse error:\n" ++ err@@ -120,8 +123,8 @@ let errStr = "\nInterpreter error:\n" ++ DB.ppInterpError ierr putErrLn errStr return (Left errStr)- DB.Skipped hash -> return (Right $ mkFile hash)- DB.OK hash (act,_) -> act >> return (Right $ mkFile hash)+ DB.Skipped hash -> return (Right $ mkFile (DB.hashToHexStr hash))+ DB.OK hash (act,_) -> act >> return (Right $ mkFile (DB.hashToHexStr hash)) where size = mkSizeSpec@@ -133,7 +136,7 @@ renderBlockDiagram defs c@(CodeBlock attr@(_, cls, _) s) | "dia-def" `elem` classTags = return Null | "dia" `elem` classTags = do- res <- renderDiagram (src : defs) "pad 1.1 dia" attr+ res <- renderDiagram True (src : defs) "dia" attr case res of Left err -> return (CodeBlock attr (s ++ err)) Right fileName -> return $ Para [Image [] (fileName, "")]@@ -149,7 +152,7 @@ renderInlineDiagram :: [String] -> Inline -> IO Inline renderInlineDiagram defs c@(Code attr@(_, cls, _) expr) | "dia" `elem` cls = do- res <- renderDiagram defs expr attr+ res <- renderDiagram False defs expr attr case res of Left err -> return (Code attr (expr ++ err)) Right fileName -> return $ Image [] (fileName, "")