1use crate::PropertyKind;
2
3macro_rules! define_constant {
4 (
5 $(
6 $variant:ident = $(($ty:ident, $value:expr),)+
7 )+
8 ) => {
9 #[derive(Copy, Clone, Debug, Eq, PartialEq)]
10 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11 pub enum Constant {
12 $(
13 $variant,
14 )+
15 }
16
17 impl Constant {
18 pub fn get_value(self, kind: PropertyKind) -> Option<u32> {
19 match (self, kind) {
20 $(
21 $(
22 (Constant::$variant, PropertyKind::$ty) => Some($value),
23 )+
24 )+
25 _ => None,
26 }
27 }
28 }
29 };
30}
31
32define_constant! {
33 Thin = (Weight, 0),
34 Extralight = (Weight, 40),
35 Ultralight = (Weight, 40),
36 Light = (Weight, 50),
37 Demilight = (Weight, 55),
38 Semilight = (Weight, 55),
39 Book = (Weight, 75),
40 Regular = (Weight, 80),
41 Normal = (Weight, 80), (Width, 100),
42 Medium = (Weight, 100),
43 Demibold = (Weight, 180),
44 Semibold = (Weight, 180),
45 Bold = (Weight, 200),
46 Extrabold = (Weight, 205),
47 Black = (Weight, 210),
48 Heavy = (Weight, 210),
49 Roman = (Slant, 0),
50 Italic = (Slant, 100),
51 Oblique = (Slant, 110),
52 Ultracondensed = (Width, 50),
53 Extracondensed = (Width, 63),
54 Condensed = (Width, 75),
55 Semicondensed = (Width, 87),
56 // Merged into above Normal
57 // Normal = (Width, 100),
58 Semiexpanded = (Width, 113),
59 Expanded = (Width, 125),
60 Extraexpanded = (Width, 150),
61 Ultraexpanded = (Width, 200),
62 Proportional = (Spacing, 0),
63 Dual = (Spacing, 90),
64 Mono = (Spacing, 100),
65 Charcell = (Spacing, 110),
66 Unknown = (Rgba, 0),
67 Rgb = (Rgba, 1),
68 Bgr = (Rgba, 2),
69 Vrgb = (Rgba, 3),
70 Vbgr = (Rgba, 4),
71 None = (Rgba, 5),
72 Lcdnone = (Lcdfilter, 0),
73 Lcddefault = (Lcdfilter, 1),
74 Lcdlight = (Lcdfilter, 2),
75 Lcdlegacy = (Lcdfilter, 3),
76 Hintnone = (HintStyle, 0),
77 Hintslight = (HintStyle, 1),
78 Hintmedium = (HintStyle, 2),
79 Hintfull = (HintStyle, 3),
80}
81
82parse_enum! {
83 Constant,
84 (Thin, "thin"),
85 (Extralight, "extralight"),
86 (Ultralight, "ultralight"),
87 (Light, "light"),
88 (Demilight, "demilight"),
89 (Semilight, "semilight"),
90 (Book, "book"),
91 (Regular, "regular"),
92 (Normal, "normal"),
93 (Medium, "medium"),
94 (Demibold, "demibold"),
95 (Semibold, "semibold"),
96 (Bold, "bold"),
97 (Extrabold, "extrabold"),
98 (Black, "black"),
99 (Heavy, "heavy"),
100 (Roman, "roman"),
101 (Italic, "italic"),
102 (Oblique, "oblique"),
103 (Ultracondensed, "ultracondensed"),
104 (Extracondensed, "extracondensed"),
105 (Condensed, "condensed"),
106 (Semicondensed, "semicondensed"),
107 (Semiexpanded, "semiexpanded"),
108 (Expanded, "expanded"),
109 (Extraexpanded, "extraexpanded"),
110 (Ultraexpanded, "ultraexpanded"),
111 (Proportional, "proportional"),
112 (Dual, "dual"),
113 (Mono, "mono"),
114 (Charcell, "charcell"),
115 (Unknown, "unknown"),
116 (Rgb, "rgb"),
117 (Bgr, "bgr"),
118 (Vrgb, "vrgb"),
119 (Vbgr, "vbgr"),
120 (None, "none"),
121 (Lcdnone, "lcdnone"),
122 (Lcddefault, "lcddefault"),
123 (Lcdlight, "lcdlight"),
124 (Lcdlegacy, "lcdlegacy"),
125 (Hintnone, "hintnone"),
126 (Hintslight, "hintslight"),
127 (Hintmedium, "hintmedium"),
128 (Hintfull, "hintfull"),
129}
130
131#[test]
132fn convert_test() {
133 assert_eq!(Constant::Roman.get_value(PropertyKind::Slant).unwrap(), 0,);
134}
135