1 | use crate::PropertyKind;
|
2 |
|
3 | macro_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 |
|
32 | define_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 |
|
82 | parse_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 ]
|
132 | fn convert_test() {
|
133 | assert_eq!(Constant::Roman.get_value(PropertyKind::Slant).unwrap(), 0,);
|
134 | }
|
135 | |