graphviz-2999.20.0.2: Bindings to Graphviz for graph visualisation.

Copyright(c) Ivan Lazar Miljenovic
License3-Clause BSD-style
Safe HaskellNone



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 Format Source #



Requires Graphviz >= 2.38.0.


data Table Source #

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




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.

Columns CellFormat

Valid for: Table. Requires Graphviz >= 2.40.1

Face Text

Valid for: tableFontAttrs, Font.

FixedSize Bool

Valid for: Table, Cell. Default is False.

GradientAngle Int

Valid for: Table, Cell. Default is 0. Requires Graphviz >= 2.40.1

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.

Rows CellFormat

Valid for: Table. Requires Graphviz >= 2.40.1

RowSpan Word16

Valid for: Cell.

Scale Scale

Valid for: Img.

Sides [Side]

Valid for: Table, Cell. Default is [LeftSide, TopSide, RightSide, BottomSide]. Requires Graphviz >= 2.40.1

Src FilePath

Valid for: Img.

Style Style

Valid for: Table, Cell. Requires Graphviz >= 2.40.1

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 CellFormat Source #




Bounded CellFormat Source # 
Enum CellFormat Source # 
Eq CellFormat Source # 
Ord CellFormat Source # 
Read CellFormat Source # 
Show CellFormat Source # 
ParseDot CellFormat Source # 
PrintDot CellFormat Source # 

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.

data Side Source #

Which sides of a border in a cell or table should be drawn, if a border is drawn.