graphviz-2999.14.1.0: Bindings to Graphviz for graph visualisation.
Safe HaskellSafe-Infered



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:

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.



data Label Source

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.


Text Text 
Table Table 

type Text = [TextItem]Source

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 Source

Textual items in HTML-like labels.


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.

data Table Source

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




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.

data Row Source

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


Cells [Cell] 

Should be between Cells values, requires Graphviz >= 2.29.0

data Cell Source

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


LabelCell Attributes Label 
ImgCell Attributes Img 

Should be between LabelCell or ImgCell values, requires Graphviz >= 2.29.0

newtype Img Source

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


Img Attributes 

type Attributes = [Attribute]Source

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

data Attribute Source

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


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.

data Align Source

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.



Default value.


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.

data VAlign Source

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.



Default value.


data Scale Source

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