001/*
002 * ============================================================================
003 * Copyright © 2002-2023 by Thomas Thrien.
004 * All Rights Reserved.
005 * ============================================================================
006 * Licensed to the public under the agreements of the GNU Lesser General Public
007 * License, version 3.0 (the "License"). You may obtain a copy of the License at
008 *
009 *      http://www.gnu.org/licenses/lgpl.html
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
014 * License for the specific language governing permissions and limitations
015 * under the License.
016 */
017
018package org.tquadrat.foundation.svg;
019
020import static java.lang.String.format;
021import static java.util.Arrays.asList;
022import static org.apiguardian.api.API.Status.STABLE;
023import static org.tquadrat.foundation.lang.CommonConstants.EMPTY_STRING;
024import static org.tquadrat.foundation.lang.CommonConstants.XMLATTRIBUTE_Class;
025import static org.tquadrat.foundation.lang.Objects.requireNonNullArgument;
026import static org.tquadrat.foundation.svg.SVG.Usage.EMBED_SVG;
027import static org.tquadrat.foundation.svg.type.SVGColor.COLOR_INHERIT;
028import static org.tquadrat.foundation.svg.type.SVGElementCategory.retrieveElementCategory;
029import static org.tquadrat.foundation.svg.type.SVGUnit.CENTIMETER;
030import static org.tquadrat.foundation.svg.type.SVGUnit.EM;
031import static org.tquadrat.foundation.svg.type.SVGUnit.EX;
032import static org.tquadrat.foundation.svg.type.SVGUnit.INCH;
033import static org.tquadrat.foundation.svg.type.SVGUnit.PICA;
034import static org.tquadrat.foundation.svg.type.SVGUnit.POINT;
035import static org.tquadrat.foundation.util.StringUtils.isNotEmptyOrBlank;
036import static org.tquadrat.foundation.xml.builder.XMLBuilderUtils.createXMLDocument;
037
038import java.net.URI;
039import java.util.ArrayList;
040import java.util.List;
041
042import org.apiguardian.api.API;
043import org.tquadrat.foundation.annotation.ClassVersion;
044import org.tquadrat.foundation.annotation.UtilityClass;
045import org.tquadrat.foundation.exception.PrivateConstructorForStaticClassCalledError;
046import org.tquadrat.foundation.exception.UnsupportedEnumError;
047import org.tquadrat.foundation.lang.CommonConstants;
048import org.tquadrat.foundation.svg.SVG.Usage;
049import org.tquadrat.foundation.svg.internal.SVGClipPathImpl;
050import org.tquadrat.foundation.svg.internal.SVGGroupImpl;
051import org.tquadrat.foundation.svg.internal.SVGImpl;
052import org.tquadrat.foundation.svg.internal.SVGLineImpl;
053import org.tquadrat.foundation.svg.internal.SVGMarkerImpl;
054import org.tquadrat.foundation.svg.internal.SVGPathImpl;
055import org.tquadrat.foundation.svg.internal.SVGPositionedMarkerImpl;
056import org.tquadrat.foundation.svg.internal.SVGRectangleImpl;
057import org.tquadrat.foundation.svg.internal.SVGStyleImpl;
058import org.tquadrat.foundation.svg.internal.SVGSymbolImpl;
059import org.tquadrat.foundation.svg.internal.SVGTSpanImpl;
060import org.tquadrat.foundation.svg.internal.SVGTextImpl;
061import org.tquadrat.foundation.svg.internal.SVGUseImpl;
062import org.tquadrat.foundation.svg.type.SVGColor;
063import org.tquadrat.foundation.svg.type.SVGNumber;
064import org.tquadrat.foundation.svg.type.SVGNumber.SVGDegree;
065import org.tquadrat.foundation.svg.type.SVGNumber.SVGMillimeter;
066import org.tquadrat.foundation.svg.type.SVGNumber.SVGPercent;
067import org.tquadrat.foundation.svg.type.SVGNumber.SVGPixel;
068import org.tquadrat.foundation.svg.type.SVGNumber.SVGUserUnitValue;
069import org.tquadrat.foundation.svg.type.SVGPathElement;
070import org.tquadrat.foundation.svg.type.SVGPathElement.SVGArcTo;
071import org.tquadrat.foundation.svg.type.SVGPathElement.SVGClosePath;
072import org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo;
073import org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo;
074import org.tquadrat.foundation.svg.type.SVGPathElement.SVGLineTo;
075import org.tquadrat.foundation.svg.type.SVGPathElement.SVGMoveTo;
076import org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo;
077import org.tquadrat.foundation.svg.type.SVGPathElement.SVGVLineTo;
078import org.tquadrat.foundation.svg.type.SVGTransform.SVGMatrix;
079import org.tquadrat.foundation.svg.type.SVGTransform.SVGRotate;
080import org.tquadrat.foundation.svg.type.SVGTransform.SVGScale;
081import org.tquadrat.foundation.svg.type.SVGTransform.SVGSkewX;
082import org.tquadrat.foundation.svg.type.SVGTransform.SVGSkewY;
083import org.tquadrat.foundation.svg.type.SVGTransform.SVGTranslate;
084import org.tquadrat.foundation.xml.builder.Namespace;
085import org.tquadrat.foundation.xml.builder.XMLDocument;
086import org.tquadrat.foundation.xml.builder.XMLElement;
087import org.tquadrat.foundation.xml.builder.XMLElement.Flags;
088import org.tquadrat.foundation.xml.builder.spi.XMLElementAdapter;
089
090/**
091 *  A collection of SVG related utility methods and factory methods for SVG
092 *  elements.
093 *
094 *  @extauthor Thomas Thrien - thomas.thrien@tquadrat.org
095 *  @version $Id: SVGUtils.java 1086 2024-01-05 23:18:33Z tquadrat $
096 *  @since 0.0.5
097 *
098 *  @UMLGraph.link
099 */
100@SuppressWarnings( {"ClassWithTooManyMethods", "OverlyComplexClass", "OverlyCoupledClass"} )
101@UtilityClass
102@ClassVersion( sourceVersion = "$Id: SVGUtils.java 1086 2024-01-05 23:18:33Z tquadrat $" )
103public final class SVGUtils
104{
105        /*-----------*\
106    ====** Constants **========================================================
107        \*-----------*/
108    /**
109     *  The default namespace prefix for SVG: {@value}.
110     */
111    @API( status = STABLE, since = "0.0.5" )
112    public static final String SVG_PREFIX = "svg";
113
114    /**
115     *  The name for the SVG presentation attribute {@code alignment-baseline}: {@value}.
116     */
117    @API( status = STABLE, since = "0.0.5" )
118    public static final String SVGATTRIBUTE_AlignmentBaseline = "alignment-baseline";
119
120    /**
121     *  The name for the SVG presentation attribute {@code baseline-shift}: {@value}.
122     */
123    @API( status = STABLE, since = "0.0.5" )
124    public static final String SVGATTRIBUTE_BaselineShift = "baseline-shift";
125
126    /**
127     *  The name for the SVG base profile attribute: {@value}.
128     */
129    @API( status = STABLE, since = "0.0.5" )
130    public static final String SVGATTRIBUTE_BaseProfile = "baseProfile";
131
132    /**
133     *  The name for the attribute for the CSS class of an SVG element:
134     *  {@value}.
135     */
136    @API( status = STABLE, since = "0.0.5" )
137    public static final String SVGATTRIBUTE_Class = XMLATTRIBUTE_Class;
138
139    /**
140     *  The name for the SVG presentation attribute {@code clip}: {@value}.
141     */
142    @API( status = STABLE, since = "0.0.5" )
143    public static final String SVGATTRIBUTE_Clip = "clip";
144
145    /**
146     *  The name for the SVG presentation attribute {@code clip-path}: {@value}.
147     */
148    @API( status = STABLE, since = "0.0.5" )
149    public static final String SVGATTRIBUTE_ClipPath = "clip-path";
150
151    /**
152     *  The name for the SVG presentation attribute {@code clip-rule}: {@value}.
153     */
154    @API( status = STABLE, since = "0.0.5" )
155    public static final String SVGATTRIBUTE_ClipRule = "clip-rule";
156
157    /**
158     *  The name for the SVG {@code <clipPath>} element attribute
159     *  {@code clipPathUnits} that defines the coordinate system used by the
160     *  element: {@value}.
161     */
162    @API( status = STABLE, since = "0.0.5" )
163    public static final String SVGATTRIBUTE_ClipPathUnits = "clipPathUnits";
164
165    /**
166     *  The name for the SVG presentation attribute {@code color}: {@value}.
167     */
168    @API( status = STABLE, since = "0.0.5" )
169    public static final String SVGATTRIBUTE_Color = "color";
170
171    /**
172     *  The name for the SVG presentation attribute {@code color-interpolation}: {@value}.
173     */
174    @API( status = STABLE, since = "0.0.5" )
175    public static final String SVGATTRIBUTE_ColorInterpolation = "color-interpolation";
176
177    /**
178     *  The name for the SVG presentation attribute {@code color-interpolation-filters}: {@value}.
179     */
180    @API( status = STABLE, since = "0.0.5" )
181    public static final String SVGATTRIBUTE_ColorInterpolationFilters = "color-interpolation-filters";
182
183    /**
184     *  The name for the SVG presentation attribute {@code color-profile}: {@value}.
185     */
186    @API( status = STABLE, since = "0.0.5" )
187    public static final String SVGATTRIBUTE_ColorProfile = "color-profile";
188
189    /**
190     *  The name for the SVG presentation attribute {@code color-rendering}: {@value}.
191     */
192    @API( status = STABLE, since = "0.0.5" )
193    public static final String SVGATTRIBUTE_ColorRendering = "color-rendering";
194
195    /**
196     *  The name for the default script language attribute: {@value}.
197     */
198    @API( status = STABLE, since = "0.0.5" )
199    public static final String SVGATTRIBUTE_ContentScriptType = "contentScriptType";
200
201    /**
202     *  The name for the SVG presentation attribute {@code cursor}: {@value}.
203     */
204    @API( status = STABLE, since = "0.0.5" )
205    public static final String SVGATTRIBUTE_Cursor = "cursor";
206
207    /**
208     *  The name for the SVG presentation attribute {@code direction}: {@value}.
209     */
210    @API( status = STABLE, since = "0.0.5" )
211    public static final String SVGATTRIBUTE_Direction = "direction";
212
213    /**
214     *  The name for the SVG presentation attribute {@code display}: {@value}.
215     */
216    @API( status = STABLE, since = "0.0.5" )
217    public static final String SVGATTRIBUTE_Display = "display";
218
219    /**
220     *  The name for the SVG presentation attribute {@code dominant-baseline}: {@value}.
221     */
222    @API( status = STABLE, since = "0.0.5" )
223    public static final String SVGATTRIBUTE_DominantBaseline = "dominant-baseline";
224
225    /**
226     *  The name for the SVG {@code dx} attribute: {@value}.
227     */
228    @API( status = STABLE, since = "0.0.5" )
229    public static final String SVGATTRIBUTE_dx = "dx";
230
231    /**
232     *  The name for the SVG {@code dy} attribute: {@value}.
233     */
234    @API( status = STABLE, since = "0.0.5" )
235    public static final String SVGATTRIBUTE_dy = "dy";
236
237    /**
238     *  The name for the SVG presentation attribute {@code enable-background}: {@value}.
239     */
240    @API( status = STABLE, since = "0.0.5" )
241    public static final String SVGATTRIBUTE_EnableBackground = "enable-background";
242
243    /**
244     *  The name for the SVG attribute {@code externalResourcesRequired}:
245     *  {@value}.
246     */
247    @API( status = STABLE, since = "0.0.5" )
248    public static final String SVGATTRIBUTE_ExternalResourcesRequired = "externalResourcesRequired";
249
250    /**
251     *  The name for the SVG presentation attribute {@code fill}: {@value}.
252     */
253    @API( status = STABLE, since = "0.0.5" )
254    public static final String SVGATTRIBUTE_Fill = "fill";
255
256    /**
257     *  The name for the SVG presentation attribute {@code fill-opacity}: {@value}.
258     */
259    @API( status = STABLE, since = "0.0.5" )
260    public static final String SVGATTRIBUTE_FillOpacity = "fill-opacity";
261
262    /**
263     *  The name for the SVG presentation attribute {@code fill-rule}: {@value}.
264     */
265    @API( status = STABLE, since = "0.0.5" )
266    public static final String SVGATTRIBUTE_FillRule = "fill-rule";
267
268    /**
269     *  The name for the SVG presentation attribute {@code filter}: {@value}.
270     */
271    @API( status = STABLE, since = "0.0.5" )
272    public static final String SVGATTRIBUTE_Filter = "filter";
273
274    /**
275     *  The name for the SVG presentation attribute {@code flood-color}: {@value}.
276     */
277    @API( status = STABLE, since = "0.0.5" )
278    public static final String SVGATTRIBUTE_FloodColor = "flood-color";
279
280    /**
281     *  The name for the SVG presentation attribute {@code flood-opacity}: {@value}.
282     */
283    @API( status = STABLE, since = "0.0.5" )
284    public static final String SVGATTRIBUTE_FloodOpacity = "flood-opacity";
285
286    /**
287     *  The name for the SVG presentation attribute {@code font-family}: {@value}.
288     */
289    @API( status = STABLE, since = "0.0.5" )
290    public static final String SVGATTRIBUTE_FontFamily = "font-family";
291
292    /**
293     *  The name for the SVG presentation attribute {@code font-size}: {@value}.
294     */
295    @API( status = STABLE, since = "0.0.5" )
296    public static final String SVGATTRIBUTE_FontSize = "font-size";
297
298    /**
299     *  The name for the SVG presentation attribute {@code font-size-adjust}: {@value}.
300     */
301    @API( status = STABLE, since = "0.0.5" )
302    public static final String SVGATTRIBUTE_FontSizeAdjust = "font-size-adjust";
303
304    /**
305     *  The name for the SVG presentation attribute {@code font-stretch}: {@value}.
306     */
307    @API( status = STABLE, since = "0.0.5" )
308    public static final String SVGATTRIBUTE_FontStretch = "font-stretch";
309
310    /**
311     *  The name for the SVG presentation attribute {@code font-style}: {@value}.
312     */
313    @API( status = STABLE, since = "0.0.5" )
314    public static final String SVGATTRIBUTE_FontStyle = "font-style";
315
316    /**
317     *  The name for the SVG presentation attribute {@code font-variant}: {@value}.
318     */
319    @API( status = STABLE, since = "0.0.5" )
320    public static final String SVGATTRIBUTE_FontVariant = "font-variant";
321
322    /**
323     *  The name for the SVG presentation attribute {@code font-weight}: {@value}.
324     */
325    @API( status = STABLE, since = "0.0.5" )
326    public static final String SVGATTRIBUTE_FontWeight = "font-weight";
327
328    /**
329     *  The name for the SVG presentation attribute {@code glyph-orientation-horizontal}: {@value}.
330     */
331    @API( status = STABLE, since = "0.0.5" )
332    public static final String SVGATTRIBUTE_GlyphOrientationHorizontal = "glyph-orientation-horizontal";
333
334    /**
335     *  The name for the SVG presentation attribute {@code glyph-orientation-vertical}: {@value}.
336     */
337    @API( status = STABLE, since = "0.0.5" )
338    public static final String SVGATTRIBUTE_GlyphOrientationVertical = "glyph-orientation-vertical";
339
340    /**
341     *  The name for the SVG {@code height} attribute: {@value}.
342     */
343    @API( status = STABLE, since = "0.0.5" )
344    public static final String SVGATTRIBUTE_Height = "height";
345
346    /**
347     *  The name for the SVG {@code id} attribute: {@value}.
348     */
349    @API( status = STABLE, since = "0.0.5" )
350    public static final String SVGATTRIBUTE_Id = "id";
351
352    /**
353     *  The name for the SVG presentation attribute {@code image-rendering}: {@value}.
354     */
355    @API( status = STABLE, since = "0.0.5" )
356    public static final String SVGATTRIBUTE_ImageRendering = "image-rendering";
357
358    /**
359     *  The name for the SVG presentation attribute {@code kerning}: {@value}.
360     */
361    @API( status = STABLE, since = "0.0.5" )
362    public static final String SVGATTRIBUTE_Kerning = "kerning";
363
364    /**
365     *  The name for the SVG {@code lang} attribute: {@value}.
366     */
367    @API( status = STABLE, since = "0.0.5" )
368    public static final String SVGATTRIBUTE_Lang = "lang";
369
370    /**
371     *  The name for the SVG {@code lengthAdjust} attribute: {@value}.
372     */
373    @API( status = STABLE, since = "0.0.5" )
374    public static final String SVGATTRIBUTE_LengthAdjust = "lengthAdjust";
375
376    /**
377     *  The name for the SVG presentation attribute {@code letter-spacing}: {@value}.
378     */
379    @API( status = STABLE, since = "0.0.5" )
380    public static final String SVGATTRIBUTE_LetterSpacing = "letter-spacing";
381
382    /**
383     *  The name for the SVG presentation attribute {@code lighting-color}: {@value}.
384     */
385    @API( status = STABLE, since = "0.0.5" )
386    public static final String SVGATTRIBUTE_LightingColor = "lighting-color";
387
388    /**
389     *  The name for the SVG presentation attribute {@code marker-end}: {@value}.
390     */
391    @API( status = STABLE, since = "0.0.5" )
392    public static final String SVGATTRIBUTE_MarkerEnd = "marker-end";
393
394    /**
395     *  The name for the SVG marker attribute {@code markerHeight}: {@value}.
396     */
397    @API( status = STABLE, since = "0.0.5" )
398    public static final String SVGATTRIBUTE_MarkerHeight = "markerHeight";
399
400    /**
401     *  The name for the SVG presentation attribute {@code marker-mid}: {@value}.
402     */
403    @API( status = STABLE, since = "0.0.5" )
404    public static final String SVGATTRIBUTE_MarkerMid = "marker-mid";
405
406    /**
407     *  The name for the SVG presentation attribute {@code marker-start}: {@value}.
408     */
409    @API( status = STABLE, since = "0.0.5" )
410    public static final String SVGATTRIBUTE_MarkerStart = "marker-start";
411
412    /**
413     *  The name for the SVG marker attribute {@code markerUnits}: {@value}.
414     */
415    @API( status = STABLE, since = "0.0.5" )
416    public static final String SVGATTRIBUTE_MarkerUnits = "markerUnits";
417
418    /**
419     *  The name for the SVG marker attribute {@code markerWidth}: {@value}.
420     */
421    @API( status = STABLE, since = "0.0.5" )
422    public static final String SVGATTRIBUTE_MarkerWidth = "markerWidth";
423
424    /**
425     *  The name for the SVG presentation attribute {@code mask}: {@value}.
426     */
427    @API( status = STABLE, since = "0.0.5" )
428    public static final String SVGATTRIBUTE_Mask = "mask";
429
430    /**
431     *  The name for the SVG event attribute {@code onabort}: {@value}.
432     */
433    @API( status = STABLE, since = "0.0.5" )
434    public static final String SVGATTRIBUTE_OnAbort = "onabort";
435
436    /**
437     *  The name for the SVG event attribute {@code onactivate}: {@value}.
438     */
439    @API( status = STABLE, since = "0.0.5" )
440    public static final String SVGATTRIBUTE_OnActivate = "onactivate";
441
442    /**
443     *  The name for the SVG event attribute {@code oncancel}: {@value}.
444     */
445    @API( status = STABLE, since = "0.0.5" )
446    public static final String SVGATTRIBUTE_OnCancel = "oncancel";
447
448    /**
449     *  The name for the SVG event attribute {@code oncanplay}: {@value}.
450     */
451    @API( status = STABLE, since = "0.0.5" )
452    public static final String SVGATTRIBUTE_OnCanPlay = "oncanplay";
453
454    /**
455     *  The name for the SVG event attribute {@code oncanplaythrough}: {@value}.
456     */
457    @API( status = STABLE, since = "0.0.5" )
458    public static final String SVGATTRIBUTE_OnCanPlayThrough = "oncanplaythrough";
459
460    /**
461     *  The name for the SVG event attribute {@code onchange}: {@value}.
462     */
463    @API( status = STABLE, since = "0.0.5" )
464    public static final String SVGATTRIBUTE_OnChange = "onchange";
465
466    /**
467     *  The name for the SVG event attribute {@code onclick}: {@value}.
468     */
469    @API( status = STABLE, since = "0.0.5" )
470    public static final String SVGATTRIBUTE_OnClick = "onclick";
471
472    /**
473     *  The name for the SVG event attribute {@code onclose}: {@value}.
474     */
475    @API( status = STABLE, since = "0.0.5" )
476    public static final String SVGATTRIBUTE_OnClose = "onclose";
477
478    /**
479     *  The name for the SVG document element event attribute {@code oncopy}:
480     *  {@value}.
481     */
482    @API( status = STABLE, since = "0.0.5" )
483    public static final String SVGATTRIBUTE_OnCopy = "oncopy";
484
485    /**
486     *  The name for the SVG event attribute {@code oncuechange}: {@value}.
487     */
488    @API( status = STABLE, since = "0.0.5" )
489    public static final String SVGATTRIBUTE_OnCueChange = "oncuechange";
490
491    /**
492     *  The name for the SVG document element event attribute {@code oncut}:
493     *  {@value}.
494     */
495    @API( status = STABLE, since = "0.0.5" )
496    public static final String SVGATTRIBUTE_OnCut = "oncut";
497
498    /**
499     *  The name for the SVG event attribute {@code ondblclick}: {@value}.
500     */
501    @API( status = STABLE, since = "0.0.5" )
502    public static final String SVGATTRIBUTE_OnDblClick = "ondblclick";
503
504    /**
505     *  The name for the SVG event attribute {@code ondrag}: {@value}.
506     */
507    @API( status = STABLE, since = "0.0.5" )
508    public static final String SVGATTRIBUTE_OnDrag = "ondrag";
509
510    /**
511     *  The name for the SVG event attribute {@code ondragend}: {@value}.
512     */
513    @API( status = STABLE, since = "0.0.5" )
514    public static final String SVGATTRIBUTE_OnDragEnd = "ondragend";
515
516    /**
517     *  The name for the SVG event attribute {@code ondragenter}: {@value}.
518     */
519    @API( status = STABLE, since = "0.0.5" )
520    public static final String SVGATTRIBUTE_OnDragEnter = "ondragenter";
521
522    /**
523     *  The name for the SVG event attribute {@code ondragexit}: {@value}.
524     */
525    @API( status = STABLE, since = "0.0.5" )
526    public static final String SVGATTRIBUTE_OnDragExit = "ondragexit";
527
528    /**
529     *  The name for the SVG event attribute {@code ondragleave}: {@value}.
530     */
531    @API( status = STABLE, since = "0.0.5" )
532    public static final String SVGATTRIBUTE_OnDragLeave = "ondragleave";
533
534    /**
535     *  The name for the SVG event attribute {@code ondragover}: {@value}.
536     */
537    @API( status = STABLE, since = "0.0.5" )
538    public static final String SVGATTRIBUTE_OnDragOver = "ondragover";
539
540    /**
541     *  The name for the SVG event attribute {@code ondragstart}: {@value}.
542     */
543    @API( status = STABLE, since = "0.0.5" )
544    public static final String SVGATTRIBUTE_OnDragStart = "ondragstart";
545
546    /**
547     *  The name for the SVG event attribute {@code ondrop}: {@value}.
548     */
549    @API( status = STABLE, since = "0.0.5" )
550    public static final String SVGATTRIBUTE_OnDrop = "ondrop";
551
552    /**
553     *  The name for the SVG event attribute {@code ondurationchange}: {@value}.
554     */
555    @API( status = STABLE, since = "0.0.5" )
556    public static final String SVGATTRIBUTE_OnDurationChange = "ondurationchange";
557
558    /**
559     *  The name for the SVG event attribute {@code onemptied}: {@value}.
560     */
561    @API( status = STABLE, since = "0.0.5" )
562    public static final String SVGATTRIBUTE_OnEmptied = "onemptied";
563
564    /**
565     *  The name for the SVG event attribute {@code onended}: {@value}.
566     */
567    @API( status = STABLE, since = "0.0.5" )
568    public static final String SVGATTRIBUTE_OnEnded = "onended";
569
570    /**
571     *  The name for the SVG event attribute {@code onerror}: {@value}.
572     */
573    @API( status = STABLE, since = "0.0.5" )
574    public static final String SVGATTRIBUTE_OnError = "onerror";
575
576    /**
577     *  The name for the SVG event attribute {@code onfocus}: {@value}.
578     */
579    @API( status = STABLE, since = "0.0.5" )
580    public static final String SVGATTRIBUTE_OnFocus = "onfocus";
581
582    /**
583     *  The name for the SVG event attribute {@code onfocusin}: {@value}.
584     */
585    @API( status = STABLE, since = "0.0.5" )
586    public static final String SVGATTRIBUTE_OnFocusIn = "onfocusin";
587
588    /**
589     *  The name for the SVG event attribute {@code onfocusout}: {@value}.
590     */
591    @API( status = STABLE, since = "0.0.5" )
592    public static final String SVGATTRIBUTE_OnFocusOut = "onfocusout";
593
594    /**
595     *  The name for the SVG event attribute {@code oninput}: {@value}.
596     */
597    @API( status = STABLE, since = "0.0.5" )
598    public static final String SVGATTRIBUTE_OnInput = "oninput";
599
600    /**
601     *  The name for the SVG event attribute {@code oninvalid}: {@value}.
602     */
603    @API( status = STABLE, since = "0.0.5" )
604    public static final String SVGATTRIBUTE_OnInvalid = "oninvalid";
605
606    /**
607     *  The name for the SVG event attribute {@code onkeydown}: {@value}.
608     */
609    @API( status = STABLE, since = "0.0.5" )
610    public static final String SVGATTRIBUTE_OnKeyDown = "onkeydown";
611
612    /**
613     *  The name for the SVG event attribute {@code onkeypress}: {@value}.
614     */
615    @API( status = STABLE, since = "0.0.5" )
616    public static final String SVGATTRIBUTE_OnKeyPress = "onkeypress";
617
618    /**
619     *  The name for the SVG event attribute {@code onkeyup}: {@value}.
620     */
621    @API( status = STABLE, since = "0.0.5" )
622    public static final String SVGATTRIBUTE_OnKeyUp = "onkeyup";
623
624    /**
625     *  The name for the SVG event attribute {@code onload}: {@value}.
626     */
627    @API( status = STABLE, since = "0.0.5" )
628    public static final String SVGATTRIBUTE_OnLoad = "onload";
629
630    /**
631     *  The name for the SVG event attribute {@code onloadeddata}: {@value}.
632     */
633    @API( status = STABLE, since = "0.0.5" )
634    public static final String SVGATTRIBUTE_OnLoadedData = "onloadeddata";
635
636    /**
637     *  The name for the SVG event attribute {@code onloadedmetadata}: {@value}.
638     */
639    @API( status = STABLE, since = "0.0.5" )
640    public static final String SVGATTRIBUTE_OnLoadedMetadata = "onloadedmetadata";
641
642    /**
643     *  The name for the SVG event attribute {@code onloadstart}: {@value}.
644     */
645    @API( status = STABLE, since = "0.0.5" )
646    public static final String SVGATTRIBUTE_OnLoadStart = "onloadstart";
647
648    /**
649     *  The name for the SVG event attribute {@code onmousedown}: {@value}.
650     */
651    @API( status = STABLE, since = "0.0.5" )
652    public static final String SVGATTRIBUTE_OnMouseDown = "onmousedown";
653
654    /**
655     *  The name for the SVG event attribute {@code onmouseenter}: {@value}.
656     */
657    @API( status = STABLE, since = "0.0.5" )
658    public static final String SVGATTRIBUTE_OnMouseEnter = "onmouseenter";
659
660    /**
661     *  The name for the SVG event attribute {@code onmouseleave}: {@value}.
662     */
663    @API( status = STABLE, since = "0.0.5" )
664    public static final String SVGATTRIBUTE_OnMouseLeave = "onmouseleave";
665
666    /**
667     *  The name for the SVG event attribute {@code onmousemove}: {@value}.
668     */
669    @API( status = STABLE, since = "0.0.5" )
670    public static final String SVGATTRIBUTE_OnMouseMove = "onmousemove";
671
672    /**
673     *  The name for the SVG event attribute {@code onmouseout}: {@value}.
674     */
675    @API( status = STABLE, since = "0.0.5" )
676    public static final String SVGATTRIBUTE_OnMouseOut = "onmouseout";
677
678    /**
679     *  The name for the SVG event attribute {@code onmouseover}: {@value}.
680     */
681    @API( status = STABLE, since = "0.0.5" )
682    public static final String SVGATTRIBUTE_OnMouseOver = "onmouseover";
683
684    /**
685     *  The name for the SVG event attribute {@code onmouseup}: {@value}.
686     */
687    @API( status = STABLE, since = "0.0.5" )
688    public static final String SVGATTRIBUTE_OnMouseUp = "onmouseup";
689
690    /**
691     *  The name for the SVG event attribute {@code onmousewheel}: {@value}.
692     */
693    @API( status = STABLE, since = "0.0.5" )
694    public static final String SVGATTRIBUTE_OnMouseWheel = "onmousewheel";
695
696    /**
697     *  The name for the SVG document element event attribute {@code onpaste}:
698     *  {@value}.
699     */
700    @API( status = STABLE, since = "0.0.5" )
701    public static final String SVGATTRIBUTE_OnPaste = "onpaste";
702
703    /**
704     *  The name for the SVG event attribute {@code onpause}: {@value}.
705     */
706    @API( status = STABLE, since = "0.0.5" )
707    public static final String SVGATTRIBUTE_OnPause = "onpause";
708
709    /**
710     *  The name for the SVG event attribute {@code onplay}: {@value}.
711     */
712    @API( status = STABLE, since = "0.0.5" )
713    public static final String SVGATTRIBUTE_OnPlay = "onplay";
714
715    /**
716     *  The name for the SVG event attribute {@code onplaying}: {@value}.
717     */
718    @API( status = STABLE, since = "0.0.5" )
719    public static final String SVGATTRIBUTE_OnPlaying = "onplaying";
720
721    /**
722     *  The name for the SVG event attribute {@code onprogress}: {@value}.
723     */
724    @API( status = STABLE, since = "0.0.5" )
725    public static final String SVGATTRIBUTE_OnProgress = "onprogress";
726
727    /**
728     *  The name for the SVG event attribute {@code onratechange}: {@value}.
729     */
730    @API( status = STABLE, since = "0.0.5" )
731    public static final String SVGATTRIBUTE_OnRateChange = "onratechange";
732
733    /**
734     *  The name for the SVG event attribute {@code onreset}: {@value}.
735     */
736    @API( status = STABLE, since = "0.0.5" )
737    public static final String SVGATTRIBUTE_OnReset = "onreset";
738
739    /**
740     *  The name for the SVG event attribute {@code onresize}: {@value}.
741     */
742    @API( status = STABLE, since = "0.0.5" )
743    public static final String SVGATTRIBUTE_OnResize = "onresize";
744
745    /**
746     *  The name for the SVG event attribute {@code onscroll}: {@value}.
747     */
748    @API( status = STABLE, since = "0.0.5" )
749    public static final String SVGATTRIBUTE_OnScroll = "onscroll";
750
751    /**
752     *  The name for the SVG event attribute {@code onseeked}: {@value}.
753     */
754    @API( status = STABLE, since = "0.0.5" )
755    public static final String SVGATTRIBUTE_OnSeeked = "onseeked";
756
757    /**
758     *  The name for the SVG event attribute {@code onseeking}: {@value}.
759     */
760    @API( status = STABLE, since = "0.0.5" )
761    public static final String SVGATTRIBUTE_OnSeeking = "onseeking";
762
763    /**
764     *  The name for the SVG event attribute {@code onselect}: {@value}.
765     */
766    @API( status = STABLE, since = "0.0.5" )
767    public static final String SVGATTRIBUTE_OnSelect = "onselect";
768
769    /**
770     *  The name for the SVG event attribute {@code onshow}: {@value}.
771     */
772    @API( status = STABLE, since = "0.0.5" )
773    public static final String SVGATTRIBUTE_OnShow = "onshow";
774
775    /**
776     *  The name for the SVG event attribute {@code onstalled}: {@value}.
777     */
778    @API( status = STABLE, since = "0.0.5" )
779    public static final String SVGATTRIBUTE_OnStalled = "onstalled";
780
781    /**
782     *  The name for the SVG event attribute {@code onsubmit}: {@value}.
783     */
784    @API( status = STABLE, since = "0.0.5" )
785    public static final String SVGATTRIBUTE_OnSubmit = "onsubmit";
786
787    /**
788     *  The name for the SVG event attribute {@code onsuspend}: {@value}.
789     */
790    @API( status = STABLE, since = "0.0.5" )
791    public static final String SVGATTRIBUTE_OnSuspend = "onsuspend";
792
793    /**
794     *  The name for the SVG event attribute {@code ontimeupdate}: {@value}.
795     */
796    @API( status = STABLE, since = "0.0.5" )
797    public static final String SVGATTRIBUTE_OnTimeUpdate = "ontimeupdate";
798
799    /**
800     *  The name for the SVG event attribute {@code ontoggle}: {@value}.
801     */
802    @API( status = STABLE, since = "0.0.5" )
803    public static final String SVGATTRIBUTE_OnToggle = "ontoggle";
804
805    /**
806     *  The name for the SVG event attribute {@code onunload}: {@value}.
807     */
808    @API( status = STABLE, since = "0.0.5" )
809    public static final String SVGATTRIBUTE_OnUnload = "onunload";
810
811    /**
812     *  The name for the SVG event attribute {@code onvolumechange}: {@value}.
813     */
814    @API( status = STABLE, since = "0.0.5" )
815    public static final String SVGATTRIBUTE_OnVolumeChange = "onvolumechange";
816
817    /**
818     *  The name for the SVG event attribute {@code onwaiting}: {@value}.
819     */
820    @API( status = STABLE, since = "0.0.5" )
821    public static final String SVGATTRIBUTE_OnWaiting = "onwaiting";
822
823    /**
824     *  The name for the SVG presentation attribute {@code opacity}: {@value}.
825     */
826    @API( status = STABLE, since = "0.0.5" )
827    public static final String SVGATTRIBUTE_Opacity = "opacity";
828
829    /**
830     *  The name for the SVG marker attribute {@code orient}: {@value}.
831     */
832    @API( status = STABLE, since = "0.0.5" )
833    public static final String SVGATTRIBUTE_Orientation = "orient";
834
835    /**
836     *  The name for the SVG presentation attribute {@code overflow}: {@value}.
837     */
838    @API( status = STABLE, since = "0.0.5" )
839    public static final String SVGATTRIBUTE_Overflow = "overflow";
840
841    /**
842     *  The name for the SVG attribute {@code d} that defines a path: {@value}.
843     */
844    @API( status = STABLE, since = "0.0.5" )
845    public static final String SVGATTRIBUTE_PathDefinition = "d";
846
847    /**
848     *  The name for the SVG attribute {@code pathLength}: {@value}.
849     */
850    @API( status = STABLE, since = "0.0.5" )
851    public static final String SVGATTRIBUTE_PathLength = "pathLength";
852
853    /**
854     *  The name for the SVG presentation attribute {@code pointer-events}: {@value}.
855     */
856    @API( status = STABLE, since = "0.0.5" )
857    public static final String SVGATTRIBUTE_PointerEvents = "pointer-events";
858
859    /**
860     *  The name for the SVG marker attribute {@code position}: {@value}.
861     */
862    @API( status = STABLE, since = "0.0.5" )
863    public static final String SVGATTRIBUTE_Position = "position";
864
865    /**
866     *  The name for the SVG {@code preserveAspectRatio} attribute: {@value}.
867     */
868    @API( status = STABLE, since = "0.0.5" )
869    public static final String SVGATTRIBUTE_PreserveAspectRatio = "preserveAspectRatio";
870
871    /**
872     *  The name for the attribute that is used to set references in SVG:
873     *  {@value}.
874     */
875    @API( status = STABLE, since = "0.0.5" )
876    public static final String SVGATTRIBUTE_Reference = "xlink:href";
877
878    /**
879     *  The name for the SVG marker attribute {@code refX}: {@value}.
880     */
881    @API( status = STABLE, since = "0.0.5" )
882    public static final String SVGATTRIBUTE_ReferenceX = "refX";
883
884    /**
885     *  The name for the SVG marker attribute {@code refY}: {@value}.
886     */
887    @API( status = STABLE, since = "0.0.5" )
888    public static final String SVGATTRIBUTE_ReferenceY = "refY";
889
890    /**
891     *  The name for the SVG attribute that defines the extensions that are
892     *  required to render an element: {@value}.
893     */
894    @API( status = STABLE, since = "0.0.5" )
895    public static final String SVGATTRIBUTE_RequiredExtensions = "requiredExtensions";
896
897    /**
898     *  The name for the SVG attribute that defines the features that are
899     *  required to render an element: {@value}.
900     */
901    @API( status = STABLE, since = "0.0.5" )
902    public static final String SVGATTRIBUTE_RequiredFeatures = "requiredFeatures";
903
904    /**
905     *  The name for the SVG {@code rotate} attribute: {@value}.
906     */
907    @API( status = STABLE, since = "0.0.5" )
908    public static final String SVGATTRIBUTE_Rotate = "rotate";
909
910    /**
911     *  The name for the SVG {@code rx} attribute: {@value}.
912     */
913    @API( status = STABLE, since = "0.0.5" )
914    public static final String SVGATTRIBUTE_rx = "rx";
915
916    /**
917     *  The name for the SVG {@code ry} attribute: {@value}.
918     */
919    @API( status = STABLE, since = "0.0.5" )
920    public static final String SVGATTRIBUTE_ry = "ry";
921
922    /**
923     *  The name for the SVG presentation attribute {@code shape-rendering}: {@value}.
924     */
925    @API( status = STABLE, since = "0.0.5" )
926    public static final String SVGATTRIBUTE_ShapeRendering = "shape-rendering";
927
928    /**
929     *  The name for the SVG presentation attribute {@code stop-color}: {@value}.
930     */
931    @API( status = STABLE, since = "0.0.5" )
932    public static final String SVGATTRIBUTE_StopColor = "stop-color";
933
934    /**
935     *  The name for the SVG presentation attribute {@code stop-opacity}: {@value}.
936     */
937    @API( status = STABLE, since = "0.0.5" )
938    public static final String SVGATTRIBUTE_StopOpacity = "stop-opacity";
939
940    /**
941     *  The name for the SVG presentation attribute {@code stroke}: {@value}.
942     */
943    @API( status = STABLE, since = "0.0.5" )
944    public static final String SVGATTRIBUTE_Stroke = "stroke";
945
946    /**
947     *  The name for the SVG presentation attribute {@code stroke-dasharray}: {@value}.
948     */
949    @API( status = STABLE, since = "0.0.5" )
950    public static final String SVGATTRIBUTE_StrokeDashArray = "stroke-dasharray";
951
952    /**
953     *  The name for the SVG presentation attribute {@code stroke-dashoffset}: {@value}.
954     */
955    @API( status = STABLE, since = "0.0.5" )
956    public static final String SVGATTRIBUTE_StrokeDashOffset = "stroke-dashoffset";
957
958    /**
959     *  The name for the SVG presentation attribute {@code stroke-linecap}: {@value}.
960     */
961    @API( status = STABLE, since = "0.0.5" )
962    public static final String SVGATTRIBUTE_StrokeLineCap = "stroke-linecap";
963
964    /**
965     *  The name for the SVG presentation attribute {@code stroke-linejoin}: {@value}.
966     */
967    @API( status = STABLE, since = "0.0.5" )
968    public static final String SVGATTRIBUTE_StrokeLineJoin = "stroke-linejoin";
969
970    /**
971     *  The name for the SVG presentation attribute {@code stroke-miterlimit}: {@value}.
972     */
973    @API( status = STABLE, since = "0.0.5" )
974    public static final String SVGATTRIBUTE_StrokeMiterLimit = "stroke-miterlimit";
975
976    /**
977     *  The name for the SVG presentation attribute {@code stroke-opacity}: {@value}.
978     */
979    @API( status = STABLE, since = "0.0.5" )
980    public static final String SVGATTRIBUTE_StrokeOpacity = "stroke-opacity";
981
982    /**
983     *  The name for the SVG presentation attribute {@code stroke-width}: {@value}.
984     */
985    @API( status = STABLE, since = "0.0.5" )
986    public static final String SVGATTRIBUTE_StrokeWidth = "stroke-width";
987
988    /**
989     *  The name for the SVG CSS {@code style} attribute: {@value}.
990     */
991    @API( status = STABLE, since = "0.0.5" )
992    public static final String SVGATTRIBUTE_Style = "style";
993
994    /**
995     *  The name for the SVG attribute that defines the languages that are
996     *  supported by an SVG element: {@value}.<br>
997     *  <br>It will be rendered only when the current system language matches
998     *  one entry in the list.
999     */
1000    @API( status = STABLE, since = "0.0.5" )
1001    public static final String SVGATTRIBUTE_SystemLanguage = "systemLanguage";
1002
1003    /**
1004     *  The name for the SVG {@code tabindex} attribute: {@value}.
1005     */
1006    @API( status = STABLE, since = "0.0.5" )
1007    public static final String SVGATTRIBUTE_TabIndex = "tabindex";
1008
1009    /**
1010     *  The name for the SVG presentation attribute {@code text-anchor}: {@value}.
1011     */
1012    @API( status = STABLE, since = "0.0.5" )
1013    public static final String SVGATTRIBUTE_TextAnchor = "text-anchor";
1014
1015    /**
1016     *  The name for the SVG presentation attribute {@code text-decoration}: {@value}.
1017     */
1018    @API( status = STABLE, since = "0.0.5" )
1019    public static final String SVGATTRIBUTE_TextDecoration = "text-decoration";
1020
1021    /**
1022     *  The name for the SVG {@code textLength} attribute: {@value}.
1023     */
1024    @API( status = STABLE, since = "0.0.5" )
1025    public static final String SVGATTRIBUTE_TextLength = "textLength";
1026
1027    /**
1028     *  The name for the SVG presentation attribute {@code text-rendering}: {@value}.
1029     */
1030    @API( status = STABLE, since = "0.0.5" )
1031    public static final String SVGATTRIBUTE_TextRendering = "text-rendering";
1032
1033    /**
1034     *  The name for the SVG presentation attribute {@code transform}: {@value}.
1035     */
1036    @API( status = STABLE, since = "0.0.5" )
1037    public static final String SVGATTRIBUTE_Transform = "transform";
1038
1039    /**
1040     *  The name for the SVG presentation attribute {@code unicode-bidi}: {@value}.
1041     */
1042    @API( status = STABLE, since = "0.0.5" )
1043    public static final String SVGATTRIBUTE_UnicodeBidi = "unicode-bidi";
1044
1045    /**
1046     *  The name for the SVG presentation attribute {@code vector-effect}: {@value}.
1047     */
1048    @API( status = STABLE, since = "0.0.5" )
1049    public static final String SVGATTRIBUTE_VectorEffect = "vector-effect";
1050
1051    /**
1052     *  The name for the SVG {@code version} attribute: {@value}.
1053     */
1054    @API( status = STABLE, since = "0.0.5" )
1055    public static final String SVGATTRIBUTE_Version = "version";
1056
1057    /**
1058     *  The name for the SVG {@code viewBox} attribute: {@value}.
1059     */
1060    @API( status = STABLE, since = "0.0.5" )
1061    public static final String SVGATTRIBUTE_ViewBox = "viewBox";
1062
1063    /**
1064     *  The name for the SVG presentation attribute {@code visibility}: {@value}.
1065     */
1066    @API( status = STABLE, since = "0.0.5" )
1067    public static final String SVGATTRIBUTE_Visibility = "visibility";
1068
1069    /**
1070     *  The name for the SVG {@code width} attribute: {@value}.
1071     */
1072    @API( status = STABLE, since = "0.0.5" )
1073    public static final String SVGATTRIBUTE_Width = "width";
1074
1075    /**
1076     *  The name for the SVG presentation attribute {@code word-spacing}: {@value}.
1077     */
1078    @API( status = STABLE, since = "0.0.5" )
1079    public static final String SVGATTRIBUTE_WordSpacing = "word-spacing";
1080
1081    /**
1082     *  The name for the SVG presentation attribute {@code writing-mode}: {@value}.
1083     */
1084    @API( status = STABLE, since = "0.0.5" )
1085    public static final String SVGATTRIBUTE_WritingMode = "writing-mode";
1086
1087    /**
1088     *  The name for the SVG {@code x} coordinate attribute: {@value}.
1089     */
1090    @API( status = STABLE, since = "0.0.5" )
1091    public static final String SVGATTRIBUTE_x = "x";
1092
1093    /**
1094     *  The name for the SVG {@code x1} coordinate attribute: {@value}.
1095     */
1096    @API( status = STABLE, since = "0.0.5" )
1097    public static final String SVGATTRIBUTE_x1 = "x1";
1098
1099    /**
1100     *  The name for the SVG {@code x2} coordinate attribute: {@value}.
1101     */
1102    @API( status = STABLE, since = "0.0.5" )
1103    public static final String SVGATTRIBUTE_x2 = "x2";
1104
1105    /**
1106     *  The name for the XLink {@code actuate} attribute: {@value}.
1107     */
1108    @API( status = STABLE, since = "0.0.5" )
1109    public static final String SVGATTRIBUTE_XLink_Actuate = "xlink:actuate";
1110
1111    /**
1112     *  The name for the XLink {@code arcrole} attribute: {@value}.
1113     */
1114    @API( status = STABLE, since = "0.0.5" )
1115    public static final String SVGATTRIBUTE_XLink_ArcRole = "xlink:arcrole";
1116
1117    /**
1118     *  The name for the XLink attribute that is used to set references in SVG:
1119     *  {@value}.
1120     */
1121    @API( status = STABLE, since = "0.0.5" )
1122    public static final String SVGATTRIBUTE_XLink_Reference = "xlink:href";
1123
1124    /**
1125     *  The name for the XLink {@code role} attribute: {@value}.
1126     */
1127    @API( status = STABLE, since = "0.0.5" )
1128    public static final String SVGATTRIBUTE_XLink_Role = "xlink:role";
1129
1130    /**
1131     *  The name for the XLink {@code show} attribute: {@value}.
1132     */
1133    @API( status = STABLE, since = "0.0.5" )
1134    public static final String SVGATTRIBUTE_XLink_Show = "xlink:show";
1135
1136    /**
1137     *  The name for the XLink {@code title} attribute: {@value}.
1138     */
1139    @API( status = STABLE, since = "0.0.5" )
1140    public static final String SVGATTRIBUTE_XLink_Title = "xlink:title";
1141
1142    /**
1143     *  The name for the XLink {@code type} attribute: {@value}.
1144     */
1145    @API( status = STABLE, since = "0.0.5" )
1146    public static final String SVGATTRIBUTE_XLink_Type = "xlink:type";
1147
1148    /**
1149     *  The name for the SVG {@code y} coordinate attribute: {@value}.
1150     */
1151    @API( status = STABLE, since = "0.0.5" )
1152    public static final String SVGATTRIBUTE_y = "y";
1153
1154    /**
1155     *  The name for the SVG {@code y1} coordinate attribute: {@value}.
1156     */
1157    @API( status = STABLE, since = "0.0.5" )
1158    public static final String SVGATTRIBUTE_y1 = "y1";
1159
1160    /**
1161     *  The name for the SVG {@code y2} coordinate attribute: {@value}.
1162     */
1163    @API( status = STABLE, since = "0.0.5" )
1164    public static final String SVGATTRIBUTE_y2 = "y2";
1165
1166    /**
1167     *  The name for the SVG {@code zoomAndPan} attribute: {@value}.
1168     */
1169    @API( status = STABLE, since = "0.0.5" )
1170    public static final String SVGATTRIBUTE_ZoomAndPan = "zoomAndPan";
1171
1172    /**
1173     *  The name for the SVG element
1174     *  TODO - Add the proper description!
1175     *  {@value}.
1176     */
1177    @API( status = STABLE, since = "0.0.5" )
1178    public static final String SVGELEMENT_AltGlyph = "altGlyph";
1179
1180    /**
1181     *  The name for the SVG element
1182     *  TODO - Add the proper description!
1183     *  {@value}.
1184     */
1185    @API( status = STABLE, since = "0.0.5" )
1186    public static final String SVGELEMENT_AltGlyphDef = "altGlyphDef";
1187
1188    /**
1189     *  The name for the SVG element
1190     *  TODO - Add the proper description!
1191     *  {@value}.
1192     */
1193    @API( status = STABLE, since = "0.0.5" )
1194    public static final String SVGELEMENT_AltGlyphItem = "altGlyphItem";
1195
1196    /**
1197     *  The name for the SVG anchor element: {@value}.
1198     */
1199    @API( status = STABLE, since = "0.0.5" )
1200    public static final String SVGELEMENT_Anchor = "a";
1201
1202    /**
1203     *  The name for the SVG element
1204     *  TODO - Add the proper description!
1205     *  {@value}.
1206     */
1207    @API( status = STABLE, since = "0.0.5" )
1208    public static final String SVGELEMENT_Animate = "animate";
1209
1210    /**
1211     *  The name for the SVG element
1212     *  TODO - Add the proper description!
1213     *  {@value}.
1214     */
1215    @API( status = STABLE, since = "0.0.5" )
1216    public static final String SVGELEMENT_AnimateColor = "animateColor";
1217
1218    /**
1219     *  The name for the SVG element
1220     *  TODO - Add the proper description!
1221     *  {@value}.
1222     */
1223    @API( status = STABLE, since = "0.0.5" )
1224    public static final String SVGELEMENT_AnimateMotion = "animateMotion";
1225
1226    /**
1227     *  The name for the SVG element
1228     *  TODO - Add the proper description!
1229     *  {@value}.
1230     */
1231    @API( status = STABLE, since = "0.0.5" )
1232    public static final String SVGELEMENT_AnimateTransform = "animateTransform";
1233
1234    /**
1235     *  The name for the SVG element representing a circle shape: {@value}.
1236     */
1237    @API( status = STABLE, since = "0.0.5" )
1238    public static final String SVGELEMENT_Circle = "circle";
1239
1240    /**
1241     *  The name for the SVG element that defines a clipping path: {@value}.
1242     */
1243    @API( status = STABLE, since = "0.0.5" )
1244    public static final String SVGELEMENT_ClipPath = "clipPath";
1245
1246    /**
1247     *  The name for the SVG element
1248     *  TODO - Add the proper description!
1249     *  {@value}.
1250     */
1251    @API( status = STABLE, since = "0.0.5" )
1252    public static final String SVGELEMENT_ColorProfile = "colorProfile";
1253
1254    /**
1255     *  The name for the SVG element
1256     *  TODO - Add the proper description!
1257     *  {@value}.
1258     */
1259    @API( status = STABLE, since = "0.0.5" )
1260    public static final String SVGELEMENT_Cursor = "cursor";
1261
1262    /**
1263     *  The name for the SVG element that holds definitions of elements that
1264     *  will be referenced elsewhere: {@value}.
1265     */
1266    @API( status = STABLE, since = "0.0.5" )
1267    public static final String SVGELEMENT_Defs = "defs";
1268
1269    /**
1270     *  The name for the SVG element that can be added to any other element to
1271     *  assign a description to it: {@value}.
1272     */
1273    @API( status = STABLE, since = "0.0.5" )
1274    public static final String SVGELEMENT_Description = "desc";
1275
1276    /**
1277     *  The name for the SVG element
1278     *  TODO - Add the proper description!
1279     *  {@value}.
1280     */
1281    @API( status = STABLE, since = "0.0.5" )
1282    public static final String SVGELEMENT_Discard = "discard";
1283
1284    /**
1285     *  The name for the SVG element representing an ellipse shape: {@value}.
1286     */
1287    @API( status = STABLE, since = "0.0.5" )
1288    public static final String SVGELEMENT_Ellipse = "ellipse";
1289
1290    /**
1291     *  The name for the SVG element
1292     *  TODO - Add the proper description!
1293     *  {@value}.
1294     */
1295    @API( status = STABLE, since = "0.0.5" )
1296    public static final String SVGELEMENT_Filter = "filter";
1297
1298    /**
1299     *  The name for the SVG element
1300     *  TODO - Add the proper description!
1301     *  {@value}.
1302     */
1303    @API( status = STABLE, since = "0.0.5" )
1304    public static final String SVGELEMENT_Filter_feBlend = "feBlend";
1305
1306    /**
1307     *  The name for the SVG element
1308     *  TODO - Add the proper description!
1309     *  {@value}.
1310     */
1311    @API( status = STABLE, since = "0.0.5" )
1312    public static final String SVGELEMENT_Filter_feColorMatrix = "feColorMatrix";
1313
1314    /**
1315     *  The name for the SVG element
1316     *  TODO - Add the proper description!
1317     *  {@value}.
1318     */
1319    @API( status = STABLE, since = "0.0.5" )
1320    public static final String SVGELEMENT_Filter_feComponentTransfer = "feComponentTransfer";
1321
1322    /**
1323     *  The name for the SVG element
1324     *  TODO - Add the proper description!
1325     *  {@value}.
1326     */
1327    @API( status = STABLE, since = "0.0.5" )
1328    public static final String SVGELEMENT_Filter_feComposite = "feComposite";
1329
1330    /**
1331     *  The name for the SVG element
1332     *  TODO - Add the proper description!
1333     *  {@value}.
1334     */
1335    @API( status = STABLE, since = "0.0.5" )
1336    public static final String SVGELEMENT_Filter_feConvolveMatrix = "feConvolveMatrix";
1337
1338    /**
1339     *  The name for the SVG element
1340     *  TODO - Add the proper description!
1341     *  {@value}.
1342     */
1343    @API( status = STABLE, since = "0.0.5" )
1344    public static final String SVGELEMENT_Filter_feDiffuseLighting = "feDiffuseLighting";
1345
1346    /**
1347     *  The name for the SVG element
1348     *  TODO - Add the proper description!
1349     *  {@value}.
1350     */
1351    @API( status = STABLE, since = "0.0.5" )
1352    public static final String SVGELEMENT_Filter_feDisplacementMap = "feDisplacementMap";
1353
1354    /**
1355     *  The name for the SVG element
1356     *  TODO - Add the proper description!
1357     *  {@value}.
1358     */
1359    @API( status = STABLE, since = "0.0.5" )
1360    public static final String SVGELEMENT_Filter_feDropShadow = "feDropShadow";
1361
1362    /**
1363     *  The name for the SVG element
1364     *  TODO - Add the proper description!
1365     *  {@value}.
1366     */
1367    @API( status = STABLE, since = "0.0.5" )
1368    public static final String SVGELEMENT_Filter_feFlood = "feFlood";
1369
1370    /**
1371     *  The name for the SVG element
1372     *  TODO - Add the proper description!
1373     *  {@value}.
1374     */
1375    @API( status = STABLE, since = "0.0.5" )
1376    public static final String SVGELEMENT_Filter_feFuncA = "feFuncA";
1377
1378    /**
1379     *  The name for the SVG element
1380     *  TODO - Add the proper description!
1381     *  {@value}.
1382     */
1383    @API( status = STABLE, since = "0.0.5" )
1384    public static final String SVGELEMENT_Filter_feFuncB = "feFuncB";
1385
1386    /**
1387     *  The name for the SVG element
1388     *  TODO - Add the proper description!
1389     *  {@value}.
1390     */
1391    @API( status = STABLE, since = "0.0.5" )
1392    public static final String SVGELEMENT_Filter_feFuncG = "feFuncG";
1393
1394    /**
1395     *  The name for the SVG element
1396     *  TODO - Add the proper description!
1397     *  {@value}.
1398     */
1399    @API( status = STABLE, since = "0.0.5" )
1400    public static final String SVGELEMENT_Filter_feFuncR = "feFuncR";
1401
1402    /**
1403     *  The name for the SVG element
1404     *  TODO - Add the proper description!
1405     *  {@value}.
1406     */
1407    @API( status = STABLE, since = "0.0.5" )
1408    public static final String SVGELEMENT_Filter_feGaussianBlur = "feGaussianBlur";
1409
1410    /**
1411     *  The name for the SVG element
1412     *  TODO - Add the proper description!
1413     *  {@value}.
1414     */
1415    @API( status = STABLE, since = "0.0.5" )
1416    public static final String SVGELEMENT_Filter_feImage = "feImage";
1417
1418    /**
1419     *  The name for the SVG element
1420     *  TODO - Add the proper description!
1421     *  {@value}.
1422     */
1423    @API( status = STABLE, since = "0.0.5" )
1424    public static final String SVGELEMENT_Filter_feMerge = "feMerge";
1425
1426    /**
1427     *  The name for the SVG element
1428     *  TODO - Add the proper description!
1429     *  {@value}.
1430     */
1431    @API( status = STABLE, since = "0.0.5" )
1432    public static final String SVGELEMENT_Filter_feMergeNode = "feMergeNode";
1433
1434    /**
1435     *  The name for the SVG element
1436     *  TODO - Add the proper description!
1437     *  {@value}.
1438     */
1439    @API( status = STABLE, since = "0.0.5" )
1440    public static final String SVGELEMENT_Filter_feMorphology = "feMorphology";
1441
1442    /**
1443     *  The name for the SVG element
1444     *  TODO - Add the proper description!
1445     *  {@value}.
1446     */
1447    @API( status = STABLE, since = "0.0.5" )
1448    public static final String SVGELEMENT_Filter_feOffset = "feOffset";
1449
1450    /**
1451     *  The name for the SVG element
1452     *  TODO - Add the proper description!
1453     *  {@value}.
1454     */
1455    @API( status = STABLE, since = "0.0.5" )
1456    public static final String SVGELEMENT_Filter_feSpecularLighting = "feSpecularLighting";
1457
1458    /**
1459     *  The name for the SVG element
1460     *  TODO - Add the proper description!
1461     *  {@value}.
1462     */
1463    @API( status = STABLE, since = "0.0.5" )
1464    public static final String SVGELEMENT_Filter_feTile = "feTile";
1465
1466    /**
1467     *  The name for the SVG element
1468     *  TODO - Add the proper description!
1469     *  {@value}.
1470     */
1471    @API( status = STABLE, since = "0.0.5" )
1472    public static final String SVGELEMENT_Filter_feTurbulence = "feTurbulence";
1473
1474    /**
1475     *  The name for the SVG element
1476     *  TODO - Add the proper description!
1477     *  {@value}.
1478     */
1479    @API( status = STABLE, since = "0.0.5" )
1480    public static final String SVGELEMENT_Font = "font";
1481
1482    /**
1483     *  The name for the SVG element
1484     *  TODO - Add the proper description!
1485     *  {@value}.
1486     */
1487    @API( status = STABLE, since = "0.0.5" )
1488    public static final String SVGELEMENT_FontFace = "font-face";
1489
1490    /**
1491     *  The name for the SVG element
1492     *  TODO - Add the proper description!
1493     *  {@value}.
1494     */
1495    @API( status = STABLE, since = "0.0.5" )
1496    public static final String SVGELEMENT_FontFaceFormat = "font-face-format";
1497
1498    /**
1499     *  The name for the SVG element
1500     *  TODO - Add the proper description!
1501     *  {@value}.
1502     */
1503    @API( status = STABLE, since = "0.0.5" )
1504    public static final String SVGELEMENT_FontFaceName = "font-face-name";
1505
1506    /**
1507     *  The name for the SVG element
1508     *  TODO - Add the proper description!
1509     *  {@value}.
1510     */
1511    @API( status = STABLE, since = "0.0.5" )
1512    public static final String SVGELEMENT_FontFaceSource = "font-face-src";
1513
1514    /**
1515     *  The name for the SVG element
1516     *  TODO - Add the proper description!
1517     *  {@value}.
1518     */
1519    @API( status = STABLE, since = "0.0.5" )
1520    public static final String SVGELEMENT_FontFaceURI = "font-face-uri";
1521
1522    /**
1523     *  The name for the SVG element
1524     *  TODO - Add the proper description!
1525     *  {@value}.
1526     */
1527    @API( status = STABLE, since = "0.0.5" )
1528    public static final String SVGELEMENT_ForeignObject = "foreignObject";
1529
1530    /**
1531     *  The name for the SVG element
1532     *  TODO - Add the proper description!
1533     *  {@value}.
1534     */
1535    @API( status = STABLE, since = "0.0.5" )
1536    public static final String SVGELEMENT_Glyph = "glyph";
1537
1538    /**
1539     *  The name for the SVG element
1540     *  TODO - Add the proper description!
1541     *  {@value}.
1542     */
1543    @API( status = STABLE, since = "0.0.5" )
1544    public static final String SVGELEMENT_GlyphRef = "glyphRef";
1545
1546    /**
1547     *  The name for the SVG element
1548     *  TODO - Add the proper description!
1549     *  {@value}.
1550     */
1551    @API( status = STABLE, since = "0.0.5" )
1552    public static final String SVGELEMENT_GradientLinear = "linearGradient";
1553
1554    /**
1555     *  The name for the SVG element
1556     *  TODO - Add the proper description!
1557     *  {@value}.
1558     */
1559    @API( status = STABLE, since = "0.0.5" )
1560    public static final String SVGELEMENT_GradientMesh = "meshGradient";
1561
1562    /**
1563     *  The name for the SVG element
1564     *  TODO - Add the proper description!
1565     *  {@value}.
1566     */
1567    @API( status = STABLE, since = "0.0.5" )
1568    public static final String SVGELEMENT_GradientRadial = "radialGradient";
1569
1570    /**
1571     *  The name for the SVG group element: {@value}.
1572     */
1573    @API( status = STABLE, since = "0.0.5" )
1574    public static final String SVGELEMENT_Group = "g";
1575
1576    /**
1577     *  The name for the SVG element
1578     *  TODO - Add the proper description!
1579     *  {@value}.
1580     */
1581    @API( status = STABLE, since = "0.0.5" )
1582    public static final String SVGELEMENT_Hatch = "hatch";
1583
1584    /**
1585     *  The name for the SVG element
1586     *  TODO - Add the proper description!
1587     *  {@value}.
1588     */
1589    @API( status = STABLE, since = "0.0.5" )
1590    public static final String SVGELEMENT_HatchPath = "hatchPath";
1591
1592    /**
1593     *  The name for the SVG element
1594     *  TODO - Add the proper description!
1595     *  {@value}.
1596     */
1597    @API( status = STABLE, since = "0.0.5" )
1598    public static final String SVGELEMENT_HKern = "hkern";
1599
1600    /**
1601     *  The name for the SVG element
1602     *  TODO - Add the proper description!
1603     *  {@value}.
1604     */
1605    @API( status = STABLE, since = "0.0.5" )
1606    public static final String SVGELEMENT_Image = "image";
1607
1608    /**
1609     *  The name for the SVG element
1610     *  TODO - Add the proper description!
1611     *  {@value}.
1612     */
1613    @API( status = STABLE, since = "0.0.5" )
1614    public static final String SVGELEMENT_Light_feDistantLight = "feDistantLight";
1615
1616    /**
1617     *  The name for the SVG element
1618     *  TODO - Add the proper description!
1619     *  {@value}.
1620     */
1621    @API( status = STABLE, since = "0.0.5" )
1622    public static final String SVGELEMENT_Light_fePointLight = "fePointLight";
1623
1624    /**
1625     *  The name for the SVG element
1626     *  TODO - Add the proper description!
1627     *  {@value}.
1628     */
1629    @API( status = STABLE, since = "0.0.5" )
1630    public static final String SVGELEMENT_Light_feSpotLight = "feSpotLight";
1631
1632    /**
1633     *  The name for the SVG element representing a line: {@value}.
1634     */
1635    @API( status = STABLE, since = "0.0.5" )
1636    public static final String SVGELEMENT_Line = "line";
1637
1638    /**
1639     *  The name for the SVG {@code <marker>} element: {@value}.
1640     */
1641    @API( status = STABLE, since = "0.0.5" )
1642    public static final String SVGELEMENT_Marker = "marker";
1643
1644    /**
1645     *  The name for the SVG element
1646     *  TODO - Add the proper description!
1647     *  {@value}.
1648     */
1649    @API( status = STABLE, since = "0.0.5" )
1650    public static final String SVGELEMENT_Mask = "mask";
1651
1652    /**
1653     *  The name for the SVG element
1654     *  TODO - Add the proper description!
1655     *  {@value}.
1656     */
1657    @API( status = STABLE, since = "0.0.5" )
1658    public static final String SVGELEMENT_Mesh = "mesh";
1659
1660    /**
1661     *  The name for the SVG element
1662     *  TODO - Add the proper description!
1663     *  {@value}.
1664     */
1665    @API( status = STABLE, since = "0.0.5" )
1666    public static final String SVGELEMENT_MeshPatch = "meshPatch";
1667
1668    /**
1669     *  The name for the SVG element
1670     *  TODO - Add the proper description!
1671     *  {@value}.
1672     */
1673    @API( status = STABLE, since = "0.0.5" )
1674    public static final String SVGELEMENT_MeshRow = "meshRow";
1675
1676    /**
1677     *  The name for the SVG element
1678     *  TODO - Add the proper description!
1679     *  {@value}.
1680     */
1681    @API( status = STABLE, since = "0.0.5" )
1682    public static final String SVGELEMENT_Metadata = "metadata";
1683
1684    /**
1685     *  The name for the SVG element
1686     *  TODO - Add the proper description!
1687     *  {@value}.
1688     */
1689    @API( status = STABLE, since = "0.0.5" )
1690    public static final String SVGELEMENT_MissingGlyph = "missing-glyph";
1691
1692    /**
1693     *  The name for the SVG element
1694     *  TODO - Add the proper description!
1695     *  {@value}.
1696     */
1697    @API( status = STABLE, since = "0.0.5" )
1698    public static final String SVGELEMENT_MPath = "mpath";
1699
1700    /**
1701     *  The name for the SVG element
1702     *  TODO - Add the proper description!
1703     *  {@value}.
1704     */
1705    @API( status = STABLE, since = "0.0.5" )
1706    public static final String SVGELEMENT_Path = "path";
1707
1708    /**
1709     *  The name for the SVG element
1710     *  TODO - Add the proper description!
1711     *  {@value}.
1712     */
1713    @API( status = STABLE, since = "0.0.5" )
1714    public static final String SVGELEMENT_Pattern = "pattern";
1715
1716    /**
1717     *  The name for the SVG element representing a polygon shape: {@value}.
1718     */
1719    @API( status = STABLE, since = "0.0.5" )
1720    public static final String SVGELEMENT_Polygon = "polygon";
1721
1722    /**
1723     *  The name for the SVG element representing a poly line: {@value}.
1724     */
1725    @SuppressWarnings( "SpellCheckingInspection" )
1726    @API( status = STABLE, since = "0.0.5" )
1727    public static final String SVGELEMENT_PolyLine = "polyline";
1728
1729    /**
1730     *  The name for the SVG element representing a rectangle shape: {@value}.
1731     */
1732    @API( status = STABLE, since = "0.0.5" )
1733    public static final String SVGELEMENT_Rectangle = "rect";
1734
1735    /**
1736     *  The name for the SVG root element: {@value}.
1737     */
1738    @API( status = STABLE, since = "0.0.5" )
1739    public static final String SVGELEMENT_Root = "svg";
1740
1741    /**
1742     *  The name for the SVG element
1743     *  TODO - Add the proper description!
1744     *  {@value}.
1745     */
1746    @API( status = STABLE, since = "0.0.5" )
1747    public static final String SVGELEMENT_Script = "script";
1748
1749    /**
1750     *  The name for the SVG element
1751     *  TODO - Add the proper description!
1752     *  {@value}.
1753     */
1754    @API( status = STABLE, since = "0.0.5" )
1755    public static final String SVGELEMENT_Set = "set";
1756
1757    /**
1758     *  The name for the SVG element {@code <solidcolor>}: {@value}.<br>
1759     *  <br>The form {@code <solidColor>} had been abandoned before the final
1760     *  specification was published.
1761     */
1762    @API( status = STABLE, since = "0.0.5" )
1763    public static final String SVGELEMENT_SolidColor = "solidcolor";
1764
1765    /**
1766     *  The name for the SVG element
1767     *  TODO - Add the proper description!
1768     *  {@value}.
1769     */
1770    @API( status = STABLE, since = "0.0.5" )
1771    public static final String SVGELEMENT_Stop = "stop";
1772
1773    /**
1774     *  The name for the SVG element
1775     *  TODO - Add the proper description!
1776     *  {@value}.
1777     */
1778    @API( status = STABLE, since = "0.0.5" )
1779    public static final String SVGELEMENT_Style = "style";
1780
1781    /**
1782     *  The name for the SVG element
1783     *  TODO - Add the proper description!
1784     *  {@value}.
1785     */
1786    @API( status = STABLE, since = "0.0.5" )
1787    public static final String SVGELEMENT_Switch = "switch";
1788
1789    /**
1790     *  The name for the SVG {@code <symbol>} element that allows to create
1791     *  reusable parts of an image: {@value}.
1792     */
1793    @API( status = STABLE, since = "0.0.5" )
1794    public static final String SVGELEMENT_Symbol = "symbol";
1795
1796    /**
1797     *  The name for an SVG element holding text:
1798     *  {@value CommonConstants#XMLELEMENT_Text}.
1799     */
1800    @API( status = STABLE, since = "0.0.5" )
1801    public static final String SVGELEMENT_Text = CommonConstants.XMLELEMENT_Text;
1802
1803    /**
1804     *  The name for the SVG element
1805     *  TODO - Add the proper description!
1806     *  {@value}.
1807     */
1808    @API( status = STABLE, since = "0.0.5" )
1809    public static final String SVGELEMENT_TextPath = "textPath";
1810
1811    /**
1812     *  The name for the SVG element that can be added to any other element to
1813     *  assign a title to it: {@value}.
1814     */
1815    @API( status = STABLE, since = "0.0.5" )
1816    public static final String SVGELEMENT_Title = "title";
1817
1818    /**
1819     *  The name for the SVG element
1820     *  TODO - Add the proper description!
1821     *  {@value}.
1822     */
1823    @API( status = STABLE, since = "0.0.5" )
1824    public static final String SVGELEMENT_TRef = "tref";
1825
1826    /**
1827     *  The name for the SVG {@code <tspan>} element: {@value}.
1828     */
1829    @API( status = STABLE, since = "0.0.5" )
1830    public static final String SVGELEMENT_TSpan = "tspan";
1831
1832    /**
1833     *  The name for the SVG element
1834     *  TODO - Add the proper description!
1835     *  {@value}.
1836     */
1837    @API( status = STABLE, since = "0.0.5" )
1838    public static final String SVGELEMENT_Unknown = "unknown";
1839
1840    /**
1841     *  The name for the SVG element that is used to clone other elements:
1842     *  {@value}.
1843     */
1844    @API( status = STABLE, since = "0.0.5" )
1845    public static final String SVGELEMENT_Use = "use";
1846
1847    /**
1848     *  The name for the SVG element
1849     *  TODO - Add the proper description!
1850     *  {@value}.
1851     */
1852    @API( status = STABLE, since = "0.0.5" )
1853    public static final String SVGELEMENT_View = "view";
1854
1855    /**
1856     *  The name for the SVG element
1857     *  TODO - Add the proper description!
1858     *  {@value}.
1859     */
1860    @API( status = STABLE, since = "0.0.5" )
1861    public static final String SVGELEMENT_VKern = "vkern";
1862
1863    /**
1864     *  The name for the XML {@code base} attribute: {@value}.
1865     */
1866    @API( status = STABLE, since = "0.0.5" )
1867    public static final String XMLATTRIBUTE_Base = "xml:base";
1868
1869        /*--------------*\
1870    ====** Constructors **=====================================================
1871        \*--------------*/
1872    /**
1873     *  No instance allowed for this class.
1874     */
1875    private SVGUtils() { throw new PrivateConstructorForStaticClassCalledError( SVGUtils.class ); }
1876
1877        /*---------*\
1878    ====** Methods **==========================================================
1879        \*---------*/
1880    /**
1881     *  Creates an instance of the
1882     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
1883     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGArcTo}
1884     *  that uses relative coordinates.
1885     *
1886     *  @param  rx  The x radius for the ellipsis.
1887     *  @param  ry  The y radius for the ellipsis.
1888     *  @param  rotation    The rotation of the x-axis.
1889     *  @param  largeArc    {@code true} to draw the larger arc,
1890     *      {@code false} for the smaller arc.
1891     *  @param  sweep   {@code true} to draw the arc in
1892     *      &quot;positive-angle&quot; direction, {@code false} for
1893     *      drawing it in a &quot;negative-angle&quot; direction.
1894     *  @param  x   The x coordinate for the end point of the line.
1895     *  @param  y   The y coordinate for the end point of the line.
1896     *  @return The new path element.
1897     */
1898    @SuppressWarnings( {"BooleanParameter", "MethodWithTooManyParameters"} )
1899    @API( status = STABLE, since = "0.0.5" )
1900    public static final SVGPathElement arcTo( final double rx, final double ry, final double rotation, final boolean largeArc, final boolean sweep, final double x, final double y )
1901    {
1902        final var retValue = new SVGArcTo( false, rx, ry, rotation, largeArc, sweep, x, y );
1903
1904        //---* Done *----------------------------------------------------------
1905        return retValue;
1906    }   //  arcTo()
1907
1908    /**
1909     *  Creates an instance of the
1910     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
1911     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGArcTo}
1912     *  that uses relative coordinates.
1913     *
1914     *  @param  rx  The x radius for the ellipsis.
1915     *  @param  ry  The y radius for the ellipsis.
1916     *  @param  rotation    The rotation of the x-axis.
1917     *  @param  largeArc    {@code true} to draw the larger arc,
1918     *      {@code false} for the smaller arc.
1919     *  @param  sweep   {@code true} to draw the arc in
1920     *      &quot;positive-angle&quot; direction, {@code false} for
1921     *      drawing it in a &quot;negative-angle&quot; direction.
1922     *  @param  x   The x coordinate for the end point of the line.
1923     *  @param  y   The y coordinate for the end point of the line.
1924     *  @return The new path element.
1925     */
1926    @SuppressWarnings( {"BooleanParameter", "MethodWithTooManyParameters"} )
1927    @API( status = STABLE, since = "0.0.5" )
1928    public static final SVGPathElement arcTo( final long rx, final long ry, final long rotation, final boolean largeArc, final boolean sweep, final long x, final long y )
1929    {
1930        final var retValue = new SVGArcTo( false, rx, ry, rotation, largeArc, sweep, x, y );
1931
1932        //---* Done *----------------------------------------------------------
1933        return retValue;
1934    }   //  arcTo()
1935
1936    /**
1937     *  Creates an instance of the
1938     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
1939     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGArcTo}
1940     *  that uses absolute coordinates.
1941     *
1942     *  @param  rx  The x radius for the ellipsis.
1943     *  @param  ry  The y radius for the ellipsis.
1944     *  @param  rotation    The rotation of the x-axis.
1945     *  @param  largeArc    {@code true} to draw the larger arc,
1946     *      {@code false} for the smaller arc.
1947     *  @param  sweep   {@code true} to draw the arc in
1948     *      &quot;positive-angle&quot; direction, {@code false} for
1949     *      drawing it in a &quot;negative-angle&quot; direction.
1950     *  @param  x   The x coordinate for the end point of the line.
1951     *  @param  y   The y coordinate for the end point of the line.
1952     *  @return The new path element.
1953     */
1954    @SuppressWarnings( {"BooleanParameter", "MethodWithTooManyParameters"} )
1955    @API( status = STABLE, since = "0.0.5" )
1956    public static final SVGPathElement arcToAbs( final double rx, final double ry, final double rotation, final boolean largeArc, final boolean sweep, final double x, final double y )
1957    {
1958        final var retValue = new SVGArcTo( true, rx, ry, rotation, largeArc, sweep, x, y );
1959
1960        //---* Done *----------------------------------------------------------
1961        return retValue;
1962    }   //  arcToAbs()
1963
1964    /**
1965     *  Creates an instance of the
1966     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
1967     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGArcTo}
1968     *  that uses absolute coordinates.
1969     *
1970     *  @param  rx  The x radius for the ellipsis.
1971     *  @param  ry  The y radius for the ellipsis.
1972     *  @param  rotation    The rotation of the x-axis.
1973     *  @param  largeArc    {@code true} to draw the larger arc,
1974     *      {@code false} for the smaller arc.
1975     *  @param  sweep   {@code true} to draw the arc in
1976     *      &quot;positive-angle&quot; direction, {@code false} for
1977     *      drawing it in a &quot;negative-angle&quot; direction.
1978     *  @param  x   The x coordinate for the end point of the line.
1979     *  @param  y   The y coordinate for the end point of the line.
1980     *  @return The new path element.
1981     */
1982    @SuppressWarnings( {"BooleanParameter", "MethodWithTooManyParameters"} )
1983    @API( status = STABLE, since = "0.0.5" )
1984    public static final SVGPathElement arcToAbs( final long rx, final long ry, final long rotation, final boolean largeArc, final boolean sweep, final long x, final long y )
1985    {
1986        final var retValue = new SVGArcTo( true, rx, ry, rotation, largeArc, sweep, x, y );
1987
1988        //---* Done *----------------------------------------------------------
1989        return retValue;
1990    }   //  arcToAbs()
1991
1992    /**
1993     *  Creates an instance of
1994     *  {@link SVGNumber}
1995     *  with the given numeric type and with the unit
1996     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#CENTIMETER}.
1997     *
1998     *  @param  value   The type.
1999     *  @return The new {@code SVGNumber} instance.
2000     */
2001    @API( status = STABLE, since = "0.0.5" )
2002    public static final SVGNumber centimeter( final double value ) { return new SVGNumber( value, CENTIMETER ); }
2003
2004    /**
2005     *  Creates an instance of
2006     *  {@link SVGNumber}
2007     *  with the given numeric type and with the unit
2008     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#CENTIMETER}.
2009     *
2010     *  @param  value   The type.
2011     *  @return The new {@code SVGNumber} instance.
2012     */
2013    @API( status = STABLE, since = "0.0.5" )
2014    public static final SVGNumber centimeter( final long value ) { return new SVGNumber( value, CENTIMETER ); }
2015
2016    /**
2017     *  Clones the given element.<br>
2018     *  <br>The clone will be semantically identical to the given element (it
2019     *  looks the same in the final output), but it will not be of the same
2020     *  Java type.
2021     *
2022     *  @param  element The element to clone.
2023     *  @return The clone.
2024     */
2025    @API( status = STABLE, since = "0.0.5" )
2026    public static final SVGElement cloneElement( final SVGElement element )
2027    {
2028        final var elementName = requireNonNullArgument( element, "element" ).getElementName();
2029        final var xmlElement = ((XMLElementAdapter) element);
2030        final var flags = xmlElement.getFlags().toArray( Flags[]::new );
2031        final var retValue = new SVGGenericElement( elementName, flags );
2032
2033        retValue.registerValidAttributes( xmlElement.retrieveValidAttributes().toArray( String []::new ) );
2034        retValue.registerValidChildren( xmlElement.retrieveValidChildren().toArray( String []::new ) );
2035
2036        element.getAttributes().forEach( retValue::setAttribute );
2037        element.getChildren().forEach( currentElement -> retValue.addChild( cloneElement( (SVGElement) currentElement ) ) );
2038        element.getNamespaces().forEach( retValue::setNamespace );
2039
2040        //---* Done *----------------------------------------------------------
2041        return retValue;
2042    }   //  cloneElement()
2043
2044    /**
2045     *  Creates an instance of the
2046     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2047     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGClosePath}
2048     *  that uses relative coordinates.
2049     *
2050     *  @return The new path element.
2051     */
2052    @API( status = STABLE, since = "0.0.5" )
2053    public static final SVGPathElement closePath()
2054    {
2055        final var retValue = new SVGClosePath();
2056
2057        //---* Done *----------------------------------------------------------
2058        return retValue;
2059    }   //  closePath()
2060
2061    /**
2062     *  Returns the
2063     *  {@link SVGColor}
2064     *  instance with the type &quot;inherit&quot;.
2065     *
2066     *  @return The instance of {@code SVGColor}.
2067     *
2068     *  @see SVGColor#COLOR_INHERIT
2069     */
2070    @API( status = STABLE, since = "0.0.5" )
2071    public static final SVGColor color() { return COLOR_INHERIT; }
2072
2073    /**
2074     *  Creates a new
2075     *  {@link SVGColor}
2076     *  instance from the given colour values.<br>
2077     *  <br>Allowed are the values from 0 to 255, other values will be
2078     *  normalised accordingly.
2079     *
2080     *  @param  red The red component for the colour.
2081     *  @param  green   The green component for the colour.
2082     *  @param  blue    The blue component for the colour.
2083     *  @return The new instance of {@code SVGColor}.
2084     */
2085    @API( status = STABLE, since = "0.0.5" )
2086    public static final SVGColor color( final int red, final int green, final int blue )
2087    {
2088        final var retValue = new SVGColor( red, green, blue );
2089
2090        //---* Done *----------------------------------------------------------
2091        return retValue;
2092    }   //  color()
2093
2094    /**
2095     *  Creates a new
2096     *  {@link SVGColor}
2097     *  instance from the given colour values.<br>
2098     *  <br>Allowed are the values from 0 to 255, or 0% to 100% respectively,
2099     *  other values will be normalised accordingly.
2100     *
2101     *  @param  flag    {@code true} if the given values are percentages,
2102     *      {@code false} if they are absolute values.
2103     *  @param  red The red component for the colour.
2104     *  @param  green   The green component for the colour.
2105     *  @param  blue    The blue component for the colour.
2106     *  @return The new instance of {@code SVGColor}.
2107     */
2108    @API( status = STABLE, since = "0.0.5" )
2109    public static final SVGColor color( final boolean flag, final int red, final int green, final int blue )
2110    {
2111        final var retValue = new SVGColor( flag, red, green, blue );
2112
2113        //---* Done *----------------------------------------------------------
2114        return retValue;
2115    }   //  color()
2116
2117    /**
2118     *  Creates a new
2119     *  {@link SVGColor}
2120     *  instance, using the given argument as a CSS colour name.<br>
2121     *  <br>The given argument may not be {@code null} nor the empty String,
2122     *  but it will not undergo any further validation.
2123     *
2124     *  @param  color   The CSS colour name.
2125     *  @return The new instance of {@code SVGColor}.
2126     */
2127    @API( status = STABLE, since = "0.0.5" )
2128    public static final SVGColor color( final String color ) { return new SVGColor( color ); }
2129
2130    /**
2131     *  Creates the namespace instance that is used for all Creative Commons
2132     *  stuff.
2133     *
2134     *  @return The new namespace instance.
2135     */
2136    private static final Namespace createCCNamespace()
2137    {
2138        final var identifier = URI.create( "http://creativecommons.org/ns#" );
2139        final var retValue = new Namespace( "cc", identifier );
2140
2141        //---* Done *----------------------------------------------------------
2142        return retValue;
2143    }   //  createCCNamespace()
2144
2145    /**
2146     *  Creates an SVG {@code <clipPath>} element instance.
2147     *
2148     *  @param  id  The id for the new {@code <marker>} element.
2149     *  @return The new {@code <clipPath>} element.
2150     */
2151    @API( status = STABLE, since = "0.0.5" )
2152    public static final SVGClipPath createClipPath( final String id )
2153    {
2154        final var retValue = new SVGClipPathImpl( id );
2155
2156        //---* Done *----------------------------------------------------------
2157        return retValue;
2158    }   //  createClipPath()
2159
2160    /**
2161     *  Creates an SVG {@code <clipPath>} element instance and adds it to the
2162     *  given {@code <svg>} element.
2163     *
2164     *  @param  id  The id for the new {@code <marker>} element.
2165     *  @param  parent  The parent {@code <svg>} element.
2166     *  @return The new {@code <clipPath>} element.
2167     */
2168    @API( status = STABLE, since = "0.0.5" )
2169    public static final SVGClipPath createClipPath( final String id, final SVG parent )
2170    {
2171        final var retValue = createClipPath( id );
2172        requireNonNullArgument( parent, "parent" ).addDefinition( retValue );
2173
2174        //---* Done *----------------------------------------------------------
2175        return retValue;
2176    }   //  createClipPath()
2177
2178    /**
2179     *  Creates a generic SVG element.<br>
2180     *  <br>This method should be used to create an SVG element that does not
2181     *  have (yet) its specific implementation class. It does not work to
2182     *  introduce completely new, still unknown SVG elements, as it checks the
2183     *  given element name.<br>
2184     *  <br>The returned instance will also check which attributes are allowed
2185     *  for the element it represents as well as which children are allowed to
2186     *  it.
2187     *
2188     *  @param  elementName The name for the new element.
2189     *  @return The new generic SVG element.
2190     *  @throws IllegalArgumentException    The given element name does not
2191     *      denote a define SVG element.
2192     */
2193    @API( status = STABLE, since = "0.0.5" )
2194    public static final SVGGenericElement createGenericElement( final String elementName )
2195    {
2196        if( retrieveElementCategory( elementName ).isEmpty() )
2197        {
2198            throw new IllegalArgumentException( format( "Unknown element name: %s", elementName ) );
2199        }
2200
2201        final var retValue = new SVGGenericElement( elementName );
2202
2203        //---* Done *----------------------------------------------------------
2204        return retValue;
2205    }   //  createGenericElement()
2206
2207    /**
2208     *  Creates an SVG {@code <g>} element instance.
2209     *
2210     *  @return The new {@code <g>} element.
2211     */
2212    @API( status = STABLE, since = "0.0.5" )
2213    public static final SVGGroup createGroup() { return new SVGGroupImpl(); }
2214
2215    /**
2216     *  Creates an SVG {@code <g>} element instance.
2217     *
2218     *  @param  parent  The parent for the new {@code <g>} element.
2219     *  @return The new {@code <g>} element.
2220     */
2221    @API( status = STABLE, since = "0.0.5" )
2222    public static final SVGGroup createGroup( final SVGElementWithChildren parent )
2223    {
2224        final var retValue = createGroup();
2225        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2226
2227        //---* Done *----------------------------------------------------------
2228        return retValue;
2229    }   //  createGroup()
2230
2231    /**
2232     *  Creates an SVG {@code <line>} element instance.
2233     *
2234     *  @return The new {@code <line>} element.
2235     */
2236    @API( status = STABLE, since = "0.0.5" )
2237    public static final SVGLine createLine() { return new SVGLineImpl(); }
2238
2239    /**
2240     *  Creates an SVG {@code <line>} element instance and adds it to the
2241     *  given parent element.
2242     *
2243     *  @param  parent  The parent element.
2244     *  @return The new {@code <line>} element.
2245     */
2246    @API( status = STABLE, since = "0.0.5" )
2247    public static final SVGLine createLine( final SVGElementWithChildren parent )
2248    {
2249        final var retValue = createLine();
2250        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2251
2252        //---* Done *----------------------------------------------------------
2253        return retValue;
2254    }   //  createLine()
2255
2256    /**
2257     *  Creates an SVG {@code <line>} element instance with the given start and
2258     *  end points.
2259     *
2260     *  @param  x1  The x coordinate for the starting point of the line.
2261     *  @param  y1  The y coordinate for the starting point of the line.
2262     *  @param  x2  The x coordinate for the ending point of the line.
2263     *  @param  y2  The y coordinate for the ending point of the line.
2264     *  @return The new {@code <line>} element.
2265     */
2266    @API( status = STABLE, since = "0.0.5" )
2267    @SuppressWarnings( "UseOfConcreteClass" )
2268    public static final SVGLine createLine( final SVGNumber x1, final SVGNumber y1, final SVGNumber x2, final SVGNumber y2 )
2269    {
2270        final var retValue = createLine();
2271        retValue.setX1( requireNonNullArgument( x1, "x1" ) );
2272        retValue.setY1( requireNonNullArgument( y1, "y1" ) );
2273        retValue.setX2( requireNonNullArgument( x2, "x2" ) );
2274        retValue.setY2( requireNonNullArgument( y2, "y2" ) );
2275
2276        //---* Done *----------------------------------------------------------
2277        return retValue;
2278    }   //  createLine()
2279
2280    /**
2281     *  Creates an SVG {@code <line>} element instance with the given start and
2282     *  end points and adds it to the given parent element.
2283     *
2284     *  @param  parent  The parent element.
2285     *  @param  x1  The x coordinate for the starting point of the line.
2286     *  @param  y1  The y coordinate for the starting point of the line.
2287     *  @param  x2  The x coordinate for the ending point of the line.
2288     *  @param  y2  The y coordinate for the ending point of the line.
2289     *  @return The new {@code <line>} element.
2290     */
2291    @API( status = STABLE, since = "0.0.5" )
2292    @SuppressWarnings( "UseOfConcreteClass" )
2293    public static final SVGLine createLine( final SVGElementWithChildren parent, final SVGNumber x1, final SVGNumber y1, final SVGNumber x2, final SVGNumber y2 )
2294    {
2295        final var retValue = createLine();
2296        retValue.setX1( requireNonNullArgument( x1, "x1" ) );
2297        retValue.setY1( requireNonNullArgument( y1, "y1" ) );
2298        retValue.setX2( requireNonNullArgument( x2, "x2" ) );
2299        retValue.setY2( requireNonNullArgument( y2, "y2" ) );
2300        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2301
2302        //---* Done *----------------------------------------------------------
2303        return retValue;
2304    }   //  createLine()
2305
2306    /**
2307     *  Creates an SVG {@code <marker>} element instance and adds it to the
2308     *  given {@code <svg>} element.
2309     *
2310     *  @param  id  The id for the new {@code <marker>} element.
2311     *  @param  parent  The parent {@code <svg>} element.
2312     *  @return The new {@code <marker>} element.
2313     */
2314    @API( status = STABLE, since = "0.0.5" )
2315    public static final SVGMarker createMarker( final String id, final SVG parent )
2316    {
2317        final var retValue = new SVGMarkerImpl();
2318        retValue.setId( id );
2319        requireNonNullArgument( parent, "parent" ).addDefinition( retValue );
2320
2321        //---* Done *----------------------------------------------------------
2322        return retValue;
2323    }   //  createMarker()
2324
2325    /**
2326     *  Creates an SVG {@code <path>} element instance.
2327     *
2328     *  @return The new {@code <path>} element.
2329     */
2330    @API( status = STABLE, since = "0.0.5" )
2331    public static final SVGPath createPath() { return new SVGPathImpl(); }
2332
2333    /**
2334     *  Creates an SVG {@code <Path>} element instance and adds it to the
2335     *  given parent element.
2336     *
2337     *  @param  parent  The parent element.
2338     *  @return The new {@code <path>} element.
2339     */
2340    @API( status = STABLE, since = "0.0.5" )
2341    public static final SVGPath createPath( final SVGElementWithChildren parent )
2342    {
2343        final var retValue = createPath();
2344        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2345
2346        //---* Done *----------------------------------------------------------
2347        return retValue;
2348    }   //  createPath()
2349
2350    /**
2351     *  Creates an SVG {@code <path>} element instance with the given path
2352     *  definition.
2353     *
2354     *  @param  pathDefinition  The path definition.
2355     *  @return The new {@code <path>} element.
2356     */
2357    @API( status = STABLE, since = "0.0.5" )
2358    public static final SVGPath createPath( final SVGPathElement... pathDefinition )
2359    {
2360        final var retValue = createPath();
2361        retValue.setPathDefinition( requireNonNullArgument( pathDefinition, "pathDefinition" ) );
2362
2363        //---* Done *----------------------------------------------------------
2364        return retValue;
2365    }   //  createPath()
2366
2367    /**
2368     *  Creates an SVG {@code <path>} element instance with the given path
2369     *  definition and adds it to the given parent element.
2370     *
2371     *  @param  parent  The parent element.
2372     *  @param  pathDefinition  The path definition.
2373     *  @return The new {@code <path>} element.
2374     */
2375    @API( status = STABLE, since = "0.0.5" )
2376    public static final SVGPath createPath( final SVGElementWithChildren parent, final SVGPathElement... pathDefinition )
2377    {
2378        final var retValue = createPath( parent );
2379        retValue.setPathDefinition( requireNonNullArgument( pathDefinition, "pathDefinition" ) );
2380
2381        //---* Done *----------------------------------------------------------
2382        return retValue;
2383    }   //  createPath()
2384
2385    /**
2386     *  Creates an SVG {@code <marker>} element instance that is used as a
2387     *  <i>positioned</i> marker.
2388     *
2389     *  @return The new {@code <marker>} element.
2390     */
2391    @API( status = STABLE, since = "0.0.5" )
2392    public static final SVGPositionedMarker createPositionedMarker()
2393    {
2394        final var retValue = new SVGPositionedMarkerImpl();
2395
2396        //---* Done *----------------------------------------------------------
2397        return retValue;
2398    }   //  createPositionedMarker()
2399
2400    /**
2401     *  Creates an SVG {@code <marker>} element instance that is used as a
2402     *  <i>positioned</i> marker and adds it to the given parent.
2403     *
2404     *  @param  id  The id for the new {@code <marker>} element.
2405     *  @param  parent  The parent element.
2406     *  @return The new {@code <marker>} element.
2407     */
2408    @API( status = STABLE, since = "0.0.5" )
2409    public static final SVGPositionedMarker createPositionedMarker( final String id, final SVGElementWithChildren parent )
2410    {
2411        final var retValue = createPositionedMarker();
2412        retValue.setId( id );
2413        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2414
2415        //---* Done *----------------------------------------------------------
2416        return retValue;
2417    }   //  createPositionedMarker()
2418
2419    /**
2420     *  Creates the namespace instance that is used for all RDF stuff.
2421     *
2422     *  @return The new namespace instance.
2423     */
2424    private static final Namespace createRDFNamespace()
2425    {
2426        final var identifier = URI.create( "http://www.w3.org/1999/02/22-rdf-syntax-ns#" );
2427        final var retValue = new Namespace( "rdf", identifier );
2428
2429        //---* Done *----------------------------------------------------------
2430        return retValue;
2431    }   //  createRDFNamespace()
2432
2433    /**
2434     *  Creates an SVG {@code <rect>} element instance.
2435     *
2436     *  @return The new {@code <rect>} element.
2437     */
2438    @API( status = STABLE, since = "0.0.5" )
2439    public static final SVGRectangle createRectangle() { return new SVGRectangleImpl(); }
2440
2441    /**
2442     *  Creates an SVG {@code <rect>} element instance and adds it to the
2443     *  given parent element.
2444     *
2445     *  @param  parent  The parent element.
2446     *  @return The new {@code <rect>} element.
2447     */
2448    @API( status = STABLE, since = "0.0.5" )
2449    public static final SVGRectangle createRectangle( final SVGElementWithChildren parent )
2450    {
2451        final var retValue = createRectangle();
2452        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2453
2454        //---* Done *----------------------------------------------------------
2455        return retValue;
2456    }   //  createRectangle()
2457
2458    /**
2459     *  Creates an SVG {@code <rect>} element instance with the given start and
2460     *  end points.
2461     *
2462     *  @param  x   The x coordinate for the upper left corner of the
2463     *      rectangle.
2464     *  @param  y   The x coordinate for the upper left corner of the
2465     *      rectangle.
2466     *  @param  width   The width of the rectangle.
2467     *  @param  height  The height of the rectangle.
2468     *  @return The new {@code <rect>} element.
2469     */
2470    @API( status = STABLE, since = "0.0.5" )
2471    @SuppressWarnings( "UseOfConcreteClass" )
2472    public static final SVGRectangle createRectangle( final SVGNumber x, final SVGNumber y, final SVGNumber width, final SVGNumber height )
2473    {
2474        final var retValue = createRectangle();
2475        retValue.defineRectangle( x, y, width, height );
2476
2477        //---* Done *----------------------------------------------------------
2478        return retValue;
2479    }   //  createRectangle()
2480
2481    /**
2482     *  Creates an SVG {@code <rect>} element instance with the given start and
2483     *  end points and adds it to the given parent element.
2484     *
2485     *  @param  parent  The parent element.
2486     *  @param  x   The x coordinate for the upper left corner of the
2487     *      rectangle.
2488     *  @param  y   The x coordinate for the upper left corner of the
2489     *      rectangle.
2490     *  @param  width   The width of the rectangle.
2491     *  @param  height  The height of the rectangle.
2492     *  @return The new {@code <rect>} element.
2493     */
2494    @API( status = STABLE, since = "0.0.5" )
2495    @SuppressWarnings( "UseOfConcreteClass" )
2496    public static final SVGRectangle createRectangle( final SVGElementWithChildren parent, final SVGNumber x, final SVGNumber y, final SVGNumber width, final SVGNumber height )
2497    {
2498        final var retValue = createRectangle();
2499        retValue.defineRectangle( x, y, width, height );
2500        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2501
2502        //---* Done *----------------------------------------------------------
2503        return retValue;
2504    }   //  createRectangle()
2505
2506    /**
2507     *  Creates an SVG {@code <svg>} element instance.
2508     *
2509     *  @param  usage  How the new {@code <svg>} element should be used.
2510     *  @return The new {@code <svg>} element.
2511     */
2512    @API( status = STABLE, since = "0.0.5" )
2513    public static final SVG createSVG( final Usage usage )
2514    {
2515        final var retValue = new SVGImpl();
2516
2517        switch( requireNonNullArgument( usage, "usage" ) )
2518        {
2519            case EMBED_HTML ->
2520            {
2521                retValue.setNamespace( createSVGNamespace( SVG_PREFIX ) );
2522                retValue.setNamespace( createXLINKNamespace() );
2523                retValue.setAttribute( SVGATTRIBUTE_BaseProfile, "full" );
2524                retValue.setAttribute( SVGATTRIBUTE_Version, "1.1" );
2525            }
2526
2527            case EMBED_HTML5 ->
2528            {
2529                retValue.setAttribute( SVGATTRIBUTE_BaseProfile, "full" );
2530                retValue.setAttribute( SVGATTRIBUTE_Version, "1.1" );
2531            }
2532
2533            case EMBED_SVG -> { /* Does nothing */ }
2534
2535            case STANDALONE_DOCUMENT ->
2536            {
2537                /*
2538                 * This configuration was taken more or less (more <i>less</i>)
2539                 * from an SVG document created with Inkscape.
2540                 */
2541                retValue.setNamespace( createSVGNamespace( SVG_PREFIX ) );
2542                retValue.setNamespace( createSVGNamespace( EMPTY_STRING ) );
2543                retValue.setNamespace( createXLINKNamespace() );
2544                retValue.setNamespace( createCCNamespace() );
2545                retValue.setNamespace( createRDFNamespace() );
2546                retValue.setAttribute( SVGATTRIBUTE_BaseProfile, "full" );
2547                retValue.setAttribute( SVGATTRIBUTE_Version, "1.1" );
2548            }
2549
2550            default -> throw new UnsupportedEnumError( usage );
2551        }
2552
2553        //---* Done *----------------------------------------------------------
2554        return retValue;
2555    }   //  createSVG()
2556
2557    /**
2558     *  Creates an SVG {@code <svg>} element instance and adds it to the given
2559     *  parent.
2560     *
2561     *  @param  parent  The parent for the new {@code <svg>} element.
2562     *  @return The new {@code <svg>} element.
2563     */
2564    @API( status = STABLE, since = "0.0.5" )
2565    public static final SVG createSVG( final SVGElementWithChildren parent )
2566    {
2567        final var retValue = createSVG( EMBED_SVG );
2568        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2569
2570        //---* Done *----------------------------------------------------------
2571        return retValue;
2572    }   //  createSVG()
2573
2574    /**
2575     *  Creates an XML document instance with the given {@code <svg>} element
2576     *  as the root element.
2577     *
2578     *  @param  rootElement The root element.
2579     *  @return The new SVG document.
2580     */
2581    @API( status = STABLE, since = "0.0.5" )
2582    public static final XMLDocument createSVGDocument( final SVG rootElement )
2583    {
2584        final var retValue = createXMLDocument( (XMLElement) rootElement, false );
2585
2586        //---* Done *----------------------------------------------------------
2587        return retValue;
2588    }   //  createSVGDocument()
2589
2590    /**
2591     *  Creates the namespace instance that is used for all SVG stuff.
2592     *
2593     *  @param  prefix  The prefix; can be empty or {@code null}.
2594     *  @return The new namespace instance.
2595     */
2596    private static final Namespace createSVGNamespace( final String prefix )
2597    {
2598        final var identifier = URI.create( "http://www.w3.org/2000/svg" );
2599        final var retValue = isNotEmptyOrBlank( prefix ) ? new Namespace( prefix, identifier ) : new Namespace( identifier );
2600
2601        //---* Done *----------------------------------------------------------
2602        return retValue;
2603    }   //  createSVGNamespace()
2604
2605    /**
2606     *  Creates an SVG {@code <style>} element instance.
2607     *
2608     *  @return The new {@code <symbol>} element instance.
2609     */
2610    @API( status = STABLE, since = "0.0.5" )
2611    public static final SVGStyle createStyle() { return new SVGStyleImpl(); }
2612
2613    /**
2614     *  Creates an SVG {@code <style>} element instance and adds it to the
2615     *  given {@code <svg>} element.
2616     *
2617     *  @param  parent  The parent for the new {@code <style>} element.
2618     *  @return The new {@code <symbol>} element instance.
2619     */
2620    @API( status = STABLE, since = "0.0.5" )
2621    public static final SVGStyle createStyle( final SVG parent )
2622    {
2623        final var retValue = createStyle();
2624        requireNonNullArgument( parent, "parent" ).addDefinition( retValue );
2625
2626        //---* Done *----------------------------------------------------------
2627        return retValue;
2628    }   //  createStyle()
2629
2630    /**
2631     *  Creates an SVG {@code <style>} element instance and adds it to the
2632     *  given {@code <svg>} element.
2633     *
2634     *  @param  styles  The CSS style definitions.
2635     *  @return The new {@code <symbol>} element instance.
2636     */
2637    @API( status = STABLE, since = "0.0.5" )
2638    public static final SVGStyle createStyle( final CharSequence... styles )
2639    {
2640        final var retValue = new SVGStyleImpl( styles );
2641
2642        //---* Done *----------------------------------------------------------
2643        return retValue;
2644    }   //  createStyle()
2645
2646    /**
2647     *  Creates an SVG {@code <style>} element instance and adds it to the
2648     *  given {@code <svg>} element.
2649     *
2650     *  @param  parent  The parent for the new {@code <style>} element.
2651     *  @param  styles  The CSS style definitions.
2652     *  @return The new {@code <symbol>} element instance.
2653     */
2654    @API( status = STABLE, since = "0.0.5" )
2655    public static final SVGStyle createStyle( final SVG parent, final CharSequence... styles )
2656    {
2657        final var retValue = createStyle( styles );
2658        requireNonNullArgument( parent, "parent" ).addDefinition( retValue );
2659
2660        //---* Done *----------------------------------------------------------
2661        return retValue;
2662    }   //  createStyle()
2663
2664    /**
2665     *  Creates an SVG {@code <symbol>} element instance.
2666     *
2667     *  @param  id  The id for the new {@code <symbol>}.
2668     *  @return The new {@code <symbol>} element.
2669     */
2670    @API( status = STABLE, since = "0.0.5" )
2671    public static final SVGSymbol createSymbol( final String id ) { return new SVGSymbolImpl( id ); }
2672
2673    /**
2674     *  Creates an SVG {@code <symbol>} element instance and adds it to the
2675     *  given {@code <svg>} element.
2676     *
2677     *  @param  id  The id for the new {@code <symbol>}.
2678     *  @param  parent  The parent for the new {@code <symbol>} element.
2679     *  @return The new {@code <symbol>} element.
2680     */
2681    @API( status = STABLE, since = "0.0.5" )
2682    public static final SVGSymbol createSymbol( final String id, final SVG parent )
2683    {
2684        final var retValue = new SVGSymbolImpl( id );
2685        requireNonNullArgument( parent, "parent" ).addDefinition( retValue );
2686
2687        //---* Done *----------------------------------------------------------
2688        return retValue;
2689    }   //  createSymbol()
2690
2691    /**
2692     *  Creates an SVG {@code <text>} element instance.
2693     *
2694     *  @return The new {@code <text>} element.
2695     */
2696    @API( status = STABLE, since = "0.0.5" )
2697    public static final SVGText createText() { return new SVGTextImpl(); }
2698
2699    /**
2700     *  Creates an SVG {@code <text>} element instance and adds it to the given
2701     *  parent.
2702     *
2703     *  @param  text    The text for the new element.
2704     *  @return The new {@code <text>} element.
2705     */
2706    @API( status = STABLE, since = "0.0.5" )
2707    public static final SVGText createText( final CharSequence text )
2708    {
2709        final var retValue = createText();
2710        retValue.addText( text );
2711
2712        //---* Done *----------------------------------------------------------
2713        return retValue;
2714    }   //  createText()
2715
2716    /**
2717     *  Creates an SVG {@code <text>} element instance and adds it to the given
2718     *  parent.
2719     *
2720     *  @param  parent  The parent for the new {@code <text>} element.
2721     *  @return The new {@code <text>} element.
2722     */
2723    @API( status = STABLE, since = "0.0.5" )
2724    public static final SVGText createText( final SVGElementWithChildren parent )
2725    {
2726        final var retValue = createText();
2727        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2728
2729        //---* Done *----------------------------------------------------------
2730        return retValue;
2731    }   //  createText()
2732
2733    /**
2734     *  Creates an SVG {@code <text>} element instance and adds it to the given
2735     *  parent.
2736     *
2737     *  @param  parent  The parent for the new {@code <text>} element.
2738     *  @param  text    The text for the new element.
2739     *  @return The new {@code <text>} element.
2740     */
2741    @API( status = STABLE, since = "0.0.5" )
2742    public static final SVGText createText( final SVGElementWithChildren parent, final CharSequence text )
2743    {
2744        final var retValue = createText( text );
2745        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2746
2747        //---* Done *----------------------------------------------------------
2748        return retValue;
2749    }   //  createText()
2750
2751    /**
2752     *  Creates an SVG {@code <tspan>} element instance.
2753     *
2754     *  @return The new {@code <tspan>} element.
2755     */
2756    @API( status = STABLE, since = "0.0.5" )
2757    public static final SVGTSpan createTSpan() { return new SVGTSpanImpl(); }
2758
2759    /**
2760     *  Creates an SVG {@code <tspan>} element as child of the given
2761     *  {@code <text>}.
2762     *
2763     *  @param  text    The text for the new {@code <tspan>} element.
2764     *  @return The new {@code <tspan>} element.
2765     */
2766    @API( status = STABLE, since = "0.0.5" )
2767    public static final SVGTSpan createTSpan( final CharSequence text )
2768    {
2769        final var retValue = createTSpan();
2770        retValue.addText( text );
2771
2772        //---* Done *----------------------------------------------------------
2773        return retValue;
2774    }   //  createTSpan()
2775
2776    /**
2777     *  Creates an SVG {@code <tspan>} element as child of the given
2778     *  {@code <text>}.
2779     *
2780     *  @param  parent  The parent for the new {@code <tspan>} element.
2781     *  @return The new {@code <tspan>} element.
2782     */
2783    @API( status = STABLE, since = "0.0.5" )
2784    public static final SVGTSpan createTSpan( final SVGText parent )
2785    {
2786        final var retValue = createTSpan();
2787        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2788
2789        //---* Done *----------------------------------------------------------
2790        return retValue;
2791    }   //  createTSpan()
2792
2793    /**
2794     *  Creates an SVG {@code <tspan>} element as child of the given
2795     *  {@code <text>}.
2796     *
2797     *  @param  parent  The parent for the new {@code <tspan>} element.
2798     *  @param  text    The text for the new {@code <tspan>} element.
2799     *  @return The new {@code <tspan>} element.
2800     */
2801    @API( status = STABLE, since = "0.0.5" )
2802    public static final SVGTSpan createTSpan( final SVGText parent, final CharSequence text )
2803    {
2804        final var retValue = createTSpan( text );
2805        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2806
2807        //---* Done *----------------------------------------------------------
2808        return retValue;
2809    }   //  createTSpan()
2810
2811    /**
2812     *  Creates an SVG {@code <tspan>} element as child of the given
2813     *  {@code <tspan>}.
2814     *
2815     *  @param  parent  The parent for the new {@code <tspan>} element.
2816     *  @return The new {@code <tspan>} element.
2817     */
2818    @API( status = STABLE, since = "0.0.5" )
2819    public static final SVGTSpan createTSpan( final SVGTSpan parent )
2820    {
2821        final var retValue = createTSpan();
2822        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2823
2824        //---* Done *----------------------------------------------------------
2825        return retValue;
2826    }   //  createTSpan()
2827
2828    /**
2829     *  Creates an SVG {@code <tspan>} element as child of the given
2830     *  {@code <tspan>}.
2831     *
2832     *  @param  parent  The parent for the new {@code <tspan>} element.
2833     *  @param  text    The text for the new {@code <tspan>} element.
2834     *  @return The new {@code <tspan>} element.
2835     */
2836    @API( status = STABLE, since = "0.0.5" )
2837    public static final SVGTSpan createTSpan( final SVGTSpan parent, final CharSequence text )
2838    {
2839        final var retValue = createTSpan( text );
2840        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2841
2842        //---* Done *----------------------------------------------------------
2843        return retValue;
2844    }   //  createTSpan()
2845
2846    /**
2847     *  Creates an SVG {@code <use>} element instance.
2848     *
2849     *  @param  reference   The reference to the element to clone.
2850     *  @return The new {@code <use>} element.
2851     */
2852    @API( status = STABLE, since = "0.0.5" )
2853    public static final SVGUse createUse( final URI reference ) { return new SVGUseImpl( reference ); }
2854
2855    /**
2856     *  Creates an SVG {@code <use>} element instance and adds it to the given
2857     *  parent.
2858     *
2859     *  @param  parent  The parent for the new {@code <use>} element.
2860     *  @param  reference   The reference to the element to clone.
2861     *  @return The new {@code <use>} element.
2862     */
2863    @API( status = STABLE, since = "0.0.5" )
2864    public static final SVGUse createUse( final SVGElementWithChildren parent, final URI reference )
2865    {
2866        final var retValue = createUse( reference );
2867        requireNonNullArgument( parent, "parent" ).addChild( retValue );
2868
2869        //---* Done *----------------------------------------------------------
2870        return retValue;
2871    }   //  createUse()
2872
2873    /**
2874     *  Creates the namespace instance that is used for all XLINK stuff.
2875     *
2876     *  @return The new namespace instance.
2877     */
2878    private static final Namespace createXLINKNamespace()
2879    {
2880        final var identifier = URI.create( "http://www.w3.org/1999/xlink" );
2881        final var retValue = new Namespace( "xlink", identifier );
2882
2883        //---* Done *----------------------------------------------------------
2884        return retValue;
2885    }   //  createXLINKNamespace()
2886
2887    /**
2888     *  Creates an instance of the
2889     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2890     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
2891     *  that uses relative coordinates.
2892     *
2893     *  @param  x2   The x coordinate for the second control point
2894     *  @param  y2   The y coordinate for the second control point
2895     *  @param  x   The x coordinate for the end point of the line.
2896     *  @param  y   The y coordinate for the end point of the line.
2897     *  @return The new path element.
2898     */
2899    @API( status = STABLE, since = "0.0.5" )
2900    public static final SVGPathElement cubicCurveTo( final double x2, final double y2, final double x, final double y )
2901    {
2902        final var retValue = new SVGCubicCurveTo( false, x2, y2, x, y );
2903
2904        //---* Done *----------------------------------------------------------
2905        return retValue;
2906    }   //  cubicCurveTo()
2907
2908    /**
2909     *  Creates an instance of the
2910     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2911     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
2912     *  that uses relative coordinates.
2913     *
2914     *  @param  x1   The x coordinate for the first control point.
2915     *  @param  y1   The y coordinate for the first control point.
2916     *  @param  x2   The x coordinate for the second control point
2917     *  @param  y2   The y coordinate for the second control point
2918     *  @param  x   The x coordinate for the end point of the line.
2919     *  @param  y   The y coordinate for the end point of the line.
2920     *  @return The new path element.
2921     */
2922    @SuppressWarnings( "MethodWithTooManyParameters" )
2923    @API( status = STABLE, since = "0.0.5" )
2924    public static final SVGPathElement cubicCurveTo( final double x1, final double y1, final double x2, final double y2, final double x, final double y )
2925    {
2926        final var retValue = new SVGCubicCurveTo( false, x1, y1, x2, y2, x, y );
2927
2928        //---* Done *----------------------------------------------------------
2929        return retValue;
2930    }   //  cubicCurveTo()
2931
2932    /**
2933     *  Creates an instance of the
2934     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2935     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
2936     *  that uses relative coordinates.
2937     *
2938     *  @param  x2   The x coordinate for the second control point
2939     *  @param  y2   The y coordinate for the second control point
2940     *  @param  x   The x coordinate for the end point of the line.
2941     *  @param  y   The y coordinate for the end point of the line.
2942     *  @return The new path element.
2943     */
2944    @API( status = STABLE, since = "0.0.5" )
2945    public static final SVGPathElement cubicCurveTo( final long x2, final long y2, final long x, final long y )
2946    {
2947        final var retValue = new SVGCubicCurveTo( false, x2, y2, x, y );
2948
2949        //---* Done *----------------------------------------------------------
2950        return retValue;
2951    }   //  cubicCurveTo()
2952
2953    /**
2954     *  Creates an instance of the
2955     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2956     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
2957     *  that uses relative coordinates.
2958     *
2959     *  @param  x1   The x coordinate for the first control point.
2960     *  @param  y1   The y coordinate for the first control point.
2961     *  @param  x2   The x coordinate for the second control point
2962     *  @param  y2   The y coordinate for the second control point
2963     *  @param  x   The x coordinate for the end point of the line.
2964     *  @param  y   The y coordinate for the end point of the line.
2965     *  @return The new path element.
2966     */
2967    @SuppressWarnings( "MethodWithTooManyParameters" )
2968    @API( status = STABLE, since = "0.0.5" )
2969    public static final SVGPathElement cubicCurveTo( final long x1, final long y1, final long x2, final long y2, final long x, final long y )
2970    {
2971        final var retValue = new SVGCubicCurveTo( false, x1, y1, x2, y2, x, y );
2972
2973        //---* Done *----------------------------------------------------------
2974        return retValue;
2975    }   //  cubicCurveTo()
2976
2977    /**
2978     *  Creates an instance of the
2979     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
2980     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
2981     *  that uses absolute coordinates.
2982     *
2983     *  @param  x2   The x coordinate for the second control point
2984     *  @param  y2   The y coordinate for the second control point
2985     *  @param  x   The x coordinate for the end point of the line.
2986     *  @param  y   The y coordinate for the end point of the line.
2987     *  @return The new path element.
2988     */
2989    @API( status = STABLE, since = "0.0.5" )
2990    public static final SVGPathElement cubicCurveToAbs( final double x2, final double y2, final double x, final double y )
2991    {
2992        final var retValue = new SVGCubicCurveTo( true, x2, y2, x, y );
2993
2994        //---* Done *----------------------------------------------------------
2995        return retValue;
2996    }   //  cubicCurveToAbs()
2997
2998    /**
2999     *  Creates an instance of the
3000     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3001     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
3002     *  that uses absolute coordinates.
3003     *
3004     *  @param  x1   The x coordinate for the first control point.
3005     *  @param  y1   The y coordinate for the first control point.
3006     *  @param  x2   The x coordinate for the second control point
3007     *  @param  y2   The y coordinate for the second control point
3008     *  @param  x   The x coordinate for the end point of the line.
3009     *  @param  y   The y coordinate for the end point of the line.
3010     *  @return The new path element.
3011     */
3012    @SuppressWarnings( "MethodWithTooManyParameters" )
3013    @API( status = STABLE, since = "0.0.5" )
3014    public static final SVGPathElement cubicCurveToAbs( final double x1, final double y1, final double x2, final double y2, final double x, final double y )
3015    {
3016        final var retValue = new SVGCubicCurveTo( true, x1, y1, x2, y2, x, y );
3017
3018        //---* Done *----------------------------------------------------------
3019        return retValue;
3020    }   //  cubicCurveToAbs()
3021
3022    /**
3023     *  Creates an instance of the
3024     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3025     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
3026     *  that uses absolute coordinates.
3027     *
3028     *  @param  x2   The x coordinate for the second control point
3029     *  @param  y2   The y coordinate for the second control point
3030     *  @param  x   The x coordinate for the end point of the line.
3031     *  @param  y   The y coordinate for the end point of the line.
3032     *  @return The new path element.
3033     */
3034    @API( status = STABLE, since = "0.0.5" )
3035    public static final SVGPathElement cubicCurveToAbs( final long x2, final long y2, final long x, final long y )
3036    {
3037        final var retValue = new SVGCubicCurveTo( true, x2, y2, x, y );
3038
3039        //---* Done *----------------------------------------------------------
3040        return retValue;
3041    }   //  cubicCurveToAbs()
3042
3043    /**
3044     *  Creates an instance of the
3045     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3046     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGCubicCurveTo}
3047     *  that uses absolute coordinates.
3048     *
3049     *  @param  x1   The x coordinate for the first control point.
3050     *  @param  y1   The y coordinate for the first control point.
3051     *  @param  x2   The x coordinate for the second control point
3052     *  @param  y2   The y coordinate for the second control point
3053     *  @param  x   The x coordinate for the end point of the line.
3054     *  @param  y   The y coordinate for the end point of the line.
3055     *  @return The new path element.
3056     */
3057    @SuppressWarnings( "MethodWithTooManyParameters" )
3058    @API( status = STABLE, since = "0.0.5" )
3059    public static final SVGPathElement cubicCurveToAbs( final long x1, final long y1, final long x2, final long y2, final long x, final long y )
3060    {
3061        final var retValue = new SVGCubicCurveTo( true, x1, y1, x2, y2, x, y );
3062
3063        //---* Done *----------------------------------------------------------
3064        return retValue;
3065    }   //  cubicCurveToAbs()
3066
3067    /**
3068     *  Creates an instance of
3069     *  {@link SVGDegree}
3070     *  with the given numeric type.
3071     *
3072     *  @param  value   The type.
3073     *  @return The new {@code SVGNumber} instance.
3074     */
3075    @API( status = STABLE, since = "0.0.5" )
3076    public static final SVGDegree degree( final double value ) { return new SVGDegree( value ); }
3077
3078    /**
3079     *  Creates an instance of
3080     *  {@link SVGDegree}
3081     *  with the given numeric type.
3082     *
3083     *  @param  value   The type.
3084     *  @return The new {@code SVGNumber} instance.
3085     */
3086    @API( status = STABLE, since = "0.0.5" )
3087    public static final SVGDegree degree( final long value ) { return new SVGDegree( value ); }
3088
3089    /**
3090     *  Creates an instance of
3091     *  {@link SVGNumber}
3092     *  with the given numeric type and with the unit
3093     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#EM}.
3094     *
3095     *  @param  value   The type.
3096     *  @return The new {@code SVGNumber} instance.
3097     */
3098    @API( status = STABLE, since = "0.0.5" )
3099    public static final SVGNumber em( final double value ) { return new SVGNumber( value, EM ); }
3100
3101    /**
3102     *  Creates an instance of
3103     *  {@link SVGNumber}
3104     *  with the given numeric type and with the unit
3105     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#EM}.
3106     *
3107     *  @param  value   The type.
3108     *  @return The new {@code SVGNumber} instance.
3109     */
3110    @API( status = STABLE, since = "0.0.5" )
3111    public static final SVGNumber em( final long value ) { return new SVGNumber( value, EM ); }
3112
3113    /**
3114     *  Creates an instance of
3115     *  {@link SVGNumber}
3116     *  with the given numeric type and with the unit
3117     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#EX}.
3118     *
3119     *  @param  value   The type.
3120     *  @return The new {@code SVGNumber} instance.
3121     */
3122    @API( status = STABLE, since = "0.0.5" )
3123    public static final SVGNumber ex( final double value ) { return new SVGNumber( value, EX ); }
3124
3125    /**
3126     *  Creates an instance of
3127     *  {@link SVGNumber}
3128     *  with the given numeric type and with the unit
3129     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#EX}.
3130     *
3131     *  @param  value   The type.
3132     *  @return The new {@code SVGNumber} instance.
3133     */
3134    @API( status = STABLE, since = "0.0.5" )
3135    public static final SVGNumber ex( final long value ) { return new SVGNumber( value, EX ); }
3136
3137    /**
3138     *  Creates an instance of the
3139     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3140     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3141     *  that uses relative coordinates.
3142     *
3143     *  @param  x   The x coordinate for the end point of the line.
3144     *  @return The new path element.
3145     */
3146    @API( status = STABLE, since = "0.0.5" )
3147    public static final SVGPathElement hLineTo( final double x )
3148    {
3149        final var retValue = new SVGHLineTo( false, x );
3150
3151        //---* Done *----------------------------------------------------------
3152        return retValue;
3153    }   //  hLineTo()
3154
3155    /**
3156     *  Creates an instance of the
3157     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3158     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3159     *  that uses relative coordinates.
3160     *
3161     *  @param  x   The x coordinate for the end point of the line.
3162     *  @return The new path element.
3163     */
3164    @API( status = STABLE, since = "0.0.5" )
3165    public static final SVGPathElement hLineTo( final long x )
3166    {
3167        final var retValue = new SVGHLineTo( false, x );
3168
3169        //---* Done *----------------------------------------------------------
3170        return retValue;
3171    }   //  hLineTo()
3172
3173    /**
3174     *  Creates an instance of the
3175     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3176     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3177     *  that uses absolute coordinates.
3178     *
3179     *  @param  x   The x coordinate for the end point of the line.
3180     *  @return The new path element.
3181     */
3182    @API( status = STABLE, since = "0.0.5" )
3183    public static final SVGPathElement hLineToAbs( final double x )
3184    {
3185        final var retValue = new SVGHLineTo( true, x );
3186
3187        //---* Done *----------------------------------------------------------
3188        return retValue;
3189    }   //  hLineToAbs()
3190
3191    /**
3192     *  Creates an instance of the
3193     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3194     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3195     *  that uses absolute coordinates.
3196     *
3197     *  @param  x   The x coordinate for the end point of the line.
3198     *  @return The new path element.
3199     */
3200    @API( status = STABLE, since = "0.0.5" )
3201    public static final SVGPathElement hLineToAbs( final long x )
3202    {
3203        final var retValue = new SVGHLineTo( true, x );
3204
3205        //---* Done *----------------------------------------------------------
3206        return retValue;
3207    }   //  hLineToAbs()
3208
3209    /**
3210     *  Creates an instance of
3211     *  {@link SVGNumber}
3212     *  with the given numeric type and with the unit
3213     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#INCH}.
3214     *
3215     *  @param  value   The type.
3216     *  @return The new {@code SVGNumber} instance.
3217     */
3218    @API( status = STABLE, since = "0.0.5" )
3219    public static final SVGNumber inch( final double value ) { return new SVGNumber( value, INCH ); }
3220
3221    /**
3222     *  Creates an instance of
3223     *  {@link SVGNumber}
3224     *  with the given numeric type and with the unit
3225     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#INCH}.
3226     *
3227     *  @param  value   The type.
3228     *  @return The new {@code SVGNumber} instance.
3229     */
3230    @API( status = STABLE, since = "0.0.5" )
3231    public static final SVGNumber inch( final long value ) { return new SVGNumber( value, INCH ); }
3232
3233    /**
3234     *  Creates an instance of the
3235     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3236     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGLineTo}
3237     *  that uses relative coordinates.
3238     *
3239     *  @param  x   The x coordinate for the end point of the line.
3240     *  @param  y   The y coordinate for the end point of the line.
3241     *  @return The new path element.
3242     */
3243    @API( status = STABLE, since = "0.0.5" )
3244    public static final SVGPathElement lineTo( final double x, final double y )
3245    {
3246        final var retValue = new SVGLineTo( false, x, y );
3247
3248        //---* Done *----------------------------------------------------------
3249        return retValue;
3250    }   //  lineTo()
3251
3252    /**
3253     *  Creates an instance of the
3254     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3255     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGLineTo}
3256     *  that uses relative coordinates.
3257     *
3258     *  @param  x   The x coordinate for the end point of the line.
3259     *  @param  y   The y coordinate for the end point of the line.
3260     *  @return The new path element.
3261     */
3262    @API( status = STABLE, since = "0.0.5" )
3263    public static final SVGPathElement lineTo( final long x, final long y )
3264    {
3265        final var retValue = new SVGLineTo( false, x, y );
3266
3267        //---* Done *----------------------------------------------------------
3268        return retValue;
3269    }   //  lineTo()
3270
3271    /**
3272     *  Creates an instance of the
3273     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3274     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGLineTo}
3275     *  that uses absolute coordinates.
3276     *
3277     *  @param  x   The x coordinate for the end point of the line.
3278     *  @param  y   The y coordinate for the end point of the line.
3279     *  @return The new path element.
3280     */
3281    @API( status = STABLE, since = "0.0.5" )
3282    public static final SVGPathElement lineToAbs( final double x, final double y )
3283    {
3284        final var retValue = new SVGLineTo( true, x, y );
3285
3286        //---* Done *----------------------------------------------------------
3287        return retValue;
3288    }   //  lineToAbs()
3289
3290    /**
3291     *  Creates an instance of the
3292     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3293     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGLineTo}
3294     *  that uses absolute coordinates.
3295     *
3296     *  @param  x   The x coordinate for the end point of the line.
3297     *  @param  y   The y coordinate for the end point of the line.
3298     *  @return The new path element.
3299     */
3300    @API( status = STABLE, since = "0.0.5" )
3301    public static final SVGPathElement lineToAbs( final long x, final long y )
3302    {
3303        final var retValue = new SVGLineTo( true, x, y );
3304
3305        //---* Done *----------------------------------------------------------
3306        return retValue;
3307    }   //  lineToAbs()
3308
3309    /**
3310     *  Creates an instance of
3311     *  {@link SVGMatrix}.
3312     *
3313     *  @param  a   Parameter {@code a}.
3314     *  @param  b   Parameter {@code b}.
3315     *  @param  c   Parameter {@code c}.
3316     *  @param  d   Parameter {@code d}.
3317     *  @param  e   Parameter {@code e}.
3318     *  @param  f   Parameter {@code f}.
3319     *  @return The {@code matrix} transform.
3320     */
3321    @SuppressWarnings( {"MethodWithTooManyParameters", "StandardVariableNames"} )
3322    @API( status = STABLE, since = "0.0.5" )
3323    public static final SVGMatrix matrix( final long a, final long b, final long c, final long d, final long e, final long f )
3324    {
3325        return new SVGMatrix( a, b, c, d, e, f );
3326    }   //  matrix()
3327
3328    /**
3329     *  Creates an instance of
3330     *  {@link SVGMatrix}.
3331     *
3332     *  @param  a   Parameter {@code a}.
3333     *  @param  b   Parameter {@code b}.
3334     *  @param  c   Parameter {@code c}.
3335     *  @param  d   Parameter {@code d}.
3336     *  @param  e   Parameter {@code e}.
3337     *  @param  f   Parameter {@code f}.
3338     *  @return The {@code matrix} transform.
3339     */
3340    @SuppressWarnings( {"MethodWithTooManyParameters", "StandardVariableNames"} )
3341    @API( status = STABLE, since = "0.0.5" )
3342    public static final SVGMatrix matrix( final double a, final double b, final double c, final double d, final double e, final double f )
3343    {
3344        return new SVGMatrix( a, b, c, d, e, f );
3345    }   //  matrix()
3346
3347    /**
3348     *  Creates an instance of
3349     *  {@link SVGMillimeter}
3350     *  with the given numeric type.
3351     *
3352     *  @param  value   The type.
3353     *  @return The new {@code SVGNumber} instance.
3354     */
3355    @API( status = STABLE, since = "0.0.5" )
3356    public static final SVGMillimeter millimeter( final double value ) { return new SVGMillimeter( value ); }
3357
3358    /**
3359     *  Creates an instance of
3360     *  {@link SVGMillimeter}
3361     *  with the given numeric type.
3362     *
3363     *  @param  value   The type.
3364     *  @return The new {@code SVGNumber} instance.
3365     */
3366    @API( status = STABLE, since = "0.0.5" )
3367    public static final SVGMillimeter millimeter( final long value ) { return new SVGMillimeter( value ); }
3368
3369    /**
3370     *  Creates an instance of the
3371     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3372     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGMoveTo}
3373     *  that uses relative coordinates.
3374     *
3375     *  @param  x   The x coordinate.
3376     *  @param  y   The y coordinate.
3377     *  @return The new path element.
3378     */
3379    @API( status = STABLE, since = "0.0.5" )
3380    public static final SVGPathElement moveTo( final double x, final double y )
3381    {
3382        final var retValue = new SVGMoveTo( false, x, y );
3383
3384        //---* Done *----------------------------------------------------------
3385        return retValue;
3386    }   //  moveTo()
3387
3388    /**
3389     *  Creates an instance of the
3390     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3391     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGMoveTo}
3392     *  that uses relative coordinates.
3393     *
3394     *  @param  x   The x coordinate.
3395     *  @param  y   The y coordinate.
3396     *  @return The new path element.
3397     */
3398    @API( status = STABLE, since = "0.0.5" )
3399    public static final SVGPathElement moveTo( final long x, final long y )
3400    {
3401        final var retValue = new SVGMoveTo( false, x, y );
3402
3403        //---* Done *----------------------------------------------------------
3404        return retValue;
3405    }   //  moveTo()
3406
3407    /**
3408     *  Creates an instance of the
3409     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3410     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGMoveTo}
3411     *  that uses absolute coordinates.
3412     *
3413     *  @param  x   The x coordinate.
3414     *  @param  y   The y coordinate.
3415     *  @return The new path element.
3416     */
3417    @API( status = STABLE, since = "0.0.5" )
3418    public static final SVGPathElement moveToAbs( final double x, final double y )
3419    {
3420        final var retValue = new SVGMoveTo( true, x, y );
3421
3422        //---* Done *----------------------------------------------------------
3423        return retValue;
3424    }   //  moveToAbs()
3425
3426    /**
3427     *  Creates an instance of the
3428     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3429     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGMoveTo}
3430     *  that uses absolute coordinates.
3431     *
3432     *  @param  x   The x coordinate.
3433     *  @param  y   The y coordinate.
3434     *  @return The new path element.
3435     */
3436    @API( status = STABLE, since = "0.0.5" )
3437    public static final SVGPathElement moveToAbs( final long x, final long y )
3438    {
3439        final var retValue = new SVGMoveTo( true, x, y );
3440
3441        //---* Done *----------------------------------------------------------
3442        return retValue;
3443    }   //  moveToAbs()
3444
3445    /**
3446     *  Creates an instance of
3447     *  {@link SVGUserUnitValue}
3448     *  with the given numeric type.
3449     *
3450     *  @param  value   The type.
3451     *  @return The new {@code SVGNumber} instance.
3452     */
3453    @API( status = STABLE, since = "0.0.5" )
3454    public static final SVGUserUnitValue number( final double value ) { return new SVGUserUnitValue( value ); }
3455
3456    /**
3457     *  Creates an instance of
3458     *  {@link SVGUserUnitValue}
3459     *  with the given numeric type.
3460     *
3461     *  @param  value   The type.
3462     *  @return The new {@code SVGNumber} instance.
3463     */
3464    @API( status = STABLE, since = "0.0.5" )
3465    public static final SVGUserUnitValue number( final long value ) { return new SVGUserUnitValue( value ); }
3466
3467    /**
3468     *  Creates an array of
3469     *  {@link SVGNumber}
3470     *  instances.
3471     *
3472     *  @param  values  The values.
3473     *  @return The {@code SVGNumber} array.
3474     */
3475    @API( status = STABLE, since = "0.0.5" )
3476    @SuppressWarnings( "UseOfConcreteClass" )
3477    public static final SVGNumber [] numbers( final SVGNumber... values ) { return requireNonNullArgument( values, "values" ); }
3478
3479    /**
3480     *  Creates a
3481     *  {@link List}
3482     *  of
3483     *  {@link SVGNumber}
3484     *  instances.<br>
3485     *  <br>The list is <i>not</i> immutable!
3486     *
3487     *  @param  values  The values.
3488     *  @return The {@code SVGNumber} list.
3489     */
3490    @API( status = STABLE, since = "0.0.5" )
3491    @SuppressWarnings( "UseOfConcreteClass" )
3492    public static final List<SVGNumber> numberList( final SVGNumber... values ) { return new ArrayList<>( asList( requireNonNullArgument( values, "values" ) ) ); }
3493
3494    /**
3495     *  Creates an instance of
3496     *  {@link SVGPercent}
3497     *  with the given numeric type.
3498     *
3499     *  @param  value   The type.
3500     *  @return The new {@code SVGNumber} instance.
3501     */
3502    @API( status = STABLE, since = "0.0.5" )
3503    public static final SVGPercent percent( final double value ) { return new SVGPercent( value ); }
3504
3505    /**
3506     *  Creates an instance of
3507     *  {@link SVGPercent}
3508     *  with the given numeric type.
3509     *
3510     *  @param  value   The type.
3511     *  @return The new {@code SVGNumber} instance.
3512     */
3513    @API( status = STABLE, since = "0.0.5" )
3514    public static final SVGPercent percent( final long value ) { return new SVGPercent( value ); }
3515
3516    /**
3517     *  Creates an instance of
3518     *  {@link SVGNumber}
3519     *  with the given numeric type and with the unit
3520     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#PICA}.
3521     *
3522     *  @param  value   The type.
3523     *  @return The new {@code SVGNumber} instance.
3524     */
3525    @API( status = STABLE, since = "0.0.5" )
3526    public static final SVGNumber pica( final double value ) { return new SVGNumber( value, PICA ); }
3527
3528    /**
3529     *  Creates an instance of
3530     *  {@link SVGNumber}
3531     *  with the given numeric type and with the unit
3532     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#PICA}.
3533     *
3534     *  @param  value   The type.
3535     *  @return The new {@code SVGNumber} instance.
3536     */
3537    @API( status = STABLE, since = "0.0.5" )
3538    public static final SVGNumber pica( final long value ) { return new SVGNumber( value, PICA ); }
3539
3540    /**
3541     *  Creates an instance of
3542     *  {@link SVGPixel}
3543     *  with the given numeric type.
3544     *
3545     *  @param  value   The type.
3546     *  @return The new {@code SVGNumber} instance.
3547     */
3548    @API( status = STABLE, since = "0.0.5" )
3549    public static final SVGPixel pixel( final double value ) { return new SVGPixel( value ); }
3550
3551    /**
3552     *  Creates an instance of
3553     *  {@link SVGPixel}
3554     *  with the given numeric type.
3555     *
3556     *  @param  value   The type.
3557     *  @return The new {@code SVGNumber} instance.
3558     */
3559    @API( status = STABLE, since = "0.0.5" )
3560    public static final SVGPixel pixel( final long value ) { return new SVGPixel( value ); }
3561
3562    /**
3563     *  Creates an instance of
3564     *  {@link SVGNumber}
3565     *  with the given numeric type and with the unit
3566     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#POINT}.
3567     *
3568     *  @param  value   The type.
3569     *  @return The new {@code SVGNumber} instance.
3570     */
3571    @API( status = STABLE, since = "0.0.5" )
3572    public static final SVGNumber point( final double value ) { return new SVGNumber( value, POINT ); }
3573
3574    /**
3575     *  Creates an instance of
3576     *  {@link SVGNumber}
3577     *  with the given numeric type and with the unit
3578     *  {@link org.tquadrat.foundation.svg.type.SVGUnit#POINT}.
3579     *
3580     *  @param  value   The type.
3581     *  @return The new {@code SVGNumber} instance.
3582     */
3583    @API( status = STABLE, since = "0.0.5" )
3584    public static final SVGNumber point( final long value ) { return new SVGNumber( value, POINT ); }
3585
3586    /**
3587     *  Creates an instance of the
3588     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3589     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3590     *  that uses relative coordinates.
3591     *
3592     *  @param  x   The x coordinate for the end point of the line.
3593     *  @param  y   The y coordinate for the end point of the line.
3594     *  @return The new path element.
3595     */
3596    @API( status = STABLE, since = "0.0.5" )
3597    public static final SVGPathElement quadraticCurveTo( final double x, final double y )
3598    {
3599        final var retValue = new SVGQuadraticCurveTo( false, x, y );
3600
3601        //---* Done *----------------------------------------------------------
3602        return retValue;
3603    }   //  quadraticCurveTo()
3604
3605    /**
3606     *  Creates an instance of the
3607     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3608     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3609     *  that uses relative coordinates.
3610     *
3611     *  @param  x1   The x coordinate for the control point.
3612     *  @param  y1   The y coordinate for the control point.
3613     *  @param  x   The x coordinate for the end point of the line.
3614     *  @param  y   The y coordinate for the end point of the line.
3615     *  @return The new path element.
3616     */
3617    @API( status = STABLE, since = "0.0.5" )
3618    public static final SVGPathElement quadraticCurveTo( final double x1, final double y1, final double x, final double y )
3619    {
3620        final var retValue = new SVGQuadraticCurveTo( false, x1, y1, x, y );
3621
3622        //---* Done *----------------------------------------------------------
3623        return retValue;
3624    }   //  quadraticCurveTo()
3625
3626    /**
3627     *  Creates an instance of the
3628     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3629     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3630     *  that uses relative coordinates.
3631     *
3632     *  @param  x   The x coordinate for the end point of the line.
3633     *  @param  y   The y coordinate for the end point of the line.
3634     *  @return The new path element.
3635     */
3636    @API( status = STABLE, since = "0.0.5" )
3637    public static final SVGPathElement quadraticCurveTo( final long x, final long y )
3638    {
3639        final var retValue = new SVGQuadraticCurveTo( false, x, y );
3640
3641        //---* Done *----------------------------------------------------------
3642        return retValue;
3643    }   //  quadraticCurveTo()
3644
3645    /**
3646     *  Creates an instance of the
3647     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3648     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3649     *  that uses relative coordinates.
3650     *
3651     *  @param  x1   The x coordinate for the control point.
3652     *  @param  y1   The y coordinate for the control point.
3653     *  @param  x   The x coordinate for the end point of the line.
3654     *  @param  y   The y coordinate for the end point of the line.
3655     *  @return The new path element.
3656     */
3657    @API( status = STABLE, since = "0.0.5" )
3658    public static final SVGPathElement quadraticCurveTo( final long x1, final long y1, final long x, final long y )
3659    {
3660        final var retValue = new SVGQuadraticCurveTo( false, x1, y1, x, y );
3661
3662        //---* Done *----------------------------------------------------------
3663        return retValue;
3664    }   //  quadraticCurveTo()
3665
3666    /**
3667     *  Creates an instance of the
3668     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3669     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3670     *  that uses absolute coordinates.
3671     *
3672     *  @param  x   The x coordinate for the end point of the line.
3673     *  @param  y   The y coordinate for the end point of the line.
3674     *  @return The new path element.
3675     */
3676    @API( status = STABLE, since = "0.0.5" )
3677    public static final SVGPathElement quadraticCurveToAbs( final double x, final double y )
3678    {
3679        final var retValue = new SVGQuadraticCurveTo( true, x, y );
3680
3681        //---* Done *----------------------------------------------------------
3682        return retValue;
3683    }   //  quadraticCurveToAbs()
3684
3685    /**
3686     *  Creates an instance of the
3687     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3688     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3689     *  that uses absolute coordinates.
3690     *
3691     *  @param  x1   The x coordinate for the control point.
3692     *  @param  y1   The y coordinate for the control point.
3693     *  @param  x   The x coordinate for the end point of the line.
3694     *  @param  y   The y coordinate for the end point of the line.
3695     *  @return The new path element.
3696     */
3697    @API( status = STABLE, since = "0.0.5" )
3698    public static final SVGPathElement quadraticCurveToAbs( final double x1, final double y1, final double x, final double y )
3699    {
3700        final var retValue = new SVGQuadraticCurveTo( true, x1, y1, x, y );
3701
3702        //---* Done *----------------------------------------------------------
3703        return retValue;
3704    }   //  quadraticCurveToAbs()
3705
3706    /**
3707     *  Creates an instance of the
3708     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3709     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3710     *  that uses absolute coordinates.
3711     *
3712     *  @param  x   The x coordinate for the end point of the line.
3713     *  @param  y   The y coordinate for the end point of the line.
3714     *  @return The new path element.
3715     */
3716    @API( status = STABLE, since = "0.0.5" )
3717    public static final SVGPathElement quadraticCurveToAbs( final long x, final long y )
3718    {
3719        final var retValue = new SVGQuadraticCurveTo( true, x, y );
3720
3721        //---* Done *----------------------------------------------------------
3722        return retValue;
3723    }   //  quadraticCurveToAbs()
3724
3725    /**
3726     *  Creates an instance of the
3727     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3728     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGQuadraticCurveTo}
3729     *  that uses absolute coordinates.
3730     *
3731     *  @param  x1   The x coordinate for the control point.
3732     *  @param  y1   The y coordinate for the control point.
3733     *  @param  x   The x coordinate for the end point of the line.
3734     *  @param  y   The y coordinate for the end point of the line.
3735     *  @return The new path element.
3736     */
3737    @API( status = STABLE, since = "0.0.5" )
3738    public static final SVGPathElement quadraticCurveToAbs( final long x1, final long y1, final long x, final long y )
3739    {
3740        final var retValue = new SVGQuadraticCurveTo( true, x1, y1, x, y );
3741
3742        //---* Done *----------------------------------------------------------
3743        return retValue;
3744    }   //  quadraticCurveToAbs()
3745
3746    /**
3747     *  Creates an instance of
3748     *  {@link SVGRotate}.
3749     *
3750     *  @param  a   The rotation angle.
3751     *  @return The {@code rotate} transformation.
3752     */
3753    @API( status = STABLE, since = "0.0.5" )
3754    public static final SVGRotate rotate( final long a ) { return new SVGRotate( a ); }
3755
3756    /**
3757     *  Creates an instance of
3758     *  {@link SVGRotate}.
3759     *
3760     *  @param  a   The rotation angle.
3761     *  @return The {@code rotate} transformation.
3762     */
3763    @API( status = STABLE, since = "0.0.5" )
3764    public static final SVGRotate rotate( final double a ) { return new SVGRotate( a ); }
3765
3766    /**
3767     *  Creates an instance of
3768     *  {@link SVGRotate}.
3769     *
3770     *  @param  a   The rotation angle.
3771     *  @param  x   The x coordinate of the rotation point.
3772     *  @param  y   The y coordinate of the rotation point.
3773     *  @return The {@code rotate} transformation.
3774     */
3775    @API( status = STABLE, since = "0.0.5" )
3776    public static final SVGRotate rotate( final long a, final long x, final long y ) { return new SVGRotate( a, x, y ); }
3777
3778    /**
3779     *  Creates an instance of
3780     *  {@link SVGRotate}.
3781     *
3782     *  @param  a   The rotation angle.
3783     *  @param  x   The x coordinate of the rotation point.
3784     *  @param  y   The y coordinate of the rotation point.
3785     *  @return The {@code rotate} transformation.
3786     */
3787    @API( status = STABLE, since = "0.0.5" )
3788    public static final SVGRotate rotate( final double a, final double x, final double y ) { return new SVGRotate( a, x, y ); }
3789
3790    /**
3791     *  Creates an instance of
3792     *  {@link SVGScale}.
3793     *  This is equivalent to
3794     *  {@link #scale(long, long) scale( x, x )}.
3795     *
3796     *  @param  x   Parameter {@code x}.
3797     *  @return The {@code scale} transformation.
3798     */
3799    @API( status = STABLE, since = "0.0.5" )
3800    public static final SVGScale scale( final long x ) { return new SVGScale( x ); }
3801
3802    /**
3803     *  Creates an instance of
3804     *  {@link SVGScale}.
3805     *  This is equivalent to
3806     *  {@link #scale(double, double) scale( x, x )}.
3807     *
3808     *  @param  x   Parameter {@code x}.
3809     *  @return The {@code scale} transformation.
3810     */
3811    @API( status = STABLE, since = "0.0.5" )
3812    public static final SVGScale scale( final double x ) { return new SVGScale( x ); }
3813
3814    /**
3815     *  Creates an instance of
3816     *  {@link SVGScale}.
3817     *
3818     *  @param  x   Parameter {@code x}.
3819     *  @param  y   Parameter {@code y}.
3820     *  @return The {@code scale} transformation.
3821     */
3822    @API( status = STABLE, since = "0.0.5" )
3823    public static final SVGScale scale( final long x, final long y ) { return new SVGScale( x, y ); }
3824
3825    /**
3826     *  Creates an instance of
3827     *  {@link SVGScale}.
3828     *
3829     *  @param  x   Parameter {@code x}.
3830     *  @param  y   Parameter {@code y}.
3831     *  @return The {@code scale} transformation.
3832     */
3833    @API( status = STABLE, since = "0.0.5" )
3834    public static final SVGScale scale( final double x, final double y ) { return new SVGScale( x, y ); }
3835
3836    /**
3837     *  Creates an instance of
3838     *  {@link SVGSkewX}.
3839     *
3840     *  @param  a   The angle.
3841     *  @return The {@code skewX} transformation.
3842     */
3843    @API( status = STABLE, since = "0.0.5" )
3844    public static final SVGSkewX skewX( final long a ) { return new SVGSkewX( a ); }
3845
3846    /**
3847     *  Creates an instance of
3848     *  {@link SVGSkewX}.
3849     *
3850     *  @param  a   The angle.
3851     *  @return The {@code skewX} transformation.
3852     */
3853    @API( status = STABLE, since = "0.0.5" )
3854    public static final SVGSkewX skewX( final double a ) { return new SVGSkewX( a ); }
3855
3856    /**
3857     *  Creates an instance of
3858     *  {@link SVGSkewY}.
3859     *
3860     *  @param  a   The angle.
3861     *  @return The {@code skewY} transformation.
3862     */
3863    @API( status = STABLE, since = "0.0.5" )
3864    public static final SVGSkewY skewY( final long a ) { return new SVGSkewY( a ); }
3865
3866    /**
3867     *  Creates an instance of
3868     *  {@link SVGSkewY}.
3869     *
3870     *  @param  a   The angle.
3871     *  @return The {@code skewY} transformation.
3872     */
3873    @API( status = STABLE, since = "0.0.5" )
3874    public static final SVGSkewY skewY( final double a ) { return new SVGSkewY( a ); }
3875
3876    /**
3877     *  Creates an instance of
3878     *  {@link SVGTranslate}.
3879     *
3880     *  @param  x   Parameter {@code x}.
3881     *  @return The {@code translate} transformation.
3882     */
3883    @API( status = STABLE, since = "0.0.5" )
3884    public static final SVGTranslate translate( final long x ) { return new SVGTranslate( x ); }
3885
3886    /**
3887     *  Creates an instance of
3888     *  {@link SVGTranslate}.
3889     *
3890     *  @param  x   Parameter {@code x}.
3891     *  @return The {@code translate} transformation.
3892     */
3893    @API( status = STABLE, since = "0.0.5" )
3894    public static final SVGTranslate translate( final double x ) { return new SVGTranslate( x ); }
3895
3896    /**
3897     *  Creates an instance of
3898     *  {@link SVGTranslate}.
3899     *
3900     *  @param  x   Parameter {@code x}.
3901     *  @param  y   Parameter {@code y}.
3902     *  @return The {@code translate} transformation.
3903     */
3904    @API( status = STABLE, since = "0.0.5" )
3905    public static final SVGTranslate translate( final long x, final long y ) { return new SVGTranslate( x, y ); }
3906
3907    /**
3908     *  Creates an instance of
3909     *  {@link SVGTranslate}.
3910     *
3911     *  @param  x   Parameter {@code x}.
3912     *  @param  y   Parameter {@code y}.
3913     *  @return The {@code translate} transformation.
3914     */
3915    @API( status = STABLE, since = "0.0.5" )
3916    public static final SVGTranslate translate( final double x, final double y ) { return new SVGTranslate( x, y ); }
3917
3918    /**
3919     *  Creates an instance of the
3920     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3921     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3922     *  that uses relative coordinates.
3923     *
3924     *  @param  y   The y coordinate for the end point of the line.
3925     *  @return The new path element.
3926     */
3927    @API( status = STABLE, since = "0.0.5" )
3928    public static final SVGPathElement vLineTo( final double y )
3929    {
3930        final var retValue = new SVGVLineTo( false, y );
3931
3932        //---* Done *----------------------------------------------------------
3933        return retValue;
3934    }   //  vLineTo()
3935
3936    /**
3937     *  Creates an instance of the
3938     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3939     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGHLineTo}
3940     *  that uses relative coordinates.
3941     *
3942     *  @param  y   The y coordinate for the end point of the line.
3943     *  @return The new path element.
3944     */
3945    @API( status = STABLE, since = "0.0.5" )
3946    public static final SVGPathElement vLineTo( final long y )
3947    {
3948        final var retValue = new SVGVLineTo( false, y );
3949
3950        //---* Done *----------------------------------------------------------
3951        return retValue;
3952    }   //  vLineTo()
3953
3954    /**
3955     *  Creates an instance of the
3956     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3957     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGVLineTo}
3958     *  that uses absolute coordinates.
3959     *
3960     *  @param  y   The y coordinate for the end point of the line.
3961     *  @return The new path element.
3962     */
3963    @API( status = STABLE, since = "0.0.5" )
3964    public static final SVGPathElement vLineToAbs( final double y )
3965    {
3966        final var retValue = new SVGVLineTo( true, y );
3967
3968        //---* Done *----------------------------------------------------------
3969        return retValue;
3970    }   //  vLineToAbs()
3971
3972    /**
3973     *  Creates an instance of the
3974     *  {@linkplain org.tquadrat.foundation.svg.type.SVGPathElement path element}
3975     *  {@link org.tquadrat.foundation.svg.type.SVGPathElement.SVGVLineTo}
3976     *  that uses absolute coordinates.
3977     *
3978     *  @param  y   The y coordinate for the end point of the line.
3979     *  @return The new path element.
3980     */
3981    @API( status = STABLE, since = "0.0.5" )
3982    public static final SVGPathElement vLineToAbs( final long y )
3983    {
3984        final var retValue = new SVGVLineTo( true, y );
3985
3986        //---* Done *----------------------------------------------------------
3987        return retValue;
3988    }   //  vLineToAbs()
3989}
3990//  class SVGUtils
3991
3992/*
3993 *  End of File
3994 */