Skip to main content

font_test_data/
lib.rs

1//! test data shared between various fontations crates.
2
3pub mod bebuffer;
4pub mod cmap;
5pub mod gdef;
6pub mod gpos;
7pub mod gsub;
8pub mod ift;
9pub mod layout;
10pub mod type1;
11
12pub static CMAP12_FONT1: &[u8] = include_bytes!("../test_data/ttf/cmap12_font1.ttf");
13
14pub static CMAP14_FONT1: &[u8] = include_bytes!("../test_data/ttf/cmap14_font1.ttf");
15
16pub static CMAP4_SYMBOL_PUA: &[u8] = include_bytes!("../test_data/ttf/cmap4_symbol_pua.ttf");
17
18pub static CMAP6: &[u8] = include_bytes!("../test_data/ttf/cmap6.ttf");
19
20pub static CMAP10: &[u8] = include_bytes!("../test_data/ttf/cmap10.ttf");
21
22pub static COLR_GRADIENT_RECT: &[u8] =
23    include_bytes!("../test_data/ttf/linear_gradient_rect_colr_1.ttf");
24
25pub static VAZIRMATN_VAR: &[u8] = include_bytes!("../test_data/ttf/vazirmatn_var_trimmed.ttf");
26
27pub static NAMES_ONLY: &[u8] = include_bytes!("../test_data/ttf/names_only.ttf");
28
29pub static VAZIRMATN_VAR_GLYPHS: &str =
30    include_str!("../test_data/extracted/vazirmatn_var_trimmed-glyphs.txt");
31
32pub static SIMPLE_GLYF: &[u8] = include_bytes!("../test_data/ttf/simple_glyf.ttf");
33
34pub static CUBIC_GLYF: &[u8] = include_bytes!("../test_data/ttf/cubic_glyf.ttf");
35
36pub static NOTO_SERIF_DISPLAY_TRIMMED: &[u8] =
37    include_bytes!("../test_data/ttf/noto_serif_display_trimmed.ttf");
38
39pub static NOTO_SERIF_DISPLAY_TRIMMED_GLYPHS: &str =
40    include_str!("../test_data/extracted/noto_serif_display_trimmed-glyphs.txt");
41
42pub static NOTO_SANS_JP_CFF: &[u8] =
43    include_bytes!("../test_data/ttf/NotoSansJP-Regular.subset.otf");
44
45pub static CANTARELL_VF_TRIMMED: &[u8] =
46    include_bytes!("../test_data/ttf/cantarell_vf_trimmed.ttf");
47
48pub static CANTARELL_VF_TRIMMED_GLYPHS: &str =
49    include_str!("../test_data/extracted/cantarell_vf_trimmed-glyphs.txt");
50
51pub static CHARSTRING_PATH_OPS: &[u8] = include_bytes!("../test_data/ttf/charstring_path_ops.ttf");
52
53pub static EMBEDDED_BITMAPS: &[u8] = include_bytes!("../test_data/ttf/embedded_bitmaps.ttf");
54pub static CBDT: &[u8] = include_bytes!("../test_data/ttf/cbdt.ttf");
55
56pub static HVAR_WITH_TRUNCATED_ADVANCE_INDEX_MAP: &[u8] =
57    include_bytes!("../test_data/ttf/hvar_with_truncated_adv_index_map.ttf");
58
59pub static COLRV0V1: &[u8] = include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1.ttf");
60
61pub static COLRV0V1_VARIABLE: &[u8] =
62    include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_variable.ttf");
63
64pub static COLRV1_NO_CLIPLIST: &[u8] =
65    include_bytes!("../test_data/ttf/test_glyphs-glyf_colr_1_no_cliplist.subset.ttf");
66
67pub static CVAR: &[u8] = include_bytes!("../test_data/ttf/cvar.ttf");
68
69pub static STARTING_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/starts_off_curve.ttf");
70
71pub static MOSTLY_OFF_CURVE: &[u8] = include_bytes!("../test_data/ttf/mostly_off_curve.ttf");
72
73pub static INTERPOLATE_THIS: &[u8] = include_bytes!("../test_data/ttf/interpolate_this.ttf");
74
75pub static MATERIAL_SYMBOLS_SUBSET: &[u8] =
76    include_bytes!("../test_data/ttf/material_symbols_subset.ttf");
77
78pub static GLYF_COMPONENTS: &[u8] = include_bytes!("../test_data/ttf/glyf_components.ttf");
79
80pub static AUTOHINT_CMAP: &[u8] = include_bytes!("../test_data/ttf/autohint_cmap.ttf");
81
82pub static NOTOSERIFHEBREW_AUTOHINT_METRICS: &[u8] =
83    include_bytes!("../test_data/ttf/notoserifhebrew_autohint_metrics.ttf");
84
85pub static NOTOSERIFTC_AUTOHINT_METRICS: &[u8] =
86    include_bytes!("../test_data/ttf/notoseriftc_autohint_metrics.ttf");
87
88pub static NOTOSERIF_AUTOHINT_SHAPING: &[u8] =
89    include_bytes!("../test_data/ttf/notoserif_autohint_shaping.ttf");
90
91pub static TTHINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tthint_subset.ttf");
92
93pub static VORG: &[u8] = include_bytes!("../test_data/ttf/vorg.ttf");
94
95pub static AHEM: &[u8] = include_bytes!("../test_data/ttf/ahem.ttf");
96
97pub static AVAR2_CHECKER: &[u8] = include_bytes!("../test_data/ttf/avar2checker.ttf");
98pub static AMSTELVAR_AVAR2_A: &[u8] = include_bytes!("../test_data/ttf/Amstelvar-avar2.A.ttf");
99
100pub static MATERIAL_ICONS_SUBSET: &[u8] =
101    include_bytes!("../test_data/ttf/material_icons_subset.ttf");
102
103pub static MATERIAL_ICONS_SUBSET_MATRIX: &[u8] =
104    include_bytes!("../test_data/ttf/material_icons_subset_matrix.ttf");
105
106pub static TINOS_SUBSET: &[u8] = include_bytes!("../test_data/ttf/tinos_subset.ttf");
107
108pub static NOTO_HANDWRITING_SBIX: &[u8] =
109    include_bytes!("../test_data/ttf/noto_handwriting-sbix.ttf");
110
111pub static COUSINE_HINT_SUBSET: &[u8] = include_bytes!("../test_data/ttf/cousine_hint_subset.ttf");
112
113pub mod morx {
114    // The following taken from the Unicode text rendering test fonts:
115    // <https://github.com/unicode-org/text-rendering-tests/tree/main/fonts>
116    pub static ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXOne.ttf");
117    pub static FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXFour.ttf");
118    pub static EIGHTEEN: &[u8] = include_bytes!("../test_data/ttf/TestMORXEighteen.ttf");
119    pub static THIRTY_FOUR: &[u8] = include_bytes!("../test_data/ttf/TestMORXThirtyfour.ttf");
120    pub static FORTY_ONE: &[u8] = include_bytes!("../test_data/ttf/TestMORXFourtyone.ttf");
121}
122
123pub mod varc {
124    pub static CJK_6868: &[u8] = include_bytes!("../test_data/ttf/varc-6868.ttf");
125    pub static CONDITIONALS: &[u8] = include_bytes!("../test_data/ttf/varc-ac01-conditional.ttf");
126}
127
128pub mod closure {
129    pub static SIMPLE: &[u8] = include_bytes!("../test_data/ttf/simple_closure.ttf");
130    pub static SIMPLE_GLYPHS: &str = include_str!("../test_data/fea/simple_closure_glyphs.txt");
131    pub static RECURSIVE: &[u8] = include_bytes!("../test_data/ttf/recursive_closure.ttf");
132    pub static RECURSIVE_GLYPHS: &str =
133        include_str!("../test_data/fea/recursive_closure_glyphs.txt");
134    pub static CONTEXTUAL: &[u8] = include_bytes!("../test_data/ttf/context_closure.ttf");
135    pub static CONTEXTUAL_GLYPHS: &str =
136        include_str!("../test_data/fea/context_closure_glyphs.txt");
137    pub static RECURSIVE_CONTEXTUAL: &[u8] =
138        include_bytes!("../test_data/ttf/recursive_context_closure.ttf");
139    pub static RECURSIVE_CONTEXTUAL_GLYPHS: &str =
140        include_str!("../test_data/fea/recursive_context_closure_glyphs.txt");
141    // reuses glyph set from above
142    pub static CYCLIC_CONTEXTUAL: &[u8] =
143        include_bytes!("../test_data/ttf/cyclic_context_closure.ttf");
144    pub static CHAIN_CONTEXT_FORMAT3_BITS: &[u8] =
145        include_bytes!("../test_data/ttf/context_closure_unreachable_rule.ttf");
146    pub static CHAIN_CONTEXT_FORMAT3_BITS_GLYPHS: &str =
147        include_str!("../test_data/fea/context_closure_unreachable_rule_glyphs.txt");
148    pub static VARIATIONS_CLOSURE: &[u8] =
149        include_bytes!("../test_data/ttf/variations_closure.ttf");
150    pub static VARIATIONS_GLYPHS: &str =
151        include_str!("../test_data/fea/variations_closure_glyphs.txt");
152    pub static CONTEXT_ONLY_REACHABLE: &[u8] =
153        include_bytes!("../test_data/ttf/context_only_reachable.ttf");
154    pub static CONTEXT_ONLY_REACHABLE_GLYPHS: &str =
155        include_str!("../test_data/fea/context_only_reachable_glyphs.txt");
156}
157
158pub mod post {
159
160    #[rustfmt::skip]
161    pub static SIMPLE: &[u8] = &[
162        0x00, 0x02, 0x00, 0x00, // version 2.0
163        0x00, 0x00, 0x00, 0x00, // italic angle
164        0xFF, 0xb5,             // underlinePosition -75
165        0x00, 0x32,             // underlineThickness 50
166        0x00, 0x00, 0x00, 0x00, // fixedpitch
167        0x00, 0x00, 0x00, 0x00, // min/max mem:
168        0x00, 0x00, 0x00, 0x00,
169        0x00, 0x00, 0x00, 0x00,
170        0x00, 0x00, 0x00, 0x00,
171        0x00, 0x0A,             // numGlyphs 10
172                                // glyph name index:
173        0x00, 0x00,              // glyph 0 -> name 0
174        0x00, 0x00,             // glyph 1 -> name 0
175        0x00, 0x03,              // glyph 2 -> name 3 ('space')
176        0x00, 0x04,              // glyph 3 -> name 4 ('exclam')
177        0x00, 0x06,
178        0x00, 0x07,
179        0x00, 0x08,
180        0x01, 0x02,             // glyph 7 -> name 258 first custom
181        0x01, 0x03,             // glyph 8 -> name 258 first custom
182        0x01, 0x04,             // glyph 9 -> name 258 first custom
183        0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, // 5, h e l l o
184        0x02, 0x68, 0x69, // 2, h i
185        0x4, 0x68, 0x6f, 0x6c, 0x61, // 4, h o l a
186    ];
187}
188
189pub mod cff2 {
190    /// CFF2 example table
191    /// <https://learn.microsoft.com/en-us/typography/opentype/spec/cff2#appendix-a-example-cff2-font>
192    pub static EXAMPLE: &[u8] = &[
193        0x02, 0x00, 0x05, 0x00, 0x07, 0xCF, 0x0C, 0x24, 0xC3, 0x11, 0x9B, 0x18, 0x00, 0x00, 0x00,
194        0x00, 0x00, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1C,
195        0x00, 0x01, 0x00, 0x02, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0,
196        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
197        0x01, 0x01, 0x03, 0x05, 0x20, 0x0A, 0x20, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05,
198        0xF7, 0x06, 0xDA, 0x12, 0x77, 0x9F, 0xF8, 0x6C, 0x9D, 0xAE, 0x9A, 0xF4, 0x9A, 0x95, 0x9F,
199        0xB3, 0x9F, 0x8B, 0x8B, 0x8B, 0x8B, 0x85, 0x9A, 0x8B, 0x8B, 0x97, 0x73, 0x8B, 0x8B, 0x8C,
200        0x80, 0x8B, 0x8B, 0x8B, 0x8D, 0x8B, 0x8B, 0x8C, 0x8A, 0x8B, 0x8B, 0x97, 0x17, 0x06, 0xFB,
201        0x8E, 0x95, 0x86, 0x9D, 0x8B, 0x8B, 0x8D, 0x17, 0x07, 0x77, 0x9F, 0xF8, 0x6D, 0x9D, 0xAD,
202        0x9A, 0xF3, 0x9A, 0x95, 0x9F, 0xB3, 0x9F, 0x08, 0xFB, 0x8D, 0x95, 0x09, 0x1E, 0xA0, 0x37,
203        0x5F, 0x0C, 0x09, 0x8B, 0x0C, 0x0B, 0xC2, 0x6E, 0x9E, 0x8C, 0x17, 0x0A, 0xDB, 0x57, 0xF7,
204        0x02, 0x8C, 0x17, 0x0B, 0xB3, 0x9A, 0x77, 0x9F, 0x82, 0x8A, 0x8D, 0x17, 0x0C, 0x0C, 0xDB,
205        0x95, 0x57, 0xF7, 0x02, 0x85, 0x8B, 0x8D, 0x17, 0x0C, 0x0D, 0xF7, 0x06, 0x13, 0x00, 0x00,
206        0x00, 0x01, 0x01, 0x01, 0x1B, 0xBD, 0xBD, 0xEF, 0x8C, 0x10, 0x8B, 0x15, 0xF8, 0x88, 0x27,
207        0xFB, 0x5C, 0x8C, 0x10, 0x06, 0xF8, 0x88, 0x07, 0xFC, 0x88, 0xEF, 0xF7, 0x5C, 0x8C, 0x10,
208        0x06,
209    ];
210}
211
212/// This setup to avoid cross-crate path construction and build.rs because both caused problems for google3
213pub mod colrv1_json {
214    /// Gets the expected value for a colrv1 json test
215    pub fn expected(set_name: &str, settings: &[(&str, f32)]) -> &'static str {
216        let mut key = Vec::with_capacity(1 + settings.len());
217        key.push("colrv1_".to_string() + &set_name.to_ascii_lowercase());
218        key.extend(settings.iter().map(|(t, v)| format!("{t}_{v}")));
219        let key = key.join("_");
220        // you could generate the cases in bash using something like:
221        // for f in $(ls font-test-data/test_data/colrv1_json); do echo "\"$f\" => include_str!(\"../test_data/colrv1_json/$f\"),"; done
222        match key.as_str() {
223            "colrv1_clipbox" => include_str!("../test_data/colrv1_json/colrv1_clipbox"),
224            "colrv1_clipbox_CLIO_200" => include_str!("../test_data/colrv1_json/colrv1_clipbox_CLIO_200"),
225            "colrv1_colored_circles_v0" => include_str!("../test_data/colrv1_json/colrv1_colored_circles_v0"),
226            "colrv1_composite_mode" => include_str!("../test_data/colrv1_json/colrv1_composite_mode"),
227            "colrv1_extend_mode" => include_str!("../test_data/colrv1_json/colrv1_extend_mode"),
228            "colrv1_extend_mode_COL1_-0.25_COL3_0.25" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-0.25_COL3_0.25"),
229            "colrv1_extend_mode_COL1_0.5_COL3_-0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_0.5_COL3_-0.5"),
230            "colrv1_extend_mode_COL1_-1.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL1_-1.5"),
231            "colrv1_extend_mode_COL2_-0.3" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL2_-0.3"),
232            "colrv1_extend_mode_COL3_0.5" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_0.5"),
233            "colrv1_extend_mode_COL3_1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1"),
234            "colrv1_extend_mode_COL3_1_COL2_1.5_COL1_2" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_COL3_1_COL2_1.5_COL1_2"),
235            "colrv1_extend_mode_GRR0_-200_GRR1_-300" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-200_GRR1_-300"),
236            "colrv1_extend_mode_GRR0_430_GRR1_40" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_430_GRR1_40"),
237            "colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-0.9" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-0.9"),
238            "colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-1.1" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRR0_-50_COL3_-2_COL2_-2_COL1_-1.1"),
239            "colrv1_extend_mode_GRX0_1000_GRX1_-1000_GRR0_-1000_GRR1_200" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRX0_1000_GRX1_-1000_GRR0_-1000_GRR1_200"),
240            "colrv1_extend_mode_GRX0_-1000_GRX1_-1000_GRR0_-1000_GRR1_-900" => include_str!("../test_data/colrv1_json/colrv1_extend_mode_GRX0_-1000_GRX1_-1000_GRR0_-1000_GRR1_-900"),
241            "colrv1_foreground_color" => include_str!("../test_data/colrv1_json/colrv1_foreground_color"),
242            "colrv1_gradient_p2_skewed" => include_str!("../test_data/colrv1_json/colrv1_gradient_p2_skewed"),
243            "colrv1_gradient_stops_repeat" => include_str!("../test_data/colrv1_json/colrv1_gradient_stops_repeat"),
244            "colrv1_no_cycle_multi_colrglyph" => include_str!("../test_data/colrv1_json/colrv1_no_cycle_multi_colrglyph"),
245            "colrv1_paint_glyph_nested" => include_str!("../test_data/colrv1_json/colrv1_paint_glyph_nested"),
246            "colrv1_paint_rotate" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate"),
247            "colrv1_paint_rotate_ROTA_40" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTA_40"),
248            "colrv1_paint_rotate_ROTX_-250_ROTY_-250" => include_str!("../test_data/colrv1_json/colrv1_paint_rotate_ROTX_-250_ROTY_-250"),
249            "colrv1_paint_scale" => include_str!("../test_data/colrv1_json/colrv1_paint_scale"),
250            "colrv1_paint_scale_SCOX_200_SCOY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCOX_200_SCOY_200"),
251            "colrv1_paint_scale_SCSX_0.25_SCOY_0.25" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_0.25_SCOY_0.25"),
252            "colrv1_paint_scale_SCSX_-1_SCOY_-1" => include_str!("../test_data/colrv1_json/colrv1_paint_scale_SCSX_-1_SCOY_-1"),
253            "colrv1_paint_skew" => include_str!("../test_data/colrv1_json/colrv1_paint_skew"),
254            "colrv1_paint_skew_SKCX_200_SKCY_200" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKCX_200_SKCY_200"),
255            "colrv1_paint_skew_SKXA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKXA_20"),
256            "colrv1_paint_skew_SKYA_20" => include_str!("../test_data/colrv1_json/colrv1_paint_skew_SKYA_20"),
257            "colrv1_paint_transform" => include_str!("../test_data/colrv1_json/colrv1_paint_transform"),
258            "colrv1_paint_translate" => include_str!("../test_data/colrv1_json/colrv1_paint_translate"),
259            "colrv1_paint_translate_TLDX_100_TLDY_100" => include_str!("../test_data/colrv1_json/colrv1_paint_translate_TLDX_100_TLDY_100"),
260            "colrv1_sweep_coincident" => include_str!("../test_data/colrv1_json/colrv1_sweep_coincident"),
261            "colrv1_sweep_varsweep" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep"),
262            "colrv1_sweep_varsweep_SWC1_-0.25_SWC2_0.083333336_SWC3_0.083333336_SWC4_0.25" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWC1_-0.25_SWC2_0.083333336_SWC3_0.083333336_SWC4_0.25"),
263            "colrv1_sweep_varsweep_SWPE_-45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-45"),
264            "colrv1_sweep_varsweep_SWPE_-90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPE_-90"),
265            "colrv1_sweep_varsweep_SWPS_0" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_0"),
266            "colrv1_sweep_varsweep_SWPS_-45_SWPE_45" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_-45_SWPE_45"),
267            "colrv1_sweep_varsweep_SWPS_45_SWPE_-45_SWC1_-0.25_SWC2_-0.416687_SWC3_-0.583313_SWC4_-0.75" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_45_SWPE_-45_SWC1_-0.25_SWC2_-0.416687_SWC3_-0.583313_SWC4_-0.75"),
268            "colrv1_sweep_varsweep_SWPS_90" => include_str!("../test_data/colrv1_json/colrv1_sweep_varsweep_SWPS_90"),
269            "colrv1_variable_alpha" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha"),
270            "colrv1_variable_alpha_APH1_-0.7" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH1_-0.7"),
271            "colrv1_variable_alpha_APH2_-0.7_APH3_-0.2" => include_str!("../test_data/colrv1_json/colrv1_variable_alpha_APH2_-0.7_APH3_-0.2"),
272            _ => panic!("No entry for {key}, if this is a new test you might need to add a case"),
273        }
274    }
275}
276
277pub mod ttc {
278    pub static TTC: &[u8] = include_bytes!("../test_data/ttc/TTC.ttc");
279}
280
281pub mod meta {
282    // the table from the binary for 'Sankofa'
283    #[rustfmt::skip]
284    pub static SIMPLE_META_TABLE: &[u8] = &[
285        0x00, 0x00, 0x00, 0x01, // version 1
286        0x00, 0x00, 0x00, 0x00, // flags 0
287        0x00, 0x00, 0x00, 0x28, // reserved (?)
288        0x00, 0x00, 0x00, 0x02, // data_maps_count 2
289        0x64, 0x6c, 0x6e, 0x67, // tag: dlng
290        0x00, 0x00, 0x00, 0x28, // data offset
291        0x00, 0x00, 0x00, 0x0d, // data length
292        0x73, 0x6c, 0x6e, 0x67, // tag: slng
293        0x00, 0x00, 0x00, 0x35, // data offset
294        0x00, 0x00, 0x00, 0x04, // length
295        0x65, 0x6e, 0x2d, 0x6c,
296        0x61, 0x74, 0x6e, 0x2c,
297        0x20, 0x6c, 0x61, 0x74,
298        0x6e, 0x6c, 0x61, 0x74,
299        0x6e, 0x00, 0x00, 0x00,
300    ];
301}
302
303pub mod gvar {
304    pub static USE_MY_METRICS: &[u8] = include_bytes!("../test_data/ttf/gvar_use_my_metrics.ttf");
305}