blaze-svg (empty) → 0.1.0.0
raw patch · 9 files changed
+4481/−0 lines, 9 filesdep +basedep +blaze-htmldep +bytestringsetup-changed
Dependencies added: base, blaze-html, bytestring, mtl
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- Text/Blaze/Svg.hs +14/−0
- Text/Blaze/Svg/Internal.hs +189/−0
- Text/Blaze/Svg11.hs +862/−0
- Text/Blaze/Svg11/Attributes.hs +2942/−0
- Util/GenerateSvgCombinators.hs +329/−0
- Util/Sanitize.hs +78/−0
- blaze-svg.cabal +35/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2012, Deepak Jois++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Deepak Jois nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ Text/Blaze/Svg.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE OverloadedStrings #-}+module Text.Blaze.Svg+ (+ Svg+ , Path+ , mkPath+ , m, mr+ , z+ , l, lr, h, hr, v, vr+ , c, cr, s, sr+ , q, qr, t, tr+ ) where++import Text.Blaze.Svg.Internal
+ Text/Blaze/Svg/Internal.hs view
@@ -0,0 +1,189 @@+module Text.Blaze.Svg.Internal where++import Control.Monad.State+import Data.Monoid (mappend, mempty)++import Text.Blaze+import Text.Blaze.Internal++-- | Type to represent an SVG document fragment+type Svg = HtmlM ()++-- | Type to accumulate an SVG path+type Path = State AttributeValue ()++-- | Construct SVG path values using path instruction combinators.+-- See simple example below of how you can use @mkPath@ to+-- specify a path using the path instruction combinators+-- that are included as part of the same module+--+-- More information available at: <http://www.w3.org/TR/SVG/paths.html>+--+-- > import Text.Blaze.Svg11 ((!), mkPath, l, m)+-- > import qualified Text.Blaze.Svg11 as S+-- > import qualified Text.Blaze.Svg11.Attributes as A+-- >+-- > svgDoc :: S.Svg+-- > svgDoc = S.docTypeSvg ! A.version "1.1" ! A.width "150" ! A.height "100" $ do+-- > path ! d makeSimplePath+-- >+-- > makeSimplePath :: S.AttributeValue+-- > makeSimplePath = mkPath do+-- > l 2 3+-- > m 4 5+mkPath :: Path -> AttributeValue+mkPath path = snd $ runState path mempty++appendToPath :: [String] -> Path+appendToPath = modify . flip mappend . toValue . join++-- | Moveto+m :: Show a => a -> a -> Path+m x y = appendToPath+ [ "M "+ , show x, ",", show y+ , " "+ ]++-- | Moveto (relative)+mr :: Show a => a -> a -> Path+mr dx dy = appendToPath+ [ "m "+ , show dx, ",", show dy+ , " "+ ]++-- | ClosePath+z :: Path+z = modify (`mappend` toValue "Z")++-- | Lineto+l :: Show a => a -> a -> Path+l x y = appendToPath+ [ "L "+ , show x, ",", show y+ , " "+ ]++-- | Lineto (relative)+lr :: Show a => a -> a -> Path+lr dx dy = appendToPath+ [ "l "+ , show dx, ",", show dy+ , " "+ ]++-- | Horizontal lineto+h :: Show a => a -> Path+h x = appendToPath+ [ "H "+ , show x+ , " "+ ]++-- | Horizontal lineto (relative)+hr :: Show a => a -> Path+hr dx = appendToPath+ [ "h "+ , show dx+ , " "+ ]+++-- | Vertical lineto+v :: Show a => a -> Path+v y = appendToPath+ [ "V "+ , show y+ , " "+ ]++-- | Vertical lineto (relative)+vr :: Show a => a -> Path+vr dy = appendToPath+ [ "v "+ , show dy+ , " "+ ]++-- | Cubic Bezier curve+c :: Show a => a -> a -> a -> a -> a -> a -> Path+c c1x c1y c2x c2y x y = appendToPath+ [ "C "+ , show c1x, ",", show c1y+ , " "+ , show c2x, ",", show c2y+ , " "+ , show x, " ", show y+ ]++-- | Cubic Bezier curve (relative)+cr :: Show a => a -> a -> a -> a -> a -> a -> Path+cr dc1x dc1y dc2x dc2y dx dy = appendToPath+ [ "c "+ , show dc1x, ",", show dc1y+ , " "+ , show dc2x, ",", show dc2y+ , " "+ , show dx, " ", show dy+ ]++-- | Smooth Cubic Bezier curve+s :: Show a => a -> a -> a -> a -> Path+s c2x c2y x y = appendToPath+ [ "S "+ , show c2x, ",", show c2y+ , " "+ , show x, ",", show y+ , " "+ ]++-- | Smooth Cubic Bezier curve (relative)+sr :: Show a => a -> a -> a -> a -> Path+sr dc2x dc2y dx dy = appendToPath+ [ "s "+ , show dc2x, ",", show dc2y+ , " "+ , show dx, ",", show dy+ , " "+ ]++-- | Quadratic Bezier curve+q :: Show a => a -> a -> a -> a -> Path+q cx cy x y = appendToPath+ [ "Q "+ , show cx, ",", show cy+ , " "+ , show x, ",", show y+ , " "+ ]++-- | Quadratic Bezier curve (relative)+qr :: Show a => a -> a -> a -> a -> Path+qr dcx dcy dx dy = appendToPath+ [ "q "+ , show dcx, ",", show dcy+ , " "+ , show dx, ",", show dy+ , " "+ ]++-- | Smooth Quadratic Bezier curve+t :: Show a => a -> a -> Path+t x y = appendToPath+ [ "T "+ , " "+ , show x, ",", show y+ , " "+ ]++-- | Smooth Quadratic Bezier curve (relative)+tr :: Show a => a -> a -> Path+tr x y = appendToPath+ [ "t "+ , " "+ , show x, ",", show y+ , " "+ ]++
+ Text/Blaze/Svg11.hs view
@@ -0,0 +1,862 @@+-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:69+--+{-# LANGUAGE OverloadedStrings #-}+-- | This module exports SVG combinators used to create documents.+--+module Text.Blaze.Svg11+ ( module Text.Blaze+ , module Text.Blaze.Svg+ , docType+ , docTypeSvg+ , a+ , altglyph+ , altglyphdef+ , altglyphitem+ , animate+ , animatecolor+ , animatemotion+ , animatetransform+ , circle+ , clippath+ , colorProfile+ , cursor+ , defs+ , desc+ , ellipse+ , feblend+ , fecolormatrix+ , fecomponenttransfer+ , fecomposite+ , feconvolvematrix+ , fediffuselighting+ , fedisplacementmap+ , fedistantlight+ , feflood+ , fefunca+ , fefuncb+ , fefuncg+ , fefuncr+ , fegaussianblur+ , feimage+ , femerge+ , femergenode+ , femorphology+ , feoffset+ , fepointlight+ , fespecularlighting+ , fespotlight+ , fetile+ , feturbulence+ , filter_+ , font+ , fontFace+ , fontFaceFormat+ , fontFaceName+ , fontFaceSrc+ , fontFaceUri+ , foreignobject+ , g+ , glyph+ , glyphref+ , hkern+ , image+ , line+ , lineargradient+ , marker+ , mask+ , metadata+ , missingGlyph+ , mpath+ , path+ , pattern+ , polygon+ , polyline+ , radialgradient+ , rect+ , script+ , set+ , stop+ , style+ , svg+ , switch+ , symbol+ , text_+ , textpath+ , title+ , tref+ , tspan+ , use+ , view+ , vkern+ ) where++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:78+--+import Prelude ((>>), (.), ($))++import Text.Blaze+import Text.Blaze.Svg+import Text.Blaze.Internal++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:157+--+-- | Combinator for the document type. This should be placed at the top+-- of every SVG page.+--+-- > <?xml version="1.0" encoding="UTF-8"?>+-- > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"+-- > "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">+--+docType :: Svg -- ^ The document type SVG.+docType = preEscapedText "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"+{-# INLINE docType #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:172+--+-- | Combinator for the @\<svg>@ element. This combinator will also+-- insert the correct doctype.+--+-- > <?xml version="1.0" encoding="UTF-8"?>+-- > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"+-- > "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">+-- > <svg><span>foo</span></svg>+--+docTypeSvg :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+docTypeSvg inner = docType >> (svg ! attribute "xmlns" " xmlns=\"" "http://www.w3.org/2000/svg" ! attribute "xmlns:xlink" " xmlns:xlink=\"" "http://www.w3.org/1999/xlink" $ inner)+{-# INLINE docTypeSvg #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<a>@ element.+--+a :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+a = Parent "a" "<a" "</a>"+{-# INLINE a #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<altGlyph />@ element.+--+altglyph :: Svg -- ^ Resulting SVG.+altglyph = Leaf "altGlyph" "<altGlyph" " />"+{-# INLINE altglyph #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<altGlyphDef />@ element.+--+altglyphdef :: Svg -- ^ Resulting SVG.+altglyphdef = Leaf "altGlyphDef" "<altGlyphDef" " />"+{-# INLINE altglyphdef #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<altGlyphItem />@ element.+--+altglyphitem :: Svg -- ^ Resulting SVG.+altglyphitem = Leaf "altGlyphItem" "<altGlyphItem" " />"+{-# INLINE altglyphitem #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<animate />@ element.+--+animate :: Svg -- ^ Resulting SVG.+animate = Leaf "animate" "<animate" " />"+{-# INLINE animate #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<animateColor />@ element.+--+animatecolor :: Svg -- ^ Resulting SVG.+animatecolor = Leaf "animateColor" "<animateColor" " />"+{-# INLINE animatecolor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<animateMotion />@ element.+--+animatemotion :: Svg -- ^ Resulting SVG.+animatemotion = Leaf "animateMotion" "<animateMotion" " />"+{-# INLINE animatemotion #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<animateTransform />@ element.+--+animatetransform :: Svg -- ^ Resulting SVG.+animatetransform = Leaf "animateTransform" "<animateTransform" " />"+{-# INLINE animatetransform #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<circle />@ element.+--+circle :: Svg -- ^ Resulting SVG.+circle = Leaf "circle" "<circle" " />"+{-# INLINE circle #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<clipPath />@ element.+--+clippath :: Svg -- ^ Resulting SVG.+clippath = Leaf "clipPath" "<clipPath" " />"+{-# INLINE clippath #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<color-profile />@ element.+--+colorProfile :: Svg -- ^ Resulting SVG.+colorProfile = Leaf "color-profile" "<color-profile" " />"+{-# INLINE colorProfile #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<cursor />@ element.+--+cursor :: Svg -- ^ Resulting SVG.+cursor = Leaf "cursor" "<cursor" " />"+{-# INLINE cursor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<defs>@ element.+--+defs :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+defs = Parent "defs" "<defs" "</defs>"+{-# INLINE defs #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<desc />@ element.+--+desc :: Svg -- ^ Resulting SVG.+desc = Leaf "desc" "<desc" " />"+{-# INLINE desc #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<ellipse />@ element.+--+ellipse :: Svg -- ^ Resulting SVG.+ellipse = Leaf "ellipse" "<ellipse" " />"+{-# INLINE ellipse #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feBlend />@ element.+--+feblend :: Svg -- ^ Resulting SVG.+feblend = Leaf "feBlend" "<feBlend" " />"+{-# INLINE feblend #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feColorMatrix />@ element.+--+fecolormatrix :: Svg -- ^ Resulting SVG.+fecolormatrix = Leaf "feColorMatrix" "<feColorMatrix" " />"+{-# INLINE fecolormatrix #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feComponentTransfer />@ element.+--+fecomponenttransfer :: Svg -- ^ Resulting SVG.+fecomponenttransfer = Leaf "feComponentTransfer" "<feComponentTransfer" " />"+{-# INLINE fecomponenttransfer #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feComposite />@ element.+--+fecomposite :: Svg -- ^ Resulting SVG.+fecomposite = Leaf "feComposite" "<feComposite" " />"+{-# INLINE fecomposite #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feConvolveMatrix />@ element.+--+feconvolvematrix :: Svg -- ^ Resulting SVG.+feconvolvematrix = Leaf "feConvolveMatrix" "<feConvolveMatrix" " />"+{-# INLINE feconvolvematrix #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feDiffuseLighting />@ element.+--+fediffuselighting :: Svg -- ^ Resulting SVG.+fediffuselighting = Leaf "feDiffuseLighting" "<feDiffuseLighting" " />"+{-# INLINE fediffuselighting #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feDisplacementMap />@ element.+--+fedisplacementmap :: Svg -- ^ Resulting SVG.+fedisplacementmap = Leaf "feDisplacementMap" "<feDisplacementMap" " />"+{-# INLINE fedisplacementmap #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feDistantLight />@ element.+--+fedistantlight :: Svg -- ^ Resulting SVG.+fedistantlight = Leaf "feDistantLight" "<feDistantLight" " />"+{-# INLINE fedistantlight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feFlood />@ element.+--+feflood :: Svg -- ^ Resulting SVG.+feflood = Leaf "feFlood" "<feFlood" " />"+{-# INLINE feflood #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feFuncA />@ element.+--+fefunca :: Svg -- ^ Resulting SVG.+fefunca = Leaf "feFuncA" "<feFuncA" " />"+{-# INLINE fefunca #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feFuncB />@ element.+--+fefuncb :: Svg -- ^ Resulting SVG.+fefuncb = Leaf "feFuncB" "<feFuncB" " />"+{-# INLINE fefuncb #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feFuncG />@ element.+--+fefuncg :: Svg -- ^ Resulting SVG.+fefuncg = Leaf "feFuncG" "<feFuncG" " />"+{-# INLINE fefuncg #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feFuncR />@ element.+--+fefuncr :: Svg -- ^ Resulting SVG.+fefuncr = Leaf "feFuncR" "<feFuncR" " />"+{-# INLINE fefuncr #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feGaussianBlur />@ element.+--+fegaussianblur :: Svg -- ^ Resulting SVG.+fegaussianblur = Leaf "feGaussianBlur" "<feGaussianBlur" " />"+{-# INLINE fegaussianblur #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feImage />@ element.+--+feimage :: Svg -- ^ Resulting SVG.+feimage = Leaf "feImage" "<feImage" " />"+{-# INLINE feimage #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feMerge />@ element.+--+femerge :: Svg -- ^ Resulting SVG.+femerge = Leaf "feMerge" "<feMerge" " />"+{-# INLINE femerge #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feMergeNode />@ element.+--+femergenode :: Svg -- ^ Resulting SVG.+femergenode = Leaf "feMergeNode" "<feMergeNode" " />"+{-# INLINE femergenode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feMorphology />@ element.+--+femorphology :: Svg -- ^ Resulting SVG.+femorphology = Leaf "feMorphology" "<feMorphology" " />"+{-# INLINE femorphology #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feOffset />@ element.+--+feoffset :: Svg -- ^ Resulting SVG.+feoffset = Leaf "feOffset" "<feOffset" " />"+{-# INLINE feoffset #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<fePointLight />@ element.+--+fepointlight :: Svg -- ^ Resulting SVG.+fepointlight = Leaf "fePointLight" "<fePointLight" " />"+{-# INLINE fepointlight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feSpecularLighting />@ element.+--+fespecularlighting :: Svg -- ^ Resulting SVG.+fespecularlighting = Leaf "feSpecularLighting" "<feSpecularLighting" " />"+{-# INLINE fespecularlighting #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feSpotLight />@ element.+--+fespotlight :: Svg -- ^ Resulting SVG.+fespotlight = Leaf "feSpotLight" "<feSpotLight" " />"+{-# INLINE fespotlight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feTile />@ element.+--+fetile :: Svg -- ^ Resulting SVG.+fetile = Leaf "feTile" "<feTile" " />"+{-# INLINE fetile #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<feTurbulence />@ element.+--+feturbulence :: Svg -- ^ Resulting SVG.+feturbulence = Leaf "feTurbulence" "<feTurbulence" " />"+{-# INLINE feturbulence #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<filter />@ element.+--+filter_ :: Svg -- ^ Resulting SVG.+filter_ = Leaf "filter" "<filter" " />"+{-# INLINE filter_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font />@ element.+--+font :: Svg -- ^ Resulting SVG.+font = Leaf "font" "<font" " />"+{-# INLINE font #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font-face />@ element.+--+fontFace :: Svg -- ^ Resulting SVG.+fontFace = Leaf "font-face" "<font-face" " />"+{-# INLINE fontFace #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font-face-format />@ element.+--+fontFaceFormat :: Svg -- ^ Resulting SVG.+fontFaceFormat = Leaf "font-face-format" "<font-face-format" " />"+{-# INLINE fontFaceFormat #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font-face-name />@ element.+--+fontFaceName :: Svg -- ^ Resulting SVG.+fontFaceName = Leaf "font-face-name" "<font-face-name" " />"+{-# INLINE fontFaceName #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font-face-src />@ element.+--+fontFaceSrc :: Svg -- ^ Resulting SVG.+fontFaceSrc = Leaf "font-face-src" "<font-face-src" " />"+{-# INLINE fontFaceSrc #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<font-face-uri />@ element.+--+fontFaceUri :: Svg -- ^ Resulting SVG.+fontFaceUri = Leaf "font-face-uri" "<font-face-uri" " />"+{-# INLINE fontFaceUri #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<foreignObject />@ element.+--+foreignobject :: Svg -- ^ Resulting SVG.+foreignobject = Leaf "foreignObject" "<foreignObject" " />"+{-# INLINE foreignobject #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<g>@ element.+--+g :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+g = Parent "g" "<g" "</g>"+{-# INLINE g #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<glyph>@ element.+--+glyph :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+glyph = Parent "glyph" "<glyph" "</glyph>"+{-# INLINE glyph #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<glyphRef />@ element.+--+glyphref :: Svg -- ^ Resulting SVG.+glyphref = Leaf "glyphRef" "<glyphRef" " />"+{-# INLINE glyphref #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<hkern />@ element.+--+hkern :: Svg -- ^ Resulting SVG.+hkern = Leaf "hkern" "<hkern" " />"+{-# INLINE hkern #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<image />@ element.+--+image :: Svg -- ^ Resulting SVG.+image = Leaf "image" "<image" " />"+{-# INLINE image #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<line />@ element.+--+line :: Svg -- ^ Resulting SVG.+line = Leaf "line" "<line" " />"+{-# INLINE line #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<linearGradient />@ element.+--+lineargradient :: Svg -- ^ Resulting SVG.+lineargradient = Leaf "linearGradient" "<linearGradient" " />"+{-# INLINE lineargradient #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<marker>@ element.+--+marker :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+marker = Parent "marker" "<marker" "</marker>"+{-# INLINE marker #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<mask>@ element.+--+mask :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+mask = Parent "mask" "<mask" "</mask>"+{-# INLINE mask #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<metadata />@ element.+--+metadata :: Svg -- ^ Resulting SVG.+metadata = Leaf "metadata" "<metadata" " />"+{-# INLINE metadata #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<missing-glyph>@ element.+--+missingGlyph :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+missingGlyph = Parent "missing-glyph" "<missing-glyph" "</missing-glyph>"+{-# INLINE missingGlyph #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<mpath />@ element.+--+mpath :: Svg -- ^ Resulting SVG.+mpath = Leaf "mpath" "<mpath" " />"+{-# INLINE mpath #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<path />@ element.+--+path :: Svg -- ^ Resulting SVG.+path = Leaf "path" "<path" " />"+{-# INLINE path #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<pattern>@ element.+--+pattern :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+pattern = Parent "pattern" "<pattern" "</pattern>"+{-# INLINE pattern #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<polygon />@ element.+--+polygon :: Svg -- ^ Resulting SVG.+polygon = Leaf "polygon" "<polygon" " />"+{-# INLINE polygon #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<polyline />@ element.+--+polyline :: Svg -- ^ Resulting SVG.+polyline = Leaf "polyline" "<polyline" " />"+{-# INLINE polyline #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<radialGradient />@ element.+--+radialgradient :: Svg -- ^ Resulting SVG.+radialgradient = Leaf "radialGradient" "<radialGradient" " />"+{-# INLINE radialgradient #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<rect />@ element.+--+rect :: Svg -- ^ Resulting SVG.+rect = Leaf "rect" "<rect" " />"+{-# INLINE rect #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<script />@ element.+--+script :: Svg -- ^ Resulting SVG.+script = Leaf "script" "<script" " />"+{-# INLINE script #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<set />@ element.+--+set :: Svg -- ^ Resulting SVG.+set = Leaf "set" "<set" " />"+{-# INLINE set #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<stop />@ element.+--+stop :: Svg -- ^ Resulting SVG.+stop = Leaf "stop" "<stop" " />"+{-# INLINE stop #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<style />@ element.+--+style :: Svg -- ^ Resulting SVG.+style = Leaf "style" "<style" " />"+{-# INLINE style #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<svg>@ element.+--+svg :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+svg = Parent "svg" "<svg" "</svg>"+{-# INLINE svg #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<switch>@ element.+--+switch :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+switch = Parent "switch" "<switch" "</switch>"+{-# INLINE switch #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:188+--+-- | Combinator for the @\<symbol>@ element.+--+symbol :: Svg -- ^ Inner SVG.+ -> Svg -- ^ Resulting SVG.+symbol = Parent "symbol" "<symbol" "</symbol>"+{-# INLINE symbol #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<text />@ element.+--+text_ :: Svg -- ^ Resulting SVG.+text_ = Leaf "text" "<text" " />"+{-# INLINE text_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<textPath />@ element.+--+textpath :: Svg -- ^ Resulting SVG.+textpath = Leaf "textPath" "<textPath" " />"+{-# INLINE textpath #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<title />@ element.+--+title :: Svg -- ^ Resulting SVG.+title = Leaf "title" "<title" " />"+{-# INLINE title #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<tref />@ element.+--+tref :: Svg -- ^ Resulting SVG.+tref = Leaf "tref" "<tref" " />"+{-# INLINE tref #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<tspan />@ element.+--+tspan :: Svg -- ^ Resulting SVG.+tspan = Leaf "tspan" "<tspan" " />"+{-# INLINE tspan #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<use />@ element.+--+use :: Svg -- ^ Resulting SVG.+use = Leaf "use" "<use" " />"+{-# INLINE use #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<view />@ element.+--+view :: Svg -- ^ Resulting SVG.+view = Leaf "view" "<view" " />"+{-# INLINE view #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:207+--+-- | Combinator for the @\<vkern />@ element.+--+vkern :: Svg -- ^ Resulting SVG.+vkern = Leaf "vkern" "<vkern" " />"+{-# INLINE vkern #-}
+ Text/Blaze/Svg11/Attributes.hs view
@@ -0,0 +1,2942 @@+-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:94+--+-- | This module exports combinators that provide you with the+-- ability to set attributes on SVG elements.+--+{-# LANGUAGE OverloadedStrings #-}+module Text.Blaze.Svg11.Attributes+ ( accentHeight+ , accumulate+ , additive+ , alignmentBaseline+ , alphabetic+ , amplitude+ , arabicForm+ , ascent+ , attributename+ , attributetype+ , azimuth+ , basefrequency+ , baseprofile+ , baselineShift+ , bbox+ , begin+ , bias+ , by+ , calcmode+ , capHeight+ , class_+ , clip+ , clipPath+ , clipRule+ , clippathunits+ , color+ , colorInterpolation+ , colorInterpolationFilters+ , colorProfile+ , colorRendering+ , contentscripttype+ , contentstyletype+ , cursor+ , cx+ , cy+ , d+ , descent+ , diffuseconstant+ , direction+ , display+ , divisor+ , dominantBaseline+ , dur+ , dx+ , dy+ , edgemode+ , elevation+ , enableBackground+ , end+ , exponent_+ , externalresourcesrequired+ , fill+ , fillOpacity+ , fillRule+ , filter_+ , filterres+ , filterunits+ , floodColor+ , floodOpacity+ , fontFamily+ , fontSize+ , fontSizeAdjust+ , fontStretch+ , fontStyle+ , fontVariant+ , fontWeight+ , format+ , from+ , fx+ , fy+ , g1+ , g2+ , glyphName+ , glyphOrientationHorizontal+ , glyphOrientationVertical+ , glyphref+ , gradienttransform+ , gradientunits+ , hanging+ , height+ , horizAdvX+ , horizOriginX+ , horizOriginY+ , id_+ , ideographic+ , imageRendering+ , in_+ , in2+ , intercept+ , k+ , k1+ , k2+ , k3+ , k4+ , kernelmatrix+ , kernelunitlength+ , kerning+ , keypoints+ , keysplines+ , keytimes+ , lang+ , lengthadjust+ , letterSpacing+ , lightingColor+ , limitingconeangle+ , local+ , markerEnd+ , markerMid+ , markerStart+ , markerheight+ , markerunits+ , markerwidth+ , mask+ , maskcontentunits+ , maskunits+ , mathematical+ , max_+ , media+ , method+ , min_+ , mode+ , name+ , numoctaves+ , offset+ , onabort+ , onactivate+ , onbegin+ , onclick+ , onend+ , onerror+ , onfocusin+ , onfocusout+ , onload+ , onmousedown+ , onmousemove+ , onmouseout+ , onmouseover+ , onmouseup+ , onrepeat+ , onresize+ , onscroll+ , onunload+ , onzoom+ , opacity+ , operator+ , order+ , orient+ , orientation+ , origin+ , overflow+ , overlinePosition+ , overlineThickness+ , panose1+ , path+ , pathlength+ , patterncontentunits+ , patterntransform+ , patternunits+ , pointerEvents+ , points+ , pointsatx+ , pointsaty+ , pointsatz+ , preservealpha+ , preserveaspectratio+ , primitiveunits+ , r+ , radius+ , refx+ , refy+ , renderingIntent+ , repeatcount+ , repeatdur+ , requiredextensions+ , requiredfeatures+ , restart+ , result+ , rotate+ , rx+ , ry+ , scale+ , seed+ , shapeRendering+ , slope+ , spacing+ , specularconstant+ , specularexponent+ , spreadmethod+ , startoffset+ , stddeviation+ , stemh+ , stemv+ , stitchtiles+ , stopColor+ , stopOpacity+ , strikethroughPosition+ , strikethroughThickness+ , string+ , stroke+ , strokeDasharray+ , strokeDashoffset+ , strokeLinecap+ , strokeLinejoin+ , strokeMiterlimit+ , strokeOpacity+ , strokeWidth+ , style+ , surfacescale+ , systemlanguage+ , tablevalues+ , target+ , targetx+ , targety+ , textAnchor+ , textDecoration+ , textRendering+ , textlength+ , title+ , to+ , transform+ , type_+ , u1+ , u2+ , underlinePosition+ , underlineThickness+ , unicode+ , unicodeBidi+ , unicodeRange+ , unitsPerEm+ , vAlphabetic+ , vHanging+ , vIdeographic+ , vMathematical+ , values+ , version+ , vertAdvY+ , vertOriginX+ , vertOriginY+ , viewbox+ , viewtarget+ , visibility+ , width+ , widths+ , wordSpacing+ , writingMode+ , x+ , xHeight+ , x1+ , x2+ , xchannelselector+ , xlinkActuate+ , xlinkArcrole+ , xlinkHref+ , xlinkRole+ , xlinkShow+ , xlinkTitle+ , xlinkType+ , xmlBase+ , xmlLang+ , xmlSpace+ , y+ , y1+ , y2+ , ychannelselector+ , z+ , zoomandpan+ ) where++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:100+--+import Prelude ()++import Text.Blaze.Internal (Attribute, AttributeValue, attribute)++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @accent-height@ attribute.+--+accentHeight :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+accentHeight = attribute "accent-height" " accent-height=\""+{-# INLINE accentHeight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @accumulate@ attribute.+--+accumulate :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+accumulate = attribute "accumulate" " accumulate=\""+{-# INLINE accumulate #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @additive@ attribute.+--+additive :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+additive = attribute "additive" " additive=\""+{-# INLINE additive #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @alignment-baseline@ attribute.+--+alignmentBaseline :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+alignmentBaseline = attribute "alignment-baseline" " alignment-baseline=\""+{-# INLINE alignmentBaseline #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @alphabetic@ attribute.+--+alphabetic :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+alphabetic = attribute "alphabetic" " alphabetic=\""+{-# INLINE alphabetic #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @amplitude@ attribute.+--+amplitude :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+amplitude = attribute "amplitude" " amplitude=\""+{-# INLINE amplitude #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @arabic-form@ attribute.+--+arabicForm :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+arabicForm = attribute "arabic-form" " arabic-form=\""+{-# INLINE arabicForm #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @ascent@ attribute.+--+ascent :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+ascent = attribute "ascent" " ascent=\""+{-# INLINE ascent #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @attributeName@ attribute.+--+attributename :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+attributename = attribute "attributeName" " attributeName=\""+{-# INLINE attributename #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @attributeType@ attribute.+--+attributetype :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+attributetype = attribute "attributeType" " attributeType=\""+{-# INLINE attributetype #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @azimuth@ attribute.+--+azimuth :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+azimuth = attribute "azimuth" " azimuth=\""+{-# INLINE azimuth #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @baseFrequency@ attribute.+--+basefrequency :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+basefrequency = attribute "baseFrequency" " baseFrequency=\""+{-# INLINE basefrequency #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @baseProfile@ attribute.+--+baseprofile :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+baseprofile = attribute "baseProfile" " baseProfile=\""+{-# INLINE baseprofile #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @baseline-shift@ attribute.+--+baselineShift :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+baselineShift = attribute "baseline-shift" " baseline-shift=\""+{-# INLINE baselineShift #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @bbox@ attribute.+--+bbox :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+bbox = attribute "bbox" " bbox=\""+{-# INLINE bbox #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @begin@ attribute.+--+begin :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+begin = attribute "begin" " begin=\""+{-# INLINE begin #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @bias@ attribute.+--+bias :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+bias = attribute "bias" " bias=\""+{-# INLINE bias #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @by@ attribute.+--+by :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+by = attribute "by" " by=\""+{-# INLINE by #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @calcMode@ attribute.+--+calcmode :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+calcmode = attribute "calcMode" " calcMode=\""+{-# INLINE calcmode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @cap-height@ attribute.+--+capHeight :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+capHeight = attribute "cap-height" " cap-height=\""+{-# INLINE capHeight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @class@ attribute.+--+class_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+class_ = attribute "class" " class=\""+{-# INLINE class_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @clip@ attribute.+--+clip :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+clip = attribute "clip" " clip=\""+{-# INLINE clip #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @clip-path@ attribute.+--+clipPath :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+clipPath = attribute "clip-path" " clip-path=\""+{-# INLINE clipPath #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @clip-rule@ attribute.+--+clipRule :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+clipRule = attribute "clip-rule" " clip-rule=\""+{-# INLINE clipRule #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @clipPathUnits@ attribute.+--+clippathunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+clippathunits = attribute "clipPathUnits" " clipPathUnits=\""+{-# INLINE clippathunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @color@ attribute.+--+color :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+color = attribute "color" " color=\""+{-# INLINE color #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @color-interpolation@ attribute.+--+colorInterpolation :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+colorInterpolation = attribute "color-interpolation" " color-interpolation=\""+{-# INLINE colorInterpolation #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @color-interpolation-filters@ attribute.+--+colorInterpolationFilters :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+colorInterpolationFilters = attribute "color-interpolation-filters" " color-interpolation-filters=\""+{-# INLINE colorInterpolationFilters #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @color-profile@ attribute.+--+colorProfile :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+colorProfile = attribute "color-profile" " color-profile=\""+{-# INLINE colorProfile #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @color-rendering@ attribute.+--+colorRendering :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+colorRendering = attribute "color-rendering" " color-rendering=\""+{-# INLINE colorRendering #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @contentScriptType@ attribute.+--+contentscripttype :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+contentscripttype = attribute "contentScriptType" " contentScriptType=\""+{-# INLINE contentscripttype #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @contentStyleType@ attribute.+--+contentstyletype :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+contentstyletype = attribute "contentStyleType" " contentStyleType=\""+{-# INLINE contentstyletype #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @cursor@ attribute.+--+cursor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+cursor = attribute "cursor" " cursor=\""+{-# INLINE cursor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @cx@ attribute.+--+cx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+cx = attribute "cx" " cx=\""+{-# INLINE cx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @cy@ attribute.+--+cy :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+cy = attribute "cy" " cy=\""+{-# INLINE cy #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @d@ attribute.+--+d :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+d = attribute "d" " d=\""+{-# INLINE d #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @descent@ attribute.+--+descent :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+descent = attribute "descent" " descent=\""+{-# INLINE descent #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @diffuseConstant@ attribute.+--+diffuseconstant :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+diffuseconstant = attribute "diffuseConstant" " diffuseConstant=\""+{-# INLINE diffuseconstant #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @direction@ attribute.+--+direction :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+direction = attribute "direction" " direction=\""+{-# INLINE direction #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @display@ attribute.+--+display :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+display = attribute "display" " display=\""+{-# INLINE display #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @divisor@ attribute.+--+divisor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+divisor = attribute "divisor" " divisor=\""+{-# INLINE divisor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @dominant-baseline@ attribute.+--+dominantBaseline :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+dominantBaseline = attribute "dominant-baseline" " dominant-baseline=\""+{-# INLINE dominantBaseline #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @dur@ attribute.+--+dur :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+dur = attribute "dur" " dur=\""+{-# INLINE dur #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @dx@ attribute.+--+dx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+dx = attribute "dx" " dx=\""+{-# INLINE dx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @dy@ attribute.+--+dy :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+dy = attribute "dy" " dy=\""+{-# INLINE dy #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @edgeMode@ attribute.+--+edgemode :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+edgemode = attribute "edgeMode" " edgeMode=\""+{-# INLINE edgemode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @elevation@ attribute.+--+elevation :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+elevation = attribute "elevation" " elevation=\""+{-# INLINE elevation #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @enable-background@ attribute.+--+enableBackground :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+enableBackground = attribute "enable-background" " enable-background=\""+{-# INLINE enableBackground #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @end@ attribute.+--+end :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+end = attribute "end" " end=\""+{-# INLINE end #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @exponent@ attribute.+--+exponent_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+exponent_ = attribute "exponent" " exponent=\""+{-# INLINE exponent_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @externalResourcesRequired@ attribute.+--+externalresourcesrequired :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+externalresourcesrequired = attribute "externalResourcesRequired" " externalResourcesRequired=\""+{-# INLINE externalresourcesrequired #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @fill@ attribute.+--+fill :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fill = attribute "fill" " fill=\""+{-# INLINE fill #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @fill-opacity@ attribute.+--+fillOpacity :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fillOpacity = attribute "fill-opacity" " fill-opacity=\""+{-# INLINE fillOpacity #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @fill-rule@ attribute.+--+fillRule :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fillRule = attribute "fill-rule" " fill-rule=\""+{-# INLINE fillRule #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @filter@ attribute.+--+filter_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+filter_ = attribute "filter" " filter=\""+{-# INLINE filter_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @filterRes@ attribute.+--+filterres :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+filterres = attribute "filterRes" " filterRes=\""+{-# INLINE filterres #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @filterUnits@ attribute.+--+filterunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+filterunits = attribute "filterUnits" " filterUnits=\""+{-# INLINE filterunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @flood-color@ attribute.+--+floodColor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+floodColor = attribute "flood-color" " flood-color=\""+{-# INLINE floodColor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @flood-opacity@ attribute.+--+floodOpacity :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+floodOpacity = attribute "flood-opacity" " flood-opacity=\""+{-# INLINE floodOpacity #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-family@ attribute.+--+fontFamily :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontFamily = attribute "font-family" " font-family=\""+{-# INLINE fontFamily #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-size@ attribute.+--+fontSize :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontSize = attribute "font-size" " font-size=\""+{-# INLINE fontSize #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-size-adjust@ attribute.+--+fontSizeAdjust :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontSizeAdjust = attribute "font-size-adjust" " font-size-adjust=\""+{-# INLINE fontSizeAdjust #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-stretch@ attribute.+--+fontStretch :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontStretch = attribute "font-stretch" " font-stretch=\""+{-# INLINE fontStretch #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-style@ attribute.+--+fontStyle :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontStyle = attribute "font-style" " font-style=\""+{-# INLINE fontStyle #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-variant@ attribute.+--+fontVariant :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontVariant = attribute "font-variant" " font-variant=\""+{-# INLINE fontVariant #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @font-weight@ attribute.+--+fontWeight :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fontWeight = attribute "font-weight" " font-weight=\""+{-# INLINE fontWeight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @format@ attribute.+--+format :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+format = attribute "format" " format=\""+{-# INLINE format #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @from@ attribute.+--+from :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+from = attribute "from" " from=\""+{-# INLINE from #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @fx@ attribute.+--+fx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fx = attribute "fx" " fx=\""+{-# INLINE fx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @fy@ attribute.+--+fy :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+fy = attribute "fy" " fy=\""+{-# INLINE fy #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @g1@ attribute.+--+g1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+g1 = attribute "g1" " g1=\""+{-# INLINE g1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @g2@ attribute.+--+g2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+g2 = attribute "g2" " g2=\""+{-# INLINE g2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @glyph-name@ attribute.+--+glyphName :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+glyphName = attribute "glyph-name" " glyph-name=\""+{-# INLINE glyphName #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @glyph-orientation-horizontal@ attribute.+--+glyphOrientationHorizontal :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+glyphOrientationHorizontal = attribute "glyph-orientation-horizontal" " glyph-orientation-horizontal=\""+{-# INLINE glyphOrientationHorizontal #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @glyph-orientation-vertical@ attribute.+--+glyphOrientationVertical :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+glyphOrientationVertical = attribute "glyph-orientation-vertical" " glyph-orientation-vertical=\""+{-# INLINE glyphOrientationVertical #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @glyphRef@ attribute.+--+glyphref :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+glyphref = attribute "glyphRef" " glyphRef=\""+{-# INLINE glyphref #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @gradientTransform@ attribute.+--+gradienttransform :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+gradienttransform = attribute "gradientTransform" " gradientTransform=\""+{-# INLINE gradienttransform #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @gradientUnits@ attribute.+--+gradientunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+gradientunits = attribute "gradientUnits" " gradientUnits=\""+{-# INLINE gradientunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @hanging@ attribute.+--+hanging :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+hanging = attribute "hanging" " hanging=\""+{-# INLINE hanging #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @height@ attribute.+--+height :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+height = attribute "height" " height=\""+{-# INLINE height #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @horiz-adv-x@ attribute.+--+horizAdvX :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+horizAdvX = attribute "horiz-adv-x" " horiz-adv-x=\""+{-# INLINE horizAdvX #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @horiz-origin-x@ attribute.+--+horizOriginX :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+horizOriginX = attribute "horiz-origin-x" " horiz-origin-x=\""+{-# INLINE horizOriginX #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @horiz-origin-y@ attribute.+--+horizOriginY :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+horizOriginY = attribute "horiz-origin-y" " horiz-origin-y=\""+{-# INLINE horizOriginY #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @id@ attribute.+--+id_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+id_ = attribute "id" " id=\""+{-# INLINE id_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @ideographic@ attribute.+--+ideographic :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+ideographic = attribute "ideographic" " ideographic=\""+{-# INLINE ideographic #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @image-rendering@ attribute.+--+imageRendering :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+imageRendering = attribute "image-rendering" " image-rendering=\""+{-# INLINE imageRendering #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @in@ attribute.+--+in_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+in_ = attribute "in" " in=\""+{-# INLINE in_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @in2@ attribute.+--+in2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+in2 = attribute "in2" " in2=\""+{-# INLINE in2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @intercept@ attribute.+--+intercept :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+intercept = attribute "intercept" " intercept=\""+{-# INLINE intercept #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @k@ attribute.+--+k :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+k = attribute "k" " k=\""+{-# INLINE k #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @k1@ attribute.+--+k1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+k1 = attribute "k1" " k1=\""+{-# INLINE k1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @k2@ attribute.+--+k2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+k2 = attribute "k2" " k2=\""+{-# INLINE k2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @k3@ attribute.+--+k3 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+k3 = attribute "k3" " k3=\""+{-# INLINE k3 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @k4@ attribute.+--+k4 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+k4 = attribute "k4" " k4=\""+{-# INLINE k4 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @kernelMatrix@ attribute.+--+kernelmatrix :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+kernelmatrix = attribute "kernelMatrix" " kernelMatrix=\""+{-# INLINE kernelmatrix #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @kernelUnitLength@ attribute.+--+kernelunitlength :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+kernelunitlength = attribute "kernelUnitLength" " kernelUnitLength=\""+{-# INLINE kernelunitlength #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @kerning@ attribute.+--+kerning :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+kerning = attribute "kerning" " kerning=\""+{-# INLINE kerning #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @keyPoints@ attribute.+--+keypoints :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+keypoints = attribute "keyPoints" " keyPoints=\""+{-# INLINE keypoints #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @keySplines@ attribute.+--+keysplines :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+keysplines = attribute "keySplines" " keySplines=\""+{-# INLINE keysplines #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @keyTimes@ attribute.+--+keytimes :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+keytimes = attribute "keyTimes" " keyTimes=\""+{-# INLINE keytimes #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @lang@ attribute.+--+lang :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+lang = attribute "lang" " lang=\""+{-# INLINE lang #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @lengthAdjust@ attribute.+--+lengthadjust :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+lengthadjust = attribute "lengthAdjust" " lengthAdjust=\""+{-# INLINE lengthadjust #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @letter-spacing@ attribute.+--+letterSpacing :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+letterSpacing = attribute "letter-spacing" " letter-spacing=\""+{-# INLINE letterSpacing #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @lighting-color@ attribute.+--+lightingColor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+lightingColor = attribute "lighting-color" " lighting-color=\""+{-# INLINE lightingColor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @limitingConeAngle@ attribute.+--+limitingconeangle :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+limitingconeangle = attribute "limitingConeAngle" " limitingConeAngle=\""+{-# INLINE limitingconeangle #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @local@ attribute.+--+local :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+local = attribute "local" " local=\""+{-# INLINE local #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @marker-end@ attribute.+--+markerEnd :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerEnd = attribute "marker-end" " marker-end=\""+{-# INLINE markerEnd #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @marker-mid@ attribute.+--+markerMid :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerMid = attribute "marker-mid" " marker-mid=\""+{-# INLINE markerMid #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @marker-start@ attribute.+--+markerStart :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerStart = attribute "marker-start" " marker-start=\""+{-# INLINE markerStart #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @markerHeight@ attribute.+--+markerheight :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerheight = attribute "markerHeight" " markerHeight=\""+{-# INLINE markerheight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @markerUnits@ attribute.+--+markerunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerunits = attribute "markerUnits" " markerUnits=\""+{-# INLINE markerunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @markerWidth@ attribute.+--+markerwidth :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+markerwidth = attribute "markerWidth" " markerWidth=\""+{-# INLINE markerwidth #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @mask@ attribute.+--+mask :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+mask = attribute "mask" " mask=\""+{-# INLINE mask #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @maskContentUnits@ attribute.+--+maskcontentunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+maskcontentunits = attribute "maskContentUnits" " maskContentUnits=\""+{-# INLINE maskcontentunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @maskUnits@ attribute.+--+maskunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+maskunits = attribute "maskUnits" " maskUnits=\""+{-# INLINE maskunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @mathematical@ attribute.+--+mathematical :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+mathematical = attribute "mathematical" " mathematical=\""+{-# INLINE mathematical #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @max@ attribute.+--+max_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+max_ = attribute "max" " max=\""+{-# INLINE max_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @media@ attribute.+--+media :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+media = attribute "media" " media=\""+{-# INLINE media #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @method@ attribute.+--+method :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+method = attribute "method" " method=\""+{-# INLINE method #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @min@ attribute.+--+min_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+min_ = attribute "min" " min=\""+{-# INLINE min_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @mode@ attribute.+--+mode :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+mode = attribute "mode" " mode=\""+{-# INLINE mode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @name@ attribute.+--+name :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+name = attribute "name" " name=\""+{-# INLINE name #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @numOctaves@ attribute.+--+numoctaves :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+numoctaves = attribute "numOctaves" " numOctaves=\""+{-# INLINE numoctaves #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @offset@ attribute.+--+offset :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+offset = attribute "offset" " offset=\""+{-# INLINE offset #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onabort@ attribute.+--+onabort :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onabort = attribute "onabort" " onabort=\""+{-# INLINE onabort #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onactivate@ attribute.+--+onactivate :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onactivate = attribute "onactivate" " onactivate=\""+{-# INLINE onactivate #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onbegin@ attribute.+--+onbegin :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onbegin = attribute "onbegin" " onbegin=\""+{-# INLINE onbegin #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onclick@ attribute.+--+onclick :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onclick = attribute "onclick" " onclick=\""+{-# INLINE onclick #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onend@ attribute.+--+onend :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onend = attribute "onend" " onend=\""+{-# INLINE onend #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onerror@ attribute.+--+onerror :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onerror = attribute "onerror" " onerror=\""+{-# INLINE onerror #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onfocusin@ attribute.+--+onfocusin :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onfocusin = attribute "onfocusin" " onfocusin=\""+{-# INLINE onfocusin #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onfocusout@ attribute.+--+onfocusout :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onfocusout = attribute "onfocusout" " onfocusout=\""+{-# INLINE onfocusout #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onload@ attribute.+--+onload :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onload = attribute "onload" " onload=\""+{-# INLINE onload #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onmousedown@ attribute.+--+onmousedown :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onmousedown = attribute "onmousedown" " onmousedown=\""+{-# INLINE onmousedown #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onmousemove@ attribute.+--+onmousemove :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onmousemove = attribute "onmousemove" " onmousemove=\""+{-# INLINE onmousemove #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onmouseout@ attribute.+--+onmouseout :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onmouseout = attribute "onmouseout" " onmouseout=\""+{-# INLINE onmouseout #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onmouseover@ attribute.+--+onmouseover :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onmouseover = attribute "onmouseover" " onmouseover=\""+{-# INLINE onmouseover #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onmouseup@ attribute.+--+onmouseup :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onmouseup = attribute "onmouseup" " onmouseup=\""+{-# INLINE onmouseup #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onrepeat@ attribute.+--+onrepeat :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onrepeat = attribute "onrepeat" " onrepeat=\""+{-# INLINE onrepeat #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onresize@ attribute.+--+onresize :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onresize = attribute "onresize" " onresize=\""+{-# INLINE onresize #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onscroll@ attribute.+--+onscroll :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onscroll = attribute "onscroll" " onscroll=\""+{-# INLINE onscroll #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onunload@ attribute.+--+onunload :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onunload = attribute "onunload" " onunload=\""+{-# INLINE onunload #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @onzoom@ attribute.+--+onzoom :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+onzoom = attribute "onzoom" " onzoom=\""+{-# INLINE onzoom #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @opacity@ attribute.+--+opacity :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+opacity = attribute "opacity" " opacity=\""+{-# INLINE opacity #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @operator@ attribute.+--+operator :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+operator = attribute "operator" " operator=\""+{-# INLINE operator #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @order@ attribute.+--+order :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+order = attribute "order" " order=\""+{-# INLINE order #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @orient@ attribute.+--+orient :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+orient = attribute "orient" " orient=\""+{-# INLINE orient #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @orientation@ attribute.+--+orientation :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+orientation = attribute "orientation" " orientation=\""+{-# INLINE orientation #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @origin@ attribute.+--+origin :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+origin = attribute "origin" " origin=\""+{-# INLINE origin #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @overflow@ attribute.+--+overflow :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+overflow = attribute "overflow" " overflow=\""+{-# INLINE overflow #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @overline-position@ attribute.+--+overlinePosition :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+overlinePosition = attribute "overline-position" " overline-position=\""+{-# INLINE overlinePosition #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @overline-thickness@ attribute.+--+overlineThickness :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+overlineThickness = attribute "overline-thickness" " overline-thickness=\""+{-# INLINE overlineThickness #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @panose-1@ attribute.+--+panose1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+panose1 = attribute "panose-1" " panose-1=\""+{-# INLINE panose1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @path@ attribute.+--+path :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+path = attribute "path" " path=\""+{-# INLINE path #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @pathLength@ attribute.+--+pathlength :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+pathlength = attribute "pathLength" " pathLength=\""+{-# INLINE pathlength #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @patternContentUnits@ attribute.+--+patterncontentunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+patterncontentunits = attribute "patternContentUnits" " patternContentUnits=\""+{-# INLINE patterncontentunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @patternTransform@ attribute.+--+patterntransform :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+patterntransform = attribute "patternTransform" " patternTransform=\""+{-# INLINE patterntransform #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @patternUnits@ attribute.+--+patternunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+patternunits = attribute "patternUnits" " patternUnits=\""+{-# INLINE patternunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @pointer-events@ attribute.+--+pointerEvents :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+pointerEvents = attribute "pointer-events" " pointer-events=\""+{-# INLINE pointerEvents #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @points@ attribute.+--+points :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+points = attribute "points" " points=\""+{-# INLINE points #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @pointsAtX@ attribute.+--+pointsatx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+pointsatx = attribute "pointsAtX" " pointsAtX=\""+{-# INLINE pointsatx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @pointsAtY@ attribute.+--+pointsaty :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+pointsaty = attribute "pointsAtY" " pointsAtY=\""+{-# INLINE pointsaty #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @pointsAtZ@ attribute.+--+pointsatz :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+pointsatz = attribute "pointsAtZ" " pointsAtZ=\""+{-# INLINE pointsatz #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @preserveAlpha@ attribute.+--+preservealpha :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+preservealpha = attribute "preserveAlpha" " preserveAlpha=\""+{-# INLINE preservealpha #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @preserveAspectRatio@ attribute.+--+preserveaspectratio :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+preserveaspectratio = attribute "preserveAspectRatio" " preserveAspectRatio=\""+{-# INLINE preserveaspectratio #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @primitiveUnits@ attribute.+--+primitiveunits :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+primitiveunits = attribute "primitiveUnits" " primitiveUnits=\""+{-# INLINE primitiveunits #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @r@ attribute.+--+r :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+r = attribute "r" " r=\""+{-# INLINE r #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @radius@ attribute.+--+radius :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+radius = attribute "radius" " radius=\""+{-# INLINE radius #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @refX@ attribute.+--+refx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+refx = attribute "refX" " refX=\""+{-# INLINE refx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @refY@ attribute.+--+refy :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+refy = attribute "refY" " refY=\""+{-# INLINE refy #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @rendering-intent@ attribute.+--+renderingIntent :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+renderingIntent = attribute "rendering-intent" " rendering-intent=\""+{-# INLINE renderingIntent #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @repeatCount@ attribute.+--+repeatcount :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+repeatcount = attribute "repeatCount" " repeatCount=\""+{-# INLINE repeatcount #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @repeatDur@ attribute.+--+repeatdur :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+repeatdur = attribute "repeatDur" " repeatDur=\""+{-# INLINE repeatdur #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @requiredExtensions@ attribute.+--+requiredextensions :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+requiredextensions = attribute "requiredExtensions" " requiredExtensions=\""+{-# INLINE requiredextensions #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @requiredFeatures@ attribute.+--+requiredfeatures :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+requiredfeatures = attribute "requiredFeatures" " requiredFeatures=\""+{-# INLINE requiredfeatures #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @restart@ attribute.+--+restart :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+restart = attribute "restart" " restart=\""+{-# INLINE restart #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @result@ attribute.+--+result :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+result = attribute "result" " result=\""+{-# INLINE result #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @rotate@ attribute.+--+rotate :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+rotate = attribute "rotate" " rotate=\""+{-# INLINE rotate #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @rx@ attribute.+--+rx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+rx = attribute "rx" " rx=\""+{-# INLINE rx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @ry@ attribute.+--+ry :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+ry = attribute "ry" " ry=\""+{-# INLINE ry #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @scale@ attribute.+--+scale :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+scale = attribute "scale" " scale=\""+{-# INLINE scale #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @seed@ attribute.+--+seed :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+seed = attribute "seed" " seed=\""+{-# INLINE seed #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @shape-rendering@ attribute.+--+shapeRendering :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+shapeRendering = attribute "shape-rendering" " shape-rendering=\""+{-# INLINE shapeRendering #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @slope@ attribute.+--+slope :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+slope = attribute "slope" " slope=\""+{-# INLINE slope #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @spacing@ attribute.+--+spacing :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+spacing = attribute "spacing" " spacing=\""+{-# INLINE spacing #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @specularConstant@ attribute.+--+specularconstant :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+specularconstant = attribute "specularConstant" " specularConstant=\""+{-# INLINE specularconstant #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @specularExponent@ attribute.+--+specularexponent :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+specularexponent = attribute "specularExponent" " specularExponent=\""+{-# INLINE specularexponent #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @spreadMethod@ attribute.+--+spreadmethod :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+spreadmethod = attribute "spreadMethod" " spreadMethod=\""+{-# INLINE spreadmethod #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @startOffset@ attribute.+--+startoffset :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+startoffset = attribute "startOffset" " startOffset=\""+{-# INLINE startoffset #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stdDeviation@ attribute.+--+stddeviation :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stddeviation = attribute "stdDeviation" " stdDeviation=\""+{-# INLINE stddeviation #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stemh@ attribute.+--+stemh :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stemh = attribute "stemh" " stemh=\""+{-# INLINE stemh #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stemv@ attribute.+--+stemv :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stemv = attribute "stemv" " stemv=\""+{-# INLINE stemv #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stitchTiles@ attribute.+--+stitchtiles :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stitchtiles = attribute "stitchTiles" " stitchTiles=\""+{-# INLINE stitchtiles #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stop-color@ attribute.+--+stopColor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stopColor = attribute "stop-color" " stop-color=\""+{-# INLINE stopColor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stop-opacity@ attribute.+--+stopOpacity :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stopOpacity = attribute "stop-opacity" " stop-opacity=\""+{-# INLINE stopOpacity #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @strikethrough-position@ attribute.+--+strikethroughPosition :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strikethroughPosition = attribute "strikethrough-position" " strikethrough-position=\""+{-# INLINE strikethroughPosition #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @strikethrough-thickness@ attribute.+--+strikethroughThickness :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strikethroughThickness = attribute "strikethrough-thickness" " strikethrough-thickness=\""+{-# INLINE strikethroughThickness #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @string@ attribute.+--+string :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+string = attribute "string" " string=\""+{-# INLINE string #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke@ attribute.+--+stroke :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+stroke = attribute "stroke" " stroke=\""+{-# INLINE stroke #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-dasharray@ attribute.+--+strokeDasharray :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeDasharray = attribute "stroke-dasharray" " stroke-dasharray=\""+{-# INLINE strokeDasharray #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-dashoffset@ attribute.+--+strokeDashoffset :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeDashoffset = attribute "stroke-dashoffset" " stroke-dashoffset=\""+{-# INLINE strokeDashoffset #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-linecap@ attribute.+--+strokeLinecap :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeLinecap = attribute "stroke-linecap" " stroke-linecap=\""+{-# INLINE strokeLinecap #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-linejoin@ attribute.+--+strokeLinejoin :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeLinejoin = attribute "stroke-linejoin" " stroke-linejoin=\""+{-# INLINE strokeLinejoin #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-miterlimit@ attribute.+--+strokeMiterlimit :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeMiterlimit = attribute "stroke-miterlimit" " stroke-miterlimit=\""+{-# INLINE strokeMiterlimit #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-opacity@ attribute.+--+strokeOpacity :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeOpacity = attribute "stroke-opacity" " stroke-opacity=\""+{-# INLINE strokeOpacity #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @stroke-width@ attribute.+--+strokeWidth :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+strokeWidth = attribute "stroke-width" " stroke-width=\""+{-# INLINE strokeWidth #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @style@ attribute.+--+style :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+style = attribute "style" " style=\""+{-# INLINE style #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @surfaceScale@ attribute.+--+surfacescale :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+surfacescale = attribute "surfaceScale" " surfaceScale=\""+{-# INLINE surfacescale #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @systemLanguage@ attribute.+--+systemlanguage :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+systemlanguage = attribute "systemLanguage" " systemLanguage=\""+{-# INLINE systemlanguage #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @tableValues@ attribute.+--+tablevalues :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+tablevalues = attribute "tableValues" " tableValues=\""+{-# INLINE tablevalues #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @target@ attribute.+--+target :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+target = attribute "target" " target=\""+{-# INLINE target #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @targetX@ attribute.+--+targetx :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+targetx = attribute "targetX" " targetX=\""+{-# INLINE targetx #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @targetY@ attribute.+--+targety :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+targety = attribute "targetY" " targetY=\""+{-# INLINE targety #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @text-anchor@ attribute.+--+textAnchor :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+textAnchor = attribute "text-anchor" " text-anchor=\""+{-# INLINE textAnchor #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @text-decoration@ attribute.+--+textDecoration :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+textDecoration = attribute "text-decoration" " text-decoration=\""+{-# INLINE textDecoration #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @text-rendering@ attribute.+--+textRendering :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+textRendering = attribute "text-rendering" " text-rendering=\""+{-# INLINE textRendering #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @textLength@ attribute.+--+textlength :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+textlength = attribute "textLength" " textLength=\""+{-# INLINE textlength #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @title@ attribute.+--+title :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+title = attribute "title" " title=\""+{-# INLINE title #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @to@ attribute.+--+to :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+to = attribute "to" " to=\""+{-# INLINE to #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @transform@ attribute.+--+transform :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+transform = attribute "transform" " transform=\""+{-# INLINE transform #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @type@ attribute.+--+type_ :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+type_ = attribute "type" " type=\""+{-# INLINE type_ #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @u1@ attribute.+--+u1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+u1 = attribute "u1" " u1=\""+{-# INLINE u1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @u2@ attribute.+--+u2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+u2 = attribute "u2" " u2=\""+{-# INLINE u2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @underline-position@ attribute.+--+underlinePosition :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+underlinePosition = attribute "underline-position" " underline-position=\""+{-# INLINE underlinePosition #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @underline-thickness@ attribute.+--+underlineThickness :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+underlineThickness = attribute "underline-thickness" " underline-thickness=\""+{-# INLINE underlineThickness #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @unicode@ attribute.+--+unicode :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+unicode = attribute "unicode" " unicode=\""+{-# INLINE unicode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @unicode-bidi@ attribute.+--+unicodeBidi :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+unicodeBidi = attribute "unicode-bidi" " unicode-bidi=\""+{-# INLINE unicodeBidi #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @unicode-range@ attribute.+--+unicodeRange :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+unicodeRange = attribute "unicode-range" " unicode-range=\""+{-# INLINE unicodeRange #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @units-per-em@ attribute.+--+unitsPerEm :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+unitsPerEm = attribute "units-per-em" " units-per-em=\""+{-# INLINE unitsPerEm #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @v-alphabetic@ attribute.+--+vAlphabetic :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vAlphabetic = attribute "v-alphabetic" " v-alphabetic=\""+{-# INLINE vAlphabetic #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @v-hanging@ attribute.+--+vHanging :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vHanging = attribute "v-hanging" " v-hanging=\""+{-# INLINE vHanging #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @v-ideographic@ attribute.+--+vIdeographic :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vIdeographic = attribute "v-ideographic" " v-ideographic=\""+{-# INLINE vIdeographic #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @v-mathematical@ attribute.+--+vMathematical :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vMathematical = attribute "v-mathematical" " v-mathematical=\""+{-# INLINE vMathematical #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @values@ attribute.+--+values :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+values = attribute "values" " values=\""+{-# INLINE values #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @version@ attribute.+--+version :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+version = attribute "version" " version=\""+{-# INLINE version #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @vert-adv-y@ attribute.+--+vertAdvY :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vertAdvY = attribute "vert-adv-y" " vert-adv-y=\""+{-# INLINE vertAdvY #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @vert-origin-x@ attribute.+--+vertOriginX :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vertOriginX = attribute "vert-origin-x" " vert-origin-x=\""+{-# INLINE vertOriginX #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @vert-origin-y@ attribute.+--+vertOriginY :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+vertOriginY = attribute "vert-origin-y" " vert-origin-y=\""+{-# INLINE vertOriginY #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @viewBox@ attribute.+--+viewbox :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+viewbox = attribute "viewBox" " viewBox=\""+{-# INLINE viewbox #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @viewTarget@ attribute.+--+viewtarget :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+viewtarget = attribute "viewTarget" " viewTarget=\""+{-# INLINE viewtarget #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @visibility@ attribute.+--+visibility :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+visibility = attribute "visibility" " visibility=\""+{-# INLINE visibility #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @width@ attribute.+--+width :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+width = attribute "width" " width=\""+{-# INLINE width #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @widths@ attribute.+--+widths :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+widths = attribute "widths" " widths=\""+{-# INLINE widths #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @word-spacing@ attribute.+--+wordSpacing :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+wordSpacing = attribute "word-spacing" " word-spacing=\""+{-# INLINE wordSpacing #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @writing-mode@ attribute.+--+writingMode :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+writingMode = attribute "writing-mode" " writing-mode=\""+{-# INLINE writingMode #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @x@ attribute.+--+x :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+x = attribute "x" " x=\""+{-# INLINE x #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @x-height@ attribute.+--+xHeight :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xHeight = attribute "x-height" " x-height=\""+{-# INLINE xHeight #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @x1@ attribute.+--+x1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+x1 = attribute "x1" " x1=\""+{-# INLINE x1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @x2@ attribute.+--+x2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+x2 = attribute "x2" " x2=\""+{-# INLINE x2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xChannelSelector@ attribute.+--+xchannelselector :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xchannelselector = attribute "xChannelSelector" " xChannelSelector=\""+{-# INLINE xchannelselector #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:actuate@ attribute.+--+xlinkActuate :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkActuate = attribute "xlink:actuate" " xlink:actuate=\""+{-# INLINE xlinkActuate #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:arcrole@ attribute.+--+xlinkArcrole :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkArcrole = attribute "xlink:arcrole" " xlink:arcrole=\""+{-# INLINE xlinkArcrole #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:href@ attribute.+--+xlinkHref :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkHref = attribute "xlink:href" " xlink:href=\""+{-# INLINE xlinkHref #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:role@ attribute.+--+xlinkRole :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkRole = attribute "xlink:role" " xlink:role=\""+{-# INLINE xlinkRole #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:show@ attribute.+--+xlinkShow :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkShow = attribute "xlink:show" " xlink:show=\""+{-# INLINE xlinkShow #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:title@ attribute.+--+xlinkTitle :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkTitle = attribute "xlink:title" " xlink:title=\""+{-# INLINE xlinkTitle #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xlink:type@ attribute.+--+xlinkType :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xlinkType = attribute "xlink:type" " xlink:type=\""+{-# INLINE xlinkType #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xml:base@ attribute.+--+xmlBase :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xmlBase = attribute "xml:base" " xml:base=\""+{-# INLINE xmlBase #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xml:lang@ attribute.+--+xmlLang :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xmlLang = attribute "xml:lang" " xml:lang=\""+{-# INLINE xmlLang #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @xml:space@ attribute.+--+xmlSpace :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+xmlSpace = attribute "xml:space" " xml:space=\""+{-# INLINE xmlSpace #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @y@ attribute.+--+y :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+y = attribute "y" " y=\""+{-# INLINE y #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @y1@ attribute.+--+y1 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+y1 = attribute "y1" " y1=\""+{-# INLINE y1 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @y2@ attribute.+--+y2 :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+y2 = attribute "y2" " y2=\""+{-# INLINE y2 #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @yChannelSelector@ attribute.+--+ychannelselector :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+ychannelselector = attribute "yChannelSelector" " yChannelSelector=\""+{-# INLINE ychannelselector #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @z@ attribute.+--+z :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+z = attribute "z" " z=\""+{-# INLINE z #-}++-- WARNING: The next block of code was automatically generated by+-- Util/GenerateSvgCombinators.hs:222+--+-- | Combinator for the @zoomAndPan@ attribute.+--+zoomandpan :: AttributeValue -- ^ Attribute value.+ -> Attribute -- ^ Resulting attribute.+zoomandpan = attribute "zoomAndPan" " zoomAndPan=\""+{-# INLINE zoomandpan #-}
+ Util/GenerateSvgCombinators.hs view
@@ -0,0 +1,329 @@+{-# LANGUAGE CPP #-}++#define DO_NOT_EDIT (doNotEdit __FILE__ __LINE__)++-- | Generates code for SVG tags.+--+module Util.GenerateSvgCombinators where++import Control.Arrow ((&&&))+import Data.List (sort, sortBy, intersperse, intercalate)+import Data.Ord (comparing)+import System.Directory (createDirectoryIfMissing)+import System.FilePath ((</>), (<.>))+import Data.Map (Map)+import qualified Data.Map as M+import Data.Char (toLower)+import qualified Data.Set as S++import Util.Sanitize (sanitize, prelude)++-- | Datatype for an SVG variant.+--+data SvgVariant = SvgVariant+ { version :: [String]+ , docType :: [String]+ , parents :: [String]+ , leafs :: [String]+ , attributes :: [String]+ , selfClosing :: Bool+ } deriving (Eq)++instance Show SvgVariant where+ show = map toLower . intercalate "-" . version++-- | Get the full module name for an SVG variant.+--+getModuleName :: SvgVariant -> String+getModuleName = ("Text.Blaze." ++) . intercalate "." . version++-- | Get the attribute module name for an SVG variant.+--+getAttributeModuleName :: SvgVariant -> String+getAttributeModuleName = (++ ".Attributes") . getModuleName++-- | Check if a given name causes a name clash.+--+isNameClash :: SvgVariant -> String -> Bool+isNameClash v t+ -- Both an element and an attribute+ | (t `elem` parents v || t `elem` leafs v) && t `elem` attributes v = True+ -- Already a prelude function+ | sanitize t `S.member` prelude = True+ | otherwise = False++-- | Write an SVG variant.+--+writeSvgVariant :: SvgVariant -> IO ()+writeSvgVariant svgVariant = do+ -- Make a directory.+ createDirectoryIfMissing True basePath++ let tags = zip parents' (repeat makeParent)+ ++ zip leafs' (repeat (makeLeaf $ selfClosing svgVariant))+ sortedTags = sortBy (comparing fst) tags+ appliedTags = map (\(x, f) -> f x) sortedTags++ -- Write the main module.+ writeFile' (basePath <.> "hs") $ removeTrailingNewlines $ unlines+ [ DO_NOT_EDIT+ , "{-# LANGUAGE OverloadedStrings #-}"+ , "-- | This module exports SVG combinators used to create documents."+ , "--"+ , exportList modulName $ "module Text.Blaze"+ : "module Text.Blaze.Svg"+ : "docType"+ : "docTypeSvg"+ : map (sanitize . fst) sortedTags+ , DO_NOT_EDIT+ , "import Prelude ((>>), (.), ($))"+ , ""+ , "import Text.Blaze"+ , "import Text.Blaze.Svg"+ , "import Text.Blaze.Internal"+ , ""+ , makeDocType $ docType svgVariant+ , makeDocTypeSvg $ docType svgVariant+ , unlines appliedTags+ ]++ let sortedAttributes = sort attributes'++ -- Write the attribute module.+ writeFile' (basePath </> "Attributes.hs") $ removeTrailingNewlines $ unlines+ [ DO_NOT_EDIT+ , "-- | This module exports combinators that provide you with the"+ , "-- ability to set attributes on SVG elements."+ , "--"+ , "{-# LANGUAGE OverloadedStrings #-}"+ , exportList attributeModuleName $ map sanitize sortedAttributes+ , DO_NOT_EDIT+ , "import Prelude ()"+ , ""+ , "import Text.Blaze.Internal (Attribute, AttributeValue, attribute)"+ , ""+ , unlines (map makeAttribute sortedAttributes)+ ]+ where+ basePath = "Text" </> "Blaze" </> foldl1 (</>) version'+ modulName = getModuleName svgVariant+ attributeModuleName = getAttributeModuleName svgVariant+ attributes' = attributes svgVariant+ parents' = parents svgVariant+ leafs' = leafs svgVariant+ version' = version svgVariant+ removeTrailingNewlines = reverse . drop 2 . reverse+ writeFile' file content = do+ putStrLn ("Generating " ++ file)+ writeFile file content++-- | Create a string, consisting of @x@ spaces, where @x@ is the length of the+-- argument.+--+spaces :: String -> String+spaces = flip replicate ' ' . length++-- | Join blocks of code with a newline in between.+--+unblocks :: [String] -> String+unblocks = unlines . intersperse "\n"++-- | A warning to not edit the generated code.+--+doNotEdit :: FilePath -> Int -> String+doNotEdit fileName lineNumber = init $ unlines+ [ "-- WARNING: The next block of code was automatically generated by"+ , "-- " ++ fileName ++ ":" ++ show lineNumber+ , "--"+ ]++-- | Generate an export list for a Haskell module.+--+exportList :: String -- ^ Module name.+ -> [String] -- ^ List of functions.+ -> String -- ^ Resulting string.+exportList _ [] = error "exportList without functions."+exportList name (f:functions) = unlines $+ [ "module " ++ name+ , " ( " ++ f+ ] +++ map (" , " ++) functions +++ [ " ) where"]++-- | Generate a function for a doctype.+--+makeDocType :: [String] -> String+makeDocType lines' = unlines+ [ DO_NOT_EDIT+ , "-- | Combinator for the document type. This should be placed at the top"+ , "-- of every SVG page."+ , "--"+ , unlines (map ("-- > " ++) lines') ++ "--"+ , "docType :: Svg -- ^ The document type SVG."+ , "docType = preEscapedText " ++ show (unlines lines')+ , "{-# INLINE docType #-}"+ ]++-- | Generate a function for the SVG tag (including the doctype).+--+makeDocTypeSvg :: [String] -- ^ The doctype.+ -> String -- ^ Resulting combinator function.+makeDocTypeSvg lines' = unlines+ [ DO_NOT_EDIT+ , "-- | Combinator for the @\\<svg>@ element. This combinator will also"+ , "-- insert the correct doctype."+ , "--"+ , unlines (map ("-- > " ++) lines') ++ "-- > <svg><span>foo</span></svg>"+ , "--"+ , "docTypeSvg :: Svg -- ^ Inner SVG."+ , " -> Svg -- ^ Resulting SVG."+ , "docTypeSvg inner = docType >> (svg ! attribute \"xmlns\" \" xmlns=\\\"\" \"http://www.w3.org/2000/svg\" ! attribute \"xmlns:xlink\" \" xmlns:xlink=\\\"\" \"http://www.w3.org/1999/xlink\" $ inner)"+ , "{-# INLINE docTypeSvg #-}"+ ]++-- | Generate a function for an SVG tag that can be a parent.+--+makeParent :: String -> String+makeParent tag = unlines+ [ DO_NOT_EDIT+ , "-- | Combinator for the @\\<" ++ tag ++ ">@ element."+ , "--"+ , function ++ " :: Svg -- ^ Inner SVG."+ , spaces function ++ " -> Svg -- ^ Resulting SVG."+ , function ++ " = Parent \"" ++ tag ++ "\" \"<" ++ tag+ ++ "\" \"</" ++ tag ++ ">\"" ++ modifier+ , "{-# INLINE " ++ function ++ " #-}"+ ]+ where+ function = sanitize tag+ modifier = if tag `elem` ["style", "script"] then " . external" else ""++-- | Generate a function for an SVG tag that must be a leaf.+--+makeLeaf :: Bool -- ^ Make leaf tags self-closing+ -> String -- ^ Tag for the combinator+ -> String -- ^ Combinator code+makeLeaf closing tag = unlines+ [ DO_NOT_EDIT+ , "-- | Combinator for the @\\<" ++ tag ++ " />@ element."+ , "--"+ , function ++ " :: Svg -- ^ Resulting SVG."+ , function ++ " = Leaf \"" ++ tag ++ "\" \"<" ++ tag ++ "\" " ++ "\""+ ++ (if closing then " /" else "") ++ ">\""+ , "{-# INLINE " ++ function ++ " #-}"+ ]+ where+ function = sanitize tag++-- | Generate a function for an SVG attribute.+--+makeAttribute :: String -> String+makeAttribute name = unlines+ [ DO_NOT_EDIT+ , "-- | Combinator for the @" ++ name ++ "@ attribute."+ , "--"+ , function ++ " :: AttributeValue -- ^ Attribute value."+ , spaces function ++ " -> Attribute -- ^ Resulting attribute."+ , function ++ " = attribute \"" ++ name ++ "\" \" "+ ++ name ++ "=\\\"\""+ , "{-# INLINE " ++ function ++ " #-}"+ ]+ where+ function = sanitize name++-- | SVG 1.1+-- Reference: https://developer.mozilla.org/en/SVG+--+svg11 :: SvgVariant+svg11 = SvgVariant+ { version = ["Svg11"]+ , docType =+ [ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ , "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\""+ , " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">"+ ]+ , parents =+ [ "a","defs","glyph","g","marker","mask","missing-glyph","pattern", "svg"+ , "switch", "symbol"+ ]+ , leafs =+ [ "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor"+ , "animateMotion", "animateTransform", "circle", "clipPath"+ , "color-profile" , "cursor", "desc", "ellipse", "feBlend"+ , "feColorMatrix", "feComponentTransfer" , "feComposite"+ , "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap"+ , "feDistantLight", "feFlood", "feFuncA", "feFuncB" , "feFuncG"+ , "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode"+ , "feMorphology", "feOffset", "fePointLight", "feSpecularLighting"+ , "feSpotLight" , "feTile", "feTurbulence", "filter", "font"+ , "font-face", "font-face-format" , "font-face-name", "font-face-src"+ , "font-face-uri", "foreignObject" , "glyphRef", "hkern", "image"+ , "line", "linearGradient" , "metadata", "mpath", "path"+ , "polygon" , "polyline", "radialGradient", "rect", "script", "set"+ , "stop", "style" , "text", "textPath", "title", "tref", "tspan", "use"+ , "view", "vkern"+ ]+ , attributes =+ [ "accent-height", "accumulate", "additive", "alphabetic", "amplitude"+ , "arabic-form", "ascent", "attributeName", "attributeType", "azimuth"+ , "baseFrequency", "baseProfile", "bbox", "begin", "bias", "by", "calcMode"+ , "cap-height", "class", "clipPathUnits", "contentScriptType"+ , "contentStyleType", "cx", "cy", "d", "descent", "diffuseConstant", "divisor"+ , "dur", "dx", "dy", "edgeMode", "elevation", "end", "exponent"+ , "externalResourcesRequired", "fill", "filterRes", "filterUnits", "font-family"+ , "font-size", "font-stretch", "font-style", "font-variant", "font-weight"+ , "format", "from", "fx", "fy", "g1", "g2", "glyph-name", "glyphRef"+ , "gradientTransform", "gradientUnits", "hanging", "height", "horiz-adv-x"+ , "horiz-origin-x", "horiz-origin-y", "id", "ideographic", "in", "in2"+ , "intercept", "k", "k1", "k2", "k3", "k4", "kernelMatrix", "kernelUnitLength"+ , "keyPoints", "keySplines", "keyTimes", "lang", "lengthAdjust"+ , "limitingConeAngle", "local", "markerHeight", "markerUnits", "markerWidth"+ , "maskContentUnits", "maskUnits", "mathematical", "max", "media", "method"+ , "min", "mode", "name", "numOctaves", "offset", "onabort", "onactivate"+ , "onbegin", "onclick", "onend", "onerror", "onfocusin", "onfocusout", "onload"+ , "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup"+ , "onrepeat", "onresize", "onscroll", "onunload", "onzoom", "operator", "order"+ , "orient", "orientation", "origin", "overline-position", "overline-thickness"+ , "panose-1", "path", "pathLength", "patternContentUnits", "patternTransform"+ , "patternUnits", "points", "pointsAtX", "pointsAtY", "pointsAtZ"+ , "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "r", "radius"+ , "refX", "refY", "rendering-intent", "repeatCount", "repeatDur"+ , "requiredExtensions", "requiredFeatures", "restart", "result", "rotate", "rx"+ , "ry", "scale", "seed", "slope", "spacing", "specularConstant"+ , "specularExponent", "spreadMethod", "startOffset", "stdDeviation", "stemh"+ , "stemv", "stitchTiles", "strikethrough-position", "strikethrough-thickness"+ , "string", "style", "surfaceScale", "systemLanguage", "tableValues", "target"+ , "targetX", "targetY", "textLength", "title", "to", "transform", "type", "u1"+ , "u2", "underline-position", "underline-thickness", "unicode", "unicode-range"+ , "units-per-em", "v-alphabetic", "v-hanging", "v-ideographic", "v-mathematical"+ , "values", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "viewBox"+ , "viewTarget", "width", "widths", "x", "x-height", "x1", "x2"+ , "xChannelSelector", "xlink:actuate", "xlink:arcrole", "xlink:href"+ , "xlink:role", "xlink:show", "xlink:title", "xlink:type", "xml:base"+ , "xml:lang", "xml:space", "y", "y1", "y2", "yChannelSelector", "z", "zoomAndPan"+ -- Presentation Attributes+ , "alignment-baseline", "baseline-shift", "clip-path", "clip-rule"+ , "clip", "color-interpolation-filters", "color-interpolation"+ , "color-profile", "color-rendering", "color", "cursor", "direction"+ , "display", "dominant-baseline", "enable-background", "fill-opacity"+ , "fill-rule", "filter", "flood-color", "flood-opacity"+ , "font-size-adjust", "glyph-orientation-horizontal"+ , "glyph-orientation-vertical", "image-rendering", "kerning", "letter-spacing"+ , "lighting-color", "marker-end", "marker-mid", "marker-start", "mask"+ , "opacity", "overflow", "pointer-events", "shape-rendering", "stop-color"+ , "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap"+ , "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width"+ , "stroke", "text-anchor", "text-decoration", "text-rendering", "unicode-bidi"+ , "visibility", "word-spacing", "writing-mode"+ ]+ , selfClosing = True+ }++-- | A map of SVG variants, per version, lowercase.+--+svgVariants :: Map String SvgVariant+svgVariants = M.fromList $ map (show &&& id)+ [ svg11 ]++main :: IO ()+main = mapM_ (writeSvgVariant . snd) $ M.toList svgVariants
+ Util/Sanitize.hs view
@@ -0,0 +1,78 @@+-- | A program to sanitize an HTML tag to a Haskell function.+--+module Util.Sanitize+ ( sanitize+ , keywords+ , prelude+ ) where++import Data.Char (toLower, toUpper)+import Data.Set (Set)+import qualified Data.Set as S++-- | Sanitize a tag. This function returns a name that can be used as+-- combinator in haskell source code.+--+-- Examples:+--+-- > sanitize "class" == "class_"+-- > sanitize "http-equiv" == "httpEquiv"+--+sanitize :: String -> String+sanitize = appendUnderscore . removeDashOrColon . map toLower+ where+ -- Remove a dash, replacing it by camelcase notation+ --+ -- Example:+ --+ -- > removeDashOrColon "foo-bar" == "fooBar"+ --+ removeDashOrColon ('-' : x : xs) = toUpper x : removeDashOrColon xs+ removeDashOrColon (':' : x : xs) = toUpper x : removeDashOrColon xs+ removeDashOrColon (x : xs) = x : removeDashOrColon xs+ removeDashOrColon [] = []++ appendUnderscore t | t `S.member` keywords = t ++ "_"+ | t `S.member` prelude = t ++ "_"+ | otherwise = t++-- | A set of standard Haskell keywords, which cannot be used as combinators.+--+keywords :: Set String+keywords = S.fromList+ [ "case", "class", "data", "default", "deriving", "do", "else", "if"+ , "import", "in", "infix", "infixl", "infixr", "instance" , "let", "module"+ , "newtype", "of", "then", "type", "where"+ ]++-- | Set of functions from the Prelude, which we do not use as combinators.+--+prelude :: Set String+prelude = S.fromList+ [ "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf"+ , "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling"+ , "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle"+ , "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem"+ , "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo"+ , "error", "even", "exp", "exponent", "fail", "filter", "flip"+ , "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl"+ , "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral"+ , "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head"+ , "id", "init", "interact", "ioError", "isDenormalized", "isIEEE"+ , "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm"+ , "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM"+ , "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound"+ , "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or"+ , "otherwise", "pi", "pred", "print", "product", "properFraction", "putChar"+ , "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO"+ , "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac"+ , "recip", "rem", "repeat", "replicate", "return", "reverse", "round"+ , "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence"+ , "sequence_", "show", "showChar", "showList", "showParen", "showString"+ , "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd"+ , "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take"+ , "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational"+ , "truncate", "text", "uncurry", "undefined", "unlines", "until", "unwords", "unzip"+ , "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith"+ , "zipWith3"+ ]
+ blaze-svg.cabal view
@@ -0,0 +1,35 @@+name: blaze-svg+version: 0.1.0.0+synopsis: SVG combinator library+description: SVG combinator library+homepage: https://github.com/deepakjois/blaze-svg+license: BSD3+license-file: LICENSE+author: Deepak Jois+maintainer: deepak.jois@gmail.com+category: Graphics+build-type: Simple+cabal-version: >=1.6++Extra-source-files:+ Util/Sanitize.hs+ Util/GenerateSvgCombinators.hs++Library+ Ghc-Options: -Wall++ Exposed-modules:+ Text.Blaze.Svg+ Text.Blaze.Svg.Internal+ Text.Blaze.Svg11+ Text.Blaze.Svg11.Attributes++ Build-depends:+ base >= 4 && < 5,+ mtl >= 2 && < 3,+ blaze-html >= 0.4 && < 0.5,+ bytestring >= 0.9++Source-repository head+ Type: git+ Location: http://github.com/deepakjois/blaze-svg.git