Browse Source

Add XSL stylesheet to fix up SVG files

The SVG output produced by external tools needs some postprocessing.
This is implemented by this new XSL stylesheet.

Issues are:

- SVG produced by Ditaa does not add a viewBox attribute to the svg
  element, needed to make the image scalable.

- SVG produced by Graphviz uses a stroke="transparent" attribute,
  which is not valid SVG.  It appears to mostly work, but FOP
  complains.

Other tweaks can be added over time.

This reverts 7dc78d8ef3 and
29046c44f3, which applied these fixes
manually.
REL_12_STABLE
Peter Eisentraut 3 weeks ago
parent
commit
ac5bb8f275

+ 0
- 1
.gitattributes View File

@@ -13,7 +13,6 @@ README.*	conflict-marker-size=32
13 13
 
14 14
 # Certain data files that contain special whitespace, and other special cases
15 15
 *.data						-whitespace
16
-*.svg						whitespace=-blank-at-eol
17 16
 contrib/pgcrypto/sql/pgp-armor.sql		whitespace=-blank-at-eol
18 17
 src/backend/catalog/sql_features.txt		whitespace=space-before-tab,blank-at-eof,-blank-at-eol
19 18
 

+ 10
- 2
doc/src/sgml/images/Makefile View File

@@ -8,11 +8,19 @@ ALL_IMAGES = \
8 8
 
9 9
 DITAA = ditaa
10 10
 DOT = dot
11
+XSLTPROC = xsltproc
11 12
 
12 13
 all: $(ALL_IMAGES)
13 14
 
14
-%.svg: %.gv
15
+%.svg.tmp: %.gv
15 16
 	$(DOT) -T svg -o $@ $<
16 17
 
17
-%.svg: %.txt
18
+%.svg.tmp: %.txt
18 19
 	$(DITAA) -E -S --svg $< $@
20
+
21
+# Post-processing for SVG files coming from other tools
22
+#
23
+# Use --novalid to avoid loading SVG DTD if a file specifies it, since
24
+# it might not be available locally, and we don't need it.
25
+%.svg: %.svg.tmp fixup-svg.xsl
26
+	$(XSLTPROC) --novalid -o $@ $(word 2,$^) $<

+ 4
- 7
doc/src/sgml/images/README View File

@@ -22,6 +22,10 @@ Therefore, any tool used needs to be able to produce SVG.
22 22
 This directory contains makefile rules to build SVG from common input
23 23
 formats, using some common styling.
24 24
 
25
+fixup-svg.xsl applies some postprocessing to the SVG files produced by
26
+those external tools to address assorted issues.  See comments in
27
+there, and adjust and expand as necessary.
28
+
25 29
 Both the source and the SVG output file are committed in this
26 30
 directory.  That way, we don't need all developers to have all the
27 31
 tools installed.  While we accept that there could be some gratuitous
@@ -59,10 +63,3 @@ Notes:
59 63
 - The width should be set to something.  This ensures that the image
60 64
   is scaled to fit the page in PDF output.  (Other widths than 100%
61 65
   might be appropriate.)
62
-
63
-- SVG images should be scalable as they will be rendered in a variety
64
-  of places (web, PDF, etc.) as well as in different viewports
65
-  (desktop, mobile, etc.). To help the images successfully scale,
66
-  employ a "viewBox" attribute in the SVG tag. For example,
67
-  to create an image with a default width and height of 400x300,
68
-  you would use viewBox="0.00 0.00 400.00 300.00"

+ 44
- 0
doc/src/sgml/images/fixup-svg.xsl View File

