diagrams-svg-1.3.1.10: SVG backend for diagrams drawing EDSL.

Copyright(c) 2011-2015 diagrams-svg team (see LICENSE)
LicenseBSD-style (see LICENSE)
Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellNone
LanguageHaskell2010

Diagrams.Backend.SVG

Description

A full-featured rendering backend for diagrams producing SVG files, implemented natively in Haskell (making it easy to use on any platform).

To invoke the SVG backend, you have three options.

  • You can use the Diagrams.Backend.SVG.CmdLine module to create standalone executables which output SVG images when invoked.
  • You can use the renderSVG or renderPretty functions provided by this module, which give you more flexible programmatic control over when and how images are output (making it easy to, for example, write a single program that outputs multiple images, or one that outputs images dynamically based on user input, and so on). The only difference between the two functions is that renderPretty, pretty prints the SVG output.
  • For the most flexibility (e.g. if you want access to the resulting SVG value directly in memory without writing it to disk), you can manually invoke the renderDia method from the Backend instance for SVG. In particular, renderDia has the generic type
renderDia :: b -> Options b v n -> QDiagram b v n m -> Result b v n

(omitting a few type class constraints). b represents the backend type, v the vector space, n the numerical field, and m the type of monoidal query annotations on the diagram. Options and Result are associated data and type families, respectively, which yield the type of option records and rendering results specific to any particular backend. For b ~ SVG, v ~ V2, we have

data Options SVG V2 n = SVGOptions
    { _size           :: SizeSpec V2 n   -- ^ The requested size.
    , _svgDefinitions :: Maybe SvgM
                          -- ^ Custom definitions that will be added to the @defs@
                          --   section of the output.
    , _idPrefix       :: T.Text
    }
data family Render SVG V2 n = R 'SvgRenderM n'
type family Result SVG V2 n = SvgM

So the type of renderDia resolves to

renderDia :: SVG -> Options SVG V2 n -> QDiagram SVG V2 n m -> SvgM

which you could call like renderDia SVG (SVGOptions (mkWidth 250) Nothing "") myDiagram (if you have the OverloadedStrings extension enabled; otherwise you can use 'Text.pack ""'). (In some situations GHC may not be able to infer the type m, in which case you can use a type annotation to specify it; it may be useful to simply use the type synonym Diagram SVG = QDiagram SVG V2 Double Any.) This returns an SvgM value, which you can, e.g. render to a ByteString using renderBS from the lucid package.

Synopsis

Documentation

data SVG

SVG is simply a token used to identify this rendering backend (to aid type inference).

Constructors

SVG 

type B = SVG

data family Options b v n

Backend-specific rendering options.

sizeSpec :: SVGFloat n => Lens' (Options SVG V2 n) (SizeSpec V2 n)

Lens onto the size of the svg options.

svgDefinitions :: SVGFloat n => Lens' (Options SVG V2 n) (Maybe SvgM)

Lens onto the svg definitions of the svg options.

idPrefix :: SVGFloat n => Lens' (Options SVG V2 n) Text

Lens onto the idPrefix of the svg options. This is the prefix given to clipping paths to distinguish them from other svg files in the same web page.

type SVGFloat n = (Show n, TypeableFloat n)

Constaint on number type that diagrams-svg can use to render an SVG. This includes the common number types: Double, Float

renderSVG :: SVGFloat n => FilePath -> SizeSpec V2 n -> QDiagram SVG V2 n Any -> IO ()

Render a diagram as an SVG, writing to the specified output file and using the requested size.

renderSVG' :: SVGFloat n => FilePath -> Options SVG V2 n -> QDiagram SVG V2 n Any -> IO ()

Render a diagram as an SVG, writing to the specified output file and using the backend options. The id prefix is derived from the basename of the output file.

renderPretty :: SVGFloat n => FilePath -> SizeSpec V2 n -> QDiagram SVG V2 n Any -> IO ()

Render a diagram as a pretty printed SVG.

renderPretty' :: SVGFloat n => FilePath -> Options SVG V2 n -> QDiagram SVG V2 n Any -> IO ()

Render a diagram as a pretty printed SVG to the specified output file and using the backend options. The id prefix is derived from the basename of the output file.

loadImageSVG :: SVGFloat n => FilePath -> IO (QDiagram SVG V2 n Any)

Load images (JPGPNG...) in a SVG specific way.