home
readme
diff
tree
note
docs
0commit f30761f040dd4c899a0d9c420156ae2bf50bd6aa
1Author: Mason Wright <mason@lakefox.net>
2Date: Sun Oct 26 21:10:25 2025 -0600
3
4 Going to remove kAccepts
5
6diff --git a/docs/content/adding/adding-css-properties.3 b/docs/content/adding/adding-css-properties.3
7new file mode 100644
8index 0000000..a43e95c
9--- /dev/null
10+++ b/docs/content/adding/adding-css-properties.3
11@@ -0,0 +1,35 @@
12+.TH css adding 2025-10-18 "grim"
13+.Nm Grim
14+.SH DESCRIPTION
15+.BI SCOPE:
16+.UR
17+src/css_parser.cc
18+.UE
19+.BR
20+.UR
21+include/grim.h
22+.UE
23+.br
24+The purpose of this document is to outline the process of adding new styles to CSS.
25+
26+.SH Defining a Property
27+CSS Properties are parsed into ENUM's:
28+.RS
29+.B
30+Property
31+names are stored in KeyType
32+.br
33+.B
34+Values
35+are stored in UnitType
36+.br
37+.B
38+Accepted
39+values are mapped into kAccepts
40+.RE
41+.P
42+.SH The process of converting a property
43+Once the CSS object has been parsed by the parseCSS function it will loop through the properties it found within the object.
44+It will search for the
45+.B KeyType
46+in the keySearch map, if it is found it will pass the KeyType and the string containing the value of the property to getUnits.
47diff --git a/include/grim.h b/include/grim.h
48index 64ee1c7..e67414f 100755
49--- a/include/grim.h
50+++ b/include/grim.h
51@@ -145,11 +145,9 @@ std::vector<std::vector<std::string>> parseSelectorParts(std::string_view);
52
53 bool testSelector(Node*, std::vector<std::vector<std::string>>);
54
55-enum class UnitType {
56- // Operator
57- EQ, LT, GT, LE, GE, ADD, SUB, MULT, DIV,
58+enum class UnitType : char {
59 // Color
60- HEX, RGB, RGBA, HSL, HSLA, COLOR,
61+ HEX, RGB, RGBA, HSL,
62 // Logic
63 AND, OR, NOT, ONLY, COMMA,
64 // Length
65@@ -161,60 +159,75 @@ enum class UnitType {
66 DEG, RAD, GRAD, TURN,
67 // Non-unit numbers
68 NUMBER, INF, NEGINF, NaN, E, PI,
69+
70+
71+
72+ // Global
73+ INHERIT, INITIAL, REVERT, REVERT_LAYER, UNSET, AUTO, NONE,
74+ // Operator
75+ EQ, LT, GT, LE, GE, ADD, SUB, MULT, DIV,
76 // Baseline Position
77 FIRST, LAST,
78 // Box Edge
79- BOX_EDGE, CONTENT, PADDING, BORDER, MARGIN, FILL, STROKE, VIEW,
80- // Content-distribution
81- CONTENT_DISTRIBUTION, BETWEEN, AROUND, EVENLY, STRETCH,
82- // Content-position
83- CONTENT_POSITION, CENTER, START, FLEX_START, FLEX_END,
84+ CONTENT, PADDING, BORDER, MARGIN, FILL, STROKE, VIEW,
85+ // Distribution
86+ NORMAL, STRETCH, BETWEEN, AROUND, EVENLY,
87+ // Position
88+ CENTER, START, END, TOP, LEFT, BOTTOM, RIGHT, INLINE_START, INLINE_END, BLOCK_START, BLOCK_END, SELF_START, SELF_END, FLEX_START, FLEX_END,
89+ FLEX_START, FLEX_END,
90+ // Overflow
91+ CLIP, SCROLL,
92+ SAFE, UNSAFE,
93+ // Display
94+ HIDDEN, VISIBLE,
95 // Display Box
96- DISPLAY_BOX, CONTENTS, NONE,
97+ CONTENTS,
98 // Display Inside
99- DISPLAY_INSIDE, FLOW, FLOW_ROOT, TABLE, FLEX, GRID, RUBY,
100+ FLOW, FLOW_ROOT, TABLE, FLEX, GRID, RUBY,
101 // Display Internal
102- DISPLAY_INTERNAL, TABLE_ROW_GROUP, TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_COLUMN_GROUP,
103+ TABLE_ROW_GROUP, TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_COLUMN_GROUP,
104 TABLE_ROW, TABLE_CELL, TABLE_COLUMN, TABLE_CAPTION, RUBY_BASE, RUBY_TEXT, RUBY_BASE_CONTAINER,
105 RUBY_TEXT_CONTAINER,
106 // Display Legacy
107- DISPLAY_LEGACY, INLINE_BLOCK, INLINE_TABLE, INLINE_GRID, INLINE_FLEX,
108+ INLINE_BLOCK, INLINE_TABLE, INLINE_GRID, INLINE_FLEX,
109 // Display List Item
110- DISPLAY_LISTITEM, LISTITEM,
111+ LISTITEM,
112 // Display Outside
113- DISPLAY_OUTSIDE, BLOCK, INLINE, RUN_IN,
114- // Easing Functions
115- EASING_FUNCTION, LINEAR_EASING_FUNCTION, LINEAR, EASE, EASE_IN, EASE_OUT, EASE_IN_OUT, CUBIC_BEZIER_FUNCTION,
116- STEP_START, STEP_END, STEPS_FUNCTION, JUMP_START, JUMP_END, JUMP_NONE, JUMP_BOTH,
117- // Function
118- CALC, MIN, BLUR, BRIGHTNESS, CONTRAST, DROP_SHADOW, GRAYSCALE, HUE_ROTATE, INVERT, OPACITY, SEPIA, SATURATE,
119- // Position
120- POSITION, TOP, LEFT, BOTTOM, RIGHT, INLINE_START, INLINE_END, BLOCK_START, BLOCK_END, SELF_START, SELF_END, FLEX_START, FLEX_END,
121+ BLOCK, INLINE, RUN_IN,
122 // Shape
123- SHAPE, RADIAL_SHAPE, CIRCLE, ELLIPSE,
124+ RADIAL_SHAPE, CIRCLE, ELLIPSE,
125 // Generic Family
126- GENERIC_FAMILY, SERIF, SANS_SERIF, MONOSPACE, CURSIVE, FANTASY, SYSTEM_UI, UI_SERIF, UI_SANS_SERIF, UI_MONOSPACE,
127+ SERIF, SANS_SERIF, MONOSPACE, CURSIVE, FANTASY, SYSTEM_UI, UI_SERIF, UI_SANS_SERIF, UI_MONOSPACE,
128 UI_ROUNDED, MATH, FANGSONG,
129 // Hue Interpolation
130- HUE_INTERPOLATION, SHORTER_HUE, LONGER_HUE, INCREASING_HUE, DECREASING_HUE,
131- HUE,
132+ SHORTER_HUE, LONGER_HUE, INCREASING_HUE, DECREASING_HUE, HUE,
133 // Line Style
134- LINE_STYLE, HIDDEN, DOTTED, DASHED, SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET,
135+ DOTTED, DASHED, SOLID, DOUBLE, GROOVE, RIDGE, INSET, OUTSET,
136 // Image
137- IMAGE, URL, IMAGE_SET, CROSS_FADE, ELEMENT, GRADIENT,
138- // Overflow Position
139- OVERFLOW_POSITION, SAFE, UNSAFE,
140- // Overflow
141- OVERFLOW, VISIBLE, CLIP, SCROLL, AUTO,
142+ URL, IMAGE_SET, CROSS_FADE, ELEMENT, GRADIENT,
143+ // Appearance *Not added*
144+ MENU_LIST, TEXTFIELD, BASE_SELECT, BUTTON, CHECKBOX,
145+ // Space
146+ SPACE_BETWEEN, SPACE_AROUND, SPACE_EVENLY,
147+ // Background Attachment
148+ LOCAL, FIXED,
149+ // Background Blend Mode
150+ MULTIPLY, OVERLAY, DARKEN, LIGHTEN, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, DIFFERENCE, EXCLUSION, HUE, SATURATION, COLOR, LUMINOSITY
151+ // Background Clip
152+ BORDER_BOX, PADDING_BOX, CONTENT_BOX, TEXT, BORDER_AREA,
153+
154+
155+ // General Function
156+ CALC, MIN, BLUR, BRIGHTNESS, CONTRAST, DROP_SHADOW, GRAYSCALE, HUE_ROTATE, INVERT, OPACITY, SEPIA, SATURATE,
157+ // Easing Functions
158+ EASING_FUNCTION, LINEAR_EASING_FUNCTION, LINEAR, EASE, EASE_IN, EASE_OUT, EASE_IN_OUT, CUBIC_BEZIER_FUNCTION,
159+ STEP_START, STEP_END, STEPS_FUNCTION, JUMP_START, JUMP_END, JUMP_NONE, JUMP_BOTH,
160 // Transform Functions
161 MATRIX, MATRIX3D, PERSPECTIVE, ROTATE, ROTATE3D, ROTATEX, ROTATEY, ROTATEZ, SCALE, SCALE3D, SCALEX, SCALEY, SCALEZ, TRANSLATE, TRANSLATE3D, TRANSLATEX, TRANSLATEY, TRANSLATEZ,
162 SKEW, SKEWX, SKEWY,
163- // URL
164- URL,
165+
166 // Keyword
167- PRINT, SCREEN, TOKEN, FUNC, OPERATOR, GROUP, END,
168- // Property
169- BACKGROUND_COLOR, BASELINE
170+ PRINT, SCREEN, TOKEN, FUNC, GROUP, NO_SUPPORT
171 };
172
173 // 4 bytes
174@@ -226,12 +239,187 @@ union UnitValue {
175 bool BOOL;
176 };
177
178-// 8 bytes + vector
179+// 5 bytes
180 struct Unit {
181- UnitType type;
182+ UnitType type; // char
183 UnitValue value;
184 };
185
186+enum class KeyType : char {
187+ ACCENT_COLOR, ALIGN_CONTENT, ALIGN_ITEMS, ALIGN_SELF, ALL, APPEARANCE, ASPECT_RATIO,
188+ BACKDROP_FILTER, BACKGROUND_ATTACHMENT, BACKGROUND_BLEND_MODE, BACKGROUND_CLIP, BACKGROUND_COLOR,
189+ BACKGROUND_IMAGE,
190+
191+}
192+
193+/*
194+ std::vector is probally not a great way to store the accepted
195+ UnitType's for a given key. However, that can be fixed later
196+*/
197+ // \/ Move to parser.cc \/ //
198+
199+static const std::unordered_map<std::string, KeyType> keySearch {
200+ {"accent-color", KeyType::ACCENT_COLOR},
201+ {"align-content", KeyType::ALIGN_CONTENT},
202+ {"align-items", KeyType::ALIGN_ITEMS},
203+ {"align-self", KeyType::ALIGN_SELF},
204+ {"all", KeyType::ALL},
205+ {"appearance", KeyType::APPEARANCE},
206+ {"aspect-ratio", KeyType::ASPECT_RATIO},
207+ {"backdrop-filter", KeyType::BACKDROP_FILTER},
208+ {"backface-visibility", KeyType::NO_SUPPORT},
209+ {"background-attachment", KeyType::BACKGROUND_ATTACHMENT},
210+ {"background-blend-mode", KeyType::BACKGROUND_BLEND_MODE},
211+ {"background-clip", KeyType::BACKGROUND_CLIP},
212+ {"background-color", KeyType::BACKGROUND_COLOR},
213+
214+}
215+
216+ // It is implided that all values have the global values
217+ // inherit inital revert revert-layer unset
218+
219+
220+
221+static const std::unordered_map<KeyType, std::vector<UnitType>> kAccepts {
222+ {KeyType::ACCENT_COLOR, {UnitType::AUTO, UnitType::HEX, UnitType::RGB, UnitType::RGBA, UnitType::HSL}},
223+ {
224+ KeyType::ALIGN_CONTENT,
225+ {
226+ UnitType::NORMAL, UnitType::START, UnitType::CENTER, UnitType::END,
227+ UnitType::FLEX_START, UnitType::FLEX_END, UnitType::BASELINE, UnitType::FIRST, UnitType::LAST, UnitType::SPACE_BETWEEN,
228+ UnitType::SPACE_AROUND, UnitType::SPACE_EVENLY, UnitType::STRETCH, UnitType::SAFE, UnitType::UNSAFE, UnitType::CENTER
229+ }
230+ },
231+ {
232+ KeyType::ALIGN_ITEMS,
233+ {
234+ UnitType::NORMAL, UnitType::START, UnitType::CENTER, UnitType::END, UnitType::FLEX_START, UnitType::FLEX_END, UnitType::SELF_START,
235+ UnitType::SELF_END, UnitType::ANCHOR_CENTER, UnitType::BASELINE, UnitType::FIRST, UnitType::LAST, UnitType::STRETCH,
236+ UnitType::SAFE, UnitType::UNSAFE, UnitType::CENTER
237+ }
238+ },
239+ {
240+ KeyType::ALIGN_SELF,
241+ {
242+ UnitType::AUTO, UnitType::NORMAL, UnitType::START, UnitType::CENTER, UnitType::END, UnitType::FLEX_START, UnitType::FLEX_END,
243+ UnitType::SELF_START, UnitType::SELF_END, UnitType::ANCHOR_CENTER, UnitType::BASELINE, UnitType::FIRST, UnitType::LAST,
244+ UnitType::STRETCH, UnitType::SAFE, UnitType::UNSAFE, UnitType::CENTER
245+ }
246+ },
247+
248+ {
249+ // These are the global values but thats all "all" accepts so I put them there
250+ KeyType::ALL,
251+ {
252+ UnitType::INTIAL, UnitType::INHERIT, UnitType::UNSET, UnitType::REVERT, UnitType::REVERT_LAYER
253+ }
254+ },
255+/*
256+ Missing:
257+anchor-name
258+animation-composition
259+animation-delay
260+animation-direction
261+animation-duration
262+animation-fill-mode
263+animation-iteration-count
264+animation-name
265+animation-play-state
266+animation-range-end
267+animation-range-start
268+animation-range (shorthand)
269+animation-timeline
270+animation-timing-function
271+animation (shorthand)
272+*/
273+ {
274+ KeyType::APPEARANCE,
275+ {
276+ UnitType::NONE, UnitType::AUTO, UnitType::MENULIST_BUTTON, UnitType::TEXTFIELD, UnitType::BASE_SELECT, UnitType::BUTTON, UnitType::CHECKBOX
277+ }
278+ },
279+ {
280+ KeyType::ASPECT_RATIO,
281+ {
282+ UnitType::NUMBER, UnitType::AUTO, UnitType::DIV
283+ }
284+ },
285+
286+
287+ {
288+ KeyType::BACKDROP_FILTER,
289+ {
290+ UnitType::NONE, UnitType::URL, UnitType::BLUR, UnitType::BRIGHTNESS, UnitType::CONTRAST, UnitType::DROP_SHADOW, UnitType::GRAYSCALE,
291+ UnitType::HURE_ROTATE, UnitType::INVERT, UnitType::OPACITY, UnitType::SEPIA, UnitType::SATURATE,
292+ }
293+ },
294+ {
295+ KeyType::BACKGROUND_ATTACHMENT,
296+ {
297+ UnitType::SCROLL, UnitType::FIXED, UnitType::LOCAL,
298+ }
299+ },
300+ {
301+ KeyType::BACKGROUND_BLEND_MODE,
302+ {
303+ UnitType::NORMAL,
304+ UnitType::MULTIPLY,
305+ UnitType::SCREEN,
306+ UnitType::OVERLAY,
307+ UnitType::DARKEN,
308+ UnitType::LIGHTEN,
309+ UnitType::COLOR_DODGE,
310+ UnitType::COLOR_BURN,
311+ UnitType::HARD_LIGHT,
312+ UnitType::SOFT_LIGHT,
313+ UnitType::DIFFERENCE,
314+ UnitType::EXCLUSION,
315+ UnitType::HUE,
316+ UnitType::SATURATION,
317+ UnitType::COLOR,
318+ UnitType::LUMINOSITY,
319+ }
320+ },
321+ {
322+ KeyType::BACKGROUD_CLIP,
323+ {
324+ UnitType::BORDER_BOX,
325+ UnitType::PADDING_BOX,
326+ UnitType::CONTENT_BOX,
327+ UnitType::TEXT,
328+ UnitType::BORDER_AREA,
329+ }
330+ },
331+ {
332+ KeyType::BACKGROUND_COLOR,
333+ {
334+ UnitType::HEX,
335+ UnitType::RGB,
336+ UnitType::RGBA,
337+ UnitType::HSL,
338+ }
339+ },
340+ {
341+ KeyType::,
342+ {
343+ UnitType::,
344+ }
345+ },
346+ {
347+ KeyType::,
348+ {
349+ UnitType::,
350+ }
351+ },
352+
353+ {
354+ KeyType::,
355+ {
356+ UnitType::,
357+ }
358+ },
359+}
360+
361 enum class SheetType {
362 CONTAINER, COUNTER, FONTFACE, FONTFEATURE, SWASH, ANNOTATION, ORNAMENTS, STYLISTIC, STYLESET, CHARACTERVARIANT, FONTPALETTEVALUES,
363 IMPORT, KEYFRAMES, LAYER, NAMESPACE, PAGE, PROPERTY, ROOT, SHEET, MEDIA, STARTINGSTYLE, STYLE
364@@ -259,13 +447,12 @@ class Sheet {
365 std::string name;
366 std::string path;
367 std::vector<std::vector<std::string>> selector;
368- std::unordered_map<std::string, std::string> properties;
369+ std::vector<int> indexes;
370+
371+ std::unordered_map<Key, std::vector<Unit>> properties;
372
373 SheetType type;
374 std::unordered_map<std::string, std::string> variables;
375-
376- Sheet* parent;
377- std::vector<Sheet> children;
378 };
379
380 class Window;
381diff --git a/src/parser.cc b/src/parser.cc
382index f29c1c2..36ecc5a 100755
383--- a/src/parser.cc
384+++ b/src/parser.cc
385@@ -580,125 +580,125 @@ static constexpr SuffixParse table[] = {
386 {"s", UnitType::SECOND,1},
387 };
388
389-static const std::unordered_map<std::string_view, std::pair<UnitType, UnitType>> kMatch{
390- {"+",{UnitType::OPERATOR, UnitType::ADD}},
391- {"-",{UnitType::OPERATOR, UnitType::SUB}},
392- {"*",{UnitType::OPERATOR, UnitType::MULT}},
393- {"/",{UnitType::OPERATOR, UnitType::DIV}},
394- {"==", {UnitType::OPERATOR, UnitType::EQ}},
395- {">",{UnitType::OPERATOR, UnitType::GT}},
396- {"<",{UnitType::OPERATOR, UnitType::LT}},
397- {">=",{UnitType::OPERATOR, UnitType::GE}},
398- {"<=",{UnitType::OPERATOR, UnitType::LE}},
399- {"infinity",{UnitType::TOKEN, UnitType::INF}},
400- {"-infinity",{UnitType::TOKEN, UnitType::NEGINF}},
401- {"NaN",{UnitType::TOKEN, UnitType::NaN}},
402- {"e",{UnitType::TOKEN, UnitType::E}},
403- {"pi",{UnitType::TOKEN, UnitType::PI}},
404- {"content-box",{UnitType::BOX_EDGE, UnitType::CONTENT}},
405- {"padding-box",{UnitType::BOX_EDGE, UnitType::PADDING}},
406- {"border-box",{UnitType::BOX_EDGE, UnitType::BORDER}},
407- {"margin-box",{UnitType::BOX_EDGE, UnitType::MARGIN}},
408- {"fill-box",{UnitType::BOX_EDGE, UnitType::FILL}},
409- {"stroke-box",{UnitType::BOX_EDGE, UnitType::STROKE}},
410- {"view-box",{UnitType::BOX_EDGE, UnitType::VIEW}},
411- {"space-between",{UnitType::CONTENT_DISTRIBUTION, UnitType::BETWEEN}},
412- {"space-around",{UnitType::CONTENT_DISTRIBUTION, UnitType::AROUND}},
413- {"space-evenly",{UnitType::CONTENT_DISTRIBUTION, UnitType::EVENLY}},
414- {"stretch",{UnitType::CONTENT_DISTRIBUTION, UnitType::STRETCH}},
415- {"center",{UnitType::CONTENT_POSITION, UnitType::CENTER}},
416- {"start",{UnitType::CONTENT_POSITION, UnitType::START}},
417- {"end",{UnitType::CONTENT_POSITION, UnitType::END}},
418- {"flex-start",{UnitType::CONTENT_POSITION, UnitType::FLEX_START}},
419- {"flex-end",{UnitType::CONTENT_POSITION, UnitType::FLEX_END}},
420- {"contents",{UnitType::DISPLAY_BOX, UnitType::CONTENTS}},
421- {"none",{UnitType::DISPLAY_BOX, UnitType::NONE}},
422- {"flow",{UnitType::DISPLAY_INSIDE, UnitType::FLOW}},
423- {"flow-root",{UnitType::DISPLAY_INSIDE, UnitType::FLOW_ROOT}},
424- {"table",{UnitType::DISPLAY_INSIDE, UnitType::TABLE}},
425- {"flex",{UnitType::DISPLAY_INSIDE, UnitType::FLEX}},
426- {"grid",{UnitType::DISPLAY_INSIDE, UnitType::GRID}},
427- {"ruby",{UnitType::DISPLAY_INSIDE, UnitType::RUBY}},
428- {"table-row-group",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_ROW_GROUP}},
429- {"table-header-group",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_HEADER_GROUP}},
430- {"table-footer-group",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_FOOTER_GROUP}},
431- {"table-column-group",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_COLUMN_GROUP}},
432- {"table-row",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_ROW}},
433- {"table-cell",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_CELL}},
434- {"table-column",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_COLUMN}},
435- {"table-caption",{UnitType::DISPLAY_INTERNAL, UnitType::TABLE_CAPTION}},
436- {"ruby-base",{UnitType::DISPLAY_INTERNAL, UnitType::RUBY_BASE}},
437- {"ruby-text",{UnitType::DISPLAY_INTERNAL, UnitType::RUBY_TEXT}},
438- {"ruby-base-container",{UnitType::DISPLAY_INTERNAL, UnitType::RUBY_BASE_CONTAINER}},
439- {"ruby-text-container",{UnitType::DISPLAY_INTERNAL, UnitType::RUBY_TEXT_CONTAINER}},
440- {"inline-block",{UnitType::DISPLAY_LEGACY, UnitType::INLINE_BLOCK}},
441- {"inline-table",{UnitType::DISPLAY_LEGACY, UnitType::INLINE_TABLE}},
442- {"inline-flex",{UnitType::DISPLAY_LEGACY, UnitType::INLINE_FLEX}},
443- {"inline-grid",{UnitType::DISPLAY_LEGACY, UnitType::INLINE_GRID}},
444- {"list-item",{UnitType::DISPLAY_LISTITEM, UnitType::LISTITEM}},
445- {"block",{UnitType::DISPLAY_OUTSIDE, UnitType::BLOCK}},
446- {"inline",{UnitType::DISPLAY_OUTSIDE, UnitType::INLINE}},
447- {"run-in",{UnitType::DISPLAY_OUTSIDE, UnitType::RUN_IN}},
448- {"linear",{UnitType::EASING_FUNCTION, UnitType::LINEAR}},
449- {"ease",{UnitType::EASING_FUNCTION, UnitType::EASE}},
450- {"ease-in",{UnitType::EASING_FUNCTION, UnitType::EASE_IN}},
451- {"ease-out",{UnitType::EASING_FUNCTION, UnitType::EASE_OUT}},
452- {"ease-in-out",{UnitType::EASING_FUNCTION, UnitType::EASE_IN_OUT}},
453- {"step-start",{UnitType::EASING_FUNCTION, UnitType::STEP_START}},
454- {"step-end",{UnitType::EASING_FUNCTION, UnitType::STEP_END}},
455- {"jump-start",{UnitType::EASING_FUNCTION, UnitType::JUMP_START}},
456- {"jump-end",{UnitType::EASING_FUNCTION, UnitType::JUMP_END}},
457- {"jump-none",{UnitType::EASING_FUNCTION, UnitType::JUMP_NONE}},
458- {"jump-both",{UnitType::EASING_FUNCTION, UnitType::JUMP_BOTH}},
459- {"serif",{UnitType::GENERIC_FAMILY, UnitType::SERIF}},
460- {"sans-serif",{UnitType::GENERIC_FAMILY, UnitType::SANS_SERIF}},
461- {"monospace",{UnitType::GENERIC_FAMILY, UnitType::MONOSPACE}},
462- {"cursive",{UnitType::GENERIC_FAMILY, UnitType::CURSIVE}},
463- {"fantasy",{UnitType::GENERIC_FAMILY, UnitType::FANTASY}},
464- {"system-ui",{UnitType::GENERIC_FAMILY, UnitType::SYSTEM_UI}},
465- {"ui-serif",{UnitType::GENERIC_FAMILY, UnitType::UI_SERIF}},
466- {"ui-sans-serif",{UnitType::GENERIC_FAMILY, UnitType::UI_SANS_SERIF}},
467- {"ui-monospace",{UnitType::GENERIC_FAMILY, UnitType::UI_MONOSPACE}},
468- {"ui-rounded",{UnitType::GENERIC_FAMILY, UnitType::UI_ROUNDED}},
469- {"math",{UnitType::GENERIC_FAMILY, UnitType::MATH}},
470- {"fangsong",{UnitType::GENERIC_FAMILY, UnitType::FANGSONG}},
471- {"top",{UnitType::POSITION, UnitType::TOP}},
472- {"left",{UnitType::POSITION, UnitType::LEFT}},
473- {"bottom",{UnitType::POSITION, UnitType::BOTTOM}},
474- {"right",{UnitType::POSITION, UnitType::RIGHT}},
475- {"center",{UnitType::POSITION, UnitType::CENTER}},
476- {"inline-start",{UnitType::POSITION, UnitType::INLINE_START}},
477- {"inline-end",{UnitType::POSITION, UnitType::INLINE_END}},
478- {"block-start",{UnitType::POSITION, UnitType::BLOCK_START}},
479- {"block-end",{UnitType::POSITION, UnitType::BLOCK_END}},
480- {"self-start",{UnitType::POSITION, UnitType::SELF_START}},
481- {"self-end",{UnitType::POSITION, UnitType::SELF_END}},
482- {"flex-start",{UnitType::POSITION, UnitType::FLEX_START}},
483- {"flex-end",{UnitType::POSITION, UnitType::FLEX_END}},
484- {"circle",{UnitType::SHAPE, UnitType::CIRCLE}},
485- {"ellipse",{UnitType::SHAPE, UnitType::ELLIPSE}},
486- {"shorter hue",{UnitType::HUE_INTERPOLATION, UnitType::SHORTER_HUE}},
487- {"longer hue",{UnitType::HUE_INTERPOLATION, UnitType::LONGER_HUE}},
488- {"increasing hue",{UnitType::HUE_INTERPOLATION, UnitType::INCREASING_HUE}},
489- {"decreasing hue",{UnitType::HUE_INTERPOLATION, UnitType::DECREASING_HUE}},
490- {"hidden",{UnitType::LINE_STYLE, UnitType::HIDDEN}},
491- {"dotted",{UnitType::LINE_STYLE, UnitType::DOTTED}},
492- {"dashed",{UnitType::LINE_STYLE, UnitType::DASHED}},
493- {"solid",{UnitType::LINE_STYLE, UnitType::SOLID}},
494- {"double",{UnitType::LINE_STYLE, UnitType::DOUBLE}},
495- {"groove",{UnitType::LINE_STYLE, UnitType::GROOVE}},
496- {"ridge",{UnitType::LINE_STYLE, UnitType::RIDGE}},
497- {"inset",{UnitType::LINE_STYLE, UnitType::INSET}},
498- {"outset",{UnitType::LINE_STYLE, UnitType::OUTSET}},
499- {"baseline",{UnitType::BASELINE, UnitType::FIRST}},
500- {"first baseline",{UnitType::BASELINE, UnitType::FIRST}},
501- {"last baseline",{UnitType::BASELINE, UnitType::LAST}},
502- {"safe",{UnitType::OVERFLOW_POSITION, UnitType::SAFE}},
503- {"unsafe",{UnitType::OVERFLOW_POSITION, UnitType::UNSAFE}},
504- {"visible",{UnitType::OVERFLOW, UnitType::VISIBLE}},
505- {"clip",{UnitType::OVERFLOW, UnitType::CLIP}},
506- {"scroll",{UnitType::OVERFLOW, UnitType::SCROLL}},
507- {"auto",{UnitType::OVERFLOW, UnitType::AUTO}},
508+
509+static const std::unordered_map<std::string_view, UnitType> kMatch{
510+ {"+", UnitType::ADD},
511+ {"-", UnitType::SUB},
512+ {"*", UnitType::MULT},
513+ {"/", UnitType::DIV},
514+ {"==", UnitType::EQ},
515+ {">", UnitType::GT},
516+ {"<", UnitType::LT},
517+ {">=", UnitType::GE},
518+ {"<=", UnitType::LE},
519+ {"infinity", UnitType::INF},
520+ {"-infinity", UnitType::NEGINF},
521+ {"NaN", UnitType::NaN},
522+ {"e", UnitType::E},
523+ {"pi", UnitType::PI},
524+ {"content-box", UnitType::CONTENT},
525+ {"padding-box", UnitType::PADDING},
526+ {"border-box", UnitType::BORDER},
527+ {"margin-box", UnitType::MARGIN},
528+ {"fill-box", UnitType::FILL},
529+ {"stroke-box", UnitType::STROKE},
530+ {"view-box", UnitType::VIEW},
531+ {"space-between", UnitType::BETWEEN},
532+ {"space-around", UnitType::AROUND},
533+ {"space-evenly", UnitType::EVENLY},
534+ {"stretch", UnitType::STRETCH},
535+ {"normal", UnitType::NORMAL},
536+ {"contents", UnitType::CONTENTS},
537+ {"none", UnitType::NONE},
538+ {"flow", UnitType::FLOW},
539+ {"flow-root", UnitType::FLOW_ROOT},
540+ {"table", UnitType::TABLE},
541+ {"flex", UnitType::FLEX},
542+ {"grid", UnitType::GRID},
543+ {"ruby", UnitType::RUBY},
544+ {"table-row-group", UnitType::TABLE_ROW_GROUP},
545+ {"table-header-group", UnitType::TABLE_HEADER_GROUP},
546+ {"table-footer-group", UnitType::TABLE_FOOTER_GROUP},
547+ {"table-column-group", UnitType::TABLE_COLUMN_GROUP},
548+ {"table-row", UnitType::TABLE_ROW},
549+ {"table-cell", UnitType::TABLE_CELL},
550+ {"table-column", UnitType::TABLE_COLUMN},
551+ {"table-caption", UnitType::TABLE_CAPTION},
552+ {"ruby-base", UnitType::RUBY_BASE},
553+ {"ruby-text", UnitType::RUBY_TEXT},
554+ {"ruby-base-container", UnitType::RUBY_BASE_CONTAINER},
555+ {"ruby-text-container", UnitType::RUBY_TEXT_CONTAINER},
556+ {"inline-block", UnitType::INLINE_BLOCK},
557+ {"inline-table", UnitType::INLINE_TABLE},
558+ {"inline-flex", UnitType::INLINE_FLEX},
559+ {"inline-grid", UnitType::INLINE_GRID},
560+ {"list-item", UnitType::LISTITEM},
561+ {"block", UnitType::BLOCK},
562+ {"inline", UnitType::INLINE},
563+ {"run-in", UnitType::RUN_IN},
564+ {"linear", UnitType::LINEAR},
565+ {"ease", UnitType::EASE},
566+ {"ease-in", UnitType::EASE_IN},
567+ {"ease-out", UnitType::EASE_OUT},
568+ {"ease-in-out", UnitType::EASE_IN_OUT},
569+ {"step-start", UnitType::STEP_START},
570+ {"step-end", UnitType::STEP_END},
571+ {"jump-start", UnitType::JUMP_START},
572+ {"jump-end", UnitType::JUMP_END},
573+ {"jump-none", UnitType::JUMP_NONE},
574+ {"jump-both", UnitType::JUMP_BOTH},
575+ {"serif", UnitType::SERIF},
576+ {"sans-serif", UnitType::SANS_SERIF},
577+ {"monospace", UnitType::MONOSPACE},
578+ {"cursive", UnitType::CURSIVE},
579+ {"fantasy", UnitType::FANTASY},
580+ {"system-ui", UnitType::SYSTEM_UI},
581+ {"ui-serif", UnitType::UI_SERIF},
582+ {"ui-sans-serif", UnitType::UI_SANS_SERIF},
583+ {"ui-monospace", UnitType::UI_MONOSPACE},
584+ {"ui-rounded", UnitType::UI_ROUNDED},
585+ {"math", UnitType::MATH},
586+ {"fangsong", UnitType::FANGSONG},
587+ {"top", UnitType::TOP},
588+ {"left", UnitType::LEFT},
589+ {"bottom", UnitType::BOTTOM},
590+ {"right", UnitType::RIGHT},
591+ {"center", UnitType::CENTER},
592+ {"inline-start", UnitType::INLINE_START},
593+ {"inline-end", UnitType::INLINE_END},
594+ {"block-start", UnitType::BLOCK_START},
595+ {"block-end", UnitType::BLOCK_END},
596+ {"self-start", UnitType::SELF_START},
597+ {"self-end", UnitType::SELF_END},
598+ {"flex-start", UnitType::FLEX_START},
599+ {"flex-end", UnitType::FLEX_END},
600+ {"circle", UnitType::CIRCLE},
601+ {"ellipse", UnitType::ELLIPSE},
602+ {"shorter hue", UnitType::SHORTER_HUE},
603+ {"longer hue", UnitType::LONGER_HUE},
604+ {"increasing hue", UnitType::INCREASING_HUE},
605+ {"decreasing hue", UnitType::DECREASING_HUE},
606+ {"dotted", UnitType::DOTTED},
607+ {"dashed", UnitType::DASHED},
608+ {"solid", UnitType::SOLID},
609+ {"double", UnitType::DOUBLE},
610+ {"groove", UnitType::GROOVE},
611+ {"ridge", UnitType::RIDGE},
612+ {"inset", UnitType::INSET},
613+ {"outset", UnitType::OUTSET},
614+ {"baseline", UnitType::FIRST},
615+ {"first baseline", UnitType::FIRST},
616+ {"last baseline", UnitType::LAST},
617+ {"safe", UnitType::SAFE},
618+ {"unsafe", UnitType::UNSAFE},
619+ {"visible", UnitType::VISIBLE},
620+ {"clip", UnitType::CLIP},
621+ {"scroll", UnitType::SCROLL},
622+ {"inherit", UnitType::INHERIT},
623+ {"initial", UnitType::INITIAL},
624+ {"revert", UnitType::REVERT},
625+ {"revert-layer", UnitType::REVERT_LAYER},
626+ {"unset", UnitType::UNSET},
627 };
628
629 /*
630@@ -708,6 +708,8 @@ static const std::unordered_map<std::string_view, std::pair<UnitType, UnitType>>
631
632 overflow: hidden
633
634+ today work on fixing the double alloc and map with prop keys
635+
636 what to do about strings
637 */
638
639@@ -757,7 +759,6 @@ static const std::unordered_map<std::string_view, UnitType> kFunc{
640 {"skewX", UnitType::SKEWX},
641 {"skewY", UnitType::SKEWY},
642 {"url", UnitType::URL},
643-
644 {"", UnitType::GROUP}
645 };
646
647@@ -766,7 +767,7 @@ static const std::unordered_map<std::string_view, float> kAbsSize{
648 {"large",1.2f}, {"x-large",1.5f}, {"xx-large",2.0f}, {"xxx-large",3.0f}
649 };
650
651-std::vector<Unit> getUnit(std::string value) {
652+std::vector<Unit> getUnit(std::string key, std::string value) {
653 std::vector<Unit> units;
654
655 std::string buffer = "";
656@@ -843,8 +844,8 @@ std::vector<Unit> getUnit(std::string value) {
657 /*
658 Keyword Matching
659 */
660- unit.type = it->second.first;
661- unit.value.ENUM = it->second.second;
662+ unit.type = it->second;
663+ // the value is not used here
664 found = true;
665 } else if (auto it = kColor.find(buffer); it != kColor.end()) {
666 /*
667@@ -1143,7 +1144,7 @@ void StyleHandler::parseStream(std::istream& inputStream) {
668 if (key.length() > 2 && key[0] == '-' && key[1] == '-') {
669 current->variables[key] = value;
670 } else {
671- current->properties[key] = value;
672+ current->properties[key] = getUnit(key,value);
673 }
674 }
675 buffer.clear();