@@ -0,0 +1,44 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
+                xmlns:svg="http://www.w3.org/2000/svg"
4
+                version="1.0">
5
+
6
+<!--
7
+Transform the SVG produced by various tools, applying assorted fixups.
8
+-->
9
+
10
+<!--
11
+Add viewBox attribute to svg element if not already present.  This allows the
12
+image to scale.
13
+-->
14
+<xsl:template match="svg:svg">
15
+  <xsl:copy>
16
+    <xsl:if test="not(@viewBox)">
17
+      <xsl:attribute name="viewBox">
18
+        <xsl:text>0 0 </xsl:text>
19
+        <xsl:value-of select="@width"/>
20
+        <xsl:text> </xsl:text>
21
+        <xsl:value-of select="@height"/>
22
+      </xsl:attribute>
23
+    </xsl:if>
24
+    <xsl:apply-templates select="@* | node()"/>
25
+  </xsl:copy>
26
+</xsl:template>
27
+
28
+<!--
29
+Fix stroke="transparent" attribute, which is invalid SVG.
30
+-->
31
+<xsl:template match="@stroke[.='transparent']">
32
+  <xsl:attribute name="stroke">none</xsl:attribute>
33
+</xsl:template>
34
+
35
+<!--
36
+copy everything else
37
+-->
38
+<xsl:template match="@* | node()">
39
+  <xsl:copy>
40
+    <xsl:apply-templates select="@* | node()"/>
41
+  </xsl:copy>
42
+</xsl:template>
43
+
44
+</xsl:stylesheet>

+ 31
- 34
doc/src/sgml/images/gin.svg View File

@@ -1,14 +1,11 @@
1
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
1
+<?xml version="1.0"?>
4 2
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
5 3
  -->
6 4
 <!-- Title: gin Pages: 1 -->
7
-<svg width="836pt" height="432pt"
8
- viewBox="0.00 0.00 836.00 432.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
5
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="836pt" height="432pt" viewBox="0.00 0.00 836.00 432.00">
9 6
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 428)">
10 7
 <title>gin</title>
11
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-428 832,-428 832,4 -4,4"/>
8
+<polygon fill="#ffffff" stroke="none" points="-4,4 -4,-428 832,-428 832,4 -4,4"/>
12 9
 <g id="clust1" class="cluster">
13 10
 <title>cluster01</title>
14 11
 <polygon fill="none" stroke="#000000" points="100,-162 100,-380 694,-380 694,-162 100,-162"/>
@@ -47,7 +44,7 @@
47 44
 </g>
48 45
 <!-- m1&#45;&gt;e1 -->
49 46
 <g id="edge24" class="edge">
50
-<title>m1&#45;&gt;e1</title>
47
+<title>m1-&gt;e1</title>
51 48
 <path fill="none" stroke="#000000" d="M593.4778,-387.8976C568.2655,-377.6464 536.5468,-364.7498 509.931,-353.928"/>
52 49
 <polygon fill="#000000" stroke="#000000" points="510.9595,-350.568 500.3776,-350.0436 508.3229,-357.0525 510.9595,-350.568"/>
53 50
 </g>
@@ -58,7 +55,7 @@
58 55
 </g>
59 56
 <!-- m1&#45;&gt;n1 -->
60 57
 <g id="edge28" class="edge">
61
-<title>m1&#45;&gt;n1</title>
58
+<title>m1-&gt;n1</title>
62 59
 <path fill="none" stroke="#000000" d="M683.1514,-387.8551C688.2504,-385.3905 693.2983,-382.7547 698,-380 709.7018,-373.1438 721.7385,-364.4455 732.115,-356.3423"/>
63 60
 <polygon fill="#000000" stroke="#000000" points="734.4083,-358.9902 740.0427,-350.0178 730.0428,-353.5181 734.4083,-358.9902"/>
64 61
 </g>
@@ -69,7 +66,7 @@
69 66
 </g>
70 67
 <!-- e1&#45;&gt;e2 -->
71 68
 <g id="edge9" class="edge">
72
-<title>e1&#45;&gt;e2</title>
69
+<title>e1-&gt;e2</title>
73 70
 <path fill="none" stroke="#000000" d="M411.0831,-313.8314C387.065,-304.1162 357.3166,-292.0831 332.0408,-281.8592"/>
