prawn-svg 0.15.0.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +20 -12
- data/lib/prawn/svg/calculators/aspect_ratio.rb +58 -0
- data/lib/prawn/svg/calculators/document_sizing.rb +99 -0
- data/lib/prawn/svg/calculators/pixels.rb +21 -0
- data/lib/prawn/svg/document.rb +16 -43
- data/lib/prawn/svg/element.rb +71 -18
- data/lib/prawn/svg/extension.rb +3 -3
- data/lib/prawn/svg/interface.rb +85 -19
- data/lib/prawn/svg/parser/image.rb +9 -62
- data/lib/prawn/svg/parser/path.rb +19 -1
- data/lib/prawn/svg/parser/text.rb +17 -4
- data/lib/prawn/svg/parser.rb +53 -18
- data/lib/prawn/svg/url_loader.rb +34 -0
- data/lib/prawn/svg/version.rb +1 -1
- data/lib/prawn-svg.rb +4 -0
- data/prawn-svg.gemspec +7 -4
- data/spec/integration_spec.rb +83 -0
- data/spec/prawn/svg/calculators/aspect_ratio_spec.rb +95 -0
- data/spec/prawn/svg/calculators/document_sizing_spec.rb +128 -0
- data/spec/prawn/svg/document_spec.rb +21 -17
- data/spec/prawn/svg/element_spec.rb +1 -1
- data/spec/prawn/svg/interface_spec.rb +94 -0
- data/spec/prawn/svg/parser/path_spec.rb +89 -0
- data/spec/prawn/svg/parser/text_spec.rb +50 -1
- data/spec/prawn/svg/url_loader_spec.rb +46 -0
- data/spec/sample_images/mushroom-long.jpg +0 -0
- data/spec/sample_images/mushroom-wide.jpg +0 -0
- data/spec/sample_svg/cap_styles.svg +13 -0
- data/spec/sample_svg/display_none.svg +13 -0
- data/spec/sample_svg/gistfile1.svg +36 -0
- data/spec/sample_svg/hidden_paths.svg +6 -0
- data/spec/sample_svg/image01.svg +31 -31
- data/spec/sample_svg/negminy.svg +25 -0
- data/spec/sample_svg/no_width_or_height.svg +4 -0
- data/spec/sample_svg/path.svg +5 -0
- data/spec/sample_svg/pie_piece.svg +7 -0
- data/spec/sample_svg/preserve-space.svg +19 -0
- data/spec/sample_svg/viewbox.svg +4 -0
- data/spec/sample_svg/viewport.svg +23 -0
- data/spec/spec_helper.rb +7 -0
- metadata +85 -25
- data/spec/lib/path_spec.rb +0 -54
- data/spec/lib/svg_spec.rb +0 -47
- /data/spec/{lib → prawn/svg}/parser_spec.rb +0 -0
data/spec/sample_svg/image01.svg
CHANGED
@@ -18,113 +18,113 @@
|
|
18
18
|
<text y="25" font-size="12pt">wide image, aspect ratio meet</text>
|
19
19
|
|
20
20
|
<rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
21
|
-
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid" xlink:href="
|
21
|
+
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
22
22
|
|
23
23
|
<rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
24
|
-
<image y="200" width="150" height="100" xlink:href="
|
24
|
+
<image y="200" width="150" height="100" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
25
25
|
|
26
26
|
<rect y="350" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
27
|
-
<image y="350" width="100" height="150" xlink:href="
|
27
|
+
<image y="350" width="100" height="150" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
28
28
|
|
29
29
|
<rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
30
|
-
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="
|
30
|
+
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
31
31
|
|
32
32
|
<rect y="700" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
33
|
-
<image y="700" width="100" height="150" preserveAspectRatio="xMinYMin" xlink:href="
|
33
|
+
<image y="700" width="100" height="150" preserveAspectRatio="xMinYMin" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
34
34
|
|
35
35
|
<rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
36
|
-
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="
|
36
|
+
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
37
37
|
|
38
38
|
<rect y="1050" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
39
|
-
<image y="1050" width="100" height="150" preserveAspectRatio="xMaxYMax" xlink:href="
|
39
|
+
<image y="1050" width="100" height="150" preserveAspectRatio="xMaxYMax" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
40
40
|
</g>
|
41
41
|
|
42
42
|
<g transform="translate(250 0)">
|
43
43
|
<text y="25" font-size="12pt">wide image, aspect ratio slice</text>
|
44
44
|
|
45
45
|
<rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
46
|
-
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="
|
46
|
+
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
47
47
|
|
48
48
|
<rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
49
|
-
<image y="200" width="150" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="
|
49
|
+
<image y="200" width="150" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
50
50
|
|
51
51
|
<rect y="350" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
52
|
-
<image y="350" width="100" height="150" preserveAspectRatio="xMidYMid slice" xlink:href="
|
52
|
+
<image y="350" width="100" height="150" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
53
53
|
|
54
54
|
<rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
55
|
-
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin slice" xlink:href="
|
55
|
+
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
56
56
|
|
57
57
|
<rect y="700" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
58
|
-
<image y="700" width="100" height="150" preserveAspectRatio="xMinYMin slice" xlink:href="
|
58
|
+
<image y="700" width="100" height="150" preserveAspectRatio="xMinYMin slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
59
59
|
|
60
60
|
<rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
61
|
-
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax slice" xlink:href="
|
61
|
+
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
62
62
|
|
63
63
|
<rect y="1050" width="100" height="150" fill="none" stroke="blue" stroke-width="2"/>
|
64
|
-
<image y="1050" width="100" height="150" preserveAspectRatio="xMaxYMax slice" xlink:href="
|
64
|
+
<image y="1050" width="100" height="150" preserveAspectRatio="xMaxYMax slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg"></image>
|
65
65
|
</g>
|
66
66
|
|
67
67
|
<g transform="translate(450 0)">
|
68
68
|
<text y="25" font-size="12pt">long image, aspect ratio meet</text>
|
69
69
|
|
70
70
|
<rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
71
|
-
<image y="50" width="100" height="100" xlink:href="
|
71
|
+
<image y="50" width="100" height="100" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
72
72
|
|
73
73
|
<rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
74
|
-
<image y="200" width="150" height="100" xlink:href="
|
74
|
+
<image y="200" width="150" height="100" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
75
75
|
|
76
76
|
<rect y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
77
|
-
<image y="350" width="100" height="200" xlink:href="
|
77
|
+
<image y="350" width="100" height="200" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
78
78
|
|
79
79
|
<rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
80
|
-
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="
|
80
|
+
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
81
81
|
|
82
82
|
<rect y="700" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
83
|
-
<image y="700" width="100" height="200" preserveAspectRatio="xMinYMin" xlink:href="
|
83
|
+
<image y="700" width="100" height="200" preserveAspectRatio="xMinYMin" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
84
84
|
|
85
85
|
<rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
86
|
-
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="
|
86
|
+
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
87
87
|
|
88
88
|
<rect y="1050" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
89
|
-
<image y="1050" width="100" height="200" preserveAspectRatio="xMaxYMax" xlink:href="
|
89
|
+
<image y="1050" width="100" height="200" preserveAspectRatio="xMaxYMax" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
90
90
|
</g>
|
91
91
|
|
92
92
|
<g transform="translate(650 0)">
|
93
93
|
<text y="25" font-size="12pt">long image, aspect ratio slice</text>
|
94
94
|
|
95
95
|
<rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
96
|
-
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="
|
96
|
+
<image y="50" width="100" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
97
97
|
|
98
98
|
<rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
99
|
-
<image y="200" width="150" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="
|
99
|
+
<image y="200" width="150" height="100" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
100
100
|
|
101
101
|
<rect y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
102
|
-
<image y="350" width="100" height="200" preserveAspectRatio="xMidYMid slice" xlink:href="
|
102
|
+
<image y="350" width="100" height="200" preserveAspectRatio="xMidYMid slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
103
103
|
|
104
104
|
<rect y="550" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
105
|
-
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin slice" xlink:href="
|
105
|
+
<image y="550" width="150" height="100" preserveAspectRatio="xMinYMin slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
106
106
|
|
107
107
|
<rect y="700" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
108
|
-
<image y="700" width="100" height="200" preserveAspectRatio="xMinYMin slice" xlink:href="
|
108
|
+
<image y="700" width="100" height="200" preserveAspectRatio="xMinYMin slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
109
109
|
|
110
110
|
<rect y="900" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
111
|
-
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax slice" xlink:href="
|
111
|
+
<image y="900" width="150" height="100" preserveAspectRatio="xMaxYMax slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
112
112
|
|
113
113
|
<rect y="1050" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
114
|
-
<image y="1050" width="100" height="200" preserveAspectRatio="xMaxYMax slice" xlink:href="
|
114
|
+
<image y="1050" width="100" height="200" preserveAspectRatio="xMaxYMax slice" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
115
115
|
</g>
|
116
116
|
|
117
117
|
<g transform="translate(850 0)">
|
118
118
|
<text y="25" font-size="12pt">aspect ratio preservation disabled</text>
|
119
119
|
|
120
120
|
<rect y="50" width="100" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
121
|
-
<image y="50" width="100" height="100" preserveAspectRatio="none" xlink:href="
|
121
|
+
<image y="50" width="100" height="100" preserveAspectRatio="none" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
122
122
|
|
123
123
|
<rect y="200" width="150" height="100" fill="none" stroke="blue" stroke-width="2"/>
|
124
|
-
<image y="200" width="150" height="100" preserveAspectRatio="none" xlink:href="
|
124
|
+
<image y="200" width="150" height="100" preserveAspectRatio="none" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
125
125
|
|
126
126
|
<rect y="350" width="100" height="200" fill="none" stroke="blue" stroke-width="2"/>
|
127
|
-
<image y="350" width="100" height="200" preserveAspectRatio="none" xlink:href="
|
127
|
+
<image y="350" width="100" height="200" preserveAspectRatio="none" xlink:href="https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg"></image>
|
128
128
|
</g>
|
129
129
|
|
130
130
|
</svg>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<svg xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 -1329 4012.5722934428577 1964.1614245832113" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<defs id="MathJax_SVG_glyphs">
|
3
|
+
<path id="STIXWEBSIZE1-221A" stroke-width="10" d="M1089 1552l-562 -1847h-42l-231 751c-14 46 -30 68 -62 68c-19 0 -44 -8 -68 -27l-12 20l164 126h25l227 -737h4l500 1646h57Z"/>
|
4
|
+
<path id="STIXWEBMAINI-78" stroke-width="10" d="M243 355l12 -57c70 107 107 143 151 143c24 0 41 -15 41 -37c0 -21 -14 -36 -34 -36c-19 0 -28 17 -52 17c-18 0 -54 -44 -98 -121c0 -7 2 -21 8 -45l32 -134c7 -28 16 -41 30 -41c13 0 24 10 47 40c9 12 13 18 21 28l15 -9c-58 -90 -84 -114 -122 -114 c-32 0 -47 18 -59 68l-29 119l-88 -119c-44 -59 -64 -68 -95 -68s-50 16 -50 42c0 20 14 36 34 36c9 0 19 -4 32 -11c10 -6 20 -9 26 -9c11 0 30 19 51 49l82 116l-28 124c-14 60 -21 68 -46 68c-8 0 -20 -2 -39 -7l-18 -5l-3 16l11 4c61 22 94 29 117 29 c25 0 37 -18 51 -86Z"/>
|
5
|
+
<path id="STIXWEBMAIN-32" stroke-width="10" d="M474 137l-54 -137h-391v12l178 189c94 99 130 175 130 260c0 91 -54 141 -139 141c-72 0 -107 -32 -147 -130l-21 5c21 117 85 199 208 199c113 0 185 -77 185 -176c0 -79 -39 -154 -128 -248l-165 -176h234c42 0 63 11 96 67Z"/>
|
6
|
+
<path id="STIXWEBMAIN-2B" stroke-width="10" d="M636 220h-261v-261h-66v261h-261v66h261v261h66v-261h261v-66Z"/>
|
7
|
+
<path id="STIXWEBMAINI-79" stroke-width="10" d="M243 186l21 -110c85 141 122 213 122 257c0 14 -7 20 -26 32c-20 13 -26 23 -26 39c0 22 17 37 40 37c30 0 52 -25 52 -55c0 -57 -48 -167 -131 -305c-104 -172 -211 -287 -268 -287c-30 0 -51 17 -51 43c0 22 17 40 39 40c35 0 35 -28 61 -28c13 0 25 8 48 33 c18 19 63 78 71 91c6 12 10 24 10 35c0 40 -55 264 -82 332c-19 49 -37 64 -77 64c-11 0 -20 -1 -31 -4v17c11 2 22 4 32 6c20 4 53 10 107 18h4c15 0 68 -166 85 -255Z"/>
|
8
|
+
</defs>
|
9
|
+
<g transform="matrix(1 0 0 1 0 0)">
|
10
|
+
<rect x="0" y="-1329" width="4012" height="1964" stroke="green" fill="none" stroke-width="5" />
|
11
|
+
<g stroke="black" fill="black" stroke-width="0" transform="matrix(1 0 0 -1 0 0)">
|
12
|
+
<use href="#STIXWEBSIZE1-221A" x="0" y="-312" xlink:href="#STIXWEBSIZE1-221A"/>
|
13
|
+
<rect stroke="none" width="2950" height="60" x="1062" y="1190"/>
|
14
|
+
<g transform="translate(1062,0)">
|
15
|
+
<use href="#STIXWEBMAINI-78" xlink:href="#STIXWEBMAINI-78"/>
|
16
|
+
<use transform="scale(0.7071067811865476)" href="#STIXWEBMAIN-32" x="640" y="583" xlink:href="#STIXWEBMAIN-32"/>
|
17
|
+
<use href="#STIXWEBMAIN-2B" x="1132" y="0" xlink:href="#STIXWEBMAIN-2B"/>
|
18
|
+
<g transform="translate(2044,0)">
|
19
|
+
<use href="#STIXWEBMAINI-79" xlink:href="#STIXWEBMAINI-79"/>
|
20
|
+
<use transform="scale(0.7071067811865476)" href="#STIXWEBMAIN-32" x="634" y="583" xlink:href="#STIXWEBMAIN-32"/>
|
21
|
+
</g>
|
22
|
+
</g>
|
23
|
+
</g>
|
24
|
+
</g>
|
25
|
+
</svg>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1100" height="400">
|
2
|
+
<rect x="100" y="100" width="900" height="300" fill="none" stroke="blue" stroke-width="2" />
|
3
|
+
|
4
|
+
<path d="M200 200 L800 300 L800 200" stroke="green" stroke-width="10" fill="red" />
|
5
|
+
</svg>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" style="font-family:'lucida grande', 'lucida sans unicode', arial, helvetica, sans-serif;font-size:12px;" xmlns="http://www.w3.org/2000/svg" width="850" height="300">
|
2
|
+
<g transform="translate(10,10) scale(1 1)">
|
3
|
+
<path fill="#009ACB" d="M 414.97698492798247 39.00000234377684 A 113 113 0 1 1 311.39206002954353
|
4
|
+
197.10426559737175 L 415 152 A 0 0 0 1 0 415 152 Z" stroke="#FFFFFF" stroke-width="1" stroke-linejoin="round"
|
5
|
+
transform="translate(0,0)"></path>
|
6
|
+
</g>
|
7
|
+
</svg>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="500" height="500">
|
3
|
+
<text x="0" y="40" xml:space="preserve" font-size="30" letter-spacing="5">Text (Far away text)</text>
|
4
|
+
<text x="0" y="80" font-size="30" letter-spacing="5">Text (Close text)</text>
|
5
|
+
<text x="0" y="120" xml:space="preserve" font-size="30" letter-spacing="5">
|
6
|
+
Text
|
7
|
+
With
|
8
|
+
Newlines
|
9
|
+
And
|
10
|
+
Preserve
|
11
|
+
</text>
|
12
|
+
<text x="0" y="160" font-size="30" letter-spacing="5">
|
13
|
+
Text
|
14
|
+
With
|
15
|
+
Newlines
|
16
|
+
No
|
17
|
+
Preserve
|
18
|
+
</text>
|
19
|
+
</svg>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300" viewBox="-100 -100 100 100" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<rect x="-98" y="-98" width="96" height="96" fill="blue" stroke="red" />
|
3
|
+
<line x1="-1000" y1="-1000" x2="1000" y2="1000" stroke="green" />
|
4
|
+
</svg>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
3
|
+
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg width="100px" height="200px" version="1.1"
|
5
|
+
viewBox="0 0 1500 1000" preserveAspectRatio="none"
|
6
|
+
xmlns="http://www.w3.org/2000/svg">
|
7
|
+
<desc>Example ViewBox - uses the viewBox
|
8
|
+
attribute to automatically create an initial user coordinate
|
9
|
+
system which causes the graphic to scale to fit into the
|
10
|
+
viewport no matter what size the viewport is.</desc>
|
11
|
+
<!-- This rectangle goes from (0,0) to (1500,1000) in user space.
|
12
|
+
Because of the viewBox attribute above,
|
13
|
+
the rectangle will end up filling the entire area
|
14
|
+
reserved for the SVG content. -->
|
15
|
+
<rect x="0" y="0" width="1500" height="1000"
|
16
|
+
fill="yellow" stroke="blue" stroke-width="12" />
|
17
|
+
<!-- A large, red triangle -->
|
18
|
+
<path fill="red" d="M 750,100 L 250,900 L 1250,900 z"/>
|
19
|
+
<!-- A text string that spans most of the viewport -->
|
20
|
+
<text x="100" y="600" font-size="200" font-family="Verdana" >
|
21
|
+
Stretch to fit
|
22
|
+
</text>
|
23
|
+
</svg>
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,13 @@ Bundler.require(:default, :development)
|
|
6
6
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
7
7
|
|
8
8
|
RSpec.configure do |config|
|
9
|
+
config.mock_with :rspec do |c|
|
10
|
+
c.syntax = [:should, :expect]
|
11
|
+
end
|
12
|
+
|
13
|
+
config.expect_with :rspec do |c|
|
14
|
+
c.syntax = [:should, :expect]
|
15
|
+
end
|
9
16
|
end
|
10
17
|
|
11
18
|
Prawn::Svg::Font.load_external_fonts(Prawn::Document.new.font_families)
|
metadata
CHANGED
@@ -1,70 +1,95 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-svg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Nesbitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prawn
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.8.4
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 0.8.4
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: css_parser
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.3'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.3'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: rspec
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
30
50
|
requirements:
|
31
|
-
- - ~>
|
51
|
+
- - "~>"
|
32
52
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
53
|
+
version: '3.0'
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
37
57
|
requirements:
|
38
|
-
- - ~>
|
58
|
+
- - "~>"
|
39
59
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
60
|
+
version: '3.0'
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: rake
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
44
64
|
requirements:
|
45
|
-
- -
|
65
|
+
- - "~>"
|
46
66
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
67
|
+
version: '10.1'
|
48
68
|
type: :development
|
49
69
|
prerelease: false
|
50
70
|
version_requirements: !ruby/object:Gem::Requirement
|
51
71
|
requirements:
|
52
|
-
- -
|
72
|
+
- - "~>"
|
53
73
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
description: SVG
|
74
|
+
version: '10.1'
|
75
|
+
description: This gem allows you to render SVG directly into a PDF using the 'prawn'
|
76
|
+
gem. Since PDF is vector-based, you'll get nice scaled graphics if you use SVG
|
77
|
+
instead of an image.
|
56
78
|
email: roger@seriousorange.com
|
57
79
|
executables: []
|
58
80
|
extensions: []
|
59
81
|
extra_rdoc_files: []
|
60
82
|
files:
|
61
|
-
- .gitignore
|
62
|
-
- .rspec
|
83
|
+
- ".gitignore"
|
84
|
+
- ".rspec"
|
63
85
|
- Gemfile
|
64
86
|
- LICENSE
|
65
87
|
- README.md
|
66
88
|
- Rakefile
|
67
89
|
- lib/prawn-svg.rb
|
90
|
+
- lib/prawn/svg/calculators/aspect_ratio.rb
|
91
|
+
- lib/prawn/svg/calculators/document_sizing.rb
|
92
|
+
- lib/prawn/svg/calculators/pixels.rb
|
68
93
|
- lib/prawn/svg/color.rb
|
69
94
|
- lib/prawn/svg/document.rb
|
70
95
|
- lib/prawn/svg/element.rb
|
@@ -75,26 +100,37 @@ files:
|
|
75
100
|
- lib/prawn/svg/parser/image.rb
|
76
101
|
- lib/prawn/svg/parser/path.rb
|
77
102
|
- lib/prawn/svg/parser/text.rb
|
103
|
+
- lib/prawn/svg/url_loader.rb
|
78
104
|
- lib/prawn/svg/version.rb
|
79
105
|
- prawn-svg.gemspec
|
80
|
-
- spec/
|
81
|
-
- spec/
|
82
|
-
- spec/
|
106
|
+
- spec/integration_spec.rb
|
107
|
+
- spec/prawn/svg/calculators/aspect_ratio_spec.rb
|
108
|
+
- spec/prawn/svg/calculators/document_sizing_spec.rb
|
83
109
|
- spec/prawn/svg/color_spec.rb
|
84
110
|
- spec/prawn/svg/document_spec.rb
|
85
111
|
- spec/prawn/svg/element_spec.rb
|
86
112
|
- spec/prawn/svg/font_spec.rb
|
113
|
+
- spec/prawn/svg/interface_spec.rb
|
114
|
+
- spec/prawn/svg/parser/path_spec.rb
|
87
115
|
- spec/prawn/svg/parser/text_spec.rb
|
116
|
+
- spec/prawn/svg/parser_spec.rb
|
117
|
+
- spec/prawn/svg/url_loader_spec.rb
|
118
|
+
- spec/sample_images/mushroom-long.jpg
|
119
|
+
- spec/sample_images/mushroom-wide.jpg
|
88
120
|
- spec/sample_output/directory
|
89
121
|
- spec/sample_svg/arcs01.svg
|
122
|
+
- spec/sample_svg/cap_styles.svg
|
90
123
|
- spec/sample_svg/circle01.svg
|
91
124
|
- spec/sample_svg/clip_path.svg
|
92
125
|
- spec/sample_svg/close_path.svg
|
93
126
|
- spec/sample_svg/cubic01.svg
|
94
127
|
- spec/sample_svg/cubic01a.svg
|
95
128
|
- spec/sample_svg/cubic02.svg
|
129
|
+
- spec/sample_svg/display_none.svg
|
96
130
|
- spec/sample_svg/ellipse01.svg
|
131
|
+
- spec/sample_svg/gistfile1.svg
|
97
132
|
- spec/sample_svg/google_charts.svg
|
133
|
+
- spec/sample_svg/hidden_paths.svg
|
98
134
|
- spec/sample_svg/highcharts.svg
|
99
135
|
- spec/sample_svg/image01.svg
|
100
136
|
- spec/sample_svg/image02_base64.svg
|
@@ -102,10 +138,15 @@ files:
|
|
102
138
|
- spec/sample_svg/maths.svg
|
103
139
|
- spec/sample_svg/matrix_transform.svg
|
104
140
|
- spec/sample_svg/matrix_transform_3.svg
|
141
|
+
- spec/sample_svg/negminy.svg
|
142
|
+
- spec/sample_svg/no_width_or_height.svg
|
105
143
|
- spec/sample_svg/omnigraffle.svg
|
106
144
|
- spec/sample_svg/opacity01.svg
|
145
|
+
- spec/sample_svg/path.svg
|
146
|
+
- spec/sample_svg/pie_piece.svg
|
107
147
|
- spec/sample_svg/polygon01.svg
|
108
148
|
- spec/sample_svg/polyline01.svg
|
149
|
+
- spec/sample_svg/preserve-space.svg
|
109
150
|
- spec/sample_svg/quad01.svg
|
110
151
|
- spec/sample_svg/rect01.svg
|
111
152
|
- spec/sample_svg/rect02.svg
|
@@ -120,6 +161,8 @@ files:
|
|
120
161
|
- spec/sample_svg/tspan03.svg
|
121
162
|
- spec/sample_svg/tspan04.svg
|
122
163
|
- spec/sample_svg/use.svg
|
164
|
+
- spec/sample_svg/viewbox.svg
|
165
|
+
- spec/sample_svg/viewport.svg
|
123
166
|
- spec/spec_helper.rb
|
124
167
|
homepage: http://github.com/mogest/prawn-svg
|
125
168
|
licenses:
|
@@ -131,39 +174,49 @@ require_paths:
|
|
131
174
|
- lib
|
132
175
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
176
|
requirements:
|
134
|
-
- -
|
177
|
+
- - ">="
|
135
178
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
179
|
+
version: 1.9.3
|
137
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
181
|
requirements:
|
139
|
-
- -
|
182
|
+
- - ">="
|
140
183
|
- !ruby/object:Gem::Version
|
141
184
|
version: '0'
|
142
185
|
requirements: []
|
143
186
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
187
|
+
rubygems_version: 2.2.2
|
145
188
|
signing_key:
|
146
189
|
specification_version: 4
|
147
190
|
summary: SVG renderer for Prawn PDF library
|
148
191
|
test_files:
|
149
|
-
- spec/
|
150
|
-
- spec/
|
151
|
-
- spec/
|
192
|
+
- spec/integration_spec.rb
|
193
|
+
- spec/prawn/svg/calculators/aspect_ratio_spec.rb
|
194
|
+
- spec/prawn/svg/calculators/document_sizing_spec.rb
|
152
195
|
- spec/prawn/svg/color_spec.rb
|
153
196
|
- spec/prawn/svg/document_spec.rb
|
154
197
|
- spec/prawn/svg/element_spec.rb
|
155
198
|
- spec/prawn/svg/font_spec.rb
|
199
|
+
- spec/prawn/svg/interface_spec.rb
|
200
|
+
- spec/prawn/svg/parser/path_spec.rb
|
156
201
|
- spec/prawn/svg/parser/text_spec.rb
|
202
|
+
- spec/prawn/svg/parser_spec.rb
|
203
|
+
- spec/prawn/svg/url_loader_spec.rb
|
204
|
+
- spec/sample_images/mushroom-long.jpg
|
205
|
+
- spec/sample_images/mushroom-wide.jpg
|
157
206
|
- spec/sample_output/directory
|
158
207
|
- spec/sample_svg/arcs01.svg
|
208
|
+
- spec/sample_svg/cap_styles.svg
|
159
209
|
- spec/sample_svg/circle01.svg
|
160
210
|
- spec/sample_svg/clip_path.svg
|
161
211
|
- spec/sample_svg/close_path.svg
|
162
212
|
- spec/sample_svg/cubic01.svg
|
163
213
|
- spec/sample_svg/cubic01a.svg
|
164
214
|
- spec/sample_svg/cubic02.svg
|
215
|
+
- spec/sample_svg/display_none.svg
|
165
216
|
- spec/sample_svg/ellipse01.svg
|
217
|
+
- spec/sample_svg/gistfile1.svg
|
166
218
|
- spec/sample_svg/google_charts.svg
|
219
|
+
- spec/sample_svg/hidden_paths.svg
|
167
220
|
- spec/sample_svg/highcharts.svg
|
168
221
|
- spec/sample_svg/image01.svg
|
169
222
|
- spec/sample_svg/image02_base64.svg
|
@@ -171,10 +224,15 @@ test_files:
|
|
171
224
|
- spec/sample_svg/maths.svg
|
172
225
|
- spec/sample_svg/matrix_transform.svg
|
173
226
|
- spec/sample_svg/matrix_transform_3.svg
|
227
|
+
- spec/sample_svg/negminy.svg
|
228
|
+
- spec/sample_svg/no_width_or_height.svg
|
174
229
|
- spec/sample_svg/omnigraffle.svg
|
175
230
|
- spec/sample_svg/opacity01.svg
|
231
|
+
- spec/sample_svg/path.svg
|
232
|
+
- spec/sample_svg/pie_piece.svg
|
176
233
|
- spec/sample_svg/polygon01.svg
|
177
234
|
- spec/sample_svg/polyline01.svg
|
235
|
+
- spec/sample_svg/preserve-space.svg
|
178
236
|
- spec/sample_svg/quad01.svg
|
179
237
|
- spec/sample_svg/rect01.svg
|
180
238
|
- spec/sample_svg/rect02.svg
|
@@ -189,4 +247,6 @@ test_files:
|
|
189
247
|
- spec/sample_svg/tspan03.svg
|
190
248
|
- spec/sample_svg/tspan04.svg
|
191
249
|
- spec/sample_svg/use.svg
|
250
|
+
- spec/sample_svg/viewbox.svg
|
251
|
+
- spec/sample_svg/viewport.svg
|
192
252
|
- spec/spec_helper.rb
|
data/spec/lib/path_spec.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Prawn::Svg::Parser::Path do
|
4
|
-
before :each do
|
5
|
-
@path = Prawn::Svg::Parser::Path.new
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "command parsing" do
|
9
|
-
it "correctly parses a valid path" do
|
10
|
-
calls = []
|
11
|
-
@path.stub(:run_path_command) {|*args| calls << args}
|
12
|
-
@path.parse("A12.34 -56.78 89B4 5 12-34 -.5.7+3 2.3e3 4e4 4e+4 c31,-2e-5C 6,7 T QX 0 Z")
|
13
|
-
|
14
|
-
calls.should == [
|
15
|
-
["A", [12.34, -56.78, 89]],
|
16
|
-
["B", [4, 5, 12, -34, -0.5, 0.7, 3, 2.3e3, 4e4, 4e4]],
|
17
|
-
["c", [31, -2e-5]],
|
18
|
-
["C", [6, 7]],
|
19
|
-
["T", []],
|
20
|
-
["Q", []],
|
21
|
-
["X", [0]],
|
22
|
-
["Z", []]
|
23
|
-
]
|
24
|
-
end
|
25
|
-
|
26
|
-
it "treats subsequent points to m/M command as relative/absolute depending on command" do
|
27
|
-
|
28
|
-
[
|
29
|
-
["M", [1,2,3,4]],
|
30
|
-
["L", [3,4]],
|
31
|
-
["m", [5,6,7,8]],
|
32
|
-
["l", [7,8]]
|
33
|
-
].each do |args|
|
34
|
-
@path.should_receive(:run_path_command).with(*args).and_call_original
|
35
|
-
end
|
36
|
-
|
37
|
-
@path.parse("M 1,2 3,4 m 5,6 7,8")
|
38
|
-
end
|
39
|
-
|
40
|
-
it "correctly parses an empty path" do
|
41
|
-
@path.should_not_receive(:run_path_command)
|
42
|
-
@path.parse("").should == []
|
43
|
-
@path.parse(" ").should == []
|
44
|
-
end
|
45
|
-
|
46
|
-
it "raises on invalid characters in the path" do
|
47
|
-
lambda {@path.parse("M 10 % 20")}.should raise_error(Prawn::Svg::Parser::Path::InvalidError)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "raises on numerical data before a command letter" do
|
51
|
-
lambda {@path.parse("10 P")}.should raise_error(Prawn::Svg::Parser::Path::InvalidError)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|