+++ Braden Shepherdson [Jan 31 09 18:23 ]: > Brent Yorgey wrote: >> I am very pleased to announce the 0.2 release of the diagrams package, >> an embedded domain-specific language for creating simple graphics in a >> compositional style. This release includes a number of significant >> new features, including: >> >> * support for arbitrary straight and curved paths >> * more shape primitives, including polygons and rounded rectangles >> * support for rendering text >> * PNG, PDF, PS, and SVG output >> * built-in color support replaced with external dependence on the >> feature-rich colour library >> >> and many more! More information, examples, and installation >> instructions can be found at http://code.haskell.org/diagrams. More >> features are planned for future releases, so contributions and >> suggestions are welcome. >> >> (Please note: since diagrams depends on the Cairo library, which has >> unfortunately not been Cabalized, you cannot install the diagrams >> library with cabal-install, unless you already have the cairo package >> installed. See the above website for instructions.) >> >> A special thanks to Dougal Stanton for his contributions to the >> library and help in preparing this release. >> >> -Brent > > Would this make a handy plugin for gitit? I'm currently putting diagrams > together in xfig and saving them to my gitit tree while taking notes in > gitit, but being able to write diagrams code into gitit would be great. > > How easy or hard would this be to accomplish?
Not too hard, I think. Here's code for something similar (for graphviz diagrams), derived from plugins/DotPlugin.hs in SVN pandoc. transform :: Block -> IO Block transform (CodeBlock (id, classes, namevals) contents) | "dot" `elem` classes = do let (name, outfile) = case lookup "name" namevals of Just fn -> ([Str fn], fn ++ ".png") Nothing -> ([], uniqueName contents ++ ".png") result <- readProcess "dot" ["-Tpng"] contents writeFile outfile result return $ Para [Image name (outfile, "")] transform x = return x -- | Generate a unique filename given the file's contents. uniqueName :: String -> String uniqueName = showDigest . sha1 . fromString The 'transform' function will transform delimited code blocks such as ~~~ {.dot name="diagram1"} digraph G {Hello->World} ~~~ into images generated by running the contents through graphviz's dot. To lift this into a transformation of Pandoc documents, you can use syb: convertGraphviz :: Pandoc -> IO Pandoc convertGraphviz = everywhereM (mkM transform) With minimal modifications, the same technique should work for diagrams... Best, John _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe