Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Chart.Markup
Description
Conversion between Chart and Markup representations.
Synopsis
- data Markup = Markup {
- standard :: Standard
- markupTree :: [Tree Token]
- data ChartOptions = ChartOptions {}
- markupChartOptions :: ChartOptions -> Markup
- markupChartTree :: ChartTree -> [Tree Token]
- markupChart :: Chart -> [Tree Token]
- header :: Double -> Rect Double -> [Tree Token] -> Tree Token
- renderChartOptions :: ChartOptions -> Text
- encodeChartOptions :: ChartOptions -> ByteString
- writeChartOptions :: FilePath -> ChartOptions -> IO ()
- data CssOptions = CssOptions {}
- defaultCssOptions :: CssOptions
- data CssPreferColorScheme
- cssPreferColorScheme :: (Colour, Colour) -> CssPreferColorScheme -> ByteString
- fillSwitch :: (Colour, Colour) -> ByteString -> ByteString -> ByteString
- data CssShapeRendering
- markupCssOptions :: CssOptions -> Tree Token
- data MarkupOptions = MarkupOptions {}
- defaultMarkupOptions :: MarkupOptions
- encodeNum :: Double -> ByteString
- encodePx :: Double -> ByteString
Documentation
>>>
markup Html "<foo class=\"bar\">baz</foo>"
That (Markup {standard = Html, markupTree = [Node {rootLabel = StartTag "foo" [Attr "class" "bar"], subForest = [Node {rootLabel = Content "baz", subForest = []}]}]})
Instances
Generic Markup | |
Show Markup | |
NFData Markup | |
Defined in MarkupParse | |
Eq Markup | |
Ord Markup | |
ToExpr Markup | |
Defined in MarkupParse | |
type Rep Markup | |
Defined in MarkupParse type Rep Markup = D1 ('MetaData "Markup" "MarkupParse" "markup-parse-0.0.0.2-HnQ2lGo9uJcI0zQ43aTniK" 'False) (C1 ('MetaCons "Markup" 'PrefixI 'True) (S1 ('MetaSel ('Just "standard") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Standard) :*: S1 ('MetaSel ('Just "markupTree") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Tree Token]))) |
data ChartOptions Source #
A product type representing charts, hud options and markup options, which can be transformed into Markup
.
Constructors
ChartOptions | |
Fields |
Instances
markupChartOptions :: ChartOptions -> Markup Source #
Convert ChartOptions to Markup
>>>
markupChartOptions (ChartOptions (defaultMarkupOptions & #cssOptions % #preferColorScheme .~ PreferNormal) mempty mempty)
Markup {standard = Xml, markupTree = [Node {rootLabel = StartTag "svg" [Attr "xmlns" "http://www.w3.org/2000/svg",Attr "xmlns:xlink" "http://www.w3.org/1999/xlink",Attr "width" "450",Attr "height" "300",Attr "viewBox" "-0.75 -0.5 1.5 1.0"], subForest = [Node {rootLabel = StartTag "style" [], subForest = [Node {rootLabel = Content "", subForest = []}]},Node {rootLabel = StartTag "g" [Attr "class" "chart"], subForest = []},Node {rootLabel = StartTag "g" [Attr "class" "hud"], subForest = []}]}]}
markupChartTree :: ChartTree -> [Tree Token] Source #
Convert a ChartTree to markup
>>>
lineExample & view #charts & markupChartTree
[Node {rootLabel = StartTag "g" [Attr "class" "line"], subForest = [Node {rootLabel = StartTag "g" [Attr "stroke-width" "0.0150",Attr "stroke" "rgb(2%, 73%, 80%)",Attr "stroke-opacity" "1.0",Attr "fill" "none"], subForest = [Node {rootLabel = EmptyElemTag "polyline" [Attr "points" "0,-1.0 1.0,-1.0 2.0,-5.0"], subForest = []}]},Node {rootLabel = StartTag "g" [Attr "stroke-width" "0.0150",Attr "stroke" "rgb(2%, 29%, 48%)",Attr "stroke-opacity" "1.0",Attr "fill" "none"], subForest = [Node {rootLabel = EmptyElemTag "polyline" [Attr "points" "0,0 2.8,-3.0"], subForest = []}]},Node {rootLabel = StartTag "g" [Attr "stroke-width" "0.0150",Attr "stroke" "rgb(66%, 7%, 55%)",Attr "stroke-opacity" "1.0",Attr "fill" "none"], subForest = [Node {rootLabel = EmptyElemTag "polyline" [Attr "points" "0.5,-4.0 0.5,0"], subForest = []}]}]}]
markupChart :: Chart -> [Tree Token] Source #
Convert a Chart to Markup
>>>
lineExample & view #charts & foldOf charts' & head & markupChart
[Node {rootLabel = StartTag "g" [Attr "stroke-width" "0.0150",Attr "stroke" "rgb(2%, 73%, 80%)",Attr "stroke-opacity" "1.0",Attr "fill" "none"], subForest = [Node {rootLabel = EmptyElemTag "polyline" [Attr "points" "0,-1.0 1.0,-1.0 2.0,-5.0"], subForest = []}]}]
header :: Double -> Rect Double -> [Tree Token] -> Tree Token Source #
Create the classic SVG element
>>>
header 100 one [pure (StartTag "foo" [])]
Node {rootLabel = StartTag "svg" [Attr "xmlns" "http://www.w3.org/2000/svg",Attr "xmlns:xlink" "http://www.w3.org/1999/xlink",Attr "width" "100",Attr "height" "100",Attr "viewBox" "-0.5 -0.5 1.0 1.0"], subForest = [Node {rootLabel = StartTag "foo" [], subForest = []}]}
renderChartOptions :: ChartOptions -> Text Source #
Render ChartOptions to an SVG Text snippet
>>>
renderChartOptions (ChartOptions (defaultMarkupOptions & #cssOptions % #preferColorScheme .~ PreferNormal) mempty mempty)
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"450\" height=\"300\" viewBox=\"-0.75 -0.5 1.5 1.0\"><style></style><g class=\"chart\"></g><g class=\"hud\"></g></svg>"
encodeChartOptions :: ChartOptions -> ByteString Source #
Render ChartOptions to an SVG ByteString
>>>
encodeChartOptions (ChartOptions (defaultMarkupOptions & #cssOptions % #preferColorScheme .~ PreferNormal) mempty mempty)
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"450\" height=\"300\" viewBox=\"-0.75 -0.5 1.5 1.0\"><style></style><g class=\"chart\"></g><g class=\"hud\"></g></svg>"
writeChartOptions :: FilePath -> ChartOptions -> IO () Source #
Convert ChartOptions to an SVG ByteString and save to a file
data CssOptions Source #
css options
>>>
defaultCssOptions
CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}
Constructors
CssOptions | |
Instances
Generic CssOptions Source # | |
Defined in Chart.Markup Associated Types type Rep CssOptions :: Type -> Type # | |
Show CssOptions Source # | |
Defined in Chart.Markup Methods showsPrec :: Int -> CssOptions -> ShowS # show :: CssOptions -> String # showList :: [CssOptions] -> ShowS # | |
Eq CssOptions Source # | |
Defined in Chart.Markup | |
type Rep CssOptions Source # | |
Defined in Chart.Markup type Rep CssOptions = D1 ('MetaData "CssOptions" "Chart.Markup" "chart-svg-0.5.0.0-j0IiNmAoTijF1cKEqaYg" 'False) (C1 ('MetaCons "CssOptions" 'PrefixI 'True) (S1 ('MetaSel ('Just "shapeRendering") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CssShapeRendering) :*: (S1 ('MetaSel ('Just "preferColorScheme") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CssPreferColorScheme) :*: S1 ('MetaSel ('Just "cssExtra") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))) |
defaultCssOptions :: CssOptions Source #
No special shape rendering and default hud responds to user color scheme preferences.
data CssPreferColorScheme Source #
CSS prefer-color-scheme options
Constructors
PreferHud | includes css that switches approriate hud elements between light and dark. |
PreferDark | |
PreferLight | |
PreferNormal |
Instances
cssPreferColorScheme :: (Colour, Colour) -> CssPreferColorScheme -> ByteString Source #
CSS prefer-color-scheme text snippet
>>>
cssPreferColorScheme (light, dark) PreferHud
"svg {\n color-scheme: light dark;\n}\n{\n .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n fill: rgb(5%, 5%, 5%);\n }\n .ticklines g, .tickglyph g, .legendBorder g {\n stroke: rgb(5%, 5%, 5%);\n }\n .legendBorder g {\n fill: rgb(94%, 94%, 94%);\n }\n}\n@media (prefers-color-scheme:dark) {\n .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n fill: rgb(94%, 94%, 94%);\n }\n .ticklines g, .tickglyph g, .legendBorder g {\n stroke: rgb(94%, 94%, 94%);\n }\n .legendBorder g {\n fill: rgb(5%, 5%, 5%);\n }\n}"
fillSwitch :: (Colour, Colour) -> ByteString -> ByteString -> ByteString Source #
CSS snippet to switch between dark and light mode
fillSwitch (color1, color2) "dark" "stuff"
... will default to color1 for elements of the "stuff" class, but switch to color2 if "dark" mode is preferred by the user.
data CssShapeRendering Source #
CSS shape rendering options
Constructors
UseGeometricPrecision | |
UseCssCrisp | |
NoShapeRendering |
Instances
markupCssOptions :: CssOptions -> Tree Token Source #
Convert CssOptions to Markup
>>>
markupCssOptions defaultCssOptions
Node {rootLabel = StartTag "style" [], subForest = [Node {rootLabel = Content "svg {\n color-scheme: light dark;\n}\n{\n .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n fill: rgb(5%, 5%, 5%);\n }\n .ticklines g, .tickglyph g, .legendBorder g {\n stroke: rgb(5%, 5%, 5%);\n }\n .legendBorder g {\n fill: rgb(94%, 94%, 94%);\n }\n}\n@media (prefers-color-scheme:dark) {\n .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n fill: rgb(94%, 94%, 94%);\n }\n .ticklines g, .tickglyph g, .legendBorder g {\n stroke: rgb(94%, 94%, 94%);\n }\n .legendBorder g {\n fill: rgb(5%, 5%, 5%);\n }\n}", subForest = []}]}
data MarkupOptions Source #
Markup options.
>>>
defaultMarkupOptions
MarkupOptions {markupHeight = 300.0, cssOptions = CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}}
Constructors
MarkupOptions | |
Fields |
Instances
Generic MarkupOptions Source # | |
Defined in Chart.Markup Associated Types type Rep MarkupOptions :: Type -> Type # | |
Show MarkupOptions Source # | |
Defined in Chart.Markup Methods showsPrec :: Int -> MarkupOptions -> ShowS # show :: MarkupOptions -> String # showList :: [MarkupOptions] -> ShowS # | |
Eq MarkupOptions Source # | |
Defined in Chart.Markup Methods (==) :: MarkupOptions -> MarkupOptions -> Bool # (/=) :: MarkupOptions -> MarkupOptions -> Bool # | |
type Rep MarkupOptions Source # | |
Defined in Chart.Markup type Rep MarkupOptions = D1 ('MetaData "MarkupOptions" "Chart.Markup" "chart-svg-0.5.0.0-j0IiNmAoTijF1cKEqaYg" 'False) (C1 ('MetaCons "MarkupOptions" 'PrefixI 'True) (S1 ('MetaSel ('Just "markupHeight") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Double) :*: S1 ('MetaSel ('Just "cssOptions") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 CssOptions))) |
defaultMarkupOptions :: MarkupOptions Source #
The official markup options
encodeNum :: Double -> ByteString Source #
Show a Double, or rounded to 4 decimal places if this is shorter.
>>>
encodeNum 1
"1.0"
>>>
encodeNum 1.23456
"1.2346"
encodePx :: Double -> ByteString Source #
SVG width and height, without any unit suffix, are defined as pixels, which are Integers
>>>
encodePx 300.0
"300"