74 71
 <polygon fill="#000000" stroke="#000000" points="333.1767,-278.5432 322.5939,-278.038 330.5518,-285.0325 333.1767,-278.5432"/>
75 72
 </g>
@@ -80,7 +77,7 @@
80 77
 </g>
81 78
 <!-- e1&#45;&gt;e3 -->
82 79
 <g id="edge8" class="edge">
83
-<title>e1&#45;&gt;e3</title>
80
+<title>e1-&gt;e3</title>
84 81
 <path fill="none" stroke="#000000" d="M441.1118,-313.8314C434.247,-305.454 425.9699,-295.3531 418.4489,-286.1749"/>
85 82
 <polygon fill="#000000" stroke="#000000" points="421.1341,-283.9297 412.0886,-278.4133 415.7197,-288.3665 421.1341,-283.9297"/>
86 83
 </g>
@@ -91,13 +88,13 @@
91 88
 </g>
92 89
 <!-- e1&#45;&gt;e4 -->
93 90
 <g id="edge7" class="edge">
94
-<title>e1&#45;&gt;e4</title>
91
+<title>e1-&gt;e4</title>
95 92
 <path fill="none" stroke="#000000" d="M471.1405,-313.8314C478.1217,-305.454 486.5391,-295.3531 494.1876,-286.1749"/>
96 93
 <polygon fill="#000000" stroke="#000000" points="496.9425,-288.3362 500.6556,-278.4133 491.5649,-283.8548 496.9425,-288.3362"/>
97 94
 </g>
98 95
 <!-- e2&#45;&gt;e3 -->
99 96
 <g id="edge1" class="edge">
100
-<title>e2&#45;&gt;e3</title>
97
+<title>e2-&gt;e3</title>
101 98
 <path fill="none" stroke="#000000" d="M328.668,-260C331.1453,-260 333.6227,-260 336.1001,-260"/>
102 99
 <polygon fill="#000000" stroke="#000000" points="336.2849,-263.5001 346.2848,-260 336.2848,-256.5001 336.2849,-263.5001"/>
103 100
 </g>
@@ -108,7 +105,7 @@
108 105
 </g>
109 106
 <!-- e2&#45;&gt;e5 -->
110 107
 <g id="edge10" class="edge">
111
-<title>e2&#45;&gt;e5</title>
108
+<title>e2-&gt;e5</title>
112 109
 <path fill="none" stroke="#000000" d="M247.9713,-241.8314C232.7504,-232.6221 214.0872,-221.3301 197.7917,-211.4706"/>
113 110
 <polygon fill="#000000" stroke="#000000" points="199.3868,-208.345 189.0191,-206.1628 195.7631,-214.3341 199.3868,-208.345"/>
114 111
 </g>
@@ -120,13 +117,13 @@
120 117
 </g>
121 118
 <!-- e2&#45;&gt;e6 -->
122 119
 <g id="edge11" class="edge">
123
-<title>e2&#45;&gt;e6</title>
120
+<title>e2-&gt;e6</title>
124 121
 <path fill="none" stroke="#000000" d="M278,-241.8314C278,-234.131 278,-224.9743 278,-216.4166"/>
125 122
 <polygon fill="#000000" stroke="#000000" points="281.5001,-216.4132 278,-206.4133 274.5001,-216.4133 281.5001,-216.4132"/>
126 123
 </g>
127 124
 <!-- e3&#45;&gt;e4 -->
128 125
 <g id="edge2" class="edge">
129
-<title>e3&#45;&gt;e4</title>
126
+<title>e3-&gt;e4</title>
130 127
 <path fill="none" stroke="#000000" d="M447.668,-260C450.1453,-260 452.6227,-260 455.1001,-260"/>
