diagrams-svg-1.4.3.2: SVG backend for diagrams drawing EDSL.
Copyright(c) 2011-2015 diagrams-svg team (see LICENSE)
LicenseBSD-style (see LICENSE)
Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellSafe-Inferred
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 Element
                          -- ^ Custom definitions that will be added to the @defs@
                          --   section of the output.
    , _idPrefix        :: T.Text
    , _svgAttributes   :: [Attribute]
                          -- ^ Attributes to apply to the entire svg element.
    , _generateDoctype :: Bool
    }
data family Render SVG V2 n = R 'SvgRenderM n'
type family Result SVG V2 n = Element

So the type of renderDia resolves to

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

which you could call like renderDia SVG (SVGOptions (mkWidth 250) Nothing "" [] True) 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 Element value, which you can, e.g. render to a ByteString using renderBS from the 'svg-builder' package.

Synopsis

Documentation

data SVG Source #

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

Constructors

SVG 

Instances

Instances details
Show SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

showsPrec :: Int -> SVG -> ShowS #

show :: SVG -> String #

showList :: [SVG] -> ShowS #

SVGFloat n => Backend SVG V2 n Source # 
Instance details

Defined in Diagrams.Backend.SVG

Associated Types

data Render SVG V2 n #

type Result SVG V2 n #

data Options SVG V2 n #

SVGFloat n => Mainable [(String, QDiagram SVG V2 n Any)] Source # 
Instance details

Defined in Diagrams.Backend.SVG.CmdLine

Associated Types

type MainOpts [(String, QDiagram SVG V2 n Any)] #

SVGFloat n => Renderable (Text n) SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

render :: SVG -> Text n -> Render SVG (V (Text n)) (N (Text n)) #

SVGFloat n => Renderable (Path V2 n) SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

render :: SVG -> Path V2 n -> Render SVG (V (Path V2 n)) (N (Path V2 n)) #

SVGFloat n => Renderable (DImage n Embedded) SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

render :: SVG -> DImage n Embedded -> Render SVG (V (DImage n Embedded)) (N (DImage n Embedded)) #

Monoid (Render SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

mempty :: Render SVG V2 n #

mappend :: Render SVG V2 n -> Render SVG V2 n -> Render SVG V2 n #

mconcat :: [Render SVG V2 n] -> Render SVG V2 n #

Semigroup (Render SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

(<>) :: Render SVG V2 n -> Render SVG V2 n -> Render SVG V2 n #

sconcat :: NonEmpty (Render SVG V2 n) -> Render SVG V2 n #

stimes :: Integral b => b -> Render SVG V2 n -> Render SVG V2 n #

Eq n => Eq (Options SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

(==) :: Options SVG V2 n -> Options SVG V2 n -> Bool #

(/=) :: Options SVG V2 n -> Options SVG V2 n -> Bool #

Hashable n => Hashable (Options SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

hashWithSalt :: Int -> Options SVG V2 n -> Int #

hash :: Options SVG V2 n -> Int #

SVGFloat n => Mainable (QDiagram SVG V2 n Any) Source # 
Instance details

Defined in Diagrams.Backend.SVG.CmdLine

Associated Types

type MainOpts (QDiagram SVG V2 n Any) #

type N SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

type N SVG = Double
type V SVG Source # 
Instance details

Defined in Diagrams.Backend.SVG

type V SVG = V2
data Options SVG V2 n Source # 
Instance details

Defined in Diagrams.Backend.SVG

newtype Render SVG V2 n Source # 
Instance details

Defined in Diagrams.Backend.SVG

newtype Render SVG V2 n = R (SvgRenderM n)
type Result SVG V2 n Source # 
Instance details

Defined in Diagrams.Backend.SVG

type Result SVG V2 n = Element
type MainOpts [(String, QDiagram SVG V2 n Any)] Source # 
Instance details

Defined in Diagrams.Backend.SVG.CmdLine

type MainOpts (QDiagram SVG V2 n Any) Source # 
Instance details

Defined in Diagrams.Backend.SVG.CmdLine

type B = SVG Source #

data family Options b (v :: Type -> Type) n #

Backend-specific rendering options.

Instances

Instances details
Eq n => Eq (Options SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

(==) :: Options SVG V2 n -> Options SVG V2 n -> Bool #

(/=) :: Options SVG V2 n -> Options SVG V2 n -> Bool #

Hashable n => Hashable (Options SVG V2 n) Source # 
Instance details

Defined in Diagrams.Backend.SVG

Methods

hashWithSalt :: Int -> Options SVG V2 n -> Int #

hash :: Options SVG V2 n -> Int #

data Options NullBackend v n 
Instance details

Defined in Diagrams.Core.Types

data Options SVG V2 n Source # 
Instance details

Defined in Diagrams.Backend.SVG

sizeSpec :: Lens' (Options SVG V2 n) (SizeSpec V2 n) Source #

Lens onto the size of the svg options.

svgDefinitions :: Lens' (Options SVG V2 n) (Maybe Element) Source #

Lens onto the svg definitions of the svg options.

idPrefix :: 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.

svgAttributes :: Lens' (Options SVG V2 n) [Attribute] Source #

Lens onto the svgAttributes field of the svg options. This field is provided to supply SVG attributes to the entire diagram.

generateDoctype :: Lens' (Options SVG V2 n) Bool Source #

Lens onto the generateDoctype field of the svg options. Set to False if you don't want a doctype tag included in the output.

svgClass :: SVGFloat n => String -> QDiagram SVG V2 n Any -> QDiagram SVG V2 n Any Source #

Set the class for a particular SVG diagram

svgId :: SVGFloat n => String -> QDiagram SVG V2 n Any -> QDiagram SVG V2 n Any Source #

Set the id for a particular SVG diagram

svgTitle :: SVGFloat n => String -> QDiagram SVG V2 n Any -> QDiagram SVG V2 n Any Source #

Set the title text for a particular SVG diagram

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.

Orphan instances

Eq Element Source # 
Instance details

Methods

(==) :: Element -> Element -> Bool #

(/=) :: Element -> Element -> Bool #