Line data Source code
1 : /*
2 : * GPAC Multimedia Framework
3 : *
4 : * Authors: Cyril Concolato, Jean Le Feuvre
5 : * Copyright (c) Telecom ParisTech 2004-2012
6 : * All rights reserved
7 : *
8 : * This file is part of GPAC / SVG Loader module
9 : *
10 : * GPAC is free software; you can redistribute it and/or modify
11 : * it under the terms of the GNU Lesser General Public License as published by
12 : * the Free Software Foundation; either version 2, or (at your option)
13 : * any later version.
14 : *
15 : * GPAC is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU Lesser General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU Lesser General Public
21 : * License along with this library; see the file COPYING. If not, write to
22 : * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 : *
24 : */
25 :
26 : #include <gpac/scenegraph_svg.h>
27 :
28 : #ifndef GPAC_DISABLE_SVG
29 :
30 : #include <gpac/internal/scenegraph_dev.h>
31 : #include <gpac/nodes_svg.h>
32 : /*
33 : Initialization of properties at the top level before any rendering
34 : The value shall not use the 'inherit' value, it uses the initial value.
35 : The property values are then updated when going down the tree using svg_properties_apply
36 : */
37 : GF_EXPORT
38 51 : void gf_svg_properties_init_pointers(SVGPropertiesPointers *svg_props)
39 : {
40 51 : if (!svg_props) return;
41 :
42 51 : GF_SAFEALLOC(svg_props->audio_level, SVG_Number);
43 51 : if (svg_props->audio_level) {
44 51 : svg_props->audio_level->type = SVG_NUMBER_VALUE;
45 51 : svg_props->audio_level->value = FIX_ONE;
46 51 : svg_props->computed_audio_level = FIX_ONE;
47 : }
48 :
49 51 : GF_SAFEALLOC(svg_props->color, SVG_Paint);
50 51 : if (svg_props->color) {
51 51 : svg_props->color->type = SVG_PAINT_COLOR;
52 51 : svg_props->color->color.type = SVG_COLOR_RGBCOLOR;
53 : /* svg_props->color->red, green, blue set to zero, so initial value for color property is black */
54 : }
55 :
56 51 : GF_SAFEALLOC(svg_props->color_rendering, SVG_RenderingHint);
57 51 : if (svg_props->color_rendering) *svg_props->color_rendering = SVG_RENDERINGHINT_AUTO;
58 :
59 51 : GF_SAFEALLOC(svg_props->display, SVG_Display);
60 51 : if (svg_props->display) *svg_props->display = SVG_DISPLAY_INLINE;
61 :
62 51 : GF_SAFEALLOC(svg_props->display_align, SVG_DisplayAlign);
63 51 : if (svg_props->display_align) *svg_props->display_align = SVG_DISPLAYALIGN_AUTO;
64 :
65 51 : GF_SAFEALLOC(svg_props->fill, SVG_Paint);
66 51 : if (svg_props->fill) {
67 51 : svg_props->fill->type = SVG_PAINT_COLOR;
68 51 : svg_props->fill->color.type = SVG_COLOR_RGBCOLOR;
69 : /* svg_props->fill->color.red, green, blue set to zero, so initial value for fill color is black */
70 : }
71 51 : GF_SAFEALLOC(svg_props->fill_opacity, SVG_Number);
72 51 : if (svg_props->fill_opacity) {
73 51 : svg_props->fill_opacity->type = SVG_NUMBER_VALUE;
74 51 : svg_props->fill_opacity->value = FIX_ONE;
75 : }
76 51 : GF_SAFEALLOC(svg_props->fill_rule, SVG_FillRule);
77 51 : if (svg_props->fill_rule) *svg_props->fill_rule = SVG_FILLRULE_NONZERO;
78 :
79 51 : GF_SAFEALLOC(svg_props->font_family, SVG_FontFamily);
80 51 : if (svg_props->font_family) {
81 51 : svg_props->font_family->type = SVG_FONTFAMILY_VALUE;
82 51 : svg_props->font_family->value = gf_strdup("Arial");
83 : }
84 51 : GF_SAFEALLOC(svg_props->font_size, SVG_FontSize);
85 51 : if (svg_props->font_size) {
86 51 : svg_props->font_size->type = SVG_NUMBER_VALUE;
87 51 : svg_props->font_size->value = 12*FIX_ONE;
88 : }
89 51 : GF_SAFEALLOC(svg_props->font_style, SVG_FontStyle);
90 51 : if (svg_props->font_style) *svg_props->font_style = SVG_FONTSTYLE_NORMAL;
91 :
92 51 : GF_SAFEALLOC(svg_props->font_variant, SVG_FontVariant);
93 51 : if (svg_props->font_variant) *svg_props->font_variant = SVG_FONTVARIANT_NORMAL;
94 :
95 51 : GF_SAFEALLOC(svg_props->font_weight, SVG_FontWeight);
96 51 : if (svg_props->font_weight) *svg_props->font_weight = SVG_FONTWEIGHT_NORMAL;
97 :
98 51 : GF_SAFEALLOC(svg_props->image_rendering, SVG_RenderingHint);
99 51 : if (svg_props->image_rendering) *svg_props->image_rendering = SVG_RENDERINGHINT_AUTO;
100 :
101 51 : GF_SAFEALLOC(svg_props->line_increment, SVG_Number);
102 51 : if (svg_props->line_increment) svg_props->line_increment->type = SVG_NUMBER_AUTO;
103 :
104 51 : GF_SAFEALLOC(svg_props->opacity, SVG_Number);
105 51 : if (svg_props->opacity) {
106 51 : svg_props->opacity->type = SVG_NUMBER_VALUE;
107 51 : svg_props->opacity->value = FIX_ONE;
108 : }
109 51 : GF_SAFEALLOC(svg_props->pointer_events, SVG_PointerEvents);
110 51 : if (svg_props->pointer_events) *svg_props->pointer_events = SVG_POINTEREVENTS_VISIBLEPAINTED;
111 :
112 51 : GF_SAFEALLOC(svg_props->shape_rendering, SVG_RenderingHint);
113 51 : if (svg_props->shape_rendering) *svg_props->shape_rendering = SVG_RENDERINGHINT_AUTO;
114 :
115 51 : GF_SAFEALLOC(svg_props->solid_color, SVG_Paint);
116 51 : if (svg_props->solid_color) {
117 51 : svg_props->solid_color->type = SVG_PAINT_COLOR;
118 51 : svg_props->solid_color->color.type = SVG_COLOR_RGBCOLOR;
119 : /* svg_props->solid_color->color.red, green, blue set to zero, so initial value for solid_color is black */
120 : }
121 51 : GF_SAFEALLOC(svg_props->solid_opacity, SVG_Number);
122 51 : if (svg_props->solid_opacity) {
123 51 : svg_props->solid_opacity->type = SVG_NUMBER_VALUE;
124 51 : svg_props->solid_opacity->value = FIX_ONE;
125 : }
126 51 : GF_SAFEALLOC(svg_props->stop_color, SVG_Paint);
127 51 : if (svg_props->stop_color) {
128 51 : svg_props->stop_color->type = SVG_PAINT_COLOR;
129 51 : svg_props->stop_color->color.type = SVG_COLOR_RGBCOLOR;
130 : /* svg_props->stop_color->color.red, green, blue set to zero, so initial value for stop_color is black */
131 : }
132 51 : GF_SAFEALLOC(svg_props->stop_opacity, SVG_Number);
133 51 : if (svg_props->stop_opacity) {
134 51 : svg_props->stop_opacity->type = SVG_NUMBER_VALUE;
135 51 : svg_props->stop_opacity->value = FIX_ONE;
136 : }
137 51 : GF_SAFEALLOC(svg_props->stroke, SVG_Paint);
138 51 : if (svg_props->stroke) {
139 51 : svg_props->stroke->type = SVG_PAINT_NONE;
140 51 : svg_props->stroke->color.type = SVG_COLOR_RGBCOLOR;
141 : /* svg_props->stroke->color.red, green, blue set to zero, so initial value for stroke color is black */
142 : }
143 :
144 51 : GF_SAFEALLOC(svg_props->stroke_dasharray, SVG_StrokeDashArray);
145 51 : if (svg_props->stroke_dasharray) svg_props->stroke_dasharray->type = SVG_STROKEDASHARRAY_NONE;
146 :
147 51 : GF_SAFEALLOC(svg_props->stroke_dashoffset , SVG_Length);
148 51 : if (svg_props->stroke_dashoffset) {
149 51 : svg_props->stroke_dashoffset->type = SVG_NUMBER_VALUE;
150 51 : svg_props->stroke_dashoffset->value = 0;
151 : }
152 :
153 51 : GF_SAFEALLOC(svg_props->stroke_linecap, SVG_StrokeLineCap);
154 51 : if (svg_props->stroke_linecap) *svg_props->stroke_linecap = SVG_STROKELINECAP_BUTT;
155 :
156 51 : GF_SAFEALLOC(svg_props->stroke_linejoin, SVG_StrokeLineJoin);
157 51 : if (svg_props->stroke_linejoin) *svg_props->stroke_linejoin = SVG_STROKELINEJOIN_MITER;
158 :
159 51 : GF_SAFEALLOC(svg_props->stroke_miterlimit, SVG_Number);
160 51 : if (svg_props->stroke_miterlimit) {
161 51 : svg_props->stroke_miterlimit->type = SVG_NUMBER_VALUE;
162 51 : svg_props->stroke_miterlimit->value = 4*FIX_ONE;
163 : }
164 51 : GF_SAFEALLOC(svg_props->stroke_opacity, SVG_Number);
165 51 : if (svg_props->stroke_opacity) {
166 51 : svg_props->stroke_opacity->type = SVG_NUMBER_VALUE;
167 51 : svg_props->stroke_opacity->value = FIX_ONE;
168 : }
169 51 : GF_SAFEALLOC(svg_props->stroke_width, SVG_Length);
170 51 : if (svg_props->stroke_width) {
171 51 : svg_props->stroke_width->type = SVG_NUMBER_VALUE;
172 51 : svg_props->stroke_width->value = FIX_ONE;
173 : }
174 51 : GF_SAFEALLOC(svg_props->text_align, SVG_TextAlign);
175 51 : if (svg_props->text_align) *svg_props->text_align = SVG_TEXTALIGN_START;
176 :
177 51 : GF_SAFEALLOC(svg_props->text_anchor, SVG_TextAnchor);
178 51 : if (svg_props->text_anchor) *svg_props->text_anchor = SVG_TEXTANCHOR_START;
179 :
180 51 : GF_SAFEALLOC(svg_props->text_rendering, SVG_RenderingHint);
181 51 : if (svg_props->text_rendering) *svg_props->text_rendering = SVG_RENDERINGHINT_AUTO;
182 :
183 51 : GF_SAFEALLOC(svg_props->vector_effect, SVG_VectorEffect);
184 51 : if (svg_props->vector_effect) *svg_props->vector_effect = SVG_VECTOREFFECT_NONE;
185 :
186 51 : GF_SAFEALLOC(svg_props->viewport_fill, SVG_Paint);
187 51 : if (svg_props->viewport_fill) svg_props->viewport_fill->type = SVG_PAINT_NONE;
188 :
189 51 : GF_SAFEALLOC(svg_props->viewport_fill_opacity, SVG_Number);
190 51 : if (svg_props->viewport_fill_opacity) {
191 51 : svg_props->viewport_fill_opacity->type = SVG_NUMBER_VALUE;
192 51 : svg_props->viewport_fill_opacity->value = FIX_ONE;
193 : }
194 51 : GF_SAFEALLOC(svg_props->visibility, SVG_Visibility);
195 51 : if (svg_props->visibility) *svg_props->visibility = SVG_VISIBILITY_VISIBLE;
196 :
197 : }
198 :
199 : GF_EXPORT
200 51 : void gf_svg_properties_reset_pointers(SVGPropertiesPointers *svg_props)
201 : {
202 51 : if (!svg_props) return;
203 51 : if(svg_props->audio_level) gf_free(svg_props->audio_level);
204 51 : gf_svg_delete_paint(NULL, svg_props->color);
205 51 : if(svg_props->color_rendering) gf_free(svg_props->color_rendering);
206 51 : if(svg_props->display) gf_free(svg_props->display);
207 51 : if(svg_props->display_align) gf_free(svg_props->display_align);
208 51 : gf_svg_delete_paint(NULL, svg_props->fill);
209 51 : if(svg_props->fill_opacity) gf_free(svg_props->fill_opacity);
210 51 : if(svg_props->fill_rule) gf_free(svg_props->fill_rule);
211 51 : if(svg_props->font_family) {
212 51 : if (svg_props->font_family->value) gf_free(svg_props->font_family->value);
213 51 : gf_free(svg_props->font_family);
214 : }
215 51 : if(svg_props->font_size) gf_free(svg_props->font_size);
216 51 : if(svg_props->font_style) gf_free(svg_props->font_style);
217 51 : if(svg_props->font_variant) gf_free(svg_props->font_variant);
218 51 : if(svg_props->font_weight) gf_free(svg_props->font_weight);
219 51 : if(svg_props->image_rendering) gf_free(svg_props->image_rendering);
220 51 : if(svg_props->line_increment) gf_free(svg_props->line_increment);
221 51 : if(svg_props->opacity) gf_free(svg_props->opacity);
222 51 : if(svg_props->pointer_events) gf_free(svg_props->pointer_events);
223 51 : if(svg_props->shape_rendering) gf_free(svg_props->shape_rendering);
224 51 : gf_svg_delete_paint(NULL, svg_props->solid_color);
225 51 : if(svg_props->solid_opacity) gf_free(svg_props->solid_opacity);
226 51 : gf_svg_delete_paint(NULL, svg_props->stop_color);
227 51 : if(svg_props->stop_opacity) gf_free(svg_props->stop_opacity);
228 51 : gf_svg_delete_paint(NULL, svg_props->stroke);
229 51 : if(svg_props->stroke_dasharray) {
230 51 : if (svg_props->stroke_dasharray->array.count) gf_free(svg_props->stroke_dasharray->array.vals);
231 51 : gf_free(svg_props->stroke_dasharray);
232 : }
233 51 : if(svg_props->stroke_dashoffset) gf_free(svg_props->stroke_dashoffset);
234 51 : if(svg_props->stroke_linecap) gf_free(svg_props->stroke_linecap);
235 51 : if(svg_props->stroke_linejoin) gf_free(svg_props->stroke_linejoin);
236 51 : if(svg_props->stroke_miterlimit) gf_free(svg_props->stroke_miterlimit);
237 51 : if(svg_props->stroke_opacity) gf_free(svg_props->stroke_opacity);
238 51 : if(svg_props->stroke_width) gf_free(svg_props->stroke_width);
239 51 : if(svg_props->text_align) gf_free(svg_props->text_align);
240 51 : if(svg_props->text_anchor) gf_free(svg_props->text_anchor);
241 51 : if(svg_props->text_rendering) gf_free(svg_props->text_rendering);
242 51 : if(svg_props->vector_effect) gf_free(svg_props->vector_effect);
243 51 : gf_svg_delete_paint(NULL, svg_props->viewport_fill);
244 51 : if(svg_props->viewport_fill_opacity) gf_free(svg_props->viewport_fill_opacity);
245 51 : if(svg_props->visibility) gf_free(svg_props->visibility);
246 : memset(svg_props, 0, sizeof(SVGPropertiesPointers));
247 : }
248 :
249 :
250 2960 : void *gf_svg_get_property_pointer_from_tag(SVGPropertiesPointers *output_property_context, u32 prop_tag)
251 : {
252 2960 : switch (prop_tag) {
253 0 : case TAG_SVG_ATT_audio_level:
254 0 : return output_property_context->audio_level;
255 0 : case TAG_SVG_ATT_color:
256 0 : return output_property_context->color;
257 300 : case TAG_SVG_ATT_color_rendering:
258 300 : return output_property_context->color_rendering;
259 300 : case TAG_SVG_ATT_display:
260 300 : return output_property_context->display;
261 0 : case TAG_SVG_ATT_display_align:
262 0 : return output_property_context->display_align;
263 450 : case TAG_SVG_ATT_fill:
264 450 : return output_property_context->fill;
265 150 : case TAG_SVG_ATT_fill_opacity:
266 150 : return output_property_context->fill_opacity;
267 150 : case TAG_SVG_ATT_fill_rule:
268 150 : return output_property_context->fill_rule;
269 150 : case TAG_SVG_ATT_font_family:
270 150 : return output_property_context->font_family;
271 92 : case TAG_SVG_ATT_font_size:
272 92 : return output_property_context->font_size;
273 150 : case TAG_SVG_ATT_font_style:
274 150 : return output_property_context->font_style;
275 0 : case TAG_SVG_ATT_font_variant:
276 0 : return output_property_context->font_variant;
277 150 : case TAG_SVG_ATT_font_weight:
278 150 : return output_property_context->font_weight;
279 150 : case TAG_SVG_ATT_image_rendering:
280 150 : return output_property_context->image_rendering;
281 0 : case TAG_SVG_ATT_line_increment:
282 0 : return output_property_context->line_increment;
283 468 : case TAG_SVG_ATT_opacity:
284 468 : return output_property_context->opacity;
285 0 : case TAG_SVG_ATT_pointer_events:
286 0 : return output_property_context->pointer_events;
287 0 : case TAG_SVG_ATT_shape_rendering:
288 0 : return output_property_context->shape_rendering;
289 150 : case TAG_SVG_ATT_solid_color:
290 150 : return output_property_context->solid_color;
291 0 : case TAG_SVG_ATT_solid_opacity:
292 0 : return output_property_context->solid_opacity;
293 0 : case TAG_SVG_ATT_stop_color:
294 0 : return output_property_context->stop_color;
295 0 : case TAG_SVG_ATT_stop_opacity:
296 0 : return output_property_context->stop_opacity;
297 0 : case TAG_SVG_ATT_stroke:
298 0 : return output_property_context->stroke;
299 150 : case TAG_SVG_ATT_stroke_dasharray:
300 150 : return output_property_context->stroke_dasharray;
301 0 : case TAG_SVG_ATT_stroke_dashoffset:
302 0 : return output_property_context->stroke_dashoffset;
303 0 : case TAG_SVG_ATT_stroke_linecap:
304 0 : return output_property_context->stroke_linecap;
305 0 : case TAG_SVG_ATT_stroke_linejoin:
306 0 : return output_property_context->stroke_linejoin;
307 0 : case TAG_SVG_ATT_stroke_miterlimit:
308 0 : return output_property_context->stroke_miterlimit;
309 150 : case TAG_SVG_ATT_stroke_opacity:
310 150 : return output_property_context->stroke_opacity;
311 0 : case TAG_SVG_ATT_stroke_width:
312 0 : return output_property_context->stroke_width;
313 0 : case TAG_SVG_ATT_text_align:
314 0 : return output_property_context->text_align;
315 0 : case TAG_SVG_ATT_text_anchor:
316 0 : return output_property_context->text_anchor;
317 0 : case TAG_SVG_ATT_text_rendering:
318 0 : return output_property_context->text_rendering;
319 0 : case TAG_SVG_ATT_vector_effect:
320 0 : return output_property_context->vector_effect;
321 0 : case TAG_SVG_ATT_viewport_fill:
322 0 : return output_property_context->viewport_fill;
323 0 : case TAG_SVG_ATT_viewport_fill_opacity:
324 0 : return output_property_context->viewport_fill_opacity;
325 0 : case TAG_SVG_ATT_visibility:
326 0 : return output_property_context->visibility;
327 : default:
328 : return NULL;
329 : }
330 : }
331 :
332 2960 : void *gf_svg_get_property_pointer(SVG_Element *elt, void *input_attribute,
333 : SVGPropertiesPointers *output_property_context)
334 : {
335 2960 : SVGAttribute *att = elt->attributes;
336 11838 : while (att) {
337 8878 : if (att->data == input_attribute) break;
338 5918 : att = att->next;
339 : }
340 2960 : if (!att) return NULL;
341 2960 : return gf_svg_get_property_pointer_from_tag(output_property_context, att->tag);
342 : }
343 :
344 58 : Bool gf_svg_is_property(GF_Node *node, GF_FieldInfo *target_attribute)
345 : {
346 58 : u32 tag = gf_node_get_tag(node);
347 :
348 58 : if (tag > GF_NODE_RANGE_LAST_VRML) {
349 : SVG_Element *e = (SVG_Element *)node;
350 58 : SVGAttribute *att = e->attributes;
351 243 : while (att) {
352 185 : if (att->data == target_attribute->far_ptr) break;
353 127 : att = att->next;
354 : }
355 58 : if (!att) return 0;
356 58 : switch (att->tag) {
357 : case TAG_SVG_ATT_audio_level:
358 : case TAG_SVG_ATT_color:
359 : case TAG_SVG_ATT_color_rendering:
360 : case TAG_SVG_ATT_display:
361 : case TAG_SVG_ATT_display_align:
362 : case TAG_SVG_ATT_fill:
363 : case TAG_SVG_ATT_fill_opacity:
364 : case TAG_SVG_ATT_fill_rule:
365 : case TAG_SVG_ATT_font_family:
366 : case TAG_SVG_ATT_font_size:
367 : case TAG_SVG_ATT_font_style:
368 : case TAG_SVG_ATT_font_variant:
369 : case TAG_SVG_ATT_font_weight:
370 : case TAG_SVG_ATT_image_rendering:
371 : case TAG_SVG_ATT_line_increment:
372 : case TAG_SVG_ATT_opacity:
373 : case TAG_SVG_ATT_pointer_events:
374 : case TAG_SVG_ATT_shape_rendering:
375 : case TAG_SVG_ATT_solid_color:
376 : case TAG_SVG_ATT_solid_opacity:
377 : case TAG_SVG_ATT_stop_color:
378 : case TAG_SVG_ATT_stop_opacity:
379 : case TAG_SVG_ATT_stroke:
380 : case TAG_SVG_ATT_stroke_dasharray:
381 : case TAG_SVG_ATT_stroke_dashoffset:
382 : case TAG_SVG_ATT_stroke_linecap:
383 : case TAG_SVG_ATT_stroke_linejoin:
384 : case TAG_SVG_ATT_stroke_miterlimit:
385 : case TAG_SVG_ATT_stroke_opacity:
386 : case TAG_SVG_ATT_stroke_width:
387 : case TAG_SVG_ATT_text_align:
388 : case TAG_SVG_ATT_text_anchor:
389 : case TAG_SVG_ATT_text_rendering:
390 : case TAG_SVG_ATT_vector_effect:
391 : case TAG_SVG_ATT_viewport_fill:
392 : case TAG_SVG_ATT_viewport_fill_opacity:
393 : case TAG_SVG_ATT_visibility:
394 : return 1;
395 22 : default:
396 22 : return 0;
397 : }
398 : }
399 : else {
400 : return 0;
401 : }
402 : }
403 :
404 : /* TODO: Check that all possibly inherited types are treated */
405 1673 : Bool gf_svg_is_inherit(GF_FieldInfo *a)
406 : {
407 1673 : if (!a->far_ptr) return 1;
408 :
409 1670 : switch (a->fieldType) {
410 0 : case SVG_Color_datatype:
411 0 : return (((SVG_Color *)a->far_ptr)->type == SVG_COLOR_INHERIT);
412 : break;
413 610 : case SVG_Paint_datatype:
414 610 : return (((SVG_Paint *)a->far_ptr)->type == SVG_PAINT_INHERIT);
415 : break;
416 1026 : case SVG_FontSize_datatype:
417 : case SVG_Number_datatype:
418 1026 : return (((SVG_Number *)a->far_ptr)->type == SVG_NUMBER_INHERIT);
419 : break;
420 3 : case SVG_RenderingHint_datatype:
421 3 : return (*((SVG_RenderingHint *)a->far_ptr) == SVG_RENDERINGHINT_INHERIT);
422 : break;
423 2 : case SVG_Display_datatype:
424 2 : return (*((SVG_Display *)a->far_ptr) == SVG_DISPLAY_INHERIT);
425 : break;
426 1 : case SVG_DisplayAlign_datatype:
427 1 : return (*((SVG_DisplayAlign *)a->far_ptr) == SVG_DISPLAYALIGN_INHERIT);
428 : break;
429 0 : case SVG_TextAlign_datatype:
430 0 : return (*((SVG_TextAlign *)a->far_ptr) == SVG_TEXTALIGN_INHERIT);
431 : break;
432 1 : case SVG_FillRule_datatype:
433 1 : return (*((SVG_FillRule *)a->far_ptr) == SVG_FILLRULE_INHERIT);
434 : break;
435 1 : case SVG_FontFamily_datatype:
436 1 : return (((SVG_FontFamily *)a->far_ptr)->type == SVG_FONTFAMILY_INHERIT);
437 : break;
438 2 : case SVG_FontStyle_datatype:
439 2 : return (*((SVG_FontStyle *)a->far_ptr) == SVG_FONTSTYLE_INHERIT);
440 : break;
441 1 : case SVG_FontWeight_datatype:
442 1 : return (*((SVG_FontWeight *)a->far_ptr) == SVG_FONTWEIGHT_INHERIT);
443 : break;
444 0 : case SVG_PointerEvents_datatype:
445 0 : return (*((SVG_PointerEvents *)a->far_ptr) == SVG_POINTEREVENTS_INHERIT);
446 : break;
447 1 : case SVG_StrokeDashArray_datatype:
448 1 : return (((SVG_StrokeDashArray *)a->far_ptr)->type == SVG_STROKEDASHARRAY_INHERIT);
449 : break;
450 0 : case SVG_StrokeLineCap_datatype:
451 0 : return (*((SVG_StrokeLineCap *)a->far_ptr) == SVG_STROKELINECAP_INHERIT);
452 : break;
453 0 : case SVG_StrokeLineJoin_datatype:
454 0 : return (*((SVG_StrokeLineJoin *)a->far_ptr) == SVG_STROKELINEJOIN_INHERIT);
455 : break;
456 0 : case SVG_TextAnchor_datatype:
457 0 : return (*((SVG_TextAnchor *)a->far_ptr) == SVG_TEXTANCHOR_INHERIT);
458 : break;
459 0 : case SVG_VectorEffect_datatype:
460 0 : return (*((SVG_VectorEffect *)a->far_ptr) == SVG_VECTOREFFECT_INHERIT);
461 : break;
462 0 : case SVG_Visibility_datatype:
463 0 : return (*((SVG_Visibility *)a->far_ptr) == SVG_VISIBILITY_INHERIT);
464 : break;
465 0 : case SVG_Overflow_datatype:
466 0 : return (*((SVG_Overflow *)a->far_ptr) == SVG_OVERFLOW_INHERIT);
467 : break;
468 : default:
469 : return 0;
470 : }
471 : }
472 :
473 :
474 231 : u32 gf_svg_get_modification_flags(SVG_Element *n, GF_FieldInfo *info)
475 : {
476 : // return 0xFFFFFFFF;
477 231 : switch (info->fieldType) {
478 20 : case SVG_Paint_datatype:
479 20 : if (info->fieldIndex == TAG_SVG_ATT_fill) return GF_SG_SVG_FILL_DIRTY;
480 1 : if (info->fieldIndex == TAG_SVG_ATT_stroke) return GF_SG_SVG_STROKE_DIRTY;
481 1 : if (info->fieldIndex == TAG_SVG_ATT_solid_color) return GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY;
482 0 : if (info->fieldIndex == TAG_SVG_ATT_stop_color) return GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY;
483 0 : if (info->fieldIndex == TAG_SVG_ATT_color) return GF_SG_SVG_COLOR_DIRTY;
484 : break;
485 36 : case SVG_Number_datatype:
486 36 : if (info->fieldIndex == TAG_SVG_ATT_opacity) return GF_SG_SVG_OPACITY_DIRTY;
487 18 : if (info->fieldIndex == TAG_SVG_ATT_fill_opacity) return GF_SG_SVG_FILLOPACITY_DIRTY;
488 17 : if (info->fieldIndex == TAG_SVG_ATT_stroke_opacity) return GF_SG_SVG_STROKEOPACITY_DIRTY;
489 16 : if (info->fieldIndex == TAG_SVG_ATT_solid_opacity) return GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY;
490 16 : if (info->fieldIndex == TAG_SVG_ATT_stop_opacity) return GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY;
491 16 : if (info->fieldIndex == TAG_SVG_ATT_line_increment) return GF_SG_SVG_LINEINCREMENT_DIRTY;
492 0 : if (info->fieldIndex == TAG_SVG_ATT_stroke_miterlimit) return GF_SG_SVG_STROKEMITERLIMIT_DIRTY;
493 : break;
494 34 : case SVG_Length_datatype:
495 34 : if (info->fieldIndex == TAG_SVG_ATT_stroke_dashoffset) return GF_SG_SVG_STROKEDASHOFFSET_DIRTY;
496 34 : if (info->fieldIndex == TAG_SVG_ATT_stroke_width) return GF_SG_SVG_STROKEWIDTH_DIRTY;
497 : break;
498 : case SVG_DisplayAlign_datatype:
499 : return GF_SG_SVG_DISPLAYALIGN_DIRTY;
500 1 : case SVG_FillRule_datatype:
501 1 : return GF_SG_SVG_FILLRULE_DIRTY;
502 17 : case SVG_FontFamily_datatype:
503 17 : return GF_SG_SVG_FONTFAMILY_DIRTY;
504 17 : case SVG_FontSize_datatype:
505 17 : return GF_SG_SVG_FONTSIZE_DIRTY;
506 9 : case SVG_FontStyle_datatype:
507 9 : return GF_SG_SVG_FONTSTYLE_DIRTY;
508 0 : case SVG_FontVariant_datatype:
509 0 : return GF_SG_SVG_FONTVARIANT_DIRTY;
510 5 : case SVG_FontWeight_datatype:
511 5 : return GF_SG_SVG_FONTWEIGHT_DIRTY;
512 1 : case SVG_StrokeDashArray_datatype:
513 1 : return GF_SG_SVG_STROKEDASHARRAY_DIRTY;
514 0 : case SVG_StrokeLineCap_datatype:
515 0 : return GF_SG_SVG_STROKELINECAP_DIRTY;
516 0 : case SVG_StrokeLineJoin_datatype:
517 0 : return GF_SG_SVG_STROKELINEJOIN_DIRTY;
518 16 : case SVG_TextAlign_datatype:
519 16 : return GF_SG_SVG_TEXTPOSITION_DIRTY;
520 0 : case SVG_TextAnchor_datatype:
521 0 : return GF_SG_SVG_TEXTPOSITION_DIRTY;
522 2 : case SVG_Display_datatype:
523 2 : return GF_SG_SVG_DISPLAY_DIRTY;
524 0 : case SVG_VectorEffect_datatype:
525 0 : return GF_SG_SVG_VECTOREFFECT_DIRTY;
526 : }
527 :
528 : /* this is not a property but a regular attribute, the animatable attributes are at the moment:
529 : focusable, focusHighlight, gradientUnits, nav-*, target, xlink:href, xlink:type,
530 :
531 :
532 : the following affect the geometry of the element (some affect the positioning):
533 : cx, cy, d, height, offset, pathLength, points, r, rx, ry, width, x, x1, x2, y, y1, y2, rotate
534 :
535 : the following affect the positioning and are computed at each frame:
536 : transform, motion
537 : */
538 : switch (info->fieldType) {
539 : case SVG_Number_datatype:
540 : case SVG_Length_datatype:
541 : case SVG_Coordinate_datatype:
542 : case SVG_Numbers_datatype:
543 : case SVG_Points_datatype:
544 : case SVG_Coordinates_datatype:
545 : case SVG_PathData_datatype:
546 : case SVG_Rotate_datatype:
547 : return GF_SG_SVG_GEOMETRY_DIRTY;
548 :
549 2 : case XMLRI_datatype:
550 2 : return GF_SG_SVG_XLINK_HREF_DIRTY;
551 : /*for viewbox & PAR, use node dirty to force recomputing of the viewbox*/
552 : case SVG_PreserveAspectRatio_datatype:
553 : case SVG_ViewBox_datatype:
554 : return GF_SG_NODE_DIRTY;
555 :
556 : //case SVG_Matrix_datatype:
557 : //case SVG_Motion_datatype:
558 :
559 9 : default:
560 9 : return 0;
561 : }
562 : }
563 :
564 : /* NOTE: Some properties (audio-level, display, opacity, solid*, stop*, vector-effect, viewport*)
565 : are inherited only when they are specified with the value 'inherit'
566 : otherwise they default to their initial value
567 : which for the function below means NULL, the compositor will take care of the rest
568 : */
569 : GF_EXPORT
570 40700 : u32 gf_svg_apply_inheritance(SVGAllAttributes *all_atts, SVGPropertiesPointers *render_svg_props)
571 : {
572 : u32 inherited_flags_mask = GF_SG_NODE_DIRTY | GF_SG_CHILD_DIRTY;
573 40700 : if(!all_atts || !render_svg_props) return ~inherited_flags_mask;
574 :
575 40700 : if (!all_atts->audio_level) {
576 40401 : render_svg_props->audio_level = NULL;
577 : } else {
578 299 : Fixed par_val = render_svg_props->computed_audio_level;
579 : Fixed val;
580 299 : if (all_atts->audio_level->type != SVG_NUMBER_INHERIT) {
581 299 : render_svg_props->audio_level = all_atts->audio_level;
582 299 : val = all_atts->audio_level->value;
583 0 : } else if (render_svg_props->audio_level) {
584 0 : val = render_svg_props->audio_level->value;
585 : } else {
586 : val = FIX_ONE;
587 : }
588 299 : par_val = MIN(FIX_ONE, MAX( par_val, 0));
589 299 : val = MIN(FIX_ONE, MAX( val, 0));
590 299 : render_svg_props->computed_audio_level = gf_mulfix(val, par_val);
591 : }
592 :
593 40700 : if (all_atts->color && all_atts->color->type == SVG_PAINT_COLOR
594 2330 : && all_atts->color->color.type != SVG_COLOR_INHERIT) {
595 150 : render_svg_props->color = all_atts->color;
596 : } else {
597 : inherited_flags_mask |= GF_SG_SVG_COLOR_DIRTY;
598 : }
599 40700 : if (all_atts->color_rendering && *(all_atts->color_rendering) != SVG_RENDERINGHINT_INHERIT) {
600 202 : render_svg_props->color_rendering = all_atts->color_rendering;
601 : }
602 40700 : if (all_atts->display && *(all_atts->display) != SVG_DISPLAY_INHERIT) {
603 330 : render_svg_props->display = all_atts->display;
604 40370 : } else if (!all_atts->display) {
605 40250 : render_svg_props->display = NULL;
606 : } else {
607 120 : inherited_flags_mask |= GF_SG_SVG_DISPLAY_DIRTY;
608 : }
609 :
610 40700 : if (all_atts->display_align && *(all_atts->display_align) != SVG_DISPLAYALIGN_INHERIT) {
611 34 : render_svg_props->display_align = all_atts->display_align;
612 : } else {
613 40666 : inherited_flags_mask |= GF_SG_SVG_DISPLAYALIGN_DIRTY;
614 : }
615 40700 : if (all_atts->fill && all_atts->fill->type != SVG_PAINT_INHERIT) {
616 9487 : render_svg_props->fill = all_atts->fill;
617 9487 : if (all_atts->fill->type == SVG_PAINT_COLOR &&
618 : all_atts->fill->color.type == SVG_COLOR_CURRENTCOLOR) {
619 45 : render_svg_props->fill = render_svg_props->color;
620 45 : if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) {
621 45 : inherited_flags_mask |= GF_SG_SVG_FILL_DIRTY;
622 : }
623 : }
624 : } else {
625 31213 : inherited_flags_mask |= GF_SG_SVG_FILL_DIRTY;
626 : }
627 40700 : if (all_atts->fill_opacity && all_atts->fill_opacity->type != SVG_NUMBER_INHERIT) {
628 1131 : render_svg_props->fill_opacity = all_atts->fill_opacity;
629 : } else {
630 39569 : inherited_flags_mask |= GF_SG_SVG_FILLOPACITY_DIRTY;
631 : }
632 40700 : if (all_atts->fill_rule && *(all_atts->fill_rule) != SVG_FILLRULE_INHERIT) {
633 113 : render_svg_props->fill_rule = all_atts->fill_rule;
634 : } else {
635 40587 : inherited_flags_mask |= GF_SG_SVG_FILLRULE_DIRTY;
636 : }
637 40700 : if (all_atts->font_family && all_atts->font_family->type != SVG_FONTFAMILY_INHERIT) {
638 956 : render_svg_props->font_family = all_atts->font_family;
639 : } else {
640 39744 : inherited_flags_mask |= GF_SG_SVG_FONTFAMILY_DIRTY;
641 : }
642 40700 : if (all_atts->font_size && all_atts->font_size->type != SVG_NUMBER_INHERIT) {
643 3549 : render_svg_props->font_size = all_atts->font_size;
644 : } else {
645 37151 : inherited_flags_mask |= GF_SG_SVG_FONTSIZE_DIRTY;
646 : }
647 40700 : if (all_atts->font_style && *(all_atts->font_style) != SVG_FONTSTYLE_INHERIT) {
648 36 : render_svg_props->font_style = all_atts->font_style;
649 : } else {
650 40664 : inherited_flags_mask |= GF_SG_SVG_FONTSTYLE_DIRTY;
651 : }
652 40700 : if (all_atts->font_variant && *(all_atts->font_variant) != SVG_FONTVARIANT_INHERIT) {
653 150 : render_svg_props->font_variant = all_atts->font_variant;
654 : } else {
655 40550 : inherited_flags_mask |= GF_SG_SVG_FONTVARIANT_DIRTY;
656 : }
657 40700 : if (all_atts->font_weight && *(all_atts->font_weight) != SVG_FONTWEIGHT_INHERIT) {
658 110 : render_svg_props->font_weight = all_atts->font_weight;
659 : } else {
660 40590 : inherited_flags_mask |= GF_SG_SVG_FONTWEIGHT_DIRTY;
661 : }
662 40700 : if (all_atts->image_rendering && *(all_atts->image_rendering) != SVG_RENDERINGHINT_INHERIT) {
663 101 : render_svg_props->image_rendering = all_atts->image_rendering;
664 : }
665 40700 : if (all_atts->line_increment && all_atts->line_increment->type != SVG_NUMBER_INHERIT) {
666 184 : render_svg_props->line_increment = all_atts->line_increment;
667 : } else {
668 40516 : inherited_flags_mask |= GF_SG_SVG_LINEINCREMENT_DIRTY;
669 : }
670 40700 : if (all_atts->opacity && all_atts->opacity->type != SVG_NUMBER_INHERIT) {
671 468 : render_svg_props->opacity = all_atts->opacity;
672 40232 : } else if (!all_atts->opacity) {
673 40232 : render_svg_props->opacity = NULL;
674 : } else {
675 0 : inherited_flags_mask |= GF_SG_SVG_OPACITY_DIRTY;
676 : }
677 :
678 40700 : if (all_atts->pointer_events && *(all_atts->pointer_events) != SVG_POINTEREVENTS_INHERIT) {
679 150 : render_svg_props->pointer_events = all_atts->pointer_events;
680 : }
681 40700 : if (all_atts->shape_rendering && *(all_atts->shape_rendering) != SVG_RENDERINGHINT_INHERIT) {
682 150 : render_svg_props->shape_rendering = all_atts->shape_rendering;
683 : }
684 40700 : if (all_atts->solid_color && all_atts->solid_color->type != SVG_PAINT_INHERIT) {
685 306 : render_svg_props->solid_color = all_atts->solid_color;
686 306 : if (all_atts->solid_color->type == SVG_PAINT_COLOR &&
687 : all_atts->solid_color->color.type == SVG_COLOR_CURRENTCOLOR) {
688 0 : render_svg_props->solid_color = render_svg_props->color;
689 0 : if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) {
690 0 : inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY;
691 : }
692 : }
693 40394 : } else if (!all_atts->solid_color) {
694 40394 : render_svg_props->solid_color = NULL;
695 : } else {
696 0 : inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY;
697 : }
698 40700 : if (all_atts->solid_opacity && all_atts->solid_opacity->type != SVG_NUMBER_INHERIT) {
699 150 : render_svg_props->solid_opacity = all_atts->solid_opacity;
700 40550 : } else if (!all_atts->solid_opacity) {
701 40550 : render_svg_props->solid_opacity = NULL;
702 : } else {
703 0 : inherited_flags_mask |= GF_SG_SVG_SOLIDCOLOR_OR_OPACITY_DIRTY;
704 : }
705 40700 : if (all_atts->stop_color && all_atts->stop_color->type != SVG_PAINT_INHERIT) {
706 606 : render_svg_props->stop_color = all_atts->stop_color;
707 606 : if (all_atts->stop_color->type == SVG_PAINT_COLOR &&
708 : all_atts->stop_color->color.type == SVG_COLOR_CURRENTCOLOR) {
709 0 : render_svg_props->stop_color = render_svg_props->color;
710 0 : if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) {
711 0 : inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY;
712 : }
713 : }
714 40094 : } else if (!all_atts->stop_color) {
715 40094 : render_svg_props->stop_color = NULL;
716 : } else {
717 0 : inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY;
718 : }
719 40700 : if (all_atts->stop_opacity && all_atts->stop_opacity->type != SVG_NUMBER_INHERIT) {
720 756 : render_svg_props->stop_opacity = all_atts->stop_opacity;
721 39944 : } else if (!all_atts->stop_opacity) {
722 39944 : render_svg_props->stop_opacity = NULL;
723 : } else {
724 0 : inherited_flags_mask |= GF_SG_SVG_STOPCOLOR_OR_OPACITY_DIRTY;
725 : }
726 40700 : if (all_atts->stroke && all_atts->stroke->type != SVG_PAINT_INHERIT) {
727 6809 : render_svg_props->stroke = all_atts->stroke;
728 6809 : if (all_atts->stroke->type == SVG_PAINT_COLOR &&
729 : all_atts->stroke->color.type == SVG_COLOR_CURRENTCOLOR) {
730 0 : render_svg_props->stroke = render_svg_props->color;
731 0 : if (inherited_flags_mask & GF_SG_SVG_COLOR_DIRTY) {
732 0 : inherited_flags_mask |= GF_SG_SVG_STROKE_DIRTY;
733 : }
734 : }
735 : } else {
736 33891 : inherited_flags_mask |= GF_SG_SVG_STROKE_DIRTY;
737 : }
738 40700 : if (all_atts->stroke_dasharray && all_atts->stroke_dasharray->type != SVG_STROKEDASHARRAY_INHERIT) {
739 300 : render_svg_props->stroke_dasharray = all_atts->stroke_dasharray;
740 : } else {
741 40400 : inherited_flags_mask |= GF_SG_SVG_STROKEDASHARRAY_DIRTY;
742 : }
743 40700 : if (all_atts->stroke_dashoffset && all_atts->stroke_dashoffset->type != SVG_NUMBER_INHERIT) {
744 150 : render_svg_props->stroke_dashoffset = all_atts->stroke_dashoffset;
745 : } else {
746 40550 : inherited_flags_mask |= GF_SG_SVG_STROKEDASHOFFSET_DIRTY;
747 : }
748 40700 : if (all_atts->stroke_linecap && *(all_atts->stroke_linecap) != SVG_STROKELINECAP_INHERIT) {
749 150 : render_svg_props->stroke_linecap = all_atts->stroke_linecap;
750 : } else {
751 40550 : inherited_flags_mask |= GF_SG_SVG_STROKELINECAP_DIRTY;
752 : }
753 40700 : if (all_atts->stroke_linejoin && *(all_atts->stroke_linejoin) != SVG_STROKELINEJOIN_INHERIT) {
754 150 : render_svg_props->stroke_linejoin = all_atts->stroke_linejoin;
755 : } else {
756 40550 : inherited_flags_mask |= GF_SG_SVG_STROKELINEJOIN_DIRTY;
757 : }
758 40700 : if (all_atts->stroke_miterlimit && all_atts->stroke_miterlimit->type != SVG_NUMBER_INHERIT) {
759 150 : render_svg_props->stroke_miterlimit = all_atts->stroke_miterlimit;
760 : } else {
761 40550 : inherited_flags_mask |= GF_SG_SVG_STROKEMITERLIMIT_DIRTY;
762 : }
763 40700 : if (all_atts->stroke_opacity && all_atts->stroke_opacity->type != SVG_NUMBER_INHERIT) {
764 151 : render_svg_props->stroke_opacity = all_atts->stroke_opacity;
765 : } else {
766 40549 : inherited_flags_mask |= GF_SG_SVG_STROKEOPACITY_DIRTY;
767 : }
768 40700 : if (all_atts->stroke_width && all_atts->stroke_width->type != SVG_NUMBER_INHERIT) {
769 3333 : render_svg_props->stroke_width = all_atts->stroke_width;
770 : } else {
771 37367 : inherited_flags_mask |= GF_SG_SVG_STROKEWIDTH_DIRTY;
772 : }
773 40700 : if (all_atts->text_align && *(all_atts->text_align) != SVG_TEXTALIGN_INHERIT) {
774 34 : render_svg_props->text_align = all_atts->text_align;
775 : } else {
776 40666 : inherited_flags_mask |= GF_SG_SVG_TEXTPOSITION_DIRTY;
777 : }
778 40700 : if (all_atts->text_anchor && *(all_atts->text_anchor) != SVG_TEXTANCHOR_INHERIT) {
779 2205 : render_svg_props->text_anchor = all_atts->text_anchor;
780 : } else {
781 38495 : inherited_flags_mask |= GF_SG_SVG_TEXTPOSITION_DIRTY;
782 : }
783 40700 : if (all_atts->text_rendering && *(all_atts->text_rendering) != SVG_RENDERINGHINT_INHERIT) {
784 0 : render_svg_props->text_rendering = all_atts->text_rendering;
785 : }
786 40700 : if (all_atts->vector_effect && *(all_atts->vector_effect) != SVG_VECTOREFFECT_INHERIT) {
787 150 : render_svg_props->vector_effect = all_atts->vector_effect;
788 40550 : } else if (!all_atts->vector_effect) {
789 40550 : render_svg_props->vector_effect = NULL;
790 : } else {
791 0 : inherited_flags_mask |= GF_SG_SVG_VECTOREFFECT_DIRTY;
792 : }
793 40700 : if (all_atts->viewport_fill && all_atts->viewport_fill->type != SVG_PAINT_INHERIT) {
794 152 : render_svg_props->viewport_fill = all_atts->viewport_fill;
795 40548 : } else if (!all_atts->viewport_fill) {
796 40548 : render_svg_props->viewport_fill = NULL;
797 : }
798 40700 : if (all_atts->viewport_fill_opacity && all_atts->viewport_fill_opacity->type != SVG_NUMBER_INHERIT) {
799 150 : render_svg_props->viewport_fill_opacity = all_atts->viewport_fill_opacity;
800 40550 : } else if (!all_atts->viewport_fill_opacity) {
801 40550 : render_svg_props->viewport_fill_opacity = NULL;
802 : }
803 40700 : if (all_atts->visibility && *(all_atts->visibility) != SVG_VISIBILITY_INHERIT) {
804 150 : render_svg_props->visibility = all_atts->visibility;
805 : }
806 : return inherited_flags_mask;
807 : }
808 :
809 :
810 :
811 : GF_EXPORT
812 46001 : void gf_svg_flatten_attributes(SVG_Element *e, SVGAllAttributes *all_atts)
813 : {
814 : SVGAttribute *att;
815 : memset(all_atts, 0, sizeof(SVGAllAttributes));
816 46001 : if (e->sgprivate->tag <= GF_NODE_FIRST_DOM_NODE_TAG) return;
817 46001 : att = e->attributes;
818 253426 : while (att) {
819 161424 : switch(att->tag) {
820 2653 : case TAG_XML_ATT_id:
821 2653 : all_atts->xml_id = (SVG_ID *)att->data;
822 2653 : break;
823 305 : case TAG_XML_ATT_base:
824 305 : all_atts->xml_base = (XMLRI *)att->data;
825 305 : break;
826 305 : case TAG_XML_ATT_lang:
827 305 : all_atts->xml_lang = (SVG_LanguageID *)att->data;
828 305 : break;
829 456 : case TAG_XML_ATT_space:
830 456 : all_atts->xml_space = (XML_Space *)att->data;
831 456 : break;
832 :
833 307 : case TAG_XLINK_ATT_type:
834 307 : all_atts->xlink_type = (SVG_String *)att->data;
835 307 : break;
836 307 : case TAG_XLINK_ATT_role:
837 307 : all_atts->xlink_role = (XMLRI *)att->data;
838 307 : break;
839 307 : case TAG_XLINK_ATT_arcrole:
840 307 : all_atts->xlink_arcrole = (XMLRI *)att->data;
841 307 : break;
842 307 : case TAG_XLINK_ATT_title:
843 307 : all_atts->xlink_title = (SVG_String *)att->data;
844 307 : break;
845 4500 : case TAG_XLINK_ATT_href:
846 4500 : all_atts->xlink_href = (XMLRI *)att->data;
847 4500 : break;
848 307 : case TAG_XLINK_ATT_show:
849 307 : all_atts->xlink_show = (SVG_String *)att->data;
850 307 : break;
851 307 : case TAG_XLINK_ATT_actuate:
852 307 : all_atts->xlink_actuate = (SVG_String *)att->data;
853 307 : break;
854 :
855 1240 : case TAG_XMLEV_ATT_event:
856 1240 : all_atts->event = (XMLEV_Event *)att->data;
857 1240 : break;
858 163 : case TAG_XMLEV_ATT_phase:
859 163 : all_atts->phase = (XMLEV_Phase *)att->data;
860 163 : break;
861 163 : case TAG_XMLEV_ATT_propagate:
862 163 : all_atts->propagate = (XMLEV_Propagate *)att->data;
863 163 : break;
864 163 : case TAG_XMLEV_ATT_defaultAction:
865 163 : all_atts->defaultAction = (XMLEV_DefaultAction *)att->data;
866 163 : break;
867 0 : case TAG_XMLEV_ATT_observer:
868 0 : all_atts->observer = (XML_IDREF *)att->data;
869 0 : break;
870 1079 : case TAG_XMLEV_ATT_target:
871 1079 : all_atts->listener_target = (XML_IDREF *)att->data;
872 1079 : break;
873 1240 : case TAG_XMLEV_ATT_handler:
874 1240 : all_atts->handler = (XMLRI *)att->data;
875 1240 : break;
876 :
877 175 : case TAG_LSR_ATT_enabled:
878 175 : all_atts->lsr_enabled = (SVG_Boolean *)att->data;
879 175 : break;
880 :
881 7079 : case TAG_SVG_ATT_id:
882 7079 : all_atts->id = (SVG_ID *)att->data;
883 7079 : break;
884 1448 : case TAG_SVG_ATT__class:
885 1448 : all_atts->_class = (SVG_String *)att->data;
886 1448 : break;
887 381 : case TAG_SVG_ATT_requiredFeatures:
888 381 : all_atts->requiredFeatures = (SVG_ListOfIRI *)att->data;
889 381 : break;
890 304 : case TAG_SVG_ATT_requiredExtensions:
891 304 : all_atts->requiredExtensions = (SVG_ListOfIRI *)att->data;
892 304 : break;
893 153 : case TAG_SVG_ATT_requiredFormats:
894 153 : all_atts->requiredFormats = (SVG_FormatList *)att->data;
895 153 : break;
896 154 : case TAG_SVG_ATT_requiredFonts:
897 154 : all_atts->requiredFonts = (SVG_FontList *)att->data;
898 154 : break;
899 307 : case TAG_SVG_ATT_systemLanguage:
900 307 : all_atts->systemLanguage = (SVG_LanguageIDs *)att->data;
901 307 : break;
902 768 : case TAG_SVG_ATT_display:
903 768 : all_atts->display = (SVG_Display *)att->data;
904 768 : break;
905 304 : case TAG_SVG_ATT_visibility:
906 304 : all_atts->visibility = (SVG_Visibility *)att->data;
907 304 : break;
908 305 : case TAG_SVG_ATT_image_rendering:
909 305 : all_atts->image_rendering = (SVG_RenderingHint *)att->data;
910 305 : break;
911 306 : case TAG_SVG_ATT_pointer_events:
912 306 : all_atts->pointer_events = (SVG_PointerEvents *)att->data;
913 306 : break;
914 306 : case TAG_SVG_ATT_shape_rendering:
915 306 : all_atts->shape_rendering = (SVG_RenderingHint *)att->data;
916 306 : break;
917 306 : case TAG_SVG_ATT_text_rendering:
918 306 : all_atts->text_rendering = (SVG_RenderingHint *)att->data;
919 306 : break;
920 303 : case TAG_SVG_ATT_audio_level:
921 303 : all_atts->audio_level = (SVG_Number *)att->data;
922 303 : break;
923 157 : case TAG_SVG_ATT_viewport_fill:
924 157 : all_atts->viewport_fill = (SVG_Paint *)att->data;
925 157 : break;
926 153 : case TAG_SVG_ATT_viewport_fill_opacity:
927 153 : all_atts->viewport_fill_opacity = (SVG_Number *)att->data;
928 153 : break;
929 152 : case TAG_SVG_ATT_overflow:
930 152 : all_atts->overflow = (SVG_String *)att->data;
931 152 : break;
932 1438 : case TAG_SVG_ATT_fill_opacity:
933 1438 : all_atts->fill_opacity = (SVG_Number *)att->data;
934 1438 : break;
935 309 : case TAG_SVG_ATT_stroke_opacity:
936 309 : all_atts->stroke_opacity = (SVG_Number *)att->data;
937 309 : break;
938 10745 : case TAG_SVG_ATT_fill:
939 10745 : all_atts->fill = (SVG_Paint *)att->data;
940 10745 : break;
941 152 : case TAG_SVG_ATT_filter:
942 152 : all_atts->filter = (SVG_Paint *)att->data;
943 152 : break;
944 306 : case TAG_SVG_ATT_fill_rule:
945 306 : all_atts->fill_rule = (SVG_FillRule *)att->data;
946 306 : break;
947 7409 : case TAG_SVG_ATT_stroke:
948 7409 : all_atts->stroke = (SVG_Paint *)att->data;
949 7409 : break;
950 614 : case TAG_SVG_ATT_stroke_dasharray:
951 614 : all_atts->stroke_dasharray = (SVG_StrokeDashArray *)att->data;
952 614 : break;
953 306 : case TAG_SVG_ATT_stroke_dashoffset:
954 306 : all_atts->stroke_dashoffset = (SVG_Length *)att->data;
955 306 : break;
956 306 : case TAG_SVG_ATT_stroke_linecap:
957 306 : all_atts->stroke_linecap = (SVG_StrokeLineCap *)att->data;
958 306 : break;
959 306 : case TAG_SVG_ATT_stroke_linejoin:
960 306 : all_atts->stroke_linejoin = (SVG_StrokeLineJoin *)att->data;
961 306 : break;
962 306 : case TAG_SVG_ATT_stroke_miterlimit:
963 306 : all_atts->stroke_miterlimit = (SVG_Number *)att->data;
964 306 : break;
965 3769 : case TAG_SVG_ATT_stroke_width:
966 3769 : all_atts->stroke_width = (SVG_Length *)att->data;
967 3769 : break;
968 2638 : case TAG_SVG_ATT_color:
969 2638 : all_atts->color = (SVG_Paint *)att->data;
970 2638 : break;
971 460 : case TAG_SVG_ATT_color_rendering:
972 460 : all_atts->color_rendering = (SVG_RenderingHint *)att->data;
973 460 : break;
974 153 : case TAG_SVG_ATT_vector_effect:
975 153 : all_atts->vector_effect = (SVG_VectorEffect *)att->data;
976 153 : break;
977 318 : case TAG_SVG_ATT_solid_color:
978 318 : all_atts->solid_color = (SVG_SVGColor *)att->data;
979 318 : break;
980 154 : case TAG_SVG_ATT_solid_opacity:
981 154 : all_atts->solid_opacity = (SVG_Number *)att->data;
982 154 : break;
983 188 : case TAG_SVG_ATT_display_align:
984 188 : all_atts->display_align = (SVG_DisplayAlign *)att->data;
985 188 : break;
986 496 : case TAG_SVG_ATT_line_increment:
987 496 : all_atts->line_increment = (SVG_Number *)att->data;
988 496 : break;
989 982 : case TAG_SVG_ATT_stop_color:
990 982 : all_atts->stop_color = (SVG_SVGColor *)att->data;
991 982 : break;
992 1134 : case TAG_SVG_ATT_stop_opacity:
993 1134 : all_atts->stop_opacity = (SVG_Number *)att->data;
994 1134 : break;
995 1164 : case TAG_SVG_ATT_font_family:
996 1164 : all_atts->font_family = (SVG_FontFamily *)att->data;
997 1164 : break;
998 3936 : case TAG_SVG_ATT_font_size:
999 3936 : all_atts->font_size = (SVG_FontSize *)att->data;
1000 3936 : break;
1001 342 : case TAG_SVG_ATT_font_style:
1002 342 : all_atts->font_style = (SVG_FontStyle *)att->data;
1003 342 : break;
1004 307 : case TAG_SVG_ATT_font_variant:
1005 307 : all_atts->font_variant = (SVG_FontVariant *)att->data;
1006 307 : break;
1007 326 : case TAG_SVG_ATT_font_weight:
1008 326 : all_atts->font_weight = (SVG_FontWeight *)att->data;
1009 326 : break;
1010 2572 : case TAG_SVG_ATT_text_anchor:
1011 2572 : all_atts->text_anchor = (SVG_TextAnchor *)att->data;
1012 2572 : break;
1013 34 : case TAG_SVG_ATT_text_align:
1014 34 : all_atts->text_align = (SVG_TextAlign *)att->data;
1015 34 : break;
1016 156 : case TAG_SVG_ATT_text_decoration:
1017 156 : all_atts->text_decoration = (SVG_String *)att->data;
1018 156 : break;
1019 153 : case TAG_SVG_ATT_focusHighlight:
1020 153 : all_atts->focusHighlight = (SVG_FocusHighlight *)att->data;
1021 153 : break;
1022 152 : case TAG_SVG_ATT_externalResourcesRequired:
1023 152 : all_atts->externalResourcesRequired = (SVG_Boolean *)att->data;
1024 152 : break;
1025 154 : case TAG_SVG_ATT_focusable:
1026 154 : all_atts->focusable = (SVG_Focusable *)att->data;
1027 154 : break;
1028 154 : case TAG_SVG_ATT_nav_next:
1029 154 : all_atts->nav_next = (SVG_Focus *)att->data;
1030 154 : break;
1031 154 : case TAG_SVG_ATT_nav_prev:
1032 154 : all_atts->nav_prev = (SVG_Focus *)att->data;
1033 154 : break;
1034 154 : case TAG_SVG_ATT_nav_up:
1035 154 : all_atts->nav_up = (SVG_Focus *)att->data;
1036 154 : break;
1037 154 : case TAG_SVG_ATT_nav_up_right:
1038 154 : all_atts->nav_up_right = (SVG_Focus *)att->data;
1039 154 : break;
1040 154 : case TAG_SVG_ATT_nav_right:
1041 154 : all_atts->nav_right = (SVG_Focus *)att->data;
1042 154 : break;
1043 154 : case TAG_SVG_ATT_nav_down_right:
1044 154 : all_atts->nav_down_right = (SVG_Focus *)att->data;
1045 154 : break;
1046 154 : case TAG_SVG_ATT_nav_down:
1047 154 : all_atts->nav_down = (SVG_Focus *)att->data;
1048 154 : break;
1049 154 : case TAG_SVG_ATT_nav_down_left:
1050 154 : all_atts->nav_down_left = (SVG_Focus *)att->data;
1051 154 : break;
1052 154 : case TAG_SVG_ATT_nav_left:
1053 154 : all_atts->nav_left = (SVG_Focus *)att->data;
1054 154 : break;
1055 154 : case TAG_SVG_ATT_nav_up_left:
1056 154 : all_atts->nav_up_left = (SVG_Focus *)att->data;
1057 154 : break;
1058 4620 : case TAG_SVG_ATT_transform:
1059 4620 : all_atts->transform = (SVG_Transform *)att->data;
1060 4620 : break;
1061 307 : case TAG_SVG_ATT_target:
1062 307 : all_atts->target = (SVG_String *)att->data;
1063 307 : break;
1064 234 : case TAG_SVG_ATT_attributeName:
1065 234 : all_atts->attributeName = (SMIL_AttributeName *)att->data;
1066 234 : break;
1067 1 : case TAG_SVG_ATT_attributeType:
1068 1 : all_atts->attributeType = (SMIL_AttributeType *)att->data;
1069 1 : break;
1070 1447 : case TAG_SVG_ATT_begin:
1071 1447 : all_atts->begin = (SMIL_Times *)att->data;
1072 1447 : break;
1073 1754 : case TAG_SVG_ATT_dur:
1074 1754 : all_atts->dur = (SMIL_Duration *)att->data;
1075 1754 : break;
1076 1785 : case TAG_SVG_ATT_end:
1077 1785 : all_atts->end = (SMIL_Times *)att->data;
1078 1785 : break;
1079 198 : case TAG_SVG_ATT_repeatCount:
1080 198 : all_atts->repeatCount = (SMIL_RepeatCount *)att->data;
1081 198 : break;
1082 162 : case TAG_SVG_ATT_repeatDur:
1083 162 : all_atts->repeatDur = (SMIL_Duration *)att->data;
1084 162 : break;
1085 5 : case TAG_SVG_ATT_restart:
1086 5 : all_atts->restart = (SMIL_Restart *)att->data;
1087 5 : break;
1088 265 : case TAG_SVG_ATT_smil_fill:
1089 265 : all_atts->smil_fill = (SMIL_Fill *)att->data;
1090 265 : break;
1091 5 : case TAG_SVG_ATT_min:
1092 5 : all_atts->min = (SMIL_Duration *)att->data;
1093 5 : break;
1094 5 : case TAG_SVG_ATT_max:
1095 5 : all_atts->max = (SMIL_Duration *)att->data;
1096 5 : break;
1097 127 : case TAG_SVG_ATT_to:
1098 127 : all_atts->to = (SMIL_AnimateValue *)att->data;
1099 127 : break;
1100 42 : case TAG_SVG_ATT_calcMode:
1101 42 : all_atts->calcMode = (SMIL_CalcMode *)att->data;
1102 42 : break;
1103 83 : case TAG_SVG_ATT_values:
1104 83 : all_atts->values = (SMIL_AnimateValues *)att->data;
1105 83 : break;
1106 9 : case TAG_SVG_ATT_keyTimes:
1107 9 : all_atts->keyTimes = (SMIL_KeyTimes *)att->data;
1108 9 : break;
1109 5 : case TAG_SVG_ATT_keySplines:
1110 5 : all_atts->keySplines = (SMIL_KeySplines *)att->data;
1111 5 : break;
1112 123 : case TAG_SVG_ATT_from:
1113 123 : all_atts->from = (SMIL_AnimateValue *)att->data;
1114 123 : break;
1115 12 : case TAG_SVG_ATT_by:
1116 12 : all_atts->by = (SMIL_AnimateValue *)att->data;
1117 12 : break;
1118 9 : case TAG_SVG_ATT_additive:
1119 9 : all_atts->additive = (SMIL_Additive *)att->data;
1120 9 : break;
1121 5 : case TAG_SVG_ATT_accumulate:
1122 5 : all_atts->accumulate = (SMIL_Accumulate *)att->data;
1123 5 : break;
1124 7 : case TAG_SVG_ATT_path:
1125 7 : all_atts->path = (SVG_PathData *)att->data;
1126 7 : break;
1127 7 : case TAG_SVG_ATT_keyPoints:
1128 7 : all_atts->keyPoints = (SMIL_KeyPoints *)att->data;
1129 7 : break;
1130 11 : case TAG_SVG_ATT_rotate:
1131 11 : all_atts->rotate = (SVG_Rotate *)att->data;
1132 11 : break;
1133 3 : case TAG_SVG_ATT_origin:
1134 3 : all_atts->origin = (SVG_String *)att->data;
1135 3 : break;
1136 144 : case TAG_SVG_ATT_transform_type:
1137 144 : all_atts->transform_type = (SVG_TransformType *)att->data;
1138 144 : break;
1139 2 : case TAG_SVG_ATT_clipBegin:
1140 2 : all_atts->clipBegin = (SVG_Clock *)att->data;
1141 2 : break;
1142 0 : case TAG_SVG_ATT_clipEnd:
1143 0 : all_atts->clipEnd = (SVG_Clock *)att->data;
1144 0 : break;
1145 154 : case TAG_SVG_ATT_syncBehavior:
1146 154 : all_atts->syncBehavior = (SMIL_SyncBehavior *)att->data;
1147 154 : break;
1148 307 : case TAG_SVG_ATT_syncTolerance:
1149 307 : all_atts->syncTolerance = (SMIL_SyncTolerance *)att->data;
1150 307 : break;
1151 154 : case TAG_SVG_ATT_syncMaster:
1152 154 : all_atts->syncMaster = (SVG_Boolean *)att->data;
1153 154 : break;
1154 125 : case TAG_SVG_ATT_syncReference:
1155 125 : all_atts->syncReference = (XMLRI *)att->data;
1156 125 : break;
1157 5489 : case TAG_SVG_ATT_x:
1158 5489 : all_atts->x = (SVG_Coordinate *)att->data;
1159 5489 : break;
1160 4831 : case TAG_SVG_ATT_y:
1161 4831 : all_atts->y = (SVG_Coordinate *)att->data;
1162 4831 : break;
1163 7557 : case TAG_SVG_ATT_width:
1164 7557 : all_atts->width = (SVG_Length *)att->data;
1165 7557 : break;
1166 7557 : case TAG_SVG_ATT_height:
1167 7557 : all_atts->height = (SVG_Length *)att->data;
1168 7557 : break;
1169 2128 : case TAG_SVG_ATT_preserveAspectRatio:
1170 2128 : all_atts->preserveAspectRatio = (SVG_PreserveAspectRatio *)att->data;
1171 2128 : break;
1172 153 : case TAG_SVG_ATT_initialVisibility:
1173 153 : all_atts->initialVisibility = (SVG_InitialVisibility *)att->data;
1174 153 : break;
1175 3 : case TAG_SVG_ATT_type:
1176 3 : all_atts->type = (SVG_ContentType *)att->data;
1177 3 : break;
1178 1238 : case TAG_SVG_ATT_cx:
1179 1238 : all_atts->cx = (SVG_Coordinate *)att->data;
1180 1238 : break;
1181 1238 : case TAG_SVG_ATT_cy:
1182 1238 : all_atts->cy = (SVG_Coordinate *)att->data;
1183 1238 : break;
1184 714 : case TAG_SVG_ATT_r:
1185 714 : all_atts->r = (SVG_Length *)att->data;
1186 714 : break;
1187 0 : case TAG_SVG_ATT_cursorManager_x:
1188 0 : all_atts->cursorManager_x = (SVG_Length *)att->data;
1189 0 : break;
1190 0 : case TAG_SVG_ATT_cursorManager_y:
1191 0 : all_atts->cursorManager_y = (SVG_Length *)att->data;
1192 0 : break;
1193 696 : case TAG_SVG_ATT_rx:
1194 696 : all_atts->rx = (SVG_Length *)att->data;
1195 696 : break;
1196 534 : case TAG_SVG_ATT_ry:
1197 534 : all_atts->ry = (SVG_Length *)att->data;
1198 534 : break;
1199 19 : case TAG_SVG_ATT_horiz_adv_x:
1200 19 : all_atts->horiz_adv_x = (SVG_Number *)att->data;
1201 19 : break;
1202 0 : case TAG_SVG_ATT_horiz_origin_x:
1203 0 : all_atts->horiz_origin_x = (SVG_Number *)att->data;
1204 0 : break;
1205 153 : case TAG_SVG_ATT_font_stretch:
1206 153 : all_atts->font_stretch = (SVG_String *)att->data;
1207 153 : break;
1208 1 : case TAG_SVG_ATT_unicode_range:
1209 1 : all_atts->unicode_range = (SVG_String *)att->data;
1210 1 : break;
1211 2 : case TAG_SVG_ATT_panose_1:
1212 2 : all_atts->panose_1 = (SVG_String *)att->data;
1213 2 : break;
1214 1 : case TAG_SVG_ATT_widths:
1215 1 : all_atts->widths = (SVG_String *)att->data;
1216 1 : break;
1217 1 : case TAG_SVG_ATT_bbox:
1218 1 : all_atts->bbox = (SVG_String *)att->data;
1219 1 : break;
1220 2 : case TAG_SVG_ATT_units_per_em:
1221 2 : all_atts->units_per_em = (SVG_Number *)att->data;
1222 2 : break;
1223 1 : case TAG_SVG_ATT_stemv:
1224 1 : all_atts->stemv = (SVG_Number *)att->data;
1225 1 : break;
1226 1 : case TAG_SVG_ATT_stemh:
1227 1 : all_atts->stemh = (SVG_Number *)att->data;
1228 1 : break;
1229 2 : case TAG_SVG_ATT_slope:
1230 2 : all_atts->slope = (SVG_Number *)att->data;
1231 2 : break;
1232 1 : case TAG_SVG_ATT_cap_height:
1233 1 : all_atts->cap_height = (SVG_Number *)att->data;
1234 1 : break;
1235 1 : case TAG_SVG_ATT_x_height:
1236 1 : all_atts->x_height = (SVG_Number *)att->data;
1237 1 : break;
1238 1 : case TAG_SVG_ATT_accent_height:
1239 1 : all_atts->accent_height = (SVG_Number *)att->data;
1240 1 : break;
1241 2 : case TAG_SVG_ATT_ascent:
1242 2 : all_atts->ascent = (SVG_Number *)att->data;
1243 2 : break;
1244 2 : case TAG_SVG_ATT_descent:
1245 2 : all_atts->descent = (SVG_Number *)att->data;
1246 2 : break;
1247 1 : case TAG_SVG_ATT_ideographic:
1248 1 : all_atts->ideographic = (SVG_Number *)att->data;
1249 1 : break;
1250 2 : case TAG_SVG_ATT_alphabetic:
1251 2 : all_atts->alphabetic = (SVG_Number *)att->data;
1252 2 : break;
1253 1 : case TAG_SVG_ATT_mathematical:
1254 1 : all_atts->mathematical = (SVG_Number *)att->data;
1255 1 : break;
1256 1 : case TAG_SVG_ATT_hanging:
1257 1 : all_atts->hanging = (SVG_Number *)att->data;
1258 1 : break;
1259 1 : case TAG_SVG_ATT_underline_position:
1260 1 : all_atts->underline_position = (SVG_Number *)att->data;
1261 1 : break;
1262 1 : case TAG_SVG_ATT_underline_thickness:
1263 1 : all_atts->underline_thickness = (SVG_Number *)att->data;
1264 1 : break;
1265 1 : case TAG_SVG_ATT_strikethrough_position:
1266 1 : all_atts->strikethrough_position = (SVG_Number *)att->data;
1267 1 : break;
1268 1 : case TAG_SVG_ATT_strikethrough_thickness:
1269 1 : all_atts->strikethrough_thickness = (SVG_Number *)att->data;
1270 1 : break;
1271 1 : case TAG_SVG_ATT_overline_position:
1272 1 : all_atts->overline_position = (SVG_Number *)att->data;
1273 1 : break;
1274 1 : case TAG_SVG_ATT_overline_thickness:
1275 1 : all_atts->overline_thickness = (SVG_Number *)att->data;
1276 1 : break;
1277 3703 : case TAG_SVG_ATT_d:
1278 3703 : all_atts->d = (SVG_PathData *)att->data;
1279 3703 : break;
1280 16 : case TAG_SVG_ATT_unicode:
1281 16 : all_atts->unicode = (SVG_String *)att->data;
1282 16 : break;
1283 1 : case TAG_SVG_ATT_glyph_name:
1284 1 : all_atts->glyph_name = (SVG_String *)att->data;
1285 1 : break;
1286 1 : case TAG_SVG_ATT_arabic_form:
1287 1 : all_atts->arabic_form = (SVG_String *)att->data;
1288 1 : break;
1289 1 : case TAG_SVG_ATT_lang:
1290 1 : all_atts->lang = (SVG_LanguageIDs *)att->data;
1291 1 : break;
1292 1 : case TAG_SVG_ATT_u1:
1293 1 : all_atts->u1 = (SVG_String *)att->data;
1294 1 : break;
1295 1 : case TAG_SVG_ATT_g1:
1296 1 : all_atts->g1 = (SVG_String *)att->data;
1297 1 : break;
1298 0 : case TAG_SVG_ATT_u2:
1299 0 : all_atts->u2 = (SVG_String *)att->data;
1300 0 : break;
1301 0 : case TAG_SVG_ATT_g2:
1302 0 : all_atts->g2 = (SVG_String *)att->data;
1303 0 : break;
1304 1 : case TAG_SVG_ATT_k:
1305 1 : all_atts->k = (SVG_Number *)att->data;
1306 1 : break;
1307 638 : case TAG_SVG_ATT_opacity:
1308 638 : all_atts->opacity = (SVG_Number *)att->data;
1309 638 : break;
1310 1827 : case TAG_SVG_ATT_x1:
1311 1827 : all_atts->x1 = (SVG_Coordinate *)att->data;
1312 1827 : break;
1313 1827 : case TAG_SVG_ATT_y1:
1314 1827 : all_atts->y1 = (SVG_Coordinate *)att->data;
1315 1827 : break;
1316 1827 : case TAG_SVG_ATT_x2:
1317 1827 : all_atts->x2 = (SVG_Coordinate *)att->data;
1318 1827 : break;
1319 1827 : case TAG_SVG_ATT_y2:
1320 1827 : all_atts->y2 = (SVG_Coordinate *)att->data;
1321 1827 : break;
1322 664 : case TAG_SVG_ATT_gradientUnits:
1323 664 : all_atts->gradientUnits = (SVG_GradientUnit *)att->data;
1324 664 : break;
1325 1 : case TAG_SVG_ATT_filterUnits:
1326 1 : all_atts->focusable = (SVG_GradientUnit *)att->data;
1327 1 : break;
1328 302 : case TAG_SVG_ATT_spreadMethod:
1329 302 : all_atts->spreadMethod = (SVG_SpreadMethod *)att->data;
1330 302 : break;
1331 302 : case TAG_SVG_ATT_gradientTransform:
1332 302 : all_atts->gradientTransform = (SVG_Transform *)att->data;
1333 302 : break;
1334 152 : case TAG_SVG_ATT_pathLength:
1335 152 : all_atts->pathLength = (SVG_Number *)att->data;
1336 152 : break;
1337 2210 : case TAG_SVG_ATT_points:
1338 2210 : all_atts->points = (SVG_Points *)att->data;
1339 2210 : break;
1340 0 : case TAG_SVG_ATT_mediaSize:
1341 0 : all_atts->mediaSize = (SVG_Number *)att->data;
1342 0 : break;
1343 0 : case TAG_SVG_ATT_mediaTime:
1344 0 : all_atts->mediaTime = (SVG_String *)att->data;
1345 0 : break;
1346 0 : case TAG_SVG_ATT_mediaCharacterEncoding:
1347 0 : all_atts->mediaCharacterEncoding = (SVG_String *)att->data;
1348 0 : break;
1349 0 : case TAG_SVG_ATT_mediaContentEncodings:
1350 0 : all_atts->mediaContentEncodings = (SVG_String *)att->data;
1351 0 : break;
1352 0 : case TAG_SVG_ATT_bandwidth:
1353 0 : all_atts->bandwidth = (SVG_Number *)att->data;
1354 0 : break;
1355 151 : case TAG_SVG_ATT_fx:
1356 151 : all_atts->fx = (SVG_Coordinate *)att->data;
1357 151 : break;
1358 151 : case TAG_SVG_ATT_fy:
1359 151 : all_atts->fy = (SVG_Coordinate *)att->data;
1360 151 : break;
1361 2 : case TAG_SVG_ATT_size:
1362 2 : all_atts->size = (LASeR_Size *)att->data;
1363 2 : break;
1364 6 : case TAG_SVG_ATT_choice:
1365 6 : all_atts->choice = (LASeR_Choice *)att->data;
1366 6 : break;
1367 2 : case TAG_SVG_ATT_delta:
1368 2 : all_atts->delta = (LASeR_Size *)att->data;
1369 2 : break;
1370 621 : case TAG_SVG_ATT_offset:
1371 621 : all_atts->offset = (SVG_Number *)att->data;
1372 621 : break;
1373 0 : case TAG_SVG_ATT_syncBehaviorDefault:
1374 0 : all_atts->syncBehaviorDefault = (SMIL_SyncBehavior *)att->data;
1375 0 : break;
1376 0 : case TAG_SVG_ATT_syncToleranceDefault:
1377 0 : all_atts->syncToleranceDefault = (SMIL_SyncTolerance *)att->data;
1378 0 : break;
1379 1941 : case TAG_SVG_ATT_viewBox:
1380 1941 : all_atts->viewBox = (SVG_ViewBox *)att->data;
1381 1941 : break;
1382 153 : case TAG_SVG_ATT_zoomAndPan:
1383 153 : all_atts->zoomAndPan = (SVG_ZoomAndPan *)att->data;
1384 153 : break;
1385 1578 : case TAG_SVG_ATT_version:
1386 1578 : all_atts->version = (SVG_String *)att->data;
1387 1578 : break;
1388 586 : case TAG_SVG_ATT_baseProfile:
1389 586 : all_atts->baseProfile = (SVG_String *)att->data;
1390 586 : break;
1391 0 : case TAG_SVG_ATT_contentScriptType:
1392 0 : all_atts->contentScriptType = (SVG_ContentType *)att->data;
1393 0 : break;
1394 0 : case TAG_SVG_ATT_snapshotTime:
1395 0 : all_atts->snapshotTime = (SVG_Clock *)att->data;
1396 0 : break;
1397 0 : case TAG_SVG_ATT_timelineBegin:
1398 0 : all_atts->timelineBegin = (SVG_TimelineBegin *)att->data;
1399 0 : break;
1400 0 : case TAG_SVG_ATT_playbackOrder:
1401 0 : all_atts->playbackOrder = (SVG_PlaybackOrder *)att->data;
1402 0 : break;
1403 0 : case TAG_SVG_ATT_editable:
1404 0 : all_atts->editable = (SVG_Boolean *)att->data;
1405 0 : break;
1406 11020 : case TAG_SVG_ATT_text_x:
1407 11020 : all_atts->text_x = (SVG_Coordinates *)att->data;
1408 11020 : break;
1409 5167 : case TAG_SVG_ATT_text_y:
1410 5167 : all_atts->text_y = (SVG_Coordinates *)att->data;
1411 5167 : break;
1412 152 : case TAG_SVG_ATT_text_rotate:
1413 152 : all_atts->text_rotate = (SVG_Numbers *)att->data;
1414 152 : break;
1415 0 : case TAG_SVG_ATT_transformBehavior:
1416 0 : all_atts->transformBehavior = (SVG_TransformBehavior *)att->data;
1417 0 : break;
1418 0 : case TAG_SVG_ATT_overlay:
1419 0 : all_atts->overlay = (SVG_Overlay *)att->data;
1420 0 : break;
1421 153 : case TAG_SVG_ATT_fullscreen:
1422 153 : all_atts->fullscreen = (SVG_Boolean *)att->data;
1423 153 : break;
1424 452 : case TAG_SVG_ATT_motionTransform:
1425 452 : all_atts->motionTransform = (SVG_Motion *)att->data;
1426 452 : break;
1427 :
1428 0 : case TAG_GSVG_ATT_useAsPrimary:
1429 0 : all_atts->gpac_useAsPrimary = (SVG_Boolean *)att->data;
1430 0 : break;
1431 0 : case TAG_GSVG_ATT_depthOffset:
1432 0 : all_atts->gpac_depthOffset = (SVG_Number *)att->data;
1433 0 : break;
1434 0 : case TAG_GSVG_ATT_depthGain:
1435 0 : all_atts->gpac_depthGain = (SVG_Number *)att->data;
1436 0 : break;
1437 : }
1438 :
1439 161424 : att = att->next;
1440 : }
1441 : }
1442 :
1443 : #endif
1444 :
|