Code

Corrected initialization order.
[inkscape.git] / src / dom / svgimpl.cpp
1 /**
2  * Phoebe DOM Implementation.
3  *
4  * This is a C++ approximation of the W3C DOM model, which follows
5  * fairly closely the specifications in the various .idl files, copies of
6  * which are provided for reference.  Most important is this one:
7  *
8  * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
9  *
10  * Authors:
11  *   Bob Jamison
12  *
13  * Copyright (C) 2005-2008 Bob Jamison
14  *
15  *  This library is free software; you can redistribute it and/or
16  *  modify it under the terms of the GNU Lesser General Public
17  *  License as published by the Free Software Foundation; either
18  *  version 2.1 of the License, or (at your option) any later version.
19  *
20  *  This library is distributed in the hope that it will be useful,
21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23  *  Lesser General Public License for more details.
24  *
25  *  You should have received a copy of the GNU Lesser General Public
26  *  License along with this library; if not, write to the Free Software
27  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
28  */
30 #include "svgimpl.h"
31 #include <cstring>
32 using std::strcmp;
34 /**
35  * This is the .cpp side of the SVG implementations classes.  Note that many
36  * of the sections for each of the classes is empty.   This is because that class
37  * has been implemented totally in svgimpl.h
38  */   
40 namespace org
41 {
42 namespace w3c
43 {
44 namespace dom
45 {
46 namespace svg
47 {
50 /*#########################################################################
51 ## U T I L I T Y
52 #########################################################################*/
54 static DOMString d2s(double d)
55 {
56    char buf[40];
57    snprintf(buf, 40, "%f", d);
58    DOMString s(buf);
59    return s;
60 }
62 static double s2d(const DOMString &s)
63 {
64     const char *begin = s.c_str();
65     char *end;
66     double val = strtod(begin, &end);
67     if (end <= begin)
68         return 0.0;
69     return val;
70 }
73 /*#########################################################################
74 ## Element type lookup table
75 #########################################################################*/
77 /**
78  * Used for mapping name->enum and enum->name.
79  *  For SVG element and interface types.
80  */
81 typedef struct
82 {
83     const char *name;
84     int         type;
85 } SVGTableEntry;
89 SVGTableEntry interfaceTable[] = 
90 {                                  
91     { "SVGAngle",                     SVG_ANGLE                       },
92     { "SVGAnimatedAngle",             SVG_ANIMATED_ANGLE              },
93     { "SVGAnimatedBoolean",           SVG_ANIMATED_BOOLEAN            },
94     { "SVGAnimatedEnumeration",       SVG_ANIMATED_ENUMERATION        },
95     { "SVGAnimatedInteger",           SVG_ANIMATED_INTEGER            },
96     { "SVGAnimatedLength",            SVG_ANIMATED_LENGTH             },
97     { "SVGAnimatedLengthList",        SVG_ANIMATED_LENGTH_LIST        },
98     { "SVGAnimatedNumber",            SVG_ANIMATED_NUMBER             },
99     { "SVGAnimatedNumberList",        SVG_ANIMATED_NUMBER_LIST        },
100     { "SVGAnimatedRect",              SVG_ANIMATED_RECT               },
101     { "SVGAnimatedString",            SVG_ANIMATED_STRING             },
102     { "SVGColor",                     SVG_COLOR                       },
103     { "SVGCSSRule",                   SVG_CSS_RULE                    },
104     { "SVGExternalResourcesRequired", SVG_EXTERNAL_RESOURCES_REQUIRED },
105     { "SVGFitToViewBox",              SVG_FIT_TO_VIEWBOX              },
106     { "SVGICCColor",                  SVG_ICCCOLOR                    },
107     { "SVGLangSpace",                 SVG_LANG_SPACE                  },
108     { "SVGLength",                    SVG_LENGTH                      },
109     { "SVGLengthList",                SVG_LENGTH_LIST                 },
110     { "SVGLocatable",                 SVG_LOCATABLE                   },
111     { "SVGNumber",                    SVG_NUMBER                      },
112     { "SVGNumberList",                SVG_NUMBER_LIST                 },
113     { "SVGRect",                      SVG_RECT                        },
114     { "SVGRenderingIntent",           SVG_RENDERING_INTENT            },
115     { "SVGStringList",                SVG_STRING_LIST                 },
116     { "SVGStylable",                  SVG_STYLABLE                    },
117     { "SVGTests",                     SVG_TESTS                       },
118     { "SVGTransformable",             SVG_TRANSFORMABLE               },
119     { "SVGUnitTypes",                 SVG_UNIT_TYPES                  },
120     { "SVGURIReference",              SVG_URI_REFERENCE               },
121     { "SVGViewSpec",                  SVG_VIEW_SPEC                   },
122     { "SVGZoomAndPan",                SVG_ZOOM_AND_PAN                }
123 };
126 SVGTableEntry elementTable[] =
128     { "a",                            SVG_A_ELEMENT                   },
129     { "altGlyph",                     SVG_ALTGLYPH_ELEMENT            },
130     { "altGlyphDef",                  SVG_ALTGLYPHDEF_ELEMENT         },
131     { "altGlyphItem",                 SVG_ALTGLYPHITEM_ELEMENT        },
132     { "animate",                      SVG_ANIMATE_ELEMENT             },
133     { "animateColor",                 SVG_ANIMATECOLOR_ELEMENT        },
134     { "animateMotion",                SVG_ANIMATEMOTION_ELEMENT       },
135     { "animateTransform",             SVG_ANIMATETRANSFORM_ELEMENT    },
136     { "circle",                       SVG_CIRCLE_ELEMENT              },
137     { "clipPath",                     SVG_CLIPPATH_ELEMENT            },
138     { "color-profile",                SVG_COLOR_PROFILE_ELEMENT       },
139     { "cursor",                       SVG_CURSOR_ELEMENT              },
140     { "definition-src",               SVG_DEFINITION_SRC_ELEMENT      },
141     { "defs",                         SVG_DEFS_ELEMENT                },
142     { "desc",                         SVG_DESC_ELEMENT                },
143     { "ellipse",                      SVG_ELLIPSE_ELEMENT             },
144     { "feBlend",                      SVG_FEBLEND_ELEMENT             },
145     { "feColorMatrix",                SVG_FECOLORMATRIX_ELEMENT       },
146     { "feComponentTransfer",          SVG_FECOMPONENTTRANSFER_ELEMENT },
147     { "feComposite",                  SVG_FECOMPOSITE_ELEMENT         },
148     { "feConvolveMatrix",             SVG_FECONVOLVEMATRIX_ELEMENT    },
149     { "feDiffuseLighting",            SVG_FEDIFFUSELIGHTING_ELEMENT   },
150     { "feDisplacementMap",            SVG_FEDISPLACEMENTMAP_ELEMENT   },
151     { "feDistantLight",               SVG_FEDISTANTLIGHT_ELEMENT      },
152     { "feFlood",                      SVG_FEFLOOD_ELEMENT             },
153     { "feFuncA",                      SVG_FEFUNCA_ELEMENT             },
154     { "feFuncB",                      SVG_FEFUNCB_ELEMENT             },
155     { "feFuncG",                      SVG_FEFUNCG_ELEMENT             },
156     { "feFuncR",                      SVG_FEFUNCR_ELEMENT             },
157     { "feGaussianBlur",               SVG_FEGAUSSIANBLUR_ELEMENT      },
158     { "feImage",                      SVG_FEIMAGE_ELEMENT             },
159     { "feMerge",                      SVG_FEMERGE_ELEMENT             },
160     { "feMergeNode",                  SVG_FEMERGENODE_ELEMENT         },
161     { "feMorphology",                 SVG_FEMORPHOLOGY_ELEMENT        },
162     { "feOffset",                     SVG_FEOFFSET_ELEMENT            },
163     { "fePointLight",                 SVG_FEPOINTLIGHT_ELEMENT        },
164     { "feSpecularLighting",           SVG_FESPECULARLIGHTING_ELEMENT  },
165     { "feSpotLight",                  SVG_FESPOTLIGHT_ELEMENT         },
166     { "feTile",                       SVG_FETILE_ELEMENT              },
167     { "feTurbulence",                 SVG_FETURBULENCE_ELEMENT        },
168     { "filter",                       SVG_FILTER_ELEMENT              },
169     { "font",                         SVG_FONT_ELEMENT                },
170     { "font-face",                    SVG_FONT_FACE_ELEMENT           },
171     { "font-face-format",             SVG_FONT_FACE_FORMAT_ELEMENT    },
172     { "font-face-name",               SVG_FONT_FACE_NAME_ELEMENT      },
173     { "font-face-src",                SVG_FONT_FACE_SRC_ELEMENT       },
174     { "font-face-uri",                SVG_FONT_FACE_URI_ELEMENT       },
175     { "foreignObject",                SVG_FOREIGNOBJECT_ELEMENT       },
176     { "g",                            SVG_G_ELEMENT                   },
177     { "glyph",                        SVG_GLYPH_ELEMENT               },
178     { "glyphRef",                     SVG_GLYPHREF_ELEMENT            },
179     { "hkern",                        SVG_HKERN_ELEMENT               },
180     { "image",                        SVG_IMAGE_ELEMENT               },
181     { "line",                         SVG_LINE_ELEMENT                },
182     { "linearGradient",               SVG_LINEARGRADIENT_ELEMENT      },
183     { "marker",                       SVG_MARKER_ELEMENT              },
184     { "mask",                         SVG_MASK_ELEMENT                },
185     { "metadata",                     SVG_METADATA_ELEMENT            },
186     { "missing-glyph",                SVG_MISSING_GLYPH_ELEMENT       },
187     { "mpath",                        SVG_MPATH_ELEMENT               },
188     { "path",                         SVG_PATH_ELEMENT                },
189     { "pattern",                      SVG_PATTERN_ELEMENT             },
190     { "polygon",                      SVG_POLYGON_ELEMENT             },
191     { "polyline",                     SVG_POLYLINE_ELEMENT            },
192     { "radialGradient",               SVG_RADIALGRADIENT_ELEMENT      },
193     { "rect",                         SVG_RECT_ELEMENT                },
194     { "script",                       SVG_SCRIPT_ELEMENT              },
195     { "set",                          SVG_SET_ELEMENT                 },
196     { "stop",                         SVG_STOP_ELEMENT                },
197     { "style",                        SVG_STYLE_ELEMENT               },
198     { "svg",                          SVG_SVG_ELEMENT                 },
199     { "switch",                       SVG_SWITCH_ELEMENT              },
200     { "symbol",                       SVG_SYMBOL_ELEMENT              },
201     { "text",                         SVG_TEXT_ELEMENT                },
202     { "textPath",                     SVG_TEXTPATH_ELEMENT            },
203     { "title",                        SVG_TITLE_ELEMENT               },
204     { "tref",                         SVG_TREF_ELEMENT                },
205     { "tspan",                        SVG_TSPAN_ELEMENT               },
206     { "use",                          SVG_USE_ELEMENT                 },
207     { "view",                         SVG_VIEW_ELEMENT                },
208     { "vkern",                        SVG_VKERN_ELEMENT               }
209 };
212 static int _entryComparison(const void *vkey, const void *ventry)
214     const char *key = (const char *)vkey;
215     const SVGTableEntry *entry = (const SVGTableEntry *)ventry;
216     return strcmp(key, entry->name);
219 /**
220  * Look up the SVG Element type enum for a given string
221  * Return -1 if not found
222  */
223 int svgElementStrToEnum(const char *str)
225     if (!str)
226         return -1;
227     SVGTableEntry *entry = 
228            (SVGTableEntry *)bsearch(str, elementTable,
229             SVG_MAX_ELEMENT, sizeof(SVGTableEntry), _entryComparison);
230     if (!entry)
231         return -1;
232     return entry->type;
236 /**
237  * Return the string corresponding to a given SVG element type enum
238  * Return "unknown" if not found
239  */
240 const char *svgElementEnumToStr(int type)
242     if (type < 0 || type >= SVG_MAX_ELEMENT)
243         return "unknown";
244     return elementTable[type].name;
248 /**
249  * Look up the SVG Interface type enum for a given string
250  * Return -1 if not found
251  */
252 int svgInterfaceStrToEnum(const char *str)
254     if (!str)
255         return -1;
256     SVGTableEntry *entry = 
257            (SVGTableEntry *)bsearch(str, interfaceTable,
258             SVG_NR_INTERFACES, sizeof(SVGTableEntry), _entryComparison);
259     if (!entry)
260         return -1;
261     return entry->type;
265 /**
266  * Return the string corresponding to a given SVG element type enum
267  * Return "unknown" if not found
268  */
269 const char *svgInterfaceEnumToStr(int type)
271     if (type < 1 || type > (int)SVG_ZOOM_AND_PAN)
272         return "unknown";
273     SVGTableEntry *entry = interfaceTable;
274     for (int i = 0 ; i < SVG_NR_INTERFACES ; i++)
275         {
276         if (entry->type == type)
277             return entry->name;
278         entry++;
279                 }
280     return "unknown";
284 /*#########################################################################
285 ## SVGElementImpl
286 #########################################################################*/
289 //##################
290 //# Non-API methods
291 //##################
296 /*#########################################################################
297 ## SVGDocumentImpl
298 #########################################################################*/
302 //####################################################
303 //# Overload some createXXX() methods from DocumentImpl,
304 //# To create our SVG-DOM types
305 //####################################################
307 /**
308  *
309  */
310 ElementPtr SVGDocumentImpl::createElement(const DOMString& tagName)
311                            throw(DOMException)
313     ElementPtr elem;
314     int elementType = svgElementStrToEnum(tagName.c_str());
315     switch (elementType)
316         {
317         case SVG_A_ELEMENT:
318             {
319             elem = new SVGAElementImpl();
320             break;
321             }                  
322         case SVG_ALTGLYPH_ELEMENT:
323             {
324             elem = new SVGAltGlyphElementImpl();
325             break;
326             }                  
327         case SVG_ALTGLYPHDEF_ELEMENT:
328             {
329             elem = new SVGAltGlyphDefElementImpl();
330             break;
331             }                  
332         case SVG_ALTGLYPHITEM_ELEMENT:
333             {
334             elem = new SVGAltGlyphItemElementImpl();
335             break;
336             }                  
337         case SVG_ANIMATE_ELEMENT:
338             {
339             elem = new SVGAnimateElementImpl();
340             break;
341             }                  
342         case SVG_ANIMATECOLOR_ELEMENT:
343             {
344             elem = new SVGAnimateColorElementImpl();
345             break;
346             }                  
347         case SVG_ANIMATEMOTION_ELEMENT:
348             {
349             elem = new SVGAnimateMotionElementImpl();
350             break;
351             }                  
352         case SVG_ANIMATETRANSFORM_ELEMENT:
353             {
354             elem = new SVGAnimateTransformElementImpl();
355             break;
356             }                  
357         case SVG_CIRCLE_ELEMENT:
358             {
359             elem = new SVGCircleElementImpl();
360             break;
361             }                  
362         case SVG_CLIPPATH_ELEMENT:
363             {
364             elem = new SVGClipPathElementImpl();
365             break;
366             }                  
367         case SVG_COLOR_PROFILE_ELEMENT:
368             {
369             elem = new SVGColorProfileElementImpl();
370             break;
371             }                  
372         case SVG_CURSOR_ELEMENT:
373             {
374             elem = new SVGCursorElementImpl();
375             break;
376             }                  
377         case SVG_DEFINITION_SRC_ELEMENT:
378             {
379             elem = new SVGDefinitionSrcElementImpl();
380             break;
381             }                  
382         case SVG_DEFS_ELEMENT:
383             {
384             elem = new SVGDefsElementImpl();
385             break;
386             }                  
387         case SVG_DESC_ELEMENT:
388             {
389             elem = new SVGDescElementImpl();
390             break;
391             }                  
392         case SVG_ELLIPSE_ELEMENT:
393             {
394             elem = new SVGEllipseElementImpl();
395             break;
396             }                  
397         case SVG_FEBLEND_ELEMENT:
398             {
399             elem = new SVGFEBlendElementImpl();
400             break;
401             }                  
402         case SVG_FECOLORMATRIX_ELEMENT:
403             {
404             elem = new SVGFEColorMatrixElementImpl();
405             break;
406             }                  
407         case SVG_FECOMPONENTTRANSFER_ELEMENT:
408             {
409             elem = new SVGFEComponentTransferElementImpl();
410             break;
411             }                  
412         case SVG_FECOMPOSITE_ELEMENT:
413             {
414             elem = new SVGFECompositeElementImpl();
415             break;
416             }                  
417         case SVG_FECONVOLVEMATRIX_ELEMENT:
418             {
419             elem = new SVGFEConvolveMatrixElementImpl();
420             break;
421             }                  
422         case SVG_FEDIFFUSELIGHTING_ELEMENT:
423             {
424             elem = new SVGFEDiffuseLightingElementImpl();
425             break;
426             }                  
427         case SVG_FEDISPLACEMENTMAP_ELEMENT:
428             {
429             elem = new SVGFEDisplacementMapElementImpl();
430             break;
431             }                  
432         case SVG_FEDISTANTLIGHT_ELEMENT:
433             {
434             elem = new SVGFEDistantLightElementImpl();
435             break;
436             }                  
437         case SVG_FEFLOOD_ELEMENT:
438             {
439             elem = new SVGFEFloodElementImpl();
440             break;
441             }                  
442         case SVG_FEFUNCA_ELEMENT:
443             {
444             elem = new SVGFEFuncAElementImpl();
445             break;
446             }                  
447         case SVG_FEFUNCB_ELEMENT:
448             {
449             elem = new SVGFEFuncBElementImpl();
450             break;
451             }                  
452         case SVG_FEFUNCG_ELEMENT:
453             {
454             elem = new SVGFEFuncGElementImpl();
455             break;
456             }                  
457         case SVG_FEFUNCR_ELEMENT:
458             {
459             elem = new SVGFEFuncRElementImpl();
460             break;
461             }                  
462         case SVG_FEGAUSSIANBLUR_ELEMENT:
463             {
464             elem = new SVGFEGaussianBlurElementImpl();
465             break;
466             }                  
467         case SVG_FEIMAGE_ELEMENT:
468             {
469             elem = new SVGFEImageElementImpl();
470             break;
471             }                  
472         case SVG_FEMERGE_ELEMENT:
473             {
474             elem = new SVGFEMergeElementImpl();
475             break;
476             }                  
477         case SVG_FEMERGENODE_ELEMENT:
478             {
479             elem = new SVGFEMergeNodeElementImpl();
480             break;
481             }                  
482         case SVG_FEMORPHOLOGY_ELEMENT:
483             {
484             elem = new SVGFEMorphologyElementImpl();
485             break;
486             }                  
487         case SVG_FEOFFSET_ELEMENT:
488             {
489             elem = new SVGFEOffsetElementImpl();
490             break;
491             }                  
492         case SVG_FEPOINTLIGHT_ELEMENT:
493             {
494             elem = new SVGFEPointLightElementImpl();
495             break;
496             }                  
497         case SVG_FESPECULARLIGHTING_ELEMENT:
498             {
499             elem = new SVGFESpecularLightingElementImpl();
500             break;
501             }                  
502         case SVG_FESPOTLIGHT_ELEMENT:
503             {
504             elem = new SVGFESpotLightElementImpl();
505             break;
506             }                  
507         case SVG_FETILE_ELEMENT:
508             {
509             elem = new SVGFETileElementImpl();
510             break;
511             }                  
512         case SVG_FETURBULENCE_ELEMENT:
513             {
514             elem = new SVGFETurbulenceElementImpl();
515             break;
516             }                  
517         case SVG_FILTER_ELEMENT:
518             {
519             elem = new SVGFilterElementImpl();
520             break;
521             }                  
522         case SVG_FONT_ELEMENT:
523             {
524             elem = new SVGAElementImpl();
525             break;
526             }                  
527         case SVG_FONT_FACE_ELEMENT:
528             {
529             elem = new SVGFontElementImpl();
530             break;
531             }                  
532         case SVG_FONT_FACE_FORMAT_ELEMENT:
533             {
534             elem = new SVGFontFaceFormatElementImpl();
535             break;
536             }                  
537         case SVG_FONT_FACE_NAME_ELEMENT:
538             {
539             elem = new SVGFontFaceNameElementImpl();
540             break;
541             }                  
542         case SVG_FONT_FACE_SRC_ELEMENT:
543             {
544             elem = new SVGFontFaceSrcElementImpl();
545             break;
546             }                  
547         case SVG_FONT_FACE_URI_ELEMENT:
548             {
549             elem = new SVGFontFaceUriElementImpl();
550             break;
551             }                  
552         case SVG_FOREIGNOBJECT_ELEMENT:
553             {
554             elem = new SVGForeignObjectElementImpl();
555             break;
556             }                  
557         case SVG_G_ELEMENT:
558             {
559             elem = new SVGGElementImpl();
560             break;
561             }                  
562         case SVG_GLYPH_ELEMENT:
563             {
564             elem = new SVGGlyphElementImpl();
565             break;
566             }                  
567         case SVG_GLYPHREF_ELEMENT:
568             {
569             elem = new SVGGlyphRefElementImpl();
570             break;
571             }                  
572         case SVG_HKERN_ELEMENT:
573             {
574             elem = new SVGHKernElementImpl();
575             break;
576             }                  
577         case SVG_IMAGE_ELEMENT:
578             {
579             elem = new SVGImageElementImpl();
580             break;
581             }                  
582         case SVG_LINE_ELEMENT:
583             {
584             elem = new SVGLineElementImpl();
585             break;
586             }                  
587         case SVG_LINEARGRADIENT_ELEMENT:
588             {
589             elem = new SVGLinearGradientElementImpl();
590             break;
591             }                  
592         case SVG_MARKER_ELEMENT:
593             {
594             elem = new SVGMarkerElementImpl();
595             break;
596             }                  
597         case SVG_MASK_ELEMENT:
598             {
599             elem = new SVGMaskElementImpl();
600             break;
601             }                  
602         case SVG_METADATA_ELEMENT:
603             {
604             elem = new SVGMetadataElementImpl();
605             break;
606             }                  
607         case SVG_MISSING_GLYPH_ELEMENT:
608             {
609             elem = new SVGMissingGlyphElementImpl();
610             break;
611             }                  
612         case SVG_MPATH_ELEMENT:
613             {
614             elem = new SVGMPathElementImpl();
615             break;
616             }                  
617         case SVG_PATH_ELEMENT:
618             {
619             elem = new SVGPathElementImpl();
620             break;
621             }                  
622         case SVG_PATTERN_ELEMENT:
623             {
624             elem = new SVGPatternElementImpl();
625             break;
626             }                  
627         case SVG_POLYGON_ELEMENT:
628             {
629             elem = new SVGPolygonElementImpl();
630             break;
631             }                  
632         case SVG_POLYLINE_ELEMENT:
633             {
634             elem = new SVGPolylineElementImpl();
635             break;
636             }                  
637         case SVG_RADIALGRADIENT_ELEMENT:
638             {
639             elem = new SVGRadialGradientElementImpl();
640             break;
641             }                  
642         case SVG_RECT_ELEMENT:
643             {
644             elem = new SVGRectElementImpl();
645             break;
646             }                  
647         case SVG_SCRIPT_ELEMENT:
648             {
649             elem = new SVGScriptElementImpl();
650             break;
651             }                  
652         case SVG_SET_ELEMENT:
653             {
654             elem = new SVGSetElementImpl();
655             break;
656             }                  
657         case SVG_STOP_ELEMENT:
658             {
659             elem = new SVGStopElementImpl();
660             break;
661             }                  
662         case SVG_STYLE_ELEMENT:
663             {
664             elem = new SVGStyleElementImpl();
665             break;
666             }                  
667         case SVG_SVG_ELEMENT:
668             {
669             elem = new SVGSVGElementImpl();
670             break;
671             }                  
672         case SVG_SWITCH_ELEMENT:
673             {
674             elem = new SVGSwitchElementImpl();
675             break;
676             }                  
677         case SVG_SYMBOL_ELEMENT:
678             {
679             elem = new SVGSymbolElementImpl();
680             break;
681             }                  
682         case SVG_TEXT_ELEMENT:
683             {
684             elem = new SVGTextElementImpl();
685             break;
686             }                  
687         case SVG_TEXTPATH_ELEMENT:
688             {
689             elem = new SVGTextPathElementImpl();
690             break;
691             }                  
692         case SVG_TITLE_ELEMENT:
693             {
694             elem = new SVGTitleElementImpl();
695             break;
696             }                  
697         case SVG_TREF_ELEMENT:
698             {
699             elem = new SVGTRefElementImpl();
700             break;
701             }                  
702         case SVG_TSPAN_ELEMENT:
703             {
704             elem = new SVGTSpanElementImpl();
705             break;
706             }                  
707         case SVG_USE_ELEMENT:
708             {
709             elem = new SVGUseElementImpl();
710             break;
711             }                  
712         case SVG_VIEW_ELEMENT:
713             {
714             elem = new SVGViewElementImpl();
715             break;
716             }                  
717         case SVG_VKERN_ELEMENT:
718             {
719             elem = new SVGVKernElementImpl();
720             break;
721             }                  
722         default:
723             {
724             }
725         }
726     return elem;
730 /**
731  *
732  */
733 ElementPtr SVGDocumentImpl::createElementNS(const DOMString& namespaceURI,
734                              const DOMString& qualifiedName)
735                              throw(DOMException)
737     ElementPtr elem;
738     if (namespaceURI == SVG_NAMESPACE)
739         elem = createElement(qualifiedName);
740     else
741         elem = new SVGElementImpl(this, namespaceURI, qualifiedName);
742     return elem;
747 //##################
748 //# Non-API methods
749 //##################
751 void SVGDocumentImpl::init()
753     title       = "";
754     referrer    = "";
755     domain      = "";
756     rootElement = new SVGSVGElementImpl();
764 /*#########################################################################
765 ## SVGSVGElementImpl
766 #########################################################################*/
769 /**
770  * Retrieves an attribute value by name.
771  */
772 DOMString SVGSVGElementImpl::getAttribute(const DOMString& name)
774     DOMString s;
775     if (name == "x")
776         s = d2s(x.getAnimVal().getValue());
777     else if (name == "y")
778         s = d2s(y.getAnimVal().getValue());
779     else 
780             s = SVGElement::getAttribute(name);
781         return s;
784 /**
785  * Sets an attribute value
786  */
787 void SVGSVGElementImpl::setAttribute(const DOMString& name,
788                   const DOMString& value)
789                   throw(DOMException)
791     if (name == "x")
792         x.getAnimVal().setValue(s2d(value));
793     else if (name == "y")
794         y.getAnimVal().setValue(s2d(value));
795     SVGElement::setAttribute(name, value);
799 /**
800  *
801  */
802 unsigned long SVGSVGElementImpl::suspendRedraw(unsigned long /*max_wait_milliseconds*/ )
804     return 0L;
807 /**
808  *
809  */
810 void SVGSVGElementImpl::unsuspendRedraw(unsigned long /*suspend_handle_id*/ )
811                                   throw ( DOMException )
816 /**
817  *
818  */
819 void SVGSVGElementImpl::unsuspendRedrawAll(  )
823 /**
824  *
825  */
826 void SVGSVGElementImpl::forceRedraw(  )
830 /**
831  *
832  */
833 void SVGSVGElementImpl::pauseAnimations(  )
837 /**
838  *
839  */
840 void SVGSVGElementImpl::unpauseAnimations(  )
844 /**
845  *
846  */
847 bool SVGSVGElementImpl::animationsPaused(  )
849     return false;
853 /**
854  *
855  */
856 NodeList SVGSVGElementImpl::getIntersectionList(const SVGRect &/*rect*/,
857                         const SVGElementPtr /*referenceElement*/ )
859     NodeList list;
860     return list;
863 /**
864  *
865  */
866 NodeList SVGSVGElementImpl::getEnclosureList(const SVGRect &/*rect*/,
867                          const SVGElementPtr /*referenceElement*/ )
869     NodeList list;
870     return list;
873 /**
874  *
875  */
876 bool SVGSVGElementImpl::checkIntersection(const SVGElementPtr /*element*/,
877                                           const SVGRect &/*rect*/ )
879     return false;
882 /**
883  *
884  */
885 bool SVGSVGElementImpl::checkEnclosure(const SVGElementPtr /*element*/,
886                                        const SVGRect &/*rect*/ )
888     return false;
891 /**
892  *
893  */
894 void SVGSVGElementImpl::deselectAll(  )
898 /**
899  *
900  */
901 ElementPtr SVGSVGElementImpl::getElementById(const DOMString& /*elementId*/ )
903     return NULL;
908 //##################
909 //# Non-API methods
910 //##################
916 /*#########################################################################
917 ## SVGGElementImpl
918 #########################################################################*/
921 //##################
922 //# Non-API methods
923 //##################
930 /*#########################################################################
931 ## SVGDefsElementImpl
932 #########################################################################*/
936 //##################
937 //# Non-API methods
938 //##################
945 /*#########################################################################
946 ## SVGDescElementImpl
947 #########################################################################*/
951 //##################
952 //# Non-API methods
953 //##################
960 /*#########################################################################
961 ## SVGTitleElementImpl
962 #########################################################################*/
966 //##################
967 //# Non-API methods
968 //##################
973 /*#########################################################################
974 ## SVGSymbolElementImpl
975 #########################################################################*/
980 //##################
981 //# Non-API methods
982 //##################
989 /*#########################################################################
990 ## SVGUseElementImpl
991 #########################################################################*/
995 //##################
996 //# Non-API methods
997 //##################
1007 /*#########################################################################
1008 ## SVGImageElementImpl
1009 #########################################################################*/
1013 //##################
1014 //# Non-API methods
1015 //##################
1024 /*#########################################################################
1025 ## SVGSwitchElementImpl
1026 #########################################################################*/
1030 //##################
1031 //# Non-API methods
1032 //##################
1039 /*#########################################################################
1040 ## GetSVGDocumentImpl
1041 #########################################################################*/
1043 /**
1044  *
1045  */
1046 SVGDocumentPtr GetSVGDocumentImpl::getSVGDocument(  )
1047                     throw ( DOMException )
1049     return NULL;
1052 //##################
1053 //# Non-API methods
1054 //##################
1063 /*#########################################################################
1064 ## SVGStyleElementImpl
1065 #########################################################################*/
1071 //##################
1072 //# Non-API methods
1073 //##################
1078 /*#########################################################################
1079 ## SVGPathElementImpl
1080 #########################################################################*/
1082 /**
1083  *
1084  */
1085 SVGAnimatedNumber SVGPathElementImpl::getPathLength()
1087     SVGAnimatedNumber ret;
1088     return ret;
1091 /**
1092  *
1093  */
1094 double SVGPathElementImpl::getTotalLength(  )
1096     return 0.0;
1099 /**
1100  *
1101  */
1102 SVGPoint SVGPathElementImpl::getPointAtLength(double /*distance*/ )
1104     SVGPoint ret;
1105     return ret;
1108 /**
1109  *
1110  */
1111 unsigned long SVGPathElementImpl::getPathSegAtLength(double /*distance*/ )
1113     return 0L;
1117 //##################
1118 //# Non-API methods
1119 //##################
1128 /*#########################################################################
1129 ## SVGRectElementImpl
1130 #########################################################################*/
1136 //##################
1137 //# Non-API methods
1138 //##################
1147 /*#########################################################################
1148 ## SVGCircleElementImpl
1149 #########################################################################*/
1154 //##################
1155 //# Non-API methods
1156 //##################
1165 /*#########################################################################
1166 ## SVGEllipseElementImpl
1167 #########################################################################*/
1171 //##################
1172 //# Non-API methods
1173 //##################
1182 /*#########################################################################
1183 ## SVGLineElementImpl
1184 #########################################################################*/
1187 //##################
1188 //# Non-API methods
1189 //##################
1198 /*#########################################################################
1199 ## SVGPolylineElementImpl
1200 #########################################################################*/
1206 //##################
1207 //# Non-API methods
1208 //##################
1215 /*#########################################################################
1216 ## SVGPolygonElementImpl
1217 #########################################################################*/
1224 //##################
1225 //# Non-API methods
1226 //##################
1234 /*#########################################################################
1235 ## SVGTextContentElementImpl
1236 #########################################################################*/
1238 /**
1239  *
1240  */
1241 SVGAnimatedLength SVGTextContentElementImpl::getTextLength()
1243     SVGAnimatedLength ret;
1244     return ret;
1248 /**
1249  *
1250  */
1251 SVGAnimatedEnumeration SVGTextContentElementImpl::getLengthAdjust()
1253     SVGAnimatedEnumeration ret;
1254     return ret;
1258 /**
1259  *
1260  */
1261 long SVGTextContentElementImpl::getNumberOfChars(  )
1263     return 0L;
1266 /**
1267  *
1268  */
1269 double SVGTextContentElementImpl::getComputedTextLength(  )
1271     return 0.0;
1274 /**
1275  *
1276  */
1277 double SVGTextContentElementImpl::getSubStringLength(unsigned long /*charnum*/, unsigned long /*nchars*/ )
1278                                      throw ( DOMException )
1280     return 0.0;
1283 /**
1284  *
1285  */
1286 SVGPoint SVGTextContentElementImpl::getStartPositionOfChar(unsigned long /*charnum*/ )
1287                                               throw ( DOMException )
1289     SVGPoint ret;
1290     return ret;
1293 /**
1294  *
1295  */
1296 SVGPoint SVGTextContentElementImpl::getEndPositionOfChar(unsigned long /*charnum*/ )
1297                                            throw ( DOMException )
1299     SVGPoint ret;
1300     return ret;
1303 /**
1304  *
1305  */
1306 SVGRect SVGTextContentElementImpl::getExtentOfChar(unsigned long /*charnum*/ )
1307                                       throw ( DOMException )
1309     SVGRect ret;
1310     return ret;
1313 /**
1314  *
1315  */
1316 double SVGTextContentElementImpl::getRotationOfChar(unsigned long /*charnum*/ )
1317                                      throw ( DOMException )
1319     return 0.0;
1322 /**
1323  *
1324  */
1325 long SVGTextContentElementImpl::getCharNumAtPosition(const SVGPoint &/*point*/ )
1327     return 0L;
1330 /**
1331  *
1332  */
1333 void SVGTextContentElementImpl::selectSubString(unsigned long /*charnum*/,
1334                                                 unsigned long /*nchars*/ )
1335                                                 throw ( DOMException )
1341 //##################
1342 //# Non-API methods
1343 //##################
1353 /*#########################################################################
1354 ## SVGTextPositioningElementImpl
1355 #########################################################################*/
1360 //##################
1361 //# Non-API methods
1362 //##################
1371 /*#########################################################################
1372 ## SVGTextElementImpl
1373 #########################################################################*/
1379 //##################
1380 //# Non-API methods
1381 //##################
1389 /*#########################################################################
1390 ## SVGTSpanElementImpl
1391 #########################################################################*/
1397 //##################
1398 //# Non-API methods
1399 //##################
1406 /*#########################################################################
1407 ## SVGTRefElementImpl
1408 #########################################################################*/
1414 //##################
1415 //# Non-API methods
1416 //##################
1424 /*#########################################################################
1425 ## SVGTextPathElementImpl
1426 #########################################################################*/
1431 //##################
1432 //# Non-API methods
1433 //##################
1443 /*#########################################################################
1444 ## SVGAltGlyphElementImpl
1445 #########################################################################*/
1452 //##################
1453 //# Non-API methods
1454 //##################
1462 /*#########################################################################
1463 ## SVGAltGlyphDefElementImpl
1464 #########################################################################*/
1470 //##################
1471 //# Non-API methods
1472 //##################
1480 /*#########################################################################
1481 ## SVGAltGlyphItemElementImpl
1482 #########################################################################*/
1488 //##################
1489 //# Non-API methods
1490 //##################
1498 /*#########################################################################
1499 ## SVGGlyphRefElementImpl
1500 #########################################################################*/
1505 //##################
1506 //# Non-API methods
1507 //##################
1516 /*#########################################################################
1517 ## SVGMarkerElementImpl
1518 #########################################################################*/
1523 //##################
1524 //# Non-API methods
1525 //##################
1534 /*#########################################################################
1535 ## SVGColorProfileElementImpl
1536 #########################################################################*/
1541 //##################
1542 //# Non-API methods
1543 //##################
1553 /*#########################################################################
1554 ## SVGGradientElementImpl
1555 #########################################################################*/
1559 //##################
1560 //# Non-API methods
1561 //##################
1569 /*#########################################################################
1570 ## SVGLinearGradientElementImpl
1571 #########################################################################*/
1576 //##################
1577 //# Non-API methods
1578 //##################
1587 /*#########################################################################
1588 ## SVGRadialGradientElementImpl
1589 #########################################################################*/
1595 //##################
1596 //# Non-API methods
1597 //##################
1606 /*#########################################################################
1607 ## SVGStopElementImpl
1608 #########################################################################*/
1614 //##################
1615 //# Non-API methods
1616 //##################
1626 /*#########################################################################
1627 ## SVGPatternElementImpl
1628 #########################################################################*/
1632 //##################
1633 //# Non-API methods
1634 //##################
1643 /*#########################################################################
1644 ## SVGClipPathElementImpl
1645 #########################################################################*/
1652 //##################
1653 //# Non-API methods
1654 //##################
1664 /*#########################################################################
1665 ## SVGMaskElementImpl
1666 #########################################################################*/
1670 //##################
1671 //# Non-API methods
1672 //##################
1682 /*#########################################################################
1683 ## SVGFilterElementImpl
1684 #########################################################################*/
1690 //##################
1691 //# Non-API methods
1692 //##################
1702 /*#########################################################################
1703 ## SVGFEBlendElementImpl
1704 #########################################################################*/
1709 //##################
1710 //# Non-API methods
1711 //##################
1720 /*#########################################################################
1721 ## SVGFEColorMatrixElementImpl
1722 #########################################################################*/
1726 //##################
1727 //# Non-API methods
1728 //##################
1738 /*#########################################################################
1739 ## SVGFEComponentTransferElementImpl
1740 #########################################################################*/
1745 //##################
1746 //# Non-API methods
1747 //##################
1758 /*#########################################################################
1759 ## SVGComponentTransferFunctionElementImpl
1760 #########################################################################*/
1764 //##################
1765 //# Non-API methods
1766 //##################
1776 /*#########################################################################
1777 ## SVGFEFuncRElementImpl
1778 #########################################################################*/
1782 //##################
1783 //# Non-API methods
1784 //##################
1792 /*#########################################################################
1793 ## SVGFEFuncGElementImpl
1794 #########################################################################*/
1800 //##################
1801 //# Non-API methods
1802 //##################
1810 /*#########################################################################
1811 ## SVGFEFuncBElementImpl
1812 #########################################################################*/
1818 //##################
1819 //# Non-API methods
1820 //##################
1828 /*#########################################################################
1829 ## SVGFEFuncAElementImpl
1830 #########################################################################*/
1836 //##################
1837 //# Non-API methods
1838 //##################
1846 /*#########################################################################
1847 ## SVGFECompositeElementImpl
1848 #########################################################################*/
1853 //##################
1854 //# Non-API methods
1855 //##################
1864 /*#########################################################################
1865 ## SVGFEConvolveMatrixElementImpl
1866 #########################################################################*/
1870 //##################
1871 //# Non-API methods
1872 //##################
1881 /*#########################################################################
1882 ## SVGFEDiffuseLightingElementImpl
1883 #########################################################################*/
1888 //##################
1889 //# Non-API methods
1890 //##################
1896 /*#########################################################################
1897 ## SVGFEDistantLightElementImpl
1898 #########################################################################*/
1904 //##################
1905 //# Non-API methods
1906 //##################
1916 /*#########################################################################
1917 ## SVGFEPointLightElementImpl
1918 #########################################################################*/
1922 //##################
1923 //# Non-API methods
1924 //##################
1934 /*#########################################################################
1935 ## SVGFESpotLightElementImpl
1936 #########################################################################*/
1943 //##################
1944 //# Non-API methods
1945 //##################
1955 /*#########################################################################
1956 ## SVGFEDisplacementMapElementImpl
1957 #########################################################################*/
1962 //##################
1963 //# Non-API methods
1964 //##################
1974 /*#########################################################################
1975 ## SVGFEFloodElementImpl
1976 #########################################################################*/
1982 //##################
1983 //# Non-API methods
1984 //##################
1994 /*#########################################################################
1995 ## SVGFEGaussianBlurElementImpl
1996 #########################################################################*/
2002 //##################
2003 //# Non-API methods
2004 //##################
2014 /*#########################################################################
2015 ## SVGFEImageElementImpl
2016 #########################################################################*/
2021 //##################
2022 //# Non-API methods
2023 //##################
2031 /*#########################################################################
2032 ## SVGFEMergeElementImpl
2033 #########################################################################*/
2038 //##################
2039 //# Non-API methods
2040 //##################
2048 /*#########################################################################
2049 ## SVGFEMergeNodeElementImpl
2050 #########################################################################*/
2056 //##################
2057 //# Non-API methods
2058 //##################
2067 /*#########################################################################
2068 ## SVGFEMorphologyElementImpl
2069 #########################################################################*/
2073 //##################
2074 //# Non-API methods
2075 //##################
2084 /*#########################################################################
2085 ## SVGFEOffsetElementImpl
2086 #########################################################################*/
2091 //##################
2092 //# Non-API methods
2093 //##################
2100 /*#########################################################################
2101 ## SVGFESpecularLightingElementImpl
2102 #########################################################################*/
2106 //##################
2107 //# Non-API methods
2108 //##################
2118 /*#########################################################################
2119 ## SVGFETileElementImpl
2120 #########################################################################*/
2126 //##################
2127 //# Non-API methods
2128 //##################
2138 /*#########################################################################
2139 ## SVGFETurbulenceElementImpl
2140 #########################################################################*/
2147 //##################
2148 //# Non-API methods
2149 //##################
2159 /*#########################################################################
2160 ## SVGCursorElementImpl
2161 #########################################################################*/
2165 //##################
2166 //# Non-API methods
2167 //##################
2177 /*#########################################################################
2178 ## SVGAElementImpl
2179 #########################################################################*/
2185 //##################
2186 //# Non-API methods
2187 //##################
2196 /*#########################################################################
2197 ## SVGViewElementImpl
2198 #########################################################################*/
2205 //##################
2206 //# Non-API methods
2207 //##################
2216 /*#########################################################################
2217 ## SVGScriptElementImpl
2218 #########################################################################*/
2223 //##################
2224 //# Non-API methods
2225 //##################
2233 /*#########################################################################
2234 ## SVGAnimationElementImpl
2235 #########################################################################*/
2241 //##################
2242 //# Non-API methods
2243 //##################
2253 /*#########################################################################
2254 ## SVGAnimateElementImpl
2255 #########################################################################*/
2258 //##################
2259 //# Non-API methods
2260 //##################
2268 /*#########################################################################
2269 ## SVGSetElementImpl
2270 #########################################################################*/
2275 //##################
2276 //# Non-API methods
2277 //##################
2285 /*#########################################################################
2286 ## SVGAnimateMotionElementImpl
2287 #########################################################################*/
2290 //##################
2291 //# Non-API methods
2292 //##################
2300 /*#########################################################################
2301 ## SVGMPathElementImpl
2302 #########################################################################*/
2305 //##################
2306 //# Non-API methods
2307 //##################
2315 /*#########################################################################
2316 ## SVGAnimateColorElementImpl
2317 #########################################################################*/
2320 //##################
2321 //# Non-API methods
2322 //##################
2330 /*#########################################################################
2331 ## SVGAnimateTransformElementImpl
2332 #########################################################################*/
2336 //##################
2337 //# Non-API methods
2338 //##################
2346 /*#########################################################################
2347 ## SVGFontElementImpl
2348 #########################################################################*/
2352 //##################
2353 //# Non-API methods
2354 //##################
2362 /*#########################################################################
2363 ## SVGGlyphElementImpl
2364 #########################################################################*/
2368 //##################
2369 //# Non-API methods
2370 //##################
2378 /*#########################################################################
2379 ## SVGMissingGlyphElementImpl
2380 #########################################################################*/
2384 //##################
2385 //# Non-API methods
2386 //##################
2394 /*#########################################################################
2395 ## SVGHKernElementImpl
2396 #########################################################################*/
2400 //##################
2401 //# Non-API methods
2402 //##################
2410 /*#########################################################################
2411 ## SVGVKernElementImpl
2412 #########################################################################*/
2416 //##################
2417 //# Non-API methods
2418 //##################
2426 /*#########################################################################
2427 ## SVGFontFaceElementImpl
2428 #########################################################################*/
2432 //##################
2433 //# Non-API methods
2434 //##################
2442 /*#########################################################################
2443 ## SVGFontFaceSrcElementImpl
2444 #########################################################################*/
2448 //##################
2449 //# Non-API methods
2450 //##################
2458 /*#########################################################################
2459 ## SVGFontFaceUriElementImpl
2460 #########################################################################*/
2464 //##################
2465 //# Non-API methods
2466 //##################
2472 /*#########################################################################
2473 ## SVGFontFaceFormatElementImpl
2474 #########################################################################*/
2479 //##################
2480 //# Non-API methods
2481 //##################
2488 /*#########################################################################
2489 ## SVGFontFaceNameElementImpl
2490 #########################################################################*/
2494 //##################
2495 //# Non-API methods
2496 //##################
2504 /*#########################################################################
2505 ## SVGDefinitionSrcElementImpl
2506 #########################################################################*/
2510 //##################
2511 //# Non-API methods
2512 //##################
2520 /*#########################################################################
2521 ## SVGMetadataElementImpl
2522 #########################################################################*/
2525 //##################
2526 //# Non-API methods
2527 //##################
2533 /*#########################################################################
2534 ## SVGForeignObjectElementImpl
2535 #########################################################################*/
2539 //##################
2540 //# Non-API methods
2541 //##################
2554 }  //namespace svg
2555 }  //namespace dom
2556 }  //namespace w3c
2557 }  //namespace org
2560 /*#########################################################################
2561 ## E N D    O F    F I L E
2562 #########################################################################*/