1 // SPDX-License-Identifier: GPL-2.0-or-later
2 #ifndef SEEN_SP_STYLE_ENUMS_H
3 #define SEEN_SP_STYLE_ENUMS_H
4 
5 /** \file
6  * SPStyle enums: named public enums that correspond to SVG property values.
7  */
8 /* Authors:
9  *   Lauris Kaplinski <lauris@kaplinski.com>
10  *   Jon A. Cruz <jon@joncruz.org>
11  *
12  * Copyright (C) 2010 Jon A. Cruz
13  * Copyright (C) 2001-2002 Lauris Kaplinski
14  * Copyright (C) 2001 Ximian, Inc.
15  *
16  * Released under GNU GPL v2+, read the file 'COPYING' for more information.
17  */
18 
19 #include <cstdint>
20 
21 /* fill-rule */
22 /* clip-rule */
23 enum SPWindRule : std::uint_least8_t {
24     SP_WIND_RULE_NONZERO,
25     SP_WIND_RULE_INTERSECT,
26     SP_WIND_RULE_EVENODD,
27     SP_WIND_RULE_POSITIVE
28 };
29 
30 
31 
32 /* stroke-linejoin */
33 enum SPStrokeJoinType : std::uint_least8_t {
34     SP_STROKE_LINEJOIN_MITER,
35     SP_STROKE_LINEJOIN_ROUND,
36     SP_STROKE_LINEJOIN_BEVEL
37 };
38 
39 /* stroke-linecap */
40 enum SPStrokeCapType : std::uint_least8_t {
41     SP_STROKE_LINECAP_BUTT,
42     SP_STROKE_LINECAP_ROUND,
43     SP_STROKE_LINECAP_SQUARE
44 };
45 
46 
47 /* SPFontStyle */
48 enum SPCSSFontSize : std::int_least8_t {
49     SP_CSS_FONT_SIZE_XX_SMALL,
50     SP_CSS_FONT_SIZE_X_SMALL,
51     SP_CSS_FONT_SIZE_SMALL,
52     SP_CSS_FONT_SIZE_MEDIUM,
53     SP_CSS_FONT_SIZE_LARGE,
54     SP_CSS_FONT_SIZE_X_LARGE,
55     SP_CSS_FONT_SIZE_XX_LARGE,
56     SP_CSS_FONT_SIZE_SMALLER,
57     SP_CSS_FONT_SIZE_LARGER
58 };
59 
60 enum SPCSSFontStyle : std::uint_least8_t {
61     SP_CSS_FONT_STYLE_NORMAL,
62     SP_CSS_FONT_STYLE_ITALIC,
63     SP_CSS_FONT_STYLE_OBLIQUE
64 };
65 
66 enum SPCSSFontVariant : std::uint_least8_t {
67     SP_CSS_FONT_VARIANT_NORMAL,
68     SP_CSS_FONT_VARIANT_SMALL_CAPS
69 };
70 
71 enum SPCSSFontWeight : std::int_least8_t {
72     SP_CSS_FONT_WEIGHT_100,
73     SP_CSS_FONT_WEIGHT_200,
74     SP_CSS_FONT_WEIGHT_300,
75     SP_CSS_FONT_WEIGHT_400,
76     SP_CSS_FONT_WEIGHT_500,
77     SP_CSS_FONT_WEIGHT_600,
78     SP_CSS_FONT_WEIGHT_700,
79     SP_CSS_FONT_WEIGHT_800,
80     SP_CSS_FONT_WEIGHT_900,
81     SP_CSS_FONT_WEIGHT_NORMAL,
82     SP_CSS_FONT_WEIGHT_BOLD,
83     SP_CSS_FONT_WEIGHT_LIGHTER,
84     SP_CSS_FONT_WEIGHT_BOLDER
85 };
86 
87 enum SPCSSFontStretch : std::int_least8_t {
88     SP_CSS_FONT_STRETCH_ULTRA_CONDENSED,
89     SP_CSS_FONT_STRETCH_EXTRA_CONDENSED,
90     SP_CSS_FONT_STRETCH_CONDENSED,
91     SP_CSS_FONT_STRETCH_SEMI_CONDENSED,
92     SP_CSS_FONT_STRETCH_NORMAL,
93     SP_CSS_FONT_STRETCH_SEMI_EXPANDED,
94     SP_CSS_FONT_STRETCH_EXPANDED,
95     SP_CSS_FONT_STRETCH_EXTRA_EXPANDED,
96     SP_CSS_FONT_STRETCH_ULTRA_EXPANDED,
97     SP_CSS_FONT_STRETCH_NARROWER,
98     SP_CSS_FONT_STRETCH_WIDER
99 };
100 
101 // Can select more than one
102 enum SPCSSFontVariantLigatures : std::uint_least8_t {
103     SP_CSS_FONT_VARIANT_LIGATURES_NONE            = 0,
104     SP_CSS_FONT_VARIANT_LIGATURES_COMMON          = 1,
105     SP_CSS_FONT_VARIANT_LIGATURES_DISCRETIONARY   = 2,
106     SP_CSS_FONT_VARIANT_LIGATURES_HISTORICAL      = 4,
107     SP_CSS_FONT_VARIANT_LIGATURES_CONTEXTUAL      = 8,
108     SP_CSS_FONT_VARIANT_LIGATURES_NORMAL          = 9, // Special case
109     SP_CSS_FONT_VARIANT_LIGATURES_NOCOMMON        = 16,
110     SP_CSS_FONT_VARIANT_LIGATURES_NODISCRETIONARY = 32,
111     SP_CSS_FONT_VARIANT_LIGATURES_NOHISTORICAL    = 64,
112     SP_CSS_FONT_VARIANT_LIGATURES_NOCONTEXTUAL    = 128
113 };
114 
115 enum SPCSSFontVariantPosition : std::uint_least8_t {
116     SP_CSS_FONT_VARIANT_POSITION_NORMAL = 1,
117     SP_CSS_FONT_VARIANT_POSITION_SUB    = 2,
118     SP_CSS_FONT_VARIANT_POSITION_SUPER  = 4
119 };
120 
121 enum SPCSSFontVariantCaps : std::uint_least8_t {
122     SP_CSS_FONT_VARIANT_CAPS_NORMAL      = 1,
123     SP_CSS_FONT_VARIANT_CAPS_SMALL       = 2,
124     SP_CSS_FONT_VARIANT_CAPS_ALL_SMALL   = 4,
125     SP_CSS_FONT_VARIANT_CAPS_PETITE      = 8,
126     SP_CSS_FONT_VARIANT_CAPS_ALL_PETITE  = 16,
127     SP_CSS_FONT_VARIANT_CAPS_UNICASE     = 32,
128     SP_CSS_FONT_VARIANT_CAPS_TITLING     = 64
129 };
130 
131 // Can select more than one (see spec)
132 enum SPCSSFontVariantNumeric : std::uint_least8_t {
133     SP_CSS_FONT_VARIANT_NUMERIC_NORMAL               = 0,
134     SP_CSS_FONT_VARIANT_NUMERIC_LINING_NUMS          = 1,
135     SP_CSS_FONT_VARIANT_NUMERIC_OLDSTYLE_NUMS        = 2,
136     SP_CSS_FONT_VARIANT_NUMERIC_PROPORTIONAL_NUMS    = 4,
137     SP_CSS_FONT_VARIANT_NUMERIC_TABULAR_NUMS         = 8,
138     SP_CSS_FONT_VARIANT_NUMERIC_DIAGONAL_FRACTIONS   = 16,
139     SP_CSS_FONT_VARIANT_NUMERIC_STACKED_FRACTIONS    = 32,
140     SP_CSS_FONT_VARIANT_NUMERIC_ORDINAL              = 64,
141     SP_CSS_FONT_VARIANT_NUMERIC_SLASHED_ZERO         = 128
142 };
143 
144 // Quite complicated... (see spec)
145 enum SPCSSFontVariantAlternates : std::uint_least8_t {
146     SP_CSS_FONT_VARIANT_ALTERNATES_NORMAL,
147     SP_CSS_FONT_VARIANT_ALTERNATES_HISTORICAL_FORMS,
148     SP_CSS_FONT_VARIANT_ALTERNATES_STYLISTIC,
149     SP_CSS_FONT_VARIANT_ALTERNATES_STYLESET,
150     SP_CSS_FONT_VARIANT_ALTERNATES_CHARACTER_VARIANT,
151     SP_CSS_FONT_VARIANT_ALTERNATES_SWASH,
152     SP_CSS_FONT_VARIANT_ALTERNATES_ORNAMENTS,
153     SP_CSS_FONT_VARIANT_ALTERNATES_ANNOTATION
154 };
155 
156 // Can select more than one (see spec)
157 enum SPCSSFontVariantEastAsian : std::uint_least16_t {
158     SP_CSS_FONT_VARIANT_EAST_ASIAN_NORMAL                  = 0,
159     SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS78                   = 1,
160     SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS83                   = 2,
161     SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS90                   = 4,
162     SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS04                   = 8,
163     SP_CSS_FONT_VARIANT_EAST_ASIAN_SIMPLIFIED              = 16,
164     SP_CSS_FONT_VARIANT_EAST_ASIAN_TRADITIONAL             = 32,
165     SP_CSS_FONT_VARIANT_EAST_ASIAN_FULL_WIDTH              = 64,
166     SP_CSS_FONT_VARIANT_EAST_ASIAN_PROPORTIONAL_WIDTH      = 128,
167     SP_CSS_FONT_VARIANT_EAST_ASIAN_RUBY                    = 256
168 };
169 
170 enum SPCSSTextAlign : std::uint_least8_t {
171     SP_CSS_TEXT_ALIGN_START,
172     SP_CSS_TEXT_ALIGN_END,
173     SP_CSS_TEXT_ALIGN_LEFT,
174     SP_CSS_TEXT_ALIGN_RIGHT,
175     SP_CSS_TEXT_ALIGN_CENTER,
176     SP_CSS_TEXT_ALIGN_JUSTIFY
177     // also <string> is allowed, but only within table calls
178 };
179 
180 enum SPCSSTextTransform : std::uint_least8_t {
181     SP_CSS_TEXT_TRANSFORM_CAPITALIZE,
182     SP_CSS_TEXT_TRANSFORM_UPPERCASE,
183     SP_CSS_TEXT_TRANSFORM_LOWERCASE,
184     SP_CSS_TEXT_TRANSFORM_NONE
185 };
186 
187 enum SPCSSDirection : std::uint_least8_t {
188     SP_CSS_DIRECTION_LTR,
189     SP_CSS_DIRECTION_RTL
190 };
191 
192 enum SPCSSWritingMode : std::uint_least8_t {
193     SP_CSS_WRITING_MODE_LR_TB,
194     SP_CSS_WRITING_MODE_RL_TB,
195     SP_CSS_WRITING_MODE_TB_RL,
196     SP_CSS_WRITING_MODE_TB_LR
197 };
198 
199 // CSS WRITING MODES 3
200 enum SPCSSTextOrientation : std::uint_least8_t {
201     SP_CSS_TEXT_ORIENTATION_MIXED,
202     SP_CSS_TEXT_ORIENTATION_UPRIGHT,
203     SP_CSS_TEXT_ORIENTATION_SIDEWAYS
204 };
205 
206 enum SPTextAnchor : std::uint_least8_t {
207     SP_CSS_TEXT_ANCHOR_START,
208     SP_CSS_TEXT_ANCHOR_MIDDLE,
209     SP_CSS_TEXT_ANCHOR_END
210 };
211 
212 enum SPWhiteSpace : std::uint_least8_t {
213     SP_CSS_WHITE_SPACE_NORMAL,
214     SP_CSS_WHITE_SPACE_PRE,
215     SP_CSS_WHITE_SPACE_NOWRAP,
216     SP_CSS_WHITE_SPACE_PREWRAP,
217     SP_CSS_WHITE_SPACE_PRELINE
218 };
219 
220 // Not complete list
221 enum SPCSSBaseline : std::uint_least8_t {
222     SP_CSS_BASELINE_AUTO,
223     SP_CSS_BASELINE_ALPHABETIC,
224     SP_CSS_BASELINE_IDEOGRAPHIC,
225     SP_CSS_BASELINE_HANGING,
226     SP_CSS_BASELINE_MATHEMATICAL,
227     SP_CSS_BASELINE_CENTRAL,
228     SP_CSS_BASELINE_MIDDLE,
229     SP_CSS_BASELINE_TEXT_BEFORE_EDGE,
230     SP_CSS_BASELINE_TEXT_AFTER_EDGE,
231     SP_CSS_BASELINE_SIZE  // Size of enum, keep last.
232 };
233 
234 enum SPCSSBaselineShift : std::uint_least8_t {
235     SP_CSS_BASELINE_SHIFT_BASELINE,
236     SP_CSS_BASELINE_SHIFT_SUB,
237     SP_CSS_BASELINE_SHIFT_SUPER
238 };
239 
240 enum SPVisibility : std::uint_least8_t {
241     SP_CSS_VISIBILITY_HIDDEN,
242     SP_CSS_VISIBILITY_COLLAPSE,
243     SP_CSS_VISIBILITY_VISIBLE
244 };
245 
246 enum SPOverflow : std::uint_least8_t {
247     SP_CSS_OVERFLOW_VISIBLE,
248     SP_CSS_OVERFLOW_HIDDEN,
249     SP_CSS_OVERFLOW_SCROLL,
250     SP_CSS_OVERFLOW_AUTO
251 };
252 
253 /// \todo more display types
254 enum SPCSSDisplay : std::uint_least8_t {
255     SP_CSS_DISPLAY_NONE,
256     SP_CSS_DISPLAY_INLINE,
257     SP_CSS_DISPLAY_BLOCK,
258     SP_CSS_DISPLAY_LIST_ITEM,
259     SP_CSS_DISPLAY_RUN_IN,
260     SP_CSS_DISPLAY_COMPACT,
261     SP_CSS_DISPLAY_MARKER,
262     SP_CSS_DISPLAY_TABLE,
263     SP_CSS_DISPLAY_INLINE_TABLE,
264     SP_CSS_DISPLAY_TABLE_ROW_GROUP,
265     SP_CSS_DISPLAY_TABLE_HEADER_GROUP,
266     SP_CSS_DISPLAY_TABLE_FOOTER_GROUP,
267     SP_CSS_DISPLAY_TABLE_ROW,
268     SP_CSS_DISPLAY_TABLE_COLUMN_GROUP,
269     SP_CSS_DISPLAY_TABLE_COLUMN,
270     SP_CSS_DISPLAY_TABLE_CELL,
271     SP_CSS_DISPLAY_TABLE_CAPTION
272 };
273 
274 enum SPIsolation : std::uint_least8_t {
275     SP_CSS_ISOLATION_AUTO,
276     SP_CSS_ISOLATION_ISOLATE
277 };
278 
279 enum SPBlendMode : std::uint_least8_t {
280     SP_CSS_BLEND_NORMAL,
281     SP_CSS_BLEND_MULTIPLY,
282     SP_CSS_BLEND_SCREEN,
283     SP_CSS_BLEND_DARKEN,
284     SP_CSS_BLEND_LIGHTEN,
285     SP_CSS_BLEND_OVERLAY,
286     SP_CSS_BLEND_COLORDODGE,
287     SP_CSS_BLEND_COLORBURN,
288     SP_CSS_BLEND_HARDLIGHT,
289     SP_CSS_BLEND_SOFTLIGHT,
290     SP_CSS_BLEND_DIFFERENCE,
291     SP_CSS_BLEND_EXCLUSION,
292     SP_CSS_BLEND_HUE,
293     SP_CSS_BLEND_SATURATION,
294     SP_CSS_BLEND_COLOR,
295     SP_CSS_BLEND_LUMINOSITY,
296     SP_CSS_BLEND_ENDMODE
297 };
298 
299 enum SPEnableBackground : std::uint_least8_t {
300     SP_CSS_BACKGROUND_ACCUMULATE,
301     SP_CSS_BACKGROUND_NEW
302 };
303 
304 enum SPColorInterpolation : std::uint_least8_t {
305     SP_CSS_COLOR_INTERPOLATION_AUTO,
306     SP_CSS_COLOR_INTERPOLATION_SRGB,
307     SP_CSS_COLOR_INTERPOLATION_LINEARRGB
308 };
309 
310 enum SPColorRendering : std::uint_least8_t {
311     SP_CSS_COLOR_RENDERING_AUTO,
312     SP_CSS_COLOR_RENDERING_OPTIMIZESPEED,
313     SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY
314 };
315 
316 /* Last two are CSS4 Image values... for the momement prefaced with -inkscape. */
317 enum SPImageRendering : std::uint_least8_t {
318     SP_CSS_IMAGE_RENDERING_AUTO,
319     SP_CSS_IMAGE_RENDERING_OPTIMIZESPEED,
320     SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY,
321     SP_CSS_IMAGE_RENDERING_CRISPEDGES,
322     SP_CSS_IMAGE_RENDERING_PIXELATED
323 };
324 
325 enum SPShapeRendering : std::uint_least8_t {
326     SP_CSS_SHAPE_RENDERING_AUTO,
327     SP_CSS_SHAPE_RENDERING_OPTIMIZESPEED,
328     SP_CSS_SHAPE_RENDERING_CRISPEDGES,
329     SP_CSS_SHAPE_RENDERING_GEOMETRICPRECISION
330 };
331 
332 enum SPTextRendering : std::uint_least8_t {
333     SP_CSS_TEXT_RENDERING_AUTO,
334     SP_CSS_TEXT_RENDERING_OPTIMIZESPEED,
335     SP_CSS_TEXT_RENDERING_OPTIMIZELEGIBILITY,
336     SP_CSS_TEXT_RENDERING_GEOMETRICPRECISION
337 };
338 
339 enum SPVectorEffect : std::uint_least8_t {
340     SP_VECTOR_EFFECT_NONE                 = 0,
341     SP_VECTOR_EFFECT_NON_SCALING_STROKE   = 1,
342     SP_VECTOR_EFFECT_NON_SCALING_SIZE     = 2,
343     SP_VECTOR_EFFECT_NON_ROTATION         = 4,
344     SP_VECTOR_EFFECT_FIXED_POSITION       = 8
345 };
346 
347 enum SPStrokeExtensions : std::uint_least8_t {
348     SP_STROKE_EXTENSIONS_NONE,
349     SP_STROKE_EXTENSIONS_HAIRLINE
350 };
351 
352 struct SPStyleEnum {
353     char const *key;
354     int value;
355 };
356 
357 static SPStyleEnum const enum_fill_rule[] = {
358     {"nonzero", SP_WIND_RULE_NONZERO},
359     {"evenodd", SP_WIND_RULE_EVENODD},
360     {nullptr, -1}
361 };
362 
363 static SPStyleEnum const enum_stroke_linejoin[] = {
364     {"miter", SP_STROKE_LINEJOIN_MITER},
365     {"round", SP_STROKE_LINEJOIN_ROUND},
366     {"bevel", SP_STROKE_LINEJOIN_BEVEL},
367     {nullptr, -1}
368 };
369 
370 static SPStyleEnum const enum_stroke_linecap[] = {
371     {"butt", SP_STROKE_LINECAP_BUTT},
372     {"round", SP_STROKE_LINECAP_ROUND},
373     {"square", SP_STROKE_LINECAP_SQUARE},
374     {nullptr, -1}
375 };
376 
377 static SPStyleEnum const enum_font_style[] = {
378     {"normal", SP_CSS_FONT_STYLE_NORMAL},
379     {"italic", SP_CSS_FONT_STYLE_ITALIC},
380     {"oblique", SP_CSS_FONT_STYLE_OBLIQUE},
381     {nullptr, -1}
382 };
383 
384 static SPStyleEnum const enum_font_size[] = {
385     {"xx-small", SP_CSS_FONT_SIZE_XX_SMALL},
386     {"x-small", SP_CSS_FONT_SIZE_X_SMALL},
387     {"small", SP_CSS_FONT_SIZE_SMALL},
388     {"medium", SP_CSS_FONT_SIZE_MEDIUM},
389     {"large", SP_CSS_FONT_SIZE_LARGE},
390     {"x-large", SP_CSS_FONT_SIZE_X_LARGE},
391     {"xx-large", SP_CSS_FONT_SIZE_XX_LARGE},
392     {"smaller", SP_CSS_FONT_SIZE_SMALLER},
393     {"larger", SP_CSS_FONT_SIZE_LARGER},
394     {nullptr, -1}
395 };
396 
397 static SPStyleEnum const enum_font_variant[] = {
398     {"normal", SP_CSS_FONT_VARIANT_NORMAL},
399     {"small-caps", SP_CSS_FONT_VARIANT_SMALL_CAPS},
400     {nullptr, -1}
401 };
402 
403 static SPStyleEnum const enum_font_weight[] = {
404     {"100", SP_CSS_FONT_WEIGHT_100},
405     {"200", SP_CSS_FONT_WEIGHT_200},
406     {"300", SP_CSS_FONT_WEIGHT_300},
407     {"400", SP_CSS_FONT_WEIGHT_400},
408     {"500", SP_CSS_FONT_WEIGHT_500},
409     {"600", SP_CSS_FONT_WEIGHT_600},
410     {"700", SP_CSS_FONT_WEIGHT_700},
411     {"800", SP_CSS_FONT_WEIGHT_800},
412     {"900", SP_CSS_FONT_WEIGHT_900},
413     {"normal", SP_CSS_FONT_WEIGHT_NORMAL},
414     {"bold", SP_CSS_FONT_WEIGHT_BOLD},
415     {"lighter", SP_CSS_FONT_WEIGHT_LIGHTER},
416     {"bolder", SP_CSS_FONT_WEIGHT_BOLDER},
417     {nullptr, -1}
418 };
419 
420 static SPStyleEnum const enum_font_stretch[] = {
421     {"ultra-condensed", SP_CSS_FONT_STRETCH_ULTRA_CONDENSED},
422     {"extra-condensed", SP_CSS_FONT_STRETCH_EXTRA_CONDENSED},
423     {"condensed", SP_CSS_FONT_STRETCH_CONDENSED},
424     {"semi-condensed", SP_CSS_FONT_STRETCH_SEMI_CONDENSED},
425     {"normal", SP_CSS_FONT_STRETCH_NORMAL},
426     {"semi-expanded", SP_CSS_FONT_STRETCH_SEMI_EXPANDED},
427     {"expanded", SP_CSS_FONT_STRETCH_EXPANDED},
428     {"extra-expanded", SP_CSS_FONT_STRETCH_EXTRA_EXPANDED},
429     {"ultra-expanded", SP_CSS_FONT_STRETCH_ULTRA_EXPANDED},
430     {"narrower", SP_CSS_FONT_STRETCH_NARROWER},
431     {"wider", SP_CSS_FONT_STRETCH_WIDER},
432     {nullptr, -1}
433 };
434 
435 static SPStyleEnum const enum_font_variant_ligatures[] = {
436     {"none",                         SP_CSS_FONT_VARIANT_LIGATURES_NONE},
437     {"common-ligatures",             SP_CSS_FONT_VARIANT_LIGATURES_COMMON},
438     {"discretionary-ligatures",      SP_CSS_FONT_VARIANT_LIGATURES_DISCRETIONARY},
439     {"historical-ligatures",         SP_CSS_FONT_VARIANT_LIGATURES_HISTORICAL},
440     {"contextual",                   SP_CSS_FONT_VARIANT_LIGATURES_CONTEXTUAL},
441     {"normal",                       SP_CSS_FONT_VARIANT_LIGATURES_NORMAL},
442     {"no-common-ligatures",          SP_CSS_FONT_VARIANT_LIGATURES_NOCOMMON},
443     {"no-discretionary-ligatures",   SP_CSS_FONT_VARIANT_LIGATURES_NODISCRETIONARY},
444     {"no-historical-ligatures",      SP_CSS_FONT_VARIANT_LIGATURES_NOHISTORICAL},
445     {"no-contextual",                SP_CSS_FONT_VARIANT_LIGATURES_NOCONTEXTUAL},
446     {nullptr, -1}
447 };
448 
449 static SPStyleEnum const enum_font_variant_position[] = {
450     {"normal", SP_CSS_FONT_VARIANT_POSITION_NORMAL},
451     {"sub", SP_CSS_FONT_VARIANT_POSITION_SUB},
452     {"super", SP_CSS_FONT_VARIANT_POSITION_SUPER},
453     {nullptr, -1}
454 };
455 
456 static SPStyleEnum const enum_font_variant_caps[] = {
457     {"normal", SP_CSS_FONT_VARIANT_CAPS_NORMAL},
458     {"small-caps", SP_CSS_FONT_VARIANT_CAPS_SMALL},
459     {"all-small-caps", SP_CSS_FONT_VARIANT_CAPS_ALL_SMALL},
460     {"petite-caps", SP_CSS_FONT_VARIANT_CAPS_PETITE},
461     {"all-petite-caps", SP_CSS_FONT_VARIANT_CAPS_ALL_PETITE},
462     {"unicase", SP_CSS_FONT_VARIANT_CAPS_UNICASE},
463     {"titling-caps", SP_CSS_FONT_VARIANT_CAPS_TITLING},
464     {nullptr, -1}
465 };
466 
467 static SPStyleEnum const enum_font_variant_numeric[] = {
468     {"normal", SP_CSS_FONT_VARIANT_NUMERIC_NORMAL},
469     {"lining-nums", SP_CSS_FONT_VARIANT_NUMERIC_LINING_NUMS},
470     {"oldstyle-nums", SP_CSS_FONT_VARIANT_NUMERIC_OLDSTYLE_NUMS},
471     {"proportional-nums", SP_CSS_FONT_VARIANT_NUMERIC_PROPORTIONAL_NUMS},
472     {"tabular-nums", SP_CSS_FONT_VARIANT_NUMERIC_TABULAR_NUMS},
473     {"diagonal-fractions", SP_CSS_FONT_VARIANT_NUMERIC_DIAGONAL_FRACTIONS},
474     {"stacked-fractions", SP_CSS_FONT_VARIANT_NUMERIC_STACKED_FRACTIONS},
475     {"ordinal", SP_CSS_FONT_VARIANT_NUMERIC_ORDINAL},
476     {"slashed-zero", SP_CSS_FONT_VARIANT_NUMERIC_SLASHED_ZERO},
477     {nullptr, -1}
478 };
479 
480 static SPStyleEnum const enum_font_variant_alternates[] = {
481     {"normal", SP_CSS_FONT_VARIANT_ALTERNATES_NORMAL},
482     {"historical-forms", SP_CSS_FONT_VARIANT_ALTERNATES_HISTORICAL_FORMS},
483     {"stylistic", SP_CSS_FONT_VARIANT_ALTERNATES_STYLISTIC},
484     {"styleset", SP_CSS_FONT_VARIANT_ALTERNATES_STYLESET},
485     {"character_variant", SP_CSS_FONT_VARIANT_ALTERNATES_CHARACTER_VARIANT},
486     {"swash", SP_CSS_FONT_VARIANT_ALTERNATES_SWASH},
487     {"ornaments", SP_CSS_FONT_VARIANT_ALTERNATES_ORNAMENTS},
488     {"annotation", SP_CSS_FONT_VARIANT_ALTERNATES_ANNOTATION},
489     {nullptr, -1}
490 };
491 
492 static SPStyleEnum const enum_font_variant_east_asian[] = {
493     {"normal", SP_CSS_FONT_VARIANT_EAST_ASIAN_NORMAL},
494     {"jis78", SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS78},
495     {"jis83", SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS83},
496     {"jis90", SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS90},
497     {"jis04", SP_CSS_FONT_VARIANT_EAST_ASIAN_JIS04},
498     {"simplified", SP_CSS_FONT_VARIANT_EAST_ASIAN_SIMPLIFIED},
499     {"traditional", SP_CSS_FONT_VARIANT_EAST_ASIAN_TRADITIONAL},
500     {"full-width", SP_CSS_FONT_VARIANT_EAST_ASIAN_FULL_WIDTH},
501     {"proportional-width", SP_CSS_FONT_VARIANT_EAST_ASIAN_PROPORTIONAL_WIDTH},
502     {"ruby", SP_CSS_FONT_VARIANT_EAST_ASIAN_RUBY},
503     {nullptr, -1}
504 };
505 
506 static SPStyleEnum const enum_text_align[] = {
507     {"start", SP_CSS_TEXT_ALIGN_START},
508     {"end", SP_CSS_TEXT_ALIGN_END},
509     {"left", SP_CSS_TEXT_ALIGN_LEFT},
510     {"right", SP_CSS_TEXT_ALIGN_RIGHT},
511     {"center", SP_CSS_TEXT_ALIGN_CENTER},
512     {"justify", SP_CSS_TEXT_ALIGN_JUSTIFY},
513     {nullptr, -1}
514 };
515 
516 static SPStyleEnum const enum_text_transform[] = {
517     {"capitalize", SP_CSS_TEXT_TRANSFORM_CAPITALIZE},
518     {"uppercase", SP_CSS_TEXT_TRANSFORM_UPPERCASE},
519     {"lowercase", SP_CSS_TEXT_TRANSFORM_LOWERCASE},
520     {"none", SP_CSS_TEXT_TRANSFORM_NONE},
521     {nullptr, -1}
522 };
523 
524 static SPStyleEnum const enum_text_anchor[] = {
525     {"start", SP_CSS_TEXT_ANCHOR_START},
526     {"middle", SP_CSS_TEXT_ANCHOR_MIDDLE},
527     {"end", SP_CSS_TEXT_ANCHOR_END},
528     {nullptr, -1}
529 };
530 
531 static SPStyleEnum const enum_white_space[] = {
532     {"normal",   SP_CSS_WHITE_SPACE_NORMAL },
533     {"pre",      SP_CSS_WHITE_SPACE_PRE    },
534     {"nowrap",   SP_CSS_WHITE_SPACE_NOWRAP },
535     {"pre-wrap", SP_CSS_WHITE_SPACE_PREWRAP},
536     {"pre-line", SP_CSS_WHITE_SPACE_PRELINE},
537     {nullptr, -1}
538 };
539 
540 static SPStyleEnum const enum_direction[] = {
541     {"ltr", SP_CSS_DIRECTION_LTR},
542     {"rtl", SP_CSS_DIRECTION_RTL},
543     {nullptr, -1}
544 };
545 
546 static SPStyleEnum const enum_writing_mode[] = {
547     /* Note that using the same enumerator for lr as lr-tb means we write as lr-tb even if the
548      * input file said lr.  We prefer writing lr-tb on the grounds that the spec says the initial
549      * value is lr-tb rather than lr.
550      *
551      * ECMA scripts may be surprised to find tb-rl in DOM if they set the attribute to rl, so
552      * sharing enumerators for different strings may be a bug (once we support ecma script).
553      */
554     // SVG 1.1  Deprecated but still must be supported in SVG 2.
555     {"lr-tb", SP_CSS_WRITING_MODE_LR_TB},
556     {"rl-tb", SP_CSS_WRITING_MODE_RL_TB},
557     {"tb-rl", SP_CSS_WRITING_MODE_TB_RL},
558     {"lr", SP_CSS_WRITING_MODE_LR_TB},
559     {"rl", SP_CSS_WRITING_MODE_RL_TB},
560     {"tb", SP_CSS_WRITING_MODE_TB_RL},
561     // SVG 2 & CSS 3 Writing Modes
562     {"horizontal-tb", SP_CSS_WRITING_MODE_LR_TB}, // This is correct, 'direction' distinguishes between 'lr' and 'rl'.
563     {"vertical-rl", SP_CSS_WRITING_MODE_TB_RL},
564     {"vertical-lr", SP_CSS_WRITING_MODE_TB_LR},
565     {nullptr, -1}
566 };
567 
568 // CSS WRITING MODES 3
569 static SPStyleEnum const enum_text_orientation[] = {
570     {"mixed",                 SP_CSS_TEXT_ORIENTATION_MIXED}, // Default
571     {"upright",               SP_CSS_TEXT_ORIENTATION_UPRIGHT},
572     {"sideways",              SP_CSS_TEXT_ORIENTATION_SIDEWAYS},
573     {nullptr, -1}
574 };
575 
576 static SPStyleEnum const enum_baseline[] = {
577     {"auto",                  SP_CSS_BASELINE_AUTO}, // Default
578     {"alphabetic",            SP_CSS_BASELINE_ALPHABETIC},
579     {"ideographic",           SP_CSS_BASELINE_IDEOGRAPHIC},
580     {"hanging",               SP_CSS_BASELINE_HANGING},
581     {"mathematical",          SP_CSS_BASELINE_MATHEMATICAL},
582     {"central",               SP_CSS_BASELINE_CENTRAL},
583     {"middle",                SP_CSS_BASELINE_MIDDLE},
584     {"text-before-edge",      SP_CSS_BASELINE_TEXT_BEFORE_EDGE},
585     {"text-after-edge",       SP_CSS_BASELINE_TEXT_AFTER_EDGE},
586     {nullptr, -1}
587 };
588 
589 static SPStyleEnum const enum_baseline_shift[] = {
590     {"baseline", SP_CSS_BASELINE_SHIFT_BASELINE},
591     {"sub",      SP_CSS_BASELINE_SHIFT_SUB},
592     {"super",    SP_CSS_BASELINE_SHIFT_SUPER},
593     {nullptr, -1}
594 };
595 
596 static SPStyleEnum const enum_visibility[] = {
597     {"hidden", SP_CSS_VISIBILITY_HIDDEN},
598     {"collapse", SP_CSS_VISIBILITY_COLLAPSE},
599     {"visible", SP_CSS_VISIBILITY_VISIBLE},
600     {nullptr, -1}
601 };
602 
603 static SPStyleEnum const enum_overflow[] = {
604     {"visible", SP_CSS_OVERFLOW_VISIBLE},
605     {"hidden", SP_CSS_OVERFLOW_HIDDEN},
606     {"scroll", SP_CSS_OVERFLOW_SCROLL},
607     {"auto", SP_CSS_OVERFLOW_AUTO},
608     {nullptr, -1}
609 };
610 
611 // CSS Compositing and Blending Level 1
612 static SPStyleEnum const enum_isolation[] = {
613     {"auto",             SP_CSS_ISOLATION_AUTO},
614     {"isolate",          SP_CSS_ISOLATION_ISOLATE},
615     {nullptr, -1}
616 };
617 
618 static SPStyleEnum const enum_blend_mode[] = {
619     {"normal",           SP_CSS_BLEND_NORMAL},
620     {"multiply",         SP_CSS_BLEND_MULTIPLY},
621     {"screen",           SP_CSS_BLEND_SCREEN},
622     {"darken",           SP_CSS_BLEND_DARKEN},
623     {"lighten",          SP_CSS_BLEND_LIGHTEN},
624     {"overlay",          SP_CSS_BLEND_OVERLAY},
625     {"color-dodge",      SP_CSS_BLEND_COLORDODGE},
626     {"color-burn",       SP_CSS_BLEND_COLORBURN},
627     {"hard-light",       SP_CSS_BLEND_HARDLIGHT},
628     {"soft-light",       SP_CSS_BLEND_SOFTLIGHT},
629     {"difference",       SP_CSS_BLEND_DIFFERENCE},
630     {"exclusion",        SP_CSS_BLEND_EXCLUSION},
631     {"hue",              SP_CSS_BLEND_HUE},
632     {"saturation",       SP_CSS_BLEND_SATURATION},
633     {"color",            SP_CSS_BLEND_COLOR},
634     {"luminosity",       SP_CSS_BLEND_LUMINOSITY},
635     {nullptr, -1}
636 };
637 
638 static SPStyleEnum const enum_display[] = {
639     {"none",      SP_CSS_DISPLAY_NONE},
640     {"inline",    SP_CSS_DISPLAY_INLINE},
641     {"block",     SP_CSS_DISPLAY_BLOCK},
642     {"list-item", SP_CSS_DISPLAY_LIST_ITEM},
643     {"run-in",    SP_CSS_DISPLAY_RUN_IN},
644     {"compact",   SP_CSS_DISPLAY_COMPACT},
645     {"marker",    SP_CSS_DISPLAY_MARKER},
646     {"table",     SP_CSS_DISPLAY_TABLE},
647     {"inline-table",  SP_CSS_DISPLAY_INLINE_TABLE},
648     {"table-row-group",    SP_CSS_DISPLAY_TABLE_ROW_GROUP},
649     {"table-header-group", SP_CSS_DISPLAY_TABLE_HEADER_GROUP},
650     {"table-footer-group", SP_CSS_DISPLAY_TABLE_FOOTER_GROUP},
651     {"table-row",     SP_CSS_DISPLAY_TABLE_ROW},
652     {"table-column-group", SP_CSS_DISPLAY_TABLE_COLUMN_GROUP},
653     {"table-column",  SP_CSS_DISPLAY_TABLE_COLUMN},
654     {"table-cell",    SP_CSS_DISPLAY_TABLE_CELL},
655     {"table-caption", SP_CSS_DISPLAY_TABLE_CAPTION},
656     {nullptr, -1}
657 };
658 
659 static SPStyleEnum const enum_shape_rendering[] = {
660     {"auto",                SP_CSS_SHAPE_RENDERING_AUTO},
661     {"optimizeSpeed",       SP_CSS_SHAPE_RENDERING_OPTIMIZESPEED},
662     {"crispEdges",          SP_CSS_SHAPE_RENDERING_CRISPEDGES},
663     {"geometricPrecision",  SP_CSS_SHAPE_RENDERING_GEOMETRICPRECISION},
664     {nullptr, -1}
665 };
666 
667 static SPStyleEnum const enum_color_rendering[] = {
668     {"auto",            SP_CSS_COLOR_RENDERING_AUTO},
669     {"optimizeSpeed",   SP_CSS_COLOR_RENDERING_OPTIMIZESPEED},
670     {"optimizeQuality", SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY},
671     {nullptr, -1}
672 };
673 
674 static SPStyleEnum const enum_image_rendering[] = {
675     {"auto",                  SP_CSS_IMAGE_RENDERING_AUTO},
676     {"optimizeSpeed",         SP_CSS_IMAGE_RENDERING_OPTIMIZESPEED},
677     {"optimizeQuality",       SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY},
678     {"crisp-edges",           SP_CSS_IMAGE_RENDERING_CRISPEDGES},
679     {"pixelated",             SP_CSS_IMAGE_RENDERING_PIXELATED},
680     {nullptr, -1}
681 };
682 
683 static SPStyleEnum const enum_text_rendering[] = {
684     {"auto",               SP_CSS_TEXT_RENDERING_AUTO},
685     {"optimizeSpeed",      SP_CSS_TEXT_RENDERING_OPTIMIZESPEED},
686     {"optimizeLegibility", SP_CSS_TEXT_RENDERING_OPTIMIZELEGIBILITY},
687     {"geometricPrecision", SP_CSS_TEXT_RENDERING_GEOMETRICPRECISION},
688     {nullptr, -1}
689 };
690 
691 static SPStyleEnum const enum_enable_background[] = {
692     {"accumulate", SP_CSS_BACKGROUND_ACCUMULATE},
693     {"new", SP_CSS_BACKGROUND_NEW},
694     {nullptr, -1}
695 };
696 
697 static SPStyleEnum const enum_clip_rule[] = {
698     {"nonzero", SP_WIND_RULE_NONZERO},
699     {"evenodd", SP_WIND_RULE_EVENODD},
700     {nullptr, -1}
701 };
702 
703 static SPStyleEnum const enum_color_interpolation[] = {
704     {"auto", SP_CSS_COLOR_INTERPOLATION_AUTO},
705     {"sRGB", SP_CSS_COLOR_INTERPOLATION_SRGB},
706     {"linearRGB", SP_CSS_COLOR_INTERPOLATION_LINEARRGB},
707     {nullptr, -1}
708 };
709 
710 static SPStyleEnum const enum_vector_effect[] = {
711     {"none",               SP_VECTOR_EFFECT_NONE},
712     {"non-scaling-stroke", SP_VECTOR_EFFECT_NON_SCALING_STROKE},
713     {"non-scaling-size",   SP_VECTOR_EFFECT_NON_SCALING_SIZE},
714     {"non-rotation",       SP_VECTOR_EFFECT_NON_ROTATION},
715     {"fixed-position",     SP_VECTOR_EFFECT_FIXED_POSITION},
716     {nullptr, -1}
717 };
718 
719 static SPStyleEnum const enum_stroke_extensions[] = {
720     {"none",     SP_STROKE_EXTENSIONS_NONE},
721     {"hairline", SP_STROKE_EXTENSIONS_HAIRLINE},
722     {nullptr, -1}
723 };
724 
725 
726 #endif // SEEN_SP_STYLE_ENUMS_H
727 
728 
729 /*
730   Local Variables:
731   mode:c++
732   c-file-style:"stroustrup"
733   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
734   indent-tabs-mode:nil
735   fill-column:99
736   End:
737 */
738 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
739