1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
use crate::{color::ColorPalettes, GlyphNames};
use super::{
attribute::Attributes,
charmap::Charmap,
color::ColorGlyphCollection,
instance::{LocationRef, Size},
metrics::{GlyphMetrics, Metrics},
outline::OutlineGlyphCollection,
string::{LocalizedStrings, StringId},
variation::{AxisCollection, NamedInstanceCollection},
FontRef,
};
use crate::bitmap::BitmapStrikes;
/// Interface for types that can provide font metadata.
pub trait MetadataProvider<'a>: Sized {
/// Returns the primary attributes for font classification-- stretch,
/// style and weight.
fn attributes(&self) -> Attributes;
/// Returns the collection of variation axes.
fn axes(&self) -> AxisCollection<'a>;
/// Returns the collection of named variation instances.
fn named_instances(&self) -> NamedInstanceCollection<'a>;
/// Returns an iterator over the collection of localized strings for the
/// given informational string identifier.
fn localized_strings(&self, id: StringId) -> LocalizedStrings<'a>;
/// Returns the mapping from glyph identifiers to names.
fn glyph_names(&self) -> GlyphNames<'a>;
/// Returns the global font metrics for the specified size and location in
/// normalized variation space.
fn metrics(&self, size: Size, location: impl Into<LocationRef<'a>>) -> Metrics;
/// Returns the glyph specific metrics for the specified size and location
/// in normalized variation space.
fn glyph_metrics(&self, size: Size, location: impl Into<LocationRef<'a>>) -> GlyphMetrics<'a>;
/// Returns the character to nominal glyph identifier mapping.
fn charmap(&self) -> Charmap<'a>;
/// Returns the collection of scalable glyph outlines.
///
/// If the font contains multiple outline sources, this method prioritizes
/// `glyf`, `CFF2` and `CFF` in that order. To select a specific outline
/// source, use the [`OutlineGlyphCollection::with_format`] method.
fn outline_glyphs(&self) -> OutlineGlyphCollection<'a>;
/// Returns a collection of paintable color glyphs.
fn color_glyphs(&self) -> ColorGlyphCollection<'a>;
/// Returns a collection of color palettes for color glyphs.
fn color_palettes(&self) -> ColorPalettes<'a>;
/// Returns a collection of bitmap strikes.
fn bitmap_strikes(&self) -> BitmapStrikes<'a>;
}
impl<'a> MetadataProvider<'a> for FontRef<'a> {
/// Returns the primary attributes for font classification-- stretch,
/// style and weight.
fn attributes(&self) -> Attributes {
Attributes::new(self)
}
/// Returns the collection of variation axes.
fn axes(&self) -> AxisCollection<'a> {
AxisCollection::new(self)
}
/// Returns the collection of named variation instances.
fn named_instances(&self) -> NamedInstanceCollection<'a> {
NamedInstanceCollection::new(self)
}
/// Returns an iterator over the collection of localized strings for the
/// given informational string identifier.
fn localized_strings(&self, id: StringId) -> LocalizedStrings<'a> {
LocalizedStrings::new(self, id)
}
/// Returns the mapping from glyph identifiers to names.
fn glyph_names(&self) -> GlyphNames<'a> {
GlyphNames::new(self)
}
/// Returns the global font metrics for the specified size and location in
/// normalized variation space.
fn metrics(&self, size: Size, location: impl Into<LocationRef<'a>>) -> Metrics {
Metrics::new(self, size, location)
}
/// Returns the glyph specific metrics for the specified size and location
/// in normalized variation space.
fn glyph_metrics(&self, size: Size, location: impl Into<LocationRef<'a>>) -> GlyphMetrics<'a> {
GlyphMetrics::new(self, size, location)
}
/// Returns the character to nominal glyph identifier mapping.
fn charmap(&self) -> Charmap<'a> {
Charmap::new(self)
}
/// Returns the collection of scalable glyph outlines.
///
/// If the font contains multiple outline sources, this method prioritizes
/// `glyf`, `CFF2` and `CFF` in that order. To select a specific outline
/// source, use the [`OutlineGlyphCollection::with_format`] method.
fn outline_glyphs(&self) -> OutlineGlyphCollection<'a> {
OutlineGlyphCollection::new(self)
}
// Returns a collection of paintable color glyphs.
fn color_glyphs(&self) -> ColorGlyphCollection<'a> {
ColorGlyphCollection::new(self)
}
/// Returns a collection of color palettes for color glyphs.
fn color_palettes(&self) -> ColorPalettes<'a> {
ColorPalettes::new(self)
}
/// Returns a collection of bitmap strikes.
fn bitmap_strikes(&self) -> BitmapStrikes<'a> {
BitmapStrikes::new(self)
}
}