summaryrefslogtreecommitdiffstats
path: root/share/extensions/tests/data/svg
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:24:48 +0000
commitcca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch)
tree146f39ded1c938019e1ed42d30923c2ac9e86789 /share/extensions/tests/data/svg
parentInitial commit. (diff)
downloadinkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.tar.xz
inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.zip
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--share/extensions/tests/data/svg/clips_and_masks.svg87
-rw-r--r--share/extensions/tests/data/svg/colors.svg39
-rw-r--r--share/extensions/tests/data/svg/complextransform.test.svg71
-rw-r--r--share/extensions/tests/data/svg/css.svg94
-rw-r--r--share/extensions/tests/data/svg/curves.svg72
-rw-r--r--share/extensions/tests/data/svg/dash.svg40
-rw-r--r--share/extensions/tests/data/svg/dash_zerolength.svg34
-rw-r--r--share/extensions/tests/data/svg/deep-ungroup-complex.svg158
-rw-r--r--share/extensions/tests/data/svg/default-inkscape-SVG.svg37
-rw-r--r--share/extensions/tests/data/svg/default-inkscape-SVG_scoured.svg12
-rw-r--r--share/extensions/tests/data/svg/default-plain-SVG.svg29
-rw-r--r--share/extensions/tests/data/svg/diff.svg281
-rw-r--r--share/extensions/tests/data/svg/doc_ai_conv_m_in.svg24
-rw-r--r--share/extensions/tests/data/svg/doc_ai_conv_mm_in.svg24
-rw-r--r--share/extensions/tests/data/svg/dpiswitcher_96dpi.svg169
-rw-r--r--share/extensions/tests/data/svg/dxf_nested_transforms.svg69
-rw-r--r--share/extensions/tests/data/svg/edge3d.svg31
-rw-r--r--share/extensions/tests/data/svg/ellipse_group_comment.svg21
-rw-r--r--share/extensions/tests/data/svg/embed.svg120
-rw-r--r--share/extensions/tests/data/svg/empty.svg13
-rw-r--r--share/extensions/tests/data/svg/empty_mm.svg14
-rw-r--r--share/extensions/tests/data/svg/empty_multipage.svg90
-rw-r--r--share/extensions/tests/data/svg/extrude.svg129
-rw-r--r--share/extensions/tests/data/svg/font.svg27
-rw-r--r--share/extensions/tests/data/svg/font_layers.svg3
-rw-r--r--share/extensions/tests/data/svg/font_layers_apostrophe.svg12
-rw-r--r--share/extensions/tests/data/svg/gradient_with_mixed_offsets.svg26
-rw-r--r--share/extensions/tests/data/svg/group_interpolate.svg110
-rw-r--r--share/extensions/tests/data/svg/guides.svg233
-rw-r--r--share/extensions/tests/data/svg/guides_millimeter.svg89
-rwxr-xr-xshare/extensions/tests/data/svg/hershey_input.svg1082
-rwxr-xr-xshare/extensions/tests/data/svg/hershey_trivial_input.svg124
-rw-r--r--share/extensions/tests/data/svg/hpgl_multipen.svg43
-rw-r--r--share/extensions/tests/data/svg/images.svg73
-rw-r--r--share/extensions/tests/data/svg/images_multiple.svg31
-rw-r--r--share/extensions/tests/data/svg/img/color_overlay_a.pngbin0 -> 6932 bytes
-rw-r--r--share/extensions/tests/data/svg/img/color_overlay_b.pngbin0 -> 6760 bytes
-rw-r--r--share/extensions/tests/data/svg/img/color_pad_a.pngbin0 -> 3109 bytes
-rw-r--r--share/extensions/tests/data/svg/img/color_pad_b.pngbin0 -> 3109 bytes
-rw-r--r--share/extensions/tests/data/svg/img/color_pad_c.pngbin0 -> 3109 bytes
-rw-r--r--share/extensions/tests/data/svg/img/green.pngbin0 -> 128 bytes
-rw-r--r--share/extensions/tests/data/svg/img/linecap.pngbin0 -> 7361 bytes
-rw-r--r--share/extensions/tests/data/svg/img/subfolder/linecap.pngbin0 -> 7361 bytes
-rw-r--r--share/extensions/tests/data/svg/inkweb-debug.js367
-rw-r--r--share/extensions/tests/data/svg/inkwebjs-move.svg128
-rw-r--r--share/extensions/tests/data/svg/interp_shapes.svg210
-rw-r--r--share/extensions/tests/data/svg/markers.svg55
-rw-r--r--share/extensions/tests/data/svg/mesh.svg240
-rw-r--r--share/extensions/tests/data/svg/minimal-blank-prepare.svg1
-rw-r--r--share/extensions/tests/data/svg/minimal-blank.svg1
-rw-r--r--share/extensions/tests/data/svg/motion_tests.svg73
-rw-r--r--share/extensions/tests/data/svg/multilayered-test.svg156
-rw-r--r--share/extensions/tests/data/svg/multiple_closed_subpaths.svg49
-rw-r--r--share/extensions/tests/data/svg/paths_open_closed.svg67
-rw-r--r--share/extensions/tests/data/svg/pattern_along_path.svg498
-rw-r--r--share/extensions/tests/data/svg/pattern_along_path_clone_transform.svg116
-rw-r--r--share/extensions/tests/data/svg/perspective.svg33
-rw-r--r--share/extensions/tests/data/svg/perspective_groups.svg78
-rw-r--r--share/extensions/tests/data/svg/pixelsnap_simple.svg69
-rw-r--r--share/extensions/tests/data/svg/preserved-transforms.svg59
-rw-r--r--share/extensions/tests/data/svg/restack_grouped.svg215
-rw-r--r--share/extensions/tests/data/svg/rubber-stretch-test.svg66
-rw-r--r--share/extensions/tests/data/svg/scale_not_unity.svg65
-rw-r--r--share/extensions/tests/data/svg/scatter.svg106
-rw-r--r--share/extensions/tests/data/svg/shapes-clipboard.svg288
-rw-r--r--share/extensions/tests/data/svg/shapes.svg284
-rw-r--r--share/extensions/tests/data/svg/shapes_cmyk.svg302
-rw-r--r--share/extensions/tests/data/svg/simple_patterns.svg85
-rw-r--r--share/extensions/tests/data/svg/simpletransform.test.svg8
-rw-r--r--share/extensions/tests/data/svg/single_box.svg62
-rw-r--r--share/extensions/tests/data/svg/slicer.svg75
-rw-r--r--share/extensions/tests/data/svg/style_inheritance.svg75
-rwxr-xr-xshare/extensions/tests/data/svg/styling-css-04-f.svg134
-rwxr-xr-xshare/extensions/tests/data/svg/styling-inherit-01-b.svg59
-rw-r--r--share/extensions/tests/data/svg/symbol.svg46
-rw-r--r--share/extensions/tests/data/svg/text_on_arc.svg19
-rw-r--r--share/extensions/tests/data/svg/text_types.svg256
-rw-r--r--share/extensions/tests/data/svg/three_pages_and_two_grids.svg90
-rw-r--r--share/extensions/tests/data/svg/transformed-layer.svg19
-rw-r--r--share/extensions/tests/data/svg/with-lpe.svg30
80 files changed, 7995 insertions, 0 deletions
diff --git a/share/extensions/tests/data/svg/clips_and_masks.svg b/share/extensions/tests/data/svg/clips_and_masks.svg
new file mode 100644
index 0000000..4beccd4
--- /dev/null
+++ b/share/extensions/tests/data/svg/clips_and_masks.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg13556"
+ inkscape:version="1.1-dev (d1a926bd5e, 2020-11-14)"
+ sodipodi:docname="clips_and_masks.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs13552">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath13846">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 40.565583,169.25411 125.00155,213.98274 95.588201,270.21716 47.572909,191.02479 Z"
+ id="path13848" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath14259">
+ <path
+ id="path14261"
+ style="stroke:#ff00ff;stroke-width:0.264583"
+ d="M 126.20114,40.02528 A 23.801659,23.801659 0 0 1 102.39948,63.826938 23.801659,23.801659 0 0 1 78.597818,40.02528 23.801659,23.801659 0 0 1 102.39948,16.223621 23.801659,23.801659 0 0 1 126.20114,40.02528 Z" />
+ </clipPath>
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask5225">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 104.29088,196.45513 -0.7464,-49.07734 25.25593,28.33562 31.39136,-29.83103 0.79046,50.34807 -5.60361,1.25689 -2.46557,-33.69356 -22.69324,19.90202 -22.05043,-16.72667 z"
+ id="path5227" />
+ </mask>
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask5460">
+ <path
+ id="path5462"
+ style="fill:#ffffff;stroke:#ff00ff;stroke-width:0.264583"
+ inkscape:transform-center-x="2.5828768"
+ inkscape:transform-center-y="0.0811432"
+ d="m 169.64048,220.5459 -8.45374,16.45466 8.7624,16.29237 -18.26165,-2.95521 -12.78723,13.36816 -2.83259,-18.28108 -16.66535,-8.03039 16.51102,-8.34312 2.48748,-18.33121 13.03696,13.12474 z" />
+ </mask>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="367.14286"
+ inkscape:cy="492.85714"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="717"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="path14112"
+ style="stroke-width:0.264583;stroke:#ff00ff"
+ d="M 103.01046,57.276211 A 23.801659,23.801659 0 0 1 79.208801,81.077869 23.801659,23.801659 0 0 1 55.407143,57.276211 23.801659,23.801659 0 0 1 79.208801,33.474552 23.801659,23.801659 0 0 1 103.01046,57.276211 Z"
+ clip-path="url(#clipPath14259)" />
+ <path
+ id="path5331"
+ style="stroke:#ff00ff;stroke-width:0.264583"
+ inkscape:transform-center-x="-1.2994782"
+ inkscape:transform-center-y="-1.3937968"
+ d="m 160.04313,261.88254 -14.88713,-10.98156 -17.48608,6.03804 5.84371,-17.55198 -11.14602,-14.76439 18.49874,0.13383 10.59746,-15.16294 5.58914,17.6347 17.69561,5.39318 -15.04446,10.76501 z"
+ mask="url(#mask5460)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/colors.svg b/share/extensions/tests/data/svg/colors.svg
new file mode 100644
index 0000000..026dc1a
--- /dev/null
+++ b/share/extensions/tests/data/svg/colors.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" height="100" width="300" id="color_svg" version="1.1">
+ <defs id="defs6">
+ <linearGradient id="lg1">
+ <stop id="stop849" offset="0" style="stop-color:#729fcf;stop-opacity:1"/>
+ <stop id="stop851" offset="1" style="stop-color:#3465a4;stop-opacity:1"/>
+ </linearGradient>
+ <linearGradient id="lg2">
+ <stop id="stop841" offset="0" style="stop-color:#75507b;stop-opacity:1"/>
+ <stop id="stop843" offset="1" style="stop-color:#cc0000;stop-opacity:1"/>
+ </linearGradient>
+ <linearGradient id="ColorName" inkscape:swatch="solid">
+ <stop id="stop841" offset="0" style="stop-color:#123456;stop-opacity:1"/>
+ </linearGradient>
+ <linearGradient gradientUnits="userSpaceOnUse" y2="55" x2="235" y1="15" x1="195" id="slg1" xlink:href="#lg2"/>
+ <linearGradient gradientUnits="userSpaceOnUse" y2="15" x2="235" y1="55" x1="195" id="slg2" xlink:href="#lg1"/>
+ <linearGradient gradientUnits="userSpaceOnUse" y2="15" x2="265" y1="55" x1="195" id="slg3" xlink:href="#lg1"/>
+ <linearGradient gradientUnits="userSpaceOnUse" y2="15" x2="265" y1="55" x1="195" id="slg4" xlink:href="#ColorName"/>
+ <style id="style0"><![CDATA[
+#r2 {
+ fill:#3465a4;
+ stroke:#729fcf;
+ stop-color:blue;
+}
+ ]]></style>
+ </defs>
+ <!--Regular shape with style properties-->
+ <rect y="15" x="10" height="40" width="40" id="r1" style="opacity:1;fill:#75507b;fill-opacity:0.9;stroke:#5c3566;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.5;paint-order:markers fill stroke;stop-color:red"/>
+ <!--Regular shape with css styles-->
+ <rect y="15" x="60" height="40" width="40" id="r2" style="opacity:1;fill-opacity:1;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"/>
+ <!--Regular shape with element attributes-->
+ <rect y="15" x="110" height="40" width="40" id="r3" fill="#cc0000" fill-opacity="0.9" stroke="#2e3436" stroke-opacity="0.5" style="opacity:0.81;stroke:#2e3436;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers fill stroke;stop-color:red"/>
+ <!--Regular shape with swatch-->
+ <rect y="15" x="160" height="40" width="40" id="r4" style="opacity:1;fill:url(#slg4);fill-opacity:1;stroke:url(#slg2);stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.5;paint-order:markers fill stroke;stop-color:#000000"/>
+ <!--Regular shape with gradients-->
+ <rect y="15" x="210" height="40" width="40" id="r4" style="opacity:1;fill:url(#slg1);fill-opacity:1;stroke:url(#slg2);stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.5;paint-order:markers fill stroke;stop-color:#000000"/>
+ <!--A copy of the gradient to test url hygiene-->
+ <rect y="15" x="260" height="40" width="40" id="r5" style="opacity:1;fill:url(#slg1);fill-opacity:1;stroke:url(#slg3);stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.5;paint-order:markers fill stroke;stop-color:#000000"/>
+</svg>
diff --git a/share/extensions/tests/data/svg/complextransform.test.svg b/share/extensions/tests/data/svg/complextransform.test.svg
new file mode 100644
index 0000000..478f850
--- /dev/null
+++ b/share/extensions/tests/data/svg/complextransform.test.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ id="mydoc"
+ version="1.1">
+ <defs>
+ <path d="M 0 0 L 10 10 Z" id="path1"/>
+ <pattern patternTransform="scale(2.0, 1.0)"></pattern>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.9494022"
+ inkscape:cx="337.21073"
+ inkscape:cy="650.51398"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="3060"
+ inkscape:window-height="1685"
+ inkscape:window-x="140"
+ inkscape:window-y="41"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g transform="matrix(1.4498514,0,0,1.3641667,-107.03035,-167.3624)" style="fill:#fff;stroke:#d88;" id="A" inkscape:groupmode='layer'>
+ <g transform="rotate(-45.759928,361.64932,382.80575)" style="fill:#eee;joker:url(#path1)" id="B">
+ <!-- This is a comment to test svg.selection.get() -->
+ <g transform="matrix(1,0,0.50642107,1,-193.8609,0)" style="fill:#ddd;" id="C">
+ <path id="D" fill="#C00" opacity="0.2" transform="translate(30,10)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <rect transform="rotate(16.097889)"
+ y="200" x="200" height="100" width="100"
+ style="fill:#0000ff;stroke-width:1px;" id="E"/>
+ <circle cx="100" cy="100" r="50" style="stroke:#f00;" id="F"/>
+ <use xlink:href="#path1" id="G"/>
+ <line x1="0" y1="80" x2="100" y2="20" id="H" />
+ <polyline points="0,100 50,25 50,75 100,0" id="I" />
+ <polygon points="0,100 50,25 50,75 100,0" id="J" />
+ </g>
+ </g>
+ <g id="K" inkscape:label="Key">
+ <g id="L" inkscape:label="Elm">
+ <line x1="5" y1="5" x2="5.5" y2="10" id="M" transform="translate(10, 10);" inkscape:label="Mine" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/css.svg b/share/extensions/tests/data/svg/css.svg
new file mode 100644
index 0000000..824ad65
--- /dev/null
+++ b/share/extensions/tests/data/svg/css.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg0"
+ version="1.1"
+ viewBox="0 0 140 140"
+ height="140mm"
+ width="140mm">
+ <defs
+ id="defs2">
+ <style id="style1">
+/* Not in a CDATA for testing.*/
+#layer1 {
+ stroke: yellow;
+}
+circle {
+ fill: red;
+}
+.two {
+ fill: green;
+}
+#rect3.three {
+ fill: cyan;
+}
+#layer1 .four {
+ fill: grey;
+}
+#rect1 {
+ fill: blue;
+}
+#circle1, #circle2, .two {
+ font: Homie;
+}
+ </style>
+ <style id="style2"></style>
+ <style id="style3"><![CDATA[
+#layer1 {
+ stroke-width: 2px;
+}
+.rule {
+}
+ ]]></style>
+ </defs>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ y="0"
+ x="0"
+ class="one"
+ height="70"
+ width="70"
+ id="rect1"/>
+ <rect
+ id="rect2"
+ class="two"
+ width="70"
+ height="70"
+ x="70"
+ y="0" />
+ <rect
+ y="70"
+ x="0"
+ class="three"
+ height="70"
+ width="70"
+ id="rect3"/>
+ <rect
+ id="rect4"
+ class="four"
+ width="70"
+ height="70"
+ style="stroke: red;"
+ x="70"
+ y="70" />
+ <circle
+ r="35"
+ cy="70"
+ cx="70"
+ id="circle1"/>
+ <circle
+ r="10"
+ cy="20"
+ cx="20"
+ id="circle2"/>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/curves.svg b/share/extensions/tests/data/svg/curves.svg
new file mode 100644
index 0000000..6dc5ad8
--- /dev/null
+++ b/share/extensions/tests/data/svg/curves.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1000"
+ height="1000"
+ viewBox="0 0 1000 1000"
+ version="1.1"
+ id="svg8">
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="base"
+ showgrid="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:zoom="0.73528362"
+ inkscape:cx="-359.63313"
+ inkscape:cy="481.16986"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid27"
+ spacingx="10"
+ spacingy="10"
+ empspacing="10"
+ color="#8080ff"
+ opacity="0.25098039"
+ empcolor="#0000ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <g
+ inkscape:groupmode="layer"
+ id="layer0"
+ inkscape:label="Curves"
+ style="display:inline">
+ <path
+ inkscape:connector-curvature="0"
+ id="quad"
+ d="m 100,502.88647 q 200,-250 400,0 200,250 400,0"
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10" />
+ <path
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:7.35712767;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill"
+ d="m 417.79599,626.87967 a 128.83041,128.83041 0 0 1 -128.83041,128.83041 128.83041,128.83041 0 0 1 -128.83041,-128.83041 128.83041,128.83041 0 0 1 128.83041,-128.83041 128.83041,128.83041 0 0 1 128.83041,128.83041 z"
+ id="arc"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="curve"
+ d="m 833.96193,373.12033 c 0,71.15107 -57.67934,128.83041 -128.83041,128.83041 -71.15107,0 -128.83041,-57.67934 -128.83041,-128.83041 0,-71.15107 57.67934,-128.83041 128.83041,-128.83041 71.15107,0 128.83041,57.67934 128.83041,128.83041 z"
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:7.35712767;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill"
+ sodipodi:nodetypes="zzzzz" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/dash.svg b/share/extensions/tests/data/svg/dash.svg
new file mode 100644
index 0000000..f131b78
--- /dev/null
+++ b/share/extensions/tests/data/svg/dash.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm">
+ <defs
+ id="defs2" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1">
+ <path
+ id="dashme"
+ d="M 39.817243,184.34654 145.92741,65.030315"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:2.1199999,0.26499999;stroke-dashoffset:0" />
+ <path
+ id="dashme2"
+ transform="translate(10, 10)"
+ d="M 39.817243,184.34654 145.92741,65.030315"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:2 3 4;stroke-dashoffset:0" />
+
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/dash_zerolength.svg b/share/extensions/tests/data/svg/dash_zerolength.svg
new file mode 100644
index 0000000..a1745d0
--- /dev/null
+++ b/share/extensions/tests/data/svg/dash_zerolength.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm">
+ <defs
+ id="defs2" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1">
+ <path
+ id="dashme2"
+ d="M 39.817243,184.34654 145.92741,65.030315"
+ style="stroke:#000000;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:0 4;stroke-dashoffset:0" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/deep-ungroup-complex.svg b/share/extensions/tests/data/svg/deep-ungroup-complex.svg
new file mode 100644
index 0000000..e47c0aa
--- /dev/null
+++ b/share/extensions/tests/data/svg/deep-ungroup-complex.svg
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ sodipodi:docname="deep-ungroup-complex.svg"
+ inkscape:version="1.1-rc (52f87abb86, 2021-05-02)"
+ width="199.15164mm"
+ height="137.38345mm"
+ viewBox="0 0 199.15164 137.38345"
+ version="1.1"
+ id="svg5"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ objecttolerance="10.0"
+ gridtolerance="10.0"
+ guidetolerance="10.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.80087682"
+ inkscape:cx="378.95965"
+ inkscape:cy="546.27627"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ inkscape:window-x="-8"
+ inkscape:window-y="353"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8449">
+ <g
+ id="g8453"
+ transform="rotate(-44.526943,43.216059,143.3012)"
+ style="stroke-width:0.999999">
+ <rect
+ style="fill:#000000;stroke-width:0.399999;stroke-linecap:round;stroke-linejoin:round"
+ id="rect8451"
+ width="50.87653"
+ height="34.358173"
+ x="25.107897"
+ y="146.35262" />
+ </g>
+ </clipPath>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-4.6568704,-3.8897055)">
+ <g
+ id="g1935"
+ clip-path="none"
+ transform="translate(-6.2769744,7.9288098)">
+ <rect
+ style="fill:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round"
+ id="rect31"
+ width="38.322578"
+ height="45.260288"
+ x="30.063406"
+ y="13.214683"
+ clip-path="none" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round"
+ x="3.9644058"
+ y="9.2502775"
+ id="text1236"><tspan
+ sodipodi:role="line"
+ id="tspan1234"
+ style="stroke-width:0.4"
+ x="3.9644058"
+ y="9.2502775">Path with clip-path:none</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round"
+ x="104.61725"
+ y="9.5449238"
+ id="text1236-9"><tspan
+ sodipodi:role="line"
+ id="tspan1234-2"
+ style="stroke-width:0.4"
+ x="104.61725"
+ y="9.5449238">Path with nested transforms</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round"
+ x="8.2027407"
+ y="85.552475"
+ id="text1236-9-4"><tspan
+ sodipodi:role="line"
+ id="tspan1234-2-4"
+ style="stroke-width:0.4"
+ x="8.2027407"
+ y="85.552475">Transformed group with</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.4"
+ x="8.2027407"
+ y="94.371925"
+ id="tspan7203">transformed clip-path</tspan></text>
+ <g
+ id="g6577"
+ transform="matrix(1,-0.73510565,0,1,-14.536151,118.84346)">
+ <g
+ id="g6572"
+ transform="translate(23.125695,-5.6162403)">
+ <g
+ id="g6488"
+ transform="rotate(47.618771,138.09343,46.912127)">
+ <rect
+ style="fill:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round"
+ id="rect6485"
+ width="28.41157"
+ height="33.697441"
+ x="123.88765"
+ y="30.063406" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g115"
+ transform="matrix(1.2423153,0,0,2.1653288,-13.546614,-164.62968)"
+ style="stroke-width:0.609708">
+ <g
+ id="g8054"
+ transform="rotate(25.31275,72.35325,127.55013)"
+ clip-path="url(#clipPath8449)"
+ style="stroke-width:0.609708">
+ <rect
+ style="fill:#000000;stroke-width:0.243883;stroke-linecap:round;stroke-linejoin:round"
+ id="rect7951"
+ width="23.125696"
+ height="23.125696"
+ x="10.902113"
+ y="110.67297" />
+ <rect
+ style="fill:#000000;stroke-width:0.243883;stroke-linecap:round;stroke-linejoin:round"
+ id="rect7953"
+ width="28.741938"
+ height="25.438265"
+ x="24.777531"
+ y="126.20023" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/default-inkscape-SVG.svg b/share/extensions/tests/data/svg/default-inkscape-SVG.svg
new file mode 100644
index 0000000..259e13c
--- /dev/null
+++ b/share/extensions/tests/data/svg/default-inkscape-SVG.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ width="793.7007874"
+ height="1122.519685">
+ <defs />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="375"
+ inkscape:cy="520"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1" />
+ <metadata>
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/default-inkscape-SVG_scoured.svg b/share/extensions/tests/data/svg/default-inkscape-SVG_scoured.svg
new file mode 100644
index 0000000..f46f0b3
--- /dev/null
+++ b/share/extensions/tests/data/svg/default-inkscape-SVG_scoured.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg width="793.7" height="1122.5" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+</svg>
diff --git a/share/extensions/tests/data/svg/default-plain-SVG.svg b/share/extensions/tests/data/svg/default-plain-SVG.svg
new file mode 100644
index 0000000..9c08847
--- /dev/null
+++ b/share/extensions/tests/data/svg/default-plain-SVG.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="793.7007874"
+ height="1122.519685">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/diff.svg b/share/extensions/tests/data/svg/diff.svg
new file mode 100644
index 0000000..cf7f6f3
--- /dev/null
+++ b/share/extensions/tests/data/svg/diff.svg
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1000"
+ height="1000"
+ viewBox="0 0 1000 1000"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="test.svg">
+ <defs
+ id="defs33">
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path859"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(1,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="base"
+ showgrid="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:zoom="0.6675088"
+ inkscape:cx="202.7349"
+ inkscape:cy="481.16986"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="webslicer-layer">
+ <inkscape:grid
+ type="xygrid"
+ id="grid27"
+ spacingx="10"
+ spacingy="10"
+ empspacing="10"
+ color="#8080ff"
+ opacity="0.25098039"
+ empcolor="#0000ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <g
+ inkscape:groupmode="layer"
+ id="webslicer-layer"
+ inkscape:label="Slide3"
+ style="display:inline">
+ <rect
+ height="201.49811"
+ width="248.69112"
+ y="353.92661"
+ x="651.3089"
+ id="slicerect1"
+ style="opacity:0.5;fill:#ff0000;stroke-width:1.11927199">
+ <desc
+ id="desc51">format: png
+dpi: 96
+layout-disposition: bg-el-norepeat
+layout-position-anchor: tl</desc>
+ </rect>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Slide2"
+ style="display:inline">
+ <circle
+ style="display:inline;fill:#000080;stroke:none"
+ id="c1"
+ cx="150"
+ cy="450"
+ r="50"
+ inkscape:label="#path3736" />
+ <ellipse
+ style="display:inline;fill:none;stroke:#ff0000;stroke-width:16"
+ id="c2"
+ cx="400"
+ cy="450"
+ rx="100"
+ ry="50"
+ inkscape:label="#path3738" />
+ <path
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="c3"
+ sodipodi:type="arc"
+ sodipodi:cx="700"
+ sodipodi:cy="450"
+ sodipodi:rx="100"
+ sodipodi:ry="50"
+ sodipodi:start="0.59013865"
+ sodipodi:end="5.6484511"
+ d="m 783.08635,477.82381 a 100,50 0 0 1 -111.09848,20.17442 100,50 0 0 1 -71.96301,-46.88343 100,50 0 0 1 67.71127,-48.44091 100,50 0 0 1 112.7868,17.67793 L 700,450 Z"
+ inkscape:label="#path3740" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10;marker-start:url(#Arrow2Lstart)"
+ d="M 100,600 200,700 300,600 400,700"
+ id="p1"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3746" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10"
+ d="m 500,600 c 0,0 0,100 100,100 100,0 0,-100 100,-100 100,0 100,100 100,100"
+ id="p2"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3748" />
+ <path
+ sodipodi:type="star"
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:10"
+ id="s1"
+ sodipodi:sides="5"
+ sodipodi:cx="189.03001"
+ sodipodi:cy="847.93945"
+ sodipodi:r1="69.364868"
+ sodipodi:r2="34.682434"
+ sodipodi:arg1="0.63598373"
+ sodipodi:arg2="1.2643023"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 244.8332,889.14005 -45.33887,-8.13446 -32.40428,32.73753 -6.27415,-45.63352 -41.14872,-20.70184 41.46124,-20.06861 6.97297,-45.53197 31.89861,33.23044 45.45824,-7.43847 -21.74681,40.60615 z"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137" />
+ <use
+ style="display:inline"
+ x="0"
+ y="0"
+ xlink:href="#s1"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137"
+ id="u1"
+ transform="translate(200,2.9962152)"
+ width="100%"
+ height="100%"
+ inkscape:label="#use3808" />
+ </g>
+ <g
+ inkscape:label="Slide1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="100"
+ y="100"
+ id="t1"
+ inkscape:label="#text12"><tspan
+ sodipodi:role="line"
+ id="tspan10"
+ x="100"
+ y="100">*Hello World*</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="t4"
+ style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ transform="matrix(0.26458333,0,0,0.26458333,372.02961,28.904505)"
+ inkscape:label="#flowRoot14"><flowRegion
+ id="flowRegion16"><rect
+ id="rect18"
+ width="264.5675"
+ height="262.16187"
+ x="105.71429"
+ y="219.66254" /></flowRegion><flowPara
+ id="flowPara20"
+ style="font-size:55.43307114px">flaw tux whatch wryps</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="200"
+ y="100"
+ id="t2"
+ inkscape:label="#text3727"><tspan
+ sodipodi:role="line"
+ id="tspan3725"
+ x="200"
+ y="100"
+ style="font-size:14.66666698px">*PER</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="300"
+ y="100"
+ id="t3"
+ inkscape:label="#text3735"><tspan
+ sodipodi:role="line"
+ id="tspan3733"
+ x="300"
+ y="100"
+ style="font-size:14.66666698px">Multi*</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="118.33334"
+ id="tspan3737"
+ style="font-size:14.66666698px">text</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="136.66667"
+ id="tspan3739"
+ style="font-size:14.66666698px">FOO</tspan></text>
+ <g
+ id="t5"
+ transform="translate(445.71038,-129.64807)"
+ inkscape:label="#g3772">
+ <text
+ id="text3762"
+ y="229.64807"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="229.64807"
+ x="54.289616"
+ id="tspan3760"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">Grouped</tspan></text>
+ <text
+ id="text3766"
+ y="259.64807"
+ x="54.289619"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="259.64807"
+ x="54.289619"
+ z="f"
+ id="tspan3764"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">text</tspan></text>
+ </g>
+ <rect
+ style="fill:#000080;stroke:none"
+ id="r1"
+ width="100"
+ height="110"
+ x="100"
+ y="200"
+ inkscape:label="#rect3732" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:16"
+ id="r2"
+ width="200"
+ height="100"
+ x="300"
+ y="200"
+ inkscape:label="#rect3734" />
+ <rect
+ style="fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="r3"
+ width="200"
+ height="100"
+ x="600"
+ y="200"
+ ry="38.950798"
+ rx="44.943226"
+ inkscape:label="#rect3744" />
+ <rect></rect>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/doc_ai_conv_m_in.svg b/share/extensions/tests/data/svg/doc_ai_conv_m_in.svg
new file mode 100644
index 0000000..f32fbfb
--- /dev/null
+++ b/share/extensions/tests/data/svg/doc_ai_conv_m_in.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="612" height="792" viewBox="0 0 612 792">
+ <g id="Layer_1" data-name="Layer 1">
+ <text transform="translate(91.001 58.0322)" font-size="31.0858" font-family="GoudyBookletter1911">Illustrator Import test document</text>
+ <text transform="translate(44 267.0003)" font-size="18" font-family="GoudyBookletter1911">This document should import as 8.5 x 11 inches. Illustrator uses a fixed<tspan x="0" y="21.6001">resolution of 72 px per inch.</tspan></text>
+ <text transform="translate(52 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 1</text>
+ <g id="Named_Group" data-name="Named Group">
+ <rect x="53.1419" y="329.5352" width="72" height="72" fill="#fff" stroke="#000" stroke-miterlimit="10"/>
+ <rect x="180.9051" y="329.5352" width="72" height="72" fill="#ff0901" stroke="#000" stroke-miterlimit="10"/>
+ <rect x="321.5352" y="329.5352" width="72" height="72" fill="#ff0901"/>
+ <g>
+ <text transform="translate(52 425.333)" font-size="18" font-family="GoudyBookletter1911">Stroke only</text>
+ <text transform="translate(181.9998 425.333)" font-size="18" font-family="GoudyBookletter1911">Fill + stroke</text>
+ <text transform="translate(325.9999 425.333)" font-size="18" font-family="GoudyBookletter1911">Fill only</text>
+ </g>
+ </g>
+ <text transform="translate(448.8995 341.4339)" font-size="12" font-family="GoudyBookletter1911">Three squares, each<tspan x="0" y="14.4004">1 inch (2.54 cm) to a side.</tspan><tspan x="0" y="43.2002">Objects do not change</tspan><tspan x="0" y="57.5996">size when stroke is added.</tspan></text>
+ </g>
+ <g id="Layer_2" data-name="Layer 2">
+ <text transform="translate(192.0011 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 2</text>
+ <g id="Layer_2A" data-name="Layer 2A">
+ <text transform="translate(322.0021 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 2A, a sub-layer<tspan x="0" y="21.5996">of layer 2</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/doc_ai_conv_mm_in.svg b/share/extensions/tests/data/svg/doc_ai_conv_mm_in.svg
new file mode 100644
index 0000000..23b5359
--- /dev/null
+++ b/share/extensions/tests/data/svg/doc_ai_conv_mm_in.svg
@@ -0,0 +1,24 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="215.9mm" height="279.4mm" viewBox="0 0 612 792">
+ <g id="Layer_1" data-name="Layer 1">
+ <text transform="translate(91.001 58.0322)" font-size="31.0858" font-family="GoudyBookletter1911">Illustrator Import test document</text>
+ <text transform="translate(44 267.0003)" font-size="18" font-family="GoudyBookletter1911">This document should import as 8.5 x 11 inches. Illustrator uses a fixed<tspan x="0" y="21.6001">resolution of 72 px per inch.</tspan></text>
+ <text transform="translate(52 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 1</text>
+ <g id="Named_Group" data-name="Named Group">
+ <rect x="53.1419" y="329.5352" width="72" height="72" fill="#fff" stroke="#000" stroke-miterlimit="10"/>
+ <rect x="180.9051" y="329.5352" width="72" height="72" fill="#ff0901" stroke="#000" stroke-miterlimit="10"/>
+ <rect x="321.5352" y="329.5352" width="72" height="72" fill="#ff0901"/>
+ <g>
+ <text transform="translate(52 425.333)" font-size="18" font-family="GoudyBookletter1911">Stroke only</text>
+ <text transform="translate(181.9998 425.333)" font-size="18" font-family="GoudyBookletter1911">Fill + stroke</text>
+ <text transform="translate(325.9999 425.333)" font-size="18" font-family="GoudyBookletter1911">Fill only</text>
+ </g>
+ </g>
+ <text transform="translate(448.8995 341.4339)" font-size="12" font-family="GoudyBookletter1911">Three squares, each<tspan x="0" y="14.4004">1 inch (2.54 cm) to a side.</tspan><tspan x="0" y="43.2002">Objects do not change</tspan><tspan x="0" y="57.5996">size when stroke is added.</tspan></text>
+ </g>
+ <g id="Layer_2" data-name="Layer 2">
+ <text transform="translate(192.0011 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 2</text>
+ <g id="Layer_2A" data-name="Layer 2A">
+ <text transform="translate(322.0021 496.3331)" font-size="18" font-family="GoudyBookletter1911">Text in Layer 2A, a sub-layer<tspan x="0" y="21.5996">of layer 2</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/dpiswitcher_96dpi.svg b/share/extensions/tests/data/svg/dpiswitcher_96dpi.svg
new file mode 100644
index 0000000..c123ded
--- /dev/null
+++ b/share/extensions/tests/data/svg/dpiswitcher_96dpi.svg
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="10in"
+ height="10in"
+ viewBox="0 0 960 960"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.0 (4035a4f, 2020-05-01)"
+ sodipodi:docname="docscale.svg">
+ <metadata
+ id="metadata5813">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1680"
+ inkscape:window-height="1005"
+ id="base"
+ showgrid="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:zoom="0.83020833"
+ inkscape:cx="480"
+ inkscape:cy="480"
+ inkscape:window-x="0"
+ inkscape:window-y="23"
+ inkscape:window-maximized="1"
+ inkscape:document-units="in"
+ inkscape:current-layer="trans_group"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid27"
+ spacingx="96"
+ spacingy="96"
+ empspacing="10"
+ color="#8080ff"
+ opacity="0.25098039"
+ empcolor="#0000ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <defs
+ id="defs5787">
+ <rect
+ id="abs_rect"
+ width="96"
+ height="96" />
+ </defs>
+ <rect
+ id="root_rect_uu"
+ x="192"
+ y="96"
+ width="96"
+ height="96"
+ style="fill:purple;fill-opacity:0.5;stroke:purple;stroke-width:1" />
+ <rect
+ height="25.4mm"
+ width="25.4mm"
+ y="25.4mm"
+ x="76.2mm"
+ id="root_rect_mm"
+ style="opacity:1.0;fill:#00ff00;stroke-width:1;fill-opacity:0.5;" />
+ <rect
+ height="1in"
+ width="1in"
+ y="1in"
+ x="4in"
+ id="root_rect_in"
+ style="opacity:1.0;fill:#ffff00;stroke-width:1;fill-opacity:0.5;" />
+ <g
+ style="stroke:#000000;stroke-opacity:1;stroke-width:2"
+ transform="translate(768, 384) rotate(180)"
+ id="root_group_transform">
+ <rect
+ id="root_group_rect_uu"
+ x="192"
+ y="96"
+ width="96"
+ height="96"
+ style="fill:purple;fill-opacity:0.9;stroke:purple;" />
+ <rect
+ height="25.4mm"
+ width="25.4mm"
+ y="25.4mm"
+ x="76.2mm"
+ id="root_group_rect_mm"
+ style="opacity:1.0;fill:#00ff00;fill-opacity:0.9;" />
+ <rect
+ transform="translate(96,0)"
+ height="1in"
+ width="1in"
+ y="1in"
+ x="4in"
+ id="root_group_rect_in"
+ style="opacity:1.0;fill:#ffff00;fill-opacity:0.9;" />
+ </g>
+ <use
+ style="fill:green;fill-opacity:0.5;stroke:purple;stroke-width:1"
+ xlink:href="#abs_rect"
+ y="288"
+ x="96"
+ id="root_use_1" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer-1"
+ inkscape:label="layer 1"
+ style="display:inline">
+ <g
+ transform="rotate(-45)"
+ id="rot_group2">
+ <g
+ transform="scale(0.5)"
+ id="scale_group2">
+ <g
+ transform="rotate(45)"
+ id="rot_group">
+ <g
+ transform="translate(576, 384)"
+ id="trans_group">
+ <g
+ transform="scale(2)"
+ id="scale_group">
+ <rect
+ id="layer_group_rect_uu2"
+ x="192"
+ y="96"
+ width="96"
+ height="96"
+ style="fill:purple;fill-opacity:0.5;stroke:purple;stroke-width:1" />
+ <path
+ id="layer_group_path"
+ style="opacity:1;fill:#00ff00;fill-opacity:0.5;stroke-width:1"
+ d="m 288,96 h 96 v 96 h -96 z" />
+ <rect
+ height="1in"
+ width="1in"
+ y="1in"
+ x="4in"
+ id="layer_group_rect_in2"
+ style="opacity:1.0;fill:#ffff00;stroke-width:1;fill-opacity:0.5;"
+ transform="translate(96,0)" />
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/dxf_nested_transforms.svg b/share/extensions/tests/data/svg/dxf_nested_transforms.svg
new file mode 100644
index 0000000..4e80043
--- /dev/null
+++ b/share/extensions/tests/data/svg/dxf_nested_transforms.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg13620"
+ sodipodi:docname="preserved-transforms.svg"
+ inkscape:version="1.1-dev (d1a926bd5e, 2020-11-14)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs13616" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="1117.1429"
+ inkscape:cy="358.57143"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="717"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:pagecheckerboard="0" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="group-with-transform"
+ transform="matrix(1.3333333,0,0,-1.3333333,709.41551,251.01244)">
+ <path
+ id="path-in-transform"
+ style="fill:none;stroke:#0000ff;stroke-width:0.5"
+ d="m -452.4092,89.580707 -29.74541,22.500003 v 19.70091 h 25.74477 l 29.7454,-22.49999 V 89.580707 Z"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+ <path
+ id="rect13644"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="m 0,0 h 210 l 0,297 H 0 Z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ id="path13777"
+ style="fill:none;stroke:#008000;stroke-width:15.875"
+ d="M 193.97718,753.03612 H 537.24066 V 1015.715 H 193.97718 Z"
+ transform="matrix(0.1,0,0,0.1,47.145,0)" />
+ <path
+ id="path13779"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="M 19.397718,105.30361 H 53.724066 V 131.5715 H 19.397718 Z"
+ transform="translate(86.80554)" />
+ <path
+ id="path13781"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="M 19.397718,135.30361 H 53.724066 V 161.5715 H 19.397718 Z"
+ transform="rotate(180,102.63955,148.43755)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/edge3d.svg b/share/extensions/tests/data/svg/edge3d.svg
new file mode 100644
index 0000000..cfb8570
--- /dev/null
+++ b/share/extensions/tests/data/svg/edge3d.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg1956"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm">
+ <defs
+ id="defs1950" />
+ <metadata
+ id="metadata1953">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ id="edgeme"
+ d="m 32.902386,76.94136 h 55.408947 v 38.8335 H 32.902386 Z"
+ style="fill:#870000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/ellipse_group_comment.svg b/share/extensions/tests/data/svg/ellipse_group_comment.svg
new file mode 100644
index 0000000..285276f
--- /dev/null
+++ b/share/extensions/tests/data/svg/ellipse_group_comment.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="210mm" height="297mm" viewBox="0 0 210 297" version="1.1" id="svg8" inkscape:version="0.92.1 r15371" sodipodi:docname="ellipse_group.svg">
+ <defs id="defs2"/>
+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.35" inkscape:cx="400" inkscape:cy="560" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false"/>
+ <metadata id="metadata5">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
+ <g id="g13">
+ <ellipse ry="13.607142" rx="35.907738" cy="73.994041" cx="70.681549" id="path10" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+ <!-- drawing style -->
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/share/extensions/tests/data/svg/embed.svg b/share/extensions/tests/data/svg/embed.svg
new file mode 100644
index 0000000..325f19e
--- /dev/null
+++ b/share/extensions/tests/data/svg/embed.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="81.945801mm"
+ height="102.66984mm"
+ viewBox="0 0 81.945801 102.66984"
+ version="1.1"
+ id="svg246"
+ inkscape:version="1.2-alpha1 (b6a15bbbed, 2022-02-23)"
+ sodipodi:docname="embed.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview248"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.7852694"
+ inkscape:cx="8.4020935"
+ inkscape:cy="266.62643"
+ inkscape:window-width="1350"
+ inkscape:window-height="1205"
+ inkscape:window-x="540"
+ inkscape:window-y="156"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs243" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-26.311693,-30.408619)">
+ <image
+ width="22.678572"
+ height="9.4683037"
+ preserveAspectRatio="none"
+ xlink:href="img/linecap.png"
+ id="image612"
+ x="38.45723"
+ y="123.61015" />
+ <image
+ width="22.678572"
+ height="9.4683037"
+ preserveAspectRatio="none"
+ xlink:href="img/linecap.png"
+ id="image612"
+ x="70"
+ y="123.61015" />
+ <image
+ width="22.678572"
+ height="9.4683037"
+ preserveAspectRatio="none"
+ xlink:href="img/subfolder/linecap.png"
+ id="image612"
+ x="95"
+ y="123.61015" />
+ <image
+ preserveAspectRatio="none"
+ inkscape:svg-dpi="96"
+ width="42.227234"
+ height="28.104836"
+ xlink:href="markers.svg"
+ id="image816"
+ x="26.311693"
+ y="30.408619" />
+ <image
+ preserveAspectRatio="none"
+ inkscape:svg-dpi="96"
+ width="42.227234"
+ height="28.104836"
+ xlink:href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8 c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4 bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3Zn PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y Zy8yMDAwL3N2ZyINCiAgIGlkPSJzdmc4OTMiDQogICBoZWlnaHQ9IjEwNi4yMjM0MyINCiAgIHdp ZHRoPSIxNTkuNTk4OTUiDQogICB2ZXJzaW9uPSIxLjEiPg0KICA8ZGVmcw0KICAgICBpZD0iZGVm czQiPg0KICAgIDxtYXJrZXINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAg ICBpZD0iQXJyb3cxTGVuZCINCiAgICAgICByZWZYPSIwIg0KICAgICAgIHJlZlk9IjAiDQogICAg ICAgb3JpZW50PSJhdXRvIj4NCiAgICAgIDxwYXRoDQogICAgICAgICB0cmFuc2Zvcm09Im1hdHJp eCgtMC44LDAsMCwtMC44LC0xMCwwKSINCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7Zmls bC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRo OjFwdDtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgICAgZD0iTSAwLDAgNSwtNSAtMTIuNSwwIDUs NSBaIg0KICAgICAgICAgaWQ9InBhdGgyMTEyIiAvPg0KICAgIDwvbWFya2VyPg0KICAgIDxtYXJr ZXINCiAgICAgICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZSINCiAgICAgICBpZD0iQXJyb3cxTHN0 YXJ0Ig0KICAgICAgIHJlZlg9IjAiDQogICAgICAgcmVmWT0iMCINCiAgICAgICBvcmllbnQ9ImF1 dG8iPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuOCwwLDAsMC44 LDEwLDApIg0KICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxs LXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MXB0O3N0cm9rZS1vcGFj aXR5OjEiDQogICAgICAgICBkPSJNIDAsMCA1LC01IC0xMi41LDAgNSw1IFoiDQogICAgICAgICBp ZD0icGF0aDIxMDkiIC8+DQogICAgPC9tYXJrZXI+DQogIDwvZGVmcz4NCiAgPG1ldGFkYXRhDQog ICAgIGlkPSJtZXRhZGF0YTciPg0KICAgIDxyZGY6UkRGPg0KICAgICAgPGNjOldvcmsNCiAgICAg ICAgIHJkZjphYm91dD0iIj4NCiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpm b3JtYXQ+DQogICAgICAgIDxkYzp0eXBlDQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDov L3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+DQogICAgICAgIDxkYzp0aXRsZT48 L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0 YT4NCiAgPHBhdGgNCiAgICAgaWQ9ImRpbWVuc2lvbiINCiAgICAgZD0iTSAxLjYxODY3MDIsMTA1 LjE0NjEgMTU3Ljk4MDI4LDEuMDc3MzI5OCINCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1 bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS4wMDE1NztzdHJva2UtbGlu ZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9r ZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxO21hcmtlci1zdGFydDp1cmwoI0Fycm93 MUxzdGFydCk7bWFya2VyLWVuZDp1cmwoI0Fycm93MUxlbmQpIiAvPg0KPC9zdmc+DQo= "
+ id="image888"
+ x="66.030258"
+ y="79.908615" />
+ <text
+ xml:space="preserve"
+ style="font-size:10.5833px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.264583"
+ x="34.759296"
+ y="72.498436"
+ id="text206"><tspan
+ sodipodi:role="line"
+ id="tspan204"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Courier New';-inkscape-font-specification:'Courier New';stroke-width:0.264583"
+ x="34.759296"
+ y="72.498436">some</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.5833px;line-height:1.25;font-family:Arial;-inkscape-font-specification:Arial;stroke-width:0.264583;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
+ x="51.506302"
+ y="86.577782"
+ id="text210"><tspan
+ sodipodi:role="line"
+ id="tspan208"
+ style="stroke-width:0.264583;-inkscape-font-specification:Arial;font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
+ x="51.506302"
+ y="86.577782">different</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.5833px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.264583"
+ x="42.31768"
+ y="98.285866"
+ id="text316"><tspan
+ sodipodi:role="line"
+ id="tspan314"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Verdana;-inkscape-font-specification:Verdana;stroke-width:0.264583"
+ x="42.31768"
+ y="98.285866">fonts</tspan></text>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/empty.svg b/share/extensions/tests/data/svg/empty.svg
new file mode 100644
index 0000000..d6c680b
--- /dev/null
+++ b/share/extensions/tests/data/svg/empty.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="793.7007874"
+ height="1122.519685">
+</svg>
diff --git a/share/extensions/tests/data/svg/empty_mm.svg b/share/extensions/tests/data/svg/empty_mm.svg
new file mode 100644
index 0000000..c6c7af8
--- /dev/null
+++ b/share/extensions/tests/data/svg/empty_mm.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="210mm"
+ height="297mm"
+ viewbox="0 0 210 297">
+</svg>
diff --git a/share/extensions/tests/data/svg/empty_multipage.svg b/share/extensions/tests/data/svg/empty_multipage.svg
new file mode 100644
index 0000000..7758938
--- /dev/null
+++ b/share/extensions/tests/data/svg/empty_multipage.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-alpha (0bd5040, 2022-02-05)"
+ sodipodi:docname="drawing.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:blackoutopacity="0.0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.22315867"
+ inkscape:cx="3150.2249"
+ inkscape:cy="522.05007"
+ inkscape:window-width="2488"
+ inkscape:window-height="1376"
+ inkscape:window-x="1992"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ showguides="true">
+ <inkscape:page
+ x="0"
+ y="0"
+ width="210"
+ height="297"
+ id="page1328" />
+ <inkscape:page
+ x="220"
+ y="0"
+ width="210"
+ height="297"
+ id="page1330" />
+ <inkscape:page
+ x="440"
+ y="0"
+ width="210"
+ height="297"
+ id="page1332" />
+ <inkscape:page
+ x="660"
+ y="0"
+ width="210"
+ height="297"
+ id="page1334" />
+ <inkscape:page
+ x="880"
+ y="0"
+ width="210"
+ height="297"
+ id="page1336" />
+ <inkscape:page
+ x="1100"
+ y="0"
+ width="210"
+ height="297"
+ id="page1338" />
+ <inkscape:page
+ x="1399.8914"
+ y="-323.24356"
+ width="210"
+ height="297"
+ id="page1404" />
+ <sodipodi:guide
+ position="210,297"
+ orientation="0.70710678,-0.70710678"
+ id="guide1647" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/extrude.svg b/share/extensions/tests/data/svg/extrude.svg
new file mode 100644
index 0000000..1d1d167
--- /dev/null
+++ b/share/extensions/tests/data/svg/extrude.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="160mm"
+ height="320mm"
+ viewBox="0 0 160 320"
+ version="1.1"
+ id="svg5"
+ sodipodi:docname="testextrude.svg"
+ inkscape:version="1.2-dev (fc41675a, 2022-01-11)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:blackoutopacity="0.0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.45254834"
+ inkscape:cx="285.05242"
+ inkscape:cy="617.61358"
+ inkscape:window-width="1368"
+ inkscape:window-height="850"
+ inkscape:window-x="-6"
+ inkscape:window-y="-6"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ showguides="false" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="5.616528"
+ y="13.446998"
+ id="text6842"><tspan
+ sodipodi:role="line"
+ id="tspan6840"
+ x="5.616528"
+ y="13.446998">Test for extensions#190</tspan></text>
+ <path
+ id="c1"
+ style="fill:#ff0000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ d="m 66.650341,42.387276 a 17.83189,17.83189 0 0 1 -17.83189,17.83189 17.83189,17.83189 0 0 1 -17.83189,-17.83189 17.83189,17.83189 0 0 1 17.83189,-17.83189 17.83189,17.83189 0 0 1 17.83189,17.83189 z" />
+ <path
+ id="c2"
+ style="fill:#ff0000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ d="m 113.38165,79.220363 a 17.247236,17.247236 0 0 1 -17.247237,17.247237 17.247236,17.247236 0 0 1 -17.247235,-17.247237 17.247236,17.247236 0 0 1 17.247235,-17.247236 17.247236,17.247236 0 0 1 17.247237,17.247236 z" />
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="5.616528"
+ y="111.3894"
+ id="text6842-4"><tspan
+ sodipodi:role="line"
+ id="tspan6840-0"
+ x="5.616528"
+ y="111.3894">Test automatic conversion to Path</tspan></text>
+ <rect
+ style="fill:#ff0000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ id="r1"
+ width="21.924454"
+ height="21.924454"
+ x="38.055298"
+ y="122.1923" />
+ <rect
+ style="fill:#ff0000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ id="r2"
+ width="41.510296"
+ height="20.755148"
+ x="76.881752"
+ y="147.33234" />
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="5.616528"
+ y="179.48819"
+ id="text9279"><tspan
+ sodipodi:role="line"
+ x="5.616528"
+ y="179.48819"
+ id="tspan9281">Test on open paths</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px"
+ d="m 24.549574,190.31641 23.970734,21.04748 c 11.031626,-5.21261 25.641908,-9.35161 21.8836,-19.0012 l 24.596244,17.53957 34.202148,-38.51135"
+ id="p1"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px"
+ d="m 34.780985,206.33829 23.970734,21.04748 c 3.858308,-8.75395 2.68132,-21.05438 21.8836,-19.0012 l 24.596241,17.53957 34.20215,-38.51135"
+ id="p2"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="5.616528"
+ y="239.33934"
+ id="text9279-1"><tspan
+ sodipodi:role="line"
+ x="5.616528"
+ y="239.33934"
+ id="tspan9281-5">Test on multiple subpaths and transform</tspan></text>
+ <path
+ id="p3"
+ style="fill:none;stroke:#000000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ inkscape:transform-center-y="-3.3366601e-06"
+ d="m 109.91436,249.06173 -33.032609,4.26538 15.7856,13.27413 z m -74.234328,6.01934 -5.807398,9.47384 5.300967,9.76633 11.108367,0.2925 5.807397,-9.47386 -5.300969,-9.76632 -11.108364,-0.29249 m 79.657738,8.01221 c 0,0 5.49447,10.06393 10.41797,10.58799 6.3902,0.68018 16.11117,-10.58799 16.11117,-10.58799"
+ sodipodi:nodetypes="ccccccccccccsc" />
+ <path
+ id="p4"
+ style="fill:none;stroke:#000000;stroke-width:1.058;stroke-linecap:round;stroke-linejoin:round"
+ inkscape:transform-center-y="-3.3366601e-06"
+ d="m 90.165892,282.20872 -33.032607,4.26538 15.7856,13.27413 z m -50.903866,4.26538 -5.807398,9.47384 5.300967,9.76633 11.108367,0.2925 5.807397,-9.47386 -5.300969,-9.76632 -11.108364,-0.29249 m 46.33257,9.47384 10.417969,10.58799 16.111165,-10.58799"
+ sodipodi:nodetypes="cccccccccccccc"
+ transform="translate(10,-30)scale(1.1)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/font.svg b/share/extensions/tests/data/svg/font.svg
new file mode 100644
index 0000000..cc2b68f
--- /dev/null
+++ b/share/extensions/tests/data/svg/font.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs>
+ <font id="test_font" horiz-adv-x="1200">
+ <font-face units-per-em="1200" ascent="960" descent="-240"/>
+ <missing-glyph horiz-adv-x="500"/>
+ <glyph/>
+ <glyph unicode="A" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z"/>
+ <glyph unicode="B" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z"/>
+ <glyph unicode="C" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z"/>
+ <glyph unicode="D" d="M200 400h900v300h-900v-300z"/>
+ <glyph unicode="E" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z"/>
+ <glyph unicode="F" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z"/>
+ <glyph unicode="G" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z"/>
+ <glyph unicode="H" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z"/>
+ <glyph unicode="I" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z"/>
+ <glyph unicode="J" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z"/>
+ </font>
+ </defs>
+</svg>
diff --git a/share/extensions/tests/data/svg/font_layers.svg b/share/extensions/tests/data/svg/font_layers.svg
new file mode 100644
index 0000000..251e025
--- /dev/null
+++ b/share/extensions/tests/data/svg/font_layers.svg
@@ -0,0 +1,3 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:svg="http://www.w3.org/2000/svg" width="1200">
+<g inkscape:label="GlyphLayer-A" inkscape:groupmode="layer"><path d="M 100 700 L 100 500 L 359 500 l -183 -183 l 141 -141 l 183 183 L 500 100 L 700 100 L 700 359 l 183 -183 l 141 141 l -183 183 L 1100 500 L 1100 700 L 841 700 l 183 183 l -141 141 l -183 -183 L 700 1100 L 500 1100 L 500 841 l -183 183 l -141 -141 l 183 -183 L 100 700 z"/></g><g inkscape:label="GlyphLayer-B" inkscape:groupmode="layer" style="display:none"><path d="M 0 800 L 0 500 L 400 500 L 400 100 L 700 100 L 700 500 L 1100 500 L 1100 800 L 700 800 L 700 1200 L 400 1200 L 400 800 L 0 800 z"/></g><g inkscape:label="GlyphLayer-C" inkscape:groupmode="layer" style="display:none"><path d="M 100 700 l 100 -100 L 313 600 q 0 -47 5 -100 L 100 500 l 100 -100 L 335 400 q 37 -167 112 -257 q 117 -141 297 -141 q 242 0 354 189 q 60 103 66 209 L 983 400 q 0 -55 -25.5 -99 t -63.5 -68 t -75 -36.5 t -67 -12.5 q -24 0 -52.5 10 t -62.5 32 t -65.5 67 t -50.5 107 L 900 400 l -100 100 L 500 500 q -6 46 -6 100 L 900 600 l -100 100 L 500 700 q 9 74 33 132 t 52.5 91 t 62 54.5 t 59 29 t 46.5 7.5 q 29 0 66 -13 t 75 -37 t 63.5 -67.5 t 25.5 -96.5 L 1157 800 q -31 172 -128 278 q -107 117 -274 117 q -205 0 -324 -158 q -36 -46 -69 -131.5 t -45 -205.5 L 100 700 z"/></g></svg>
diff --git a/share/extensions/tests/data/svg/font_layers_apostrophe.svg b/share/extensions/tests/data/svg/font_layers_apostrophe.svg
new file mode 100644
index 0000000..6105214
--- /dev/null
+++ b/share/extensions/tests/data/svg/font_layers_apostrophe.svg
@@ -0,0 +1,12 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:svg="http://www.w3.org/2000/svg" width="1200">
+ <g inkscape:label="GlyphLayer-'" inkscape:groupmode="layer">
+ <path d="M 100 700 L 100 500 L 359 500 l -183 -183 l 141 -141 l 183 183 L 500 100 L 700 100 L 700 359 l 183 -183 l 141 141 l -183 183 L 1100 500 L 1100 700 L 841 700 l 183 183 l -141 141 l -183 -183 L 700 1100 L 500 1100 L 500 841 l -183 183 l -141 -141 l 183 -183 L 100 700 z"/>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/gradient_with_mixed_offsets.svg b/share/extensions/tests/data/svg/gradient_with_mixed_offsets.svg
new file mode 100644
index 0000000..7b322e6
--- /dev/null
+++ b/share/extensions/tests/data/svg/gradient_with_mixed_offsets.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="8cm" height="4cm" viewBox="0 0 800 400" version="1.1"
+ xmlns="http://www.w3.org/2000/svg">
+ <desc>Example radgrad01 - fill a rectangle by referencing a
+ radial gradient paint server</desc>
+ <g>
+ <defs>
+ <radialGradient id="MyGradient" gradientUnits="userSpaceOnUse"
+ cx="400" cy="200" r="300" fx="400" fy="200">
+ <stop offset="0%" stop-color="red" />
+ <stop offset="50" stop-color="blue" />
+ <stop offset="100%" stop-color="red" />
+ </radialGradient>
+ </defs>
+
+ <!-- Outline the drawing area in blue -->
+ <rect fill="none" stroke="blue"
+ x="1" y="1" width="798" height="398"/>
+
+ <!-- The rectangle is filled using a radial gradient paint server -->
+ <rect fill="url(#MyGradient)" stroke="black" stroke-width="5"
+ x="100" y="100" width="600" height="200"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/share/extensions/tests/data/svg/group_interpolate.svg b/share/extensions/tests/data/svg/group_interpolate.svg
new file mode 100644
index 0000000..c3d9f44
--- /dev/null
+++ b/share/extensions/tests/data/svg/group_interpolate.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ width="110mm"
+ height="10mm"
+ viewBox="0 0 110 10"
+ version="1.1"
+ id="svg8">
+ <defs
+ id="defs2" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1">
+ <g
+ id="g53">
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect10"
+ width="10"
+ height="10"
+ x="-3.5527137e-15"
+ y="0" />
+ <rect
+ y="0"
+ x="10"
+ height="10"
+ width="10"
+ id="rect12"
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986" />
+ <rect
+ y="0"
+ x="20"
+ height="10"
+ width="10"
+ id="rect14"
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect16"
+ width="10"
+ height="10"
+ x="30"
+ y="0" />
+ <rect
+ y="0"
+ x="40"
+ height="10"
+ width="10"
+ id="rect18"
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect20"
+ width="10"
+ height="10"
+ x="50"
+ y="0" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect22"
+ width="10"
+ height="10"
+ x="60"
+ y="0" />
+ <rect
+ y="0"
+ x="70"
+ height="10"
+ width="10"
+ id="rect24"
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986" />
+ <rect
+ y="0"
+ x="80"
+ height="10"
+ width="10"
+ id="rect26"
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect28"
+ width="10"
+ height="10"
+ x="90"
+ y="0" />
+ <rect
+ style="fill:#0000ff;fill-rule:evenodd;stroke-width:0.0593986"
+ id="rect30"
+ width="10"
+ height="10"
+ x="100"
+ y="0" />
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/guides.svg b/share/extensions/tests/data/svg/guides.svg
new file mode 100644
index 0000000..f67b40d
--- /dev/null
+++ b/share/extensions/tests/data/svg/guides.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="ref_guides.svg"
+ inkscape:version="0.0"
+ inkscape:export-ydpi="96"
+ inkscape:export-xdpi="96"
+ inkscape:export-filename="{tempdir}/guides.png"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 1000 1000"
+ height="1000"
+ width="1000">
+ <style
+ id="style872"></style>
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs33" />
+ <sodipodi:namedview
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-page="true"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-global="true"
+ inkscape:guide-bbox="true"
+ showguides="true"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer2"
+ inkscape:window-maximized="1"
+ inkscape:window-y="0"
+ inkscape:window-x="0"
+ inkscape:cy="465.64169"
+ inkscape:cx="544.90051"
+ inkscape:zoom="0.77183614"
+ inkscape:snap-text-baseline="true"
+ showgrid="true"
+ id="base"
+ inkscape:window-height="1017"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff">
+ <inkscape:grid
+ originy="0"
+ originx="0"
+ empopacity="0.25098039"
+ empcolor="#ff0000"
+ opacity="0.25098039"
+ color="#8080ff"
+ empspacing="2"
+ spacingy="100"
+ spacingx="100"
+ id="grid27"
+ type="xygrid" />
+ <sodipodi:guide
+ id="guide880"
+ orientation="1,0"
+ position="46.936577,700" />
+ <sodipodi:guide
+ id="guide882"
+ orientation="0,-1"
+ position="46.936577,951.0227" />
+ <sodipodi:guide
+ id="guide884"
+ orientation="1,0"
+ position="953.01659,951.0227" />
+ <sodipodi:guide
+ id="guide886"
+ orientation="0,-1"
+ position="953.01659,49.024128" />
+ <sodipodi:guide
+ id="guide888"
+ orientation="0.70710678,-0.70710678"
+ position="46.936577,49.024128" />
+ <sodipodi:guide
+ id="guide890"
+ orientation="-0.70710678,-0.70710678"
+ position="953.01659,49.024128" />
+ </sodipodi:namedview>
+ <g
+ style="display:inline"
+ inkscape:label="Slide3"
+ id="webslicer-layer"
+ inkscape:groupmode="layer" />
+ <g
+ style="display:inline"
+ inkscape:label="Slide2"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <use
+ transform="matrix(1.8978616,0,0,1.8909129,-450.29818,-444.94362)"
+ inkscape:label="#use3808"
+ height="100%"
+ width="100%"
+ id="u1"
+ inkscape:transform-center-y="-0.31067244"
+ inkscape:transform-center-x="12.274064"
+ xlink:href="#s1"
+ y="0"
+ x="0"
+ style="display:inline;stroke-width:0.527876" />
+ <path
+ inkscape:transform-center-y="-0.16430137"
+ inkscape:transform-center-x="6.4673011"
+ d="M 558.40487,540.93476 513.066,532.8003 480.66172,565.53783 474.38757,519.90431 433.23885,499.20247 474.70009,479.13386 481.67306,433.60189 513.57167,466.83233 559.02991,459.39386 537.2831,500.00001 Z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.2643023"
+ sodipodi:arg1="0.63598373"
+ sodipodi:r2="34.682434"
+ sodipodi:r1="69.364868"
+ sodipodi:cy="499.73415"
+ sodipodi:cx="502.60169"
+ sodipodi:sides="5"
+ id="s1"
+ style="display:inline;fill:#fcaf3e;stroke:#a40000;stroke-width:10"
+ sodipodi:type="star" />
+ <rect
+ ry="2.1866901"
+ y="100"
+ x="300"
+ height="100"
+ width="100"
+ id="rect900"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <rect
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="rect902"
+ width="100"
+ height="100"
+ x="500"
+ y="100"
+ ry="2.1866901" />
+ <rect
+ ry="2.1866901"
+ y="100"
+ x="697.91248"
+ height="100"
+ width="100"
+ id="rect904"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <rect
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="rect906"
+ width="100"
+ height="100"
+ x="700"
+ y="800"
+ ry="2.1866901" />
+ <rect
+ ry="2.1866901"
+ y="796"
+ x="504"
+ height="100"
+ width="100"
+ id="rect908"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:16;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <rect
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:32;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="rect910"
+ width="100"
+ height="100"
+ x="300"
+ y="800"
+ ry="2.1866901" />
+ <circle
+ r="50"
+ cy="350"
+ cx="150"
+ id="path912"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <circle
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="circle914"
+ cx="149.5"
+ cy="549.5"
+ r="50" />
+ <circle
+ r="50"
+ cy="749"
+ cx="146.91245"
+ id="circle916"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:4;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <circle
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="circle918"
+ cx="852"
+ cy="752"
+ r="50" />
+ <circle
+ r="50"
+ cy="554"
+ cx="854"
+ id="circle920"
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:16;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000" />
+ <circle
+ style="vector-effect:none;fill:#fcaf3e;fill-opacity:0.5;stroke:#a40000;stroke-width:32;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;paint-order:stroke fill markers;stop-color:#000000"
+ id="circle922"
+ cx="842"
+ cy="358"
+ r="50" />
+ </g>
+ <g
+ style="display:inline"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Slide1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/guides_millimeter.svg b/share/extensions/tests/data/svg/guides_millimeter.svg
new file mode 100644
index 0000000..1dd1cc1
--- /dev/null
+++ b/share/extensions/tests/data/svg/guides_millimeter.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-dev (bf4f53e38c, 2021-05-21)"
+ sodipodi:docname="guides_millimeter.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.77771465"
+ inkscape:cx="396.67505"
+ inkscape:cy="459.03726"
+ inkscape:window-width="1920"
+ inkscape:window-height="1043"
+ inkscape:window-x="0"
+ inkscape:window-y="360"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ position="96.278348,137.1031"
+ orientation="1,0"
+ id="guide12045" />
+ <sodipodi:guide
+ position="115.6701,166.02062"
+ orientation="0,-1"
+ id="guide12047" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="stroke:#000000;stroke-width:0.264583"
+ id="rect47"
+ width="59.654335"
+ height="48.655983"
+ x="18.775503"
+ y="38.309345" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:25.4px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="29.674892"
+ y="138.25467"
+ id="text8147"><tspan
+ sodipodi:role="line"
+ id="tspan8145"
+ style="font-size:25.4px;stroke-width:0.264583"
+ x="29.674892"
+ y="138.25467">Hello World!</tspan></text>
+ <path
+ sodipodi:type="star"
+ style="stroke:#000000"
+ id="path11963"
+ inkscape:flatsided="false"
+ sodipodi:sides="5"
+ sodipodi:cx="452.35947"
+ sodipodi:cy="732.82294"
+ sodipodi:r1="124.43255"
+ sodipodi:r2="62.216274"
+ sodipodi:arg1="0.52124329"
+ sodipodi:arg2="1.1495618"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 560.26747,794.78521 -82.46855,-5.18464 -51.02367,64.99637 -20.5533,-80.0344 -77.5824,-28.4414 69.76592,-44.27934 3.0751,-82.57412 63.671,52.66826 79.48292,-22.59221 -30.41507,76.83011 z"
+ transform="matrix(0.26458333,0,0,0.26458333,10.770067,15.092102)"
+ inkscape:transform-center-x="2.091786"
+ inkscape:transform-center-y="1.0872684" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/hershey_input.svg b/share/extensions/tests/data/svg/hershey_input.svg
new file mode 100755
index 0000000..e5ee87a
--- /dev/null
+++ b/share/extensions/tests/data/svg/hershey_input.svg
@@ -0,0 +1,1082 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="hershey_input.svg"
+ inkscape:version="1.0alpha2 (e9298ea, 2019-07-05)"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 2220.1786 1530.4364"
+ height="17.004848in"
+ width="24.668652in">
+ <style
+ id="style1418"></style>
+ <sodipodi:namedview
+ inkscape:document-rotation="0"
+ fit-margin-bottom="0"
+ fit-margin-right="0"
+ fit-margin-left="0"
+ fit-margin-top="0"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.45932702"
+ inkscape:cx="1188.9042"
+ inkscape:cy="794.44408"
+ inkscape:document-units="px"
+ inkscape:current-layer="svg2"
+ showgrid="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="1005"
+ inkscape:window-x="0"
+ inkscape:window-y="23"
+ inkscape:window-maximized="1"
+ units="in"
+ showguides="false" />
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(16.650407,434.42922)"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-size:72px;line-height:normal;font-family:'Arial Rounded MT Bold';-inkscape-font-specification:'Arial Rounded MT Bold, Normal';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;letter-spacing:2.04px;fill:#000000;stroke-width:10.8;paint-order:markers stroke fill;stop-color:#000000"
+ x="100"
+ y="300"
+ id="text3041"><tspan
+ sodipodi:role="line"
+ id="tspan3039"
+ x="100"
+ y="300"
+ style="stroke-width:10.8">test</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4136-4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.56498356,0,0,0.56498356,104.66429,-178.31547)"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion4138-3"><rect
+ id="rect4140-1"
+ width="168.74548"
+ height="238.84306"
+ x="58.688175"
+ y="293.76318"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.25px;line-height:300%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start" /></flowRegion><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.25px;line-height:300%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="flowPara4144-3">This text has both a smaller bounding box, a smaller font size, and a large line spacing. The software must handle unusual cases like this.</flowPara><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.25px;line-height:300%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="flowPara43266">The real problem is that flowing into a text box (flowroot region) is SVG-renderer dependent-- even different web browsers may render flowed text differently. In this particular case, we're dealing with an Inkscape extension which does not have access to information about how the text was flowed before we got to it, so we essentially have to re-flow it from scratch. </flowPara></flowRoot> <text
+ id="text4169-3"
+ y="-0.17828369"
+ x="326.43045"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="-0.17828369"
+ x="326.43045"
+ id="tspan4171-9"
+ sodipodi:role="line">This data,</tspan><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="tspan4173-8"
+ y="18.571716"
+ x="326.43045"
+ sodipodi:role="line">is also text.</tspan><tspan
+ id="tspan27231"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="37.321716"
+ x="326.43045"
+ sodipodi:role="line"> </tspan><tspan
+ id="tspan27205"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="56.071716"
+ x="326.43045"
+ sodipodi:role="line">However, it has</tspan><tspan
+ id="tspan27209"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="74.821716"
+ x="326.43045"
+ sodipodi:role="line">many returns</tspan><tspan
+ id="tspan27211"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="93.571716"
+ x="326.43045"
+ sodipodi:role="line">each</tspan><tspan
+ id="tspan27233"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="112.32172"
+ x="326.43045"
+ sodipodi:role="line">on</tspan><tspan
+ id="tspan27235"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="131.07172"
+ x="326.43045"
+ sodipodi:role="line">its</tspan><tspan
+ id="tspan27237"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="149.82172"
+ x="326.43045"
+ sodipodi:role="line">own</tspan><tspan
+ id="tspan27213"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="168.57172"
+ x="326.43045"
+ sodipodi:role="line">line</tspan><tspan
+ id="tspan27215"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="187.32172"
+ x="326.43045"
+ sodipodi:role="line">in order to make</tspan><tspan
+ id="tspan27217"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="206.07172"
+ x="326.43045"
+ sodipodi:role="line">it take up more vertical</tspan><tspan
+ id="tspan27219"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="224.82172"
+ x="326.43045"
+ sodipodi:role="line">space so that we</tspan><tspan
+ id="tspan27221"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="243.57172"
+ x="326.43045"
+ sodipodi:role="line">can see how it handles</tspan><tspan
+ id="tspan27223"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="262.32172"
+ x="326.43045"
+ sodipodi:role="line">weird edge cases</tspan><tspan
+ id="tspan27225"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="281.07172"
+ x="326.43045"
+ sodipodi:role="line">like</tspan><tspan
+ id="tspan27227"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="299.82175"
+ x="326.43045"
+ sodipodi:role="line">this</tspan><tspan
+ id="tspan27229"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="318.57175"
+ x="326.43045"
+ sodipodi:role="line">one.</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot43268"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion43270"><rect
+ style="font-family:sans-serif"
+ id="rect43272"
+ width="215.35278"
+ height="148.35414"
+ x="752.70923"
+ y="410.40579" /></flowRegion><flowPara
+ style="font-size:112.332px;line-height:1.25;font-family:sans-serif"
+ id="flowPara43274"> </flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot69852"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion69854"><rect
+ style="font-family:sans-serif"
+ id="rect69856"
+ width="147.67105"
+ height="138.53676"
+ x="286.20779"
+ y="314.00693" /></flowRegion><flowPara
+ style="font-size:112.332px;line-height:1.25;font-family:sans-serif"
+ id="flowPara69858"> </flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4136-1"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(653.45509,-223.95601)"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion4138-9"><rect
+ style="font-family:sans-serif"
+ id="rect4140-6"
+ width="727.76221"
+ height="536.07629"
+ x="58.688175"
+ y="293.76318" /></flowRegion><flowPara
+ id="flowPara43951"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">We are testing an Inkscape extension called Hershey Text 3.0. The purpose of this extension is to take a block of flowed text, and replace it with stroke-based engraving fonts. We've got a number of different single-stroke fonts built in as well, that help to provide some options. However, we need to test that it handles a variety of different formats of text including different input fonts, alignment, flowed and regular text, variations of font size with a given span, returns, non-breaking spaces, transforms, nested groups and so forth. SVG allows text to be formatted in many different ways.</flowPara><flowPara
+ id="flowPara24519"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start" /><flowPara
+ id="flowPara24521"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">This text is in Layer 1.</flowPara></flowRoot> <text
+ id="text4169-3-2"
+ y="37.446014"
+ x="1593.2249"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="tspan4173-8-8"
+ y="37.446014"
+ x="1593.2249"
+ sodipodi:role="line">Text, non-flowed,</tspan><tspan
+ id="tspan11633"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="56.196014"
+ x="1593.2249"
+ sodipodi:role="line">align left.</tspan><tspan
+ id="tspan27231-7"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="74.946014"
+ x="1593.2249"
+ sodipodi:role="line"> </tspan><tspan
+ id="tspan27205-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="93.696014"
+ x="1593.2249"
+ sodipodi:role="line">However, it has</tspan><tspan
+ id="tspan27209-4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="112.44601"
+ x="1593.2249"
+ sodipodi:role="line">many returns</tspan><tspan
+ id="tspan27211-2"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="131.19601"
+ x="1593.2249"
+ sodipodi:role="line">each</tspan><tspan
+ id="tspan27233-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="149.94601"
+ x="1593.2249"
+ sodipodi:role="line">on</tspan><tspan
+ id="tspan27235-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="168.69601"
+ x="1593.2249"
+ sodipodi:role="line">its</tspan><tspan
+ id="tspan27237-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="187.44601"
+ x="1593.2249"
+ sodipodi:role="line">own</tspan><tspan
+ id="tspan27213-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="206.19601"
+ x="1593.2249"
+ sodipodi:role="line">line</tspan><tspan
+ id="tspan27215-7"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="224.94601"
+ x="1593.2249"
+ sodipodi:role="line">in order to make</tspan><tspan
+ id="tspan27217-6"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="243.69601"
+ x="1593.2249"
+ sodipodi:role="line">it take up more vertical</tspan><tspan
+ id="tspan27219-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="262.44601"
+ x="1593.2249"
+ sodipodi:role="line">space so that we</tspan><tspan
+ id="tspan27221-8"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="281.19601"
+ x="1593.2249"
+ sodipodi:role="line">can see how it handles</tspan><tspan
+ id="tspan27223-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="299.94601"
+ x="1593.2249"
+ sodipodi:role="line">weird edge cases</tspan><tspan
+ id="tspan27225-2"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="318.69601"
+ x="1593.2249"
+ sodipodi:role="line">like</tspan><tspan
+ id="tspan27227-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="337.44601"
+ x="1593.2249"
+ sodipodi:role="line">this</tspan><tspan
+ id="tspan27229-1"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="356.19601"
+ x="1593.2249"
+ sodipodi:role="line">one.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="1879.6267"
+ y="37.446014"
+ id="text37640"><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="37.446014"
+ id="tspan37644"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">Text, non-flowed,</tspan><tspan
+ id="tspan11637"
+ sodipodi:role="line"
+ x="1879.6267"
+ y="56.196014"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">align center</tspan><tspan
+ sodipodi:role="line"
+ x="1882.0144"
+ y="74.946014"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37646"> </tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="93.696014"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37648">However, it has</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="112.44601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37650">many returns</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="131.19601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37652">each</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="149.94601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37654">on</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="168.69601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37656">its</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="187.44601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37658">own</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="206.19601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37660">line</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="224.94601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37662">in order to make</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="243.69601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37664">it take up more vertical</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="262.44601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37666">space so that we</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="281.19601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37668">can see how it handles</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="299.94601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37670">weird edge cases</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="318.69601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37672">like</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="337.44601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37674">this</tspan><tspan
+ sodipodi:role="line"
+ x="1879.6267"
+ y="356.19601"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="tspan37676">one.</tspan></text>
+ <text
+ id="text37678"
+ y="37.446014"
+ x="2166.0283"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ id="tspan37682"
+ y="37.446014"
+ x="2166.0283"
+ sodipodi:role="line">Text, non-flowed,</tspan><tspan
+ id="tspan37684"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="56.196014"
+ x="2166.0283"
+ sodipodi:role="line">align right.</tspan><tspan
+ id="tspan11650"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="74.946014"
+ x="2170.8037"
+ sodipodi:role="line"> </tspan><tspan
+ id="tspan37686"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="93.696014"
+ x="2166.0283"
+ sodipodi:role="line">However, it has</tspan><tspan
+ id="tspan37688"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="112.44601"
+ x="2166.0283"
+ sodipodi:role="line">many returns</tspan><tspan
+ id="tspan37690"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="131.19601"
+ x="2166.0283"
+ sodipodi:role="line">each</tspan><tspan
+ id="tspan37692"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="149.94601"
+ x="2166.0283"
+ sodipodi:role="line">on</tspan><tspan
+ id="tspan37694"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="168.69601"
+ x="2166.0283"
+ sodipodi:role="line">its</tspan><tspan
+ id="tspan37696"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="187.44601"
+ x="2166.0283"
+ sodipodi:role="line">own</tspan><tspan
+ id="tspan37698"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="206.19601"
+ x="2166.0283"
+ sodipodi:role="line">line</tspan><tspan
+ id="tspan37700"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="224.94601"
+ x="2166.0283"
+ sodipodi:role="line">in order to make</tspan><tspan
+ id="tspan37702"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="243.69601"
+ x="2166.0283"
+ sodipodi:role="line">it take up more vertical</tspan><tspan
+ id="tspan37704"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="262.44601"
+ x="2166.0283"
+ sodipodi:role="line">space so that we</tspan><tspan
+ id="tspan37706"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="281.19601"
+ x="2166.0283"
+ sodipodi:role="line">can see how it handles</tspan><tspan
+ id="tspan37708"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="299.94601"
+ x="2166.0283"
+ sodipodi:role="line">weird edge cases</tspan><tspan
+ id="tspan37710"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="318.69601"
+ x="2166.0283"
+ sodipodi:role="line">like</tspan><tspan
+ id="tspan37712"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="337.44601"
+ x="2166.0283"
+ sodipodi:role="line">this</tspan><tspan
+ id="tspan37714"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:end;writing-mode:lr-tb;text-anchor:end"
+ y="356.19601"
+ x="2166.0283"
+ sodipodi:role="line">one.</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4136-1-1"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.55234048,0,0,0.55234048,1617.5409,226.3572)"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion4138-9-2"><rect
+ style="font-family:sans-serif"
+ id="rect4140-6-1"
+ width="386.64426"
+ height="495.14215"
+ x="58.688175"
+ y="293.76318" /></flowRegion><flowPara
+ id="flowPara11690"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start">Test: Flowed text, aligned left. </flowPara><flowPara
+ id="flowPara11732"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start" /><flowPara
+ id="flowPara37749"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start">Can we handle text that is aligned left, aligned right, centered, justified and so forth? Not all of these cases are necessarily useful for all applications (for example justified with stroke based fonts in the styles of handwriting), but that's not really for us to decide.</flowPara><flowPara
+ id="flowPara11736"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start">Rather, we need to handle these cases because the text that is handed to us just might be in some unusual format.. </flowPara></flowRoot> <text
+ transform="matrix(1.0356004,-0.4690583,0.81335056,0.59722955,0,0)"
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="109.79303"
+ y="1398.9264"
+ id="text4345-3"><tspan
+ sodipodi:role="line"
+ id="tspan4347-3"
+ x="109.79303"
+ y="1398.9264"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.8214px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">This transformed text...</tspan><tspan
+ sodipodi:role="line"
+ x="109.79303"
+ y="1429.9531"
+ id="tspan4349-4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.8214px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"> </tspan><tspan
+ sodipodi:role="line"
+ x="109.79303"
+ y="1460.9799"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.8214px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="tspan4351-2">is text with a gap...</tspan></text>
+ <flowRoot
+ transform="matrix(0.55234048,0,0,0.55234048,1873.5798,226.3572)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="flowRoot11766"
+ xml:space="preserve"><flowRegion
+ id="flowRegion11756"
+ style="font-family:sans-serif"><rect
+ y="293.76318"
+ x="58.688175"
+ height="495.14215"
+ width="386.64426"
+ id="rect11754"
+ style="font-family:sans-serif" /></flowRegion><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="flowPara11758">Test: Flowed text, aligned center. </flowPara><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="flowPara11760" /><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="flowPara11762">Can we handle text that is aligned left, aligned right, centered, justified and so forth? Not all of these cases are necessarily useful for all applications (for example justified with stroke based fonts in the styles of handwriting), but that's not really for us to decide.</flowPara><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="flowPara11764">Rather, we need to handle these cases because the text that is handed to us just might be in some unusual format.. </flowPara></flowRoot> <flowRoot
+ transform="matrix(0.55234048,0,0,0.55234048,1617.5409,526.47821)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="flowRoot11780"
+ xml:space="preserve"><flowRegion
+ id="flowRegion11770"
+ style="font-family:sans-serif"><rect
+ y="293.76318"
+ x="58.688175"
+ height="495.14215"
+ width="386.64426"
+ id="rect11768"
+ style="font-family:sans-serif" /></flowRegion><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end"
+ id="flowPara11772">Test: Flowed text, aligned right. </flowPara><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end"
+ id="flowPara11774" /><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end"
+ id="flowPara11776">Can we handle text that is aligned left, aligned right, centered, justified and so forth? Not all of these cases are necessarily useful for all applications (for example justified with stroke based fonts in the styles of handwriting), but that's not really for us to decide.</flowPara><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:end;writing-mode:lr-tb;text-anchor:end"
+ id="flowPara11778">Rather, we need to handle these cases because the text that is handed to us just might be in some unusual format.. </flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot11794"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:0.01%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.55234048,0,0,0.55234048,1873.5798,526.47821)"><flowRegion
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start"
+ id="flowRegion11784"><rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.49993515px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start"
+ id="rect11782"
+ width="386.64426"
+ height="495.14215"
+ x="58.688175"
+ y="293.76318" /></flowRegion><flowPara
+ id="flowPara11786"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start">Test: Flowed text, justified. </flowPara><flowPara
+ id="flowPara11788"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start" /><flowPara
+ id="flowPara11790"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start">Can we handle text that is aligned left, aligned right, centered, justified and so forth? Not all of these cases are necessarily useful for all applications (for example justified with stroke based fonts in the styles of handwriting), but that's not really for us to decide.</flowPara><flowPara
+ id="flowPara11792"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.4999px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:justify;writing-mode:lr-tb;text-anchor:start">Rather, we need to handle these cases because the text that is handed to us just might be in some unusual format.. </flowPara></flowRoot> <rect
+ y="-195.96283"
+ x="1844.2212"
+ height="119.80688"
+ width="131.40111"
+ id="rect24509"
+ style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:2.535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ r="43.478306"
+ cy="-142.82268"
+ cx="2077.0715"
+ id="path24511"
+ style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:2.535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="translate(1143.9626,-33.997658)"
+ id="text24525"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:'Brandon Text';-inkscape-font-specification:'Brandon Text';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill:#636365;fill-opacity:1;stroke:none;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ aria-label="Text already converted into a path">
+ <path
+ inkscape:connector-curvature="0"
+ id="path24529"
+ style="stroke-width:0.9375"
+ d="m 681.45013,-233.84283 c 0,0.2 0.18,0.38 0.38,0.38 h 0.76 c 0.2,0 0.38,-0.18 0.38,-0.38 v -12.28 h 3.48 c 0.22,0 0.38,-0.18 0.38,-0.38 v -0.58 c 0,-0.2 -0.16,-0.38 -0.38,-0.38 h -8.48 c -0.22,0 -0.38,0.18 -0.38,0.38 v 0.58 c 0,0.2 0.16,0.38 0.38,0.38 h 3.48 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24531"
+ style="stroke-width:0.9375"
+ d="m 686.76107,-238.08283 c 0,2.64 1.68,4.84 4.48,4.84 1.6,0 2.82,-0.62 3.38,-1.06 0.34,-0.26 0.26,-0.36 0.08,-0.64 l -0.24,-0.34 c -0.24,-0.36 -0.38,-0.28 -0.7,-0.06 -0.52,0.34 -1.28,0.76 -2.5,0.76 -1.68,0 -2.98,-1.62 -3.02,-3.16 h 6.72 c 0.2,0 0.4,-0.16 0.42,-0.4 0.02,-0.16 0.04,-0.4 0.04,-0.56 0,-2.42 -1.76,-4.2 -4.18,-4.2 -2.8,0 -4.48,2.22 -4.48,4.82 z m 1.5,-0.84 c 0.18,-1.44 1.42,-2.64 2.98,-2.64 1.58,0 2.66,1.28 2.7,2.64 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24533"
+ style="stroke-width:0.9375"
+ d="m 697.38888,-233.46283 h 0.76 c 0.14,0 0.28,-0.08 0.36,-0.18 l 2.5,-3.5 h 0.04 l 2.52,3.48 c 0.08,0.1 0.22,0.2 0.36,0.2 h 0.76 c 0.36,0 0.52,-0.3 0.3,-0.6 l -3.02,-4.14 3,-3.9 c 0.22,-0.3 0.08,-0.6 -0.3,-0.6 h -0.86 c -0.16,0 -0.28,0.08 -0.36,0.18 l -2.4,3.2 h -0.04 l -2.32,-3.2 c -0.06,-0.1 -0.2,-0.18 -0.36,-0.18 h -0.86 c -0.38,0 -0.52,0.3 -0.3,0.6 l 3,3.94 -3.08,4.1 c -0.22,0.28 -0.1,0.6 0.3,0.6 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24535"
+ style="stroke-width:0.9375"
+ d="m 707.98013,-241.42283 v 5.62 c 0,1.44 0.36,2.56 2.12,2.56 1.24,0 2.2,-0.46 2.6,-0.74 0.24,-0.16 0.28,-0.3 0.16,-0.6 l -0.18,-0.42 c -0.1,-0.22 -0.22,-0.4 -0.58,-0.18 -0.38,0.24 -0.96,0.6 -1.82,0.6 -0.52,0 -0.82,-0.36 -0.82,-1.32 v -5.52 h 2.72 c 0.26,0 0.46,-0.2 0.46,-0.44 v -0.4 c 0,-0.26 -0.2,-0.44 -0.46,-0.44 h -2.72 v -2.6 c 0,-0.24 -0.18,-0.46 -0.42,-0.44 l -0.62,0.04 c -0.22,0.02 -0.44,0.2 -0.44,0.44 v 2.56 h -1.22 c -0.28,0 -0.46,0.18 -0.46,0.44 v 0.4 c 0,0.24 0.18,0.44 0.46,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24537"
+ style="stroke-width:0.9375"
+ d="m 719.04295,-236.26283 c 0,1.86 1.24,3.02 2.86,3.02 1.42,0 2.38,-0.7 2.86,-1.18 l 0.18,0.62 c 0.06,0.2 0.14,0.34 0.38,0.34 h 0.38 c 0.24,0 0.44,-0.2 0.44,-0.44 v -5.12 c 0,-2.72 -0.5,-3.88 -2.86,-3.88 -1.52,0 -2.72,0.4 -3.18,0.6 -0.22,0.1 -0.36,0.22 -0.28,0.5 l 0.2,0.54 c 0.08,0.22 0.2,0.34 0.44,0.24 0.42,-0.14 1.48,-0.54 2.74,-0.54 1.32,0 1.54,0.84 1.52,2.54 0,0 -1,-0.3 -1.98,-0.3 -2.38,0 -3.7,1.3 -3.7,3.06 z m 1.46,0 c 0,-1.18 0.96,-1.8 2.24,-1.8 0.92,0 1.66,0.2 1.96,0.36 v 1.88 c -0.4,0.6 -1.4,1.24 -2.54,1.24 -1.02,0 -1.66,-0.74 -1.66,-1.68 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24539"
+ style="stroke-width:0.9375"
+ d="m 729.27701,-233.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -13.12 c 0,-0.22 -0.22,-0.44 -0.44,-0.44 h -0.6 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24541"
+ style="stroke-width:0.9375"
+ d="m 733.9817,-233.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -6.4 c 0,0 0.72,-1.18 2.5,-1.18 0.44,0 0.78,0.16 1,0.26 0.22,0.1 0.44,0.08 0.54,-0.22 l 0.26,-0.72 c 0.22,-0.64 -0.92,-0.74 -1.62,-0.74 -1.92,0 -2.84,1.18 -2.84,1.18 l -0.16,-0.66 c -0.06,-0.22 -0.22,-0.32 -0.4,-0.32 h -0.32 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24543"
+ style="stroke-width:0.9375"
+ d="m 740.82357,-238.08283 c 0,2.64 1.68,4.84 4.48001,4.84 1.6,0 2.82,-0.62 3.38,-1.06 0.34,-0.26 0.26,-0.36 0.08,-0.64 l -0.24,-0.34 c -0.24,-0.36 -0.38,-0.28 -0.7,-0.06 -0.52,0.34 -1.28,0.76 -2.5,0.76 -1.68001,0 -2.98001,-1.62 -3.02001,-3.16 h 6.72001 c 0.2,0 0.4,-0.16 0.42,-0.4 0.02,-0.16 0.04,-0.4 0.04,-0.56 0,-2.42 -1.76,-4.2 -4.18,-4.2 -2.80001,0 -4.48001,2.22 -4.48001,4.82 z m 1.5,-0.84 c 0.18,-1.44 1.42,-2.64 2.98001,-2.64 1.58,0 2.66,1.28 2.7,2.64 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24545"
+ style="stroke-width:0.9375"
+ d="m 751.19139,-236.26283 c 0,1.86 1.24,3.02 2.86,3.02 1.42,0 2.38,-0.7 2.86,-1.18 l 0.18,0.62 c 0.06,0.2 0.14,0.34 0.38,0.34 h 0.38 c 0.24,0 0.44,-0.2 0.44,-0.44 v -5.12 c 0,-2.72 -0.5,-3.88 -2.86,-3.88 -1.52,0 -2.72,0.4 -3.18,0.6 -0.22,0.1 -0.36,0.22 -0.28,0.5 l 0.2,0.54 c 0.08,0.22 0.2,0.34 0.44,0.24 0.42,-0.14 1.48,-0.54 2.74,-0.54 1.32,0 1.54,0.84 1.52,2.54 0,0 -1,-0.3 -1.98,-0.3 -2.38,0 -3.7,1.3 -3.7,3.06 z m 1.46,0 c 0,-1.18 0.96,-1.8 2.24,-1.8 0.92,0 1.66,0.2 1.96,0.36 v 1.88 c -0.4,0.6 -1.4,1.24 -2.54,1.24 -1.02,0 -1.66,-0.74 -1.66,-1.68 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24547"
+ style="stroke-width:0.9375"
+ d="m 760.74545,-238.10283 c 0,2.64 1.8,4.86 4.14,4.86 1.74,0 2.92,-1.2 2.92,-1.2 l 0.12,0.6 c 0.08,0.22 0.2,0.38 0.4,0.38 h 0.36 c 0.24,0 0.46,-0.2 0.46,-0.44 v -13.12 c 0,-0.22 -0.22,-0.44 -0.46,-0.44 h -0.56 c -0.24,0 -0.44,0.22 -0.44,0.44 v 4.7 c 0,0 -1.04,-0.58 -2.56,-0.58 -2.78,0 -4.38,2.1 -4.38,4.8 z m 1.5,0.02 c 0,-1.84 1.1,-3.48 3.08,-3.48 1.28,0 2.36,0.52 2.36,0.52 v 4.98 c 0,0 -0.96,1.48 -2.62,1.48 -1.68,0 -2.82,-1.7 -2.82,-3.5 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24549"
+ style="stroke-width:0.9375"
+ d="m 774.66295,-233.48283 -1.78,4.22 c -0.14,0.32 0.02,0.56 0.38,0.56 h 0.72 c 0.16,0 0.34,-0.14 0.4,-0.28 l 5.78,-13.2 c 0.14,-0.3 0,-0.52 -0.36,-0.52 h -0.74 c -0.18,0 -0.34,0.1 -0.4,0.26 l -3.12,7.34 h -0.04 l -2.62,-7.34 c -0.06,-0.16 -0.22,-0.26 -0.4,-0.26 h -0.84 c -0.36,0 -0.48,0.2 -0.36,0.5 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24551"
+ style="stroke-width:0.9375"
+ d="m 785.99889,-238.06283 c 0,2.78 1.92,4.82 4.66,4.82 1.54,0 2.78,-0.84 3.48,-1.86 0.16,-0.24 0.08,-0.44 -0.12,-0.64 l -0.12,-0.12 c -0.26,-0.26 -0.52,-0.34 -0.78,-0.04 -0.52,0.6 -1.12,1.32 -2.52,1.32 -1.72,0 -3.1,-1.54 -3.1,-3.5 0,-1.92 1.4,-3.48 3.16,-3.48 0.94,0 1.68,0.28 2.32,1 0.18,0.2 0.36,0.4 0.66,0.14 l 0.32,-0.3 c 0.22,-0.18 0.26,-0.44 0.08,-0.66 -0.86,-0.98 -1.98,-1.52 -3.36,-1.52 -2.68,0 -4.68,2.12 -4.68,4.84 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24553"
+ style="stroke-width:0.9375"
+ d="m 795.88171,-238.10283 c 0,2.64 2.08,4.86 4.64,4.86 2.56,0 4.64,-2.22 4.64,-4.86 0,-2.6 -2.08,-4.8 -4.64,-4.8 -2.56,0 -4.64,2.2 -4.64,4.8 z m 1.46,0 c 0,-1.88 1.36,-3.46 3.18,-3.46 1.82,0 3.16,1.58 3.16,3.46 0,1.92 -1.34,3.52 -3.16,3.52 -1.82,0 -3.18,-1.6 -3.18,-3.52 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24555"
+ style="stroke-width:0.9375"
+ d="m 807.69264,-233.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -6.38 c 0,0 1.10001,-1.28 2.84001,-1.28 1.36,0 1.96,0.82 1.96,2.58 v 5.08 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -4.88 c 0,-2.38 -0.66,-4.12 -3.34,-4.12 -1.92,0 -3.10001,1.18 -3.10001,1.18 l -0.2,-0.7 c -0.04,-0.2 -0.16,-0.28 -0.36,-0.28 h -0.32 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24557"
+ style="stroke-width:0.9375"
+ d="m 821.09952,-233.48283 c 0.04,0.12 0.18,0.24 0.38,0.24 h 0.12 c 0.22,0 0.34,-0.12 0.38,-0.24 l 3.98,-8.7 c 0.12,-0.28 0,-0.52 -0.36,-0.52 h -0.64 c -0.16,0 -0.3,0.1 -0.36,0.26 l -3.04,6.8 h -0.04 l -2.86,-6.8 c -0.06,-0.16 -0.2,-0.26 -0.42,-0.26 h -0.7 c -0.34,0 -0.48,0.24 -0.34,0.52 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24559"
+ style="stroke-width:0.9375"
+ d="m 827.22983,-238.08283 c 0,2.64 1.68,4.84 4.48,4.84 1.6,0 2.82,-0.62 3.38,-1.06 0.34,-0.26 0.26,-0.36 0.08,-0.64 l -0.24,-0.34 c -0.24,-0.36 -0.38,-0.28 -0.7,-0.06 -0.52,0.34 -1.28,0.76 -2.5,0.76 -1.68,0 -2.98,-1.62 -3.02,-3.16 h 6.72 c 0.2,0 0.4,-0.16 0.42,-0.4 0.02,-0.16 0.04,-0.4 0.04,-0.56 0,-2.42 -1.76,-4.2 -4.18,-4.2 -2.8,0 -4.48,2.22 -4.48,4.82 z m 1.5,-0.84 c 0.18,-1.44 1.42,-2.64 2.98,-2.64 1.58,0 2.66,1.28 2.7,2.64 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24561"
+ style="stroke-width:0.9375"
+ d="m 838.31764,-233.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -6.4 c 0,0 0.72001,-1.18 2.50001,-1.18 0.44,0 0.78,0.16 1,0.26 0.22,0.1 0.44,0.08 0.54,-0.22 l 0.26,-0.72 c 0.22,-0.64 -0.92,-0.74 -1.62,-0.74 -1.92,0 -2.84001,1.18 -2.84001,1.18 l -0.16,-0.66 c -0.06,-0.22 -0.22,-0.32 -0.4,-0.32 h -0.32 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24563"
+ style="stroke-width:0.9375"
+ d="m 846.65202,-241.42283 v 5.62 c 0,1.44 0.36,2.56 2.12,2.56 1.24,0 2.2,-0.46 2.6,-0.74 0.24,-0.16 0.28,-0.3 0.16,-0.6 l -0.18,-0.42 c -0.1,-0.22 -0.22,-0.4 -0.58,-0.18 -0.38,0.24 -0.96,0.6 -1.82,0.6 -0.52,0 -0.82,-0.36 -0.82,-1.32 v -5.52 h 2.72 c 0.26,0 0.46,-0.2 0.46,-0.44 v -0.4 c 0,-0.26 -0.2,-0.44 -0.46,-0.44 h -2.72 v -2.6 c 0,-0.24 -0.18,-0.46 -0.42,-0.44 l -0.62,0.04 c -0.22,0.02 -0.44,0.2 -0.44,0.44 v 2.56 h -1.22 c -0.28,0 -0.46,0.18 -0.46,0.44 v 0.4 c 0,0.24 0.18,0.44 0.46,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24565"
+ style="stroke-width:0.9375"
+ d="m 853.05014,-238.08283 c 0,2.64 1.68,4.84 4.48001,4.84 1.6,0 2.82,-0.62 3.38,-1.06 0.34,-0.26 0.26,-0.36 0.08,-0.64 l -0.24,-0.34 c -0.24,-0.36 -0.38,-0.28 -0.7,-0.06 -0.52,0.34 -1.28,0.76 -2.5,0.76 -1.68,0 -2.98001,-1.62 -3.02001,-3.16 h 6.72001 c 0.2,0 0.4,-0.16 0.42,-0.4 0.02,-0.16 0.04,-0.4 0.04,-0.56 0,-2.42 -1.76,-4.2 -4.18,-4.2 -2.80001,0 -4.48001,2.22 -4.48001,4.82 z m 1.5,-0.84 c 0.18,-1.44 1.42001,-2.64 2.98001,-2.64 1.58,0 2.66,1.28 2.7,2.64 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24567"
+ style="stroke-width:0.9375"
+ d="m 863.55796,-238.10283 c 0,2.64 1.8,4.86 4.14,4.86 1.74,0 2.92,-1.2 2.92,-1.2 l 0.12,0.6 c 0.08,0.22 0.2,0.38 0.4,0.38 h 0.36 c 0.24,0 0.46,-0.2 0.46,-0.44 v -13.12 c 0,-0.22 -0.22,-0.44 -0.46,-0.44 h -0.56 c -0.24,0 -0.44,0.22 -0.44,0.44 v 4.7 c 0,0 -1.04,-0.58 -2.56,-0.58 -2.78,0 -4.38,2.1 -4.38,4.8 z m 1.5,0.02 c 0,-1.84 1.1,-3.48 3.08,-3.48 1.28,0 2.36,0.52 2.36,0.52 v 4.98 c 0,0 -0.96,1.48 -2.62,1.48 -1.68,0 -2.82,-1.7 -2.82,-3.5 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24569"
+ style="stroke-width:0.9375"
+ d="m 679.33013,-220.08283 c 0.62,0 1.1,-0.5 1.1,-1.08 0,-0.64 -0.48,-1.12 -1.1,-1.12 -0.6,0 -1.08,0.48 -1.08,1.12 0,0.58 0.48,1.08 1.08,1.08 z m -0.7,11.18 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -8.36 c 0,-0.22 -0.22,-0.44 -0.44,-0.44 h -0.6 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24571"
+ style="stroke-width:0.9375"
+ d="m 683.23951,-208.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -6.38 c 0,0 1.1,-1.28 2.84,-1.28 1.36,0 1.96,0.82 1.96,2.58 v 5.08 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -4.88 c 0,-2.38 -0.66,-4.12 -3.34,-4.12 -1.92,0 -3.1,1.18 -3.1,1.18 l -0.2,-0.7 c -0.04,-0.2 -0.16,-0.28 -0.36,-0.28 h -0.32 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24573"
+ style="stroke-width:0.9375"
+ d="m 694.50357,-216.42283 v 5.62 c 0,1.44 0.36,2.56 2.12,2.56 1.24,0 2.2,-0.46 2.6,-0.74 0.24,-0.16 0.28,-0.3 0.16,-0.6 l -0.18,-0.42 c -0.1,-0.22 -0.22,-0.4 -0.58,-0.18 -0.38,0.24 -0.96,0.6 -1.82,0.6 -0.52,0 -0.82,-0.36 -0.82,-1.32 v -5.52 h 2.72 c 0.26,0 0.46,-0.2 0.46,-0.44 v -0.4 c 0,-0.26 -0.2,-0.44 -0.46,-0.44 h -2.72 v -2.6 c 0,-0.24 -0.18,-0.46 -0.42,-0.44 l -0.62,0.04 c -0.22,0.02 -0.44,0.2 -0.44,0.44 v 2.56 h -1.22 c -0.28,0 -0.46,0.18 -0.46,0.44 v 0.4 c 0,0.24 0.18,0.44 0.46,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24575"
+ style="stroke-width:0.9375"
+ d="m 700.88169,-213.10283 c 0,2.64 2.08,4.86 4.64,4.86 2.56,0 4.64,-2.22 4.64,-4.86 0,-2.6 -2.08,-4.8 -4.64,-4.8 -2.56,0 -4.64,2.2 -4.64,4.8 z m 1.46,0 c 0,-1.88 1.36,-3.46 3.18,-3.46 1.82,0 3.16,1.58 3.16,3.46 0,1.92 -1.34,3.52 -3.16,3.52 -1.82,0 -3.18,-1.6 -3.18,-3.52 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24577"
+ style="stroke-width:0.9375"
+ d="m 716.77732,-211.26283 c 0,1.86 1.24,3.02 2.86,3.02 1.42,0 2.38,-0.7 2.86,-1.18 l 0.18,0.62 c 0.06,0.2 0.14,0.34 0.38,0.34 h 0.38 c 0.24,0 0.44,-0.2 0.44,-0.44 v -5.12 c 0,-2.72 -0.5,-3.88 -2.86,-3.88 -1.52,0 -2.72,0.4 -3.18,0.6 -0.22,0.1 -0.36,0.22 -0.28,0.5 l 0.2,0.54 c 0.08,0.22 0.2,0.34 0.44,0.24 0.42,-0.14 1.48,-0.54 2.74,-0.54 1.32,0 1.54,0.84 1.52,2.54 0,0 -1,-0.3 -1.98,-0.3 -2.38,0 -3.7,1.3 -3.7,3.06 z m 1.46,0 c 0,-1.18 0.96,-1.8 2.24,-1.8 0.92,0 1.66,0.2 1.96,0.36 v 1.88 c -0.4,0.6 -1.4,1.24 -2.54,1.24 -1.02,0 -1.66,-0.74 -1.66,-1.68 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24579"
+ style="stroke-width:0.9375"
+ d="m 733.17607,-209.00283 c 0,0 1.02,0.76 2.56,0.76 2.54,0 4.36,-2.14 4.36,-4.84 0,-2.64 -1.78,-4.82 -4.3,-4.82 -1.66,0 -2.78,0.94 -2.78,0.94 l -0.14,-0.44 c -0.1,-0.24 -0.16,-0.3 -0.38,-0.3 h -0.34 c -0.24,0 -0.44,0.22 -0.44,0.44 v 13.12 c 0,0.24 0.2,0.44 0.44,0.44 h 0.58 c 0.22,0 0.44,-0.2 0.44,-0.44 z m 0,-1.38 v -5.06 c 0,0 0.96,-1.12 2.44,-1.12 1.86,0 2.98,1.66 2.98,3.46 0,2.02 -1.3,3.52 -3.08,3.52 -1.28,0 -2.34,-0.8 -2.34,-0.8 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24581"
+ style="stroke-width:0.9375"
+ d="m 741.93357,-211.26283 c 0,1.86 1.24,3.02 2.86,3.02 1.42001,0 2.38001,-0.7 2.86001,-1.18 l 0.18,0.62 c 0.06,0.2 0.14,0.34 0.38,0.34 h 0.38 c 0.24,0 0.44,-0.2 0.44,-0.44 v -5.12 c 0,-2.72 -0.5,-3.88 -2.86,-3.88 -1.52001,0 -2.72001,0.4 -3.18001,0.6 -0.22,0.1 -0.36,0.22 -0.28,0.5 l 0.2,0.54 c 0.08,0.22 0.2,0.34 0.44,0.24 0.42,-0.14 1.48,-0.54 2.74001,-0.54 1.32,0 1.54,0.84 1.52,2.54 0,0 -1,-0.3 -1.98001,-0.3 -2.38,0 -3.7,1.3 -3.7,3.06 z m 1.46,0 c 0,-1.18 0.96,-1.8 2.24,-1.8 0.92001,0 1.66001,0.2 1.96001,0.36 v 1.88 c -0.4,0.6 -1.4,1.24 -2.54001,1.24 -1.02,0 -1.66,-0.74 -1.66,-1.68 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24583"
+ style="stroke-width:0.9375"
+ d="m 752.66764,-216.42283 v 5.62 c 0,1.44 0.36,2.56 2.12,2.56 1.24,0 2.2,-0.46 2.6,-0.74 0.24,-0.16 0.28,-0.3 0.16,-0.6 l -0.18,-0.42 c -0.1,-0.22 -0.22,-0.4 -0.58,-0.18 -0.38,0.24 -0.96,0.6 -1.82,0.6 -0.52,0 -0.82,-0.36 -0.82,-1.32 v -5.52 h 2.72 c 0.26,0 0.46,-0.2 0.46,-0.44 v -0.4 c 0,-0.26 -0.2,-0.44 -0.46,-0.44 h -2.72 v -2.6 c 0,-0.24 -0.18,-0.46 -0.42,-0.44 l -0.62,0.04 c -0.22,0.02 -0.44,0.2 -0.44,0.44 v 2.56 h -1.22 c -0.28,0 -0.46,0.18 -0.46,0.44 v 0.4 c 0,0.24 0.18,0.44 0.46,0.44 z" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path24585"
+ style="stroke-width:0.9375"
+ d="m 759.64576,-208.90283 c 0,0.24 0.2,0.44 0.44,0.44 h 0.6 c 0.22,0 0.44,-0.2 0.44,-0.44 v -6.34 c 0,0 1.08,-1.32 2.84,-1.32 1.42,0 1.94,1.02 1.94,2.78 v 4.88 c 0,0.24 0.2,0.44 0.44,0.44 h 0.62 c 0.22,0 0.44,-0.2 0.44,-0.44 v -4.88 c 0,-2.7 -1.04,-4.12 -3.34,-4.12 -1.86,0 -2.94,1.18 -2.94,1.18 v -5.3 c 0,-0.22 -0.22,-0.44 -0.44,-0.44 h -0.6 c -0.24,0 -0.44,0.22 -0.44,0.44 z" />
+ </g>
+ <text
+ id="text24590"
+ y="-341.72476"
+ x="950.47961"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:41.7038px;line-height:125%;font-family:'Brandon Text';-inkscape-font-specification:'Brandon Text';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill:#636365;fill-opacity:1;stroke:none;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:0.9375"
+ y="-341.72476"
+ x="950.47961"
+ id="tspan24588"
+ sodipodi:role="line">Tests of font face mapping:</tspan></text>
+ <g
+ transform="translate(75.000004)"
+ id="g24599">
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:2.535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path24513"
+ sodipodi:sides="5"
+ sodipodi:cx="1647.4819"
+ sodipodi:cy="-130.26225"
+ sodipodi:r1="79.438942"
+ sodipodi:r2="39.953239"
+ sodipodi:arg1="0.78539816"
+ sodipodi:arg2="1.4137167"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 1703.6537,-74.090438 -49.9217,-16.710466 -42.3146,31.319267 0.4659,-52.642223 -42.8623,-30.56538 50.2097,-15.82422 15.8242,-50.20971 30.5654,42.86232 52.6422,-0.46593 -31.3192,42.31459 z"
+ inkscape:transform-center-x="-2.2206671e-06"
+ inkscape:transform-center-y="1.2617427e-06" />
+ <text
+ id="text24594"
+ y="-322.40106"
+ x="1618.4456"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:41.7038px;line-height:125%;font-family:'Brandon Text';-inkscape-font-specification:'Brandon Text';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill:#636365;fill-opacity:1;stroke:none;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="stroke-width:0.9375"
+ y="-322.40106"
+ x="1618.4456"
+ id="tspan24592"
+ sodipodi:role="line">Tests of non-text objects:</tspan></text>
+ </g>
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot6566"
+ style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:0.01%;font-family:'Brandon Grotesque';-inkscape-font-specification:'Brandon Grotesque, Light';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(753.8551,517.37858)"><flowRegion
+ id="flowRegion6568"><rect
+ style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:30.00000381px;line-height:125%;font-family:'Brandon Grotesque';-inkscape-font-specification:'Brandon Grotesque, Light';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="rect6570"
+ width="551.43768"
+ height="284.185"
+ x="16.676867"
+ y="335.05359" /></flowRegion><flowPara
+ id="flowPara6611"
+ style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:30px;line-height:125%;font-family:'Brandon Grotesque';-inkscape-font-specification:'Brandon Grotesque, Light';text-align:center;writing-mode:lr-tb;text-anchor:middle">This is a test of centered text, one long line of text flowed into a box, centered, and in a different font.</flowPara></flowRoot> <flowRoot
+ transform="matrix(2.2532,-1.16191,1.16191,2.2532,535.21251,556.2299)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="flowRoot36077-6"
+ xml:space="preserve"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion36079-6"><rect
+ style="font-family:sans-serif"
+ y="293.76318"
+ x="58.688175"
+ height="317.35086"
+ width="618.39948"
+ id="rect36081-4" /></flowRegion><flowPara
+ id="flowPara36083-8"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">flow<flowSpan
+ id="flowSpan92598-9"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">St<flowSpan
+ id="flowSpan92741-0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start">yl</flowSpan>es</flowSpan>To<flowSpan
+ id="flowSpan92600-0"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">Check</flowSpan></flowPara></flowRoot> <flowRoot
+ transform="matrix(1.2329448,0,0,1.2329448,-195.87118,762.16345)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="flowRoot98054-7"
+ xml:space="preserve"><flowRegion
+ style="font-family:sans-serif"
+ id="flowRegion98056-8"><rect
+ style="font-family:sans-serif"
+ y="-3.3340657"
+ x="259.82037"
+ height="377.92871"
+ width="212.37242"
+ id="rect98058-5" /></flowRegion><flowPara
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"
+ id="flowPara98070-1"> </flowPara><flowPara
+ id="flowPara110085"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"> </flowPara><flowPara
+ id="flowPara110087"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle"> </flowPara><flowPara
+ id="flowPara110089"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">Flowed text object with multiple returns before start and also       </flowPara><flowPara
+ id="flowPara110091"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">additional sections with more returns</flowPara><flowPara
+ id="flowPara110093"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110095"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">That was just one return, since the paragraph above this one.</flowPara><flowPara
+ id="flowPara110097"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110101"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110099"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">That was two returns, since the paragraph above this one.</flowPara><flowPara
+ id="flowPara110103"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110105"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110107"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">And that, that was three returns.</flowPara><flowPara
+ id="flowPara110109"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle">Just for good measure, this paragraph had a return before the word &quot;just&quot; above. And, we're going to finish with a few returns as well.</flowPara><flowPara
+ id="flowPara110111"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /><flowPara
+ id="flowPara110113"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.4277px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:center;writing-mode:lr-tb;text-anchor:middle" /></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4218"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.347873px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(2.874615,0,0,2.874615,214.65182,-1263.6317)"><flowRegion
+ style="font-family:sans-serif;stroke-width:0.347873px"
+ id="flowRegion4220"><rect
+ style="font-family:HersheySerifBold;stroke-width:0.34787267px"
+ id="rect4222"
+ width="441.57312"
+ height="267.5224"
+ x="269.13397"
+ y="396.44882" /></flowRegion><flowPara
+ style="font-size:20px;line-height:10;font-family:HersheySerifBold;stroke-width:0.347873px"
+ id="flowPara4224">Bold Serif Text</flowPara></flowRoot> <text
+ id="text69"
+ y="1036.6809"
+ x="481.34924"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ xml:space="preserve"><tspan
+ style="font-size:16.25px;line-height:2.55;stroke-width:0.264583"
+ y="1036.6809"
+ x="481.34924"
+ id="tspan67"
+ sodipodi:role="line">Dear Mike,</tspan><tspan
+ id="tspan71"
+ style="font-size:16.25px;line-height:2.55;stroke-width:0.264583"
+ y="1078.1184"
+ x="481.34924"
+ sodipodi:role="line">Thanks for pointing out that we need to handle text</tspan><tspan
+ id="tspan73"
+ style="font-size:16.25px;line-height:2.55;stroke-width:0.264583"
+ y="1119.5559"
+ x="481.34924"
+ sodipodi:role="line">that is shaped like this as well.</tspan><tspan
+ id="tspan75"
+ style="font-size:16.25px;line-height:2.55;stroke-width:0.264583"
+ y="1160.9934"
+ x="481.34924"
+ sodipodi:role="line">Have a great day!</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot134839"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:125%;font-family:'Brandon Text';-inkscape-font-specification:'Brandon Text';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill:#636365;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ transform="matrix(0.9375,0,0,0.9375,-190.88742,970.40032)"><flowRegion
+ id="flowRegion134829"><rect
+ id="rect134827"
+ width="253.56715"
+ height="287.72461"
+ x="344.40945"
+ y="208.34642" /></flowRegion><flowPara
+ id="flowPara134837"
+ style="font-size:21.3333px">Flowed text object with multiple sizes before the <flowSpan
+ style="font-size:64px"
+ id="flowSpan137377">start</flowSpan> and also       additional sections with more returns and non-breaking spaces, which need to be tested.</flowPara><flowPara
+ id="flowPara139442"
+ style="font-size:21.3333px" /><flowPara
+ id="flowPara139444"
+ style="font-size:21.3333px">Hershey Text v 3.0 for Inkscape</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot7"
+ style="font-style:normal;font-weight:normal;font-size:18.6667px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.1405"
+ transform="matrix(0.84457622,0,0,0.9067526,47.462564,44.570655)"><flowRegion
+ id="flowRegion9"
+ style="font-size:18.6667px;stroke-width:1.1405"><rect
+ id="rect11"
+ width="668.19922"
+ height="424.13794"
+ x="-0.38314176"
+ y="1.5294836"
+ style="font-size:18.66666603px;stroke-width:1.14049613" /></flowRegion><flowPara
+ style="stroke-width:1.1405"
+ id="flowPara21846">This is an SVG document provided as an input for testing the Hershey Text extension.</flowPara><flowPara
+ id="flowPara11629"
+ style="stroke-width:1.1405" /><flowPara
+ style="stroke-width:1.1405"
+ id="flowPara21848">The purpose of this new extension is to take a block of flowed text, and replace it with stroke-based engraving fonts. It includes a small selection of such fonts, which need to be in the SVG format. Technically, it can work with any SVG font, even ones that are not stroke-based.</flowPara><flowPara
+ id="flowPara24515"
+ style="stroke-width:1.1405" /><flowPara
+ id="flowPara24517"
+ style="stroke-width:1.1405">This text is in the DOCUMENT ROOT.</flowPara></flowRoot> <flowRoot
+ transform="matrix(2.874615,0,0,2.874615,214.65182,-1167.0132)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.347873px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="flowRoot15954"
+ xml:space="preserve"><flowRegion
+ id="flowRegion15950"
+ style="font-family:sans-serif;stroke-width:0.347873px"><rect
+ y="396.44882"
+ x="269.13397"
+ height="267.5224"
+ width="441.57312"
+ id="rect15948"
+ style="font-family:HersheyScript1;stroke-width:0.34787267px" /></flowRegion><flowPara
+ id="flowPara15952"
+ style="font-size:20px;line-height:10;font-family:HersheyScript1;stroke-width:0.347873px">Scripty text</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot15962"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.347873px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(2.874615,0,0,2.874615,214.65182,-1078.1242)"><flowRegion
+ style="font-family:sans-serif;stroke-width:0.347873px"
+ id="flowRegion15958"><rect
+ style="font-family:EMSAllure;stroke-width:0.34787267px"
+ id="rect15956"
+ width="441.57312"
+ height="267.5224"
+ x="269.13397"
+ y="396.44882" /></flowRegion><flowPara
+ style="font-size:20px;line-height:10;font-family:EMSAllure;stroke-width:0.347873px"
+ id="flowPara15960">Hand-written text</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:63.1208px;line-height:125%;font-family:'Brandon Text';-inkscape-font-specification:'Brandon Text';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill:#636365;fill-opacity:1;stroke:none;stroke-width:0.937499;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ x="503.58365"
+ y="1437.5557"
+ id="text5500"><tspan
+ sodipodi:role="line"
+ id="tspan5498"
+ x="503.58365"
+ y="1437.5557"
+ style="font-size:32.7786px;stroke-width:0.937499">Non-Flowed<tspan
+ style="font-size:87.4095px;stroke-width:0.937499"
+ id="tspan5504">S<tspan
+ style="font-size:15px;stroke-width:0.937499"
+ id="tspan40244">tyle</tspan>s</tspan>To<tspan
+ style="font-size:87.4095px;stroke-width:0.937499"
+ id="tspan5506">Check</tspan></tspan></text>
+ <text
+ id="text4781-0"
+ y="268.83087"
+ x="616.64929"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.279px;line-height:1.25;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.51744"
+ xml:space="preserve"><tspan
+ style="stroke-width:1.51744"
+ sodipodi:role="line"
+ id="tspan7325">Multi-line</tspan><tspan
+ style="stroke-width:1.51744"
+ sodipodi:role="line"
+ id="tspan7327">Text created</tspan><tspan
+ style="stroke-width:1.51744"
+ sodipodi:role="line"
+ id="tspan7329">Without x and y</tspan><tspan
+ style="stroke-width:1.51744"
+ sodipodi:role="line"
+ id="tspan7331">but with sodipodi:role</tspan><tspan
+ style="stroke-width:1.51744"
+ sodipodi:role="line"
+ id="tspan7333">attributes instead.</tspan></text>
+ <text
+ id="text56417"
+ y="264.82803"
+ x="379.84662"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.953px;line-height:1.25;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.997064"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan56407"
+ x="379.84662"
+ y="264.82803"
+ style="stroke-width:0.997064">Multi-line</tspan><tspan
+ sodipodi:role="line"
+ id="tspan56409"
+ x="379.84662"
+ y="284.76929"
+ style="stroke-width:0.997064">Text created</tspan><tspan
+ sodipodi:role="line"
+ id="tspan56411"
+ x="379.84662"
+ y="304.71054"
+ style="stroke-width:0.997064">with tspan elements</tspan><tspan
+ sodipodi:role="line"
+ id="tspan56413"
+ x="379.84662"
+ y="324.65179"
+ style="stroke-width:0.997064">and x and y</tspan><tspan
+ sodipodi:role="line"
+ id="tspan56415"
+ x="379.84662"
+ y="344.59305"
+ style="stroke-width:0.997064">positions</tspan></text>
+</svg>
diff --git a/share/extensions/tests/data/svg/hershey_trivial_input.svg b/share/extensions/tests/data/svg/hershey_trivial_input.svg
new file mode 100755
index 0000000..946a616
--- /dev/null
+++ b/share/extensions/tests/data/svg/hershey_trivial_input.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 744.09448819 1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="1.0alpha (8a5469a, 2019-05-29)"
+ sodipodi:docname="hershey_trivial_input.svg">
+ <style
+ id="style19"></style>
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ inkscape:document-rotation="0"
+ inkscape:window-maximized="0"
+ inkscape:window-y="23"
+ inkscape:window-x="0"
+ inkscape:window-height="993"
+ inkscape:window-width="1535"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="256.44843"
+ inkscape:cx="217.50453"
+ inkscape:zoom="3.964414"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <use
+ height="100%"
+ width="100%"
+ transform="translate(-13.816235,24.138247)"
+ id="use1116"
+ xlink:href="#A"
+ y="0"
+ x="0" />
+ <use
+ height="100%"
+ width="100%"
+ transform="translate(-10.028187,24.138247)"
+ id="use1118"
+ xlink:href="#B"
+ y="0"
+ x="0" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#text31"
+ id="DEAD-LINK"
+ transform="translate(10.292023,-24.880699)"
+ width="100%"
+ height="100%"
+ style="fill:#ffffff;fill-opacity:0" />
+ <flowRoot
+ transform="translate(-18.75)"
+ xml:space="preserve"
+ id="A"
+ style="font-style:normal;font-weight:normal;font-size:37.5px;font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#e10000;stroke-width:0.9375;stroke-opacity:1"><flowRegion
+ id="flowRegion23"
+ style="fill:#ffffff;fill-opacity:1;stroke:#e10000;stroke-width:0.9375;stroke-opacity:1"><rect
+ id="rect25"
+ width="121.08263"
+ height="52.065529"
+ x="182.22934"
+ y="166.4886"
+ style="fill:#ffffff;fill-opacity:1;stroke:#e10000;stroke-width:0.878906;stroke-opacity:1" /></flowRegion><flowPara
+ style="stroke-width:0.9375"
+ id="flowPara27">Flow</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:37.50000000000000000px;font-family:sans-serif;fill:#ffffff;fill-opacity:1;stroke:#e10000;stroke-width:0.9375;stroke-opacity:1;"
+ x="156.80199"
+ y="308.15527"
+ id="B"><tspan
+ sodipodi:role="line"
+ id="tspan29"
+ x="156.80199"
+ y="308.15527"
+ style="fill:#ffffff;fill-opacity:1;stroke:#e10000;stroke-width:0.9375;stroke-opacity:1;">Text</tspan></text>
+ <use
+ x="0"
+ y="0"
+ xlink:href="#A"
+ id="use1120"
+ transform="translate(13.816235,-24.138247)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#B"
+ id="use1122"
+ transform="translate(9.8485053,-24.138247)"
+ width="100%"
+ height="100%" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/hpgl_multipen.svg b/share/extensions/tests/data/svg/hpgl_multipen.svg
new file mode 100644
index 0000000..d27add9
--- /dev/null
+++ b/share/extensions/tests/data/svg/hpgl_multipen.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297">
+ <g
+ inkscape:label="pen1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#ff0000"
+ width="19.938889"
+ height="21.119028"
+ x="39.029922"
+ y="7.9519877" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Pen 2 ">
+ <rect
+ style="fill:none;stroke:#ff0000"
+ width="19.938889"
+ height="21.119028"
+ x="68.276741"
+ y="7.9519863" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="pEn3">
+ <rect
+ style="fill:none;stroke:#ff0000"
+ width="19.938889"
+ height="21.119028"
+ x="10.536871"
+ y="7.9519877" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/images.svg b/share/extensions/tests/data/svg/images.svg
new file mode 100644
index 0000000..3af6c56
--- /dev/null
+++ b/share/extensions/tests/data/svg/images.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="images.svg"
+ inkscape:version="1.0alpha2 (52cc60498f, 2019-06-14)"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 0.79374997 0.79375003"
+ height="3"
+ width="3">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ units="px"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="4.3003663"
+ inkscape:cx="6.7289885"
+ inkscape:zoom="44.500568"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <image
+ xlink:href="img/green.png"
+ y="0.26458332"
+ x="0.26458332"
+ width="0.26458332"
+ height="0.26458332"
+ preserveAspectRatio="none"
+ id="image174"
+ style="opacity:1;stop-opacity:1" />
+
+ <image
+ style="opacity:1;stop-opacity:1"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAA
+GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAA1JREFUCJljMEld8h8ABEsCPWzH
+RAsAAAAASUVORK5CYII=
+"
+ height="0.31750003"
+ width="0.31750003"
+ x="0.38895562"
+ y="0.38188145"
+ id="embeded_image01" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/images_multiple.svg b/share/extensions/tests/data/svg/images_multiple.svg
new file mode 100644
index 0000000..53b14f2
--- /dev/null
+++ b/share/extensions/tests/data/svg/images_multiple.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" sodipodi:docname="images.svg" inkscape:version="1.0alpha2 (52cc60498f, 2019-06-14)" id="svg8" version="1.1" viewBox="0 0 0.79374997 0.79375003" height="3" width="3">
+ <defs id="defs2" />
+ <sodipodi:namedview units="px" showgrid="false" inkscape:document-rotation="0" inkscape:current-layer="layer1" inkscape:document-units="px" inkscape:cy="4.3003663" inkscape:cx="6.7289885" inkscape:zoom="44.500568" inkscape:pageshadow="2" inkscape:pageopacity="0.0" borderopacity="1.0" bordercolor="#666666" pagecolor="#ffffff" id="base" />
+ <metadata id="metadata5">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
+ <image xlink:href="img/green.png" y="0.26458332" x="0.26458332" width="0.26458332" height="0.26458332" preserveAspectRatio="none" id="image174" style="opacity:1;stop-opacity:1" />
+
+ <image style="opacity:1;stop-opacity:1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAA GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAA1JREFUCJljMEld8h8ABEsCPWzH RAsAAAAASUVORK5CYII=
+" height="0.31750003" width="0.31750003" x="0.38895562" y="0.38188145" id="embedded_image01" />
+ <image style="opacity:1;stop-opacity:1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAA GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAA1JREFUCJljMEld8h8ABEsCPWzH RAsAAAAASUVORK5CYII=
+" height="0.31750003" width="0.31750003" x="0.38895562" y="0.38188145" id="embedded_image02" />
+ <image style="opacity:1;stop-opacity:1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAA GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAA1JREFUCJljMEld8h8ABEsCPWzH RAsAAAAASUVORK5CYII=
+" height="0.31750003" width="0.31750003" x="0.38895562" y="0.38188145" id="embedded_image03" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/img/color_overlay_a.png b/share/extensions/tests/data/svg/img/color_overlay_a.png
new file mode 100644
index 0000000..6a4382c
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/color_overlay_a.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/color_overlay_b.png b/share/extensions/tests/data/svg/img/color_overlay_b.png
new file mode 100644
index 0000000..a231a52
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/color_overlay_b.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/color_pad_a.png b/share/extensions/tests/data/svg/img/color_pad_a.png
new file mode 100644
index 0000000..437f6a3
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/color_pad_a.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/color_pad_b.png b/share/extensions/tests/data/svg/img/color_pad_b.png
new file mode 100644
index 0000000..32f6bfc
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/color_pad_b.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/color_pad_c.png b/share/extensions/tests/data/svg/img/color_pad_c.png
new file mode 100644
index 0000000..7f550cc
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/color_pad_c.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/green.png b/share/extensions/tests/data/svg/img/green.png
new file mode 100644
index 0000000..bb606ff
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/green.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/linecap.png b/share/extensions/tests/data/svg/img/linecap.png
new file mode 100644
index 0000000..5ffc248
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/linecap.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/img/subfolder/linecap.png b/share/extensions/tests/data/svg/img/subfolder/linecap.png
new file mode 100644
index 0000000..5ffc248
--- /dev/null
+++ b/share/extensions/tests/data/svg/img/subfolder/linecap.png
Binary files differ
diff --git a/share/extensions/tests/data/svg/inkweb-debug.js b/share/extensions/tests/data/svg/inkweb-debug.js
new file mode 100644
index 0000000..a79c460
--- /dev/null
+++ b/share/extensions/tests/data/svg/inkweb-debug.js
@@ -0,0 +1,367 @@
+/*
+** InkWeb Debugger - help the development with InkWeb.
+**
+** Copyright (C) 2009 Aurelio A. Heckert, aurium (a) gmail dot com
+**
+** ********* Bugs and New Fetures *************************************
+** If you found any bug on this script or if you want to propose a
+** new feature, please report it in the inkscape bug tracker
+** https://bugs.launchpad.net/inkscape/+filebug
+** and assign that to Aurium.
+** ********************************************************************
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU Lesser General Public License as published
+** by the Free Software Foundation, either version 3 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public License
+** along with this program. If not, see <http://www.gnu.org/licenses/>.
+**
+** ********************************************************************
+**
+** This script extends InkWeb with methods like log() and viewProperties().
+** So, you must to call this script after the inkweb.js load.
+*/
+
+InkWeb.debugVersion = 0.1;
+
+// Prepare InkWeb Debug:
+(function (bli, xyz) {
+ // Add logging calls to all InkWeb methods:
+ for ( var att in InkWeb ) {
+ if ( typeof(InkWeb[att]) == "function" ) {
+ var code = InkWeb[att].toString()
+ beforeCode = 'this.log(this.__callMethodInfo("'+att+'", arguments));\ntry {';
+ afterCode = '} catch(e) { this.log( e, "Ups... There is a problem in InkWeb.'+att+'()" ) }';
+ code = code
+ .replace( /^(function [^{]+[{])/, "$1\n"+ beforeCode +"\n" )
+ .replace( /[}]$/, ";\n"+ afterCode +"\n}" );
+ eval( "InkWeb."+att+" = "+ code );
+ //alert( InkWeb[att] )
+ }
+ }
+})(123,456);
+
+InkWeb.__callMethodInfo = function (funcName, arg) {
+ var func = arg.callee;
+ var str = 'Called InkWeb.'+funcName+'() with:'
+ if ( ! func.argList ) {
+ func.argList = func.toString()
+ .replace( /^function [^(]*\(([^)]*)\)(.|\s)*$/, "$1" )
+ .split( /,\s*/ );
+ }
+ for ( var a,i=0; a=func.argList[i]; i++ ) {
+ str += "\n"+ a +" = "+ this.serialize( arg[i], {recursionLimit:2} );
+ }
+ return str;
+}
+
+
+InkWeb.copySerializeConf = function (conf) {
+ return {
+ recursionStep: conf.recursionStep,
+ recursionLimit: conf.recursionLimit,
+ showTagElements: conf.showTagElements
+ }
+}
+
+InkWeb.serialize = function (v, conf) {
+ try {
+ if ( ! conf ) { conf = {} }
+ if ( ! conf.showTagElements ) { conf.showTagElements = false }
+ if ( ! conf.recursionLimit ) { conf.recursionLimit = 10 }
+ if ( ! conf.recursionStep ) { conf.recursionStep = 0 }
+ if ( conf.recursionLimit == 0 ) {
+ return '"<<recursion limit>>"';
+ }
+ conf.recursionLimit--;
+ conf.recursionStep++;
+ switch ( typeof(v) ) {
+ case "undefined":
+ v = "undefined";
+ break;
+ case "string":
+ v = '"'+ v
+ .replace( /\n/g, "\\n" )
+ .replace( /\r/g, "\\r" )
+ .replace( /\t/g, "\\t" )
+ .replace( /"/g, '"' ) +
+ '"';
+ break;
+ case "boolean":
+ case "number":
+ case "function":
+ v = v.toString();
+ break;
+ case "object":
+ if ( v == null ) {
+ v = "null";
+ } else {
+ if ( v.constructor == Array ) {
+ try {
+ v = this.__serializeArray(v, conf);
+ } catch(e) {
+ this.log( e, "InkWeb.serialize(): Forced recursion limit in" +
+ " recursionLimit="+ conf.recursionLimit +
+ " and recursionStep="+ conf.recursionStep
+ );
+ v += '"<<forced recursion limit>>"'
+ }
+ } else {
+ // A Hash Object
+ if ( v.tagName && ! conf.showTagElements ) {
+ // Tags are not allowed.
+ v = '"<'+ v.tagName +' id=\\"'+ v.id +'\\">"';
+ } else {
+ // Ok, serialize this object:
+ try {
+ v = this.__serializeObject(v, conf);
+ } catch(e) {
+ this.log( e, "InkWeb.serialize(): Forced recursion limit in" +
+ " recursionLimit="+ conf.recursionLimit +
+ " and recursionStep="+ conf.recursionStep
+ );
+ v += '"<<forced recursion limit>>"'
+ }
+ }
+ }
+ }
+ break;
+ default:
+ v = '"<<unknown type '+typeof(v)+' : '+v+'>>"';
+ }
+ return v;
+ } catch(e) {
+ this.log( e, "Ups... There is a problem in InkWeb.serialize()." );
+ }
+}
+
+InkWeb.__serializeArray = function (v, conf) {
+ try {
+ var vStr = "[ ";
+ var size = v.length;
+ for ( var i=0; i<size; i++ ) {
+ if ( i>0 ) { vStr += ", " }
+ vStr += this.serialize(v[i], this.copySerializeConf(conf));
+ }
+ return vStr +" ]";
+ } catch(e) {
+ this.log( e, "Ups... There is a problem in InkWeb.__serializeArray()." );
+ }
+}
+
+InkWeb.__serializeObject = function (obj, conf) {
+ try {
+ var vStr = "{ ";
+ var first = true;
+ for ( var att in obj ) {
+ if ( !first ) { vStr += ", " }
+ vStr += this.serialize(att) +':'+
+ this.serialize( obj[att], this.copySerializeConf(conf) );
+ first = false;
+ }
+ return vStr +" }";
+ } catch(e) {
+ this.log( e, "Ups... There is a problem in InkWeb.__serializeObject()." );
+ }
+}
+
+// Allow log configuration:
+InkWeb.mustLog = {
+ error: true,
+ warning: true,
+ sequence: true
+ };
+
+// This will keep the log information:
+InkWeb.__log__ = [];
+
+InkWeb.log = function (type, msg) {
+ /* This method register what was happen with InkWeb
+ ** ( if mustLog allows that )
+ **
+ ** --- Usage ---
+ ** this.log( <"sequence"|"warning"|"warn"|errorObject>, <"logMessage"> );
+ ** this.log( <"logMessage"> ); // only for sequences
+ **
+ ** --- Examples ---
+ ** Sequence log:
+ ** function foo (bar) {
+ ** InkWeb.log( 'Call function foo with argument bar="'+bar+'"' );
+ **
+ ** Warning log:
+ ** if ( foo == bar ) {
+ ** foo = other;
+ ** InkWeb.log( "warn", "foo must not be bar." );
+ **
+ ** Error log:
+ ** try { ... some hard thing ... }
+ ** catch (e) { InkWeb.log( e, "Trying to do some hard thing." ) }
+ */
+ if ( this.mustLog ) {
+ if( type.constructor == ReferenceError ) {
+ // in a error logging the type argument is the error object.
+ var error = type;
+ type = "error";
+ this.addViewLogBt();
+ }
+ if( type == "warn" ) {
+ // that allows a little simplify in the log call.
+ type = "warning";
+ }
+ if( msg == undefined ) {
+ // that allows to log a sequence without tos say the type.
+ msg = type;
+ type = "sequence";
+ }
+ var logSize = this.__log__.length
+ if ( logSize > 0 &&
+ this.__log__[logSize-1].type == type &&
+ this.__log__[logSize-1].msg == msg ) {
+ this.__log__[logSize-1].happens++
+ } else {
+ if ( type == "error" && this.mustLog.error ) {
+ this.__log__[logSize] = this.__logError( error, msg )
+ }
+ if ( type == "warning" && this.mustLog.warning ) {
+ this.__log__[logSize] = this.__logWarning( msg )
+ }
+ if ( type == "sequence" && this.mustLog.sequence ) {
+ this.__log__[logSize] = this.__logSequence( msg )
+ }
+ }
+ }
+}
+
+InkWeb.__logError = function ( error, msg ) {
+ return { type:"error", date:new Date(), msg:msg, error:error, happens:1 };
+}
+
+InkWeb.__logWarning = function ( msg ) {
+ return { type:"warning", date:new Date(), msg:msg, happens:1 };
+}
+
+InkWeb.__logSequence = function ( msg ) {
+ return { type:"sequence", date:new Date(), msg:msg, happens:1 };
+}
+
+InkWeb.logToString = function (conf) {
+ /* Show the log in a formatted string.
+ ** conf attributes:
+ ** format: a string to format the log items.
+ ** formatError: to format the error log items.
+ ** sep: the log items separator string.
+ ** format variables:
+ ** $F: the item date in the format YYYY-MM-DD
+ ** $T: the item time in the format HH:MM:SS
+ ** $type: the log type
+ ** $logmsg: the text argument in the log call
+ ** $times: how much times this item happens in sequence
+ ** $error: the error text (if this is a error item)
+ ** $index: the position of the item in the log list
+ ** $oddeven: return odd or even based in the index.
+ */
+ if (!conf) { conf = {} }
+ if (!conf.sep) { conf.sep = "\n\n" }
+ if (!conf.format) { conf.format = "$F $T - $type - $logmsg - Happens $times." }
+ if (!conf.formatError) { conf.formatError = "$F $T - ERROR - $logmsg - Happens $times.\n$error" }
+ /* * * Helper * * */
+ function _2d(num) {
+ return ( ( num < 10 )? "0"+num : ""+num )
+ }
+ function _2dMonth(date) {
+ var m = date.getMonth() + 1;
+ return _2d( m )
+ }
+ var str = "";
+ var logSize = this.__log__.length;
+ if ( logSize == 0 ) {
+ str = "There are no errors.";
+ }
+ // View all items to mount the log string:
+ for ( var item,pos=0; item=this.__log__[pos]; pos++ ) {
+ var d = item.date;
+ // Add log line, converting variables:
+ var line = ( (item.type=="error")? conf.formatError : conf.format );
+ str += line
+ .replace( /\$index/g, pos )
+ .replace( /\$oddeven/g, (pos%2 == 1)? "odd" : "even" )
+ .replace( /\$type/g, item.type )
+ .replace( /\$logmsg/g, item.msg )
+ .replace( /\$error/g, (item.error)? item.error.message : "" )
+ .replace( /\$times/g, (item.happens>1)? item.happens+" times" : "one time" )
+ .replace( /\$F/g, d.getFullYear() +"-"+ _2dMonth(d) +"-"+ _2d(d.getDate()) )
+ .replace( /\$T/g, _2d(d.getHours()) +":"+ _2d(d.getMinutes()) +":"+ _2d(d.getSeconds()) )
+ // Add separator:
+ if ( pos < (logSize-1) ) { str += conf.sep }
+ }
+ return str;
+}
+
+InkWeb.addViewLogBt = function () {
+ var svg = document.getElementsByTagName("svg")[0];
+ if ( this.__viewLogBt ) {
+ svg.appendChild( this.__viewLogBt );
+ } else {
+ var g = this.el( "g", { onclick: "InkWeb.openLogWindow()", parent: svg } );
+ var rect = this.el( "rect", { x: 10, y: 10, width: 60, height: 17, ry: 5,
+ style: "fill:#C00; stroke:#800; stroke-width:2",
+ parent: g } );
+ var text = this.el( "text", { x: 40, y: 22, text: "View Log",
+ style: "fill:#FFF; font-size:10px;" +
+ "font-family:sans-serif;" +
+ "text-anchor:middle; text-align:center",
+ parent: g } );
+ this.__viewLogBt = g;
+ }
+}
+
+InkWeb.__openFormatedWindow = function (bodyHTML) {
+ var win = window.open("","_blank","width=500,height=500,scrollbars=yes");
+ var html =
+ '<html><head><title>InkWeb</title>' +
+ '<style type="text/css">' +
+ 'body { font-family:sans-serif; font-size:12px; padding:5px; margin:0px; }' +
+ 'h1 { font-size:13px; text-align:center; }' +
+ '.error { color: #C00 }' +
+ '.warning { color: #B90 }' +
+ '.sequence { color: #06A }' +
+ 'table { border: 2px solid #ABC }' +
+ 'th, td { padding:1px 2px; font-size:12px }' +
+ 'th { text-align:center; background:#CCC; color:#FFF }' +
+ '.odd { background: #F0F0F0 }' +
+ '.even { background: #F8F8F8 }' +
+ '</style><body>'+ bodyHTML +'</body></html>';
+ win.document.write(html);
+ win.document.close();
+ return win;
+}
+
+InkWeb.openLogWindow = function () {
+ var html = '<h1>InkWeb Log</h1>\n' +
+ '<table border="0" width="100%" cellpadding="2" cellspacing="0"><tr>\n' +
+ '<tr><th>Time</th><th>Message</th><th><small>Happens</small></th><tr>\n' +
+ this.logToString({
+ format: '<tr class="$type $oddeven" title="$type">' +
+ '<td>$T</td><td>$logmsg</td><td align="right">$times</td></tr>',
+ formatError: '<tr class="error $oddeven" title="ERROR">' +
+ '<td>$T</td><td>$logmsg</td><td align="right">$times</td></tr>\n'+
+ '<tr class="error $oddeven"><td colspan="3"><code>$error</code></td></tr>',
+ sep: '\n</tr><tr>\n'
+ }) +
+ '\n</tr></table>'
+ var win = this.__openFormatedWindow( html );
+ win.document.title = "InkWeb Log"
+}
+
+
+InkWeb.viewProperties = function () {
+ // Display object properties.
+ this.__openFormatedWindow( "coming soon..." );
+}
diff --git a/share/extensions/tests/data/svg/inkwebjs-move.svg b/share/extensions/tests/data/svg/inkwebjs-move.svg
new file mode 100644
index 0000000..b4aa50f
--- /dev/null
+++ b/share/extensions/tests/data/svg/inkwebjs-move.svg
@@ -0,0 +1,128 @@
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="800" height="450">
+ <style type="text/css">
+ text { font-family:sans-serif; font-size:11px; text-anchor:middle; text-align:center }
+ .title tspan { font-weight: bold }
+ .pos { opacity: 0.3 }
+ .started { fill:#C80 }
+ </style>
+ <script type="text/javascript" xlink:href="../inkweb.js" />
+ <script type="text/javascript" xlink:href="inkweb-debug.js" />
+ <rect x="0%" y="0%" width="100%" height="100%" style="fill:#EEE; stroke:#999; stroke-width:4px" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-1" x="125" y="26" class="title">
+ <tspan>Test 1</tspan> - from left to right </text>
+ <text class="pos" x="80" y="80"> Start </text>
+ <circle id="t1-start" cx="80" cy="50" r="20" fill="#C00" opacity="0.2" />
+ <text class="pos" x="170" y="80"> End </text>
+ <circle id="t1-end" cx="170" cy="50" r="20" fill="#C00" opacity="0.2" />
+ <!-- The element to move -->
+ <circle id="t1-elem" cx="80" cy="50" r="20" fill="#C00" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-2" x="325" y="26" class="title">
+ <tspan>Test 2</tspan> - from right to left</text>
+ <text class="pos" x="370" y="80"> Start </text>
+ <circle id="t2-start" cx="370" cy="50" r="20" fill="#0A0" opacity="0.2" />
+ <text class="pos" x="280" y="80"> End </text>
+ <circle id="t2-end" cx="280" cy="50" r="20" fill="#0A0" opacity="0.2" />
+ <!-- The element to move -->
+ <circle id="t2-elem" cx="370" cy="50" r="20" fill="#0A0" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-3" x="125" y="120" class="title">
+ <tspan>Test 3</tspan> - pre-translated </text>
+ <text class="pos" x="80" y="190"> Start </text>
+ <path id="t3-start" fill="#C00" opacity="0.2" transform="translate(30,10)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <text class="pos" x="170" y="190"> End </text>
+ <path id="t3-end" fill="#C00" opacity="0.2" transform="translate(120,10)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <!-- The element to move -->
+ <path id="t3-elem" fill="#C00" transform="translate(30,10)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-4" x="350" y="120" class="title">
+ <tspan>Test 4</tspan> - pre-translated and scaled </text>
+ <text class="pos" x="300" y="190"> Start </text>
+ <path id="t4-start" fill="#C00" opacity="0.2"
+ transform="translate(235,-45) scale(1.4)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <text class="pos" x="400" y="190"> End </text>
+ <path id="t4-end" fill="#C00" opacity="0.2"
+ transform="translate(335,-45) scale(1.4)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <!-- The element to move -->
+ <path id="t4-elem" fill="#C00"
+ transform="translate(235,-45) scale(1.4)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-5" x="600" y="120" class="title">
+ <tspan>Test 5</tspan> - pre-translated and rotated </text>
+ <text class="pos" x="550" y="190"> Start </text>
+ <path id="t5-start" fill="#C00" opacity="0.2"
+ transform="translate(500,0) rotate(-15 90 140)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <text class="pos" x="650" y="190"> End </text>
+ <path id="t5-end" fill="#C00" opacity="0.2"
+ transform="translate(600,0) rotate(-15 90 140)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <!-- The element to move -->
+ <path id="t5-elem" fill="#C00"
+ transform="translate(500,0) rotate(-15 90 140)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <text id="test-6" x="125" y="220" class="title">
+ <tspan>Test 6</tspan> - with a transformation matrix </text>
+ <text class="pos" x="80" y="290"> Start </text>
+ <path id="t6-start" fill="#C00" opacity="0.2"
+ transform="matrix(1.2 0 -0.5 1.2 95 80)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <text class="pos" x="170" y="290"> End </text>
+ <path id="t6-end" fill="#C00" opacity="0.2"
+ transform="matrix(1.2 0 -0.5 1.2 185 80)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+ <!-- The element to move -->
+ <path id="t6-elem" fill="#C00"
+ transform="matrix(1.2 0 -0.5 1.2 95 80)"
+ d="M30,130 L60,130 L60,120 L70,140 L60,160 L60,150 L30,150" />
+
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+ <script type="text/javascript">
+
+ var titles = document.getElementsByClassName("title")
+ for ( var title,i=0; title=titles[i]; i++ ) {
+ title.className.baseVal += " started";
+ testeNum = title.id.replace( /^.*-/, "" );
+ var el = document.getElementById( "t"+testeNum+"-elem" );
+ var start = document.getElementById( "t"+testeNum+"-start" ).getBBox();
+ var end = document.getElementById( "t"+testeNum+"-end" ).getBBox();
+ InkWeb.moveElTo( { el:el, x:end.x, y:end.y } );
+ }
+
+ function testLog() {
+ try{ foo.lalala() }
+ catch(e){ InkWeb.log(e, "foo.lalala() is wrong?") }
+
+ InkWeb.log("This is a sequence log.");
+
+ InkWeb.log("warn", "Warning! Warning!!!");
+ }
+ setTimeout("testLog()", 2000);
+
+ </script>
+
+</svg>
diff --git a/share/extensions/tests/data/svg/interp_shapes.svg b/share/extensions/tests/data/svg/interp_shapes.svg
new file mode 100644
index 0000000..eaff106
--- /dev/null
+++ b/share/extensions/tests/data/svg/interp_shapes.svg
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="412.29788mm"
+ height="582.05017mm"
+ viewBox="0 0 412.29789 582.05017"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ sodipodi:docname="interp_shapes.svg">
+ <defs
+ id="defs2">
+ <linearGradient
+ id="linearGradient877"
+ inkscape:collect="always">
+ <stop
+ id="stop873"
+ offset="0"
+ style="stop-color:#008000;stop-opacity:1" />
+ <stop
+ style="stop-color:#7b0000;stop-opacity:1"
+ offset="0.48378384"
+ id="stop879" />
+ <stop
+ id="stop875"
+ offset="1"
+ style="stop-color:rgb(0, 0, 255);stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient845">
+ <stop
+ style="stop-color:#008000;stop-opacity:1"
+ offset="0"
+ id="stop841" />
+ <stop
+ style="stop-color:blue;stop-opacity:1"
+ offset="1"
+ id="stop843" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient845"
+ id="linearGradient847"
+ x1="13.096875"
+ y1="138.45702"
+ x2="13.096875"
+ y2="104.24652"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(4.4701433,54.879607)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient845"
+ id="linearGradient855"
+ x1="184.80772"
+ y1="102.37889"
+ x2="184.80772"
+ y2="136.77472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(151.22404,57.492066)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient845"
+ id="linearGradient863"
+ x1="-1.3985118"
+ y1="176.12321"
+ x2="40.708035"
+ y2="176.12321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1.9554488,127.31579)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient877"
+ id="linearGradient871"
+ x1="175.11636"
+ y1="193.24553"
+ x2="205.50565"
+ y2="154.314"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(155.045,129.47026)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient877"
+ id="radialGradient887"
+ cx="16.167852"
+ cy="249.2552"
+ fx="16.167852"
+ fy="249.2552"
+ r="36.377525"
+ gradientTransform="matrix(1,0,0,0.99765142,1.5314531,204.30066)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient845"
+ id="radialGradient897"
+ cx="193.54523"
+ cy="249.20023"
+ fx="193.54523"
+ fy="249.20023"
+ r="39.397575"
+ gradientTransform="matrix(1,0,0,1.0243274,150.67686,197.70785)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.24748737"
+ inkscape:cx="960.55908"
+ inkscape:cy="968.73534"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ fit-margin-top="5"
+ fit-margin-left="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(23.678219,83.72371)">
+ <path
+ style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 9.7209163,-78.632799 25.595916,-61.850656 9.7209163,-44.236966"
+ id="path1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 352.20047,-78.632799 -15.87499,16.782143 15.87499,17.61369"
+ id="path2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:#ff0000;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 9.7209153,40.095939 25.595916,56.878079 9.7209153,74.491769"
+ id="path4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:#0000ff;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 361.41883,49.314289 344.63669,65.189299 327.023,49.314289"
+ id="path3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:url(#linearGradient855);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 336.13003,159.30516 15.87501,16.78216 -15.87501,17.61369"
+ id="path6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:url(#linearGradient847);stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 17.699306,158.73377 v 35.52977"
+ id="path5"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient863);fill-opacity:1;stroke:#000000;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M -3.0893787,283.40627 H 38.487996 v 40.06548 H -3.0893787 Z"
+ id="path8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient871);fill-opacity:1;stroke:#000000;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 368.97953,303.43901 a 24.757439,24.757439 0 0 1 -24.75744,24.75744 24.757439,24.757439 0 0 1 -24.75745,-24.75744 24.757439,24.757439 0 0 1 24.75745,-24.75744 24.757439,24.757439 0 0 1 24.75744,24.75744 z"
+ id="path7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#radialGradient887);fill-opacity:1;stroke:#000000;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:transform-center-x="0.84107606"
+ inkscape:transform-center-y="1.0141478"
+ d="m 22.320142,488.998 -12.6461927,-12.53232 -17.7372665,1.54089 1.9133905,-17.70096 -12.2637243,-12.90683 15.0321443,-9.54043 2.44466997,-17.63543 16.83138573,5.80424 15.312163,-9.0842 5.95626,16.7782 16.64929,6.30763 -9.40406,15.11782 5.44916,16.94968 -17.68292,2.07343 z"
+ id="path9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#radialGradient897);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332"
+ d="m 340.42091,452.01132 c 1.00441,2.06568 -2.28895,2.37306 -3.43329,1.6694 -3.10108,-1.90688 -2.15382,-6.39585 0.0945,-8.53597 4.02172,-3.82817 10.46972,-2.21056 13.63864,1.8584 4.65051,5.97136 2.2891,14.60614 -3.62229,18.74132 -7.87896,5.51154 -18.76571,2.37814 -23.844,-5.38619 -6.3905,-9.77061 -2.47286,-22.93654 7.15008,-28.94667 11.65466,-7.27907 27.11377,-2.5709 34.04935,8.91397 8.17333,13.53453 2.67105,31.295 -10.67787,39.15203 -15.41185,9.07125 -35.47888,2.77259 -44.2547,-12.44176 -9.97164,-17.28752 -2.87512,-39.66464 14.20565,-49.35738 19.16204,-10.87379 43.85176,-2.97835 54.46006,15.96955 11.77722,21.03575 3.0821,48.03989 -17.73344,59.56273"
+ id="path10"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/markers.svg b/share/extensions/tests/data/svg/markers.svg
new file mode 100644
index 0000000..bf9ca6f
--- /dev/null
+++ b/share/extensions/tests/data/svg/markers.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg893"
+ height="106.22343"
+ width="159.59895"
+ version="1.1">
+ <defs
+ id="defs4">
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lend"
+ refX="0"
+ refY="0"
+ orient="auto">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2112" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lstart"
+ refX="0"
+ refY="0"
+ orient="auto">
+ <path
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2109" />
+ </marker>
+ </defs>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ id="dimension"
+ d="M 1.6186702,105.1461 157.98028,1.0773298"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)" />
+</svg>
diff --git a/share/extensions/tests/data/svg/mesh.svg b/share/extensions/tests/data/svg/mesh.svg
new file mode 100644
index 0000000..cbf42af
--- /dev/null
+++ b/share/extensions/tests/data/svg/mesh.svg
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="129.46957mm"
+ height="244.53642mm"
+ viewBox="0 0 129.46958 244.53642"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.0alpha2 (7d0ce1c2cf, 2019-07-29)"
+ sodipodi:docname="mesh.svg">
+ <defs
+ id="defs2">
+ <meshgradient
+ gradientTransform="translate(-8.0786691,-69.306275)"
+ inkscape:collect="always"
+ id="meshgradient136"
+ gradientUnits="userSpaceOnUse"
+ x="53.027382"
+ y="82.673904">
+ <meshrow
+ id="meshrow12882">
+ <meshpatch
+ id="meshpatch12884">
+ <stop
+ path="c 14.3267,0 28.6534,0 42.9801,0"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12886" />
+ <stop
+ path="c 0,12.4193 -5.49795,38.9296 -5.49795,51.349"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12888" />
+ <stop
+ path="c -14.3267,0.000304944 -23.1553,-14.0909 -37.482,-14.0909"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12890" />
+ <stop
+ path="c 0,-12.4193 0,-24.8387 -0.00015,-37.2581"
+ style="stop-color:#75507b;stop-opacity:1"
+ id="stop12892" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12894">
+ <stop
+ path="c 14.3267,0 28.6534,0 42.9801,0"
+ id="stop12896" />
+ <stop
+ path="c 0,12.4193 15.5319,9.66032 15.5319,22.0797"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12898" />
+ <stop
+ path="c -14.3267,-7.11184e-05 -49.6832,29.2692 -64.01,29.2693"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12900" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12902">
+ <stop
+ path="c 14.3267,0 28.6534,0 42.9801,0"
+ id="stop12904" />
+ <stop
+ path="c 0,12.4193 0,24.8387 0,37.258"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12906" />
+ <stop
+ path="c -14.3267,0 -13.1216,-15.1784 -27.4482,-15.1783"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12908" />
+ </meshpatch>
+ </meshrow>
+ <meshrow
+ id="meshrow12910">
+ <meshpatch
+ id="meshpatch12912">
+ <stop
+ path="c 1.67781e-05,12.4193 26.2868,-1.18414 13.4216,12.5447"
+ id="stop12914" />
+ <stop
+ path="c -15.0543,14.5253 -36.577,10.6222 -50.9037,10.6222"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12916" />
+ <stop
+ path="c 0,-12.4193 0,-24.8387 0.0001,-37.2578"
+ style="stop-color:#5c3566;stop-opacity:1"
+ id="stop12918" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12920">
+ <stop
+ path="c -3.49494e-05,12.4193 1.58657,32.3389 1.58667,44.7583"
+ id="stop12922" />
+ <stop
+ path="c -14.3267,-1.01513e-05 -37.8486,-2.94455 -52.175,-2.9443"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12924" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12926">
+ <stop
+ path="c 0,12.4193 0,24.8387 0,37.258"
+ id="stop12928" />
+ <stop
+ path="c -14.3267,0 -11.5349,-7.67804 -25.8615,-7.678"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12930" />
+ </meshpatch>
+ </meshrow>
+ <meshrow
+ id="meshrow12932">
+ <meshpatch
+ id="meshpatch12934">
+ <stop
+ path="c 2.62829e-06,12.4193 -7.92356,35.461 -7.92356,47.8803"
+ id="stop12936" />
+ <stop
+ path="c -14.3267,0 -28.6534,0 -42.9801,0"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12938" />
+ <stop
+ path="c 0,-12.4193 0,-24.8387 -4e-05,-37.2581"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12940" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12942">
+ <stop
+ path="c -0.000121655,12.4193 -17.1186,32.5167 -17.1186,44.936"
+ id="stop12944" />
+ <stop
+ path="c -14.3267,0 -28.6534,0 -42.98,0"
+ style="stop-color:#204a87;stop-opacity:1"
+ id="stop12946" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch12948">
+ <stop
+ path="c 0,12.4193 0,24.8387 0,37.258"
+ id="stop12950" />
+ <stop
+ path="c -14.3267,0 -28.6534,0 -42.9801,-2.84217e-14"
+ style="stop-color:#ffffff;stop-opacity:1"
+ id="stop12952" />
+ </meshpatch>
+ </meshrow>
+ </meshgradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.32385032"
+ inkscape:cx="231.11511"
+ inkscape:cy="510.47668"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-44.684128,-13.103047)"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="vector-effect:none;fill:url(#meshgradient136);fill-opacity:1;stroke:#204a87;stroke-width:0.529167;stop-color:#000000"
+ id="mesh1"
+ width="128.94041"
+ height="111.77415"
+ x="44.948711"
+ y="13.36763" />
+ <g
+ id="paths"
+ transform="translate(-8.0787795,63.059177)">
+ <path
+ id="path1"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 53.0274,82.6739 c 14.3267,0 28.6534,0 42.9801,0 0,12.4193 -5.498,38.9301 -5.498,51.3491 -14.3267,0 -23.1553,-14.091 -37.482,-14.091 0,-12.419 0,-24.8387 -1e-4,-37.2581 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path2"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 96.0075,82.6739 c 14.3265,0 28.6535,0 42.9805,0 0,12.4193 15.531,9.6603 15.531,22.0801 -14.326,0 -49.683,29.269 -64.0095,29.269 0,-12.419 5.498,-38.9298 5.498,-51.3491 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path3"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 138.988,82.6739 c 14.326,0 28.653,0 42.98,0 0,12.4193 0,24.8391 0,37.2581 -14.327,0 -13.122,-15.178 -27.449,-15.178 0,-12.4198 -15.531,-9.6608 -15.531,-22.0801 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 53.0275,119.932 c 14.3267,0 23.1553,14.091 37.482,14.091 0,12.419 26.2865,-1.184 13.4215,12.545 -15.0542,14.525 -36.5769,10.622 -50.9036,10.622 0,-12.419 0,-24.839 1e-4,-37.258 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path5"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 90.5095,134.023 c 14.3265,0 49.6835,-29.269 64.0095,-29.269 0,12.419 1.587,32.339 1.587,44.758 -14.327,0 -37.848,-2.945 -52.175,-2.944 12.865,-13.729 -13.4215,-0.126 -13.4215,-12.545 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path6"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 154.519,104.754 c 14.327,0 13.122,15.178 27.449,15.178 0,12.419 0,24.839 0,37.258 -14.327,0 -11.535,-7.678 -25.862,-7.678 0,-12.419 -1.587,-32.339 -1.587,-44.758 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path7"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 53.0274,157.19 c 14.3267,0 35.8494,3.903 50.9036,-10.622 0,12.419 -7.9234,35.461 -7.9234,47.88 -14.3267,0 -28.6534,0 -42.9801,0 0,-12.419 0,-24.839 -1e-4,-37.258 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path8"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 103.931,146.568 c 14.327,-0.001 37.848,2.944 52.175,2.944 0,12.419 -17.118,32.517 -17.118,44.936 -14.327,0 -28.654,0 -42.9804,0 0,-12.419 7.9234,-35.461 7.9234,-47.88 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path9"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="m 156.106,149.512 c 14.327,0 11.535,7.678 25.862,7.678 0,12.419 0,24.839 0,37.258 -14.327,0 -28.654,0 -42.98,0 0,-12.419 17.118,-32.517 17.118,-44.936 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/minimal-blank-prepare.svg b/share/extensions/tests/data/svg/minimal-blank-prepare.svg
new file mode 100644
index 0000000..1fc27fb
--- /dev/null
+++ b/share/extensions/tests/data/svg/minimal-blank-prepare.svg
@@ -0,0 +1 @@
+<svg width="100" height="100"></svg>
diff --git a/share/extensions/tests/data/svg/minimal-blank.svg b/share/extensions/tests/data/svg/minimal-blank.svg
new file mode 100644
index 0000000..1fc27fb
--- /dev/null
+++ b/share/extensions/tests/data/svg/minimal-blank.svg
@@ -0,0 +1 @@
+<svg width="100" height="100"></svg>
diff --git a/share/extensions/tests/data/svg/motion_tests.svg b/share/extensions/tests/data/svg/motion_tests.svg
new file mode 100644
index 0000000..3491d6f
--- /dev/null
+++ b/share/extensions/tests/data/svg/motion_tests.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="75.376213mm"
+ height="45.964241mm"
+ viewBox="0 0 75.376213 45.964242"
+ version="1.1"
+ id="svg17217"
+ inkscape:version="1.1-rc (52f87abb86, 2021-05-02)"
+ sodipodi:docname="motion_tests.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview17219"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ objecttolerance="10.0"
+ gridtolerance="10.0"
+ guidetolerance="10.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="4.5304433"
+ inkscape:cx="180.44592"
+ inkscape:cy="61.914471"
+ inkscape:window-width="2560"
+ inkscape:window-height="1377"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ lock-margins="true"
+ fit-margin-top="10"
+ fit-margin-left="10"
+ fit-margin-right="10"
+ fit-margin-bottom="10" />
+ <defs
+ id="defs17214" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(1.9559733,-9.921299)">
+ <path
+ id="path23053"
+ style="font-size:7.05556px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0.672042px;fill:#ffffff;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 38.429642,19.971304 c -0.339915,0 -0.648652,0.05725 -0.926557,0.172082 -0.277905,0.114835 -0.489376,0.283644 -0.634071,0.506429 -0.144693,0.220485 -0.217041,0.458197 -0.217041,0.713134 0,0.231971 0.05857,0.442121 0.175699,0.630452 0.119431,0.186036 0.299898,0.342386 0.541052,0.468706 0.186037,0.09876 0.511196,0.204238 0.975135,0.316775 0.463942,0.110242 0.763664,0.19212 0.899171,0.244946 0.211299,0.08039 0.362884,0.180295 0.454752,0.299726 0.09187,0.117133 0.137459,0.254936 0.137459,0.413411 0,0.156176 -0.04823,0.300871 -0.144695,0.434081 -0.09416,0.130913 -0.238858,0.234267 -0.434081,0.31006 -0.195222,0.07579 -0.419957,0.113686 -0.674894,0.113686 -0.287091,0 -0.545472,-0.04955 -0.775147,-0.14831 -0.229674,-0.101057 -0.399804,-0.23197 -0.510045,-0.392742 -0.107945,-0.163068 -0.176847,-0.371094 -0.206706,-0.623734 l -0.630454,0.05529 c 0.0092,0.337621 0.100886,0.640789 0.275436,0.909505 0.176848,0.266422 0.419325,0.466238 0.727089,0.599448 0.310057,0.13321 0.693782,0.199988 1.150834,0.199988 0.360585,0 0.684424,-0.06546 0.971516,-0.196371 0.289388,-0.13321 0.510677,-0.318442 0.664559,-0.555003 0.153881,-0.238861 0.230994,-0.492477 0.230994,-0.761196 0,-0.271013 -0.07022,-0.510045 -0.210325,-0.716751 -0.140099,-0.209002 -0.35714,-0.381257 -0.651121,-0.516766 -0.202113,-0.09187 -0.574987,-0.198667 -1.119312,-0.320392 -0.542028,-0.124023 -0.877525,-0.244602 -1.006141,-0.361735 -0.130914,-0.117134 -0.196369,-0.266076 -0.196369,-0.447519 0,-0.209003 0.0917,-0.387342 0.275434,-0.534334 0.186036,-0.149286 0.48151,-0.223758 0.885735,-0.223758 0.388146,0 0.680979,0.08136 0.878499,0.24443 0.199813,0.163065 0.316947,0.404222 0.351401,0.723468 l 0.640786,-0.04806 c -0.01148,-0.296278 -0.09417,-0.561552 -0.248047,-0.795817 -0.153879,-0.234267 -0.374367,-0.411287 -0.661458,-0.530717 -0.284795,-0.121727 -0.61472,-0.182417 -0.989087,-0.182417 z m -30.3356153,0.0863 v 0.595829 H 9.758008 v 4.454509 h 0.668693 v -4.45451 H 12.0974 v -0.595829 z m 5.3748653,0 v 5.050338 h 3.768763 V 24.51211 h -3.100586 v -1.719273 h 2.794144 v -0.592731 h -2.794144 v -1.546674 h 2.98328 v -0.595829 z m 5.081861,0 1.722375,2.418456 -1.953369,2.631882 h 0.802535 l 1.26814,-1.760617 c 0.04823,-0.0689 0.128272,-0.195048 0.240812,-0.378788 0.07579,0.121727 0.14946,0.234095 0.220658,0.337447 l 1.271241,1.801958 h 0.826822 L 21.037939,22.43782 22.811991,20.057604 H 22.08542 l -1.016475,1.339969 c -0.153881,0.199816 -0.286919,0.39142 -0.399459,0.575159 -0.08038,-0.144695 -0.216064,-0.351398 -0.406693,-0.620117 L 19.34657,20.057603 Z m 5.281331,0 v 0.595829 h 1.663981 v 4.454509 h 0.668176 v -4.454509 h 1.671215 v -0.595829 z m 8.861474,0 -1.939933,5.050338 h 0.710036 l 0.554487,-1.529623 h 2.112015 l 0.589111,1.529623 h 0.761196 l -2.067058,-5.050338 z m 12.003402,0 v 5.050338 h 0.668176 v -2.053106 h 1.29553 c 0.714282,0 1.208251,-0.148138 1.481561,-0.444418 0.273312,-0.298574 0.409794,-0.662951 0.409794,-1.092438 0,-0.250344 -0.05168,-0.479846 -0.155027,-0.688848 -0.101058,-0.209002 -0.235416,-0.370922 -0.403077,-0.485759 -0.167661,-0.117134 -0.375687,-0.196371 -0.623734,-0.23771 -0.17685,-0.03215 -0.432588,-0.04806 -0.767913,-0.04806 z m 6.239412,0 -1.939933,5.050338 h 0.710033 l 0.55449,-1.529623 h 2.112016 l 0.58911,1.529623 h 0.761193 l -2.067057,-5.050338 z m 3.090251,0 v 0.595829 h 1.663981 v 4.454509 h 0.668176 v -4.454509 h 1.671217 v -0.595829 z m 5.381583,0 v 5.050338 h 0.668176 v -2.380734 h 2.625164 v 2.380734 h 0.668692 v -5.050338 h -0.668692 v 2.073775 h -2.625164 v -2.073775 z m -26.370483,0.530199 c 0.07809,0.273312 0.197863,0.622585 0.358634,1.047482 l 0.527101,1.398882 H 32.2109 l 0.555006,-1.481564 c 0.117136,-0.319246 0.20751,-0.640961 0.271817,-0.9648 z m 18.242814,0 c 0.07809,0.273312 0.197863,0.622585 0.358635,1.047482 l 0.5271,1.398882 h -1.712558 l 0.555006,-1.481564 c 0.117133,-0.319246 0.20751,-0.640961 0.271817,-0.9648 z m -5.915401,0.06563 h 1.29191 c 0.30317,0 0.511196,0.0151 0.623734,0.04496 0.174554,0.04823 0.314481,0.14814 0.420132,0.299722 0.107945,0.149289 0.162264,0.329237 0.162264,0.540536 0,0.291687 -0.0909,0.518258 -0.272336,0.679029 -0.181443,0.160772 -0.488055,0.240814 -0.91984,0.240814 h -1.305864 z" />
+ <path
+ sodipodi:type="star"
+ style="fill:#008000;fill-opacity:1;stroke:#0064ff;stroke-width:3.51486;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.595668"
+ id="path28636"
+ inkscape:flatsided="false"
+ sodipodi:sides="5"
+ sodipodi:cx="-34.961681"
+ sodipodi:cy="35.898155"
+ sodipodi:r1="50.916191"
+ sodipodi:r2="21.922323"
+ sodipodi:arg1="0.96408842"
+ sodipodi:arg2="1.592407"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M -5.9310002,77.727309 -35.435401,57.81536 -65.772596,76.433893 -55.952569,42.22041 -83.034555,19.121466 l 35.573511,-1.233147 13.599608,-32.894466 12.165611,33.451357 35.487006,2.769046 -28.05475,21.907222 z"
+ transform="matrix(0.15148335,-0.04606949,-0.01268768,0.13744398,41.227999,32.095336)"
+ inkscape:transform-center-x="-0.2510849"
+ inkscape:transform-center-y="-0.028170303" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/multilayered-test.svg b/share/extensions/tests/data/svg/multilayered-test.svg
new file mode 100644
index 0000000..c02d4ee
--- /dev/null
+++ b/share/extensions/tests/data/svg/multilayered-test.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48+devel "
+ sodipodi:docname="Nouveau document 1">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="30.714286"
+ inkscape:cy="520"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer3"
+ showgrid="false"
+ inkscape:window-width="1251"
+ inkscape:window-height="670"
+ inkscape:window-x="119"
+ inkscape:window-y="69"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Bottom layer">
+ <g
+ id="g3930">
+ <path
+ class="oranger bee frog"
+ transform="matrix(-0.97176714,-0.23594199,0.23594199,-0.97176714,541.8979,1030.862)"
+ inkscape:transform-center-y="21.296232"
+ inkscape:transform-center-x="0.78818963"
+ d="M 431.42857,463.79076 283.13917,424.83761 166.98297,524.91176 158.20567,371.84296 27.135259,292.29647 170,236.6479 205.15023,87.411314 302.22279,206.0874 455.01724,193.40062 372.14664,322.39504 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.3436561"
+ sodipodi:arg1="0.71533758"
+ sodipodi:r2="115.44059"
+ sodipodi:r1="230.8812"
+ sodipodi:cy="312.36218"
+ sodipodi:cx="257.14285"
+ sodipodi:sides="5"
+ id="path3902"
+ style="fill:#ffccaa;fill-opacity:1"
+ sodipodi:type="star" />
+ <text
+ sodipodi:linespacing="125%"
+ class="frog apple"
+ id="text3926"
+ y="723.79077"
+ x="245.71429"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="723.79077"
+ x="245.71429"
+ id="tspan3928"
+ sodipodi:role="line">Bottom layer</tspan></text>
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Middle layer">
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Middle sublayer">
+ <path
+ style="fill:#ffaaaa;fill-opacity:1"
+ d="m 522.85714,488.07648 c 0,73.37498 -71.63444,132.85715 -160,132.85715 -88.36556,0 -159.99999,-59.48217 -159.99999,-132.85715 0,-73.37497 71.63443,-132.85714 159.99999,-132.85714 88.36556,0 160,59.48217 160,132.85714 z"
+ id="path3900"
+ class="frog"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ id="text3918"
+ sodipodi:linespacing="125%"><textPath
+ xlink:href="#path3900"
+ id="textPath3923"><tspan
+ id="tspan3920">Middle sublayer</tspan></textPath></text>
+ </g>
+ <g
+ id="g3913"
+ transform="translate(8.5714286,-94.285711)">
+ <rect
+ y="406.64789"
+ x="162.85715"
+ height="134.28572"
+ width="385.71429"
+ id="rect3898"
+ class="apple frog"
+ style="fill:#cccccc;fill-opacity:1" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3909"
+ y="520.93365"
+ x="294.28571"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ xml:space="preserve"><tspan
+ y="520.93365"
+ x="294.28571"
+ id="tspan3911"
+ sodipodi:role="line">Middle layer</tspan></text>
+ </g>
+ </g>
+ <g
+ inkscape:label="Top Layer"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ id="text3894"
+ sodipodi:linespacing="125%"><textPath
+ xlink:href="#path3904"
+ id="textPath3906"><tspan
+ id="tspan3896">Top layer</tspan></textPath></text>
+ <path
+ style="fill:#00d4aa;fill-opacity:1"
+ id="path3904"
+ d="m 199.54403,352.9691 c 33.89855,-23.39174 72.10651,-36.95679 109.79252,-52.48463 7.71344,-3.19326 15.44578,-6.34124 23.14032,-9.57978 26.03103,-10.95613 51.7881,-22.59387 76.79106,-35.76157 42.32507,-22.29031 32.37854,-17.45018 21.71695,-12.37413 27.69959,-16.89942 54.76258,-34.80763 82.06841,-52.32954 3.94676,-2.5326 7.78542,-5.23846 11.81547,-7.63629 13.93107,-8.28881 28.03813,-16.27818 42.05719,-24.41727 1.82085,-0.65301 3.535,-1.79625 5.46253,-1.95903 1.14748,-0.0969 2.55329,0.29335 3.23024,1.22493 4.4402,6.11031 -2.74745,15.55901 -5.48451,20.72818 -5.75765,10.57294 -11.80107,21.00672 -18.37568,31.09425 -8.69682,12.13204 -17.21613,24.35107 -25.30545,36.8994 -8.76999,14.06322 -13.80724,29.8609 -17.16277,45.97506 -1.61982,9.03135 -2.30641,16.44531 6.23493,21.70829 3.31001,1.71191 6.61295,2.19795 10.26307,2.25814 0,0 -34.1559,24.2492 -34.1559,24.2492 l 0,0 c -4.04274,-0.78094 -7.88137,-1.74859 -11.38493,-4.05868 -9.57886,-7.50134 -10.04511,-14.7248 -7.95368,-26.29078 3.70976,-16.48328 8.59159,-32.8557 17.13895,-47.54924 7.808,-12.43792 15.71401,-24.76749 24.43097,-36.58289 6.64463,-10.0123 12.98801,-20.22738 18.69995,-30.80719 1.06673,-2.02099 5.47855,-11.97387 6.83302,-13.43922 0.3422,-0.37021 1.06394,-0.32013 1.51003,-0.0852 0.35221,0.18545 -0.77587,0.17836 -1.1638,0.26755 -1.3924,0.57649 -2.7848,1.15299 -4.1772,1.72949 8.53309,-5.01782 16.92726,-10.27974 25.59928,-15.05345 4.46703,-2.45898 -8.64504,5.40995 -12.97447,8.10383 -28.33878,17.63307 -56.24248,35.94219 -84.66825,53.43629 -22.66355,13.24936 -55.91511,33.356 -81.64049,46.80647 -32.95242,17.22913 -67.12661,31.94029 -101.42871,46.2266 -18.19015,7.69388 -36.62175,14.9775 -54.55262,23.27042 -3.77844,1.7475 -7.50549,3.60582 -11.21421,5.49679 -2.53121,1.2906 -9.9408,5.50416 -7.50216,4.04617 10.489,-6.27105 21.10584,-12.32577 31.65876,-18.48866 0,0 -39.29882,15.37653 -39.29882,15.37653 z"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/multiple_closed_subpaths.svg b/share/extensions/tests/data/svg/multiple_closed_subpaths.svg
new file mode 100644
index 0000000..1548b50
--- /dev/null
+++ b/share/extensions/tests/data/svg/multiple_closed_subpaths.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-dev (bf4f53e38c, 2021-05-21)"
+ sodipodi:docname="multiple_closed_subpaths.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.77771465"
+ inkscape:cx="397.31796"
+ inkscape:cy="561.25984"
+ inkscape:window-width="2488"
+ inkscape:window-height="1376"
+ inkscape:window-x="1992"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="path31"
+ style="fill:#008000;fill-opacity:0.88482;stroke:#0000ff;stroke-width:5.03747"
+ inkscape:transform-center-x="-1.3668479"
+ inkscape:transform-center-y="-0.84349401"
+ d="M 255.58594 41.617188 L 163.34961 84.337891 L 175.47852 185.26172 L 275.20898 204.91406 L 324.71875 116.13672 L 255.58594 41.617188 z M 141.84961 180.67188 L 73.015625 235.93359 L 104.30273 318.47461 L 192.4707 314.22656 L 215.67773 229.05859 L 141.84961 180.67188 z M 318 220.60938 A 76.13374 59.460989 0 0 0 241.86523 280.07031 A 76.13374 59.460989 0 0 0 318 339.53125 A 76.13374 59.460989 0 0 0 394.13281 280.07031 A 76.13374 59.460989 0 0 0 318 220.60938 z "
+ transform="scale(0.26458333)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/paths_open_closed.svg b/share/extensions/tests/data/svg/paths_open_closed.svg
new file mode 100644
index 0000000..95c2d88
--- /dev/null
+++ b/share/extensions/tests/data/svg/paths_open_closed.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="95.693863mm"
+ height="113.47732mm"
+ viewBox="0 0 95.693863 113.47732"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-dev (bf4f53e38c, 2021-05-21)"
+ sodipodi:docname="paths_open_closed.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0998546"
+ inkscape:cx="416.41868"
+ inkscape:cy="384.14169"
+ inkscape:window-width="2488"
+ inkscape:window-height="1376"
+ inkscape:window-x="1992"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-13.488084,-21.263619)">
+ <path
+ id="rect723"
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ d="M 16.997509,28.262589 H 49.475155 V 57.794567 H 16.997509 Z" />
+ <path
+ id="rect723-5"
+ style="fill:#0000ff;stroke:#00ffff;stroke-width:1.33282"
+ d="m 16.33473,66.710709 c 10.825882,1.779915 21.651764,3.097957 32.477646,0 V 96.242687 H 16.33473 c -1.409608,-9.843993 -4.093867,-19.687985 0,-29.531978 z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ id="path747"
+ style="fill:none;stroke:#000000"
+ inkscape:transform-center-x="1.3210413"
+ inkscape:transform-center-y="-0.83976665"
+ transform="matrix(0.26458333,0,0,0.26458333,-7.3390822,8.8605303)"
+ d="m 427.00956,188.57485 -53.75853,-16.14053 -43.77272,35.13468 -1.26175,-56.1151 -46.94158,-30.77312 52.97873,-18.54051 14.76124,-54.153514 34.0044,44.656436 56.06452,-2.695591 -31.96286,46.139709 z" />
+ <path
+ id="path1080"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ d="m 90.234516,87.054923 c -1.096785,-0.360231 -0.05553,-1.656168 0.598728,-1.822927 1.772997,-0.451905 3.061436,1.460365 3.047124,3.020383 -0.02561,2.79051 -2.865128,4.551341 -5.44204,4.271325 -3.781721,-0.410935 -6.071433,-4.283901 -5.49552,-7.863694 0.767602,-4.771306 5.706983,-7.603559 10.285349,-6.719721 5.761408,1.112221 9.141733,7.131963 7.943923,12.707006 -1.450721,6.752124 -8.557978,10.683385 -15.128665,9.16811 -7.743327,-1.78568 -12.2272,-9.98462 -10.392314,-17.550311 2.11845,-8.734888 11.411704,-13.772473 19.971972,-11.61651 9.726717,2.44974 15.318757,12.839083 12.840707,22.393624 C 105.68378,103.76097 94.197096,109.908 83.6485,107.10712 71.93756,103.99761 65.235127,91.412663 68.359396,79.870181" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 14.937285,124.03497 20.613812,-17.81572 c 0,0 -3.657238,10.26657 16.416835,13.91047 20.074072,3.64391 -1.030552,14.47173 -1.030552,14.47173 l -22.428658,-4.9762"
+ id="path1115" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/pattern_along_path.svg b/share/extensions/tests/data/svg/pattern_along_path.svg
new file mode 100644
index 0000000..8a2bf20
--- /dev/null
+++ b/share/extensions/tests/data/svg/pattern_along_path.svg
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg5"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm"
+ sodipodi:docname="pattern-big-example.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)">
+ <metadata
+ id="metadata11">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ showguides="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:window-maximized="1"
+ inkscape:window-y="-8"
+ inkscape:window-x="1912"
+ inkscape:window-height="1377"
+ inkscape:window-width="2560"
+ inkscape:cy="451.89261"
+ inkscape:cx="577.63652"
+ inkscape:zoom="0.8008768"
+ showgrid="false"
+ inkscape:document-units="mm"
+ inkscape:pagecheckerboard="0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="namedview7"
+ inkscape:snap-global="false" />
+ <defs
+ id="defs2">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2463">
+ <stop
+ style="stop-color:#ff0000;stop-opacity:1"
+ offset="0"
+ id="stop2459" />
+ <stop
+ style="stop-color:#ffff00;stop-opacity:1"
+ offset="1"
+ id="stop2461" />
+ </linearGradient>
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4606"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4602"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4598"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4594"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4590"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ lpeversion="1"
+ is_visible="true"
+ id="path-effect4414"
+ effect="bspline" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2463"
+ id="radialGradient2465"
+ cx="45.472672"
+ cy="275.52158"
+ fx="45.472672"
+ fy="275.52158"
+ r="2.3852139"
+ gradientTransform="matrix(-7.3746775,-1.9411697,1.8682552,-7.0977466,-123.48734,2319.7902)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ id="path4608"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 102.69135,205.60704 c 7.56924,5.10722 15.13847,8.22792 22.70769,10.66114 7.56923,2.43322 15.13846,4.17896 22.70766,6.53626 m -80.270114,-1.82883 c 7.628297,-5.93952 16.412387,-8.52619 26.079029,-8.55451 5.063508,-0.0148 31.678085,4.14101 37.186335,5.41602"
+ sodipodi:nodetypes="csccsc" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path4610"
+ d="m 152.74082,203.46622 c -14.61821,17.14239 -13.9335,27.78253 40.63515,15.52725"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path4612"
+ d="m 120.19966,235.33295 c -7.78728,-14.49174 9.34424,-14.11137 27.91601,-12.87143"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ id="path2405"
+ style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.629977,276.10133 a 12.4714,12.4714 0 0 1 -12.4714,12.4713 12.4714,12.4714 0 0 1 -12.4713,-12.4713 12.4714,12.4714 0 0 1 12.4713,-12.4714 12.4714,12.4714 0 0 1 12.4714,12.4714 z" />
+ <path
+ id="path10007"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 65.235242,91.471976 c 17.2141,-10.338894 38.173748,-18.095588 58.586378,0 20.4126,18.095594 33.8118,22.575194 59.5313,0" />
+ <g
+ transform="translate(-33.456327,-22.958761)"
+ id="g3961">
+ <g
+ id="g1969"
+ transform="translate(-5.9028412,-4.6660516)">
+ <g
+ id="g1887">
+ <g
+ id="g8061"
+ transform="rotate(90,71.635047,120.03912)">
+ <path
+ id="rect10009"
+ style="fill:#80b3ff;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 77.777159,114.74745 v 10.58334 H 65.492934 v -10.58334 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:type="star"
+ style="fill:#ffff00;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path1801"
+ sodipodi:sides="5"
+ sodipodi:cx="68.881531"
+ sodipodi:cy="116.12402"
+ sodipodi:r1="1.9993351"
+ sodipodi:r2="0.86082768"
+ sodipodi:arg1="0.90250691"
+ sodipodi:arg2="1.5308254"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ inkscape:transform-center-x="0.024689446"
+ inkscape:transform-center-y="-0.16728824"
+ d="m 70.120407,117.69327 -1.204477,-0.70911 -1.144005,0.80303 0.302194,-1.36465 -1.117239,-0.83987 1.391244,-0.1343 0.453513,-1.32208 0.557642,1.28165 1.397525,0.0228 -1.046602,0.92641 z" />
+ <path
+ id="path1803"
+ style="fill:#ffff00;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.406281,123.88766 a 1.0736929,1.0736929 0 0 1 -1.073693,1.07369 1.0736929,1.0736929 0 0 1 -1.073693,-1.07369 1.0736929,1.0736929 0 0 1 1.073693,-1.0737 1.0736929,1.0736929 0 0 1 1.073693,1.0737" />
+ </g>
+ </g>
+ </g>
+ <path
+ sodipodi:nodetypes="cssssc"
+ id="path2551"
+ d="m 66.696227,19.616799 h 33.540413 c 17.50702,0 36.48737,0.558859 42.38122,4.149896 11.78771,7.182076 6.13824,28.747462 -6.54093,27.098159 -15.14915,-1.970597 -8.33693,8.76206 -26.63095,8.643376 -14.440807,-0.09369 -15.8852,-9.110587 -15.8852,-9.110587"
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ transform="translate(8.9958363,-26.458334)"
+ id="g3427">
+ <path
+ style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,42 h 16 v 2 H 16 v 2 h 16 v 2 H 16 v 2 h 16 v 2 H 16 v 2 h 16 v 2 H 30 V 40 H 28 V 56 H 26 V 40 H 24 V 56 H 22 V 40 H 20 V 56 H 18 V 40 h -2 z"
+ id="path3421"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
+ <path
+ id="rect2553"
+ style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 16.2,40.2 H 31.8 V 55.8 H 16.2 Z" />
+ </g>
+ <path
+ d="M 55.694667,135.54916 H 203.56637"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path4056" />
+ <g
+ transform="translate(0.99860536,-13.892782)"
+ id="g4054">
+ <g
+ id="g4151">
+ <path
+ sodipodi:nodetypes="czc"
+ d="m 5.6348352,150.02936 c 5.2255138,-5.1793 13.0287708,-9.651 22.0177948,0 8.989024,9.651 17.128855,6.05298 22.833822,0"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path10007-4" />
+ <g
+ id="g4044">
+ <path
+ id="path4017"
+ style="fill:#008000;fill-opacity:1;stroke:#6c5353;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28.490966,143.37525 c 0.0889,0.26729 0.594071,0.43306 -1.92815,1.08343 -2.52222,0.65037 -4.727912,0.69363 -4.727912,0.69363 0,0 1.883657,-1.0112 4.405901,-1.66157 2.522243,-0.65037 2.161255,-0.38279 2.250161,-0.11549 z"
+ sodipodi:nodetypes="sscss" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path4017"
+ id="use4037"
+ transform="rotate(89.695774,20.440309,143.33554)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path4017"
+ id="use4039"
+ transform="rotate(121.20692,20.34915,144.0435)"
+ width="100%"
+ height="100%" />
+ </g>
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(0.96978159,0.24397473,0.24397473,-0.96978159,-14.915921,291.41233)"
+ id="use4046"
+ xlink:href="#g4044"
+ y="0"
+ x="0" />
+ </g>
+ </g>
+ <path
+ inkscape:original-d="m 82.665212,179.98902 c 0.223653,-3.64537 0.447239,-7.29083 0.670756,-10.93638 4.052634,0.10946 8.105038,0.21882 12.157455,0.32809 0.056,3.79145 0.11186,7.58265 0.16769,11.37384 -1.676856,1.49476 -3.353715,2.98937 -5.030672,4.48392 2.515454,0.58337 5.030742,1.16663 7.546022,1.74982 2.543417,-1.93205 5.086657,-3.8641 7.629887,-5.79629 1.09008,-1.56749 2.18004,-3.135 3.26996,-4.70264"
+ inkscape:path-effect="#path-effect4414"
+ id="path4412"
+ d="m 82.665212,179.98902 c 0.22358,-3.64537 0.447165,-7.29083 2.585279,-9.05892 2.138113,-1.76809 6.190517,-1.65873 8.244674,0.29168 2.054157,1.9504 2.110053,5.7416 1.299535,8.38453 -0.810518,2.64294 -2.487376,4.13755 -2.068083,5.17652 0.419293,1.03896 2.934581,1.62222 5.463889,0.94778 2.529304,-0.67444 5.072544,-2.60649 6.889194,-4.35632 1.81664,-1.74982 2.9066,-3.31733 3.99661,-4.88491"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ transform="translate(12.96712,-20.843619)"
+ style="font-size:3.52777px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text4418"
+ aria-label="Lorem ipsum dolor sit amet">
+ <path
+ id="path4420"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 5.9527467,194.24028 h 0.3479539 v 2.27893 h 1.2522895 v 0.29283 H 5.9527467 Z" />
+ <path
+ id="path4422"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 8.5882391,195.105 q -0.2549366,0 -0.4030753,0.19982 -0.1481388,0.19809 -0.1481388,0.54432 0,0.34623 0.1464162,0.54605 0.1481388,0.19809 0.4047979,0.19809 0.2532139,0 0.4013527,-0.19982 0.1481388,-0.19981 0.1481388,-0.54432 0,-0.34279 -0.1481388,-0.5426 Q 8.841453,195.105 8.5882391,195.105 Z m 0,-0.26872 q 0.4134105,0 0.649399,0.26872 0.2359885,0.26872 0.2359885,0.74414 0,0.4737 -0.2359885,0.74414 -0.2359885,0.26872 -0.649399,0.26872 -0.4151331,0 -0.6511217,-0.26872 -0.2342659,-0.27044 -0.2342659,-0.74414 0,-0.47542 0.2342659,-0.74414 0.2359886,-0.26872 0.6511217,-0.26872 z" />
+ <path
+ id="path4424"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 11.115211,195.17907 q -0.0534,-0.031 -0.117133,-0.0448 -0.06201,-0.0155 -0.137804,-0.0155 -0.268717,0 -0.41341,0.1757 -0.142971,0.17398 -0.142971,0.50126 v 1.0163 H 9.985222 v -1.92925 h 0.318671 v 0.29973 q 0.09991,-0.1757 0.260104,-0.26011 0.160196,-0.0861 0.389295,-0.0861 0.03273,0 0.07235,0.005 0.03962,0.003 0.08785,0.0121 z" />
+ <path
+ id="path4426"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 13.025512,195.76818 v 0.15503 H 11.56824 q 0.02067,0.32728 0.19637,0.49954 0.177422,0.17053 0.492648,0.17053 0.182589,0 0.353121,-0.0448 0.172255,-0.0448 0.341064,-0.13436 v 0.29973 q -0.170532,0.0723 -0.349676,0.11024 -0.179145,0.0379 -0.363457,0.0379 -0.461642,0 -0.732081,-0.26872 -0.268717,-0.26872 -0.268717,-0.72691 0,-0.4737 0.254936,-0.75103 0.256659,-0.27906 0.69074,-0.27906 0.389295,0 0.614949,0.2515 0.227375,0.24976 0.227375,0.6804 z m -0.316948,-0.093 q -0.0034,-0.2601 -0.146416,-0.41513 -0.141249,-0.15503 -0.375514,-0.15503 -0.265272,0 -0.425469,0.14986 -0.158474,0.14986 -0.18259,0.42203 z" />
+ <path
+ id="path4428"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 15.047779,195.25314 q 0.118856,-0.2136 0.28422,-0.31523 0.165364,-0.10163 0.389295,-0.10163 0.301445,0 0.465087,0.21188 0.163641,0.21015 0.163641,0.59944 v 1.16444 h -0.31867 v -1.1541 q 0,-0.27733 -0.09818,-0.41169 -0.09818,-0.13436 -0.299723,-0.13436 -0.246324,0 -0.389295,0.16364 -0.142971,0.16364 -0.142971,0.44614 v 1.09037 h -0.318671 v -1.1541 q 0,-0.27905 -0.09819,-0.41169 -0.09818,-0.13436 -0.303167,-0.13436 -0.242879,0 -0.38585,0.16537 -0.142971,0.16364 -0.142971,0.44441 v 1.09037 h -0.318671 v -1.92925 h 0.318671 v 0.29973 q 0.10852,-0.17743 0.260104,-0.26183 0.151584,-0.0844 0.360011,-0.0844 0.210151,0 0.356567,0.1068 0.148139,0.1068 0.218763,0.31006 z" />
+ <path
+ id="path4430"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 18.107017,194.88279 h 0.316948 v 1.92925 h -0.316948 z m 0,-0.75103 h 0.316948 v 0.40136 h -0.316948 z" />
+ <path
+ id="path4432"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 19.392035,196.52265 v 1.0232 h -0.318671 v -2.66306 h 0.318671 v 0.29284 q 0.09991,-0.17226 0.251491,-0.25494 0.153307,-0.0844 0.36518,-0.0844 0.351399,0 0.570162,0.27906 0.220485,0.27905 0.220485,0.7338 0,0.45475 -0.220485,0.7338 -0.218763,0.27906 -0.570162,0.27906 -0.211873,0 -0.36518,-0.0827 -0.151583,-0.0844 -0.251491,-0.25666 z m 1.078313,-0.67351 q 0,-0.34968 -0.144694,-0.54777 -0.142971,-0.19981 -0.394463,-0.19981 -0.251491,0 -0.396185,0.19981 -0.142971,0.19809 -0.142971,0.54777 0,0.34968 0.142971,0.54949 0.144694,0.19809 0.396185,0.19809 0.251492,0 0.394463,-0.19809 0.144694,-0.19981 0.144694,-0.54949 z" />
+ <path
+ id="path4434"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 22.554626,194.93964 v 0.29972 q -0.134358,-0.0689 -0.279052,-0.10335 -0.144694,-0.0344 -0.299723,-0.0344 -0.235988,0 -0.354844,0.0723 -0.117133,0.0724 -0.117133,0.21704 0,0.11025 0.08441,0.17398 0.0844,0.062 0.339341,0.11886 l 0.10852,0.0241 q 0.337619,0.0724 0.478867,0.20498 0.142972,0.13092 0.142972,0.36691 0,0.26871 -0.213596,0.42546 -0.211873,0.15676 -0.583942,0.15676 -0.155029,0 -0.323839,-0.031 -0.167086,-0.0293 -0.353121,-0.0896 v -0.32729 q 0.175699,0.0913 0.346231,0.13781 0.170532,0.0448 0.337619,0.0448 0.223931,0 0.344509,-0.0758 0.120578,-0.0775 0.120578,-0.21704 0,-0.12919 -0.08785,-0.19809 -0.08613,-0.0689 -0.380682,-0.13264 l -0.110243,-0.0258 q -0.294555,-0.062 -0.425468,-0.18948 -0.130914,-0.1292 -0.130914,-0.35313 0,-0.27216 0.192925,-0.4203 0.192925,-0.14814 0.547769,-0.14814 0.1757,0 0.330729,0.0258 0.155029,0.0258 0.285942,0.0775 z" />
+ <path
+ id="path4436"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 23.131677,196.05068 v -1.16789 h 0.316948 v 1.15583 q 0,0.27388 0.106798,0.41169 0.106798,0.13608 0.320393,0.13608 0.256659,0 0.404798,-0.16364 0.149861,-0.16364 0.149861,-0.44614 v -1.09382 h 0.316948 v 1.92925 h -0.316948 v -0.29628 q -0.11541,0.1757 -0.268717,0.26183 -0.151583,0.0844 -0.353121,0.0844 -0.332451,0 -0.504705,-0.20671 -0.172255,-0.2067 -0.172255,-0.60461 z m 0.797538,-1.2144 z" />
+ <path
+ id="path4438"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 26.905771,195.25314 q 0.118856,-0.2136 0.28422,-0.31523 0.165364,-0.10163 0.389295,-0.10163 0.301445,0 0.465087,0.21188 0.163641,0.21015 0.163641,0.59944 v 1.16444 h -0.31867 v -1.1541 q 0,-0.27733 -0.09819,-0.41169 -0.09819,-0.13436 -0.299723,-0.13436 -0.246324,0 -0.389295,0.16364 -0.142971,0.16364 -0.142971,0.44614 v 1.09037 h -0.318671 v -1.1541 q 0,-0.27905 -0.09818,-0.41169 -0.09819,-0.13436 -0.303167,-0.13436 -0.242879,0 -0.38585,0.16537 -0.142971,0.16364 -0.142971,0.44441 v 1.09037 h -0.318671 v -1.92925 h 0.318671 v 0.29973 q 0.10852,-0.17743 0.260104,-0.26183 0.151584,-0.0844 0.360012,-0.0844 0.21015,0 0.356566,0.1068 0.148139,0.1068 0.218763,0.31006 z" />
+ <path
+ id="path4440"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 31.234524,195.17563 v -1.04387 h 0.316948 v 2.68028 h -0.316948 v -0.28939 q -0.09991,0.17226 -0.253214,0.25666 -0.151584,0.0827 -0.365179,0.0827 -0.349676,0 -0.570162,-0.27906 -0.218763,-0.27905 -0.218763,-0.7338 0,-0.45475 0.218763,-0.7338 0.220486,-0.27906 0.570162,-0.27906 0.213595,0 0.365179,0.0844 0.153307,0.0827 0.253214,0.25494 z m -1.080035,0.67351 q 0,0.34968 0.142971,0.54949 0.144694,0.19809 0.396185,0.19809 0.251492,0 0.396186,-0.19809 0.144693,-0.19981 0.144693,-0.54949 0,-0.34968 -0.144693,-0.54777 -0.144694,-0.19981 -0.396186,-0.19981 -0.251491,0 -0.396185,0.19981 -0.142971,0.19809 -0.142971,0.54777 z" />
+ <path
+ id="path4442"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 32.951901,195.105 q -0.254937,0 -0.403075,0.19982 -0.148139,0.19809 -0.148139,0.54432 0,0.34623 0.146416,0.54605 0.148139,0.19809 0.404798,0.19809 0.253214,0 0.401353,-0.19982 0.148138,-0.19981 0.148138,-0.54432 0,-0.34279 -0.148138,-0.5426 -0.148139,-0.20154 -0.401353,-0.20154 z m 0,-0.26872 q 0.41341,0 0.649399,0.26872 0.235988,0.26872 0.235988,0.74414 0,0.4737 -0.235988,0.74414 -0.235989,0.26872 -0.649399,0.26872 -0.415133,0 -0.651122,-0.26872 -0.234266,-0.27044 -0.234266,-0.74414 0,-0.47542 0.234266,-0.74414 0.235989,-0.26872 0.651122,-0.26872 z" />
+ <path
+ id="path4444"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 34.360942,194.13176 h 0.316949 v 2.68028 h -0.316949 z" />
+ <path
+ id="path4446"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 36.086932,195.105 q -0.254937,0 -0.403076,0.19982 -0.148139,0.19809 -0.148139,0.54432 0,0.34623 0.146417,0.54605 0.148139,0.19809 0.404798,0.19809 0.253214,0 0.401352,-0.19982 0.148139,-0.19981 0.148139,-0.54432 0,-0.34279 -0.148139,-0.5426 -0.148138,-0.20154 -0.401352,-0.20154 z m 0,-0.26872 q 0.41341,0 0.649399,0.26872 0.235988,0.26872 0.235988,0.74414 0,0.4737 -0.235988,0.74414 -0.235989,0.26872 -0.649399,0.26872 -0.415134,0 -0.651122,-0.26872 -0.234266,-0.27044 -0.234266,-0.74414 0,-0.47542 0.234266,-0.74414 0.235988,-0.26872 0.651122,-0.26872 z" />
+ <path
+ id="path4448"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 38.613902,195.17907 q -0.0534,-0.031 -0.117133,-0.0448 -0.06201,-0.0155 -0.137803,-0.0155 -0.268717,0 -0.413411,0.1757 -0.142971,0.17398 -0.142971,0.50126 v 1.0163 h -0.31867 v -1.92925 h 0.31867 v 0.29973 q 0.09991,-0.1757 0.260104,-0.26011 0.160197,-0.0861 0.389295,-0.0861 0.03273,0 0.07235,0.005 0.03962,0.003 0.08785,0.0121 z" />
+ <path
+ id="path4450"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 41.302793,194.93964 v 0.29972 q -0.134358,-0.0689 -0.279052,-0.10335 -0.144694,-0.0344 -0.299723,-0.0344 -0.235988,0 -0.354844,0.0723 -0.117133,0.0724 -0.117133,0.21704 0,0.11025 0.08441,0.17398 0.0844,0.062 0.339341,0.11886 l 0.10852,0.0241 q 0.337619,0.0724 0.478867,0.20498 0.142972,0.13092 0.142972,0.36691 0,0.26871 -0.213596,0.42546 -0.211873,0.15676 -0.583942,0.15676 -0.155029,0 -0.323838,-0.031 -0.167087,-0.0293 -0.353122,-0.0896 v -0.32729 q 0.175699,0.0913 0.346231,0.13781 0.170532,0.0448 0.337619,0.0448 0.223931,0 0.344509,-0.0758 0.120578,-0.0775 0.120578,-0.21704 0,-0.12919 -0.08785,-0.19809 -0.08613,-0.0689 -0.380682,-0.13264 l -0.110243,-0.0258 q -0.294555,-0.062 -0.425468,-0.18948 -0.130914,-0.1292 -0.130914,-0.35313 0,-0.27216 0.192925,-0.4203 0.192925,-0.14814 0.547769,-0.14814 0.1757,0 0.330729,0.0258 0.155029,0.0258 0.285942,0.0775 z" />
+ <path
+ id="path4452"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 41.912576,194.88279 h 0.316948 v 1.92925 h -0.316948 z m 0,-0.75103 h 0.316948 v 0.40136 h -0.316948 z" />
+ <path
+ id="path4454"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 43.204484,194.33502 v 0.54777 h 0.652844 v 0.24633 h -0.652844 v 1.0473 q 0,0.23599 0.06373,0.30317 0.06546,0.0672 0.26355,0.0672 h 0.32556 v 0.26527 h -0.32556 q -0.366902,0 -0.506428,-0.13608 -0.139526,-0.1378 -0.139526,-0.49954 v -1.0473 h -0.23254 v -0.24633 h 0.232544 v -0.54777 z" />
+ <path
+ id="path4456"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 46.275779,195.84225 q -0.384128,0 -0.532267,0.0879 -0.148138,0.0879 -0.148138,0.29972 0,0.16881 0.110242,0.26872 0.111966,0.0982 0.303168,0.0982 0.263549,0 0.422023,-0.18603 0.160197,-0.18776 0.160197,-0.49782 v -0.0706 z m 0.632173,-0.13091 v 1.1007 h -0.316948 v -0.29283 q -0.10852,0.1757 -0.270439,0.2601 -0.161919,0.0827 -0.396185,0.0827 -0.296278,0 -0.471978,-0.16537 -0.173976,-0.16708 -0.173976,-0.44614 0,-0.32556 0.21704,-0.49092 0.218763,-0.16537 0.651122,-0.16537 h 0.444416 v -0.031 q 0,-0.21877 -0.144694,-0.33762 -0.142971,-0.12058 -0.403075,-0.12058 -0.165364,0 -0.322116,0.0396 -0.156751,0.0396 -0.301445,0.11886 v -0.29284 q 0.173977,-0.0672 0.337619,-0.0999 0.163641,-0.0345 0.31867,-0.0345 0.418579,0 0.625284,0.21704 0.206705,0.21705 0.206705,0.65802 z" />
+ <path
+ id="path4458"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 49.064579,195.25314 q 0.118855,-0.2136 0.28422,-0.31523 0.165364,-0.10163 0.389295,-0.10163 0.301445,0 0.465087,0.21188 0.163641,0.21015 0.163641,0.59944 v 1.16444 h -0.31867 v -1.1541 q 0,-0.27733 -0.09819,-0.41169 -0.09819,-0.13436 -0.299723,-0.13436 -0.246324,0 -0.389295,0.16364 -0.142971,0.16364 -0.142971,0.44614 v 1.09037 h -0.318671 v -1.1541 q 0,-0.27905 -0.09819,-0.41169 -0.09819,-0.13436 -0.303168,-0.13436 -0.242878,0 -0.385849,0.16537 -0.142972,0.16364 -0.142972,0.44441 v 1.09037 h -0.31867 v -1.92925 h 0.31867 v 0.29973 q 0.108521,-0.17743 0.260105,-0.26183 0.151583,-0.0844 0.360011,-0.0844 0.210151,0 0.356567,0.1068 0.148139,0.1068 0.218763,0.31006 z" />
+ <path
+ id="path4460"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 52.650916,195.76818 v 0.15503 h -1.457272 q 0.02067,0.32728 0.19637,0.49954 0.177422,0.17053 0.492647,0.17053 0.18259,0 0.353122,-0.0448 0.172254,-0.0448 0.341063,-0.13436 v 0.29973 q -0.170531,0.0723 -0.349676,0.11024 -0.179145,0.0379 -0.363457,0.0379 -0.461642,0 -0.732081,-0.26872 -0.268717,-0.26872 -0.268717,-0.72691 0,-0.4737 0.254937,-0.75103 0.256659,-0.27906 0.69074,-0.27906 0.389295,0 0.614948,0.2515 0.227376,0.24976 0.227376,0.6804 z m -0.316948,-0.093 q -0.0034,-0.2601 -0.146416,-0.41513 -0.141249,-0.15503 -0.375515,-0.15503 -0.265272,0 -0.425468,0.14986 -0.158474,0.14986 -0.18259,0.42203 z" />
+ <path
+ id="path4462"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px"
+ d="m 53.484624,194.33502 v 0.54777 h 0.652844 v 0.24633 h -0.652844 v 1.0473 q 0,0.23599 0.06373,0.30317 0.06546,0.0672 0.26355,0.0672 h 0.32556 v 0.26527 h -0.32556 q -0.366902,0 -0.506428,-0.13608 -0.139526,-0.1378 -0.139526,-0.49954 v -1.0473 h -0.23254 v -0.24633 h 0.232544 v -0.54777 z" />
+ </g>
+ <path
+ sodipodi:nodetypes="csssssssssssssssssssssssssssssssssc"
+ d="m 62.475185,225.28362 c 0,0 -0.165768,0.008 -0.477112,0.0234 -0.311344,0.0153 -0.768264,0.0377 -1.35057,0.0662 -0.582304,0.0285 -1.289995,0.0632 -2.102879,0.10293 -0.812883,0.0398 -1.73096,0.0846 -2.73404,0.13352 -1.003079,0.0489 -2.09116,0.10192 -3.244051,0.15797 -1.152891,0.056 -2.370593,0.11517 -3.632915,0.17631 -1.262321,0.0612 -2.569262,0.12435 -3.90063,0.18856 -1.331368,0.0642 -2.687163,0.12943 -4.047195,0.19466 -1.360033,0.0652 -2.724301,0.13045 -4.072613,0.19465 -1.348314,0.0642 -2.680671,0.1274 -3.976883,0.18855 -1.296211,0.0611 -2.556275,0.12027 -3.760002,0.17632 -1.203726,0.056 -2.351114,0.10905 -3.421973,0.15797 -1.070859,0.0489 -2.065188,0.0938 -2.962796,0.13351 -0.897609,0.0398 -1.698495,0.0744 -2.38247,0.10294 -0.683975,0.0285 -1.251038,0.051 -1.680996,0.0662 -0.429959,0.0153 -0.722814,0.0235 -0.858374,0.0235 -2.168951,0 -3.927232,-0.93451 -3.927231,-2.08727 3e-6,-1.15277 1.758283,-2.08727 3.927231,-2.08727 0.13556,0 0.428414,0.008 0.858373,0.0235 0.429958,0.0153 0.997021,0.0377 1.680996,0.0662 0.683974,0.0285 1.484862,0.0632 2.38247,0.10294 0.897608,0.0398 1.891937,0.0846 2.962796,0.13351 1.070858,0.0489 2.218247,0.10191 3.421973,0.15797 1.203727,0.056 2.463791,0.11517 3.760002,0.17631 1.296211,0.0611 2.628569,0.12434 3.976882,0.18855 1.348313,0.0642 2.712582,0.12943 4.072613,0.19466 1.360032,0.0652 2.715829,0.13046 4.047196,0.19466 1.331368,0.0642 2.638309,0.1274 3.90063,0.18855 1.262322,0.0611 2.480024,0.12026 3.632915,0.17631 1.152892,0.0561 2.240973,0.10906 3.244052,0.15798 1.00308,0.0489 1.921156,0.0938 2.73404,0.13351 0.812884,0.0398 1.520574,0.0744 2.102879,0.10294 0.582306,0.0285 1.039226,0.051 1.35057,0.0662 0.311344,0.0153 0.477112,0.0235 0.477112,0.0235 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4585" />
+ <text
+ xml:space="preserve"
+ style="font-size:3.52777px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="25.933815"
+ y="28.081203"
+ id="text1929"><tspan
+ sodipodi:role="line"
+ id="tspan1927"
+ x="25.933815"
+ y="28.081203"
+ style="stroke-width:0.264583px" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:3.52777px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="23.290878"
+ y="30.558954"
+ id="text1933"><tspan
+ sodipodi:role="line"
+ id="tspan1931"
+ x="23.290878"
+ y="30.558954"
+ style="fill:#000000;stroke:none;stroke-width:0.264583px" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:3.52777px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="65.082314"
+ y="39.644051"
+ id="text1937"><tspan
+ sodipodi:role="line"
+ id="tspan1935"
+ x="65.082314"
+ y="39.644051"
+ style="stroke-width:0.264583px" /></text>
+ <text
+ xml:space="preserve"
+ style="font-stretch:condensed;font-size:3.52778px;line-height:125%;font-family:Impact;-inkscape-font-specification:'Impact Condensed';fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="42.947716"
+ y="32.706341"
+ id="text1945"><tspan
+ sodipodi:role="line"
+ id="tspan1943"
+ x="42.947716"
+ y="32.706341"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52778px;font-family:sans-serif;-inkscape-font-specification:sans-serif;stroke-width:0.4" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="8.8563013"
+ y="8.7257614"
+ id="text1949"><tspan
+ sodipodi:role="line"
+ id="tspan1947"
+ x="8.8563013"
+ y="8.7257614"
+ style="font-size:2.11667px;stroke-width:0.4">Settings: Repeated, Snake, no distance. Tests a path with fillrule=evenodd</tspan></text>
+ <text
+ id="text1949-0"
+ y="72.169098"
+ x="8.8563013"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-size:2.11667px;stroke-width:0.4"
+ y="72.169098"
+ x="8.8563013"
+ id="tspan1947-9"
+ sodipodi:role="line">Settings: Repeated, Stretched, Ribbon, Vertical. Tests a group pattern with multiple nested transforms</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="8.8563013"
+ y="118.87952"
+ id="text1949-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan1947-9-3"
+ x="8.8563013"
+ y="118.87952"
+ style="font-size:2.11667px;stroke-width:0.4">Settings: Repeated, Stretched, Ribbon. Tests a group pattern with multiple nested clones</tspan></text>
+ <text
+ id="text1949-0-0-0"
+ y="162.82248"
+ x="8.8563013"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-size:2.11667px;stroke-width:0.4"
+ y="162.82248"
+ x="8.8563013"
+ id="tspan1947-9-3-9"
+ sodipodi:role="line">Settings: Single, Stretched, Snake. Tests putting a text (converted to a path) on a path and stretching it to fit its length</tspan></text>
+ <path
+ id="path2408"
+ style="fill:url(#radialGradient2465);fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 32.372223,262.63935 c -0.121189,2.58893 -1.345509,4.1846 0,8.09356 1.573242,-0.30788 1.283761,-3.44523 0,-8.09356 z m 2.641701,3.2644 c -0.94687,2.72678 -1.337789,4.6197 -0.686779,4.94957 0.910738,-2.26913 0.519319,-3.35561 0.686779,-4.94957 z m -4.488098,1.28003 c -0.0819,2.31633 0.0998,3.83226 0.775663,3.84834 0.178181,-1.96993 -0.477734,-2.6275 -0.775663,-3.84834 z" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="8.8563013"
+ y="258.26703"
+ id="text1949-0-0-0-4"><tspan
+ sodipodi:role="line"
+ id="tspan1947-9-3-9-1"
+ x="8.8563013"
+ y="258.26703"
+ style="font-size:2.11667px;stroke-width:0.4">Settings: Repeated, Stretched, Snake, Space between copies=5, Normal offset=5. Tests putting a path with multiple subpaths with a gradient on a closed path</tspan></text>
+ <text
+ id="text1949-0-0-5"
+ y="203.22389"
+ x="8.8563013"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11667px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;stroke:none;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-size:2.11667px;stroke-width:0.4"
+ y="203.22389"
+ x="8.8563013"
+ id="tspan1947-9-3-8"
+ sodipodi:role="line">Settings: Single, Stretched, Snake. Tests selecting multiple sceleton paths, one consisting of multiple subpaths</tspan></text>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/pattern_along_path_clone_transform.svg b/share/extensions/tests/data/svg/pattern_along_path_clone_transform.svg
new file mode 100644
index 0000000..2aa033e
--- /dev/null
+++ b/share/extensions/tests/data/svg/pattern_along_path_clone_transform.svg
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg2773"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+ sodipodi:docname="pattern-along-path.svg">
+ <defs
+ id="defs2767" />
+ <sodipodi:namedview
+ inkscape:window-maximized="1"
+ inkscape:window-y="-8"
+ inkscape:window-x="1912"
+ inkscape:window-height="837"
+ inkscape:window-width="1440"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="mm"
+ inkscape:cy="561.25984"
+ inkscape:cx="396.85039"
+ inkscape:zoom="0.5701459"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata2770">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="レイヤー 1">
+ <path
+ d="m 78.692765,147.28893 c 0,0 8.65938,-20.3754 32.315695,-25.58201 22.7349,-5.0038 49.9922,13.12561 49.9922,13.12561"
+ style="fill:none;stroke:#000000;stroke-width:0.26458299px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path3336"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g5438"
+ transform="translate(-23.434524,-6.2366068)">
+ <path
+ id="circle5421"
+ d="m -24.195656,32.220451 a 2.6785679,2.6785679 0 0 1 -2.678568,2.678568 2.6785679,2.6785679 0 0 1 -2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,2.678568 z"
+ style="fill:#ff0000;stroke-width:0.529167"
+ inkscape:connector-curvature="0" />
+ <path
+ id="circle5423"
+ d="m -15.7612,32.220451 a 2.6785679,2.6785679 0 0 1 -2.678568,2.678568 2.6785679,2.6785679 0 0 1 -2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,2.678568 z"
+ style="fill:#000080;stroke-width:0.529167"
+ inkscape:connector-curvature="0" />
+ <path
+ id="circle5425"
+ d="m -20.060417,38.32814 a 2.6785679,2.6785679 0 0 1 -2.678568,2.678568 2.6785679,2.6785679 0 0 1 -2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,-2.678568 2.6785679,2.6785679 0 0 1 2.678568,2.678568 z"
+ style="fill:#008080;stroke-width:0.529167"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g5848"
+ transform="translate(125.4349,80.723289)">
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g5438"
+ id="use5838"
+ transform="translate(-26.83631,54.61756)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g5438"
+ id="use5840"
+ transform="matrix(1,0,0,-1,-11.339286,112.69292)"
+ width="100%"
+ height="100%" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g5438"
+ id="use5842"
+ transform="translate(4.5357143,54.61756)"
+ width="100%"
+ height="100%" />
+ <use
+ height="100%"
+ width="100%"
+ transform="matrix(1,0,0,-1,20.599702,112.69292)"
+ id="use5830"
+ xlink:href="#g5438"
+ y="0"
+ x="0" />
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/perspective.svg b/share/extensions/tests/data/svg/perspective.svg
new file mode 100644
index 0000000..47a6f99
--- /dev/null
+++ b/share/extensions/tests/data/svg/perspective.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg1442"
+ version="1.1"
+ viewBox="0 0 48.229092 27.352564"
+ height="27.352564mm"
+ width="48.229092mm">
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ transform="translate(-84.769969,-2.1401311)">
+ <path
+ inkscape:connector-curvature="0"
+ id="text"
+ style="font-size:40px;font-family:sans-serif;word-spacing:0px;opacity:1;stroke-width:0.76691598"
+ d="m 132.88094,13.452154 v 0.27277 h -0.31378 c -0.11766,0 -0.19967,0.02377 -0.24602,0.0713 -0.0452,0.04753 -0.0678,0.13311 -0.0678,0.25673 v 0.1765 h 0.54019 v 0.25494 h -0.54019 v 1.74182 h -0.32983 v -1.74182 h -0.31377 v -0.25494 h 0.31377 v -0.13906 c 0,-0.22226 0.0517,-0.383903 0.15511,-0.48493 0.10341,-0.102213 0.26743,-0.15332 0.49206,-0.15332 z m -1.35851,1.08395 c -0.0369,-0.0214 -0.0773,-0.03683 -0.12123,-0.0463 -0.0428,-0.01067 -0.0903,-0.016 -0.14263,-0.016 -0.18541,0 -0.32804,0.06062 -0.42787,0.18185 -0.0987,0.12004 -0.14798,0.292973 -0.14798,0.5188 v 1.05187 h -0.32982 v -1.99676 h 0.32982 v 0.31021 c 0.0689,-0.121233 0.15868,-0.21097 0.26921,-0.26921 0.11053,-0.0594 0.24484,-0.0891 0.40292,-0.0891 0.0226,0 0.0476,0.0017 0.0749,0.005 0.0273,0.0027 0.0576,0.0068 0.0909,0.0125 z m -2.6154,-0.0767 c -0.17591,0 -0.31497,0.06894 -0.41718,0.20681 -0.10221,0.13668 -0.15332,0.32447 -0.15332,0.56337 0,0.2389 0.0505,0.427287 0.15154,0.56516 0.10221,0.13668 0.24187,0.20502 0.41896,0.20502 0.17472,0 0.31319,-0.06894 0.4154,-0.20681 0.10221,-0.137867 0.15332,-0.325657 0.15332,-0.56337 0,-0.23652 -0.0511,-0.423717 -0.15332,-0.56159 -0.10221,-0.13906 -0.24068,-0.20859 -0.4154,-0.20859 z m 0,-0.27812 c 0.28525,0 0.5093,0.09271 0.67213,0.27812 0.16283,0.18542 0.24424,0.442147 0.24424,0.77018 0,0.326853 -0.0814,0.58358 -0.24424,0.77018 -0.16283,0.185413 -0.38688,0.27812 -0.67213,0.27812 -0.28644,0 -0.51108,-0.09271 -0.67391,-0.27812 -0.16164,-0.1866 -0.24246,-0.443327 -0.24246,-0.77018 0,-0.328033 0.0808,-0.58476 0.24246,-0.77018 0.16283,-0.185413 0.38747,-0.27812 0.67391,-0.27812 z m -1.77748,0.35122 v -1.08039 h 0.32804 v 2.77407 h -0.32804 v -0.29951 c -0.0689,0.118853 -0.1563,0.2074 -0.26208,0.26564 -0.10459,0.05707 -0.23057,0.0856 -0.37795,0.0856 -0.24128,0 -0.43799,-0.09627 -0.59012,-0.28882 -0.15095,-0.192547 -0.22642,-0.445707 -0.22642,-0.75948 0,-0.31378 0.0755,-0.56694 0.22642,-0.75948 0.15213,-0.192547 0.34884,-0.28882 0.59012,-0.28882 0.14738,0 0.27336,0.02913 0.37795,0.0874 0.10578,0.05707 0.19314,0.14502 0.26208,0.26386 z m -1.11783,0.69708 c 0,0.241273 0.0493,0.430847 0.14797,0.56872 0.0998,0.136687 0.23652,0.20503 0.41005,0.20503 0.17353,0 0.31021,-0.06834 0.41005,-0.20503 0.0998,-0.137873 0.14976,-0.327447 0.14976,-0.56872 0,-0.241273 -0.0499,-0.43025 -0.14976,-0.56693 -0.0998,-0.137873 -0.23652,-0.20681 -0.41005,-0.20681 -0.17353,0 -0.31021,0.06894 -0.41005,0.20681 -0.0987,0.13668 -0.14797,0.325657 -0.14797,0.56693 z m -0.85397,-0.20859 v 1.20519 h -0.32804 v -1.19449 c 0,-0.18898 -0.0369,-0.330417 -0.11054,-0.42431 -0.0737,-0.0939 -0.18422,-0.14085 -0.3316,-0.14085 -0.17709,0 -0.31675,0.05646 -0.41896,0.16937 -0.10222,0.112913 -0.15333,0.26683 -0.15333,0.46175 v 1.12853 h -0.32982 v -2.77407 h 0.32982 v 1.08752 c 0.0784,-0.12004 0.17056,-0.209777 0.27634,-0.26921 0.10697,-0.0594 0.22998,-0.0891 0.36904,-0.0891 0.22939,0 0.40292,0.07131 0.52059,0.21394 0.11767,0.14144 0.1765,0.35003 0.1765,0.62577 z m -4.01135,0.41718 v -1.20875 h 0.32804 v 1.19627 c 0,0.18898 0.0368,0.331013 0.11053,0.4261 0.0737,0.09389 0.18423,0.14084 0.33161,0.14084 0.17709,0 0.31675,-0.05646 0.41896,-0.16937 0.10341,-0.112913 0.15511,-0.26683 0.15511,-0.46175 v -1.13209 h 0.32804 v 1.99676 h -0.32804 v -0.30665 c -0.0796,0.121233 -0.17234,0.211563 -0.27812,0.27099 -0.10459,0.05827 -0.22642,0.0874 -0.36548,0.0874 -0.22939,0 -0.40352,-0.07131 -0.52237,-0.21394 -0.11885,-0.14262 -0.17828,-0.35121 -0.17828,-0.62577 z m -2.16969,-1.87374 h 0.36013 v 1.12496 l 1.19449,-1.12496 h 0.46353 l -1.32107,1.24084 1.41556,1.42091 h -0.47423 l -1.27828,-1.28185 v 1.28185 h -0.36013 z m -2.36402,1.22658 c 0.17234,0.03687 0.30664,0.113527 0.40291,0.22998 0.0975,0.11648 0.14619,0.260293 0.14619,0.43144 0,0.262673 -0.0903,0.465917 -0.27098,0.60973 -0.18066,0.143813 -0.43739,0.21572 -0.77018,0.21572 -0.11173,0 -0.22702,-0.0113 -0.34587,-0.0339 -0.11767,-0.0214 -0.23949,-0.0541 -0.36548,-0.0981 v -0.34765 c 0.0998,0.05827 0.20919,0.102243 0.32804,0.13193 0.11885,0.02973 0.24306,0.0446 0.37261,0.0446 0.22583,0 0.39757,-0.04457 0.51523,-0.13371 0.11886,-0.08914 0.17829,-0.218693 0.17829,-0.38866 0,-0.156887 -0.0553,-0.279307 -0.16581,-0.36726 -0.10934,-0.08914 -0.26207,-0.13371 -0.45818,-0.13371 h -0.31021 v -0.29595 h 0.32447 c 0.17709,0 0.31259,-0.03506 0.40649,-0.10519 0.0939,-0.07131 0.14084,-0.17352 0.14084,-0.30664 0,-0.136687 -0.0487,-0.24128 -0.14619,-0.31378 -0.0963,-0.07369 -0.23474,-0.11053 -0.4154,-0.11053 -0.0986,0 -0.20443,0.0107 -0.31734,0.0321 -0.11291,0.0214 -0.23712,0.05467 -0.37261,0.0998 v -0.32091 c 0.13668,-0.03807 0.26445,-0.0666 0.3833,-0.0856 0.12005,-0.019 0.23296,-0.0285 0.33874,-0.0285 0.27337,0 0.48968,0.0624 0.64895,0.18719 0.15927,0.123613 0.2389,0.2912 0.2389,0.50276 0,0.14738 -0.0422,0.272177 -0.12658,0.37439 -0.0844,0.101027 -0.20444,0.171153 -0.36013,0.21038 z m -3.10568,1.13209 h 1.25689 v 0.30308 h -1.69012 v -0.30308 c 0.13669,-0.14144 0.3227,-0.331013 0.55803,-0.56872 0.23652,-0.2389 0.38509,-0.392817 0.4457,-0.46175 0.11529,-0.129553 0.19552,-0.2389 0.24068,-0.32804 0.0463,-0.09033 0.0695,-0.178873 0.0695,-0.26564 0,-0.14144 -0.0499,-0.25673 -0.14975,-0.34587 -0.0987,-0.08914 -0.22761,-0.13371 -0.38687,-0.13371 -0.11291,0 -0.23236,0.0196 -0.35835,0.0588 -0.1248,0.0392 -0.25851,0.09863 -0.40114,0.17828 v -0.36369 c 0.14501,-0.05827 0.2805,-0.102243 0.40649,-0.13193 0.12599,-0.02973 0.24127,-0.0446 0.34586,-0.0446 0.27575,0 0.49563,0.06893 0.65965,0.2068 0.16402,0.137873 0.24603,0.3221 0.24603,0.55268 0,0.109347 -0.0208,0.213343 -0.0624,0.31199 -0.0404,0.09747 -0.11469,0.212757 -0.22286,0.34587 -0.0297,0.03447 -0.12422,0.134307 -0.28347,0.29952 -0.15926,0.16402 -0.38389,0.394003 -0.6739,0.68995 z m -2.3248,0 h 1.25689 v 0.30308 h -1.69011 v -0.30308 c 0.13668,-0.14144 0.32269,-0.331013 0.55802,-0.56872 0.23652,-0.2389 0.38509,-0.392817 0.4457,-0.46175 0.11529,-0.129553 0.19552,-0.2389 0.24069,-0.32804 0.0463,-0.09033 0.0695,-0.178873 0.0695,-0.26564 0,-0.14144 -0.0499,-0.25673 -0.14976,-0.34587 -0.0987,-0.08914 -0.22761,-0.13371 -0.38688,-0.13371 -0.11291,0 -0.23235,0.0196 -0.35834,0.0588 -0.1248,0.0392 -0.25851,0.09863 -0.40114,0.17828 v -0.36369 c 0.14501,-0.05827 0.2805,-0.102243 0.40649,-0.13193 0.12599,-0.02973 0.24127,-0.0446 0.34586,-0.0446 0.27575,0 0.49563,0.06893 0.65965,0.2068 0.16402,0.137873 0.24603,0.3221 0.24603,0.55268 0,0.109347 -0.0208,0.213343 -0.0624,0.31199 -0.0404,0.09747 -0.11469,0.212757 -0.22286,0.34587 -0.0297,0.03447 -0.12422,0.134307 -0.28346,0.29952 -0.15927,0.16402 -0.3839,0.394003 -0.67391,0.68995 z m -1.64555,-2.0449 -0.90923,1.42091 h 0.90923 z m -0.0945,-0.31377 h 0.45284 v 1.73468 h 0.37974 v 0.29952 H 109.895 v 0.62755 h -0.35835 v -0.62755 h -1.20162 v -0.34765 z m -2.90956,2.35867 h 1.25689 v 0.30308 h -1.69012 v -0.30308 c 0.13669,-0.14144 0.3227,-0.331013 0.55803,-0.56872 0.23652,-0.2389 0.38509,-0.392817 0.4457,-0.46175 0.11529,-0.129553 0.19552,-0.2389 0.24068,-0.32804 0.0463,-0.09033 0.0695,-0.178873 0.0695,-0.26564 0,-0.14144 -0.0499,-0.25673 -0.14975,-0.34587 -0.0986,-0.08914 -0.22761,-0.13371 -0.38687,-0.13371 -0.11292,0 -0.23237,0.0196 -0.35835,0.0588 -0.1248,0.0392 -0.25851,0.09863 -0.40114,0.17828 v -0.36369 c 0.14501,-0.05827 0.2805,-0.102243 0.40649,-0.13193 0.12598,-0.02973 0.24127,-0.0446 0.34586,-0.0446 0.27575,0 0.49563,0.06893 0.65965,0.2068 0.16402,0.137873 0.24603,0.3221 0.24603,0.55268 0,0.109347 -0.0208,0.213343 -0.0624,0.31199 -0.0404,0.09747 -0.11469,0.212757 -0.22286,0.34587 -0.0297,0.03447 -0.12422,0.134307 -0.28346,0.29952 -0.15927,0.16402 -0.3839,0.394003 -0.67391,0.68995 z m 20.96598,-6.9227001 h 1.41378 v 0.30308 h -1.08396 v 0.65252 c 0.0523,-0.0178 0.10456,-0.03087 0.15689,-0.0392 0.0523,-0.0095 0.10456,-0.0143 0.15689,-0.0143 0.29714,0 0.53247,0.08141 0.706,0.2442401 0.17353,0.162833 0.26029,0.38331 0.26029,0.66143 0,0.28644 -0.0891,0.509293 -0.26742,0.66856 -0.17829,0.15808 -0.42967,0.23712 -0.75414,0.23712 -0.11172,0 -0.22582,-0.0095 -0.3423,-0.0285 -0.11529,-0.019 -0.23474,-0.04753 -0.35835,-0.0856 v -0.36192 c 0.10697,0.05827 0.21751,0.10165 0.33161,0.13015 0.1141,0.02853 0.23474,0.0428 0.36191,0.0428 0.20562,0 0.36845,-0.05408 0.4885,-0.16224 0.12004,-0.10816 0.18006,-0.254947 0.18006,-0.44036 0,-0.185413 -0.06,-0.332197 -0.18006,-0.44035 -0.12005,-0.10816 -0.28288,-0.16224 -0.4885,-0.16224 -0.0963,0 -0.19255,0.0107 -0.28882,0.0321 -0.0951,0.0214 -0.19254,0.05467 -0.29238,0.0998 z m -2.21604,1.6402001 c 0,-0.237707 -0.0493,-0.42193 -0.14798,-0.55267 -0.0975,-0.1307471 -0.23474,-0.1961201 -0.41183,-0.1961201 -0.17591,0 -0.31318,0.06537 -0.41183,0.1961201 -0.0975,0.13074 -0.1462,0.314963 -0.1462,0.55267 0,0.23652 0.0487,0.42015 0.1462,0.55089 0.0987,0.13074 0.23592,0.19611 0.41183,0.19611 0.17709,0 0.31437,-0.06537 0.41183,-0.19611 0.0987,-0.13074 0.14798,-0.31437 0.14798,-0.55089 z m 0.32803,0.77375 c 0,0.33992 -0.0755,0.592483 -0.22641,0.75769 -0.15095,0.1664 -0.38212,0.2496 -0.69352,0.2496 -0.11529,0 -0.22405,-0.0089 -0.32626,-0.0267 -0.10221,-0.01667 -0.20146,-0.0428 -0.29773,-0.0784 v -0.31913 c 0.0963,0.05233 0.19136,0.09096 0.28525,0.11589 0.0939,0.02493 0.18958,0.0374 0.28704,0.0374 0.21513,0 0.37617,-0.05646 0.48314,-0.16937 0.10697,-0.111727 0.16046,-0.281093 0.16046,-0.5081 v -0.16224 c -0.0678,0.117667 -0.15452,0.205617 -0.2603,0.26385 -0.10578,0.05827 -0.23236,0.0874 -0.37974,0.0874 -0.24484,0 -0.44214,-0.0933 -0.59189,-0.2799 -0.14976,-0.1866 -0.22464,-0.433817 -0.22464,-0.74165 0,-0.309027 0.0749,-0.55684 0.22464,-0.7434401 0.14975,-0.1866 0.34705,-0.2799 0.59189,-0.2799 0.14738,0 0.27396,0.02913 0.37974,0.0874 0.10578,0.05827 0.19255,0.146217 0.2603,0.26385 v -0.30307 h 0.32803 z m -2.18038,-0.83258 v 0.16045 h -1.50827 c 0.0143,0.225827 0.082,0.398167 0.20324,0.51702 0.12242,0.117667 0.29238,0.1765 0.50989,0.1765 0.12599,0 0.24781,-0.01547 0.36547,-0.0464 0.11886,-0.03087 0.23653,-0.07722 0.353,-0.13906 v 0.31021 c -0.11767,0.04993 -0.2383,0.08797 -0.36191,0.1141 -0.12361,0.02613 -0.249,0.0392 -0.37617,0.0392 -0.31853,0 -0.5711,-0.09271 -0.75771,-0.27812 -0.18541,-0.185413 -0.27811,-0.436197 -0.27811,-0.75235 0,-0.326853 0.088,-0.585957 0.26385,-0.7773101 0.17709,-0.192547 0.4154,-0.28882 0.71491,-0.28882 0.26861,0 0.48077,0.08676 0.63647,0.26029 0.15689,0.1723401 0.23534,0.4070801 0.23534,0.7042201 z m -0.32805,-0.0963 c -0.003,-0.179473 -0.0532,-0.322693 -0.15154,-0.42966 -0.0975,-0.1069731 -0.22701,-0.1604601 -0.38865,-0.1604601 -0.18304,0 -0.32983,0.0517 -0.44036,0.1551101 -0.10935,0.1034 -0.17234,0.248997 -0.18898,0.43679 z m -4.55867,-0.8201001 h 0.32804 l 0.41005,1.5581801 0.40826,-1.5581801 h 0.38687 l 0.41006,1.5581801 0.40826,-1.5581801 h 0.32804 l -0.52237,1.9967601 h -0.38687 l -0.42966,-1.63663 -0.43144,1.63663 h -0.38687 z m -0.15689,0.30664 c -0.0369,-0.0214 -0.0773,-0.03683 -0.12123,-0.0463 -0.0428,-0.01073 -0.0903,-0.0161 -0.14263,-0.0161 -0.18541,0 -0.32804,0.06062 -0.42787,0.1818501 -0.0987,0.120047 -0.14798,0.29298 -0.14798,0.5188 v 1.05187 h -0.32982 V 9.6653739 h 0.32982 v 0.31021 c 0.0689,-0.121233 0.15868,-0.21097 0.26921,-0.26921 0.11053,-0.0594 0.24484,-0.0891 0.40292,-0.0891 0.0226,0 0.0476,0.0017 0.0749,0.005 0.0273,0.0027 0.0576,0.0068 0.0909,0.0125 z m -1.69546,0.6097301 v 0.16045 h -1.50827 c 0.0143,0.225827 0.082,0.398167 0.20324,0.51702 0.12242,0.117667 0.29238,0.1765 0.50989,0.1765 0.12599,0 0.24781,-0.01547 0.36548,-0.0464 0.11885,-0.03087 0.23652,-0.07722 0.353,-0.13906 v 0.31021 c -0.11767,0.04993 -0.23831,0.08797 -0.36192,0.1141 -0.12361,0.02613 -0.249,0.0392 -0.37617,0.0392 -0.31853,0 -0.5711,-0.09271 -0.7577,-0.27812 -0.18541,-0.185413 -0.27812,-0.436197 -0.27812,-0.75235 0,-0.326853 0.088,-0.585957 0.26386,-0.7773101 0.17709,-0.192547 0.4154,-0.28882 0.71491,-0.28882 0.26861,0 0.48077,0.08676 0.63647,0.26029 0.15689,0.1723401 0.23533,0.4070801 0.23533,0.7042201 z m -0.32804,-0.0963 c -0.003,-0.179473 -0.0532,-0.322693 -0.15154,-0.42966 -0.0975,-0.1069731 -0.22701,-0.1604601 -0.38866,-0.1604601 -0.18303,0 -0.32982,0.0517 -0.44035,0.1551101 -0.10935,0.1034 -0.17234,0.248997 -0.18898,0.43679 z m -2.48882,-1.3870401 v 0.56694 h 0.67569 v 0.25494 h -0.67569 v 1.0839501 c 0,0.162833 0.022,0.267427 0.066,0.31378 0.0451,0.04633 0.13606,0.0695 0.27278,0.0695 h 0.33695 v 0.27456 h -0.33695 c -0.25317,0 -0.42788,-0.04695 -0.52415,-0.14084 -0.0963,-0.09509 -0.14441,-0.267427 -0.14441,-0.51702 V 9.9202539 h -0.24069 v -0.25494 h 0.24069 v -0.56694 z m -0.95559,0.62577 v 0.3102101 c -0.0927,-0.04753 -0.18898,-0.08319 -0.28882,-0.1069701 -0.0998,-0.0238 -0.20324,-0.0357 -0.31021,-0.0357 -0.16283,0 -0.28525,0.02497 -0.36726,0.0749 -0.0808,0.04993 -0.12123,0.1248101 -0.12123,0.2246301 0,0.07607 0.0291,0.13609 0.0874,0.18007 0.0583,0.0428 0.17534,0.0838 0.35121,0.12301 l 0.11232,0.025 c 0.23295,0.04993 0.39816,0.120653 0.49563,0.21216 0.0987,0.09033 0.14797,0.216907 0.14797,0.37974 0,0.185413 -0.0737,0.3322 -0.22107,0.44036 -0.14619,0.108153 -0.34765,0.16223 -0.60438,0.16223 -0.10697,0 -0.21869,-0.0107 -0.33517,-0.0321 -0.11529,-0.0202 -0.23711,-0.0511 -0.36548,-0.0927 v -0.33873 c 0.12123,0.063 0.24068,0.110543 0.35835,0.14263 0.11767,0.03093 0.23415,0.0464 0.34944,0.0464 0.15451,0 0.27336,-0.02613 0.35656,-0.0784 0.0832,-0.05347 0.12479,-0.128347 0.12479,-0.22464 0,-0.08914 -0.0303,-0.15748 -0.0909,-0.20502 -0.0594,-0.04753 -0.19073,-0.09329 -0.394,-0.13728 l -0.1141,-0.0267 c -0.20324,-0.0428 -0.35003,-0.10817 -0.44036,-0.19611 -0.0903,-0.08914 -0.13549,-0.210967 -0.13549,-0.36548 0,-0.187787 0.0666,-0.3327901 0.19967,-0.4350101 0.13312,-0.102213 0.3221,-0.15332 0.56694,-0.15332 0.12123,0 0.23533,0.0089 0.3423,0.0267 0.10697,0.0178 0.20562,0.04453 0.29595,0.0802 z m -3.62448,1.1499201 V 9.6653439 h 0.32804 v 1.1962701 c 0,0.18898 0.0368,0.33101 0.11053,0.42609 0.0737,0.0939 0.18423,0.14085 0.33161,0.14085 0.17709,0 0.31675,-0.05646 0.41896,-0.16937 0.10341,-0.112913 0.15511,-0.26683 0.15511,-0.46175 V 9.6653439 h 0.32804 v 1.9967601 h -0.32804 v -0.30665 c -0.0796,0.121233 -0.17234,0.211563 -0.27812,0.27099 -0.10459,0.05827 -0.22642,0.0874 -0.36548,0.0874 -0.22939,0 -0.40352,-0.07131 -0.52237,-0.21394 -0.11885,-0.142627 -0.17828,-0.351217 -0.17828,-0.62577 z M 106.1903,9.0003439 h 0.53663 l 0.67925,1.8113501 0.68282,-1.8113501 h 0.53663 v 2.6617601 h -0.35121 V 9.3248239 l -0.68639,1.8257101 h -0.36191 L 106.53973,9.3249239 V 11.662204 H 106.1903 Z M 127.53602,6.094344 c -0.26505,0 -0.44868,0.0303 -0.55089,0.0909 -0.10221,0.0606 -0.15332,0.1640033 -0.15332,0.31021 0,0.11648 0.038,0.20919 0.1141,0.27813 0.0772,0.06774 0.18184,0.10161 0.31377,0.10161 0.18185,0 0.32745,-0.06418 0.4368,-0.19254 0.11053,-0.1295533 0.1658,-0.3012967 0.1658,-0.51523 v -0.0731 z m 0.6543,-0.13549 v 1.13922 h -0.32804 v -0.30308 c -0.0749,0.1212333 -0.16818,0.21097 -0.2799,0.26921 -0.11173,0.057067 -0.24841,0.0856 -0.41005,0.0856 -0.20443,0 -0.36727,-0.05705 -0.4885,-0.17115 -0.12004,-0.1152933 -0.18006,-0.26921 -0.18006,-0.46175 0,-0.2246333 0.0749,-0.3940033 0.22463,-0.50811 0.15095,-0.1141 0.37558,-0.17115 0.67391,-0.17115 h 0.45997 v -0.0321 c 0,-0.15094 -0.0499,-0.2674167 -0.14976,-0.34943 -0.0987,-0.0832 -0.23771,-0.1248 -0.41718,-0.1248 -0.1141,0 -0.22523,0.013667 -0.33339,0.041 -0.10815,0.027333 -0.21215,0.06834 -0.31199,0.12302 v -0.30308 c 0.12004,-0.046333 0.23652,-0.080803 0.34943,-0.10341 0.11291,-0.0238 0.22285,-0.0357 0.32982,-0.0357 0.28882,0 0.50454,0.07488 0.64717,0.22464 0.14263,0.1497533 0.21394,0.3767667 0.21394,0.68104 z m -3.56565,-0.47423 c 0.082,-0.14738 0.18007,-0.2561333 0.29417,-0.32626 0.1141,-0.07012 0.24841,-0.10518 0.40292,-0.10518 0.20799,0 0.36845,0.073093 0.48136,0.21928 0.11291,0.1450067 0.16937,0.3518133 0.16937,0.62042 v 1.20519 h -0.32983 v -1.19449 c 0,-0.1913533 -0.0339,-0.3333833 -0.10162,-0.42609 -0.0678,-0.092707 -0.17115,-0.13906 -0.31021,-0.13906 -0.16996,0 -0.30427,0.056457 -0.40292,0.16937 -0.0986,0.1129067 -0.14797,0.2668233 -0.14797,0.46175 v 1.12852 h -0.32982 v -1.19449 c 0,-0.1925467 -0.0339,-0.3345767 -0.10162,-0.42609 -0.0678,-0.092707 -0.17234,-0.13906 -0.31378,-0.13906 -0.16759,0 -0.3007,0.05705 -0.39935,0.17115 -0.0987,0.1129133 -0.14797,0.2662367 -0.14797,0.45997 v 1.12852 h -0.32982 v -1.99676 h 0.32982 v 0.31021 c 0.0749,-0.12242 0.16461,-0.21275 0.2692,-0.27099 0.10459,-0.058267 0.2288,-0.0874 0.37261,-0.0874 0.14501,0 0.26802,0.036847 0.36905,0.11054 0.10221,0.073687 0.17768,0.1806567 0.22641,0.32091 z m -3.55851,0 c 0.082,-0.14738 0.18007,-0.2561333 0.29417,-0.32626 0.1141,-0.07012 0.24841,-0.10518 0.40292,-0.10518 0.20799,0 0.36845,0.073093 0.48136,0.21928 0.11291,0.1450067 0.16937,0.3518133 0.16937,0.62042 v 1.20519 h -0.32983 v -1.19449 c 0,-0.1913533 -0.0339,-0.3333833 -0.10162,-0.42609 -0.0678,-0.092707 -0.17115,-0.13906 -0.31021,-0.13906 -0.16996,0 -0.30427,0.056457 -0.40292,0.16937 -0.0986,0.1129067 -0.14797,0.2668233 -0.14797,0.46175 v 1.12852 h -0.32982 v -1.19449 c 0,-0.1925467 -0.0339,-0.3345767 -0.10162,-0.42609 -0.0678,-0.092707 -0.17234,-0.13906 -0.31378,-0.13906 -0.16759,0 -0.3007,0.05705 -0.39935,0.17115 -0.0987,0.1129133 -0.14798,0.2662367 -0.14798,0.45997 v 1.12852 h -0.32982 v -1.99676 h 0.32982 v 0.31021 c 0.0749,-0.12242 0.16462,-0.21275 0.26921,-0.27099 0.10459,-0.058267 0.2288,-0.0874 0.37261,-0.0874 0.14501,0 0.26802,0.036847 0.36905,0.11054 0.10221,0.073687 0.17768,0.1806567 0.22641,0.32091 z m -3.85089,-1.0483 h 1.68298 v 0.30308 h -1.32285 v 0.78801 h 1.26759 v 0.30308 h -1.26759 v 0.9645 h 1.35494 v 0.30308 h -1.71507 z m -1.71508,1.58136 v 0.16046 h -1.50826 c 0.0143,0.22582 0.082,0.39816 0.20324,0.51702 0.12242,0.11766 0.29238,0.17649 0.50989,0.17649 0.12598,0 0.2478,-0.015467 0.36547,-0.0464 0.11886,-0.030867 0.23653,-0.07722 0.353,-0.13906 v 0.31022 c -0.11767,0.049933 -0.2383,0.087963 -0.36191,0.11409 -0.12361,0.026133 -0.249,0.0392 -0.37618,0.0392 -0.31853,0 -0.57109,-0.092707 -0.7577,-0.27812 -0.18541,-0.1854067 -0.27812,-0.43619 -0.27812,-0.75235 0,-0.3268467 0.0879,-0.58595 0.26386,-0.77731 0.17709,-0.19254 0.4154,-0.28881 0.71491,-0.28881 0.26861,0 0.48077,0.086763 0.63647,0.26029 0.15689,0.17234 0.23533,0.4070767 0.23533,0.70421 z m -0.32804,-0.0963 c -0.003,-0.1794667 -0.0532,-0.3226867 -0.15154,-0.42966 -0.0975,-0.1069667 -0.22701,-0.16045 -0.38865,-0.16045 -0.18304,0 -0.32983,0.0517 -0.44036,0.1551 -0.10935,0.1034067 -0.17234,0.2490033 -0.18898,0.43679 z m -2.48882,-1.38703 v 0.56693 h 0.67569 v 0.25495 h -0.67569 v 1.08395 c 0,0.1628333 0.022,0.2674267 0.066,0.31378 0.0452,0.046333 0.13612,0.0695 0.27277,0.0695 h 0.33696 v 0.27455 h -0.33696 c -0.25316,0 -0.42787,-0.046947 -0.52414,-0.14084 -0.0963,-0.09508 -0.14441,-0.26742 -0.14441,-0.51702 v -1.08395 h -0.24068 v -0.25495 h 0.24068 v -0.56693 z m -0.98233,1.3585 v 1.20519 h -0.32804 v -1.19449 c 0,-0.18898 -0.0369,-0.3304167 -0.11054,-0.42431 -0.0737,-0.093893 -0.18422,-0.14084 -0.3316,-0.14084 -0.17709,0 -0.31675,0.056457 -0.41896,0.16937 -0.10221,0.1129067 -0.15332,0.2668233 -0.15332,0.46175 v 1.12852 h -0.32983 v -1.99676 h 0.32983 v 0.31021 c 0.0784,-0.12004 0.17055,-0.2097733 0.27633,-0.2692 0.10697,-0.0594 0.22999,-0.0891 0.36905,-0.0891 0.22939,0 0.40291,0.071313 0.52058,0.21394 0.11767,0.1414333 0.1765,0.35002 0.1765,0.62576 z m -2.99158,0.20146 c -0.26504,0 -0.44867,0.0303 -0.55089,0.0909 -0.10221,0.0606 -0.15332,0.1640033 -0.15332,0.31021 0,0.11648 0.038,0.20919 0.1141,0.27813 0.0772,0.06774 0.18185,0.10161 0.31378,0.10161 0.18185,0 0.32744,-0.06418 0.43679,-0.19254 0.11053,-0.1295533 0.1658,-0.3012967 0.1658,-0.51523 v -0.0731 z m 0.6543,-0.13549 v 1.13922 h -0.32804 v -0.30308 c -0.0749,0.1212333 -0.16817,0.21097 -0.2799,0.26921 -0.11173,0.057067 -0.24841,0.0856 -0.41005,0.0856 -0.20443,0 -0.36726,-0.05705 -0.48849,-0.17115 -0.12005,-0.1152933 -0.18007,-0.26921 -0.18007,-0.46175 0,-0.2246333 0.0749,-0.3940033 0.22464,-0.50811 0.15095,-0.1141 0.37558,-0.17115 0.6739,-0.17115 h 0.45997 v -0.0321 c 0,-0.15094 -0.0499,-0.2674167 -0.14975,-0.34943 -0.0987,-0.0832 -0.23771,-0.1248 -0.41718,-0.1248 -0.1141,0 -0.22523,0.013667 -0.33339,0.041 -0.10816,0.027333 -0.21216,0.06834 -0.312,0.12302 v -0.30308 c 0.12005,-0.046333 0.23653,-0.080803 0.34944,-0.10341 0.11291,-0.0238 0.22285,-0.0357 0.32982,-0.0357 0.28881,0 0.50453,0.07488 0.64716,0.22464 0.14263,0.1497533 0.21394,0.3767667 0.21394,0.68104 z m -3.54247,-1.52253 h 2.25171 v 0.30308 h -0.9449 v 2.35867 h -0.36191 v -2.35867 h -0.9449 z"
+ sodipodi:nodetypes="ccscsccccccccccscccccscsccccccscccscscscscsscscscscscccccccscscscccscscscscscccscscsccccccsccccccscscsccccccscscccccccccccccccscsccccscscsccscscsscccscscccccccccccscsccccscscccccccccccccscsccccscscccccccccccccccccccccccccccccscsccccscscccccccccccscscsccccscscscccscscscscsscsccccscsccscscsscccsccccscccsscscscscccscccccccccccccccccccscsccccccscccccccsccccscscscscccsccccccccscsccscscccccccccscsccccscsccccscsccccscsccccccscscsccccccsssccccccccccccccccsscscscccccccscscscscsccccscscccscsccssscsccscscsccccccscccccscsccssscsccscscsccccccsccccccccccccccccccccsccccscscscscccsccccccccscsccscscccccccccscscsccccccscccccscscscccccccscscscscsscccscscccccccccc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458299px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 112.2612,24.293057 c -4.24968,1.02798 -9.17628,1.76061 -13.426401,2.78804 -4.32682,-3.42805 -9.5533,-7.35109 -13.88065,-10.77967 3.62032,-0.77296 7.43135,-1.02733 11.05107,-1.80082 4.957321,3.17417 11.299291,6.61888 16.255981,9.79245 z"
+ id="envelope"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/perspective_groups.svg b/share/extensions/tests/data/svg/perspective_groups.svg
new file mode 100644
index 0000000..33acaa2
--- /dev/null
+++ b/share/extensions/tests/data/svg/perspective_groups.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg1442"
+ version="1.1"
+ viewBox="0 0 48.229092 27.352564"
+ height="27.352564mm"
+ width="48.229092mm">
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ transform="translate(-84.769969,-2.1401311)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 112.2612,24.293057 -13.426401,2.78804 -13.88065,-10.77967 11.05107,-1.80082 z"
+ id="envelope"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="obj"
+ transform="matrix(1.1831883,0,0,1.2451303,-21.014249,-3.8760083)"
+ style="stroke-width:0.823883">
+ <path
+ d="m 114.25288,5.8730068 h 8.0941 v 9.4361272 h -8.0941 z"
+ style="fill:#ff0000;stroke-width:0.823883;stop-color:#000000"
+ id="rectangle" />
+ <g
+ transform="translate(-0.15119026,-0.14782928)"
+ id="ellipse"
+ style="stroke-width:0.823883">
+ <path
+ id="path868"
+ style="fill:#ffff00;stroke-width:0.823883;stop-color:#000000"
+ d="m 119.99817,11.072998 a 1.3420268,1.3839653 0 0 1 -1.34203,1.383965 1.3420268,1.3839653 0 0 1 -1.34202,-1.383965 1.3420268,1.3839653 0 0 1 1.34202,-1.3839652 1.3420268,1.3839653 0 0 1 1.34203,1.3839652"
+ transform="translate(2.5,3)" />
+ <g
+ style="stroke-width:0.90823"
+ transform="matrix(0.77283687,0,-0.78132957,1.0647538,36.868452,-0.74452689)"
+ id="g877">
+ <path
+ sodipodi:nodetypes="cc"
+ id="line"
+ d="M 116.46617,6.9686643 V 14.601442"
+ style="fill:none;stroke:#000000;stroke-width:0.961211;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ style="font-style:normal;font-weight:normal;font-size:2.90648px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:0.179595"
+ id="text"
+ transform="scale(1.025842,0.97480899)"
+ aria-label="Test">
+ <path
+ id="path1097"
+ style="font-size:2.90648px;fill:#00ff00;stroke-width:0.179595"
+ d="m 112.48715,6.8935872 h 1.79243 v 0.2412606 h -0.75217 v 1.8775748 h -0.28809 V 7.1348478 h -0.75217 z" />
+ <path
+ id="path1099"
+ style="font-size:2.90648px;fill:#00ff00;stroke-width:0.179595"
+ d="m 115.41208,8.1523996 v 0.1277262 h -1.20063 q 0.017,0.2696442 0.16179,0.4115621 0.14618,0.1404988 0.40589,0.1404988 0.15043,0 0.29093,-0.036899 0.14192,-0.036899 0.281,-0.1106961 v 0.2469373 q -0.1405,0.059606 -0.2881,0.090828 -0.14759,0.031222 -0.29944,0.031222 -0.38034,0 -0.60316,-0.2213921 -0.22139,-0.221392 -0.22139,-0.5988938 0,-0.3902744 0.21004,-0.6187624 0.21146,-0.2299071 0.56909,-0.2299071 0.32074,0 0.50665,0.2072003 0.18733,0.205781 0.18733,0.5605759 z m -0.26113,-0.076636 q -0.003,-0.2142961 -0.12063,-0.3420223 -0.11637,-0.1277261 -0.30938,-0.1277261 -0.21855,0 -0.35054,0.1234686 -0.13056,0.1234686 -0.15043,0.347699 z" />
+ <path
+ id="path1101"
+ style="font-size:2.90648px;fill:#00ff00;stroke-width:0.179595"
+ d="m 116.85397,7.4697742 v 0.2469373 q -0.1107,-0.056767 -0.22991,-0.085151 -0.11921,-0.028384 -0.24694,-0.028384 -0.19442,0 -0.29235,0.059605 -0.0965,0.059606 -0.0965,0.1788167 0,0.090827 0.0695,0.1433371 0.0695,0.05109 0.27958,0.097923 l 0.0894,0.019869 q 0.27816,0.059605 0.39454,0.1688823 0.11779,0.1078577 0.11779,0.3022853 0,0.2213921 -0.17598,0.3505374 -0.17456,0.1291454 -0.4811,0.1291454 -0.12773,0 -0.26681,-0.025545 -0.13766,-0.024126 -0.29093,-0.073797 V 8.684592 q 0.14476,0.075217 0.28526,0.1135344 0.14049,0.036899 0.27815,0.036899 0.1845,0 0.28384,-0.062444 0.0993,-0.063863 0.0993,-0.1788167 0,-0.1064384 -0.0724,-0.1632056 -0.071,-0.056767 -0.31364,-0.1092769 l -0.0908,-0.021288 q -0.24268,-0.05109 -0.35054,-0.1561097 -0.10786,-0.1064385 -0.10786,-0.2909319 0,-0.2242304 0.15895,-0.3462798 0.15895,-0.1220495 0.4513,-0.1220495 0.14476,0 0.27248,0.021288 0.12773,0.021288 0.23559,0.063863 z" />
+ <path
+ id="path1103"
+ style="font-size:2.90648px;fill:#00ff00;stroke-width:0.179595"
+ d="m 117.61465,6.9716421 v 0.4512992 h 0.53787 V 7.625884 h -0.53787 v 0.8628612 q 0,0.1944277 0.0525,0.2497757 0.0539,0.055348 0.21713,0.055348 h 0.26823 v 0.2185537 h -0.26823 q -0.30228,0 -0.41724,-0.1121152 Q 117.3521,8.786773 117.3521,8.4887452 V 7.625884 h -0.19159 V 7.4229413 h 0.19159 V 6.9716421 Z" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/pixelsnap_simple.svg b/share/extensions/tests/data/svg/pixelsnap_simple.svg
new file mode 100644
index 0000000..a25eaa7
--- /dev/null
+++ b/share/extensions/tests/data/svg/pixelsnap_simple.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297.3mm"
+ viewBox="0 0 210 297.3"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-alpha (df1ee07fc9, 2022-02-08)"
+ sodipodi:docname="pixelsnap_simple.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:blackoutopacity="0.0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.89263468"
+ inkscape:cx="398.25923"
+ inkscape:cy="561.81998"
+ inkscape:window-width="2488"
+ inkscape:window-height="1376"
+ inkscape:window-x="1992"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="rect1144"
+ width="72.127823"
+ height="93.475296"
+ x="102.39124"
+ y="98.094337" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="path1302"
+ cx="69.683548"
+ cy="59.813026"
+ rx="12.090026"
+ ry="12.095892" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1"
+ d="M 141.96203,19.045084 V 59.074563"
+ id="path1430" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1"
+ d="m 159.2305,37.350562 24.72845,24.728442"
+ id="path1432" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1"
+ d="m 146.79102,63.686938 h 44.4943"
+ id="path1434" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/preserved-transforms.svg b/share/extensions/tests/data/svg/preserved-transforms.svg
new file mode 100644
index 0000000..db4eaa7
--- /dev/null
+++ b/share/extensions/tests/data/svg/preserved-transforms.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg13620"
+ sodipodi:docname="preserved-transforms.svg"
+ inkscape:version="1.1-dev (d1a926bd5e, 2020-11-14)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs13616" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="1117.1429"
+ inkscape:cy="358.57143"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="717"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="rect13644"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="m 0,0 h 210 l 0,297 H 0 Z"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ id="path13777"
+ style="fill:none;stroke:#008000;stroke-width:15.875"
+ d="M 193.97718,753.03612 H 537.24066 V 1015.715 H 193.97718 Z"
+ transform="matrix(0.1,0,0,0.1,47.145,0)" />
+ <path
+ id="path13779"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="M 19.397718,105.30361 H 53.724066 V 131.5715 H 19.397718 Z"
+ transform="translate(86.80554)" />
+ <path
+ id="path13781"
+ style="fill:none;stroke:#008000;stroke-width:1.5875"
+ d="M 19.397718,135.30361 H 53.724066 V 161.5715 H 19.397718 Z"
+ transform="rotate(180,102.63955,148.43755)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/restack_grouped.svg b/share/extensions/tests/data/svg/restack_grouped.svg
new file mode 100644
index 0000000..aee5629
--- /dev/null
+++ b/share/extensions/tests/data/svg/restack_grouped.svg
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="169.42618mm"
+ height="96.065048mm"
+ viewBox="0 0 169.42618 96.065048"
+ version="1.1"
+ id="svg24533"
+ inkscape:version="1.1 (c68e22c387, 2021-05-23)"
+ sodipodi:docname="Restack Ext Broken (1.1 Final).svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview24535"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.94867184"
+ inkscape:cx="159.69695"
+ inkscape:cy="153.89937"
+ inkscape:window-width="898"
+ inkscape:window-height="650"
+ inkscape:window-x="153"
+ inkscape:window-y="117"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs24530" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-37.11298,-93.351635)">
+ <g
+ id="g20858"
+ transform="translate(585.55424,111.4411)">
+ <ellipse
+ style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse20840"
+ cx="-533.20276"
+ cy="58.75951"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#000000;stroke-width:0.127877"
+ id="ellipse20844"
+ cx="-530.67706"
+ cy="52.385899"
+ rx="6.1487341"
+ ry="9.2231016" />
+ </g>
+ <g
+ id="g21085"
+ transform="translate(567.78624,131.8341)">
+ <ellipse
+ style="fill:#0088aa;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse20846"
+ cx="-479.50827"
+ cy="38.366844"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#00ffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.101001"
+ id="ellipse20860"
+ cx="-479.785"
+ cy="37.150768"
+ rx="4.8564696"
+ ry="7.2847047" />
+ </g>
+ <g
+ id="g20940"
+ transform="translate(603.71224,131.8341)">
+ <ellipse
+ style="fill:#ac939d;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse20934"
+ cx="-479.50827"
+ cy="38.366844"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#a02c2c;fill-rule:evenodd;stroke:#000000;stroke-width:0.101001"
+ id="ellipse20936"
+ cx="-483.15259"
+ cy="32.660641"
+ rx="4.8564696"
+ ry="7.2847047" />
+ </g>
+ <g
+ id="g26580"
+ transform="translate(619.88824,131.8341)">
+ <ellipse
+ style="fill:#0044aa;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse26576"
+ cx="-479.50827"
+ cy="38.366844"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#2a7fff;fill-rule:evenodd;stroke:#000000;stroke-width:0.101001"
+ id="ellipse26578"
+ cx="-483.15259"
+ cy="32.660641"
+ rx="4.8564696"
+ ry="7.2847047" />
+ </g>
+ <g
+ id="g21081"
+ transform="translate(553.75724,105.6421)">
+ <ellipse
+ style="fill:#c837ab;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse20850"
+ cx="-447.51611"
+ cy="64.55925"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#ffff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.0874424"
+ id="ellipse20838"
+ cx="-448.63864"
+ cy="59.177967"
+ rx="4.2045202"
+ ry="6.3067808" />
+ </g>
+ <g
+ id="g20854"
+ transform="translate(572.46124,111.8151)">
+ <ellipse
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse20842"
+ cx="-502.146"
+ cy="58.385326"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.116324"
+ id="ellipse20848"
+ cx="-499.6203"
+ cy="54.16613"
+ rx="5.5932446"
+ ry="8.3898668" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+ x="166.78142"
+ y="116.30074"
+ id="text29023"><tspan
+ sodipodi:role="line"
+ id="tspan29021"
+ style="font-size:4.23333px;stroke-width:0.264583"
+ x="166.78142"
+ y="116.30074">Ungrouped objects</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;stroke-width:0.264583"
+ x="168.17592"
+ y="169.57039"
+ id="text35157"><tspan
+ sodipodi:role="line"
+ id="tspan35155"
+ style="font-size:4.23333px;stroke-width:0.264583"
+ x="168.17592"
+ y="169.57039">Grouped objects</tspan></text>
+ <ellipse
+ style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse7356"
+ cx="49.9673"
+ cy="113.31533"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#ffff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse7352"
+ cx="85.747307"
+ cy="113.96735"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#a02c2c;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse7346"
+ cx="121.52731"
+ cy="114.45811"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#0000ff;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse7350"
+ cx="103.63731"
+ cy="113.44657"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#0044aa;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse26809"
+ cx="138.70656"
+ cy="115.2579"
+ rx="12.722029"
+ ry="19.083044" />
+ <ellipse
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583"
+ id="ellipse7348"
+ cx="67.857307"
+ cy="112.56697"
+ rx="12.722029"
+ ry="19.083044" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/rubber-stretch-test.svg b/share/extensions/tests/data/svg/rubber-stretch-test.svg
new file mode 100644
index 0000000..ac8cf25
--- /dev/null
+++ b/share/extensions/tests/data/svg/rubber-stretch-test.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="rubber-stretch-test.svg"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 40.267113 34.702045"
+ height="34.702045mm"
+ width="40.267113mm">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ inkscape:document-rotation="0"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.49497475"
+ inkscape:cx="210.77132"
+ inkscape:cy="446.45539"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1377"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-55.313068,-21.123064)">
+ <path
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path3997"
+ d="m 55.445359,21.255355 v 8.609365 8.609366 8.609365 8.609366 h 1.11118 1.11118 1.11118 1.11118 V 47.083451 38.474086 29.86472 21.255355 h 1.11118 1.11118 1.11119 1.11118 v 8.609365 8.609366 8.609365 8.609366 h 1.11118 1.11118 1.11118 1.11118 V 47.083451 38.474086 29.86472 21.255355 h 1.11118 1.11119 1.11118 1.11118 v 8.609365 8.609366 8.609365 8.609366 h 1.11118 1.11118 1.11118 1.11118 V 47.083451 38.474086 29.86472 21.255355 h 1.11118 1.11119 1.11118 1.11118 v 8.609365 8.609366 8.609365 8.609366 h 1.11118 1.11119 1.11118 1.11118 V 47.083451 38.474086 29.86472 21.255355 h 1.11118 1.11118 1.11118 1.11118 v 8.609365 8.609366 8.609365 8.609366 h 1.11118 1.11119 1.11118 1.11118 V 47.083451 38.474086 29.86472 21.255355"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/scale_not_unity.svg b/share/extensions/tests/data/svg/scale_not_unity.svg
new file mode 100644
index 0000000..2a4341a
--- /dev/null
+++ b/share/extensions/tests/data/svg/scale_not_unity.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 105 148.5"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-alpha1 (2e548ec3, 2022-02-27)"
+ sodipodi:docname="scale_not_unity.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.63118804"
+ inkscape:cx="598.07851"
+ inkscape:cy="617.88243"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ inkscape:window-x="-8"
+ inkscape:window-y="353"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="rect184"
+ style="stroke-width:0.306583"
+ d="m 29.341746,58.615201 h 50 v 35 h -50 z" />
+ <path
+ id="rect354"
+ style="stroke-width:0.221504"
+ d="M 0,0 H 25 V 40 H 0 Z" />
+ <path
+ id="rect356"
+ style="stroke-width:0.0746984"
+ d="M 95.000004,0 H 105 v 5 h -9.999996 z" />
+ <path
+ id="rect358"
+ style="stroke-width:0.11605"
+ d="m 0,133.5 h 7.5 v 15 H 0 Z"
+ inkscape:transform-center-x="2.2437042"
+ inkscape:transform-center-y="5.6347568" />
+ <path
+ style="fill:#000000;stroke-width:0.120649"
+ d="M 69.999999,113.5 105,122.87008 V 148.5 H 76.098484 Z"
+ id="path414" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/scatter.svg b/share/extensions/tests/data/svg/scatter.svg
new file mode 100644
index 0000000..0a3ff5d
--- /dev/null
+++ b/share/extensions/tests/data/svg/scatter.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg8"
+ sodipodi:docname="scatter.svg"
+ inkscape:version="1.1-rc (52f87abb86, 2021-05-02)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ inkscape:window-maximized="1"
+ inkscape:window-y="353"
+ inkscape:window-x="-8"
+ inkscape:window-height="1017"
+ inkscape:window-width="1920"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="mm"
+ inkscape:cy="215"
+ inkscape:cx="400.71429"
+ inkscape:zoom="0.7"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ objecttolerance="10.0"
+ gridtolerance="10.0"
+ guidetolerance="10.0"
+ inkscape:pagecheckerboard="0" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8143"
+ d="m 54.734766,58.458127 c 14.577283,-0.90024 22.782713,8.49252 52.327474,-16.58596 l 42.04887,15.41793"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ id="g12668"
+ transform="matrix(0.41480048,0.30168733,-0.26562825,0.47110973,136.76388,-111.50467)"
+ style="stroke-width:1.90501">
+ <g
+ id="g8146"
+ transform="matrix(0.28815881,0,0,0.5091094,-30.047692,173.62664)"
+ style="stroke-width:4.97366">
+ <path
+ sodipodi:type="star"
+ style="fill:#ffff00;stroke:#000000;stroke-width:1.98946;stroke-linecap:round;stroke-linejoin:round"
+ id="path8749"
+ sodipodi:sides="5"
+ sodipodi:cx="-42.282467"
+ sodipodi:cy="355.07928"
+ sodipodi:r1="15.184312"
+ sodipodi:r2="6.5377121"
+ sodipodi:arg1="2.2142974"
+ sodipodi:arg2="2.842616"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m -51.393054,367.22673 2.862898,-10.22181 -8.120548,-6.83655 10.606209,-0.43594 3.992556,-9.83571 3.6921,9.9524 10.588083,0.75774 -8.324366,6.58685 2.55124,10.30403 -8.836841,-5.8815 z"
+ inkscape:transform-center-x="-0.071237648"
+ inkscape:transform-center-y="-1.3820596" />
+ </g>
+ <path
+ d="m -34.339907,359.37247 a 5.4897132,3.7376771 0 0 1 -5.489713,3.73767 5.4897132,3.7376771 0 0 1 -5.489714,-3.73767 5.4897132,3.7376771 0 0 1 5.489714,-3.73768 5.4897132,3.7376771 0 0 1 5.489713,3.73768"
+ style="fill:#ffff00;stroke:#000000;stroke-width:0.762004;stroke-linecap:round;stroke-linejoin:round"
+ id="path9758" />
+ </g>
+ <path
+ transform="scale(0.5)translate(70, 70)"
+ d="m 87.903647,90.770647 c -20.87388,-1.3e-4 -37.795403,17.481883 -37.795663,39.046843 -6.51e-4,21.5656 16.921136,39.04816 37.795663,39.04802 20.873803,-9e-4 37.795163,-17.48315 37.794503,-39.04802 C 125.6979,108.25326 108.7768,90.771557 87.903647,90.770647 Z m 69.842303,19.454363 c -11.64263,-6e-5 -21.08112,6.86675 -21.08127,15.33733 -2.9e-4,8.47084 9.43829,15.33797 21.08127,15.33792 11.64258,-3e-4 21.08049,-6.86737 21.08012,-15.33792 -1.4e-4,-8.47029 -9.43791,-15.33698 -21.08012,-15.33733 z"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3982" />
+ <path
+ sodipodi:nodetypes="czc"
+ id="path3990"
+ d="m 29.592391,93.097509 c 1.235046,-0.883869 2.569264,-1.431289 4.049823,0 1.480559,1.431289 3.148729,0.973845 4.049823,0"
+ style="fill:none;stroke:#000000;stroke-width:0.264584px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/shapes-clipboard.svg b/share/extensions/tests/data/svg/shapes-clipboard.svg
new file mode 100644
index 0000000..86b674d
--- /dev/null
+++ b/share/extensions/tests/data/svg/shapes-clipboard.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1000"
+ height="1000"
+ viewBox="0 0 1000 1000"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="test.svg">
+ <defs
+ id="defs33">
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path859"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(1,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="base"
+ showgrid="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:zoom="0.6675088"
+ inkscape:cx="202.7349"
+ inkscape:cy="481.16986"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="webslicer-layer">
+ <inkscape:grid
+ type="xygrid"
+ id="grid27"
+ spacingx="10"
+ spacingy="10"
+ empspacing="10"
+ color="#8080ff"
+ opacity="0.25098039"
+ empcolor="#0000ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <inkscape:clipboard
+ max="467.59556,450.37423"
+ min="257.53069,270.83173"
+ style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#008000;fill-opacity:0.486588;stroke-width:0.99999874;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" />
+ <g
+ inkscape:groupmode="layer"
+ id="webslicer-layer"
+ inkscape:label="Slide3"
+ style="display:inline">
+ <rect
+ height="201.49811"
+ width="248.69112"
+ y="353.92661"
+ x="651.3089"
+ id="slicerect1"
+ style="opacity:0.5;fill:#ff0000;stroke-width:1.11927199">
+ <desc
+ id="desc51">format: png
+dpi: 96
+layout-disposition: bg-el-norepeat
+layout-position-anchor: tl</desc>
+ </rect>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Slide2"
+ style="display:inline">
+ <circle
+ style="display:inline;fill:#000080;stroke:none"
+ id="c1"
+ cx="150"
+ cy="450"
+ r="50"
+ inkscape:label="#path3736" />
+ <ellipse
+ style="display:inline;fill:none;stroke:#ff0000;stroke-width:16"
+ id="c2"
+ cx="400"
+ cy="450"
+ rx="100"
+ ry="50"
+ inkscape:label="#path3738" />
+ <path
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="c3"
+ sodipodi:type="arc"
+ sodipodi:cx="700"
+ sodipodi:cy="450"
+ sodipodi:rx="100"
+ sodipodi:ry="50"
+ sodipodi:start="0.59013865"
+ sodipodi:end="5.6484511"
+ d="m 783.08635,477.82381 a 100,50 0 0 1 -111.09848,20.17442 100,50 0 0 1 -71.96301,-46.88343 100,50 0 0 1 67.71127,-48.44091 100,50 0 0 1 112.7868,17.67793 L 700,450 Z"
+ inkscape:label="#path3740" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10;marker-start:url(#Arrow2Lstart)"
+ d="M 100,600 200,700 300,600 400,700"
+ id="p1"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3746" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10"
+ d="m 500,600 c 0,0 0,100 100,100 100,0 0,-100 100,-100 100,0 100,100 100,100"
+ id="p2"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3748" />
+ <path
+ sodipodi:type="star"
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:10"
+ id="s1"
+ sodipodi:sides="5"
+ sodipodi:cx="189.03001"
+ sodipodi:cy="847.93945"
+ sodipodi:r1="69.364868"
+ sodipodi:r2="34.682434"
+ sodipodi:arg1="0.63598373"
+ sodipodi:arg2="1.2643023"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 244.8332,889.14005 -45.33887,-8.13446 -32.40428,32.73753 -6.27415,-45.63352 -41.14872,-20.70184 41.46124,-20.06861 6.97297,-45.53197 31.89861,33.23044 45.45824,-7.43847 -21.74681,40.60615 z"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137" />
+ <use
+ style="display:inline"
+ x="0"
+ y="0"
+ xlink:href="#s1"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137"
+ id="u1"
+ transform="translate(200,2.9962152)"
+ width="100%"
+ height="100%"
+ inkscape:label="#use3808" />
+ </g>
+ <g
+ inkscape:label="Slide1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="100"
+ y="100"
+ id="t1"
+ inkscape:label="#text12"><tspan
+ sodipodi:role="line"
+ id="tspan10"
+ x="100"
+ y="100">Hello World</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="t4"
+ style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ transform="matrix(0.26458333,0,0,0.26458333,372.02961,28.904505)"
+ inkscape:label="#flowRoot14"><flowRegion
+ id="flowRegion16"><rect
+ id="rect18"
+ width="264.5675"
+ height="262.16187"
+ x="105.71429"
+ y="219.66254" /></flowRegion><flowPara
+ id="flowPara20"
+ style="font-size:55.43307114px">flow text which wraps</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="200"
+ y="100"
+ id="t2"
+ inkscape:label="#text3727"><tspan
+ sodipodi:role="line"
+ id="tspan3725"
+ x="200"
+ y="100"
+ style="font-size:14.66666698px">UPPER</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="300"
+ y="100"
+ id="t3"
+ inkscape:label="#text3735"><tspan
+ sodipodi:role="line"
+ id="tspan3733"
+ x="300"
+ y="100"
+ style="font-size:14.66666698px">Multi line</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="118.33334"
+ id="tspan3737"
+ style="font-size:14.66666698px">text</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="136.66667"
+ id="tspan3739"
+ style="font-size:14.66666698px">FOO</tspan></text>
+ <g
+ id="t5"
+ transform="translate(445.71038,-129.64807)"
+ inkscape:label="#g3772">
+ <text
+ id="text3762"
+ y="229.64807"
+ x="54.289616"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="229.64807"
+ x="54.289616"
+ id="tspan3760"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">Grouped</tspan></text>
+ <text
+ id="text3766"
+ y="259.64807"
+ x="54.289619"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="259.64807"
+ x="54.289619"
+ id="tspan3764"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">text</tspan></text>
+ </g>
+ <rect
+ style="fill:#000080;stroke:none"
+ id="r1"
+ width="100"
+ height="100"
+ x="100"
+ y="200"
+ inkscape:label="#rect3732" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:16"
+ id="r2"
+ width="200"
+ height="100"
+ x="300"
+ y="200"
+ inkscape:label="#rect3734" />
+ <rect
+ style="fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="r3"
+ width="200"
+ height="100"
+ x="600"
+ y="200"
+ ry="38.950798"
+ rx="44.943226"
+ inkscape:label="#rect3744" />
+ </g>
+ <script
+ ns1:version="1.5.5"
+ id="JessyInk">// dummy
+</script>
+</svg>
diff --git a/share/extensions/tests/data/svg/shapes.svg b/share/extensions/tests/data/svg/shapes.svg
new file mode 100644
index 0000000..eb9caed
--- /dev/null
+++ b/share/extensions/tests/data/svg/shapes.svg
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1000"
+ height="1000"
+ viewBox="0 0 1000 1000"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="test.svg">
+ <defs
+ id="defs33">
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path859"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(1,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ id="base"
+ showgrid="true"
+ inkscape:snap-text-baseline="true"
+ inkscape:zoom="0.6675088"
+ inkscape:cx="202.7349"
+ inkscape:cy="481.16986"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="webslicer-layer">
+ <inkscape:grid
+ type="xygrid"
+ id="grid27"
+ spacingx="10"
+ spacingy="10"
+ empspacing="10"
+ color="#8080ff"
+ opacity="0.25098039"
+ empcolor="#0000ff"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <g
+ inkscape:groupmode="layer"
+ id="webslicer-layer"
+ inkscape:label="Slide3"
+ style="display:inline">
+ <rect
+ height="201.49811"
+ width="248.69112"
+ y="353.92661"
+ x="651.3089"
+ id="slicerect1"
+ style="opacity:0.5;fill:#ff0000;stroke-width:1.11927199">
+ <desc
+ id="desc51">format: png
+dpi: 96
+layout-disposition: bg-el-norepeat
+layout-position-anchor: tl</desc>
+ </rect>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Slide2"
+ style="display:inline">
+ <circle
+ style="display:inline;fill:#000080;stroke:none"
+ id="c1"
+ cx="150"
+ cy="450"
+ r="50"
+ inkscape:label="#path3736" />
+ <ellipse
+ style="display:inline;fill:none;stroke:#ff0000;stroke-width:16"
+ id="c2"
+ cx="400"
+ cy="450"
+ rx="100"
+ ry="50"
+ inkscape:label="#path3738" />
+ <path
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="c3"
+ sodipodi:type="arc"
+ sodipodi:cx="700"
+ sodipodi:cy="450"
+ sodipodi:rx="100"
+ sodipodi:ry="50"
+ sodipodi:start="0.59013865"
+ sodipodi:end="5.6484511"
+ d="m 783.08635,477.82381 a 100,50 0 0 1 -111.09848,20.17442 100,50 0 0 1 -71.96301,-46.88343 100,50 0 0 1 67.71127,-48.44091 100,50 0 0 1 112.7868,17.67793 L 700,450 Z"
+ inkscape:label="#path3740" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10;marker-start:url(#Arrow2Lstart)"
+ d="M 100,600 200,700 300,600 400,700"
+ id="p1"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3746" />
+ <path
+ style="display:inline;fill:none;stroke:#000000;stroke-width:10"
+ d="m 500,600 c 0,0 0,100 100,100 100,0 0,-100 100,-100 100,0 100,100 100,100"
+ id="p2"
+ inkscape:connector-curvature="0"
+ inkscape:label="#path3748" />
+ <path
+ sodipodi:type="star"
+ style="display:inline;fill:#ffff00;stroke:#008000;stroke-width:10"
+ id="s1"
+ sodipodi:sides="5"
+ sodipodi:cx="189.03001"
+ sodipodi:cy="847.93945"
+ sodipodi:r1="69.364868"
+ sodipodi:r2="34.682434"
+ sodipodi:arg1="0.63598373"
+ sodipodi:arg2="1.2643023"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 244.8332,889.14005 -45.33887,-8.13446 -32.40428,32.73753 -6.27415,-45.63352 -41.14872,-20.70184 41.46124,-20.06861 6.97297,-45.53197 31.89861,33.23044 45.45824,-7.43847 -21.74681,40.60615 z"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137" />
+ <use
+ style="display:inline"
+ x="0"
+ y="0"
+ xlink:href="#s1"
+ inkscape:transform-center-x="6.4673011"
+ inkscape:transform-center-y="-0.16430137"
+ id="u1"
+ transform="translate(200,2.9962152)"
+ width="100%"
+ height="100%"
+ inkscape:label="#use3808" />
+ </g>
+ <g
+ inkscape:label="Slide1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="100"
+ y="100"
+ id="t1"
+ inkscape:label="#text12"><tspan
+ sodipodi:role="line"
+ id="tspan10"
+ x="100"
+ y="100">Hello World</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ id="t4"
+ style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ transform="matrix(0.26458333,0,0,0.26458333,372.02961,28.904505)"
+ inkscape:label="#flowRoot14"><flowRegion
+ id="flowRegion16"><rect
+ id="rect18"
+ width="264.5675"
+ height="262.16187"
+ x="105.71429"
+ y="219.66254" /></flowRegion><flowPara
+ id="flowPara20"
+ style="font-size:55.43307114px">flow text which wraps</flowPara></flowRoot> <text
+ xml:space="preserve"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="200"
+ y="100"
+ id="t2"
+ inkscape:label="#text3727"><tspan
+ sodipodi:role="line"
+ id="tspan3725"
+ x="200"
+ y="100"
+ style="font-size:14.66666698px">UPPER</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ x="300"
+ y="100"
+ id="t3"
+ inkscape:label="#text3735"><tspan
+ sodipodi:role="line"
+ id="tspan3733"
+ x="300"
+ y="100"
+ style="font-size:14.66666698px">Multi line</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="118.33334"
+ id="tspan3737"
+ style="font-size:14.66666698px">text</tspan><tspan
+ sodipodi:role="line"
+ x="300"
+ y="136.66667"
+ id="tspan3739"
+ style="font-size:14.66666698px">FOO</tspan></text>
+ <g
+ id="t5"
+ transform="translate(445.71038,-129.64807)"
+ inkscape:label="#g3772">
+ <text
+ id="text3762"
+ y="229.64807"
+ x="54.289616"
+ style="font-size:10.58333302px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="229.64807"
+ x="54.289616"
+ id="tspan3760"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">Grouped</tspan></text>
+ <text
+ id="text3766"
+ y="259.64807"
+ x="54.289619"
+ style="font-size:14.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke:none"
+ xml:space="preserve"><tspan
+ y="259.64807"
+ x="54.289619"
+ id="tspan3764"
+ sodipodi:role="line"
+ style="font-size:14.66666698px">text</tspan></text>
+ </g>
+ <rect
+ style="fill:#000080;stroke:none"
+ id="r1"
+ width="100"
+ height="100"
+ x="100"
+ y="200"
+ inkscape:label="#rect3732" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:16"
+ id="r2"
+ width="200"
+ height="100"
+ x="300"
+ y="200"
+ inkscape:label="#rect3734" />
+ <rect
+ style="fill:#ffff00;stroke:#008000;stroke-width:16"
+ id="r3"
+ width="200"
+ height="100"
+ x="600"
+ y="200"
+ ry="38.950798"
+ rx="44.943226"
+ inkscape:label="#rect3744" />
+ </g>
+ <script
+ ns1:version="1.5.5"
+ id="JessyInk">// dummy
+</script>
+</svg>
diff --git a/share/extensions/tests/data/svg/shapes_cmyk.svg b/share/extensions/tests/data/svg/shapes_cmyk.svg
new file mode 100644
index 0000000..bc35be8
--- /dev/null
+++ b/share/extensions/tests/data/svg/shapes_cmyk.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="shapes_cmyk.svg"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ id="svg8"
+ version="1.1"
+ viewBox="0 0 1000 1000"
+ height="1000"
+ width="1000">
+ <metadata
+ id="metadata41">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs33">
+ <color-profile
+ xlink:href="file:///usr/share/color/icc/ghostscript/default_cmyk.icc"
+ name="Artifex-CMYK-SWOP-Profile"
+ id="color-profile43" />
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="Arrow2Lstart"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow2Lstart">
+ <path
+ transform="scale(1.1) translate(1,0)"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#242423 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke-opacity:1;fill:#242423 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1"
+ id="path859" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ inkscape:document-rotation="0"
+ inkscape:current-layer="t5"
+ inkscape:window-maximized="1"
+ inkscape:window-y="0"
+ inkscape:window-x="1920"
+ inkscape:cy="268.32956"
+ inkscape:cx="268.39273"
+ inkscape:zoom="1.3350176"
+ inkscape:snap-text-baseline="true"
+ showgrid="true"
+ id="base"
+ inkscape:window-height="1055"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff">
+ <inkscape:grid
+ empopacity="0.25098039"
+ empcolor="#0000ff"
+ opacity="0.25098039"
+ color="#8080ff"
+ empspacing="10"
+ spacingy="10"
+ spacingx="10"
+ id="grid27"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <g
+ style="display:inline"
+ inkscape:label="Slide3"
+ id="webslicer-layer"
+ inkscape:groupmode="layer">
+ <rect
+ style="opacity:0.5;fill:#eb2636 icc-color(Artifex-CMYK-SWOP-Profile, 0.00794983, 1, 0.89459336, 0.00284903);stroke-width:1.11927199;fill-opacity:1"
+ id="slicerect1"
+ x="651.3089"
+ y="353.92661"
+ width="248.69112"
+ height="201.49811">
+ <desc
+ id="desc51">format: png
+dpi: 96
+layout-disposition: bg-el-norepeat
+layout-position-anchor: tl</desc>
+ </rect>
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="Slide2"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <circle
+ inkscape:label="#path3736"
+ r="50"
+ cy="450"
+ cx="150"
+ id="c1"
+ style="display:inline;fill:#202660 icc-color(Artifex-CMYK-SWOP-Profile, 1, 0.92968643, 0.05864042, 0.44525826);stroke:none;fill-opacity:1" />
+ <ellipse
+ inkscape:label="#path3738"
+ ry="50"
+ rx="100"
+ cy="450"
+ cx="400"
+ id="c2"
+ style="display:inline;fill:none;stroke:#ed272d icc-color(Artifex-CMYK-SWOP-Profile, 0, 1, 1, 0);stroke-width:16;stroke-opacity:1" />
+ <path
+ inkscape:label="#path3740"
+ d="m 783.08635,477.82381 a 100,50 0 0 1 -111.09848,20.17442 100,50 0 0 1 -71.96301,-46.88343 100,50 0 0 1 67.71127,-48.44091 100,50 0 0 1 112.7868,17.67793 L 700,450 Z"
+ sodipodi:end="5.6484511"
+ sodipodi:start="0.59013865"
+ sodipodi:ry="50"
+ sodipodi:rx="100"
+ sodipodi:cy="450"
+ sodipodi:cx="700"
+ sodipodi:type="arc"
+ id="c3"
+ style="display:inline;fill:#f7ec10 icc-color(Artifex-CMYK-SWOP-Profile, 0.06144808, 0, 1, 0);stroke:#067e44 icc-color(Artifex-CMYK-SWOP-Profile, 0.92336918999999995, 0.24440375000000000, 1, 0.15349050000000000);stroke-width:16;stroke-opacity:1;fill-opacity:1" />
+ <path
+ inkscape:label="#path3746"
+ inkscape:connector-curvature="0"
+ id="p1"
+ d="M 100,600 200,700 300,600 400,700"
+ style="display:inline;fill:none;stroke:#242423 icc-color(Artifex-CMYK-SWOP-Profile, 0.11226545, 0.04844121, 0.1516789, 0.99902779);stroke-width:10;marker-start:url(#Arrow2Lstart);stroke-opacity:1" />
+ <path
+ inkscape:label="#path3748"
+ inkscape:connector-curvature="0"
+ id="p2"
+ d="m 500,600 c 0,0 0,100 100,100 100,0 0,-100 100,-100 100,0 100,100 100,100"
+ style="display:inline;fill:none;stroke:#242423 icc-color(Artifex-CMYK-SWOP-Profile, 0.11226545, 0.04844121, 0.1516789, 0.99902779);stroke-width:10;stroke-opacity:1" />
+ <path
+ inkscape:transform-center-y="-0.16430137"
+ inkscape:transform-center-x="6.4673011"
+ d="m 244.8332,889.14005 -45.33887,-8.13446 -32.40428,32.73753 -6.27415,-45.63352 -41.14872,-20.70184 41.46124,-20.06861 6.97297,-45.53197 31.89861,33.23044 45.45824,-7.43847 -21.74681,40.60615 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="1.2643023"
+ sodipodi:arg1="0.63598373"
+ sodipodi:r2="34.682434"
+ sodipodi:r1="69.364868"
+ sodipodi:cy="847.93945"
+ sodipodi:cx="189.03001"
+ sodipodi:sides="5"
+ id="s1"
+ style="display:inline;fill:#f7ec10 icc-color(Artifex-CMYK-SWOP-Profile, 0.06144808, 0, 1, 0);stroke:#067e44 icc-color(Artifex-CMYK-SWOP-Profile, 0.92336918999999995, 0.24440375000000000, 1, 0.15349050000000000);stroke-width:10;stroke-opacity:1;fill-opacity:1"
+ sodipodi:type="star" />
+ <use
+ inkscape:label="#use3808"
+ height="100%"
+ width="100%"
+ transform="translate(200,2.9962152)"
+ id="u1"
+ inkscape:transform-center-y="-0.16430137"
+ inkscape:transform-center-x="6.4673011"
+ xlink:href="#s1"
+ y="0"
+ x="0"
+ style="display:inline" />
+ </g>
+ <g
+ style="display:inline"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Slide1">
+ <text
+ inkscape:label="#text12"
+ id="t1"
+ y="100"
+ x="100"
+ style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ xml:space="preserve"><tspan
+ y="100"
+ x="100"
+ id="tspan10"
+ sodipodi:role="line">Hello World</tspan></text>
+ <flowRoot
+ inkscape:label="#flowRoot14"
+ transform="matrix(0.26458333,0,0,0.26458333,372.02961,28.904505)"
+ style="font-size:40px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ id="t4"
+ xml:space="preserve"><flowRegion
+ style="fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ id="flowRegion16"><rect
+ style="fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ y="219.66254"
+ x="105.71429"
+ height="262.16187"
+ width="264.5675"
+ id="rect18" /></flowRegion><flowPara
+ style="font-size:55.4331px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ id="flowPara20">flow text which wraps</flowPara></flowRoot>
+ <text
+ inkscape:label="#text3727"
+ id="t2"
+ y="100"
+ x="200"
+ style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ xml:space="preserve"><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ y="100"
+ x="200"
+ id="tspan3725"
+ sodipodi:role="line">UPPER</tspan></text>
+ <text
+ inkscape:label="#text3735"
+ id="t3"
+ y="100"
+ x="300"
+ style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ xml:space="preserve"><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ y="100"
+ x="300"
+ id="tspan3733"
+ sodipodi:role="line">Multi line</tspan><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ id="tspan3737"
+ y="118.33334"
+ x="300"
+ sodipodi:role="line">text</tspan><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ id="tspan3739"
+ y="136.66667"
+ x="300"
+ sodipodi:role="line">FOO</tspan></text>
+ <g
+ inkscape:label="#g3772"
+ transform="translate(445.71038,-129.64807)"
+ id="t5">
+ <text
+ xml:space="preserve"
+ style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ x="54.289616"
+ y="229.64807"
+ id="text3762"><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ sodipodi:role="line"
+ id="tspan3760"
+ x="54.289616"
+ y="229.64807">Grouped</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:14.6667px;line-height:1.25;font-family:sans-serif;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);stroke:none;fill-opacity:1;"
+ x="54.289619"
+ y="259.64807"
+ id="text3766"><tspan
+ style="font-size:14.6667px;fill:#171718 icc-color(Artifex-CMYK-SWOP-Profile, 0.74605936, 0.67989624, 0.65342184, 0.90048066);fill-opacity:1;"
+ sodipodi:role="line"
+ id="tspan3764"
+ x="54.289619"
+ y="259.64807">text</tspan></text>
+ </g>
+ <rect
+ inkscape:label="#rect3732"
+ y="200"
+ x="100"
+ height="100"
+ width="100"
+ id="r1"
+ style="fill:#202660 icc-color(Artifex-CMYK-SWOP-Profile, 1, 0.92968643, 0.05864042, 0.44525826);stroke:none;fill-opacity:1" />
+ <rect
+ inkscape:label="#rect3734"
+ y="200"
+ x="300"
+ height="100"
+ width="200"
+ id="r2"
+ style="fill:none;stroke:#ed272d icc-color(Artifex-CMYK-SWOP-Profile, 0, 1, 1, 0);stroke-width:16;stroke-opacity:1" />
+ <rect
+ inkscape:label="#rect3744"
+ rx="44.943226"
+ ry="38.950798"
+ y="200"
+ x="600"
+ height="100"
+ width="200"
+ id="r3"
+ style="fill:#f7ec10 icc-color(Artifex-CMYK-SWOP-Profile, 0.06144808, 0, 1, 0);stroke:#067e44 icc-color(Artifex-CMYK-SWOP-Profile, 0.92336918999999995, 0.24440375000000000, 1, 0.15349050000000000);stroke-width:16;stroke-opacity:1;fill-opacity:1" />
+ </g>
+ <script
+ id="JessyInk"
+ ns1:version="1.5.5">// dummy
+</script>
+</svg>
diff --git a/share/extensions/tests/data/svg/simple_patterns.svg b/share/extensions/tests/data/svg/simple_patterns.svg
new file mode 100644
index 0000000..66d8fd9
--- /dev/null
+++ b/share/extensions/tests/data/svg/simple_patterns.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg5"
+ sodipodi:docname="patterns.svg"
+ inkscape:version="1.2-alpha1 (2e548ec3, 2022-02-27)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.89263468"
+ inkscape:cx="213.41317"
+ inkscape:cy="487.32142"
+ inkscape:window-width="2560"
+ inkscape:window-height="1377"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2">
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern4405"
+ patternTransform="matrix(10,0,0,10,-4.742515,-62.245509)" />
+ <pattern
+ inkscape:collect="always"
+ patternUnits="userSpaceOnUse"
+ width="2"
+ height="1"
+ patternTransform="translate(0,0) scale(10,10)"
+ id="Strips1_1"
+ inkscape:stockid="Stripes 1:1">
+ <rect
+ style="fill:#000000;stroke:none;fill-opacity:1.0"
+ x="0"
+ y="-0.5"
+ width="1"
+ height="2"
+ id="rect1826" />
+ </pattern>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern4405-3"
+ patternTransform="matrix(10,0,0,10,92.923652,-62.245507)" />
+ </defs>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:url(#pattern4405);fill-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000;stop-opacity:1"
+ id="rect184"
+ width="61.9491"
+ height="61.059879"
+ x="15.709581"
+ y="14.820363" />
+ <rect
+ style="fill:url(#pattern4405-3);fill-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000"
+ id="rect184-8"
+ width="61.9491"
+ height="61.059879"
+ x="113.37575"
+ y="14.820363" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/simpletransform.test.svg b/share/extensions/tests/data/svg/simpletransform.test.svg
new file mode 100644
index 0000000..62876ee
--- /dev/null
+++ b/share/extensions/tests/data/svg/simpletransform.test.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
+ <g>
+ <defs>
+ <rect width="50" height="50" id="rect"/>
+ </defs>
+ <use xlink:href="#rect" transform="scale(.5)"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/share/extensions/tests/data/svg/single_box.svg b/share/extensions/tests/data/svg/single_box.svg
new file mode 100644
index 0000000..094233d
--- /dev/null
+++ b/share/extensions/tests/data/svg/single_box.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="New document 1">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="375"
+ inkscape:cy="514.28571"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="479"
+ inkscape:window-height="379"
+ inkscape:window-x="1319"
+ inkscape:window-y="75"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="opacity:0.5;fill:#6900ff;fill-opacity:0.36000001;stroke:#cae8ef;stroke-width:7.19999981;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3006"
+ width="237.14285"
+ height="305.71429"
+ x="285.71429"
+ y="406.64789" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/slicer.svg b/share/extensions/tests/data/svg/slicer.svg
new file mode 100644
index 0000000..a485c35
--- /dev/null
+++ b/share/extensions/tests/data/svg/slicer.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="layer2slice.svg"
+ inkscape:version="1.0beta1 (32d4812, 2019-09-19)"
+ id="svg4111"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm">
+ <defs
+ id="defs4105" />
+ <sodipodi:namedview
+ inkscape:window-maximized="0"
+ inkscape:window-y="347"
+ inkscape:window-x="2106"
+ inkscape:window-height="778"
+ inkscape:window-width="1280"
+ showgrid="false"
+ inkscape:document-rotation="0"
+ inkscape:current-layer="layer2"
+ inkscape:document-units="mm"
+ inkscape:cy="560"
+ inkscape:cx="-2.8571429"
+ inkscape:zoom="0.35"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <metadata
+ id="metadata4108">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ y="34.017857"
+ x="34.773811"
+ height="105.07738"
+ width="107.34524"
+ id="rect4113"
+ style="fill:#241c1c;stroke-width:0.264583" />
+ </g>
+ <g
+ inkscape:label="slices"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <rect
+ inkscape:label=""
+ y="92.226196"
+ x="101.29762"
+ height="114.1488"
+ width="82.398804"
+ id="slice1"
+ style="fill:#ffff00;stroke-width:0.264583" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/style_inheritance.svg b/share/extensions/tests/data/svg/style_inheritance.svg
new file mode 100644
index 0000000..d80e78f
--- /dev/null
+++ b/share/extensions/tests/data/svg/style_inheritance.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="200" width="750">
+<style type="text/css"><![CDATA[
+.group .shape_under_group,
+.shape_direct
+{
+ opacity: 1;
+ fill-opacity: 1;
+ fill-rule: evenodd;
+ stroke: #000000;
+ stroke-width: 2px;
+ stroke-linecap: round;
+ stroke-linejoin: miter;
+ stroke-miterlimit: 4;
+ stroke-dasharray: none;
+ stroke-opacity: 1;
+ fill: #ff0000;
+}
+.square
+{
+ fill: #0000ff !important;
+}
+.group #square_id
+{
+ fill: #0000ff;
+}
+.force_inherit
+{
+ fill: inherit;
+ stroke: inherit;
+ stroke-width: inherit;
+ opacity: inherit !important;
+}
+text>tspan
+{
+ stroke: none;
+ fill: #000;
+}
+text {font-size:12pt}
+]]></style>
+<g id="group_default">
+ <circle cx="33" cy="32.5" fill="#f00" r="16" stroke="#000" stroke-width="2"/>
+ <rect fill="#00f" height="31" stroke="#000" stroke-width="2" width="31" x="56" y="17"/>
+ <text x="98" y="28">1. Using style attribute</text>
+ <text x="98" y="43">directly</text>
+</g>
+<g id="group_classes" transform="translate(0,50)">
+ <circle cx="33" cy="32.5" r="16" class="shape_direct"/>
+ <rect class="shape_direct square" height="31" width="31" x="56" y="17"/>
+ <text x="98" y="28">2. Using class "shape_direct"</text>
+ <text x="98" y="43">directly on path and rect</text>
+</g>
+<g id="group_inherit" class="group" transform="translate(0,100)">
+ <circle cx="33" cy="32.5" r="16" class="shape_under_group"/>
+ <rect class="shape_under_group square" height="31" width="31" x="56" y="17"/>
+ <text x="98" y="28">3. Using class "shape_under_group"</text>
+ <text x="98" y="43">which inherits from class "group"</text>
+</g>
+<g id="group_inherit_ref_square_by_id" class="group" transform="translate(400)">
+ <circle cx="33" cy="32.5" r="16" class="shape_under_group"/>
+ <rect class="shape_under_group" height="31" id="square_id" width="31" x="56" y="17"/>
+ <text x="98" y="28">4. Inheriting from "group", but</text>
+ <text x="98" y="43">referencing square by id</text>
+</g>
+<g id="group_apply_style_rules_to_group" transform="translate(400,50)" class="shape_direct">
+ <circle cx="33" cy="32.5" r="16"/>
+ <rect class="square" height="31" width="31" x="56" y="17"/>
+ <text><tspan x="98" y="28">5. Apply style rules at group</tspan><tspan x="98" y="43">level</tspan></text>
+</g>
+<g id="group_force_inherit" transform="translate(400,100)" class="shape_direct">
+ <circle cx="33" cy="32.5" opacity=".5" r="16" class="force_inherit"/>
+ <rect class="force_inherit square" height="31" opacity=".5" width="31" x="56" y="17"/>
+ <text><tspan x="98" y="28">6. Apply style rules to group</tspan><tspan x="98" y="43">and force inheritance</tspan></text>
+</g>
+</svg> \ No newline at end of file
diff --git a/share/extensions/tests/data/svg/styling-css-04-f.svg b/share/extensions/tests/data/svg/styling-css-04-f.svg
new file mode 100755
index 0000000..e405b04
--- /dev/null
+++ b/share/extensions/tests/data/svg/styling-css-04-f.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" id="svg-root" width="100%" height="100%" viewBox="0 0 480 360">
+ <!--======================================================================-->
+ <!--= Copyright 2000 World Wide Web Consortium, (Massachusetts =-->
+ <!--= Institute of Technology, Institut National de Recherche en =-->
+ <!--= Informatique et en Automatique, Keio University). All Rights =-->
+ <!--= Reserved. See http://www.w3.org/Consortium/Legal/. =-->
+ <!--======================================================================-->
+ <!-- ===================================================================== -->
+ <!-- -->
+ <!-- styling-css-04-f.svg -->
+ <!-- -->
+ <!-- Tests CSS2 selectors -->
+ <!-- -->
+ <!-- Author : Corel SVG Viewer QA team 01-05-2003 -->
+ <!-- Revised by: Benoit Bezaire -->
+ <!-- -->
+ <!--======================================================================-->
+ <SVGTestCase xmlns:testcase="http://www.w3.org/2000/02/svg/testsuite/description/" xmlns="http://www.w3.org/2000/02/svg/testsuite/description/" owner="BB" reviewer="CL" desc="Tests CSS2 selectors" status="accepted" version="$Revision: 1.13 $" testname="$RCSfile: styling-css-04-f.svg,v $">
+ <OperatorScript>
+ <Paragraph>This purpose of the file is to test some of the CSS2 selector syntax.
+ A UA supporting CSS selectors should render an image identical to the referenced image.
+ </Paragraph>
+ <Paragraph>For a full analysis of this test, please see
+ <a href="http://www.w3.org/Graphics/SVG/Test/styling-css-04-f/blow-by-blow.html" target="css">this explanation</a>.</Paragraph>
+ </OperatorScript>
+ </SVGTestCase>
+ <title id="test-title">styling-css-04-f.svg</title>
+ <desc id="test-desc">Tests CSS2 selectors</desc>
+ <!--======================================================================-->
+ <!--Content of Test Case follows... =====================-->
+ <!--======================================================================-->
+ <g id="testContent" fill="white">
+ <text x="240" y="35" font-size="20" font-family="Arial, Helvetica, sans-serif"
+ text-anchor="middle">CSS selector test</text>
+ <defs>
+ <style type="text/css">
+ * {stroke:red; stroke-width:1;} /* 0 */
+ text {stroke:none; fill:black;} /* 1 */
+ rect {stroke:black; stroke-dasharray:none;} /* 1 */
+ #test-frame {fill:none} /* 100 */
+ g#alpha {fill:blue} /* 101 */
+ a#alpha {fill:red} /* 101 */
+ #alpha * rect {fill:green} /* 101 */
+ #alpha-2 > rect {fill:orange} /* 101 */
+ #beta rect {fill:gold} /* 101 */
+ g#gamma * g * * rect {fill:red} /* 103 */
+ g#gamma * * rect {fill:purple} /* 102 */
+ [stroke-width="1.0001"] {fill:blue} /* 10 */
+ g#delta rect[stroke-width="1.0002"] {fill:green} /* 112 */
+ g#delta > rect[stroke-width="1.0003"] {fill:orange} /* 102 */
+ #delta + g > * {fill:gold} /* 101 */
+ g#delta + g > rect + rect {fill:purple} /* 104 */
+ #delta + g#epsilon * rect:first-child {fill:red} /* 202 */
+ #zeta [cursor] {fill:blue} /* 110 */
+ g#zeta [cursor="help"] {fill:green} /* 111 */
+ g#zeta [rx~="3E"] {fill:orange} /* 111 */
+ g#epsilon + g [stroke-dasharray|="3.1415926"] {fill:gold} /* 112 */
+ g#epsilon + g > rect.hello {fill:purple} /* 113 */
+ g#eta rect:first-child {fill:red} (/* 102 */
+ </style>
+ </defs>
+ <g id="alpha">
+ <rect x="30" y="70" width="67.5" height="67.5" id="A1"/>
+ <g id="alpha-1">
+ <rect x="100" y="70" width="67.5" height="67.5" id="B1" />
+ </g>
+ <g id="alpha-2">
+ <rect x="170" y="70" width="67.5" height="67.5" id="C1"/>
+ </g>
+ </g>
+ <g id="beta">
+ <g>
+ <g>
+ <g>
+ <g>
+ <g>
+ <rect x="240" y="70" width="67.5" height="67.5" id="D1"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g id="gamma">
+ <g>
+ <g>
+ <rect x="310" y="70" width="67.5" height="67.5" id="E1"/>
+ <g>
+ <g>
+ <rect x="380" y="70" width="67.5" height="67.5" id="F1"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g id="delta">
+ <rect x="30" y="140" width="67.5" height="67.5" stroke-width="1.0001" id="A2"/>
+ <rect x="100" y="140" width="67.5" height="67.5" stroke-width="1.0002" id="B2"/>
+ <rect x="170" y="140" width="67.5" height="67.5" stroke-width="1.0003" id="C2"/>
+ </g>
+ <g id="epsilon">
+ <rect x="240" y="140" width="67.5" height="67.5" id="D2"/>
+ <rect x="310" y="140" width="67.5" height="67.5" id="E2"/>
+ <g>
+ <rect x="380" y="140" width="67.5" height="67.5" id="F2"/>
+ </g>
+ </g>
+ <g id="zeta">
+ <rect x="30" y="210" width="67.5" height="67.5" cursor="default" id="A3"/>
+ <rect x="100" y="210" width="67.5" height="67.5" cursor="help" id="B3"/>
+ <rect x="170" y="210" width="67.5" height="67.5" stroke-dasharray="5, 3.14" id="C3" style="fill:orange"/>
+ <rect x="240" y="210" width="67.5" height="67.5" rx="3E-6" stroke-dasharray="3.1415926,8" id="D3" style="fill:gold"/>
+ <rect x="310" y="210" width="67.5" height="67.5" class="hello" id="E3"/>
+ </g>
+ <g id="eta">
+ <rect x="380" y="210" width="67.5" height="67.5" id="F3"/>
+ </g>
+ <g id="labels" font-size="16" font-family="Arial, Helvetica, sans-serif">
+ <text x="64" y="60" text-anchor="middle">A</text>
+ <text x="133" y="60" text-anchor="middle">B</text>
+ <text x="200" y="60" text-anchor="middle">C</text>
+ <text x="270" y="60" text-anchor="middle">D</text>
+ <text x="340" y="60" text-anchor="middle">E</text>
+ <text x="410" y="60" text-anchor="middle">F</text>
+ <text x="20" y="113" text-anchor="middle">1</text>
+ <text x="20" y="183" text-anchor="middle">2</text>
+ <text x="20" y="253" text-anchor="middle">3</text>
+ </g>
+ </g>
+ <text id="revision" x="10" y="340" font-size="30">$Revision: 1.13 $</text>
+ <rect id="test-frame" x="1" y="1" width="478" height="358"/>
+</svg>
diff --git a/share/extensions/tests/data/svg/styling-inherit-01-b.svg b/share/extensions/tests/data/svg/styling-inherit-01-b.svg
new file mode 100755
index 0000000..2620107
--- /dev/null
+++ b/share/extensions/tests/data/svg/styling-inherit-01-b.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">
+<!--======================================================================-->
+<!--= Copyright 2000 World Wide Web Consortium, (Massachusetts =-->
+<!--= Institute of Technology, Institut National de Recherche en =-->
+<!--= Informatique et en Automatique, Keio University). All Rights =-->
+<!--= Reserved. See http://www.w3.org/Consortium/Legal/. =-->
+<!--======================================================================-->
+<!-- ==================================================================== -->
+<!-- styling-inherit-01-b.svg -->
+<!-- Author : Chris Lilley 21 March 2002 -->
+<!--======================================================================-->
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg-root" width="480" height="360" viewBox="0 0 480 360" baseProfile="tiny">
+ <SVGTestCase xmlns="http://www.w3.org/2000/02/svg/testsuite/description/">
+ <OperatorScript>
+ <Paragraph>Verify property inheritance as required by 6.15 "Property
+ inheritance". Since all implementations are required to do this, only
+ presentation attributes are used.
+ </Paragraph>
+ <Paragraph>At the center right, there is an ellipse. The fill color is not
+ specified on that element but on its parent. The ellipse should be filled a solid yellow
+ </Paragraph>
+ <Paragraph>At the top left, an oval shape is formed from a rectangle
+ with a radial gradient. The color of the middle stop uses the keyword 'inherit'
+ and thus takes its parent's value of green, giving a yellow, green, white gradient.</Paragraph>
+ <Paragraph>At the bottom left, an oval shape is formed from a rectangle
+ with a radial gradient. The color of the middle stop uses the value 'currentColor'
+ and thus takes the value its parent's color property, a dark red,
+ giving a yellow, dark red, white gradient.</Paragraph>
+ </OperatorScript>
+ </SVGTestCase>
+ <title id="test-title">styling-inherit-01-b</title>
+ <desc id="test-desc">Verify property inheritance
+</desc>
+ <!--======================================================================-->
+ <!--Content of Test Case follows... =====================-->
+ <!--======================================================================-->
+ <g id="test-body-content">
+ <g fill="yellow">
+ <g stroke="#555">
+ <ellipse rx="90" ry="60" cx="330" cy="140"/>
+ </g>
+ </g>
+ <radialGradient id="ygw" stop-color="green">
+ <stop offset="0%" stop-color="yellow"/>
+ <stop offset="50%" stop-color="inherit"/>
+ <stop offset="100%" stop-color="white"/>
+ </radialGradient>
+ <rect width="180" height="120" x="40" y="20" stroke="none" fill="url(#ygw)"/>
+ <radialGradient id="yrw" color="#700">
+ <stop offset="0%" stop-color="yellow"/>
+ <stop offset="50%" stop-color="currentColor"/>
+ <stop offset="100%" stop-color="white"/>
+ </radialGradient>
+ <rect width="180" height="120" x="40" y="160" stroke="none" fill="url(#yrw)"/>
+ </g>
+ <text id="revision" x="10" y="340" font-size="40" stroke="none" fill="black">$Revision: 1.2 $</text>
+ <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="currentColor" color="red"/>
+</svg>
diff --git a/share/extensions/tests/data/svg/symbol.svg b/share/extensions/tests/data/svg/symbol.svg
new file mode 100644
index 0000000..a8e20f3
--- /dev/null
+++ b/share/extensions/tests/data/svg/symbol.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:ns1="https://launchpad.net/jessyink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
+ <defs
+ id="defs33">
+ <symbol
+ transform="translate(5,5)"
+ id="AirTransportation_Inv">
+ <title
+ id="title1727">Air Transportation</title>
+ <rect
+ x="0.5"
+ y="0.5"
+ width="71"
+ height="71"
+ ry="6"
+ style="stroke:white"
+ id="rect1729" />
+ <path
+ d="m 39,10 0,18 25,15 0,7 -25,-9 0,14 6,4 0,6 -9,-3 -9,3 0,-6 6,-4 0,-14 -25,9 0,-7 25,-15 0,-18 a 3,3 0 0 1 6,0 z"
+ style="fill:white;stroke:none"
+ id="path1731" />
+ </symbol>
+ </defs>
+ <g id="body">
+ <use
+ transform="translate(13,11)"
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ id="plane01"
+ style="fill:#000000;stroke:#000000"
+ xlink:href="#AirTransportation_Inv" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/text_on_arc.svg b/share/extensions/tests/data/svg/text_on_arc.svg
new file mode 100644
index 0000000..337831b
--- /dev/null
+++ b/share/extensions/tests/data/svg/text_on_arc.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="210mm" height="297mm" viewBox="0 0 744.09448819 1052.3622047" id="svg4894" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="TextOnArcBug-20160324-01.svg">
+ <defs id="defs4896"/>
+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.35" inkscape:cx="-82.142857" inkscape:cy="520" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1366" inkscape:window-height="745" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1"/>
+ <metadata id="metadata4899">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ <dc:title/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
+ <ellipse style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path5446" cx="472.85715" cy="675.21936" rx="181.42857" ry="194.28572"/>
+ <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" id="text5442" sodipodi:linespacing="125%"><textPath xlink:href="#path5446" id="textPath5448"><tspan id="tspan5444">Curved Text</tspan></textPath></text>
+ </g>
+</svg> \ No newline at end of file
diff --git a/share/extensions/tests/data/svg/text_types.svg b/share/extensions/tests/data/svg/text_types.svg
new file mode 100644
index 0000000..191623f
--- /dev/null
+++ b/share/extensions/tests/data/svg/text_types.svg
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="142.15878"
+ height="96.270485"
+ viewBox="0 0 142.15879 96.270485"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.1-rc (52f87abb86, 2021-05-02)"
+ sodipodi:docname="test_texts.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ objecttolerance="10.0"
+ gridtolerance="10.0"
+ guidetolerance="10.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="px"
+ showgrid="false"
+ inkscape:zoom="4"
+ inkscape:cx="94.625"
+ inkscape:cy="57.125"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ inkscape:window-x="-8"
+ inkscape:window-y="353"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ units="px"
+ lock-margins="true"
+ fit-margin-top="5"
+ fit-margin-left="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5" />
+ <defs
+ id="defs2">
+ <rect
+ x="106.13368"
+ y="295.92566"
+ width="211.01872"
+ height="102.38778"
+ id="rect127697" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-8.0187893,28.437623)">
+ <text
+ xml:space="preserve"
+ id="regular"
+ style="font-size:3.175px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;fill:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
+ x="13.714261"
+ y="5.3445697"><tspan
+ sodipodi:role="line"
+ id="tspan107963"
+ style="stroke-width:0.5"
+ x="13.714261"
+ y="5.3445697">This is a regular text</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.5"
+ x="13.714261"
+ y="9.3133192"
+ id="tspan107965">With a line break.</tspan></text>
+ <text
+ xml:space="preserve"
+ id="regular-transform"
+ style="font-size:3.175px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;fill:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
+ x="85.644661"
+ y="-6.7999878"
+ transform="matrix(1.1841233,0.52555662,-0.38220752,0.67486916,0,0)"><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.5"
+ x="85.644661"
+ y="-6.7999878"
+ id="tspan107965-5">This is regular text</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.5"
+ x="85.644661"
+ y="-2.8312378"
+ id="tspan166624">with a line break</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.5"
+ x="85.644661"
+ y="1.1375122"
+ id="tspan166626">and some transforms.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:3.175px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;white-space:pre;inline-size:24.045;fill:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
+ id="inline-size"
+ transform="translate(13.59746,3.7093356)"><tspan
+ x="0"
+ y="11.480255"
+ id="tspan192272"><tspan
+ style="stroke-width:0.5"
+ id="tspan192270">This is an SVG2 </tspan></tspan><tspan
+ x="0"
+ y="15.449005"
+ id="tspan192276"><tspan
+ style="stroke-width:0.5"
+ id="tspan192274">flowed text. </tspan></tspan><tspan
+ x="0"
+ y="19.417755"
+ id="tspan192284"><tspan
+ style="stroke-width:0.5"
+ id="tspan192278">(inlin</tspan><tspan
+ dx="-0.27516687"
+ style="letter-spacing:0.275167px"
+ id="tspan192280">e siz</tspan><tspan
+ dx="0.27516711"
+ style="stroke-width:0.5"
+ id="tspan192282">e)
+</tspan></tspan><tspan
+ x="0"
+ y="23.386505"
+ id="tspan192288"><tspan
+ style="stroke-width:0.5"
+ id="tspan192286">This is a line </tspan></tspan><tspan
+ x="0"
+ y="27.355255"
+ id="tspan192292"><tspan
+ style="stroke-width:0.5"
+ id="tspan192290">break inside that </tspan></tspan><tspan
+ x="0"
+ y="31.324005"
+ id="tspan192296"><tspan
+ style="stroke-width:0.5"
+ id="tspan192294">text.</tspan></tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:3.175px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0.0343958px;fill:#000000;stroke-width:0.499999;stroke-linecap:round;stroke-linejoin:round"
+ x="13.432274"
+ y="58.195934"
+ id="kerning"><tspan
+ sodipodi:role="line"
+ id="tspan12642"
+ style="stroke-width:0.5"
+ x="13.432274"
+ y="58.195934">This is a <tspan
+ style="letter-spacing:0.320146px"
+ id="tspan25400">text</tspan> with kerns adjusted in tspans</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.5"
+ x="13.432274"
+ y="62.164684"
+ id="tspan19510">(as Inkscape does it)</tspan></text>
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;fill:#000000;stroke-width:1.88976;stroke-linecap:round;stroke-linejoin:round"
+ id="flowroot"
+ transform="matrix(0.264583,0,0,0.264583,-31.812004,-9.9496733)"><flowRegion
+ id="flowRegion92145"><rect
+ id="rect92147"
+ width="152.30298"
+ height="81.669708"
+ x="314.75946"
+ y="71.957634" /></flowRegion><flowPara
+ id="flowPara92157"
+ style="font-size:10px">This is an SVG1.2 flowed text (flowroot)</flowPara><flowPara
+ id="flowPara92168">And this is a linebreak inside.</flowPara></flowRoot>
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;line-height:20px;font-family:Arial;-inkscape-font-specification:Arial;fill:#000000;stroke-width:1.88976;stroke-linecap:round;stroke-linejoin:round"
+ id="flowroot-abs-lineheight"
+ transform="matrix(0.264583,0,0,0.264583,11.888108,-10.490643)"><flowRegion
+ id="flowRegion92145-9"><rect
+ id="rect92147-2"
+ width="152.30298"
+ height="81.669708"
+ x="314.75946"
+ y="71.957634" /></flowRegion><flowPara
+ id="flowPara92157-6"
+ style="font-size:10px">This is an SVG1.2 flowed text</flowPara><flowPara
+ style="font-size:10px"
+ id="flowPara181051">With absolute line-height</flowPara><flowPara
+ id="flowPara92168-7" /></flowRoot>
+ <flowRoot
+ xml:space="preserve"
+ style="font-size:12px;font-family:Arial;-inkscape-font-specification:Arial;fill:#000000;stroke-width:1.88976;stroke-linecap:round;stroke-linejoin:round"
+ id="flowroot-no-lineheight"
+ transform="matrix(0.264583,0,0,0.264583,11.888108,1.863526)"><flowRegion
+ id="flowRegion92145-9-5"><rect
+ id="rect92147-2-1"
+ width="171.20064"
+ height="66.55159"
+ x="314.75946"
+ y="71.957634" /></flowRegion><flowPara
+ id="flowPara178978">This is an SVG1.2 flowed text</flowPara><flowPara
+ id="flowPara191038">without line height.</flowPara></flowRoot>
+ <text
+ y="4.9445772"
+ x="51.84655"
+ style="font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.37276px;font-family:Helvetica;-inkscape-font-specification:Helvetica;writing-mode:lr-tb;fill:#110f0d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.352777"
+ id="manual-kerns"><tspan
+ style="stroke-width:0.352777"
+ x="51.84655 52.646873 52.99144 58.482491 59.282814 59.627373 71.752998 72.553322 72.897888 75.069603 75.869919 76.214493 78.387573 79.187889 79.532463 82.391922 83.192253 83.536812 103.09733 103.89765 104.24221 109.73325 110.53359 110.87815 116.36782 117.16816 117.51272 119.68581 120.48612 120.83068"
+ y="4.9445772"
+ sodipodi:role="line"
+ id="tspan5688">0.50.10.10.10.34.20.54.30.14.5</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:3.175px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;direction:rtl;fill:#000000;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round"
+ x="92.401642"
+ y="36.257484"
+ id="rtl"><tspan
+ sodipodi:role="line"
+ id="tspan94789"
+ style="font-size:3.175px;direction:rtl;stroke-width:0.25"
+ x="92.401642"
+ y="36.257484">This is a text with direction:rtl </tspan></text>
+ <text
+ xml:space="preserve"
+ id="shape-inside"
+ style="font-size:24px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect127697);fill:#000000;stroke-width:1.88976;stroke-linecap:round;stroke-linejoin:round"
+ transform="matrix(0.13229167,0,0,0.13229167,-0.66073416,-0.33036706)"><tspan
+ x="106.13281"
+ y="317.54389"
+ id="tspan192298">This is an SVG2 </tspan><tspan
+ x="106.13281"
+ y="347.54389"
+ id="tspan192300">flowed text (shape </tspan><tspan
+ x="106.13281"
+ y="377.54389"
+ id="tspan192302">inside)</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:5.33333px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;writing-mode:lr-tb;direction:ltr;fill:#000000;stroke-width:1.88976;stroke-linecap:round;stroke-linejoin:round"
+ x="13.65625"
+ y="-19.117189"
+ id="title"><tspan
+ sodipodi:role="line"
+ id="tspan156918"
+ x="13.65625"
+ y="-19.117189"
+ style="font-size:5.33333px;direction:ltr">This is a test document containing different transformed </tspan><tspan
+ sodipodi:role="line"
+ x="13.65625"
+ y="-12.450527"
+ style="font-size:5.33333px;direction:ltr"
+ id="tspan163610">text elements that were created using different methods.</tspan><tspan
+ sodipodi:role="line"
+ x="13.65625"
+ y="-5.7838631"
+ style="font-size:5.33333px;direction:ltr"
+ id="tspan168431">The containing layer has a transform applied as well.</tspan></text>
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/three_pages_and_two_grids.svg b/share/extensions/tests/data/svg/three_pages_and_two_grids.svg
new file mode 100644
index 0000000..959a923
--- /dev/null
+++ b/share/extensions/tests/data/svg/three_pages_and_two_grids.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2-dev (1:1.0+devel+202201200004+c1616499b1)"
+ sodipodi:docname="three_pages_and_two_grids.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:blackoutopacity="0.0"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="true"
+ inkscape:zoom="0.5946522"
+ inkscape:cx="1251.9923"
+ inkscape:cy="1194.8161"
+ inkscape:window-width="1852"
+ inkscape:window-height="1016"
+ inkscape:window-x="68"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <sodipodi:guide
+ position="26.696277,284.09681"
+ orientation="0,1"
+ id="guide9" />
+ <sodipodi:guide
+ position="-76.974264,413.12882"
+ orientation="0,1"
+ id="guide61" />
+ <sodipodi:guide
+ position="26.696276,284.09682"
+ orientation="1,0"
+ id="guide115" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid169"
+ units="cm"
+ spacingx="1"
+ spacingy="1" />
+ <inkscape:grid
+ type="axonomgrid"
+ id="grid171"
+ color="#ff8f3f"
+ opacity="0.1254902"
+ empcolor="#ff8f3f"
+ empopacity="0.25098039"
+ units="in"
+ spacingy="12.7"
+ empspacing="1" />
+ <inkscape:page
+ x="0"
+ y="0"
+ width="210"
+ height="297"
+ id="page417" />
+ <inkscape:page
+ x="220"
+ y="0"
+ width="210"
+ height="297"
+ id="page419" />
+ <inkscape:page
+ x="0"
+ y="305"
+ width="430"
+ height="107.75"
+ id="page520" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1" />
+</svg>
diff --git a/share/extensions/tests/data/svg/transformed-layer.svg b/share/extensions/tests/data/svg/transformed-layer.svg
new file mode 100644
index 0000000..6148ea2
--- /dev/null
+++ b/share/extensions/tests/data/svg/transformed-layer.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ width="793.7007874"
+ height="1122.519685"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ inkscape:zoom="0.4"
+ inkscape:cx="100"
+ inkscape:cy="300"
+ inkscape:current-layer="inner_layer" />
+ <g id="outer_layer" inkscape:groupmode="layer"
+ transform="rotate(30) translate(20, 30)">
+ <g id="inner_layer" inkscape:groupmode="layer"
+ transform="scale(2)" />
+ </g>
+</svg>
diff --git a/share/extensions/tests/data/svg/with-lpe.svg b/share/extensions/tests/data/svg/with-lpe.svg
new file mode 100644
index 0000000..89d590e
--- /dev/null
+++ b/share/extensions/tests/data/svg/with-lpe.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg1956"
+ version="1.1"
+ viewBox="0 0 210 297"
+ height="297mm"
+ width="210mm">
+ <defs
+ id="defs1950" />
+ <metadata
+ id="metadata1953">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path id="lpe" d="M 30 30 L -10 -10 Z" inkscape:original-d="M 20 20 L 10 10 Z" />
+ <path id="nolpe" d="M 30 30 L -10 -10 Z" />
+</svg>