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

PortabilityGHC with TypeFamilies and more




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.


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.