Data.GraphViz.Attributes.HTML

graphviz-2999.18.1.2: Bindings to Graphviz for graph visualisation.

Copyright | (c) Ivan Lazar Miljenovic
License | 3-Clause BSD-style
Maintainer | Ivan.Miljenovic@gmail.com
Safe Haskell | Safe
Language | Haskell2010

Data.GraphViz.Attributes.HTML

Description

This module is written to be imported qualified. It defines the syntax for HTML-like values for use in Graphviz. Please note that these values are not really HTML, but the term "HTML" is used throughout as it is less cumbersome than "HTML-like". To be able to use this, the version of Graphviz must be at least 1.10. For more information, please see: http://graphviz.org/doc/info/shapes.html#html

The actual definition of the syntax specifies that these types must be valid XML syntax. As such, this assumed when printing and parsing, though the correct escape/descaping for `"`, `&`, `<` and `>` are automatically done when printing and parsing.

Differences from how Graphviz treats HTML-like values:

- Graphviz only specifies the above-listed characters must be escaped; however, internally it also escapes `-`, `'` and multiple sequences of spaces. This library attempts to match this behaviour. Please let me know if this behaviour (especially about escaping multiple spaces) is unwanted.
- When parsing escaped HTML characters, numeric escapes are converted to the corresponding character as are the various characters listed above; all other escaped characters (apart from those listed above) are silently ignored and removed from the input (since technically these must be valid XML, which doesn't recognise as many named escape characters as does HTML).
- All whitespace read in is kept (even if Graphviz would ignore multiple whitespace characters); when printing them, however, they are replaced with non-breaking spaces. As such, if multiple literal whitespace characters are used in a sequence, then the result of parsing and then printing some Dot code will not be the same as the initial Dot code. Furthermore, all whitespace characters are printed as spaces.
- It is assumed that all parsed `&` values are the beginning of an XML escape sequence (which must finish with a `;` character).
- There should be no pre-escaped characters in values; when printing, the `&` will get escaped without considering if that is an escaped character.

Synopsis

- data Label
  - = Text Text
  - | Table Table
- type Text = [TextItem]
- data TextItem
  - = Str Text
  - | Newline Attributes
  - | Font Attributes Text
  - | Format Format Text
- data Format
  - = Italics
  - | Bold
  - | Underline
  - | Overline
  - | Subscript
  - | Superscript
- data Table = HTable {
  - tableFontAttrs :: Maybe Attributes
  - tableAttrs :: Attributes
  - tableRows :: [Row]
  }
- data Row
  - = Cells [Cell]
  - | HorizontalRule
- data Cell
  - = LabelCell Attributes Label
  - | ImgCell Attributes Img
  - | VerticalRule
- newtype Img = Img Attributes
- type Attributes = [Attribute]
- data Attribute
  - = Align Align
  - | BAlign Align
  - | BGColor Color
  - | Border Word8
  - | CellBorder Word8
  - | CellPadding Word8
  - | CellSpacing Word8
  - | Color Color
  - | ColSpan Word16
  - | Face Text
  - | FixedSize Bool
  - | Height Word16
  - | HRef Text
  - | ID Text
  - | PointSize Double
  - | Port PortName
  - | RowSpan Word16
  - | Scale Scale
  - | Src FilePath
  - | Target Text
  - | Title Text
  - | VAlign VAlign
  - | Width Word16
- data Align
  - = HLeft
  - | HCenter
  - | HRight
  - | HText
- data VAlign
  - = HTop
  - | HMiddle
  - | HBottom
- data Scale
  - = NaturalSize
  - | ScaleUniformly
  - | ExpandWidth
  - | ExpandHeight
  - | ExpandBoth

# Documentation

data Label #

The overall type for HTML-like labels. Fundamentally, HTML-like values in Graphviz are either textual (i.e. a single element with formatting) or a table. Note that `Label` values can be nested via `LabelCell`.

Constructors

Text Text |
Table Table |

Instances

Eq Label # |
Methods (==) :: Label -> Label -> Bool # (/=) :: Label -> Label -> Bool #
Ord Label # |
Methods compare :: Label -> Label -> Ordering # (<) :: Label -> Label -> Bool # (<=) :: Label -> Label -> Bool # (>) :: Label -> Label -> Bool # (>=) :: Label -> Label -> Bool # max :: Label -> Label -> Label # min :: Label -> Label -> Label #
Read Label # |
Methods readsPrec :: Int -> ReadS Label # readList :: ReadS [Label] # readPrec :: ReadPrec Label # readListPrec :: ReadPrec [Label] #
Show Label # |
Methods showsPrec :: Int -> Label -> ShowS # show :: Label -> String # showList :: [Label] -> ShowS #
ParseDot Label # |
Methods parseUnqt :: Parse Label # parse :: Parse Label # parseUnqtList :: Parse [Label] # parseList :: Parse [Label] #
PrintDot Label # |
Methods unqtDot :: Label -> DotCode # toDot :: Label -> DotCode # unqtListToDot :: [Label] -> DotCode # listToDot :: [Label] -> DotCode #
Labellable Label # |
Methods toLabelValue :: Label -> Label #

type Text = [TextItem] #

Represents a textual component of an HTML-like label. It is assumed that a `Text` list is non-empty. It is preferable to "group" `Str` values together rather than have individual ones. Note that when printing, the individual values are concatenated together without spaces, and when parsing anything that isn't a tag is assumed to be a `Str`: that is, something like "`<BR/> <BR/>`" is parsed as:

    [Newline [], Str " ", Newline []]

data TextItem #

Textual items in HTML-like labels.

Constructors

Str Text |
Newline Attributes | Only accepts an optional `Align` `Attribute`; defined this way for ease of printing/parsing.
Font Attributes Text |
Format Format Text | Only available in Graphviz >= 2.28.0.

Instances

Eq TextItem # |
Methods (==) :: TextItem -> TextItem -> Bool # (/=) :: TextItem -> TextItem -> Bool #
Ord TextItem # |
Methods compare :: TextItem -> TextItem -> Ordering # (<) :: TextItem -> TextItem -> Bool # (<=) :: TextItem -> TextItem -> Bool # (>) :: TextItem -> TextItem -> Bool # (>=) :: TextItem -> TextItem -> Bool # max :: TextItem -> TextItem -> TextItem # min :: TextItem -> TextItem -> TextItem #
Read TextItem # |
Methods readsPrec :: Int -> ReadS TextItem # readList :: ReadS [TextItem] # readPrec :: ReadPrec TextItem # readListPrec :: ReadPrec [TextItem] #
Show TextItem # |
Methods showsPrec :: Int -> TextItem -> ShowS # show :: TextItem -> String # showList :: [TextItem] -> ShowS #
ParseDot TextItem # |
Methods parseUnqt :: Parse TextItem # parse :: Parse TextItem # parseUnqtList :: Parse [TextItem] # parseList :: Parse [TextItem] #
PrintDot TextItem # |
Methods unqtDot :: TextItem -> DotCode # toDot :: TextItem -> DotCode # unqtListToDot :: [TextItem] -> DotCode # listToDot :: [TextItem] -> DotCode #
Labellable Text # |
Methods toLabelValue :: Text -> Label #

data Format #

Constructors

Italics |
Bold |
Underline |
Overline | Requires Graphviz >= 2.38.0.
Subscript |
Superscript |

Instances

Bounded Format # |
Methods minBound :: Format # maxBound :: Format #
Enum Format # |
Methods succ :: Format -> Format # pred :: Format -> Format # toEnum :: Int -> Format # fromEnum :: Format -> Int # enumFrom :: Format -> [Format] # enumFromThen :: Format -> Format -> [Format] # enumFromTo :: Format -> Format -> [Format] # enumFromThenTo :: Format -> Format -> Format -> [Format] #
Eq Format # |
Methods (==) :: Format -> Format -> Bool # (/=) :: Format -> Format -> Bool #
Ord Format # |
Methods compare :: Format -> Format -> Ordering # (<) :: Format -> Format -> Bool # (<=) :: Format -> Format -> Bool # (>) :: Format -> Format -> Bool # (>=) :: Format -> Format -> Bool # max :: Format -> Format -> Format # min :: Format -> Format -> Format #
Read Format # |
Methods readsPrec :: Int -> ReadS Format # readList :: ReadS [Format] # readPrec :: ReadPrec Format # readListPrec :: ReadPrec [Format] #
Show Format # |
Methods showsPrec :: Int -> Format -> ShowS # show :: Format -> String # showList :: [Format] -> ShowS #
ParseDot Format # |
Methods parseUnqt :: Parse Format # parse :: Parse Format # parseUnqtList :: Parse [Format] # parseList :: Parse [Format] #
PrintDot Format # |
Methods unqtDot :: Format -> DotCode # toDot :: Format -> DotCode # unqtListToDot :: [Format] -> DotCode # listToDot :: [Format] -> DotCode #

data Table #

A table in HTML-like labels. Tables are optionally wrapped in overall `FONT` tags.

Constructors

HTable |
Fields tableFontAttrs :: Maybe Attributes Optional `FONT` attributes. ``Just` []` denotes empty `FONT` tags; ``Nothing`` denotes no such tags. tableAttrs :: Attributes tableRows :: [Row] This list is assumed to be non-empty.

Instances

Eq Table # |
Methods (==) :: Table -> Table -> Bool # (/=) :: Table -> Table -> Bool #
Ord Table # |
Methods compare :: Table -> Table -> Ordering # (<) :: Table -> Table -> Bool # (<=) :: Table -> Table -> Bool # (>) :: Table -> Table -> Bool # (>=) :: Table -> Table -> Bool # max :: Table -> Table -> Table # min :: Table -> Table -> Table #
Read Table # |
Methods readsPrec :: Int -> ReadS Table # readList :: ReadS [Table] # readPrec :: ReadPrec Table # readListPrec :: ReadPrec [Table] #
Show Table # |
Methods showsPrec :: Int -> Table -> ShowS # show :: Table -> String # showList :: [Table] -> ShowS #
ParseDot Table # |
Methods parseUnqt :: Parse Table # parse :: Parse Table # parseUnqtList :: Parse [Table] # parseList :: Parse [Table] #
PrintDot Table # |
Methods unqtDot :: Table -> DotCode # toDot :: Table -> DotCode # unqtListToDot :: [Table] -> DotCode # listToDot :: [Table] -> DotCode #
Labellable Table # |
Methods toLabelValue :: Table -> Label #

data Row #

A row in a `Table`. The list of `Cell` values is assumed to be non-empty.

Constructors

Cells [Cell] |
HorizontalRule | Should be between `Cells` values, requires Graphviz >= 2.29.0

Instances

Eq Row # |
Methods (==) :: Row -> Row -> Bool # (/=) :: Row -> Row -> Bool #
Ord Row # |
Methods compare :: Row -> Row -> Ordering # (<) :: Row -> Row -> Bool # (<=) :: Row -> Row -> Bool # (>) :: Row -> Row -> Bool # (>=) :: Row -> Row -> Bool # max :: Row -> Row -> Row # min :: Row -> Row -> Row #
Read Row # |
Methods readsPrec :: Int -> ReadS Row # readList :: ReadS [Row] # readPrec :: ReadPrec Row # readListPrec :: ReadPrec [Row] #
Show Row # |
Methods showsPrec :: Int -> Row -> ShowS # show :: Row -> String # showList :: [Row] -> ShowS #
ParseDot Row # |
Methods parseUnqt :: Parse Row # parse :: Parse Row # parseUnqtList :: Parse [Row] # parseList :: Parse [Row] #
PrintDot Row # |
Methods unqtDot :: Row -> DotCode # toDot :: Row -> DotCode # unqtListToDot :: [Row] -> DotCode # listToDot :: [Row] -> DotCode #

data Cell #

Cells either recursively contain another `Label` or else a path to an image file.

Constructors

LabelCell Attributes Label |
ImgCell Attributes Img |
VerticalRule | Should be between `LabelCell` or `ImgCell` values, requires Graphviz >= 2.29.0

Instances

Eq Cell # |
Methods (==) :: Cell -> Cell -> Bool # (/=) :: Cell -> Cell -> Bool #
Ord Cell # |
Methods compare :: Cell -> Cell -> Ordering # (<) :: Cell -> Cell -> Bool # (<=) :: Cell -> Cell -> Bool # (>) :: Cell -> Cell -> Bool # (>=) :: Cell -> Cell -> Bool # max :: Cell -> Cell -> Cell # min :: Cell -> Cell -> Cell #
Read Cell # |
Methods readsPrec :: Int -> ReadS Cell # readList :: ReadS [Cell] # readPrec :: ReadPrec Cell # readListPrec :: ReadPrec [Cell] #
Show Cell # |
Methods showsPrec :: Int -> Cell -> ShowS # show :: Cell -> String # showList :: [Cell] -> ShowS #
ParseDot Cell # |
Methods parseUnqt :: Parse Cell # parse :: Parse Cell # parseUnqtList :: Parse [Cell] # parseList :: Parse [Cell] #
PrintDot Cell # |
Methods unqtDot :: Cell -> DotCode # toDot :: Cell -> DotCode # unqtListToDot :: [Cell] -> DotCode # listToDot :: [Cell] -> DotCode #

newtype Img #

The path to an image; accepted `Attributes` are `Scale` and `Src`.

Constructors

Img Attributes |

Instances

Eq Img # |
Methods (==) :: Img -> Img -> Bool # (/=) :: Img -> Img -> Bool #
Ord Img # |
Methods compare :: Img -> Img -> Ordering # (<) :: Img -> Img -> Bool # (<=) :: Img -> Img -> Bool # (>) :: Img -> Img -> Bool # (>=) :: Img -> Img -> Bool # max :: Img -> Img -> Img # min :: Img -> Img -> Img #
Read Img # |
Methods readsPrec :: Int -> ReadS Img # readList :: ReadS [Img] # readPrec :: ReadPrec Img # readListPrec :: ReadPrec [Img] #
Show Img # |
Methods showsPrec :: Int -> Img -> ShowS # show :: Img -> String # showList :: [Img] -> ShowS #
ParseDot Img # |
Methods parseUnqt :: Parse Img # parse :: Parse Img # parseUnqtList :: Parse [Img] # parseList :: Parse [Img] #
PrintDot Img # |
Methods unqtDot :: Img -> DotCode # toDot :: Img -> DotCode # unqtListToDot :: [Img] -> DotCode # listToDot :: [Img] -> DotCode #

type Attributes = [Attribute] #

The various HTML-like label-specific attributes being used.

data Attribute #

Note that not all `Attribute` values are valid everywhere: see the comments for each one on where it is valid.

Constructors

Align Align | Valid for: `Table`, `Cell`, `Newline`.
BAlign Align | Valid for: `Cell`.
BGColor Color | Valid for: `Table` (including `tableFontAttrs`), `Cell`, `Font`.
Border Word8 | Valid for: `Table`, `Cell`. Default is `1`; `0` represents no border.
CellBorder Word8 | Valid for: `Table`. Default is `1`; `0` represents no border.
CellPadding Word8 | Valid for: `Table`, `Cell`. Default is `2`.
CellSpacing Word8 | Valid for: `Table`, `Cell`. Default is `2`; maximum is `127`.
Color Color | Valid for: `Table`, `Cell`.
ColSpan Word16 | Valid for: `Cell`. Default is `1`.
Face Text | Valid for: `tableFontAttrs`, `Font`.
FixedSize Bool | Valid for: `Table`, `Cell`. Default is ``False``.
Height Word16 | Valid for: `Table`, `Cell`.
HRef Text | Valid for: `Table`, `Cell`.
ID Text | Valid for: `Table`, `Cell`. Requires Graphviz >= 2.29.0
PointSize Double | Valid for: `tableFontAttrs`, `Font`.
Port PortName | Valid for: `Table`, `Cell`.
RowSpan Word16 | Valid for: `Cell`.
Scale Scale | Valid for: `Img`.
Src FilePath | Valid for: `Img`.
Target Text | Valid for: `Table`, `Cell`.
Title Text | Valid for: `Table`, `Cell`. Has an alias of `TOOLTIP`.
VAlign VAlign | Valid for: `Table`, `Cell`.
Width Word16 | Valid for: `Table`, `Cell`.

Instances

Eq Attribute # |
Methods (==) :: Attribute -> Attribute -> Bool # (/=) :: Attribute -> Attribute -> Bool #
Ord Attribute # |
Methods compare :: Attribute -> Attribute -> Ordering # (<) :: Attribute -> Attribute -> Bool # (<=) :: Attribute -> Attribute -> Bool # (>) :: Attribute -> Attribute -> Bool # (>=) :: Attribute -> Attribute -> Bool # max :: Attribute -> Attribute -> Attribute # min :: Attribute -> Attribute -> Attribute #
Read Attribute # |
Methods readsPrec :: Int -> ReadS Attribute # readList :: ReadS [Attribute] # readPrec :: ReadPrec Attribute # readListPrec :: ReadPrec [Attribute] #
Show Attribute # |
Methods showsPrec :: Int -> Attribute -> ShowS # show :: Attribute -> String # showList :: [Attribute] -> ShowS #
ParseDot Attribute # |
Methods parseUnqt :: Parse Attribute # parse :: Parse Attribute # parseUnqtList :: Parse [Attribute] # parseList :: Parse [Attribute] #
PrintDot Attribute # |
Methods unqtDot :: Attribute -> DotCode # toDot :: Attribute -> DotCode # unqtListToDot :: [Attribute] -> DotCode # listToDot :: [Attribute] -> DotCode #

data Align #

Specifies horizontal placement. When an object is allocated more space than required, this value determines where the extra space is placed left and right of the object.

Constructors

HLeft |
HCenter | Default value.
HRight |
HText | `LabelCell` values only; aligns lines of text using the full cell width. The alignment of a line is determined by its (possibly implicit) associated `Newline` element.

Instances

Bounded Align # |
Methods minBound :: Align # maxBound :: Align #
Enum Align # |
Methods succ :: Align -> Align # pred :: Align -> Align # toEnum :: Int -> Align # fromEnum :: Align -> Int # enumFrom :: Align -> [Align] # enumFromThen :: Align -> Align -> [Align] # enumFromTo :: Align -> Align -> [Align] # enumFromThenTo :: Align -> Align -> Align -> [Align] #
Eq Align # |
Methods (==) :: Align -> Align -> Bool # (/=) :: Align -> Align -> Bool #
Ord Align # |
Methods compare :: Align -> Align -> Ordering # (<) :: Align -> Align -> Bool # (<=) :: Align -> Align -> Bool # (>) :: Align -> Align -> Bool # (>=) :: Align -> Align -> Bool # max :: Align -> Align -> Align # min :: Align -> Align -> Align #
Read Align # |
Methods readsPrec :: Int -> ReadS Align # readList :: ReadS [Align] # readPrec :: ReadPrec Align # readListPrec :: ReadPrec [Align] #
Show Align # |
Methods showsPrec :: Int -> Align -> ShowS # show :: Align -> String # showList :: [Align] -> ShowS #
ParseDot Align # |
Methods parseUnqt :: Parse Align # parse :: Parse Align # parseUnqtList :: Parse [Align] # parseList :: Parse [Align] #
PrintDot Align # |
Methods unqtDot :: Align -> DotCode # toDot :: Align -> DotCode # unqtListToDot :: [Align] -> DotCode # listToDot :: [Align] -> DotCode #

data VAlign #

Specifies vertical placement. When an object is allocated more space than required, this value determines where the extra space is placed above and below the object.

Constructors

HTop |
HMiddle | Default value.
HBottom |

Instances

Bounded VAlign # |
Methods minBound :: VAlign # maxBound :: VAlign #
Enum VAlign # |
Methods succ :: VAlign -> VAlign # pred :: VAlign -> VAlign # toEnum :: Int -> VAlign # fromEnum :: VAlign -> Int # enumFrom :: VAlign -> [VAlign] # enumFromThen :: VAlign -> VAlign -> [VAlign] # enumFromTo :: VAlign -> VAlign -> [VAlign] # enumFromThenTo :: VAlign -> VAlign -> VAlign -> [VAlign] #
Eq VAlign # |
Methods (==) :: VAlign -> VAlign -> Bool # (/=) :: VAlign -> VAlign -> Bool #
Ord VAlign # |
Methods compare :: VAlign -> VAlign -> Ordering # (<) :: VAlign -> VAlign -> Bool # (<=) :: VAlign -> VAlign -> Bool # (>) :: VAlign -> VAlign -> Bool # (>=) :: VAlign -> VAlign -> Bool # max :: VAlign -> VAlign -> VAlign # min :: VAlign -> VAlign -> VAlign #
Read VAlign # |
Methods readsPrec :: Int -> ReadS VAlign # readList :: ReadS [VAlign] # readPrec :: ReadPrec VAlign # readListPrec :: ReadPrec [VAlign] #
Show VAlign # |
Methods showsPrec :: Int -> VAlign -> ShowS # show :: VAlign -> String # showList :: [VAlign] -> ShowS #
ParseDot VAlign # |
Methods parseUnqt :: Parse VAlign # parse :: Parse VAlign # parseUnqtList :: Parse [VAlign] # parseList :: Parse [VAlign] #
PrintDot VAlign # |
Methods unqtDot :: VAlign -> DotCode # toDot :: VAlign -> DotCode # unqtListToDot :: [VAlign] -> DotCode # listToDot :: [VAlign] -> DotCode #

data Scale #

Specifies how an image will use any extra space available in its cell. If undefined, the image inherits the value of the `ImageScale` attribute.

Constructors

NaturalSize | Default value.
ScaleUniformly |
ExpandWidth |
ExpandHeight |
ExpandBoth |

Instances

Bounded Scale # |
Methods minBound :: Scale # maxBound :: Scale #
Enum Scale # |
Methods succ :: Scale -> Scale # pred :: Scale -> Scale # toEnum :: Int -> Scale # fromEnum :: Scale -> Int # enumFrom :: Scale -> [Scale] # enumFromThen :: Scale -> Scale -> [Scale] # enumFromTo :: Scale -> Scale -> [Scale] # enumFromThenTo :: Scale -> Scale -> Scale -> [Scale] #
Eq Scale # |
Methods (==) :: Scale -> Scale -> Bool # (/=) :: Scale -> Scale -> Bool #
Ord Scale # |
Methods compare :: Scale -> Scale -> Ordering # (<) :: Scale -> Scale -> Bool # (<=) :: Scale -> Scale -> Bool # (>) :: Scale -> Scale -> Bool # (>=) :: Scale -> Scale -> Bool # max :: Scale -> Scale -> Scale # min :: Scale -> Scale -> Scale #
Read Scale # |
Methods readsPrec :: Int -> ReadS Scale # readList :: ReadS [Scale] # readPrec :: ReadPrec Scale # readListPrec :: ReadPrec [Scale] #
Show Scale # |
Methods showsPrec :: Int -> Scale -> ShowS # show :: Scale -> String # showList :: [Scale] -> ShowS #
ParseDot Scale # |
Methods parseUnqt :: Parse Scale # parse :: Parse Scale # parseUnqtList :: Parse [Scale] # parseList :: Parse [Scale] #
PrintDot Scale # |
Methods unqtDot :: Scale -> DotCode # toDot :: Scale -> DotCode # unqtListToDot :: [Scale] -> DotCode # listToDot :: [Scale] -> DotCode #