diagrams-svg 1.3.1.2 → 1.3.1.3
raw patch · 5 files changed
+101/−12 lines, 5 filesdep +semigroupsdep ~lucid-svgPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependencies added: semigroups
Dependency ranges changed: lucid-svg
API changes (from Hackage documentation)
+ Diagrams.Backend.SVG.Attributes: SvgClass :: String -> SvgClass
+ Diagrams.Backend.SVG.Attributes: SvgId :: String -> SvgId
+ Diagrams.Backend.SVG.Attributes: [getSvgClass] :: SvgClass -> String
+ Diagrams.Backend.SVG.Attributes: [getSvgId] :: SvgId -> String
+ Diagrams.Backend.SVG.Attributes: instance Data.Semigroup.Semigroup Diagrams.Backend.SVG.Attributes.SvgClass
+ Diagrams.Backend.SVG.Attributes: instance Data.Semigroup.Semigroup Diagrams.Backend.SVG.Attributes.SvgId
+ Diagrams.Backend.SVG.Attributes: instance Diagrams.Core.Style.AttributeClass Diagrams.Backend.SVG.Attributes.SvgClass
+ Diagrams.Backend.SVG.Attributes: instance Diagrams.Core.Style.AttributeClass Diagrams.Backend.SVG.Attributes.SvgId
+ Diagrams.Backend.SVG.Attributes: newtype SvgClass
+ Diagrams.Backend.SVG.Attributes: newtype SvgId
+ Diagrams.Backend.SVG.Attributes: svgClass :: HasStyle a => String -> a -> a
+ Diagrams.Backend.SVG.Attributes: svgId :: HasStyle a => String -> a -> a
Files
- CHANGELOG.md +4/−0
- diagrams-svg.cabal +4/−2
- src/Diagrams/Backend/SVG.hs +1/−1
- src/Diagrams/Backend/SVG/Attributes.hs +64/−0
- src/Graphics/Rendering/SVG.hs +28/−9
CHANGELOG.md view
@@ -1,3 +1,7 @@+## [v1.3.1.3](https://github.com/diagrams/diagrams-svg/tree/v1.3.1.2) (2015-07-09)++- Changes to allow `lucid-svg-0.5`+ ## [v1.3.1.2](https://github.com/diagrams/diagrams-svg/tree/v1.3.1.2) (2015-05-26) [Full Changelog](https://github.com/diagrams/diagrams-svg/compare/v1.3.1.1...v1.3.1.2)
diagrams-svg.cabal view
@@ -1,5 +1,5 @@ Name: diagrams-svg-Version: 1.3.1.2+Version: 1.3.1.3 Synopsis: SVG backend for diagrams drawing EDSL. Homepage: http://projects.haskell.org/diagrams/ License: BSD3@@ -38,6 +38,7 @@ Library Exposed-modules: Diagrams.Backend.SVG Diagrams.Backend.SVG.CmdLine+ Diagrams.Backend.SVG.Attributes Other-modules: Graphics.Rendering.SVG Hs-source-dirs: src Build-depends: base >= 4.3 && < 4.9@@ -52,7 +53,7 @@ , diagrams-core >= 1.3 && < 1.4 , diagrams-lib >= 1.3 && < 1.4 , monoid-extras >= 0.3 && < 0.5- , lucid-svg >= 0.4.0.3 && < 0.5+ , lucid-svg >= 0.5 && < 0.6 , text >= 0.11 && < 1.3 , JuicyPixels >= 3.1.5 && < 3.3 , split >= 0.1.2 && < 0.3@@ -61,6 +62,7 @@ , lens >= 4.0 && < 4.12 , hashable >= 1.1 && < 1.3 , optparse-applicative >= 0.10 && < 0.12+ , semigroups >= 0.13 && < 0.17 if impl(ghc < 7.6) build-depends: ghc-prim
src/Diagrams/Backend/SVG.hs view
@@ -255,7 +255,7 @@ RPrim p -> render SVG p RStyle sty -> R $ local (over style (<> sty)) r RAnnot (OpacityGroup o) -> R $ g_ [opacity_ $ toText o] <$> r- RAnnot (Href uri) -> R $ a_ [xlinkHref_ $ toText uri] <$> r+ RAnnot (Href uri) -> R $ a_ [xlinkHref_ $ T.pack uri] <$> r _ -> R r where R r = foldMap rtree rs
+ src/Diagrams/Backend/SVG/Attributes.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE DeriveDataTypeable #-}++-----------------------------------------------------------------------------+-- |+-- Module : Diagrams.Backend.SVG.Attributes+-- Copyright : (c) 2015 Diagrams team (see LICENSE)+-- License : BSD-style (see LICENSE)+-- Maintainer : diagrams-discuss@googlegroups.com+--+-- Attributes that are specific to the SVG backend. The intent+-- of this module is to allow adding the attributes class,+-- and id attributes to an SVG. For those embedding+-- the resulting SVG into a webpage, this allows some+-- interactivity with javascript and stylesheets.+--+-----------------------------------------------------------------------------++module Diagrams.Backend.SVG.Attributes (+ -- * Id+ SvgId(..)+ , svgId++ -- * Class+ , SvgClass(..)+ , svgClass++ ) where++import Diagrams.Core.Style (AttributeClass, HasStyle, applyAttr)+import Data.Semigroup+import Data.Typeable (Typeable)++-----------------------------------------------------------------+-- Id+-----------------------------------------------------------------++-- | The SVG id attribute.+newtype SvgId = SvgId {getSvgId :: String}+ deriving Typeable++instance Semigroup SvgId where+ _ <> a = a+instance AttributeClass SvgId++-- | Set the Id attribute.+svgId :: HasStyle a => String -> a -> a+svgId = applyAttr . SvgId++-----------------------------------------------------------------+-- Class+-----------------------------------------------------------------++-- | The SVG class attribute.+newtype SvgClass = SvgClass {getSvgClass :: String}+ deriving Typeable++instance Semigroup SvgClass where+ _ <> a = a++instance AttributeClass SvgClass++-- | Set the class attribute.+svgClass :: HasStyle a => String -> a -> a+svgClass = applyAttr . SvgClass
src/Graphics/Rendering/SVG.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE DeriveDataTypeable #-} ----------------------------------------------------------------------------- -- |@@ -69,6 +70,9 @@ -- from JuicyPixels import Codec.Picture +-- from same package+import Diagrams.Backend.SVG.Attributes (SvgId(..),SvgClass(..))+ -- | Constaint on number type that diagrams-svg can use to render an SVG. This -- includes the common number types: Double, Float type SVGFloat n = (Show n, TypeableFloat n)@@ -128,7 +132,7 @@ defs_ $ clipPath_ [id_ (clipPathId ident)] (renderPath p) g_ [clip_path_ $ ("url(#" <> clipPathId ident <> ")")] svg where- clipPathId i = prefix <> "myClip" <> (toText i)+ clipPathId i = prefix <> "myClip" <> (pack . show $ i) renderStop :: SVGFloat n => GradientStop n -> SvgM renderStop (GradientStop c v)@@ -203,8 +207,10 @@ where fillColorRgb = Just $ colorToRgbText c fillColorOpacity = Just $ colorToOpacity c- Just (LG _) -> [fill_ ("url(#gradient" <> toText ident <> ")"), fill_opacity_ "1"]- Just (RG _) -> [fill_ ("url(#gradient" <> toText ident <> ")"), fill_opacity_ "1"]+ Just (LG _) -> [fill_ ("url(#gradient" <> (pack . show $ ident)+ <> ")"), fill_opacity_ "1"]+ Just (RG _) -> [fill_ ("url(#gradient" <> (pack . show $ ident)+ <> ")"), fill_opacity_ "1"] Nothing -> [] renderLineTextureDefs :: SVGFloat n => Int -> Style v n -> SvgM@@ -221,8 +227,10 @@ where lineColorRgb = Just $ colorToRgbText c lineColorOpacity = Just $ colorToOpacity c- Just (LG _) -> [stroke_ ("url(#gradient" <> toText ident <> ")"), stroke_opacity_ "1"]- Just (RG _) -> [stroke_ ("url(#gradient" <> toText ident <> ")"), stroke_opacity_ "1"]+ Just (LG _) -> [stroke_ ("url(#gradient" <> (pack . show $ ident)+ <> ")"), stroke_opacity_ "1"]+ Just (RG _) -> [stroke_ ("url(#gradient" <> (pack . show $ ident)+ <> ")"), stroke_opacity_ "1"] Nothing -> [] dataUri :: String -> BS8.ByteString -> AttributeValue@@ -240,8 +248,8 @@ renderDImage (DImage _ w h tr) uridata = image_ [ transform_ transformMatrix- , width_ (toText w)- , height_ (toText h)+ , width_ (pack . show $ w)+ , height_ (pack . show $ h) , xlinkHref_ uridata ] where [[a,b],[c,d],[e,f]] = matrixHomRep (tr `mappend` reflectionY@@ -289,8 +297,19 @@ , renderFontSlant , renderFontWeight , renderFontFamily+ , renderSvgId+ , renderSvgClass , renderMiterLimit ] ++renderSvgId :: SVGFloat n => Style v n -> [Attribute]+renderSvgId s = renderTextAttr id_ svgIdAttr+ where svgIdAttr = pack . getSvgId <$> getAttr s++renderSvgClass :: SVGFloat n => Style v n -> [Attribute]+renderSvgClass s = renderTextAttr class_ svgClassAttr+ where svgClassAttr = pack . getSvgClass <$> getAttr s+ renderMiterLimit :: SVGFloat n => Style v n -> [Attribute] renderMiterLimit s = renderAttr stroke_miterlimit_ miterLimit where miterLimit = getLineMiterLimit <$> getAttr s@@ -369,7 +388,7 @@ -- | Render a style attribute if available, empty otherwise. renderAttr :: Show s => (AttributeValue -> Attribute) -> Maybe s -> [Attribute]-renderAttr attr valM = maybe [] (\v -> [attr (toText v)]) valM+renderAttr attr valM = maybe [] (\v -> [attr (pack . show $ v)]) valM renderTextAttr :: (AttributeValue -> Attribute) -> Maybe AttributeValue -> [Attribute] renderTextAttr attr valM = maybe [] (\v -> [attr v]) valM@@ -382,7 +401,7 @@ , int b , ")" ] where- int d = toText (round (d * 255) :: Int)+ int d = pack . show $ (round (d * 255) :: Int) (r,g,b,_) = colorToSRGBA c colorToOpacity :: forall c . Color c => c -> Double