artery_font/
header.rs

1use bytemuck::{Zeroable, Pod};
2
3pub const ARTERY_FONT_HEADER_TAG: &[u8; 16] = b"ARTERY/FONT\0\0\0\0\0";
4pub const ARTERY_FONT_HEADER_MAGIC_NO: u32 = 0x4d276a5c;
5pub const ARTERY_FONT_FOOTER_MAGIC_NO: u32 = 0x55ccb363;
6
7#[cfg(not(feature = "double"))]
8pub type Real = f32;
9
10#[cfg(feature = "double")]
11pub type Real = f64;
12
13pub trait TypeCode {
14    fn type_code() -> u32;
15}
16
17impl TypeCode for f32 {
18    fn type_code() -> u32 {
19        0x14
20    }
21}
22
23impl TypeCode for f64 {
24    fn type_code() -> u32 {
25        0x18
26    }
27}
28
29#[derive(Debug, Copy, Clone, Zeroable, Pod)]
30#[repr(C)]
31pub struct ArteryFontHeader {
32    pub tag: [u8; 16],
33    pub magic_no: u32,
34    pub version: u32,
35    pub flags: u32,
36    pub real_type: u32,
37    pub reserved: [u32; 4],
38    pub metadata_format: u32,
39    pub metadata_length: u32,
40    pub variant_count: u32,
41    pub variants_length: u32,
42    pub image_count: u32,
43    pub images_length: u32,
44    pub appendix_count: u32,
45    pub appendices_length: u32,
46    pub reserved2: [u32; 8]
47}
48
49#[derive(Debug, Copy, Clone, Zeroable, Pod)]
50#[repr(C)]
51pub struct ArteryFontFooter {
52    pub salt: u32,
53    pub magic_no: u32,
54    pub reserved: [u32;4],
55    pub total_length: u32
56}
57
58
59#[derive(Debug, Copy, Clone, Zeroable, Pod)]
60#[repr(C)]
61pub struct FontVariantHeader {
62    pub flags: u32,
63    pub weight: u32,
64    pub codepoint_type: u32,
65    pub image_type: u32,
66    pub fallback_variant: u32,
67    pub fallback_glyph: u32,
68    pub reserved: [u32; 6],
69    pub metrics: [Real; 32],
70    pub name_length: u32,
71    pub metadata_length: u32,
72    pub glyph_count: u32,
73    pub kern_pair_count: u32,
74}
75
76#[derive(Debug, Copy, Clone, Zeroable, Pod)]
77#[repr(C)]
78pub struct ImageHeader {
79    pub flags: u32,
80    pub encoding: u32,
81    pub width: u32,
82    pub height: u32,
83    pub channels: u32,
84    pub pixel_format: u32,
85    pub image_type: u32,
86    pub row_length: u32,
87    pub orientation: i32,
88    pub child_images: u32,
89    pub texture_flags: u32,
90    pub reserved: [u32; 3],
91    pub metadata_length: u32,
92    pub data_length: u32
93}
94
95#[derive(Debug, Copy, Clone, Zeroable, Pod)]
96#[repr(C)]
97pub struct AppendixHeader {
98    pub metadata_length: u32,
99    pub data_length: u32
100}