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

PortabilityGHC with TypeFamilies and more
Stabilityunstable
Maintainerstephen.tetley@gmail.com

Wumpus.Core.FontSize

Contents

Description

Font size calculation for Label's and their bounding boxes.

Calculations are based on metrics derived from Courier at 48pt. As Courier is a monospaced font, bounding boxes calculated for other font families will usually have longer width than is necessary for the printed text.

This is a deficiency of Wumpus, but alternatives would have significant implementation complexity.

Synopsis

Type synonyms

Courier metrics at 48 point

courier48_width :: Num u => uSource

The width of a letter in Courier at 48 pt.

The value is not entirely accurate but it is satisfactory.

courier48_body_height :: Num u => uSource

The height of a letter without accents, ascenders or descenders in Courier at 48 pt .

The value is not entirely accurate but it is satisfactory - some letters are taller than others (e.g. numbers are taller then capitals).

courier48_height :: Num u => uSource

The common maximum height of a letter in Courier at 48pt.

By common maximum the letter is allowed to have both an accent or ascender and a descender.

Naturally the height is 48.0.

courier48_descender_depth :: Num u => uSource

The depth of a descender in Courier at 48 pt.

Also the height of an ascender.

courier48_spacer_width :: Num u => uSource

The spacing between letters printed directly with PostScript's show command for Courier at 48 pt.

The value is not entirely accurate but it is satisfactory.

Metrics calculation

widthAt48pt :: Fractional u => CharCount -> uSource

Width of the supplied string when printed at 48pt.

textWidth :: Fractional u => FontSize -> CharCount -> uSource

Text width at sz point size of the string s. All characters are counted literally - special chars may cause problems (this a current deficiency of Wumpus).

textHeight :: Num u => FontSize -> uSource

Text height is just identity/double-coercion, i.e. 18 == 18.0. The size of a font is the maximum height:

 body + descender max + ascender max

descenderDepth :: Fractional u => FontSize -> uSource

Descender depth for font size sz.

textBounds :: (Fractional u, Ord u) => FontSize -> Point2 u -> CharCount -> BoundingBox uSource

Find the bounding box for the character count at the supplied font-size.

The supplied point represents the bottom left corner of the a regular upper-case letter (that is without descenders). The bounding box will always be dropped to accommodate ascenders - no interpretation of the string takes place to see if it actually contains ascenders or descenders.

The metrics used are derived from Courier - a monospaced font. For variable width fonts the calculated bounding box will usually be too long.