131 128
 <polygon fill="#000000" stroke="#000000" points="455.2849,-263.5001 465.2848,-260 455.2848,-256.5001 455.2849,-263.5001"/>
132 129
 </g>
@@ -137,7 +134,7 @@
137 134
 </g>
138 135
 <!-- e3&#45;&gt;e7 -->
139 136
 <g id="edge12" class="edge">
140
-<title>e3&#45;&gt;e7</title>
137
+<title>e3-&gt;e7</title>
141 138
 <path fill="none" stroke="#000000" d="M397,-241.8314C397,-234.131 397,-224.9743 397,-216.4166"/>
142 139
 <polygon fill="#000000" stroke="#000000" points="400.5001,-216.4132 397,-206.4133 393.5001,-216.4133 400.5001,-216.4132"/>
143 140
 </g>
@@ -149,7 +146,7 @@
149 146
 </g>
150 147
 <!-- e4&#45;&gt;e8 -->
151 148
 <g id="edge13" class="edge">
152
-<title>e4&#45;&gt;e8</title>
149
+<title>e4-&gt;e8</title>
153 150
 <path fill="none" stroke="#000000" d="M516,-241.8314C516,-234.131 516,-224.9743 516,-216.4166"/>
154 151
 <polygon fill="#000000" stroke="#000000" points="519.5001,-216.4132 516,-206.4133 512.5001,-216.4133 519.5001,-216.4132"/>
155 152
 </g>
@@ -161,13 +158,13 @@
161 158
 </g>
162 159
 <!-- e4&#45;&gt;e9 -->
163 160
 <g id="edge14" class="edge">
164
-<title>e4&#45;&gt;e9</title>
161
+<title>e4-&gt;e9</title>
165 162
 <path fill="none" stroke="#000000" d="M546.0287,-241.8314C561.2496,-232.6221 579.9128,-221.3301 596.2083,-211.4706"/>
166 163
 <polygon fill="#000000" stroke="#000000" points="598.2369,-214.3341 604.9809,-206.1628 594.6132,-208.345 598.2369,-214.3341"/>
167 164
 </g>
168 165
 <!-- e5&#45;&gt;e6 -->
169 166
 <g id="edge3" class="edge">
170
-<title>e5&#45;&gt;e6</title>
167
+<title>e5-&gt;e6</title>
171 168
 <path fill="none" stroke="#000000" d="M209.668,-188C212.1453,-188 214.6227,-188 217.1001,-188"/>
172 169
 <polygon fill="#000000" stroke="#000000" points="217.2849,-191.5001 227.2848,-188 217.2848,-184.5001 217.2849,-191.5001"/>
173 170
 </g>
@@ -178,19 +175,19 @@
178 175
 </g>
179 176
 <!-- e5&#45;&gt;p1 -->
180 177
 <g id="edge25" class="edge">
181
-<title>e5&#45;&gt;p1</title>
178
+<title>e5-&gt;p1</title>
182 179
 <path fill="none" stroke="#000000" d="M159,-169.8015C159,-159.3976 159,-146.1215 159,-134.3768"/>
183 180
 <polygon fill="#000000" stroke="#000000" points="162.5001,-134.1476 159,-124.1476 155.5001,-134.1476 162.5001,-134.1476"/>
184 181
 </g>
185 182
 <!-- e6&#45;&gt;e7 -->
186 183
 <g id="edge4" class="edge">
187
-<title>e6&#45;&gt;e7</title>
184
+<title>e6-&gt;e7</title>
188 185
 <path fill="none" stroke="#000000" d="M328.668,-188C331.1453,-188 333.6227,-188 336.1001,-188"/>
189 186
 <polygon fill="#000000" stroke="#000000" points="336.2849,-191.5001 346.2848,-188 336.2848,-184.5001 336.2849,-191.5001"/>
190 187
 </g>
191 188
 <!-- e7&#45;&gt;e8 -->
192 189
 <g id="edge5" class="edge">
193
-<title>e7&#45;&gt;e8</title>
190
+<title>e7-&gt;e8</title>
194 191
 <path fill="none" stroke="#000000" d="M447.668,-188C450.1453,-188 452.6227,-188 455.1001,-188"/>
195 192
 <polygon fill="#000000" stroke="#000000" points="455.2849,-191.5001 465.2848,-188 455.2848,-184.5001 455.2849,-191.5001"/>
196 193
 </g>
@@ -202,7 +199,7 @@
202 199
 </g>
203 200
 <!-- e7&#45;&gt;p4 -->
204 201
 <g id="edge26" class="edge">
205
-<title>e7&#45;&gt;p4</title>
202
+<title>e7-&gt;p4</title>
206 203
 <path fill="none" stroke="#000000" d="M383.906,-169.8015C376.0383,-158.8668 365.8878,-144.7593 357.133,-132.5916"/>
207 204
 <polygon fill="#000000" stroke="#000000" points="359.7389,-130.2207 351.0574,-124.1476 354.0569,-134.309 359.7389,-130.2207"/>
208 205
 </g>
@@ -213,13 +210,13 @@
213 210
 </g>
214 211
 <!-- e7&#45;&gt;p5 -->
215 212
 <g id="edge27" class="edge">
216
-<title>e7&#45;&gt;p5</title>
213
+<title>e7-&gt;p5</title>
217 214
 <path fill="none" stroke="#000000" d="M411.8695,-169.8015C420.8907,-158.7606 432.5549,-144.4851 442.5618,-132.2378"/>
218 215
 <polygon fill="#000000" stroke="#000000" points="445.5552,-134.1059 449.1721,-124.1476 440.1345,-129.6768 445.5552,-134.1059"/>
219 216
 </g>
220 217
 <!-- e8&#45;&gt;e9 -->
221 218
 <g id="edge6" class="edge">
222
-<title>e8&#45;&gt;e9</title>
219
+<title>e8-&gt;e9</title>
223 220
 <path fill="none" stroke="#000000" d="M566.668,-188C569.1453,-188 571.6227,-188 574.1001,-188"/>
224 221
 <polygon fill="#000000" stroke="#000000" points="574.2849,-191.5001 584.2848,-188 574.2848,-184.5001 574.2849,-191.5001"/>
225 222
 </g>
@@ -231,7 +228,7 @@
231 228
 </g>
232 229
 <!-- p1&#45;&gt;p2 -->
233 230
 <g id="edge16" class="edge">
234
-<title>p1&#45;&gt;p2</title>
231
+<title>p1-&gt;p2</title>
235 232
 <path fill="none" stroke="#000000" d="M135.7845,-87.8314C124.453,-78.9632 110.6536,-68.1637 98.3973,-58.5718"/>
236 233
 <polygon fill="#000000" stroke="#000000" points="100.2402,-55.5697 90.2081,-52.1628 95.926,-61.0822 100.2402,-55.5697"/>
237 234
 </g>
@@ -243,13 +240,13 @@
243 240
 </g>
244 241
 <!-- p1&#45;&gt;p3 -->
245 242
 <g id="edge17" class="edge">
246
-<title>p1&#45;&gt;p3</title>
243
+<title>p1-&gt;p3</title>
247 244
 <path fill="none" stroke="#000000" d="M165.8132,-87.8314C168.7644,-79.9617 172.2858,-70.5712 175.555,-61.8533"/>
248 245
 <polygon fill="#000000" stroke="#000000" points="178.8609,-63.0055 179.095,-52.4133 172.3066,-60.5476 178.8609,-63.0055"/>
249 246
 </g>
250 247
 <!-- p2&#45;&gt;p3 -->
251 248
 <g id="edge15" class="edge">
252
-<title>p2&#45;&gt;p3</title>
249
+<title>p2-&gt;p3</title>
253 250
 <path fill="none" stroke="#000000" d="M117.668,-34C120.1453,-34 122.6227,-34 125.1001,-34"/>
