wumpus-core-0.31.0: Pure Haskell PostScript and SVG generation.

PortabilityGHC
Stabilityunstable
Maintainerstephen.tetley@gmail.com

Wumpus.Core.GraphicsState

Contents

Description

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.

Synopsis

Data types

data GraphicsState Source

Graphics state used by the rendering monads.

This type is hidden by the top-level module Wumpus.Core.

Stroke attributes

data StrokeAttr Source

Stroke attributes for drawing paths.

data LineCap Source

Line cap - default in output is butt.

Constructors

CapButt 
CapRound 
CapSquare 

data LineJoin Source

Line join - default in output is miter.

Constructors

JoinMiter 
JoinRound 
JoinBevel 

data DashPattern Source

Dash pattern - either a solid line or a list of on-off pairs together with an offset into the dashes.

Constructors

Solid 
Dash Int [(Int, Int)] 

Font

data FontAttr Source

Font face 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:

 Times-Roman  Times-Italic  Times-Bold  Times-BoldOtalic
 Helvetica  Helvetica-Oblique  Helvetica-Bold  Helvetica-Bold-Oblique
 Courier  Courier-Oblique  Courier-Bold  Courier-Bold-Oblique
 Symbol

See the PostScript Language Reference Manual.

Constructors

FontAttr 

data FontFace Source

FontFace : postscript_name * svg_font_family * svg_font_style

data SVGFontStyle Source

SVG font styles - potentially a style may generate both font-weight and font-style attributes in the SVG output.

Initial graphic state

zeroGS :: GraphicsStateSource

The initial graphics state

default_stroke_attr :: StrokeAttrSource

Default stroke attributes.