1 // SPDX-License-Identifier: GPL-2.0-or-later
2 #ifndef __SP_ATTRIBUTES_H__
3 #define __SP_ATTRIBUTES_H__
4 
5 /** \file
6  * Lookup dictionary for attributes/properties.
7  */
8 /*
9  * Author:
10  *   Lauris Kaplinski <lauris@kaplinski.com>
11  *
12  * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
13  * Copyright (C) 2002 Lauris Kaplinski
14  *
15  * Released under GNU GPL v2+, read the file 'COPYING' for more information.
16  */
17 #include <glibmm/value.h>
18 #include <vector>
19 
20 /*
21  * Do not change order of attributes and properties. Attribute and
22  * order in an SVG file is  (optionally) determined by the order here.
23  * This makes comparing different versions of a drawing easier using
24  * line-by-line comparison. Also, inorder for proper parsing, some
25  * properites must be before others (e.g. 'font' before 'font-family').
26  */
27 enum class SPAttr {
28     INVALID,  ///< Must have value 0.
29     /* SPObject */
30     ID,
31     STYLE,
32     INKSCAPE_COLLECT,
33     INKSCAPE_LABEL,
34     /* SPRoot  Put these near top as the apply to the entire SVG */
35     VERSION,
36     INKSCAPE_VERSION,
37     WIDTH,
38     HEIGHT,
39     VIEWBOX,
40     PRESERVEASPECTRATIO,
41     ONLOAD,
42     SODIPODI_DOCNAME,
43     /* SPItem */
44     TRANSFORM,
45     SODIPODI_TYPE,
46     SODIPODI_INSENSITIVE,
47     CONNECTOR_AVOID,
48     CONNECTION_POINTS,
49     TRANSFORM_CENTER_X,
50     TRANSFORM_CENTER_Y,
51     INKSCAPE_PATH_EFFECT,
52     INKSCAPE_HIGHLIGHT_COLOR,
53     INKSCAPE_SPRAY_ORIGIN,
54     /* SPAnchor */
55     XLINK_HREF,
56     XLINK_TYPE,
57     XLINK_ROLE,
58     XLINK_ARCROLE,
59     XLINK_TITLE,
60     XLINK_SHOW,
61     XLINK_ACTUATE,
62     TARGET,
63     /* SPGroup */
64     INKSCAPE_GROUPMODE,
65     INKSCAPE_EXPANDED,
66     /* SPNamedView */
67     VIEWONLY,
68     SHOWGUIDES,
69     SHOWGRIDS,
70     GRIDTOLERANCE,
71     GUIDETOLERANCE,
72     OBJECTTOLERANCE,
73     GUIDECOLOR,
74     GUIDEOPACITY,
75     GUIDEHICOLOR,
76     GUIDEHIOPACITY,
77     SHOWBORDER,
78     SHOWPAGESHADOW,
79     BORDERLAYER,
80     BORDERCOLOR,
81     BORDEROPACITY,
82     PAGECOLOR,
83     FIT_MARGIN_TOP,
84     FIT_MARGIN_LEFT,
85     FIT_MARGIN_RIGHT,
86     FIT_MARGIN_BOTTOM,
87     INKSCAPE_PAGECHECKERBOARD,
88     INKSCAPE_PAGEOPACITY,
89     INKSCAPE_PAGESHADOW,
90     INKSCAPE_ZOOM,
91     INKSCAPE_ROTATION,
92     INKSCAPE_CX,
93     INKSCAPE_CY,
94     INKSCAPE_WINDOW_WIDTH,
95     INKSCAPE_WINDOW_HEIGHT,
96     INKSCAPE_WINDOW_X,
97     INKSCAPE_WINDOW_Y,
98     INKSCAPE_WINDOW_MAXIMIZED,
99     INKSCAPE_SNAP_GLOBAL,
100     INKSCAPE_SNAP_PERP,
101     INKSCAPE_SNAP_TANG,
102     INKSCAPE_SNAP_BBOX,
103     INKSCAPE_SNAP_NODE,
104     INKSCAPE_SNAP_OTHERS,
105     INKSCAPE_SNAP_FROM_GUIDE,
106     INKSCAPE_SNAP_ROTATION_CENTER,
107     INKSCAPE_SNAP_GRID,
108     INKSCAPE_SNAP_GUIDE,
109     INKSCAPE_SNAP_NODE_SMOOTH,
110     INKSCAPE_SNAP_LINE_MIDPOINT,
111     INKSCAPE_SNAP_OBJECT_MIDPOINT,
112     INKSCAPE_SNAP_TEXT_BASELINE,
113     INKSCAPE_SNAP_BBOX_EDGE_MIDPOINT,
114     INKSCAPE_SNAP_BBOX_MIDPOINT,
115     INKSCAPE_SNAP_PATH_INTERSECTION,
116     INKSCAPE_SNAP_PATH,
117     INKSCAPE_SNAP_PATH_CLIP,
118     INKSCAPE_SNAP_PATH_MASK,
119     INKSCAPE_SNAP_NODE_CUSP,
120     INKSCAPE_SNAP_BBOX_EDGE,
121     INKSCAPE_SNAP_BBOX_CORNER,
122     INKSCAPE_SNAP_PAGE_BORDER,
123     INKSCAPE_CURRENT_LAYER,
124     INKSCAPE_DOCUMENT_UNITS,
125     INKSCAPE_LOCKGUIDES,
126     UNITS,
127     /* SPColorProfile */
128     LOCAL,
129     NAME,
130     RENDERING_INTENT,
131     /* SPGuide */
132     ORIENTATION,
133     POSITION,
134     INKSCAPE_COLOR,
135     INKSCAPE_LOCKED,
136     /* SPImage, SPRect, etc. */
137     X,
138     Y,
139     SVG_DPI,
140     /* SPPath */
141     // D,  Promoted to property in SVG 2
142     INKSCAPE_ORIGINAL_D,
143     CONNECTOR_TYPE,
144     CONNECTOR_CURVATURE,
145     INKSCAPE_CONNECTOR_SPACING,
146     CONNECTION_START,
147     CONNECTION_END,
148     CONNECTION_START_POINT,
149     CONNECTION_END_POINT,
150     /* SPRect */
151     RX,
152     RY,
153     /* Box3D */
154     INKSCAPE_BOX3D_PERSPECTIVE_ID,
155     INKSCAPE_BOX3D_CORNER0, // "upper left front" corner (as a point in 3-space)
156     INKSCAPE_BOX3D_CORNER7, // "lower right rear" corner (as a point in 3-space)
157     /* Box3DSide */
158     INKSCAPE_BOX3D_SIDE_TYPE,
159     /* Persp3D */
160     INKSCAPE_PERSP3D,
161     INKSCAPE_PERSP3D_VP_X,
162     INKSCAPE_PERSP3D_VP_Y,
163     INKSCAPE_PERSP3D_VP_Z,
164     INKSCAPE_PERSP3D_ORIGIN,
165     /* SPEllipse */
166     R,
167     CX,
168     CY,
169     SODIPODI_CX,
170     SODIPODI_CY,
171     SODIPODI_RX,
172     SODIPODI_RY,
173     SODIPODI_START,
174     SODIPODI_END,
175     SODIPODI_OPEN,
176     SODIPODI_ARC_TYPE,
177     /* SPStar */
178     SODIPODI_SIDES,
179     SODIPODI_R1,
180     SODIPODI_R2,
181     SODIPODI_ARG1,
182     SODIPODI_ARG2,
183     INKSCAPE_FLATSIDED,
184     INKSCAPE_ROUNDED,
185     INKSCAPE_RANDOMIZED,
186     /* SPSpiral */
187     SODIPODI_EXPANSION,
188     SODIPODI_REVOLUTION,
189     SODIPODI_RADIUS,
190     SODIPODI_ARGUMENT,
191     SODIPODI_T0,
192     /* SPOffset */
193     SODIPODI_ORIGINAL,
194     INKSCAPE_ORIGINAL,
195     INKSCAPE_HREF,
196     INKSCAPE_RADIUS,
197     /* SPLine */
198     X1,
199     Y1,
200     X2,
201     Y2,
202     /* SPPolyline */
203     POINTS,
204     /* SPTSpan */
205     DX,
206     DY,
207     ROTATE,
208     TEXTLENGTH,
209     LENGTHADJUST,
210     SODIPODI_ROLE,
211     /* SPText */
212     SODIPODI_LINESPACING,
213     /* SPTextPath */
214     STARTOFFSET,
215     SIDE,
216     /* SPStop */
217     OFFSET,
218     /* SPFilter */
219     FILTERUNITS,
220     PRIMITIVEUNITS,
221     FILTERRES,
222     /* Filter primitives common */
223     IN_,
224     RESULT,
225     /*feBlend*/
226     MODE,
227     IN2,
228     /*feColorMatrix*/
229     TYPE,
230     VALUES,
231     /*feComponentTransfer*/
232     //TYPE,
233     TABLEVALUES,
234     SLOPE,
235     INTERCEPT,
236     AMPLITUDE,
237     EXPONENT,
238     //OFFSET,
239     /*feComposite*/
240     OPERATOR,
241     K1,
242     K2,
243     K3,
244     K4,
245     //IN2,
246     /*feConvolveMatrix*/
247     ORDER,
248     KERNELMATRIX,
249     DIVISOR,
250     BIAS,
251     TARGETX,
252     TARGETY,
253     EDGEMODE,
254     KERNELUNITLENGTH,
255     PRESERVEALPHA,
256     /*feDiffuseLighting*/
257     SURFACESCALE,
258     DIFFUSECONSTANT,
259     //KERNELUNITLENGTH,
260     /*feDisplacementMap*/
261     SCALE,
262     XCHANNELSELECTOR,
263     YCHANNELSELECTOR,
264     //IN2,
265     /*feDistantLight*/
266     AZIMUTH,
267     ELEVATION,
268     /*fePointLight*/
269     Z,
270     /*feSpotLight*/
271     POINTSATX,
272     POINTSATY,
273     POINTSATZ,
274     LIMITINGCONEANGLE,
275     /* SPGaussianBlur */
276     STDDEVIATION,
277     /*feImage*/
278     /*feMerge*/
279     /*feMorphology*/
280     //OPERATOR,
281     RADIUS,
282     /*feOffset*/
283     //DX,
284     //DY,
285     /*feSpecularLighting*/
286     //SURFACESCALE,
287     SPECULARCONSTANT,
288     SPECULAREXPONENT,
289     /*feTile*/
290     /*feTurbulence*/
291     BASEFREQUENCY,
292     NUMOCTAVES,
293     SEED,
294     STITCHTILES,
295     //TYPE,
296     /* SPGradient */
297     GRADIENTUNITS,
298     GRADIENTTRANSFORM,
299     SPREADMETHOD,
300     INKSCAPE_SWATCH,
301     /* SPRadialGradient */
302     FX,
303     FY,
304     FR,
305     /* SPMeshPatch */
306     TENSOR,
307     //TYPE,
308     /* SPPattern */
309     PATTERNUNITS,
310     PATTERNCONTENTUNITS,
311     PATTERNTRANSFORM,
312     /* SPHatch */
313     HATCHUNITS,
314     HATCHCONTENTUNITS,
315     HATCHTRANSFORM,
316     PITCH,
317     /* SPClipPath */
318     CLIPPATHUNITS,
319     /* SPMask */
320     MASKUNITS,
321     MASKCONTENTUNITS,
322     /* SPMarker */
323     MARKERUNITS,
324     REFX,
325     REFY,
326     MARKERWIDTH,
327     MARKERHEIGHT,
328     ORIENT,
329     /* SPStyleElem */
330     //TYPE,
331     /* Animations */
332     ATTRIBUTENAME,
333     ATTRIBUTETYPE,
334     BEGIN,
335     DUR,
336     END,
337     MIN,
338     MAX,
339     RESTART,
340     REPEATCOUNT,
341     REPEATDUR,
342 
343     /* Interpolating animations */
344     CALCMODE,
345     //VALUES,
346     KEYTIMES,
347     KEYSPLINES,
348     FROM,
349     TO,
350     BY,
351     ADDITIVE,
352     ACCUMULATE,
353 
354     /* SVGFonts */
355     /* SPFont */
356     HORIZ_ORIGIN_X,
357     HORIZ_ORIGIN_Y,
358     HORIZ_ADV_X,
359     VERT_ORIGIN_X,
360     VERT_ORIGIN_Y,
361     VERT_ADV_Y,
362 
363     UNICODE,
364     GLYPH_NAME,
365     //ORIENTATION,
366     ARABIC_FORM,
367     LANG,
368 
369     /*<hkern> and <vkern>*/
370     U1,
371     G1,
372     U2,
373     G2,
374     K,
375 
376     /*<font-face>*/
377 //    FONT_FAMILY,
378 //    FONT_STYLE,
379 //    FONT_VARIANT,
380 //    FONT_WEIGHT,
381 //    FONT_STRETCH,
382 //    FONT_SIZE,
383     UNICODE_RANGE,
384     UNITS_PER_EM,
385     PANOSE_1,
386     STEMV,
387     STEMH,
388     //SLOPE,
389     CAP_HEIGHT,
390     X_HEIGHT,
391     ACCENT_HEIGHT,
392     ASCENT,
393     DESCENT,
394     WIDTHS,
395     BBOX,
396     IDEOGRAPHIC,
397     ALPHABETIC,
398     MATHEMATICAL,
399     HANGING,
400     V_IDEOGRAPHIC,
401     V_ALPHABETIC,
402     V_MATHEMATICAL,
403     V_HANGING,
404     UNDERLINE_POSITION,
405     UNDERLINE_THICKNESS,
406     STRIKETHROUGH_POSITION,
407     STRIKETHROUGH_THICKNESS,
408     OVERLINE_POSITION,
409     OVERLINE_THICKNESS,
410 
411     /* XML */
412     XML_SPACE,
413     XML_LANG,
414 
415     /* typeset */
416     TEXT_NOMARKUP,
417     TEXT_PANGOMARKUP,
418     TEXT_INSHAPE,
419     TEXT_ONPATH,
420     TEXT_INBOX,
421     TEXT_INCOLUMN,
422     TEXT_EXCLUDE,
423     LAYOUT_OPTIONS,
424 
425     /*  CSS & SVG Properties   KEEP ORDER!
426      *  If first or last property changed, macro at top must be changed!
427      */
428 
429     /* SVG 2 Attributes promoted to properties */
430     D,
431 
432     /* Paint */
433     COLOR,
434     OPACITY,
435     FILL,
436     FILL_OPACITY,
437     FILL_RULE,
438     STROKE,
439     STROKE_OPACITY,
440     STROKE_WIDTH,
441     STROKE_LINECAP,
442     STROKE_LINEJOIN,
443     STROKE_MITERLIMIT,
444     STROKE_DASHARRAY,
445     STROKE_DASHOFFSET,
446     STROKE_EXTENSIONS,
447     MARKER,
448     MARKER_END,
449     MARKER_MID,
450     MARKER_START,
451     PAINT_ORDER, /* SVG2 */
452     SOLID_COLOR,
453     SOLID_OPACITY,
454     VECTOR_EFFECT,
455 
456     /* CSS Blending/Compositing */
457     MIX_BLEND_MODE,
458     ISOLATION,
459 
460     /* Misc. Display */
461     DISPLAY,
462     OVERFLOW_,
463     VISIBILITY,
464 
465     /* Clip/Mask */
466     CLIP,
467     CLIP_PATH,
468     CLIP_RULE,
469     MASK,
470 
471     /* Font: Order is important! */
472     FONT,
473     FONT_FAMILY,
474     INKSCAPE_FONT_SPEC,  // Remove me
475     FONT_SIZE,
476     FONT_SIZE_ADJUST,
477     FONT_STRETCH,
478     FONT_STYLE,
479     FONT_VARIANT,
480     FONT_WEIGHT,
481 
482     /* Font Variants CSS 3 */
483     FONT_VARIANT_LIGATURES,
484     FONT_VARIANT_POSITION,
485     FONT_VARIANT_CAPS,
486     FONT_VARIANT_NUMERIC,
487     FONT_VARIANT_ALTERNATES,
488     FONT_VARIANT_EAST_ASIAN,
489     FONT_FEATURE_SETTINGS,
490 
491     /* Variable Fonts (CSS Fonts Module Level 4) */
492     FONT_VARIATION_SETTINGS,
493 
494     /* Text Layout */
495     TEXT_INDENT,
496     TEXT_ALIGN,
497     LINE_HEIGHT,
498     LETTER_SPACING,
499     WORD_SPACING,
500     TEXT_TRANSFORM,
501 
502     /* Text (CSS3) */
503     DIRECTION,
504     WRITING_MODE,
505     TEXT_ORIENTATION,
506     UNICODE_BIDI,
507     ALIGNMENT_BASELINE,
508     BASELINE_SHIFT,
509     DOMINANT_BASELINE,
510     GLYPH_ORIENTATION_HORIZONTAL,
511     GLYPH_ORIENTATION_VERTICAL,
512     KERNING,
513     TEXT_ANCHOR,
514     WHITE_SPACE,
515 
516     /* SVG 2 Text Wrapping */
517     SHAPE_INSIDE,
518     SHAPE_SUBTRACT,
519     SHAPE_PADDING,
520     SHAPE_MARGIN,
521     INLINE_SIZE,
522 
523     /* Text Decoration */
524     TEXT_DECORATION,  // CSS 2/CSS3-Shorthand
525     TEXT_DECORATION_LINE,
526     TEXT_DECORATION_STYLE,
527     TEXT_DECORATION_COLOR,
528     TEXT_DECORATION_FILL,
529     TEXT_DECORATION_STROKE,
530 
531     /* Filter */
532     ENABLE_BACKGROUND,
533     FILTER,
534     FLOOD_COLOR,
535     FLOOD_OPACITY,
536     LIGHTING_COLOR,
537     AUTO_REGION,
538 
539     /* Gradient */
540     STOP_COLOR,
541     STOP_OPACITY,
542     STOP_PATH,
543 
544     /* Rendering */
545     COLOR_INTERPOLATION,
546     COLOR_INTERPOLATION_FILTERS,
547     COLOR_PROFILE,
548     COLOR_RENDERING,
549     IMAGE_RENDERING,
550     SHAPE_RENDERING,
551     TEXT_RENDERING,
552 
553     /* Interactivity */
554     POINTER_EVENTS,
555     CURSOR,
556 
557     /* Conditional */
558     SYSTEM_LANGUAGE,
559     REQUIRED_FEATURES,
560     REQUIRED_EXTENSIONS,
561 
562     /* LivePathEffect */
563     PATH_EFFECT,
564 
565     // sentinel
566     SPAttr_SIZE
567 };
568 
569 /**
570  * True iff k is a property in SVG, i.e. something that can be written either in a style attribute
571  * or as its own XML attribute. This must be kept in sync with SPAttr.
572  */
573 bool SP_ATTRIBUTE_IS_CSS(SPAttr k);
574 
575 /**
576  * Get attribute id by name. Return INVALID for invalid names.
577  */
578 SPAttr sp_attribute_lookup(gchar const *key);
579 
580 /**
581  * Get attribute name by id. Return NULL for invalid ids.
582  */
583 gchar const *sp_attribute_name(SPAttr id);
584 
585 /**
586  * Get sorted attribute name list.
587  * @param css_only If true, only return CSS properties
588  */
589 std::vector<Glib::ustring> sp_attribute_name_list(bool css_only = false);
590 
591 #endif
592 
593 
594 /*
595   Local Variables:
596   mode:c++
597   c-file-style:"stroustrup"
598   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
599   indent-tabs-mode:nil
600   fill-column:99
601   End:
602 */
603 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
604