254 251
 <polygon fill="#000000" stroke="#000000" points="125.2849,-37.5001 135.2848,-34 125.2848,-30.5001 125.2849,-37.5001"/>
255 252
 </g>
@@ -261,7 +258,7 @@
261 258
 </g>
262 259
 <!-- p5&#45;&gt;p6 -->
263 260
 <g id="edge19" class="edge">
264
-<title>p5&#45;&gt;p6</title>
261
+<title>p5-&gt;p6</title>
265 262
 <path fill="none" stroke="#000000" d="M464,-87.8314C464,-80.131 464,-70.9743 464,-62.4166"/>
266 263
 <polygon fill="#000000" stroke="#000000" points="467.5001,-62.4132 464,-52.4133 460.5001,-62.4133 467.5001,-62.4132"/>
267 264
 </g>
@@ -273,13 +270,13 @@
273 270
 </g>
274 271
 <!-- p5&#45;&gt;p7 -->
275 272
 <g id="edge20" class="edge">
276
-<title>p5&#45;&gt;p7</title>
273
+<title>p5-&gt;p7</title>
277 274
 <path fill="none" stroke="#000000" d="M494.0287,-87.8314C509.2496,-78.6221 527.9128,-67.3301 544.2083,-57.4706"/>
278 275
 <polygon fill="#000000" stroke="#000000" points="546.2369,-60.3341 552.9809,-52.1628 542.6132,-54.345 546.2369,-60.3341"/>
279 276
 </g>
280 277
 <!-- p6&#45;&gt;p7 -->
281 278
 <g id="edge18" class="edge">
282
-<title>p6&#45;&gt;p7</title>
279
+<title>p6-&gt;p7</title>
283 280
 <path fill="none" stroke="#000000" d="M514.668,-34C517.1453,-34 519.6227,-34 522.1001,-34"/>
284 281
 <polygon fill="#000000" stroke="#000000" points="522.2849,-37.5001 532.2848,-34 522.2848,-30.5001 522.2849,-37.5001"/>
285 282
 </g>
@@ -290,7 +287,7 @@
290 287
 </g>
291 288
 <!-- n1&#45;&gt;n2 -->
292 289
 <g id="edge21" class="edge">
293
-<title>n1&#45;&gt;n2</title>
290
+<title>n1-&gt;n2</title>
294 291
 <path fill="none" stroke="#000000" d="M761,-313.8314C761,-306.131 761,-296.9743 761,-288.4166"/>
295 292
 <polygon fill="#000000" stroke="#000000" points="764.5001,-288.4132 761,-278.4133 757.5001,-288.4133 764.5001,-288.4132"/>
296 293
 </g>
@@ -301,7 +298,7 @@
301 298
 </g>
302 299
 <!-- n2&#45;&gt;n3 -->
303 300
 <g id="edge22" class="edge">
304
-<title>n2&#45;&gt;n3</title>
301
+<title>n2-&gt;n3</title>
305 302
 <path fill="none" stroke="#000000" d="M761,-241.8314C761,-234.131 761,-224.9743 761,-216.4166"/>
306 303
 <polygon fill="#000000" stroke="#000000" points="764.5001,-216.4132 761,-206.4133 757.5001,-216.4133 764.5001,-216.4132"/>
307 304
 </g>
@@ -312,7 +309,7 @@
312 309
 </g>
313 310
 <!-- n3&#45;&gt;n4 -->
314 311
 <g id="edge23" class="edge">
315
-<title>n3&#45;&gt;n4</title>
312
+<title>n3-&gt;n4</title>
316 313
 <path fill="none" stroke="#000000" d="M761,-169.8015C761,-159.3976 761,-146.1215 761,-134.3768"/>
