svg2slides 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +83 -0
- data/Rakefile +51 -0
- data/bin/svg2slides +3 -0
- data/data/svg2slides/svg2slides.mk +12 -0
- data/how-it-works.svg +469 -0
- data/lib/svg_2_slides.rb +109 -0
- data/sample/Makefile +3 -0
- data/sample/simple.svg +84 -0
- data/spec/makefile_spec.rb +20 -0
- data/spec/spec_helper.rb +53 -0
- data/spec/svg_2_slides_spec.rb +37 -0
- metadata +57 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b61dbe513bf1dd3244e44490f69d3a79030a575a
|
4
|
+
data.tar.gz: 3f4dc0c03d155e3fb1f2d48b0b6767a8221af251
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3c88fa854ad5af36a8d8383872cfc534f3816de4394ab56ec00a9a82f387d6fb423cc91b26742af07475fba48b7e5a6ac9be96dc43f89a766e70bcc997393cb9
|
7
|
+
data.tar.gz: 242d148e9106aafdac2579b9269787b8335fe45c81a6acfb68a64862e6d8445dfef875785557b6e53df6897e71746d13db84d64c853e5dfe94fea98b84104888
|
data/README
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
= SYNOPSIS
|
2
|
+
|
3
|
+
svg2slides - generates slides from layered SVG drawings
|
4
|
+
|
5
|
+
svg2slides reads SVG drawings that have layers and produces as output one SVG
|
6
|
+
per layer. The output SVG file for each layer has that layer and all the
|
7
|
+
layers below it, i.e. the layers above the current layer are removed from the
|
8
|
+
drawing. This is useful to generate sequences of slides, where slide N is
|
9
|
+
composed of layers 1, 2, ..., N of the original drawing.
|
10
|
+
|
11
|
+
= USAGE
|
12
|
+
|
13
|
+
svg2slides [OPTION] ... FILE [ FILE ...]
|
14
|
+
|
15
|
+
= OPTIONS
|
16
|
+
|
17
|
+
--help, -h:
|
18
|
+
|
19
|
+
Displays help
|
20
|
+
|
21
|
+
--version, -v:
|
22
|
+
|
23
|
+
Displays version information and exits.
|
24
|
+
|
25
|
+
--suffix SUFFIX
|
26
|
+
|
27
|
+
The suffix used for output filenames. Default: '-%03d'. This suffix will be
|
28
|
+
expanded as a printf(3) format string with the index of the given slide as
|
29
|
+
argument, and will be inserted between the basename of the input file and
|
30
|
+
the .svg extension to form the output file names.
|
31
|
+
|
32
|
+
Examples (assuming "file.svg" as an input file with 2 layers):
|
33
|
+
|
34
|
+
| Suffix | Output file names |
|
35
|
+
+--------+----------------------------+
|
36
|
+
| -%03d | file-001.svg, file-002.svg |
|
37
|
+
| _%d | file_1.svg, file_2.svg |
|
38
|
+
|
39
|
+
= MAKEFILE SNIPPET
|
40
|
+
|
41
|
+
Included in the package you'll find a Makefile snippet that you can include in
|
42
|
+
your own Makefile's to build slides from your SVG drawings. To do that, you
|
43
|
+
must declare the SVG2SLIDES_INPUT variable and after that include the snippet:
|
44
|
+
|
45
|
+
SVG2SLIDES_INPUT = drawing1.svg drawing2.svg
|
46
|
+
include /usr/share/svg2slides/svg2slides.mk
|
47
|
+
all: $(SVG2SLIDES_SLIDES)
|
48
|
+
|
49
|
+
This Makefile will build the slides in both drawing1.svg and drawing2.svg.
|
50
|
+
|
51
|
+
The you can make your own targets depend on $(SVG2SLIDES_SLIDES), which will
|
52
|
+
contain a list of all slides that will be generated from the files you listed
|
53
|
+
in the SVG2SLIDES_INPUT variable.
|
54
|
+
|
55
|
+
A `clean` target will be available automatically, so `make clean` will delete
|
56
|
+
the slides generated from your input files. If you need to add your own `clean`
|
57
|
+
target, make sure you do so with two colons ("clean::").
|
58
|
+
|
59
|
+
The Makefile snippet will be installed normally in
|
60
|
+
/usr/share/svg2slides/svg2slides.mk, but depending on your operating system it
|
61
|
+
may be in another place. It's intended to be used with GNU make.
|
62
|
+
|
63
|
+
= AUTHOR
|
64
|
+
|
65
|
+
Antonio Terceiro <terceiro@softwarelivre.org>
|
66
|
+
|
67
|
+
= COPYRIGHT
|
68
|
+
|
69
|
+
Copyright (c) 2009 Antonio Terceiro
|
70
|
+
|
71
|
+
This program is free software: you can redistribute it and/or modify
|
72
|
+
it under the terms of the GNU General Public License as published by
|
73
|
+
the Free Software Foundation, either version 3 of the License, or
|
74
|
+
(at your option) any later version.
|
75
|
+
|
76
|
+
This program is distributed in the hope that it will be useful,
|
77
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
78
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
79
|
+
GNU General Public License for more details.
|
80
|
+
|
81
|
+
You should have received a copy of the GNU General Public License
|
82
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
83
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
task :default => :spec
|
2
|
+
|
3
|
+
task :spec do
|
4
|
+
ruby '-S', 'rspec', 'spec/'
|
5
|
+
end
|
6
|
+
|
7
|
+
require './lib/svg_2_slides.rb'
|
8
|
+
gem = 'svg2slides-' + Svg2Slides::VERSION + '.gem'
|
9
|
+
gemspec = gem + 'spec'
|
10
|
+
|
11
|
+
desc 'Builds .gemspec file'
|
12
|
+
file gemspec do
|
13
|
+
require 'rubygems'
|
14
|
+
require 'rubygems/package_task'
|
15
|
+
spec = Gem::Specification.new do |s|
|
16
|
+
s.platform = Gem::Platform::RUBY
|
17
|
+
s.summary = "Converts SVG drawings into slides"
|
18
|
+
s.executables = Dir.glob('bin/*').map { |f| File.basename(f) }
|
19
|
+
s.name = 'svg2slides'
|
20
|
+
s.author = 'Antonio Terceiro'
|
21
|
+
s.email = 'terceiro@softwarelivre.org'
|
22
|
+
s.version = Svg2Slides::VERSION
|
23
|
+
s.require_path = 'lib'
|
24
|
+
s.files = FileList['**/*']
|
25
|
+
s.description = <<-EOF
|
26
|
+
svg2slides takes a single SVG file with separate layers and creates one SVG
|
27
|
+
file for each layer. Each generated SVG file contains the corresponding layer and all the layers below it.
|
28
|
+
EOF
|
29
|
+
end
|
30
|
+
File.open(gemspec, 'w') do |f|
|
31
|
+
f.write(spec.to_ruby)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
file gem => gemspec do
|
36
|
+
sh 'gem', 'build', gemspec
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Builds .gem file"
|
40
|
+
task 'gem' => gem
|
41
|
+
|
42
|
+
desc 'pushes .gem to rubygems.org'
|
43
|
+
task :push => gem do
|
44
|
+
sh 'gem', 'push', gem
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'cleanup'
|
48
|
+
task :clean do
|
49
|
+
rm_f FileList['*.gem']
|
50
|
+
rm_f FileList['*.gemspec']
|
51
|
+
end
|
data/bin/svg2slides
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
SVG2SLIDES_SLIDES = $(foreach input, $(SVG2SLIDES_INPUT), $(shell seq -f "$(shell echo $(input) | sed -e 's/.svg$$//')-%03g.svg" 1 $(shell grep -c 'inkscape:groupmode="layer"' $(input))))
|
2
|
+
|
3
|
+
-include svg2slides.in.mk
|
4
|
+
|
5
|
+
%.svg2slides.stamp: %.svg
|
6
|
+
svg2slides $< && touch $@
|
7
|
+
|
8
|
+
svg2slides.in.mk: $(SVG2SLIDES_INPUT)
|
9
|
+
for file in $(SVG2SLIDES_SLIDES); do input=`echo $$file | sed -e 's/-[0-9]*.svg/.svg2slides.stamp/'`; echo "$$file: $$input" >> $@; done
|
10
|
+
|
11
|
+
clean::
|
12
|
+
rm -rf $(SVG2SLIDES_SLIDES) svg2slides.in.mk *.svg2slides.stamp
|
data/how-it-works.svg
ADDED
@@ -0,0 +1,469 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
12
|
+
width="800"
|
13
|
+
height="744.09448"
|
14
|
+
id="svg2"
|
15
|
+
sodipodi:version="0.32"
|
16
|
+
inkscape:version="0.48.1 r9760"
|
17
|
+
version="1.0"
|
18
|
+
sodipodi:docname="how-it-works.svg"
|
19
|
+
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
20
|
+
<defs
|
21
|
+
id="defs4">
|
22
|
+
<marker
|
23
|
+
inkscape:stockid="Arrow2Lend"
|
24
|
+
orient="auto"
|
25
|
+
refY="0.0"
|
26
|
+
refX="0.0"
|
27
|
+
id="Arrow2Lend"
|
28
|
+
style="overflow:visible;">
|
29
|
+
<path
|
30
|
+
id="path3571"
|
31
|
+
style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
|
32
|
+
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 "
|
33
|
+
transform="scale(1.1) rotate(180) translate(1,0)" />
|
34
|
+
</marker>
|
35
|
+
<inkscape:perspective
|
36
|
+
sodipodi:type="inkscape:persp3d"
|
37
|
+
inkscape:vp_x="45.47476 : 526.18109 : 1"
|
38
|
+
inkscape:vp_y="6.1230318e-14 : 1000 : 0"
|
39
|
+
inkscape:vp_z="789.56924 : 526.18109 : 1"
|
40
|
+
inkscape:persp3d-origin="417.522 : 350.78739 : 1"
|
41
|
+
id="perspective10" />
|
42
|
+
</defs>
|
43
|
+
<sodipodi:namedview
|
44
|
+
id="base"
|
45
|
+
pagecolor="#ffffff"
|
46
|
+
bordercolor="#666666"
|
47
|
+
borderopacity="1.0"
|
48
|
+
inkscape:pageopacity="0.0"
|
49
|
+
inkscape:pageshadow="2"
|
50
|
+
inkscape:zoom="0.72437038"
|
51
|
+
inkscape:cx="400"
|
52
|
+
inkscape:cy="427.26761"
|
53
|
+
inkscape:document-units="px"
|
54
|
+
inkscape:current-layer="layer1"
|
55
|
+
showgrid="false"
|
56
|
+
width="1052.36px"
|
57
|
+
showguides="true"
|
58
|
+
inkscape:guide-bbox="true"
|
59
|
+
inkscape:window-width="1276"
|
60
|
+
inkscape:window-height="708"
|
61
|
+
inkscape:window-x="0"
|
62
|
+
inkscape:window-y="26"
|
63
|
+
inkscape:window-maximized="0">
|
64
|
+
<sodipodi:guide
|
65
|
+
orientation="1,0"
|
66
|
+
position="294.04847,450.04601"
|
67
|
+
id="guide3048" />
|
68
|
+
</sodipodi:namedview>
|
69
|
+
<metadata
|
70
|
+
id="metadata7">
|
71
|
+
<rdf:RDF>
|
72
|
+
<cc:Work
|
73
|
+
rdf:about="">
|
74
|
+
<dc:format>image/svg+xml</dc:format>
|
75
|
+
<dc:type
|
76
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
77
|
+
</cc:Work>
|
78
|
+
</rdf:RDF>
|
79
|
+
</metadata>
|
80
|
+
<g
|
81
|
+
inkscape:label="Camada 1"
|
82
|
+
inkscape:groupmode="layer"
|
83
|
+
id="layer1">
|
84
|
+
<path
|
85
|
+
style="fill:#fcaf3e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
86
|
+
d="M 329.25145,392.75488 C 329.25145,392.75488 361.29972,395.37196 404.4892,348.06585 C 466.64522,279.98541 477.6562,265.2353 477.6562,265.2353 L 477.6562,547.37192 C 477.6562,547.37192 492.81044,567.24533 425.19684,481.10747 C 374.80826,416.9138 328.5612,414.15277 328.5612,414.15277 L 329.25145,392.75488 z"
|
87
|
+
id="path4848"
|
88
|
+
sodipodi:nodetypes="csccscc" />
|
89
|
+
<text
|
90
|
+
xml:space="preserve"
|
91
|
+
style="font-size:25.63043212999999909px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;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;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
|
92
|
+
x="87.695808"
|
93
|
+
y="80.112534"
|
94
|
+
id="text3403"
|
95
|
+
sodipodi:linespacing="125%"><tspan
|
96
|
+
sodipodi:role="line"
|
97
|
+
id="tspan3405"
|
98
|
+
x="87.695808"
|
99
|
+
y="80.112534">drawing.svg</tspan></text>
|
100
|
+
<g
|
101
|
+
id="g3415"
|
102
|
+
transform="translate(-78.62742,-137.77444)">
|
103
|
+
<path
|
104
|
+
sodipodi:nodetypes="cssscc"
|
105
|
+
id="path3409"
|
106
|
+
d="M 110.29283,423.10936 C 110.29283,423.10936 137.77443,298.52609 181.745,302.92315 C 225.71556,307.3202 206.66165,360.08489 241.8381,380.60448 C 277.01455,401.12408 301.59766,351.17269 331.24492,349.82509 C 363.49,348.3594 384.92565,423.10937 384.92565,423.10937 L 110.29283,423.10936 z"
|
107
|
+
style="fill:#8ae234;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
108
|
+
<rect
|
109
|
+
y="232.57025"
|
110
|
+
x="109.92641"
|
111
|
+
height="190.53911"
|
112
|
+
width="275.54886"
|
113
|
+
id="rect3407"
|
114
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
115
|
+
<text
|
116
|
+
id="text3411"
|
117
|
+
y="256.74744"
|
118
|
+
x="285.32919"
|
119
|
+
style="font-size:22.60144615px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#888a85;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
|
120
|
+
xml:space="preserve"><tspan
|
121
|
+
y="256.74744"
|
122
|
+
x="285.32919"
|
123
|
+
id="tspan3413"
|
124
|
+
sodipodi:role="line">top layer</tspan></text>
|
125
|
+
</g>
|
126
|
+
<g
|
127
|
+
transform="translate(-78.62742,71.818588)"
|
128
|
+
id="g3421">
|
129
|
+
<rect
|
130
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
131
|
+
id="rect3425"
|
132
|
+
width="275.54886"
|
133
|
+
height="190.53911"
|
134
|
+
x="109.92641"
|
135
|
+
y="232.57025" />
|
136
|
+
<text
|
137
|
+
xml:space="preserve"
|
138
|
+
style="font-size:22.60144615px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#888a85;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
|
139
|
+
x="249.32919"
|
140
|
+
y="256.74744"
|
141
|
+
id="text3427"><tspan
|
142
|
+
sodipodi:role="line"
|
143
|
+
id="tspan3429"
|
144
|
+
x="249.32919"
|
145
|
+
y="256.74744">middle layer</tspan></text>
|
146
|
+
<rect
|
147
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
148
|
+
id="rect3433"
|
149
|
+
width="26.382339"
|
150
|
+
height="23.450968"
|
151
|
+
x="167.82098"
|
152
|
+
y="284.60208" />
|
153
|
+
<path
|
154
|
+
style="fill:#ef2929;fill-rule:evenodd;stroke:#a40000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
155
|
+
d="M 162.46796,288.99914 L 198.74683,288.99914 L 180.11142,270.31165 L 162.46796,288.99914 z"
|
156
|
+
id="path3435"
|
157
|
+
sodipodi:nodetypes="cccc" />
|
158
|
+
</g>
|
159
|
+
<g
|
160
|
+
id="g3437"
|
161
|
+
transform="translate(-78.62742,278.48024)">
|
162
|
+
<rect
|
163
|
+
y="232.57025"
|
164
|
+
x="109.92641"
|
165
|
+
height="190.53911"
|
166
|
+
width="275.54886"
|
167
|
+
id="rect3441"
|
168
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
169
|
+
<text
|
170
|
+
id="text3443"
|
171
|
+
y="256.74744"
|
172
|
+
x="247.32919"
|
173
|
+
style="font-size:22.60144615px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#888a85;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
|
174
|
+
xml:space="preserve"><tspan
|
175
|
+
y="256.74744"
|
176
|
+
x="247.32919"
|
177
|
+
id="tspan3445"
|
178
|
+
sodipodi:role="line">bottom layer</tspan></text>
|
179
|
+
<g
|
180
|
+
transform="translate(176.85978,-59.665571)"
|
181
|
+
id="g3461">
|
182
|
+
<rect
|
183
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
184
|
+
id="rect3463"
|
185
|
+
width="4.1455846"
|
186
|
+
height="22.282516"
|
187
|
+
x="79.343163"
|
188
|
+
y="425.42795" />
|
189
|
+
<path
|
190
|
+
sodipodi:type="star"
|
191
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
192
|
+
id="path3465"
|
193
|
+
sodipodi:sides="7"
|
194
|
+
sodipodi:cx="374.13901"
|
195
|
+
sodipodi:cy="326.94504"
|
196
|
+
sodipodi:r1="20.889233"
|
197
|
+
sodipodi:r2="17.417896"
|
198
|
+
sodipodi:arg1="0.80294022"
|
199
|
+
sodipodi:arg2="1.2517392"
|
200
|
+
inkscape:flatsided="false"
|
201
|
+
inkscape:rounded="0.5"
|
202
|
+
inkscape:randomized="0"
|
203
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
204
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)" />
|
205
|
+
</g>
|
206
|
+
<g
|
207
|
+
id="g3457"
|
208
|
+
transform="translate(166.85978,-61.665571)">
|
209
|
+
<rect
|
210
|
+
y="425.42795"
|
211
|
+
x="79.343163"
|
212
|
+
height="22.282516"
|
213
|
+
width="4.1455846"
|
214
|
+
id="rect3455"
|
215
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
216
|
+
<path
|
217
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)"
|
218
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
219
|
+
inkscape:randomized="0"
|
220
|
+
inkscape:rounded="0.5"
|
221
|
+
inkscape:flatsided="false"
|
222
|
+
sodipodi:arg2="1.2517392"
|
223
|
+
sodipodi:arg1="0.80294022"
|
224
|
+
sodipodi:r2="17.417896"
|
225
|
+
sodipodi:r1="20.889233"
|
226
|
+
sodipodi:cy="326.94504"
|
227
|
+
sodipodi:cx="374.13901"
|
228
|
+
sodipodi:sides="7"
|
229
|
+
id="path3453"
|
230
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
231
|
+
sodipodi:type="star" />
|
232
|
+
</g>
|
233
|
+
<g
|
234
|
+
id="g3467"
|
235
|
+
transform="translate(186.85978,-61.665571)">
|
236
|
+
<rect
|
237
|
+
y="425.42795"
|
238
|
+
x="79.343163"
|
239
|
+
height="22.282516"
|
240
|
+
width="4.1455846"
|
241
|
+
id="rect3469"
|
242
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
243
|
+
<path
|
244
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)"
|
245
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
246
|
+
inkscape:randomized="0"
|
247
|
+
inkscape:rounded="0.5"
|
248
|
+
inkscape:flatsided="false"
|
249
|
+
sodipodi:arg2="1.2517392"
|
250
|
+
sodipodi:arg1="0.80294022"
|
251
|
+
sodipodi:r2="17.417896"
|
252
|
+
sodipodi:r1="20.889233"
|
253
|
+
sodipodi:cy="326.94504"
|
254
|
+
sodipodi:cx="374.13901"
|
255
|
+
sodipodi:sides="7"
|
256
|
+
id="path3471"
|
257
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
258
|
+
sodipodi:type="star" />
|
259
|
+
</g>
|
260
|
+
</g>
|
261
|
+
<g
|
262
|
+
transform="translate(390.83315,-157.77444)"
|
263
|
+
id="g3473">
|
264
|
+
<path
|
265
|
+
style="fill:#8ae234;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
266
|
+
d="M 110.29283,423.10936 C 110.29283,423.10936 137.77443,298.52609 181.745,302.92315 C 225.71556,307.3202 206.66165,360.08489 241.8381,380.60448 C 277.01455,401.12408 301.59766,351.17269 331.24492,349.82509 C 363.49,348.3594 384.92565,423.10937 384.92565,423.10937 L 110.29283,423.10936 z"
|
267
|
+
id="path3475"
|
268
|
+
sodipodi:nodetypes="cssscc" />
|
269
|
+
<rect
|
270
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
271
|
+
id="rect3477"
|
272
|
+
width="275.54886"
|
273
|
+
height="190.53911"
|
274
|
+
x="109.92641"
|
275
|
+
y="232.57025" />
|
276
|
+
</g>
|
277
|
+
<g
|
278
|
+
id="g3483"
|
279
|
+
transform="translate(390.83315,71.818588)">
|
280
|
+
<path
|
281
|
+
sodipodi:nodetypes="cssscc"
|
282
|
+
id="path3485"
|
283
|
+
d="M 110.29283,423.10936 C 110.29283,423.10936 137.77443,298.52609 181.745,302.92315 C 225.71556,307.3202 206.66165,360.08489 241.8381,380.60448 C 277.01455,401.12408 301.59766,351.17269 331.24492,349.82509 C 363.49,348.3594 384.92565,423.10937 384.92565,423.10937 L 110.29283,423.10936 z"
|
284
|
+
style="fill:#8ae234;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
285
|
+
<rect
|
286
|
+
y="232.57025"
|
287
|
+
x="109.92641"
|
288
|
+
height="190.53911"
|
289
|
+
width="275.54886"
|
290
|
+
id="rect3487"
|
291
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
292
|
+
<rect
|
293
|
+
y="284.60208"
|
294
|
+
x="167.82098"
|
295
|
+
height="23.450968"
|
296
|
+
width="26.382339"
|
297
|
+
id="rect3493"
|
298
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
299
|
+
<path
|
300
|
+
sodipodi:nodetypes="cccc"
|
301
|
+
id="path3495"
|
302
|
+
d="M 162.46796,288.99914 L 198.74683,288.99914 L 180.11142,270.31165 L 162.46796,288.99914 z"
|
303
|
+
style="fill:#ef2929;fill-rule:evenodd;stroke:#a40000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
304
|
+
</g>
|
305
|
+
<g
|
306
|
+
transform="translate(390.83315,298.48024)"
|
307
|
+
id="g3497">
|
308
|
+
<path
|
309
|
+
style="fill:#8ae234;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
310
|
+
d="M 110.29283,423.10936 C 110.29283,423.10936 137.77443,298.52609 181.745,302.92315 C 225.71556,307.3202 206.66165,360.08489 241.8381,380.60448 C 277.01455,401.12408 301.59766,351.17269 331.24492,349.82509 C 363.49,348.3594 384.92565,423.10937 384.92565,423.10937 L 110.29283,423.10936 z"
|
311
|
+
id="path3499"
|
312
|
+
sodipodi:nodetypes="cssscc" />
|
313
|
+
<rect
|
314
|
+
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
315
|
+
id="rect3501"
|
316
|
+
width="275.54886"
|
317
|
+
height="190.53911"
|
318
|
+
x="109.92641"
|
319
|
+
y="232.57025" />
|
320
|
+
<rect
|
321
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
322
|
+
id="rect3507"
|
323
|
+
width="26.382339"
|
324
|
+
height="23.450968"
|
325
|
+
x="167.82098"
|
326
|
+
y="284.60208" />
|
327
|
+
<path
|
328
|
+
style="fill:#ef2929;fill-rule:evenodd;stroke:#a40000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
329
|
+
d="M 162.46796,288.99914 L 198.74683,288.99914 L 180.11142,270.31165 L 162.46796,288.99914 z"
|
330
|
+
id="path3509"
|
331
|
+
sodipodi:nodetypes="cccc" />
|
332
|
+
<g
|
333
|
+
id="g3511"
|
334
|
+
transform="translate(176.85978,-59.665571)">
|
335
|
+
<rect
|
336
|
+
y="425.42795"
|
337
|
+
x="79.343163"
|
338
|
+
height="22.282516"
|
339
|
+
width="4.1455846"
|
340
|
+
id="rect3513"
|
341
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
342
|
+
<path
|
343
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)"
|
344
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
345
|
+
inkscape:randomized="0"
|
346
|
+
inkscape:rounded="0.5"
|
347
|
+
inkscape:flatsided="false"
|
348
|
+
sodipodi:arg2="1.2517392"
|
349
|
+
sodipodi:arg1="0.80294022"
|
350
|
+
sodipodi:r2="17.417896"
|
351
|
+
sodipodi:r1="20.889233"
|
352
|
+
sodipodi:cy="326.94504"
|
353
|
+
sodipodi:cx="374.13901"
|
354
|
+
sodipodi:sides="7"
|
355
|
+
id="path3515"
|
356
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
357
|
+
sodipodi:type="star" />
|
358
|
+
</g>
|
359
|
+
<g
|
360
|
+
transform="translate(166.85978,-61.665571)"
|
361
|
+
id="g3517">
|
362
|
+
<rect
|
363
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
364
|
+
id="rect3519"
|
365
|
+
width="4.1455846"
|
366
|
+
height="22.282516"
|
367
|
+
x="79.343163"
|
368
|
+
y="425.42795" />
|
369
|
+
<path
|
370
|
+
sodipodi:type="star"
|
371
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
372
|
+
id="path3521"
|
373
|
+
sodipodi:sides="7"
|
374
|
+
sodipodi:cx="374.13901"
|
375
|
+
sodipodi:cy="326.94504"
|
376
|
+
sodipodi:r1="20.889233"
|
377
|
+
sodipodi:r2="17.417896"
|
378
|
+
sodipodi:arg1="0.80294022"
|
379
|
+
sodipodi:arg2="1.2517392"
|
380
|
+
inkscape:flatsided="false"
|
381
|
+
inkscape:rounded="0.5"
|
382
|
+
inkscape:randomized="0"
|
383
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
384
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)" />
|
385
|
+
</g>
|
386
|
+
<g
|
387
|
+
transform="translate(186.85978,-61.665571)"
|
388
|
+
id="g3523">
|
389
|
+
<rect
|
390
|
+
style="opacity:1;fill:#c17d11;fill-opacity:1;fill-rule:evenodd;stroke:#8f5902;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
391
|
+
id="rect3525"
|
392
|
+
width="4.1455846"
|
393
|
+
height="22.282516"
|
394
|
+
x="79.343163"
|
395
|
+
y="425.42795" />
|
396
|
+
<path
|
397
|
+
sodipodi:type="star"
|
398
|
+
style="opacity:1;fill:#73d216;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:1.92549574;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
399
|
+
id="path3527"
|
400
|
+
sodipodi:sides="7"
|
401
|
+
sodipodi:cx="374.13901"
|
402
|
+
sodipodi:cy="326.94504"
|
403
|
+
sodipodi:r1="20.889233"
|
404
|
+
sodipodi:r2="17.417896"
|
405
|
+
sodipodi:arg1="0.80294022"
|
406
|
+
sodipodi:arg2="1.2517392"
|
407
|
+
inkscape:flatsided="false"
|
408
|
+
inkscape:rounded="0.5"
|
409
|
+
inkscape:randomized="0"
|
410
|
+
d="m 388.64855,341.97278 c -3.29895,3.1852 -4.69178,0.0727 -9.04605,1.5111 -4.35426,1.4384 -3.61895,4.76811 -8.1661,4.17482 -4.54716,-0.59329 -2.98212,-3.62286 -6.82155,-6.13033 -3.83942,-2.50747 -5.98424,0.14346 -8.35549,-3.78156 -2.37125,-3.92502 0.97315,-4.59033 0.53973,-9.1555 -0.43343,-4.56516 -3.84328,-4.58922 -2.25303,-8.89035 1.59026,-4.30113 4.19562,-2.10118 7.49457,-5.28638 3.29896,-3.1852 1.19176,-5.86613 5.54602,-7.30453 4.35427,-1.4384 4.2587,1.97019 8.80585,2.56348 4.54716,0.59329 5.32937,-2.72571 9.1688,-0.21824 3.83942,2.50747 1.11489,4.55798 3.48614,8.48299 2.37126,3.92502 5.45386,2.46722 5.88729,7.03238 0.43342,4.56517 -2.86845,3.71352 -4.4587,8.01464 -1.59025,4.30113 1.47148,5.80228 -1.82748,8.98748 z"
|
411
|
+
transform="matrix(0.5193296,0,0,0.5193639,-112.65926,252.14074)" />
|
412
|
+
</g>
|
413
|
+
</g>
|
414
|
+
<text
|
415
|
+
sodipodi:linespacing="125%"
|
416
|
+
id="text3529"
|
417
|
+
y="67.333138"
|
418
|
+
x="525.43091"
|
419
|
+
style="font-size:25.63043212999999909px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;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;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
|
420
|
+
xml:space="preserve"><tspan
|
421
|
+
y="67.333138"
|
422
|
+
x="525.43091"
|
423
|
+
id="tspan3531"
|
424
|
+
sodipodi:role="line">drawing-001.svg</tspan></text>
|
425
|
+
<text
|
426
|
+
xml:space="preserve"
|
427
|
+
style="font-size:25.63043212999999909px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;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;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
|
428
|
+
x="527.43091"
|
429
|
+
y="297.33313"
|
430
|
+
id="text3533"
|
431
|
+
sodipodi:linespacing="125%"><tspan
|
432
|
+
sodipodi:role="line"
|
433
|
+
id="tspan3535"
|
434
|
+
x="527.43091"
|
435
|
+
y="297.33313">drawing-002.svg</tspan></text>
|
436
|
+
<text
|
437
|
+
sodipodi:linespacing="125%"
|
438
|
+
id="text3537"
|
439
|
+
y="525.33313"
|
440
|
+
x="523.43091"
|
441
|
+
style="font-size:25.63043212999999909px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;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;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
|
442
|
+
xml:space="preserve"><tspan
|
443
|
+
y="525.33313"
|
444
|
+
x="523.43091"
|
445
|
+
id="tspan3539"
|
446
|
+
sodipodi:role="line">drawing-003.svg</tspan></text>
|
447
|
+
<path
|
448
|
+
sodipodi:nodetypes="csc"
|
449
|
+
id="path4327"
|
450
|
+
d="M 327.18069,414.15328 C 327.18069,414.15328 376.14403,421.81466 416.91379,470.75415 C 471.00664,535.68651 484.55874,552.2042 484.55874,552.2042"
|
451
|
+
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none" />
|
452
|
+
<path
|
453
|
+
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow2Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
454
|
+
d="M 327.18069,393.75073 C 327.18069,393.75073 376.14403,386.08935 416.91379,337.14986 C 471.00664,272.2175 484.55874,255.69981 484.55874,255.69981"
|
455
|
+
id="path4846"
|
456
|
+
sodipodi:nodetypes="csc" />
|
457
|
+
<text
|
458
|
+
sodipodi:linespacing="125%"
|
459
|
+
id="text3044"
|
460
|
+
y="408.67374"
|
461
|
+
x="338.94849"
|
462
|
+
style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
|
463
|
+
xml:space="preserve"><tspan
|
464
|
+
y="408.67374"
|
465
|
+
x="338.94849"
|
466
|
+
id="tspan3046"
|
467
|
+
sodipodi:role="line">svg2slides</tspan></text>
|
468
|
+
</g>
|
469
|
+
</svg>
|
data/lib/svg_2_slides.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'getoptlong'
|
3
|
+
|
4
|
+
class Svg2Slides
|
5
|
+
|
6
|
+
VERSION = '0.1.0'
|
7
|
+
|
8
|
+
def process(inputfile)
|
9
|
+
doc = REXML::Document.new(File.new(inputfile))
|
10
|
+
layers = doc.elements.each('descendant::g[attribute::inkscape:groupmode="layer"]') { |e| e }
|
11
|
+
n = layers.size
|
12
|
+
while n > 0
|
13
|
+
filename = inputfile.sub('.svg', options['--suffix'] + '.svg') % n
|
14
|
+
File.open(filename, 'w') do |f|
|
15
|
+
say "Writing #{filename} ..."
|
16
|
+
doc.write(f)
|
17
|
+
layers.last.remove
|
18
|
+
layers.pop
|
19
|
+
n = n - 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def say(msg)
|
25
|
+
puts(msg) unless options['--quiet']
|
26
|
+
end
|
27
|
+
|
28
|
+
OPTIONS = []
|
29
|
+
OPTIONS << {
|
30
|
+
:name => '--suffix',
|
31
|
+
:aliases => [ '-s' ],
|
32
|
+
:description => 'Set the suffix for the generated files.',
|
33
|
+
:arg => GetoptLong::REQUIRED_ARGUMENT,
|
34
|
+
:arg_name => 'SUFFIX',
|
35
|
+
:default => '-%03d',
|
36
|
+
}
|
37
|
+
OPTIONS << {
|
38
|
+
:name => '--help',
|
39
|
+
:aliases => ['-h'],
|
40
|
+
:arg => GetoptLong::NO_ARGUMENT,
|
41
|
+
:description => 'Displays help',
|
42
|
+
}
|
43
|
+
OPTIONS << {
|
44
|
+
:name => '--version',
|
45
|
+
:aliases => ['-v'],
|
46
|
+
:arg => GetoptLong::NO_ARGUMENT,
|
47
|
+
:description => 'Display version information and exits.'
|
48
|
+
}
|
49
|
+
OPTIONS << {
|
50
|
+
:name => '--quiet',
|
51
|
+
:aliases => ['-q'],
|
52
|
+
:arg => GetoptLong::NO_ARGUMENT,
|
53
|
+
:description => "Produces no output during execution."
|
54
|
+
}
|
55
|
+
def options
|
56
|
+
@options ||=
|
57
|
+
begin
|
58
|
+
opts = {}
|
59
|
+
OPTIONS.each do |item|
|
60
|
+
opts[item[:name]] = item[:default]
|
61
|
+
end
|
62
|
+
opts
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def usage
|
67
|
+
puts "Usage: svg2slides [OPTIONS] FILE [FILE ...]"
|
68
|
+
OPTIONS.each do |opt|
|
69
|
+
spec = [opt[:name]] + (opt[:aliases] || [])
|
70
|
+
opt_usage =
|
71
|
+
case opt[:arg]
|
72
|
+
when GetoptLong::NO_ARGUMENT
|
73
|
+
spec.join(', ')
|
74
|
+
when GetoptLong::REQUIRED_ARGUMENT
|
75
|
+
spec.map { |variant| [variant, opt[:arg_name]].join(' ')}.join(', ')
|
76
|
+
else
|
77
|
+
raise 'unsupported command line option spec: %s' % opt.inspect
|
78
|
+
end
|
79
|
+
puts
|
80
|
+
puts ' ' + opt_usage
|
81
|
+
puts
|
82
|
+
puts ' ' + opt[:description]
|
83
|
+
if opt[:default]
|
84
|
+
puts ' ' + '(default: "%s")' % opt[:default]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def process_args
|
90
|
+
opts = GetoptLong.new(*OPTIONS.map { |item| [item[:name]] + (item[:aliases] || []) + [item[:arg]] })
|
91
|
+
opts.each do |opt, arg|
|
92
|
+
options[opt] = arg
|
93
|
+
end
|
94
|
+
if options['--version']
|
95
|
+
puts "svg2slides version #{VERSION}"
|
96
|
+
exit(0)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def run
|
101
|
+
process_args
|
102
|
+
if ARGV.empty?
|
103
|
+
usage
|
104
|
+
end
|
105
|
+
ARGV.each do |item|
|
106
|
+
process(item)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/sample/Makefile
ADDED
data/sample/simple.svg
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
<svg
|
4
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
5
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
6
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
7
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
8
|
+
xmlns="http://www.w3.org/2000/svg"
|
9
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
10
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
11
|
+
width="210mm"
|
12
|
+
height="297mm"
|
13
|
+
id="svg2"
|
14
|
+
sodipodi:version="0.32"
|
15
|
+
inkscape:version="0.46"
|
16
|
+
sodipodi:docname="simple.svg"
|
17
|
+
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
18
|
+
<defs
|
19
|
+
id="defs4">
|
20
|
+
<inkscape:perspective
|
21
|
+
sodipodi:type="inkscape:persp3d"
|
22
|
+
inkscape:vp_x="0 : 526.18109 : 1"
|
23
|
+
inkscape:vp_y="0 : 1000 : 0"
|
24
|
+
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
25
|
+
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
26
|
+
id="perspective10" />
|
27
|
+
</defs>
|
28
|
+
<sodipodi:namedview
|
29
|
+
id="base"
|
30
|
+
pagecolor="#ffffff"
|
31
|
+
bordercolor="#666666"
|
32
|
+
borderopacity="1.0"
|
33
|
+
inkscape:pageopacity="0.0"
|
34
|
+
inkscape:pageshadow="2"
|
35
|
+
inkscape:zoom="0.35"
|
36
|
+
inkscape:cx="-47.142857"
|
37
|
+
inkscape:cy="520"
|
38
|
+
inkscape:document-units="px"
|
39
|
+
inkscape:current-layer="layer2"
|
40
|
+
showgrid="false"
|
41
|
+
inkscape:window-width="1276"
|
42
|
+
inkscape:window-height="745"
|
43
|
+
inkscape:window-x="0"
|
44
|
+
inkscape:window-y="19" />
|
45
|
+
<metadata
|
46
|
+
id="metadata7">
|
47
|
+
<rdf:RDF>
|
48
|
+
<cc:Work
|
49
|
+
rdf:about="">
|
50
|
+
<dc:format>image/svg+xml</dc:format>
|
51
|
+
<dc:type
|
52
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
53
|
+
</cc:Work>
|
54
|
+
</rdf:RDF>
|
55
|
+
</metadata>
|
56
|
+
<g
|
57
|
+
inkscape:label="Layer 1"
|
58
|
+
inkscape:groupmode="layer"
|
59
|
+
id="layer1">
|
60
|
+
<path
|
61
|
+
sodipodi:type="arc"
|
62
|
+
style="opacity:1;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
63
|
+
id="path2383"
|
64
|
+
sodipodi:cx="357.14285"
|
65
|
+
sodipodi:cy="533.79077"
|
66
|
+
sodipodi:rx="234.28572"
|
67
|
+
sodipodi:ry="207.14285"
|
68
|
+
d="M 591.42857,533.79077 A 234.28572,207.14285 0 1 1 122.85713,533.79077 A 234.28572,207.14285 0 1 1 591.42857,533.79077 z" />
|
69
|
+
</g>
|
70
|
+
<g
|
71
|
+
inkscape:groupmode="layer"
|
72
|
+
id="layer2"
|
73
|
+
inkscape:label="Layer 2">
|
74
|
+
<rect
|
75
|
+
style="opacity:1;fill:#e9b96e;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
76
|
+
id="rect2386"
|
77
|
+
width="354.28571"
|
78
|
+
height="294.28571"
|
79
|
+
x="314.28571"
|
80
|
+
y="203.79076"
|
81
|
+
rx="17.272532"
|
82
|
+
ry="16.6315" />
|
83
|
+
</g>
|
84
|
+
</svg>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
describe 'Makefile snippet' do
|
4
|
+
|
5
|
+
include CommandRunner
|
6
|
+
|
7
|
+
it 'builds the slides' do
|
8
|
+
make
|
9
|
+
files.should include('simple-001.svg')
|
10
|
+
files.should include('simple-002.svg')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'cleans the slides up' do
|
14
|
+
original_files = files
|
15
|
+
make
|
16
|
+
make 'clean'
|
17
|
+
files.should == original_files
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
CURDIR = File.expand_path(Dir.pwd)
|
2
|
+
TMPDIR = File.expand_path(File.join(File.dirname(__FILE__), '..', 'trash'))
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
|
6
|
+
config.before(:all) do
|
7
|
+
ENV['PATH'] = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin')) + ':' + ENV['PATH']
|
8
|
+
ENV['RUBYLIB'] =
|
9
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')) +
|
10
|
+
(ENV['RUBYLIB'] ? (':' + ENV['RUBYLIB']) : '')
|
11
|
+
end
|
12
|
+
|
13
|
+
config.before(:each) do
|
14
|
+
FileUtils.cp_r(File.join(File.dirname(__FILE__), '..', 'sample'), TMPDIR)
|
15
|
+
Dir.chdir(TMPDIR)
|
16
|
+
end
|
17
|
+
|
18
|
+
config.after(:each) do
|
19
|
+
Dir.chdir(CURDIR)
|
20
|
+
FileUtils.rm_rf(TMPDIR)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module CommandRunner
|
26
|
+
def make(*args)
|
27
|
+
args.unshift('make --quiet')
|
28
|
+
run_command(args)
|
29
|
+
end
|
30
|
+
def svg2slides(*args)
|
31
|
+
args.unshift('svg2slides')
|
32
|
+
run_command(*args)
|
33
|
+
end
|
34
|
+
def run_command(*command_line)
|
35
|
+
command = command_line.join(' ') + " >tmp.out 2>tmp.err"
|
36
|
+
system(command)
|
37
|
+
if $?.is_a?(Fixnum)
|
38
|
+
@exit_status = $?
|
39
|
+
else
|
40
|
+
@exit_status = $?.exitstatus
|
41
|
+
end
|
42
|
+
@stdout = File.readlines('tmp.out').join
|
43
|
+
@stderr = File.readlines('tmp.err').join
|
44
|
+
FileUtils.rm_f('tmp.out')
|
45
|
+
FileUtils.rm_f('tmp.err')
|
46
|
+
end
|
47
|
+
attr_reader :stdout
|
48
|
+
attr_reader :stderr
|
49
|
+
attr_reader :exit_status
|
50
|
+
def files
|
51
|
+
Dir.glob('*')
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'svg_2_slides'
|
2
|
+
require 'fileutils'
|
3
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
4
|
+
|
5
|
+
describe Svg2Slides do
|
6
|
+
|
7
|
+
include CommandRunner
|
8
|
+
|
9
|
+
it 'displays help message' do
|
10
|
+
svg2slides '--help'
|
11
|
+
stdout.should match(/--help/)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'displays version number' do
|
15
|
+
svg2slides '--version'
|
16
|
+
stdout.should match(Svg2Slides::VERSION)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'processes a simple drawing' do
|
20
|
+
svg2slides 'simple.svg'
|
21
|
+
files.should include('simple-001.svg')
|
22
|
+
files.should include('simple-002.svg')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'changes the suffix' do
|
26
|
+
svg2slides '--suffix', '_%06d', 'simple.svg'
|
27
|
+
files.should include('simple_000001.svg')
|
28
|
+
files.should include('simple_000002.svg')
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'can be quiet' do
|
32
|
+
svg2slides '--quiet', 'simple.svg'
|
33
|
+
files.should include('simple-001.svg')
|
34
|
+
stdout.should == ''
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: svg2slides
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Antonio Terceiro
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |
|
14
|
+
svg2slides takes a single SVG file with separate layers and creates one SVG
|
15
|
+
file for each layer. Each generated SVG file contains the corresponding layer and all the layers below it.
|
16
|
+
email: terceiro@softwarelivre.org
|
17
|
+
executables:
|
18
|
+
- svg2slides
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- README
|
23
|
+
- Rakefile
|
24
|
+
- bin/svg2slides
|
25
|
+
- data/svg2slides/svg2slides.mk
|
26
|
+
- how-it-works.svg
|
27
|
+
- lib/svg_2_slides.rb
|
28
|
+
- sample/Makefile
|
29
|
+
- sample/simple.svg
|
30
|
+
- spec/makefile_spec.rb
|
31
|
+
- spec/spec_helper.rb
|
32
|
+
- spec/svg_2_slides_spec.rb
|
33
|
+
homepage:
|
34
|
+
licenses: []
|
35
|
+
metadata: {}
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 2.2.2
|
53
|
+
signing_key:
|
54
|
+
specification_version: 4
|
55
|
+
summary: Converts SVG drawings into slides
|
56
|
+
test_files: []
|
57
|
+
has_rdoc:
|