prawn-svg 0.35.1 → 0.36.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -5
  3. data/README.md +4 -7
  4. data/lib/prawn/svg/attributes/opacity.rb +23 -8
  5. data/lib/prawn/svg/attributes/stroke.rb +7 -9
  6. data/lib/prawn/svg/attributes/transform.rb +1 -1
  7. data/lib/prawn/svg/calculators/pixels.rb +9 -22
  8. data/lib/prawn/svg/color.rb +58 -59
  9. data/lib/prawn/svg/css/font_parser.rb +46 -0
  10. data/lib/prawn/svg/document.rb +5 -1
  11. data/lib/prawn/svg/elements/base.rb +22 -30
  12. data/lib/prawn/svg/elements/gradient.rb +99 -74
  13. data/lib/prawn/svg/elements/line.rb +1 -1
  14. data/lib/prawn/svg/elements/marker.rb +2 -0
  15. data/lib/prawn/svg/elements/root.rb +1 -1
  16. data/lib/prawn/svg/elements/text_component.rb +3 -3
  17. data/lib/prawn/svg/funciri.rb +14 -0
  18. data/lib/prawn/svg/gradient_renderer.rb +313 -0
  19. data/lib/prawn/svg/length.rb +43 -0
  20. data/lib/prawn/svg/paint.rb +67 -0
  21. data/lib/prawn/svg/percentage.rb +24 -0
  22. data/lib/prawn/svg/properties.rb +208 -104
  23. data/lib/prawn/svg/renderer.rb +5 -0
  24. data/lib/prawn/svg/state.rb +5 -3
  25. data/lib/prawn/svg/transform_parser.rb +19 -13
  26. data/lib/prawn/svg/transform_utils.rb +37 -0
  27. data/lib/prawn/svg/version.rb +1 -1
  28. data/lib/prawn-svg.rb +7 -3
  29. data/prawn-svg.gemspec +4 -4
  30. data/spec/prawn/svg/attributes/opacity_spec.rb +27 -20
  31. data/spec/prawn/svg/attributes/transform_spec.rb +5 -2
  32. data/spec/prawn/svg/calculators/pixels_spec.rb +1 -2
  33. data/spec/prawn/svg/color_spec.rb +22 -52
  34. data/spec/prawn/svg/elements/base_spec.rb +9 -10
  35. data/spec/prawn/svg/elements/gradient_spec.rb +92 -36
  36. data/spec/prawn/svg/elements/marker_spec.rb +13 -15
  37. data/spec/prawn/svg/funciri_spec.rb +59 -0
  38. data/spec/prawn/svg/length_spec.rb +89 -0
  39. data/spec/prawn/svg/paint_spec.rb +96 -0
  40. data/spec/prawn/svg/pathable_spec.rb +3 -3
  41. data/spec/prawn/svg/pdfmatrix_spec.rb +60 -0
  42. data/spec/prawn/svg/percentage_spec.rb +60 -0
  43. data/spec/prawn/svg/properties_spec.rb +124 -107
  44. data/spec/prawn/svg/transform_parser_spec.rb +13 -13
  45. data/spec/sample_svg/gradient_stress_test.svg +115 -0
  46. metadata +17 -5
  47. data/lib/prawn/svg/extensions/additional_gradient_transforms.rb +0 -23
@@ -0,0 +1,115 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Laag_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 260 173.33">
3
+ <defs>
4
+ <linearGradient id="linear-base">
5
+ <stop offset="0" stop-color="white"/>
6
+ <stop offset="0.01" stop-color="red"/>
7
+ <stop offset="0.49" stop-color="orange"/>
8
+ <stop offset=".5" stop-color="white"/>
9
+ <stop offset=".51" stop-color="aqua"/>
10
+ <stop offset="0.99" stop-color="blue"/>
11
+ <stop offset="1" stop-color="white"/>
12
+ </linearGradient>
13
+
14
+ <linearGradient id="transparent-linear-base">
15
+ <stop offset="0" stop-opacity="0" stop-color="white"/>
16
+ <stop offset="0.01" stop-opacity="0.01" stop-color="red"/>
17
+ <stop offset="0.49" stop-opacity="0.49" stop-color="orange"/>
18
+ <stop offset=".5" stop-opacity=".5" stop-color="white"/>
19
+ <stop offset=".51" stop-opacity=".51" stop-color="aqua"/>
20
+ <stop offset="0.99" stop-opacity="0.99" stop-color="blue"/>
21
+ <stop offset="1" stop-opacity="1" stop-color="white"/>
22
+ </linearGradient>
23
+
24
+ <linearGradient id="linear-1" href="#linear-base" gradientTransform="translate(0.2 0)" x1="0" y1="0" x2="1" y2="0" />
25
+ <linearGradient id="linear-2" href="#linear-base" x1="120" y1="20" x2="120" y2="0" gradientUnits="userSpaceOnUse" />
26
+ <linearGradient id="linear-3" href="#linear-base" gradientTransform="scale(0.5)" spreadMethod="repeat" />
27
+ <linearGradient id="linear-4" href="#linear-base" gradientTransform="scale(0.5)" spreadMethod="reflect" />
28
+ <linearGradient id="linear-5" href="#linear-base" gradientTransform="rotate(10)" />
29
+ <linearGradient id="linear-6" href="#linear-base" x1="0" y1="200" x2="1" y2="200" gradientTransform="translate(29023.21 20) rotate(-90) scale(20 -167.5)" gradientUnits="userSpaceOnUse" />
30
+ <linearGradient id="linear-7" href="#linear-base" gradientTransform="skewX(10)" />
31
+ <linearGradient id="linear-8" href="#linear-base" gradientTransform="skewY(10) rotate(90)" />
32
+ <linearGradient id="linear-9" href="#linear-base" x1="0" y1="0" x2="20" y2="0" gradientUnits="userSpaceOnUse" spreadMethod="reflect" />
33
+ <linearGradient id="linear-10" href="#linear-base" x1="210" y1="0" x2="230" y2="0" gradientUnits="userSpaceOnUse" spreadMethod="reflect" />
34
+
35
+ <linearGradient id="transparent-linear-1" href="#transparent-linear-base" gradientTransform="translate(0.2 0)" x1="0" y1="0" x2="1" y2="0" />
36
+ <linearGradient id="transparent-linear-2" href="#transparent-linear-base" x1="120" y1="50" x2="120" y2="30" gradientUnits="userSpaceOnUse" />
37
+ <linearGradient id="transparent-linear-3" href="#transparent-linear-base" gradientTransform="scale(0.5)" spreadMethod="repeat" />
38
+ <linearGradient id="transparent-linear-4" href="#transparent-linear-base" gradientTransform="scale(0.5)" spreadMethod="reflect" />
39
+ <linearGradient id="transparent-linear-5" href="#transparent-linear-base" gradientTransform="rotate(10)" />
40
+ <linearGradient id="transparent-linear-6" href="#transparent-linear-base" x1="0" y1="200" x2="1" y2="200" gradientTransform="translate(29023.21 50) rotate(-90) scale(20 -167.5)" gradientUnits="userSpaceOnUse" />
41
+ <linearGradient id="transparent-linear-7" href="#transparent-linear-base" gradientTransform="skewX(10)" />
42
+ <linearGradient id="transparent-linear-8" href="#transparent-linear-base" gradientTransform="skewY(10) rotate(90)" />
43
+
44
+ <radialGradient id="radial-base">
45
+ <stop offset="25%" stop-color="red"/>
46
+ <stop offset="49%" stop-color="orange"/>
47
+ <stop offset="50%" stop-color="white"/>
48
+ <stop offset="51%" stop-color="aqua"/>
49
+ <stop offset="75%" stop-color="blue"/>
50
+ </radialGradient>
51
+
52
+ <radialGradient id="transparent-radial-base">
53
+ <stop offset="25%" stop-opacity="0.01" stop-color="red"/>
54
+ <stop offset="49%" stop-opacity="0.49" stop-color="orange"/>
55
+ <stop offset="50%" stop-opacity=".5" stop-color="white"/>
56
+ <stop offset="51%" stop-opacity=".51" stop-color="aqua"/>
57
+ <stop offset="75%" stop-opacity="0.99" stop-color="blue"/>
58
+ </radialGradient>
59
+
60
+ <radialGradient id="radial-1" href="#radial-base" cx="0.2" fx="0.6" r="50%" gradientTransform="scale(1 0.5)" spreadMethod="repeat" />
61
+ <radialGradient id="radial-2" href="#radial-base" cx="0.2" fx="0.6" spreadMethod="reflect" />
62
+ <radialGradient id="radial-3" href="#radial-base" gradientUnits="userSpaceOnUse" cx="130" cy="70" r="5" />
63
+
64
+ <radialGradient id="transparent-radial-1" href="#transparent-radial-base" cx="0.2" fx="0.6" r="50%" gradientTransform="scale(1 0.5)" spreadMethod="repeat" />
65
+ <radialGradient id="transparent-radial-2" href="#transparent-radial-base" cx="0.2" fx="0.6" spreadMethod="reflect" />
66
+ </defs>
67
+
68
+ <rect fill="#0f1941" width="260" height="173.33"/>
69
+
70
+ <g>
71
+ <rect fill="url(#linear-base)" width="20" height="20" />
72
+ <rect fill="url(#linear-1)" x="30" y="0" width="20" height="20" />
73
+ <rect fill="url(#linear-2)" x="60" y="0" width="20" height="20"/>
74
+ <rect fill="url(#linear-3)" x="90" y="0" width="20" height="20"/>
75
+ <rect fill="url(#linear-4)" x="120" y="0" width="20" height="20"/>
76
+ <rect fill="url(#linear-5)" x="150" y="0" width="20" height="20"/>
77
+ <rect fill="url(#linear-6)" x="180" y="0" width="20" height="20"/>
78
+ <rect fill="url(#linear-7)" x="210" y="0" width="20" height="20"/>
79
+ <rect fill="url(#linear-8)" x="240" y="0" width="20" height="20"/>
80
+ <rect fill="url(#linear-9)" x="210" y="60" width="20" height="20"/>
81
+ <rect fill="url(#linear-10)" x="180" y="60" width="20" height="20"/>
82
+ </g>
83
+
84
+ <g>
85
+ <rect fill="url(#transparent-linear-base)" y="30" width="20" height="20" />
86
+ <rect fill="url(#transparent-linear-1)" x="30" y="30" width="20" height="20" />
87
+ <rect fill="url(#transparent-linear-2)" x="60" y="30" width="20" height="20"/>
88
+ <rect fill="url(#transparent-linear-3)" x="90" y="30" width="20" height="20"/>
89
+ <rect fill="url(#transparent-linear-4)" x="120" y="30" width="20" height="20"/>
90
+ <rect fill="url(#transparent-linear-5)" x="150" y="30" width="20" height="20"/>
91
+ <rect fill="url(#transparent-linear-6)" x="180" y="30" width="20" height="20"/>
92
+ <rect fill="url(#transparent-linear-7)" x="210" y="30" width="20" height="20"/>
93
+ <rect fill="url(#transparent-linear-8)" x="240" y="30" width="20" height="20"/>
94
+
95
+ <rect fill="url(#transparent-linear-7)" x="120" y="30" width="20" height="20" transform="rotate(45)" />
96
+ </g>
97
+
98
+ <g>
99
+ <rect fill="url(#radial-base)" x="0" y="60" width="20" height="20" />
100
+ <rect fill="url(#radial-base)" x="30" y="60" width="10" height="20" />
101
+ <rect fill="url(#radial-base)" x="60" y="60" width="20" height="10" />
102
+ <rect fill="url(#radial-1)" x="90" y="60" width="20" height="20" />
103
+ <rect fill="url(#radial-2)" x="120" y="60" width="20" height="20" />
104
+
105
+ <rect fill="url(#radial-3)" x="120" y="60" width="20" height="20" transform="rotate(45)" />
106
+ </g>
107
+
108
+ <g>
109
+ <rect fill="url(#transparent-radial-base)" x="0" y="90" width="20" height="20" />
110
+ <rect fill="url(#transparent-radial-base)" x="30" y="90" width="10" height="20" />
111
+ <rect fill="url(#transparent-radial-base)" x="60" y="90" width="20" height="10" />
112
+ <rect fill="url(#transparent-radial-1)" x="90" y="90" width="10" height="20" />
113
+ <rect fill="url(#transparent-radial-2)" x="120" y="90" width="20" height="10" />
114
+ </g>
115
+ </svg>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prawn-svg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.1
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mog Nesbitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-17 00:00:00.000000000 Z
11
+ date: 2025-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: css_parser
@@ -64,7 +64,7 @@ dependencies:
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: 3.2.0
67
+ version: 3.3.9
68
68
  - - "<"
69
69
  - !ruby/object:Gem::Version
70
70
  version: '4'
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: 3.2.0
77
+ version: 3.3.9
78
78
  - - "<"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '4'
@@ -110,6 +110,7 @@ files:
110
110
  - lib/prawn/svg/calculators/pixels.rb
111
111
  - lib/prawn/svg/color.rb
112
112
  - lib/prawn/svg/css/font_family_parser.rb
113
+ - lib/prawn/svg/css/font_parser.rb
113
114
  - lib/prawn/svg/css/selector_parser.rb
114
115
  - lib/prawn/svg/css/stylesheets.rb
115
116
  - lib/prawn/svg/css/values_parser.rb
@@ -137,19 +138,24 @@ files:
137
138
  - lib/prawn/svg/elements/use.rb
138
139
  - lib/prawn/svg/elements/viewport.rb
139
140
  - lib/prawn/svg/extension.rb
140
- - lib/prawn/svg/extensions/additional_gradient_transforms.rb
141
141
  - lib/prawn/svg/font.rb
142
142
  - lib/prawn/svg/font_registry.rb
143
+ - lib/prawn/svg/funciri.rb
144
+ - lib/prawn/svg/gradient_renderer.rb
143
145
  - lib/prawn/svg/gradients.rb
144
146
  - lib/prawn/svg/interface.rb
147
+ - lib/prawn/svg/length.rb
145
148
  - lib/prawn/svg/loaders/data.rb
146
149
  - lib/prawn/svg/loaders/file.rb
147
150
  - lib/prawn/svg/loaders/web.rb
151
+ - lib/prawn/svg/paint.rb
148
152
  - lib/prawn/svg/pathable.rb
153
+ - lib/prawn/svg/percentage.rb
149
154
  - lib/prawn/svg/properties.rb
150
155
  - lib/prawn/svg/renderer.rb
151
156
  - lib/prawn/svg/state.rb
152
157
  - lib/prawn/svg/transform_parser.rb
158
+ - lib/prawn/svg/transform_utils.rb
153
159
  - lib/prawn/svg/ttf.rb
154
160
  - lib/prawn/svg/url_loader.rb
155
161
  - lib/prawn/svg/version.rb
@@ -177,11 +183,16 @@ files:
177
183
  - spec/prawn/svg/elements/text_spec.rb
178
184
  - spec/prawn/svg/font_registry_spec.rb
179
185
  - spec/prawn/svg/font_spec.rb
186
+ - spec/prawn/svg/funciri_spec.rb
180
187
  - spec/prawn/svg/interface_spec.rb
188
+ - spec/prawn/svg/length_spec.rb
181
189
  - spec/prawn/svg/loaders/data_spec.rb
182
190
  - spec/prawn/svg/loaders/file_spec.rb
183
191
  - spec/prawn/svg/loaders/web_spec.rb
192
+ - spec/prawn/svg/paint_spec.rb
184
193
  - spec/prawn/svg/pathable_spec.rb
194
+ - spec/prawn/svg/pdfmatrix_spec.rb
195
+ - spec/prawn/svg/percentage_spec.rb
185
196
  - spec/prawn/svg/properties_spec.rb
186
197
  - spec/prawn/svg/transform_parser_spec.rb
187
198
  - spec/prawn/svg/ttf_spec.rb
@@ -205,6 +216,7 @@ files:
205
216
  - spec/sample_svg/ellipse01.svg
206
217
  - spec/sample_svg/gistfile1.svg
207
218
  - spec/sample_svg/google_charts.svg
219
+ - spec/sample_svg/gradient_stress_test.svg
208
220
  - spec/sample_svg/gradient_transform.svg
209
221
  - spec/sample_svg/gradients-cmyk.svg
210
222
  - spec/sample_svg/gradients.svg
@@ -1,23 +0,0 @@
1
- module Prawn::SVG::Extensions
2
- module AdditionalGradientTransforms
3
- def gradient_coordinates(gradient)
4
- # As of Prawn 2.2.0, apply_transformations is used as purely a boolean.
5
- #
6
- # Here we're using it to optionally pass in a 6-tuple transformation matrix that gets applied to the
7
- # gradient. This should be added to Prawn properly, and then this monkey patch will not be necessary.
8
-
9
- if gradient.apply_transformations.is_a?(Array)
10
- x1, y1, x2, y2, transformation = super
11
- a, b, c, d, e, f = transformation
12
- na, nb, nc, nd, ne, nf = gradient.apply_transformations
13
-
14
- matrix = Matrix[[a, c, e], [b, d, f], [0, 0, 1]] * Matrix[[na, nc, ne], [nb, nd, nf], [0, 0, 1]]
15
- new_transformation = matrix.to_a[0..1].transpose.flatten
16
-
17
- [x1, y1, x2, y2, new_transformation]
18
- else
19
- super
20
- end
21
- end
22
- end
23
- end