module Text.Blaze.Svg.Internal where
import Control.Monad.State
import Data.Monoid (mappend, mempty)
import Text.Blaze
type Svg = Markup
toSvg :: ToMarkup a => a -> Svg
toSvg :: forall a. ToMarkup a => a -> Svg
toSvg = a -> Svg
forall a. ToMarkup a => a -> Svg
toMarkup
type Path = State AttributeValue ()
mkPath :: Path -> AttributeValue
mkPath :: Path -> AttributeValue
mkPath Path
path = ((), AttributeValue) -> AttributeValue
forall a b. (a, b) -> b
snd (((), AttributeValue) -> AttributeValue)
-> ((), AttributeValue) -> AttributeValue
forall a b. (a -> b) -> a -> b
$ Path -> AttributeValue -> ((), AttributeValue)
forall s a. State s a -> s -> (a, s)
runState Path
path AttributeValue
forall a. Monoid a => a
mempty
appendToPath :: [String] -> Path
appendToPath :: [String] -> Path
appendToPath = (AttributeValue -> AttributeValue) -> Path
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((AttributeValue -> AttributeValue) -> Path)
-> ([String] -> AttributeValue -> AttributeValue)
-> [String]
-> Path
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AttributeValue -> AttributeValue -> AttributeValue)
-> AttributeValue -> AttributeValue -> AttributeValue
forall a b c. (a -> b -> c) -> b -> a -> c
flip AttributeValue -> AttributeValue -> AttributeValue
forall a. Monoid a => a -> a -> a
mappend (AttributeValue -> AttributeValue -> AttributeValue)
-> ([String] -> AttributeValue)
-> [String]
-> AttributeValue
-> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join
m :: Show a => a -> a -> Path
m :: forall a. Show a => a -> a -> Path
m a
x a
y = [String] -> Path
appendToPath
[ String
"M "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
mr :: Show a => a -> a -> Path
mr :: forall a. Show a => a -> a -> Path
mr a
dx a
dy = [String] -> Path
appendToPath
[ String
"m "
, a -> String
forall a. Show a => a -> String
show a
dx, String
",", a -> String
forall a. Show a => a -> String
show a
dy
, String
" "
]
z :: Path
z :: Path
z = (AttributeValue -> AttributeValue) -> Path
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (AttributeValue -> AttributeValue -> AttributeValue
forall a. Monoid a => a -> a -> a
`mappend` String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue String
"Z")
l :: Show a => a -> a -> Path
l :: forall a. Show a => a -> a -> Path
l a
x a
y = [String] -> Path
appendToPath
[ String
"L "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
lr :: Show a => a -> a -> Path
lr :: forall a. Show a => a -> a -> Path
lr a
dx a
dy = [String] -> Path
appendToPath
[ String
"l "
, a -> String
forall a. Show a => a -> String
show a
dx, String
",", a -> String
forall a. Show a => a -> String
show a
dy
, String
" "
]
h :: Show a => a -> Path
h :: forall a. Show a => a -> Path
h a
x = [String] -> Path
appendToPath
[ String
"H "
, a -> String
forall a. Show a => a -> String
show a
x
, String
" "
]
hr :: Show a => a -> Path
hr :: forall a. Show a => a -> Path
hr a
dx = [String] -> Path
appendToPath
[ String
"h "
, a -> String
forall a. Show a => a -> String
show a
dx
, String
" "
]
v :: Show a => a -> Path
v :: forall a. Show a => a -> Path
v a
y = [String] -> Path
appendToPath
[ String
"V "
, a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
vr :: Show a => a -> Path
vr :: forall a. Show a => a -> Path
vr a
dy = [String] -> Path
appendToPath
[ String
"v "
, a -> String
forall a. Show a => a -> String
show a
dy
, String
" "
]
c :: Show a => a -> a -> a -> a -> a -> a -> Path
c :: forall a. Show a => a -> a -> a -> a -> a -> a -> Path
c a
c1x a
c1y a
c2x a
c2y a
x a
y = [String] -> Path
appendToPath
[ String
"C "
, a -> String
forall a. Show a => a -> String
show a
c1x, String
",", a -> String
forall a. Show a => a -> String
show a
c1y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
c2x, String
",", a -> String
forall a. Show a => a -> String
show a
c2y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
" ", a -> String
forall a. Show a => a -> String
show a
y
]
cr :: Show a => a -> a -> a -> a -> a -> a -> Path
cr :: forall a. Show a => a -> a -> a -> a -> a -> a -> Path
cr a
dc1x a
dc1y a
dc2x a
dc2y a
dx a
dy = [String] -> Path
appendToPath
[ String
"c "
, a -> String
forall a. Show a => a -> String
show a
dc1x, String
",", a -> String
forall a. Show a => a -> String
show a
dc1y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
dc2x, String
",", a -> String
forall a. Show a => a -> String
show a
dc2y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
dx, String
" ", a -> String
forall a. Show a => a -> String
show a
dy
]
s :: Show a => a -> a -> a -> a -> Path
s :: forall a. Show a => a -> a -> a -> a -> Path
s a
c2x a
c2y a
x a
y = [String] -> Path
appendToPath
[ String
"S "
, a -> String
forall a. Show a => a -> String
show a
c2x, String
",", a -> String
forall a. Show a => a -> String
show a
c2y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
sr :: Show a => a -> a -> a -> a -> Path
sr :: forall a. Show a => a -> a -> a -> a -> Path
sr a
dc2x a
dc2y a
dx a
dy = [String] -> Path
appendToPath
[ String
"s "
, a -> String
forall a. Show a => a -> String
show a
dc2x, String
",", a -> String
forall a. Show a => a -> String
show a
dc2y
, String
" "
, a -> String
forall a. Show a => a -> String
show a
dx, String
",", a -> String
forall a. Show a => a -> String
show a
dy
, String
" "
]
q :: Show a => a -> a -> a -> a -> Path
q :: forall a. Show a => a -> a -> a -> a -> Path
q a
cx a
cy a
x a
y = [String] -> Path
appendToPath
[ String
"Q "
, a -> String
forall a. Show a => a -> String
show a
cx, String
",", a -> String
forall a. Show a => a -> String
show a
cy
, String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
qr :: Show a => a -> a -> a -> a -> Path
qr :: forall a. Show a => a -> a -> a -> a -> Path
qr a
dcx a
dcy a
dx a
dy = [String] -> Path
appendToPath
[ String
"q "
, a -> String
forall a. Show a => a -> String
show a
dcx, String
",", a -> String
forall a. Show a => a -> String
show a
dcy
, String
" "
, a -> String
forall a. Show a => a -> String
show a
dx, String
",", a -> String
forall a. Show a => a -> String
show a
dy
, String
" "
]
t :: Show a => a -> a -> Path
t :: forall a. Show a => a -> a -> Path
t a
x a
y = [String] -> Path
appendToPath
[ String
"T "
, String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
tr :: Show a => a -> a -> Path
tr :: forall a. Show a => a -> a -> Path
tr a
x a
y = [String] -> Path
appendToPath
[ String
"t "
, String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y
, String
" "
]
aa
:: Show a
=> a
-> a
-> a
-> Bool
-> Bool
-> a
-> a
-> Path
aa :: forall a. Show a => a -> a -> a -> Bool -> Bool -> a -> a -> Path
aa = a -> a -> a -> Bool -> Bool -> a -> a -> Path
forall a. Show a => a -> a -> a -> Bool -> Bool -> a -> a -> Path
a
a
:: Show a
=> a
-> a
-> a
-> Bool
-> Bool
-> a
-> a
-> Path
a :: forall a. Show a => a -> a -> a -> Bool -> Bool -> a -> a -> Path
a a
rx a
ry a
xAxisRotation Bool
largeArcFlag Bool
sweepFlag a
x a
y = [String] -> Path
appendToPath
[ String
"A "
, a -> String
forall a. Show a => a -> String
show a
rx, String
",", a -> String
forall a. Show a => a -> String
show a
ry, String
" "
, a -> String
forall a. Show a => a -> String
show a
xAxisRotation, String
" "
, if Bool
largeArcFlag then String
"1" else String
"0", String
",", if Bool
sweepFlag then String
"1" else String
"0", String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y, String
" "
]
ar
:: Show a
=> a
-> a
-> a
-> Bool
-> Bool
-> a
-> a
-> Path
ar :: forall a. Show a => a -> a -> a -> Bool -> Bool -> a -> a -> Path
ar a
rx a
ry a
xAxisRotation Bool
largeArcFlag Bool
sweepFlag a
x a
y = [String] -> Path
appendToPath
[ String
"a "
, a -> String
forall a. Show a => a -> String
show a
rx, String
",", a -> String
forall a. Show a => a -> String
show a
ry, String
" "
, a -> String
forall a. Show a => a -> String
show a
xAxisRotation, String
" "
, if Bool
largeArcFlag then String
"1" else String
"0", String
",", if Bool
sweepFlag then String
"1" else String
"0", String
" "
, a -> String
forall a. Show a => a -> String
show a
x, String
",", a -> String
forall a. Show a => a -> String
show a
y, String
" "
]
translate :: Show a => a -> a -> AttributeValue
translate :: forall a. Show a => a -> a -> AttributeValue
translate a
x a
y = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"translate("
, a -> String
forall a. Show a => a -> String
show a
x, String
" ", a -> String
forall a. Show a => a -> String
show a
y
, String
")"
]
scale :: Show a => a -> a -> AttributeValue
scale :: forall a. Show a => a -> a -> AttributeValue
scale a
x a
y = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"scale("
, a -> String
forall a. Show a => a -> String
show a
x, String
" ", a -> String
forall a. Show a => a -> String
show a
y
, String
")"
]
rotate :: Show a => a -> AttributeValue
rotate :: forall a. Show a => a -> AttributeValue
rotate a
rotateAngle = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"rotate("
, a -> String
forall a. Show a => a -> String
show a
rotateAngle
, String
")"
]
rotateAround :: Show a => a -> a -> a -> AttributeValue
rotateAround :: forall a. Show a => a -> a -> a -> AttributeValue
rotateAround a
rotateAngle a
rx a
ry = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"rotate("
, a -> String
forall a. Show a => a -> String
show a
rotateAngle, String
","
, a -> String
forall a. Show a => a -> String
show a
rx, String
",", a -> String
forall a. Show a => a -> String
show a
ry
, String
")"
]
skewX :: Show a => a -> AttributeValue
skewX :: forall a. Show a => a -> AttributeValue
skewX a
skewAngle = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"skewX("
, a -> String
forall a. Show a => a -> String
show a
skewAngle
, String
")"
]
skewY :: Show a => a -> AttributeValue
skewY :: forall a. Show a => a -> AttributeValue
skewY a
skewAngle = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"skewY("
, a -> String
forall a. Show a => a -> String
show a
skewAngle
, String
")"
]
matrix :: Show a => a -> a -> a -> a -> a -> a -> AttributeValue
matrix :: forall a. Show a => a -> a -> a -> a -> a -> a -> AttributeValue
matrix a
a_ a
b a
c_ a
d a
e a
f = String -> AttributeValue
forall a. ToValue a => a -> AttributeValue
toValue (String -> AttributeValue)
-> ([String] -> String) -> [String] -> AttributeValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join ([String] -> AttributeValue) -> [String] -> AttributeValue
forall a b. (a -> b) -> a -> b
$
[ String
"matrix("
, a -> String
forall a. Show a => a -> String
show a
a_, String
","
, a -> String
forall a. Show a => a -> String
show a
b, String
","
, a -> String
forall a. Show a => a -> String
show a
c_, String
","
, a -> String
forall a. Show a => a -> String
show a
d, String
","
, a -> String
forall a. Show a => a -> String
show a
e, String
","
, a -> String
forall a. Show a => a -> String
show a
f
, String
")"
]