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[] =
127 {
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)
213 {
214 const char *key = (const char *)vkey;
215 const SVGTableEntry *entry = (const SVGTableEntry *)ventry;
216 return strcmp(key, entry->name);
217 }
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)
224 {
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;
233 }
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)
241 {
242 if (type < 0 || type >= SVG_MAX_ELEMENT)
243 return "unknown";
244 return elementTable[type].name;
245 }
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)
253 {
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;
262 }
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)
270 {
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";
281 }
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)
312 {
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;
727 }
730 /**
731 *
732 */
733 ElementPtr SVGDocumentImpl::createElementNS(const DOMString& namespaceURI,
734 const DOMString& qualifiedName)
735 throw(DOMException)
736 {
737 ElementPtr elem;
738 if (namespaceURI == SVG_NAMESPACE)
739 elem = createElement(qualifiedName);
740 else
741 elem = new SVGElementImpl(this, namespaceURI, qualifiedName);
742 return elem;
743 }
747 //##################
748 //# Non-API methods
749 //##################
751 void SVGDocumentImpl::init()
752 {
753 title = "";
754 referrer = "";
755 domain = "";
756 rootElement = new SVGSVGElementImpl();
757 }
764 /*#########################################################################
765 ## SVGSVGElementImpl
766 #########################################################################*/
769 /**
770 * Retrieves an attribute value by name.
771 */
772 DOMString SVGSVGElementImpl::getAttribute(const DOMString& name)
773 {
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;
782 }
784 /**
785 * Sets an attribute value
786 */
787 void SVGSVGElementImpl::setAttribute(const DOMString& name,
788 const DOMString& value)
789 throw(DOMException)
790 {
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);
796 }
799 /**
800 *
801 */
802 unsigned long SVGSVGElementImpl::suspendRedraw(unsigned long /*max_wait_milliseconds*/ )
803 {
804 return 0L;
805 }
807 /**
808 *
809 */
810 void SVGSVGElementImpl::unsuspendRedraw(unsigned long /*suspend_handle_id*/ )
811 throw ( DOMException )
812 {
813 }
816 /**
817 *
818 */
819 void SVGSVGElementImpl::unsuspendRedrawAll( )
820 {
821 }
823 /**
824 *
825 */
826 void SVGSVGElementImpl::forceRedraw( )
827 {
828 }
830 /**
831 *
832 */
833 void SVGSVGElementImpl::pauseAnimations( )
834 {
835 }
837 /**
838 *
839 */
840 void SVGSVGElementImpl::unpauseAnimations( )
841 {
842 }
844 /**
845 *
846 */
847 bool SVGSVGElementImpl::animationsPaused( )
848 {
849 return false;
850 }
853 /**
854 *
855 */
856 NodeList SVGSVGElementImpl::getIntersectionList(const SVGRect &/*rect*/,
857 const SVGElementPtr /*referenceElement*/ )
858 {
859 NodeList list;
860 return list;
861 }
863 /**
864 *
865 */
866 NodeList SVGSVGElementImpl::getEnclosureList(const SVGRect &/*rect*/,
867 const SVGElementPtr /*referenceElement*/ )
868 {
869 NodeList list;
870 return list;
871 }
873 /**
874 *
875 */
876 bool SVGSVGElementImpl::checkIntersection(const SVGElementPtr /*element*/,
877 const SVGRect &/*rect*/ )
878 {
879 return false;
880 }
882 /**
883 *
884 */
885 bool SVGSVGElementImpl::checkEnclosure(const SVGElementPtr /*element*/,
886 const SVGRect &/*rect*/ )
887 {
888 return false;
889 }
891 /**
892 *
893 */
894 void SVGSVGElementImpl::deselectAll( )
895 {
896 }
898 /**
899 *
900 */
901 ElementPtr SVGSVGElementImpl::getElementById(const DOMString& /*elementId*/ )
902 {
903 return NULL;
904 }
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 )
1048 {
1049 return NULL;
1050 }
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()
1086 {
1087 SVGAnimatedNumber ret;
1088 return ret;
1089 }
1091 /**
1092 *
1093 */
1094 double SVGPathElementImpl::getTotalLength( )
1095 {
1096 return 0.0;
1097 }
1099 /**
1100 *
1101 */
1102 SVGPoint SVGPathElementImpl::getPointAtLength(double /*distance*/ )
1103 {
1104 SVGPoint ret;
1105 return ret;
1106 }
1108 /**
1109 *
1110 */
1111 unsigned long SVGPathElementImpl::getPathSegAtLength(double /*distance*/ )
1112 {
1113 return 0L;
1114 }
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()
1242 {
1243 SVGAnimatedLength ret;
1244 return ret;
1245 }
1248 /**
1249 *
1250 */
1251 SVGAnimatedEnumeration SVGTextContentElementImpl::getLengthAdjust()
1252 {
1253 SVGAnimatedEnumeration ret;
1254 return ret;
1255 }
1258 /**
1259 *
1260 */
1261 long SVGTextContentElementImpl::getNumberOfChars( )
1262 {
1263 return 0L;
1264 }
1266 /**
1267 *
1268 */
1269 double SVGTextContentElementImpl::getComputedTextLength( )
1270 {
1271 return 0.0;
1272 }
1274 /**
1275 *
1276 */
1277 double SVGTextContentElementImpl::getSubStringLength(unsigned long /*charnum*/, unsigned long /*nchars*/ )
1278 throw ( DOMException )
1279 {
1280 return 0.0;
1281 }
1283 /**
1284 *
1285 */
1286 SVGPoint SVGTextContentElementImpl::getStartPositionOfChar(unsigned long /*charnum*/ )
1287 throw ( DOMException )
1288 {
1289 SVGPoint ret;
1290 return ret;
1291 }
1293 /**
1294 *
1295 */
1296 SVGPoint SVGTextContentElementImpl::getEndPositionOfChar(unsigned long /*charnum*/ )
1297 throw ( DOMException )
1298 {
1299 SVGPoint ret;
1300 return ret;
1301 }
1303 /**
1304 *
1305 */
1306 SVGRect SVGTextContentElementImpl::getExtentOfChar(unsigned long /*charnum*/ )
1307 throw ( DOMException )
1308 {
1309 SVGRect ret;
1310 return ret;
1311 }
1313 /**
1314 *
1315 */
1316 double SVGTextContentElementImpl::getRotationOfChar(unsigned long /*charnum*/ )
1317 throw ( DOMException )
1318 {
1319 return 0.0;
1320 }
1322 /**
1323 *
1324 */
1325 long SVGTextContentElementImpl::getCharNumAtPosition(const SVGPoint &/*point*/ )
1326 {
1327 return 0L;
1328 }
1330 /**
1331 *
1332 */
1333 void SVGTextContentElementImpl::selectSubString(unsigned long /*charnum*/,
1334 unsigned long /*nchars*/ )
1335 throw ( DOMException )
1336 {
1337 }
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 #########################################################################*/