Skip to main content

Module layout

Module layout 

Source
Expand description

Parsable representation of ordered glyph tokens for raster font atlases.

An OrdTokenLayout layout string is a series of Token expressions, parsed left to right. The position of a token in the layout determines its AtlasIndex in a raster font atlas. The size of the glyph is dependent on the font’s PackingMode.


§Relationship to Tokens and Sequences

Layouts, tokens, and sequences may appear similar in string form, but they represent different concepts:

  • Layout: An ordered list of tokens that define the structure of a font atlas.
  • Token: A set of one or more sequences that resolve to one glyph.
  • Sequence: An ordered list of chars that form one valid input pattern.

Attempting to parse a layout string as a Token will fail, since a token cannot contain multiple tokens.

See the token module documentation for more information about tokens and sequences.


§Examples

Parsing a simple layout string:

use raster_font::core::OrdTokenLayout;

let layout = OrdTokenLayout::parse("abc");
let unique = layout.unique();
assert_eq!(unique.num_regions, 3);
assert_eq!(unique.sequences.len(), 3);

let mut token_iter = layout.iter_tokens();
assert_eq!(token_iter.next(), Some(&Token::from(Sequence::from('a'))));
assert_eq!(token_iter.next(), Some(&Token::from(Sequence::from('b'))));
assert_eq!(token_iter.next(), Some(&Token::from(Sequence::from('c'))));
assert_eq!(token_iter.next(), None);

Union tokens allow alternate input patterns for a single glyph slot:

use raster_font::core::OrdTokenLayout;

// One glyph slot that accepts either "Hello" or "hello", followed by a "!" slot.
let layout = OrdTokenLayout::parse("$(Hello|hello)!");
let unique = layout.unique();
assert_eq!(unique.num_regions, 1);
assert_eq!(unique.sequences.len(), 2);

let mut token_iter = layout.iter_tokens();
assert_eq!(
    token_iter.next(),
    Some(&Token::from(vec![
        Sequence::from("Hello"),
        Sequence::from("hello")
    ]))
);
assert_eq!(token_iter.next(), Some(&Token::from(Sequence::from('!'))));
assert_eq!(token_iter.next(), None);

§Serialization

OrdTokenLayout implements Serialize and Deserialize, round-tripping through its layout string representation. It also implements Display and FromStr for convenient string conversion.

Structs§

OrdTokenLayout
An ordered sequence of font tokens, commonly parsed from a layout string.