Data types for stroke and label attributes and type classes
for conversion to PostScript's colour and matrix
representations.

Wumpus represents pictures as trees - a leaf represents a
path or text label. All attributes of a path or text label
(colour, stroke width, font, ...) are stored in the leaf. So
a picture is a leaf labelled tree.

By contrast, PostScript maintains a graphics state. A
PostScript program is free to modify the graphics state
anywhere in the program. Stroke width is a general property
shared by all elements (initially it has the default value 1).
Only stroked paths actually regard stroke width, fonts and
filled and clipping paths ignore it. PostScript allows more
control over the graphics state by allowing the current state
to be saved and restored with the gsave and grestore.
This is useful for modularity but is a comparatively expensive
procedure.

When Wumpus renders Pictures as PostScript it maintains a
limited graphics state with just current colour and current
font. This is so Wumpus can avoid repeating setrgbcolor and
findfont operations in the generated PostScript if
subsequent elements share the same values.

Data types

Stroke attributes

Stroke attributes are an algebriac type rather than a
record type. This is for convenience when attributing paths -
paths can be attibuted with just the differences from the
default settings, rather than all the settings whether or not
they are important.

Font

Font name and size. Equivalent fonts have different names
in PostScript and SVG. A PostScript font name includes the
font style (e.g. Times-BoldItalic) whereas an SVG font has
a name (the font-family attribute) and a style.

For PostScript, the following fonts are expected to exist on
most platforms: