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

Copyright | (c) 2011-2015 diagrams-svg team (see LICENSE)
License | BSD-style (see LICENSE)
Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | None
Language | Haskell2010

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

- data SVG = SVG
- type B = SVG
- data family Options b v n
- sizeSpec :: SVGFloat n => Lens' (Options SVG V2 n) (SizeSpec V2 n)
- svgDefinitions :: SVGFloat n => Lens' (Options SVG V2 n) (Maybe SvgM)
- idPrefix :: SVGFloat n => Lens' (Options SVG V2 n) Text
- type SVGFloat n = (Show n, TypeableFloat n)
- renderSVG :: SVGFloat n => FilePath -> SizeSpec V2 n -> QDiagram SVG V2 n Any -> IO ()
- renderSVG' :: SVGFloat n => FilePath -> Options SVG V2 n -> QDiagram SVG V2 n Any -> IO ()
- renderPretty :: SVGFloat n => FilePath -> SizeSpec V2 n -> QDiagram SVG V2 n Any -> IO ()
- renderPretty' :: SVGFloat n => FilePath -> Options SVG V2 n -> QDiagram SVG V2 n Any -> IO ()
- loadImageSVG :: SVGFloat n => FilePath -> IO (QDiagram SVG V2 n Any)

# Documentation

data SVG Source

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

Constructors

SVG |

Instances

Show SVG Source |
SVGFloat n => Backend SVG V2 n Source |
SVGFloat n => Renderable (Text n) SVG Source |
SVGFloat n => Renderable (DImage n Embedded) SVG Source |
SVGFloat n => Renderable (Path V2 n) SVG Source |
SVGFloat n => Monoid (Render SVG V2 n) Source |
(Hashable n, SVGFloat n) => Hashable (Options SVG V2 n) Source |
type V SVG = V2 Source |
type N SVG = Double Source |

data Options SVG V2 = SVGOptions {

- _size :: SizeSpec V2 n
- _svgDefinitions :: Maybe SvgM
- _idPrefix :: Text

} Source

data Render SVG V2 = R (SvgRenderM n) Source |
type Result SVG V2 n Source |
type MainOpts [(String, QDiagram SVG V2 n Any)] = (MainOpts (QDiagram SVG V2 n Any), DiagramMultiOpts) |
type MainOpts (QDiagram SVG V2 n Any) |

type B = SVG Source

data family Options b v n

Backend-specific rendering options.

Instances

(Hashable n, SVGFloat n) => Hashable (Options SVG V2 n) |
data Options NullBackend |

data Options SVG V2 = SVGOptions {

- _size :: SizeSpec V2 n
- _svgDefinitions :: Maybe SvgM
- _idPrefix :: Text

}

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

Lens onto the size of the svg options.

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

Lens onto the svg definitions of the svg options.

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

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) Source

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 () Source

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 () Source

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 () Source

Render a diagram as a pretty printed SVG.

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

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) Source

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