317 314
 <polygon fill="#000000" stroke="#000000" points="764.5001,-134.1476 761,-124.1476 757.5001,-134.1476 764.5001,-134.1476"/>
318 315
 </g>

+ 30
- 36
doc/src/sgml/images/pagelayout.svg View File

@@ -1,41 +1,35 @@
1
-<?xml version='1.0' encoding='UTF-8' standalone='no'?>
2
-<svg 
3
-    xmlns='http://www.w3.org/2000/svg'
4
-    width='610'
5
-    height='210'
6
-    viewBox='0.00 0.00 610.00 210.00'
7
-    shape-rendering='geometricPrecision'
8
-    version='1.0'>
1
+<?xml version="1.0"?>
2
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 610 210" width="610" height="210" shape-rendering="geometricPrecision" version="1.0">
9 3
   <defs>
10
-    <filter id='f2' x='0' y='0' width='200%' height='200%'>
11
-      <feOffset result='offOut' in='SourceGraphic' dx='5' dy='5' />
12
-      <feGaussianBlur result='blurOut' in='offOut' stdDeviation='3' />
13
-      <feBlend in='SourceGraphic' in2='blurOut' mode='normal' />
4
+    <filter id="f2" x="0" y="0" width="200%" height="200%">
5
+      <feOffset result="offOut" in="SourceGraphic" dx="5" dy="5"/>
6
+      <feGaussianBlur result="blurOut" in="offOut" stdDeviation="3"/>
7
+      <feBlend in="SourceGraphic" in2="blurOut" mode="normal"/>
14 8
     </filter>
15 9
   </defs>
