wumpus-core: Pure Haskell PostScript and SVG generation.
Wumpus-Core is a low-level library for generating static 2D
vector pictures, its salient feature is portability due to no
FFI dependencies. It can generate PostScript (EPS) files and SVG
files. The generated PostScript code is plain and reasonably
efficient as the use of stack operations, i.e gsave
and
grestore
, is minimized.
Although Wumpus-Core only generates vector output, the generated PostScript can be interpreted by GraphicsMagick or a similar tool to convert EPS files into bitmap image files (e.g JPEGs).
Wumpus-Core makes pictures from paths and text labels. Paths themselves are made from points. The usual affine transformations (rotations, scaling, translations) can be applied to Pictures. Unlike PostScript there is no notion of a current point, Wumpus-Core builds pictures in a coordinate-free style.
GENERAL DRAWBACKS...
For actually building pictures, diagrams, etc. Wumpus-Core is
very low-level. There is a supplementary package Wumpus-Basic
available that helps create certain types of diagram, but it is
experimental - functionality is added and dropped between
releases, it has no stable API.
Some of the design decisions made for Wumpus-Core are not sophisticated (e.g. how path and text attributes like colour are handled, and how the bounding boxes of text labels are calculated), so Wumpus might be limited compared to other systems. However, the design permits a fairly simple implementation, which is a priority.
UPDATING from 0.37.0 or earlier to 0.41.0.
There were substantial changes in verion 0.40.0 - hence the version number jump from 0.37.0. Version 0.41.0 introduces mostly cosmetic changes, but for upgrading from 0.37.0 or earlier the change-notes that follow are still relevant.
Core.Picture
API change - the path construction function has
changed from path
to primPath
. The type of the path segments
has changed, the functions lineTo
and curveTo
now build
AbsPathSegments
and primPath
consumes AbsPathSegments
.
The Text API has changed substantially, however most user code
should only need minor changes. The functions writePS_latin1
,
writeEPS_latin1
and writeSVG_latin1
have been removed, code
should be changed to use writePS
, writeEPS
and and
writeSVG
respectively. These three functions no longer take a
TextEncoder
argument as TextEncoders no longer exist.
The Font Size API has also changed substantially. It now exports a more consistent set of metrics (consistent with what is present in font files - the previous version was derived from hand measurements). It also adds a margin to bounding box calculations, again this is more consistent with how font files actually work.
The handling of escaped special characters is now more
consistent and the escaping mecahnism has been clarified
(previously the documentation and the implementation were at
odds): PostScript glyph names are delimited between &
(ampersand) and ;
(semi), Unicode code points are delimited
by &#
(ampersand-hash) and ;
(semi). Note Wumpus silently
drops mal-formed escape charcters, for robustness this is
preferable to throwing a runtime error, but it does mean the
output needs visually checking.
Changelog:
v0.40.0 to v0.41.0:
Changed PostScript output to use pre-defined procedures for circles and ellipses. This should be a significant optimization for drawings that have many circles or ellipses. For drawings that do not use circles or ellipses, it adds circa. 75 lines to the generated PostScript which is tolerable.
API change -
Core.Text.Base
no longer exports the constructor and field label forEscapedText
, it is now an opaque type. For a buildingEscapedText
either the existing safeconstructorescapeString
or the new functionwrapEscChar
should be used. For destructingEscapedText
there is a new functiondestrEscapedText
.API change - the argument order of the functions
rtextlabel
andrescapedlabel
inCore.Picture
has changed. The order of angle of rotation and the baseline-left has been swapped so that angle of rotation is first. This matches the other rotated graphics inCore.Picture
.Upper bounds of Cabal build depends relaxed a bit.
Added the
UNil
type toCore.Geometry
and added affine instances for the UNil type, plus Maybe and Pair.UNil
is useful for higher-level drawing (it is used extensively in Wumpus-Basic).Added the function
emptyPath
toCore.Picture
. This creates a null path with an empty list of path segments. Null paths still need a start point - this is minimum needed for bounding box calculation. Improved the PostScript and SVG output so there is no code generated for empty paths and textlabels.Added
vectorPath
toCore.Picture
.Added
boundaryCenter
toCore.BoundingBox
.Improved generated SVG code generation for ellipses / circles.
v0.37.0 to v0.40.0:
Text handling substantially revised. SVG text output is now better aligned to Unicode. The encoding tables for PostScript have been re-thought, the previous implementation had some serious design flaws that should now be rectified.
The rules for escaping special characters has been clarified. Previously the documentation suggested
ampersand-name-semicolon
could be used to escape glyph names however onlyampersand-hash-name-semicolon
worked.ampersand-name-semicolon
is now the correct way. The ampersand-hash prefix is for numeric literals -ampersand-hash-num_literal-semicolon
.Versions of the textlabel functions have been added to
Core.Picture
for escape-parsed text. It is useful for higher-level software to escape the text, do some calculations then render it - going back to un-escaped text for the rendering would be inefficient.The internal representation of paths has changed. They are now represented as start-point plus list of relative path segments rather than start-point plus list of absolute path segments. Using relative path segments makes it cheaper to move paths with
translate
, although calculating the bounding box and rendering to PostScript is more expensive. The rationale for the change is that to make complex pictures, paths are potentially moved many times but the other operations are only performed once.Internal change to Primitives and the PrimCTM - ellipses and labels no longer have a point (center or baseline left) as an element in the datatype, the point is now represented within the PrimCTM.
Name change to
Core.Picture
API - the path construction functionpath
has been renamed toprimPath
.Name change in
Core.FontSize
, the functiontextBoundsEnc
has been renamed totextBoundsEsc
. Wumpus-Core now calls strings that have been parsed for escape characters Escaped Text rather than Encoded Text.Fixed bug where ellipse rotation and scaling calculated the wrong bounding box.
Fixed bug in
illustrateControlPoints
where the control points were drawn but the original primitive was lost.Added initial support for arbitrary SVG attributes (e.g. onmouseover handlers) via
annotateGroup
inCore.Picture
. Arbitrary SVG "defs" can be written into the defs prologue by usingwriteSVG_defs
instead ofwriteSVG
. This functionality is mostly untested!
Modules
[Index]
Downloads
- wumpus-core-0.41.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.12.0, 0.13.0, 0.13.1, 0.14.0, 0.15.0, 0.16.0, 0.17.0, 0.18.0, 0.19.0, 0.20.0, 0.21.0, 0.22.0, 0.23.0, 0.30.0, 0.31.0, 0.32.0, 0.33.0, 0.34.0, 0.35.0, 0.36.0, 0.37.0, 0.40.0, 0.41.0, 0.42.0, 0.42.1, 0.43.0, 0.50.0, 0.51.0, 0.52.0, 0.52.1 |
---|---|
Change log | CHANGES |
Dependencies | base (<4.5), containers (>=0.3 && <=0.6), time (>=1.1.3 && <1.6), vector-space (>=0.6 && <1.0) [details] |
License | BSD-3-Clause |
Copyright | Stephen Tetley <stephen.tetley@gmail.com> |
Author | |
Maintainer | Stephen Tetley <stephen.tetley@gmail.com> |
Revised | Revision 1 made by HerbertValerioRiedel at 2015-11-07T11:46:14Z |
Category | Graphics |
Home page | http://code.google.com/p/copperbox/ |
Uploaded | by StephenTetley at 2010-12-28T13:59:44Z |
Distributions | |
Reverse Dependencies | 5 direct, 0 indirect [details] |
Downloads | 25775 total (0 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |