Crate swash[][src]

Font introspection, complex text shaping and glyph rendering.

Note

Documentation is present but of the “skeleton” variety for the time being. This will be filled in over the coming weeks.

Goals

This crate aims to lay the foundation for a cross-platform, high performance set of components for beautiful typography. In particular, this library focuses on fonts and operations that are directly applicable to them. For the most part, the desire is to be unopinionated with respect to resource management, higher level layout and lower level rendering.

Non goals

Due to the intention of being generally useful and easy to integrate, the following areas of related interest are specifically avoided:

  • Text layout. This is highly application specific and the requirements for both features and performance differ greatly among web browsers, word processors, text editors, game engines, etc. There is a sibling crate in development that does provide general purpose text layout based on this library and will be released shortly.

  • Composition. Like layout, this is also application specific in addition to being hardware dependent. Glyph catching, geometry batching and rendering all belong here and should integrate well with the application and the hardware environment. There is also a sibling crate that attempts to provide these services that will be released in the future.

General features

  • Simple borrowed font representation that imposes no requirements on resource management leading to…
  • Thread friendly architecture. Acceleration structures are completely separate from font data and can be retained per thread, thrown away and rematerialized at any time
  • Zero transient heap allocations. All scratch buffers and caches are maintained by contexts. Resources belonging to evicted cache entries are immediately reused

Introspection

  • Enumerating font collections (ttc/otc)
  • Localized strings including names and other metadata
  • Font variation axes and named instances
  • Comprehensive font and per-glyph metrics (with synthesized vertical metrics if not provided)
  • Primary attributes (stretch, weight, style) with support for synthesis suggestions based on available variations and scaler transforms (faux bold and oblique)
  • Color palettes
  • Embedded color and alpha bitmap strikes
  • Character to nominal glyph identifier mapping with support for enumerating all pairs
  • Writing systems: provides a list of all supported script/language pairs and their associated typographic features
  • All introspection is zero allocation and no copy

Complex text shaping

  • Full support for OpenType advanced typography (GSUB/GPOS)
  • Partial support for Apple advanced typography: glyph metamorphosis (morx) is fully supported while the current extended kerning support (kerx) covers most common cases (kerning and mark positioning)
  • Full support for variable fonts including positioning and feature substitutions
  • Implementation of the Universal Shaping Engine for complex scripts such as Devangari, Malayalam, etc.
  • Arabic joining including Urdu style climbing runs
  • Basic shaping support: ligatures, marks, kerning, etc.
  • Enable/disable individual features with argument support for activating alternates such as swashes
  • Pre-shaping cluster parsing with an iterative mapping technique (including normalization) allowing for sophisticated font fallback mechanisms without the expense of heuristically shaping runs
  • Shaper output is structured by cluster including original source ranges and provides simple identification of ligatures and complex multi-glyph clusters
  • Pass-through per character user data (a single u32) for accurate association of style properties with glyphs
  • Pass-through per cluster information for retaining text analysis results such as word and line boundaries, whitespace identification and emoji presentation modes
  • Shaping of vertical runs is not yet provided but a prototype exists and will be released soon

Scaling

  • Scalable outlines with full variation support (TrueType and Postscript)
  • Asymmetric vertical hinting (TrueType and Postscript)
  • Horizontal subpixel rendering and fractional positioning
  • Full emoji support for Apple (sbix), Google (CBLC/CBDT) and Microsoft (COLR/CPAL) formats
  • Path effects (stroking and dashing)
  • Transforms including synthetic emboldening and affine transformations
  • Customizable glyph source prioritization (best fit color bitmap -> exact size alpha bitmap -> outline)

Text analysis

  • Unicode character properties related to layout and shaping
  • Character composition and decomposition (canonical and compatible)
  • Complex, script aware cluster segmentation
  • Single pass, iterator based analysis determines word and line boundaries and detects whether bidi resolution is necessary

Re-exports

pub use zeno;

Modules

ident

Helpers for uniquely identifying fonts.

iter

Collection of various iterators over metadata contained in a font.

proxy

Proxies used to efficiently rematerialize metadata.

scale

Scaling, hinting and rasterization of visual glyph representations.

shape

Mapping complex text to a sequence of positioned glyphs.

text

Character properties and textual analysis.

Structs

Attributes

Primary attributes for font classification: stretch, weight and style.

BitmapStrike

Collection of bitmaps of a specific size and format.

Charmap

Maps characters to nominal glyph identifiers.

ColorPalette

Collection of colors.

Feature

Typographic rule that produces modifications to a sequence of glyphs.

FontDataRef

Reference to the content of a font file.

FontRef

Reference to a font.

GlyphMetrics

Glyph advances, side bearings and vertical origins.

Instance

Named instance in a variable font.

LocalizedString

Represents a single localized name in a font.

Metrics

Global font metrics.

ObliqueAngle

Angle of an oblique style in degrees from -90 to 90.

Stretch

Visual width of a font– a relative change from the normal aspect ratio.

Synthesis

Synthesis suggestions for mistmatched font attributes.

TagAndValue

Setting combining a tag and a value for features and variations.

Variation

Axis of variation in a variable font.

Weight

Visual weight class of a font on a scale from 1 to 1000.

WritingSystem

Script, language and associated features.

Enums

Action

Modification performed by a feature.

StringId

Identifier for well-known localized strings in a font.

Style

Visual style or ‘slope’ of a font.

Usability

Theme of a palette with respect to background color.

Functions

tag_from_bytes

Creates a tag from four bytes.

tag_from_str_lossy

Creates a tag from the first four bytes of a string, inserting spaces for any missing bytes.

Type Definitions

GlyphId

Glyph identifier.

NormalizedCoord

Normalized variation coordinate in 2.14 fixed point format.

Tag

Four byte tag value.