16
-  <g stroke-width='1' stroke-linecap='square' stroke-linejoin='round'>
17
-    <rect x='0' y='0' width='610' height='210' style='fill: #ffffff'/>
18
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M25.0 35.0 L25.0 175.0 L585.0 175.0 L585.0 35.0 z' />
19
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M305.0 175.0 L485.0 175.0 L485.0 147.0 L305.0 147.0 z' />
20
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M25.0 35.0 L25.0 63.0 L195.0 63.0 L195.0 35.0 z' />
21
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M305.0 147.0 L305.0 175.0 L195.0 175.0 L195.0 147.0 z' />
22
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M325.0 63.0 L325.0 91.0 L265.0 91.0 L265.0 105.0 L235.0 105.0 L235.0 63.0 z' />
23
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M585.0 147.0 L585.0 175.0 L485.0 175.0 L485.0 147.0 z' />
24
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M195.0 35.0 L285.0 35.0 L285.0 63.0 L195.0 63.0 z' />
25
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='white' d='M375.0 35.0 L375.0 63.0 L285.0 63.0 L285.0 35.0 z' />
26
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='none' d='M335.0 133.0 L335.0 105.0 L265.0 105.0 ' />
27
-    <path stroke='none' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='#000000' d='M470.0 42.0 L480.0 49.0 L470.0 56.0 z' />
28
-    <path stroke='none' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='#000000' d='M260.0 126.0 L265.0 140.0 L270.0 126.0 z' />
29
-    <path stroke='none' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='#000000' d='M330.0 126.0 L335.0 140.0 L340.0 126.0 z' />
30
-    <path stroke='none' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='#000000' d='M140.0 154.0 L130.0 161.0 L140.0 168.0 z' />
31
-    <path stroke='#000000' stroke-width='1.000000' stroke-linecap='round' stroke-linejoin='round' fill='none' d='M265.0 105.0 L265.0 133.0 ' />
32
-    <path stroke='#000000' stroke-width='1.000000' stroke-dasharray='5.000000,5.000000' stroke-miterlimit='0' stroke-linecap='butt' stroke-linejoin='round' fill='white' d='M375.0 49.0 L475.0 49.0 ' />
33
-    <path stroke='#000000' stroke-width='1.000000' stroke-dasharray='5.000000,5.000000' stroke-miterlimit='0' stroke-linecap='butt' stroke-linejoin='round' fill='white' d='M135.0 161.0 L195.0 161.0 ' />
34
-    <text x='48' y='54' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[PageHeaderData]]></text>
35
-    <text x='214' y='166' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[Item]]></text>
36
-    <text x='216' y='54' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[ItemId]]></text>
37
-    <text x='306' y='54' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[ItemId]]></text>
38
-    <text x='324' y='166' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[Item]]></text>
39
-    <text x='509' y='166' font-family='Courier' font-size='15' stroke='none' fill='#000000' ><![CDATA[Special]]></text>
10
+  <g stroke-width="1" stroke-linecap="square" stroke-linejoin="round">
11
+    <rect x="0" y="0" width="610" height="210" style="fill: #ffffff"/>
12
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M25.0 35.0 L25.0 175.0 L585.0 175.0 L585.0 35.0 z"/>
13
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M305.0 175.0 L485.0 175.0 L485.0 147.0 L305.0 147.0 z"/>
14
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M25.0 35.0 L25.0 63.0 L195.0 63.0 L195.0 35.0 z"/>
15
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M305.0 147.0 L305.0 175.0 L195.0 175.0 L195.0 147.0 z"/>
16
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M325.0 63.0 L325.0 91.0 L265.0 91.0 L265.0 105.0 L235.0 105.0 L235.0 63.0 z"/>
17
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M585.0 147.0 L585.0 175.0 L485.0 175.0 L485.0 147.0 z"/>
18
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M195.0 35.0 L285.0 35.0 L285.0 63.0 L195.0 63.0 z"/>
19
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="white" d="M375.0 35.0 L375.0 63.0 L285.0 63.0 L285.0 35.0 z"/>
20
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="none" d="M335.0 133.0 L335.0 105.0 L265.0 105.0 "/>
21
+    <path stroke="none" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="#000000" d="M470.0 42.0 L480.0 49.0 L470.0 56.0 z"/>
22
+    <path stroke="none" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="#000000" d="M260.0 126.0 L265.0 140.0 L270.0 126.0 z"/>
23
+    <path stroke="none" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="#000000" d="M330.0 126.0 L335.0 140.0 L340.0 126.0 z"/>
24
+    <path stroke="none" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="#000000" d="M140.0 154.0 L130.0 161.0 L140.0 168.0 z"/>
25
+    <path stroke="#000000" stroke-width="1.000000" stroke-linecap="round" stroke-linejoin="round" fill="none" d="M265.0 105.0 L265.0 133.0 "/>
26
+    <path stroke="#000000" stroke-width="1.000000" stroke-dasharray="5.000000,5.000000" stroke-miterlimit="0" stroke-linecap="butt" stroke-linejoin="round" fill="white" d="M375.0 49.0 L475.0 49.0 "/>
27
+    <path stroke="#000000" stroke-width="1.000000" stroke-dasharray="5.000000,5.000000" stroke-miterlimit="0" stroke-linecap="butt" stroke-linejoin="round" fill="white" d="M135.0 161.0 L195.0 161.0 "/>
28
+    <text x="48" y="54" font-family="Courier" font-size="15" stroke="none" fill="#000000">PageHeaderData</text>
29
+    <text x="214" y="166" font-family="Courier" font-size="15" stroke="none" fill="#000000">Item</text>
30
+    <text x="216" y="54" font-family="Courier" font-size="15" stroke="none" fill="#000000">ItemId</text>
31
+    <text x="306" y="54" font-family="Courier" font-size="15" stroke="none" fill="#000000">ItemId</text>
32
+    <text x="324" y="166" font-family="Courier" font-size="15" stroke="none" fill="#000000">Item</text>
33
+    <text x="509" y="166" font-family="Courier" font-size="15" stroke="none" fill="#000000">Special</text>
40 34
   </g>
41 35
 </svg>

Loading…
Cancel
Save