name: wumpus-core
version: 0.40.0
license: BSD3
license-file: LICENSE
copyright: Stephen Tetley
maintainer: Stephen Tetley
homepage: http://code.google.com/p/copperbox/
category: Graphics
synopsis: Pure Haskell PostScript and SVG generation.
description:
.
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 to 0.40.0
.
@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:
.
0.37.0 to 0.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 only @ampersand-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
function @path@ has been renamed to @primPath@.
.
* Name change in @Core.FontSize@, the function @textBoundsEnc@
has been renamed to @textBoundsEsc@. 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@ in @Core.Picture@.
Arbitrary SVG \"defs\" can be written into the defs prologue
by using @writeSVG_defs@ instead of @writeSVG@. This
functionality is mostly untested!
.
.
build-type: Simple
stability: unstable
cabal-version: >= 1.2
extra-source-files:
CHANGES,
LICENSE,
demo/AffineTest01.hs,
demo/AffineTest02.hs,
demo/AffineTest03.hs,
demo/AffineTestBase.hs,
demo/DeltaPic.hs,
demo/FontMetrics.hs,
demo/Hyperlink.hs,
demo/KernPic.hs,
demo/LabelPic.hs,
demo/Latin1Pic.hs,
demo/MultiPic.hs,
demo/TextBBox.hs,
demo/TransformEllipse.hs,
demo/TransformPath.hs,
demo/TransformTextlabel.hs,
demo/ZOrderPic.hs,
doc/Guide.pdf,
doc-src/Guide.lhs,
doc-src/Makefile,
doc-src/WorldFrame.hs
library
hs-source-dirs: src
build-depends: base < 5,
containers >= 0.3 && <= 0.4,
time >= 1.1.3 && < 1.2,
vector-space >= 0.6 && < 1.0
exposed-modules:
Wumpus.Core,
Wumpus.Core.AffineTrans,
Wumpus.Core.BoundingBox,
Wumpus.Core.Colour,
Wumpus.Core.FontSize,
Wumpus.Core.Geometry,
Wumpus.Core.GraphicProps,
Wumpus.Core.OutputPostScript,
Wumpus.Core.OutputSVG,
Wumpus.Core.Picture,
Wumpus.Core.PtSize,
Wumpus.Core.Text.Base,
Wumpus.Core.Text.GlyphIndices,
Wumpus.Core.Text.GlyphNames,
Wumpus.Core.Text.Latin1Encoding,
Wumpus.Core.Text.StandardEncoding,
Wumpus.Core.Text.Symbol,
Wumpus.Core.VersionNumber,
Wumpus.Core.WumpusTypes
other-modules:
Wumpus.Core.PageTranslation,
Wumpus.Core.PictureInternal,
Wumpus.Core.PostScriptDoc,
Wumpus.Core.SVGDoc,
Wumpus.Core.TrafoInternal,
Wumpus.Core.Utils.Common,
Wumpus.Core.Utils.JoinList,
Wumpus.Core.Utils.FormatCombinators
extensions:
ghc-options:
includes: