prawn 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/prawn/document/bounding_box.rb +213 -141
  4. data/lib/prawn/document/column_box.rb +61 -26
  5. data/lib/prawn/document/internals.rb +25 -16
  6. data/lib/prawn/document/span.rb +20 -18
  7. data/lib/prawn/document.rb +257 -171
  8. data/lib/prawn/encoding.rb +2 -5
  9. data/lib/prawn/errors.rb +23 -34
  10. data/lib/prawn/font.rb +248 -135
  11. data/lib/prawn/font_metric_cache.rb +11 -10
  12. data/lib/prawn/fonts/afm.rb +85 -45
  13. data/lib/prawn/fonts/dfont.rb +7 -1
  14. data/lib/prawn/fonts/otf.rb +4 -1
  15. data/lib/prawn/fonts/to_unicode_cmap.rb +151 -0
  16. data/lib/prawn/fonts/ttc.rb +7 -2
  17. data/lib/prawn/fonts/ttf.rb +305 -93
  18. data/lib/prawn/fonts.rb +14 -0
  19. data/lib/prawn/graphics/blend_mode.rb +25 -28
  20. data/lib/prawn/graphics/cap_style.rb +9 -12
  21. data/lib/prawn/graphics/color.rb +57 -34
  22. data/lib/prawn/graphics/dash.rb +45 -42
  23. data/lib/prawn/graphics/join_style.rb +17 -11
  24. data/lib/prawn/graphics/patterns.rb +190 -69
  25. data/lib/prawn/graphics/transformation.rb +48 -41
  26. data/lib/prawn/graphics/transparency.rb +16 -40
  27. data/lib/prawn/graphics.rb +363 -253
  28. data/lib/prawn/grid.rb +184 -57
  29. data/lib/prawn/image_handler.rb +27 -10
  30. data/lib/prawn/images/image.rb +8 -10
  31. data/lib/prawn/images/jpg.rb +42 -19
  32. data/lib/prawn/images/png.rb +92 -41
  33. data/lib/prawn/images.rb +44 -57
  34. data/lib/prawn/measurement_extensions.rb +39 -8
  35. data/lib/prawn/measurements.rb +60 -5
  36. data/lib/prawn/outline.rb +114 -108
  37. data/lib/prawn/repeater.rb +51 -35
  38. data/lib/prawn/security/arcfour.rb +4 -4
  39. data/lib/prawn/security.rb +75 -70
  40. data/lib/prawn/soft_mask.rb +42 -30
  41. data/lib/prawn/stamp.rb +38 -42
  42. data/lib/prawn/text/box.rb +146 -96
  43. data/lib/prawn/text/formatted/arranger.rb +87 -26
  44. data/lib/prawn/text/formatted/box.rb +221 -150
  45. data/lib/prawn/text/formatted/fragment.rb +130 -14
  46. data/lib/prawn/text/formatted/line_wrap.rb +33 -24
  47. data/lib/prawn/text/formatted/parser.rb +112 -72
  48. data/lib/prawn/text/formatted/wrap.rb +12 -17
  49. data/lib/prawn/text/formatted.rb +75 -0
  50. data/lib/prawn/text.rb +441 -196
  51. data/lib/prawn/transformation_stack.rb +29 -10
  52. data/lib/prawn/utilities.rb +13 -13
  53. data/lib/prawn/version.rb +2 -1
  54. data/lib/prawn/view.rb +68 -53
  55. data/lib/prawn.rb +23 -18
  56. data.tar.gz.sig +0 -0
  57. metadata +54 -177
  58. metadata.gz.sig +0 -0
  59. data/.yardopts +0 -10
  60. data/Gemfile +0 -5
  61. data/Rakefile +0 -25
  62. data/manual/absolute_position.pdf +0 -0
  63. data/manual/basic_concepts/adding_pages.rb +0 -26
  64. data/manual/basic_concepts/basic_concepts.rb +0 -43
  65. data/manual/basic_concepts/creation.rb +0 -38
  66. data/manual/basic_concepts/cursor.rb +0 -32
  67. data/manual/basic_concepts/measurement.rb +0 -24
  68. data/manual/basic_concepts/origin.rb +0 -37
  69. data/manual/basic_concepts/other_cursor_helpers.rb +0 -39
  70. data/manual/basic_concepts/view.rb +0 -48
  71. data/manual/bounding_box/bounding_box.rb +0 -41
  72. data/manual/bounding_box/bounds.rb +0 -48
  73. data/manual/bounding_box/canvas.rb +0 -23
  74. data/manual/bounding_box/creation.rb +0 -22
  75. data/manual/bounding_box/indentation.rb +0 -45
  76. data/manual/bounding_box/nesting.rb +0 -52
  77. data/manual/bounding_box/russian_boxes.rb +0 -40
  78. data/manual/bounding_box/stretchy.rb +0 -29
  79. data/manual/contents.rb +0 -35
  80. data/manual/cover.rb +0 -43
  81. data/manual/document_and_page_options/background.rb +0 -29
  82. data/manual/document_and_page_options/document_and_page_options.rb +0 -34
  83. data/manual/document_and_page_options/metadata.rb +0 -25
  84. data/manual/document_and_page_options/page_margins.rb +0 -36
  85. data/manual/document_and_page_options/page_size.rb +0 -34
  86. data/manual/document_and_page_options/print_scaling.rb +0 -23
  87. data/manual/example_helper.rb +0 -8
  88. data/manual/graphics/blend_mode.rb +0 -52
  89. data/manual/graphics/circle_and_ellipse.rb +0 -21
  90. data/manual/graphics/color.rb +0 -22
  91. data/manual/graphics/common_lines.rb +0 -29
  92. data/manual/graphics/fill_and_stroke.rb +0 -41
  93. data/manual/graphics/fill_rules.rb +0 -38
  94. data/manual/graphics/gradients.rb +0 -43
  95. data/manual/graphics/graphics.rb +0 -64
  96. data/manual/graphics/helper.rb +0 -34
  97. data/manual/graphics/line_width.rb +0 -36
  98. data/manual/graphics/lines_and_curves.rb +0 -40
  99. data/manual/graphics/polygon.rb +0 -27
  100. data/manual/graphics/rectangle.rb +0 -20
  101. data/manual/graphics/rotate.rb +0 -25
  102. data/manual/graphics/scale.rb +0 -42
  103. data/manual/graphics/soft_masks.rb +0 -44
  104. data/manual/graphics/stroke_cap.rb +0 -30
  105. data/manual/graphics/stroke_dash.rb +0 -47
  106. data/manual/graphics/stroke_join.rb +0 -29
  107. data/manual/graphics/translate.rb +0 -29
  108. data/manual/graphics/transparency.rb +0 -33
  109. data/manual/how_to_read_this_manual.rb +0 -39
  110. data/manual/images/absolute_position.rb +0 -22
  111. data/manual/images/fit.rb +0 -20
  112. data/manual/images/horizontal.rb +0 -24
  113. data/manual/images/images.rb +0 -41
  114. data/manual/images/plain_image.rb +0 -17
  115. data/manual/images/scale.rb +0 -21
  116. data/manual/images/vertical.rb +0 -30
  117. data/manual/images/width_and_height.rb +0 -24
  118. data/manual/layout/boxes.rb +0 -26
  119. data/manual/layout/content.rb +0 -24
  120. data/manual/layout/layout.rb +0 -27
  121. data/manual/layout/simple_grid.rb +0 -22
  122. data/manual/outline/add_subsection_to.rb +0 -60
  123. data/manual/outline/insert_section_after.rb +0 -46
  124. data/manual/outline/outline.rb +0 -33
  125. data/manual/outline/sections_and_pages.rb +0 -66
  126. data/manual/repeatable_content/alternate_page_numbering.rb +0 -36
  127. data/manual/repeatable_content/page_numbering.rb +0 -55
  128. data/manual/repeatable_content/repeatable_content.rb +0 -35
  129. data/manual/repeatable_content/repeater.rb +0 -54
  130. data/manual/repeatable_content/stamp.rb +0 -40
  131. data/manual/security/encryption.rb +0 -28
  132. data/manual/security/permissions.rb +0 -43
  133. data/manual/security/security.rb +0 -28
  134. data/manual/table.rb +0 -16
  135. data/manual/text/alignment.rb +0 -43
  136. data/manual/text/color.rb +0 -24
  137. data/manual/text/column_box.rb +0 -30
  138. data/manual/text/fallback_fonts.rb +0 -41
  139. data/manual/text/font.rb +0 -40
  140. data/manual/text/font_size.rb +0 -44
  141. data/manual/text/font_style.rb +0 -25
  142. data/manual/text/formatted_callbacks.rb +0 -70
  143. data/manual/text/formatted_text.rb +0 -61
  144. data/manual/text/free_flowing_text.rb +0 -50
  145. data/manual/text/inline.rb +0 -40
  146. data/manual/text/kerning_and_character_spacing.rb +0 -38
  147. data/manual/text/leading.rb +0 -24
  148. data/manual/text/line_wrapping.rb +0 -60
  149. data/manual/text/paragraph_indentation.rb +0 -31
  150. data/manual/text/positioned_text.rb +0 -37
  151. data/manual/text/registering_families.rb +0 -51
  152. data/manual/text/rendering_and_color.rb +0 -36
  153. data/manual/text/right_to_left_text.rb +0 -54
  154. data/manual/text/rotation.rb +0 -52
  155. data/manual/text/single_usage.rb +0 -36
  156. data/manual/text/text.rb +0 -75
  157. data/manual/text/text_box_excess.rb +0 -35
  158. data/manual/text/text_box_extensions.rb +0 -48
  159. data/manual/text/text_box_overflow.rb +0 -51
  160. data/manual/text/utf8.rb +0 -27
  161. data/manual/text/win_ansi_charset.rb +0 -62
  162. data/prawn.gemspec +0 -51
  163. data/spec/data/curves.pdf +0 -66
  164. data/spec/extensions/encoding_helpers.rb +0 -11
  165. data/spec/prawn/document/bounding_box_spec.rb +0 -550
  166. data/spec/prawn/document/column_box_spec.rb +0 -75
  167. data/spec/prawn/document/security_spec.rb +0 -176
  168. data/spec/prawn/document_annotations_spec.rb +0 -76
  169. data/spec/prawn/document_destinations_spec.rb +0 -15
  170. data/spec/prawn/document_grid_spec.rb +0 -99
  171. data/spec/prawn/document_reference_spec.rb +0 -27
  172. data/spec/prawn/document_span_spec.rb +0 -44
  173. data/spec/prawn/document_spec.rb +0 -805
  174. data/spec/prawn/font_metric_cache_spec.rb +0 -54
  175. data/spec/prawn/font_spec.rb +0 -544
  176. data/spec/prawn/graphics/blend_mode_spec.rb +0 -63
  177. data/spec/prawn/graphics/transparency_spec.rb +0 -81
  178. data/spec/prawn/graphics_spec.rb +0 -872
  179. data/spec/prawn/graphics_stroke_styles_spec.rb +0 -229
  180. data/spec/prawn/image_handler_spec.rb +0 -53
  181. data/spec/prawn/images/jpg_spec.rb +0 -20
  182. data/spec/prawn/images/png_spec.rb +0 -283
  183. data/spec/prawn/images_spec.rb +0 -229
  184. data/spec/prawn/measurements_extensions_spec.rb +0 -24
  185. data/spec/prawn/outline_spec.rb +0 -512
  186. data/spec/prawn/repeater_spec.rb +0 -166
  187. data/spec/prawn/soft_mask_spec.rb +0 -74
  188. data/spec/prawn/stamp_spec.rb +0 -173
  189. data/spec/prawn/text/box_spec.rb +0 -1110
  190. data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
  191. data/spec/prawn/text/formatted/box_spec.rb +0 -849
  192. data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
  193. data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -495
  194. data/spec/prawn/text/formatted/parser_spec.rb +0 -697
  195. data/spec/prawn/text_draw_text_spec.rb +0 -150
  196. data/spec/prawn/text_rendering_mode_spec.rb +0 -48
  197. data/spec/prawn/text_spacing_spec.rb +0 -95
  198. data/spec/prawn/text_spec.rb +0 -603
  199. data/spec/prawn/text_with_inline_formatting_spec.rb +0 -35
  200. data/spec/prawn/transformation_stack_spec.rb +0 -66
  201. data/spec/prawn/view_spec.rb +0 -63
  202. data/spec/prawn_manual_spec.rb +0 -35
  203. data/spec/spec_helper.rb +0 -48
@@ -1,229 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'set'
5
- require 'pathname'
6
-
7
- describe Prawn::Images do
8
- let(:pdf) { create_pdf }
9
- let(:filename) { "#{Prawn::DATADIR}/images/pigs.jpg" }
10
-
11
- it "onlies embed an image once, even if it's added multiple times" do
12
- pdf.image filename, at: [100, 100]
13
- pdf.image filename, at: [300, 300]
14
-
15
- output = pdf.render
16
- images = PDF::Inspector::XObject.analyze(output)
17
- # there should be 2 images in the page resources
18
- expect(images.page_xobjects.first.size).to eq(2)
19
- # but only 1 image xobject
20
- expect(output.scan(%r{/Type /XObject}).size).to eq(1)
21
- end
22
-
23
- it 'returns the image info object' do
24
- info = pdf.image(filename)
25
-
26
- expect(info).to be_a_kind_of(Prawn::Images::JPG)
27
-
28
- expect(info.height).to eq(453)
29
- end
30
-
31
- it 'accepts IO objects' do
32
- info =
33
- File.open(filename, 'rb') do |file|
34
- pdf.image(file)
35
- end
36
-
37
- expect(info.height).to eq(453)
38
- end
39
-
40
- it 'rewinds IO objects to be able to embed them multiply' do
41
- info =
42
- File.open(filename, 'rb') do |file|
43
- pdf.image(file)
44
- pdf.image(file)
45
- end
46
-
47
- expect(info.height).to eq(453)
48
- end
49
-
50
- it 'does not close passed-in IO objects' do
51
- File.open(filename, 'rb') do |file|
52
- pdf.image(file)
53
-
54
- expect(file).to_not be_closed
55
- end
56
- end
57
-
58
- it 'accepts Pathname objects' do
59
- info = pdf.image(Pathname.new(filename))
60
- expect(info.height).to eq(453)
61
- end
62
-
63
- describe 'closes opened files again after getting Pathnames', issue: 975 do
64
- describe 'spec with File message spy' do
65
- let(:not_filename) { 'non-existent filename' }
66
- let(:pathname_double) { instance_double('Pathname', file?: true) }
67
-
68
- before do
69
- file_content = File.new(filename, 'rb').read
70
- allow(Pathname).to receive(:new).with(not_filename) { pathname_double }
71
- allow(pathname_double).to receive(:binread) { file_content }
72
- end
73
-
74
- it 'uses only binread, which closes opened files' do
75
- # this implicitly tests that a file handle is closed again
76
- # because only stubbed binread can be called on not_filename
77
- _info = pdf.image(not_filename)
78
- expect(pathname_double).to have_received(:binread)
79
- end
80
- end
81
-
82
- system_has_lsof = system('lsof -v > /dev/null 2>&1')
83
- system_has_grep = system('grep --version > /dev/null 2>&1')
84
- if system_has_lsof && system_has_grep
85
- it 'closes opened files, spec with lsof' do
86
- gc_was_disabled = GC.disable # GC of File would close the file
87
- open_before = `lsof -c ruby | grep "#{filename}"`
88
- _info = pdf.image(Pathname.new(filename))
89
- open_after = `lsof -c ruby | grep "#{filename}"`
90
- GC.enable unless gc_was_disabled
91
- expect(open_after).to eq(open_before)
92
- end
93
- end
94
-
95
- if RUBY_PLATFORM != 'java'
96
- it 'closes opened files, spec with ObjectSpace' do
97
- gc_was_disabled = GC.disable # GC of File would close the file
98
- open_before = ObjectSpace.each_object(File).count { |f| !f.closed? }
99
- _info = pdf.image(Pathname.new(filename))
100
- open_after = ObjectSpace.each_object(File).count { |f| !f.closed? }
101
- GC.enable unless gc_was_disabled
102
- expect(open_after).to eq(open_before)
103
- end
104
- end
105
- end
106
-
107
- describe 'setting the length of the bytestream' do
108
- it 'correctlies work with images from Pathname objects' do
109
- pdf.image(Pathname.new(filename))
110
- expect(pdf).to have_parseable_xobjects
111
- end
112
-
113
- it 'correctlies work with images from IO objects' do
114
- pdf.image(File.open(filename, 'rb'))
115
- expect(pdf).to have_parseable_xobjects
116
- end
117
-
118
- it 'correctlies work with images from IO objects not set to mode rb' do
119
- pdf.image(File.open(filename, 'r'))
120
- expect(pdf).to have_parseable_xobjects
121
- end
122
- end
123
-
124
- it 'raise_errors an UnsupportedImageType if passed a BMP' do
125
- filename = "#{Prawn::DATADIR}/images/tru256.bmp"
126
- expect { pdf.image filename, at: [100, 100] }
127
- .to raise_error(Prawn::Errors::UnsupportedImageType)
128
- end
129
-
130
- it 'raise_errors an UnsupportedImageType if passed an interlaced PNG' do
131
- filename = "#{Prawn::DATADIR}/images/dice_interlaced.png"
132
- expect { pdf.image filename, at: [100, 100] }
133
- .to raise_error(Prawn::Errors::UnsupportedImageType)
134
- end
135
-
136
- it 'bumps PDF version to 1.5 or greater on embedding 16-bit PNGs' do
137
- pdf.image "#{Prawn::DATADIR}/images/16bit.png"
138
- expect(pdf.state.version).to be >= 1.5
139
- end
140
-
141
- it 'embeds 16-bit alpha channels for 16-bit PNGs' do
142
- pdf.image "#{Prawn::DATADIR}/images/16bit.png"
143
-
144
- output = pdf.render
145
- expect(output).to match(%r{/BitsPerComponent 16})
146
- expect(output).to_not match(%r{/BitsPerComponent 8})
147
- end
148
-
149
- it 'flows an image to a new page if it will not fit on a page' do
150
- pdf.image filename, fit: [600, 600]
151
- pdf.image filename, fit: [600, 600]
152
- output = StringIO.new(pdf.render, 'r+')
153
- hash = PDF::Reader::ObjectHash.new(output)
154
- pages = hash.values.find do |obj|
155
- obj.is_a?(Hash) && obj[:Type] == :Pages
156
- end[:Kids]
157
- expect(pages.size).to eq(2)
158
- expect(hash[pages[0]][:Resources][:XObject].keys).to eq([:I1])
159
- expect(hash[pages[1]][:Resources][:XObject].keys).to eq([:I2])
160
- end
161
-
162
- it 'does not flow an image to a new page if it will fit on one page' do
163
- pdf.image filename, fit: [400, 400]
164
- pdf.image filename, fit: [400, 400]
165
- output = StringIO.new(pdf.render, 'r+')
166
- hash = PDF::Reader::ObjectHash.new(output)
167
- pages = hash.values.find do |obj|
168
- obj.is_a?(Hash) && obj[:Type] == :Pages
169
- end[:Kids]
170
- expect(pages.size).to eq(1)
171
- expect(Set.new(hash[pages[0]][:Resources][:XObject].keys)).to eq(
172
- Set.new(%i[I1 I2])
173
- )
174
- end
175
-
176
- it 'does not start a new page just for a stretchy bounding box' do
177
- allow(pdf).to receive(:start_new_page)
178
- pdf.bounding_box([0, pdf.cursor], width: pdf.bounds.width) do
179
- pdf.image filename
180
- end
181
- expect(pdf).to_not have_received(:start_new_page)
182
- end
183
-
184
- describe ':fit option' do
185
- it 'fits inside the defined constraints' do
186
- info = pdf.image filename, fit: [100, 400]
187
- expect(info.scaled_width).to be <= 100
188
- expect(info.scaled_height).to be <= 400
189
-
190
- info = pdf.image filename, fit: [400, 100]
191
- expect(info.scaled_width).to be <= 400
192
- expect(info.scaled_height).to be <= 100
193
-
194
- info = pdf.image filename, fit: [604, 453]
195
- expect(info.scaled_width).to eq(604)
196
- expect(info.scaled_height).to eq(453)
197
- end
198
-
199
- it 'moves text position' do
200
- y = pdf.y
201
- pdf.image filename, fit: [100, 400]
202
- expect(pdf.y).to be < y
203
- end
204
- end
205
-
206
- describe ':at option' do
207
- it 'does not move text position' do
208
- y = pdf.y
209
- pdf.image filename, at: [100, 400]
210
- expect(pdf.y).to eq(y)
211
- end
212
- end
213
-
214
- describe ':width option without :height option' do
215
- it 'scales the width and height' do
216
- info = pdf.image filename, width: 225
217
- expect(info.scaled_height).to eq(168.75)
218
- expect(info.scaled_width).to eq(225.0)
219
- end
220
- end
221
-
222
- describe ':height option without :width option' do
223
- it 'scales the width and height' do
224
- info = pdf.image filename, height: 225
225
- expect(info.scaled_height).to eq(225.0)
226
- expect(info.scaled_width).to eq(300.0)
227
- end
228
- end
229
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'prawn/measurement_extensions'
5
-
6
- describe Prawn::Measurements do
7
- describe 'Numeric extensions' do
8
- it 'converts units to PostScriptPoints' do
9
- expect(1.mm).to be_within(0.000000001).of(2.834645669)
10
- expect(1.mm).to eq(72 / 25.4)
11
- expect(2.mm).to eq(2 * 72 / 25.4)
12
- expect(3.mm).to eq(3 * 72 / 25.4)
13
- expect(-3.mm).to eq(-3 * 72 / 25.4)
14
- expect(1.cm).to eq(10 * 72 / 25.4)
15
- expect(1.dm).to eq(100 * 72 / 25.4)
16
- expect(1.m).to eq(1000 * 72 / 25.4)
17
-
18
- expect(1.in).to eq(72)
19
- expect(1.ft).to eq(72 * 12)
20
- expect(1.yd).to eq(72 * 12 * 3)
21
- expect(1.pt).to eq(1)
22
- end
23
- end
24
- end