prawn 2.3.0 → 2.5.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.
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 +223 -143
  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 +21 -18
  7. data/lib/prawn/document.rb +273 -182
  8. data/lib/prawn/encoding.rb +2 -5
  9. data/lib/prawn/errors.rb +23 -34
  10. data/lib/prawn/font.rb +254 -139
  11. data/lib/prawn/font_metric_cache.rb +18 -16
  12. data/lib/prawn/fonts/afm.rb +99 -57
  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 +345 -107
  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 +75 -50
  22. data/lib/prawn/graphics/dash.rb +45 -42
  23. data/lib/prawn/graphics/join_style.rb +18 -12
  24. data/lib/prawn/graphics/patterns.rb +239 -110
  25. data/lib/prawn/graphics/transformation.rb +51 -44
  26. data/lib/prawn/graphics/transparency.rb +16 -40
  27. data/lib/prawn/graphics.rb +370 -260
  28. data/lib/prawn/grid.rb +219 -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 +46 -20
  32. data/lib/prawn/images/png.rb +94 -42
  33. data/lib/prawn/images.rb +70 -81
  34. data/lib/prawn/measurement_extensions.rb +39 -8
  35. data/lib/prawn/measurements.rb +60 -5
  36. data/lib/prawn/outline.rb +120 -113
  37. data/lib/prawn/repeater.rb +52 -36
  38. data/lib/prawn/security/arcfour.rb +4 -4
  39. data/lib/prawn/security.rb +106 -98
  40. data/lib/prawn/soft_mask.rb +42 -30
  41. data/lib/prawn/stamp.rb +38 -42
  42. data/lib/prawn/text/box.rb +156 -105
  43. data/lib/prawn/text/formatted/arranger.rb +121 -41
  44. data/lib/prawn/text/formatted/box.rb +239 -163
  45. data/lib/prawn/text/formatted/fragment.rb +130 -14
  46. data/lib/prawn/text/formatted/line_wrap.rb +49 -38
  47. data/lib/prawn/text/formatted/parser.rb +116 -74
  48. data/lib/prawn/text/formatted/wrap.rb +25 -26
  49. data/lib/prawn/text/formatted.rb +75 -0
  50. data/lib/prawn/text.rb +456 -211
  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 +69 -54
  55. data/lib/prawn.rb +24 -18
  56. data.tar.gz.sig +0 -0
  57. metadata +55 -262
  58. metadata.gz.sig +3 -4
  59. data/.yardopts +0 -10
  60. data/Gemfile +0 -5
  61. data/Rakefile +0 -54
  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 -25
  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 -22
  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 -37
  94. data/manual/graphics/gradients.rb +0 -43
  95. data/manual/graphics/graphics.rb +0 -64
  96. data/manual/graphics/helper.rb +0 -27
  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 -28
  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 -27
  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 -41
  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 -22
  142. data/manual/text/formatted_callbacks.rb +0 -65
  143. data/manual/text/formatted_text.rb +0 -58
  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 -32
  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 -47
  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 -49
  160. data/manual/text/utf8.rb +0 -27
  161. data/manual/text/win_ansi_charset.rb +0 -62
  162. data/prawn.gemspec +0 -57
  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 -546
  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 -36
  173. data/spec/prawn/document_spec.rb +0 -802
  174. data/spec/prawn/font_metric_cache_spec.rb +0 -54
  175. data/spec/prawn/font_spec.rb +0 -542
  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 -837
  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 -224
  184. data/spec/prawn/measurements_extensions_spec.rb +0 -24
  185. data/spec/prawn/outline_spec.rb +0 -412
  186. data/spec/prawn/repeater_spec.rb +0 -165
  187. data/spec/prawn/soft_mask_spec.rb +0 -74
  188. data/spec/prawn/stamp_spec.rb +0 -172
  189. data/spec/prawn/text/box_spec.rb +0 -1112
  190. data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
  191. data/spec/prawn/text/formatted/box_spec.rb +0 -846
  192. data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
  193. data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -494
  194. data/spec/prawn/text/formatted/parser_spec.rb +0 -697
  195. data/spec/prawn/text_draw_text_spec.rb +0 -149
  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,494 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Prawn::Text::Formatted::LineWrap do
6
- let(:pdf) { create_pdf }
7
- let(:arranger) do
8
- Prawn::Text::Formatted::Arranger.new(pdf).tap do |a|
9
- a.format_array = [
10
- { text: "hello\nworld\n\n\nhow are you?" },
11
- { text: "\n" },
12
- { text: "\n" },
13
- { text: '' },
14
- { text: 'fine, thanks. ' * 4 },
15
- { text: '' },
16
- { text: "\n" },
17
- { text: '' }
18
- ]
19
- end
20
- end
21
- let(:line_wrap) { described_class.new }
22
-
23
- it 'only returns an empty string if nothing fit or there' \
24
- 'was nothing to wrap' do
25
- 8.times do
26
- line = line_wrap.wrap_line(
27
- arranger: arranger,
28
- width: 200,
29
- document: pdf
30
- )
31
- expect(line).to_not be_empty
32
- end
33
- line = line_wrap.wrap_line(
34
- arranger: arranger,
35
- width: 200,
36
- document: pdf
37
- )
38
- expect(line).to be_empty
39
- end
40
-
41
- it 'tokenizes a string using the scan_pattern' do
42
- tokens = line_wrap.tokenize('one two three')
43
- expect(tokens.length).to eq(5)
44
- end
45
-
46
- describe 'Core::Text::Formatted::LineWrap#wrap_line' do
47
- let(:arranger) { Prawn::Text::Formatted::Arranger.new(pdf) }
48
- let(:one_word_width) { 50 }
49
-
50
- it 'strips leading and trailing spaces' do
51
- array = [
52
- { text: ' hello world, ' },
53
- { text: 'goodbye ', style: [:bold] }
54
- ]
55
- arranger.format_array = array
56
- string = line_wrap.wrap_line(
57
- arranger: arranger,
58
- width: 300,
59
- document: pdf
60
- )
61
- expect(string).to eq('hello world, goodbye')
62
- end
63
-
64
- it 'strips trailing spaces when a white-space-only fragment was' \
65
- ' successfully pushed onto the end of a line but no other non-white' \
66
- ' space fragment fits after it' do
67
- array = [
68
- { text: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ' },
69
- { text: ' ', style: [:bold] },
70
- { text: ' bbbbbbbbbbbbbbbbbbbbbbbbbbbb' }
71
- ]
72
- arranger.format_array = array
73
- string = line_wrap.wrap_line(
74
- arranger: arranger,
75
- width: 300,
76
- document: pdf
77
- )
78
- expect(string).to eq('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
79
- end
80
-
81
- it 'raise_errors CannotFit if a too-small width is given' do
82
- array = [
83
- { text: ' hello world, ' },
84
- { text: 'goodbye ', style: [:bold] }
85
- ]
86
- arranger.format_array = array
87
- expect do
88
- line_wrap.wrap_line(
89
- arranger: arranger,
90
- width: 1,
91
- document: pdf
92
- )
93
- end.to raise_error(Prawn::Errors::CannotFit)
94
- end
95
-
96
- it 'breaks on space' do
97
- array = [{ text: 'hello world' }]
98
- arranger.format_array = array
99
- string = line_wrap.wrap_line(
100
- arranger: arranger,
101
- width: one_word_width,
102
- document: pdf
103
- )
104
- expect(string).to eq('hello')
105
- end
106
-
107
- it 'breaks on zero-width space' do
108
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
109
- array = [{ text: "hello#{Prawn::Text::ZWSP}world" }]
110
- arranger.format_array = array
111
- string = line_wrap.wrap_line(
112
- arranger: arranger,
113
- width: one_word_width,
114
- document: pdf
115
- )
116
- expect(string).to eq('hello')
117
- end
118
-
119
- it 'does not display zero-width space' do
120
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
121
- array = [{ text: "hello#{Prawn::Text::ZWSP}world" }]
122
- arranger.format_array = array
123
- string = line_wrap.wrap_line(
124
- arranger: arranger,
125
- width: 300,
126
- document: pdf
127
- )
128
- expect(string).to eq('helloworld')
129
- end
130
-
131
- it 'does not raise CannotFit if first fragment is a zero-width space' do
132
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
133
- array = [{ text: Prawn::Text::ZWSP }, { text: 'stringofchars' }]
134
- arranger.format_array = array
135
- string = line_wrap.wrap_line(
136
- arranger: arranger,
137
- width: 50,
138
- document: pdf
139
- )
140
- expect(string).to eq('stringof')
141
- end
142
-
143
- it 'breaks on tab' do
144
- array = [{ text: "hello\tworld" }]
145
- arranger.format_array = array
146
- string = line_wrap.wrap_line(
147
- arranger: arranger,
148
- width: one_word_width,
149
- document: pdf
150
- )
151
- expect(string).to eq('hello')
152
- end
153
-
154
- it 'does not break on NBSP' do
155
- array = [{ text: "hello#{Prawn::Text::NBSP}world" }]
156
- arranger.format_array = array
157
- string = line_wrap.wrap_line(
158
- arranger: arranger,
159
- width: one_word_width,
160
- document: pdf
161
- )
162
- expect(string).to eq("hello#{Prawn::Text::NBSP}wor")
163
- end
164
-
165
- it 'does not break on NBSP in a Win-1252 encoded string' do
166
- array = [{
167
- text: "hello#{Prawn::Text::NBSP}world".encode(Encoding::Windows_1252)
168
- }]
169
- arranger.format_array = array
170
- string = line_wrap.wrap_line(
171
- arranger: arranger,
172
- width: one_word_width,
173
- document: pdf
174
- )
175
- expect(string).to eq("hello#{Prawn::Text::NBSP}wor")
176
- end
177
-
178
- it 'breaks on hyphens' do
179
- array = [{ text: 'hello-world' }]
180
- arranger.format_array = array
181
- string = line_wrap.wrap_line(
182
- arranger: arranger,
183
- width: one_word_width,
184
- document: pdf
185
- )
186
- expect(string).to eq('hello-')
187
- end
188
-
189
- it 'does not break after a hyphen that follows white space and' \
190
- 'precedes a word' do
191
- array = [{ text: 'hello -' }]
192
- arranger.format_array = array
193
- string = line_wrap.wrap_line(
194
- arranger: arranger,
195
- width: one_word_width,
196
- document: pdf
197
- )
198
- expect(string).to eq('hello -')
199
-
200
- array = [{ text: 'hello -world' }]
201
- arranger.format_array = array
202
- string = line_wrap.wrap_line(
203
- arranger: arranger,
204
- width: one_word_width,
205
- document: pdf
206
- )
207
- expect(string).to eq('hello')
208
- end
209
-
210
- it 'breaks on a soft hyphen' do
211
- string = pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}world")
212
- array = [{ text: string }]
213
- arranger.format_array = array
214
- string = line_wrap.wrap_line(
215
- arranger: arranger,
216
- width: one_word_width,
217
- document: pdf
218
- )
219
- expect(string).to eq("hello#{Prawn::Text::SHY}")
220
-
221
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
222
- line_wrap = described_class.new
223
-
224
- string = "hello#{Prawn::Text::SHY}world"
225
- array = [{ text: string }]
226
- arranger.format_array = array
227
- string = line_wrap.wrap_line(
228
- arranger: arranger,
229
- width: one_word_width,
230
- document: pdf
231
- )
232
- expect(string).to eq("hello#{Prawn::Text::SHY}")
233
- end
234
-
235
- it 'ignores width of a soft-hyphen during adding fragments to line',
236
- issue: 775 do
237
- hyphen_string = "Hy#{Prawn::Text::SHY}phe#{Prawn::Text::SHY}nat"\
238
- "#{Prawn::Text::SHY}ions "
239
- string1 = pdf.font.normalize_encoding(hyphen_string * 5)
240
- string2 = pdf.font.normalize_encoding('Hyphenations ' * 3 + hyphen_string)
241
-
242
- array1 = [{ text: string1 }]
243
- array2 = [{ text: string2 }]
244
-
245
- arranger.format_array = array1
246
-
247
- res1 = line_wrap.wrap_line(
248
- arranger: arranger,
249
- width: 300,
250
- document: pdf
251
- )
252
-
253
- line_wrap = described_class.new
254
-
255
- arranger.format_array = array2
256
-
257
- res2 = line_wrap.wrap_line(
258
- arranger: arranger,
259
- width: 300,
260
- document: pdf
261
- )
262
- expect(res1).to eq(res2)
263
- end
264
-
265
- it 'does not display soft hyphens except at the end of a line ' \
266
- 'for more than one element in format_array', issue: 347 do
267
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
268
- line_wrap = described_class.new
269
-
270
- string1 = pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}world ")
271
- string2 = pdf.font.normalize_encoding("hi#{Prawn::Text::SHY}earth")
272
- array = [{ text: string1 }, { text: string2 }]
273
- arranger.format_array = array
274
- string = line_wrap.wrap_line(
275
- arranger: arranger,
276
- width: 300,
277
- document: pdf
278
- )
279
- expect(string).to eq('helloworld hiearth')
280
- end
281
-
282
- it 'does not break before a hard hyphen that follows a word' do
283
- enough_width_for_hello_world = 60
284
-
285
- array = [{ text: 'hello world' }]
286
- arranger.format_array = array
287
- string = line_wrap.wrap_line(
288
- arranger: arranger,
289
- width: enough_width_for_hello_world,
290
- document: pdf
291
- )
292
- expect(string).to eq('hello world')
293
-
294
- array = [{ text: 'hello world-' }]
295
- arranger.format_array = array
296
- string = line_wrap.wrap_line(
297
- arranger: arranger,
298
- width: enough_width_for_hello_world,
299
- document: pdf
300
- )
301
- expect(string).to eq('hello')
302
-
303
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
304
- line_wrap = described_class.new
305
- enough_width_for_hello_world = 68
306
-
307
- array = [{ text: 'hello world' }]
308
- arranger.format_array = array
309
- string = line_wrap.wrap_line(
310
- arranger: arranger,
311
- width: enough_width_for_hello_world,
312
- document: pdf
313
- )
314
- expect(string).to eq('hello world')
315
-
316
- array = [{ text: 'hello world-' }]
317
- arranger.format_array = array
318
- string = line_wrap.wrap_line(
319
- arranger: arranger,
320
- width: enough_width_for_hello_world,
321
- document: pdf
322
- )
323
- expect(string).to eq('hello')
324
- end
325
-
326
- it 'does not break after a hard hyphen that follows a soft hyphen and' \
327
- 'precedes a word' do
328
- string = pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}-")
329
- array = [{ text: string }]
330
- arranger.format_array = array
331
- string = line_wrap.wrap_line(
332
- arranger: arranger,
333
- width: one_word_width,
334
- document: pdf
335
- )
336
- expect(string).to eq('hello-')
337
-
338
- string = pdf.font.normalize_encoding("hello#{Prawn::Text::SHY}-world")
339
- array = [{ text: string }]
340
- arranger.format_array = array
341
- string = line_wrap.wrap_line(
342
- arranger: arranger,
343
- width: one_word_width,
344
- document: pdf
345
- )
346
- expect(string).to eq("hello#{Prawn::Text::SHY}")
347
-
348
- pdf.font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
349
- line_wrap = described_class.new
350
-
351
- string = "hello#{Prawn::Text::SHY}-"
352
- array = [{ text: string }]
353
- arranger.format_array = array
354
- string = line_wrap.wrap_line(
355
- arranger: arranger,
356
- width: one_word_width,
357
- document: pdf
358
- )
359
- expect(string).to eq('hello-')
360
-
361
- string = "hello#{Prawn::Text::SHY}-world"
362
- array = [{ text: string }]
363
- arranger.format_array = array
364
- string = line_wrap.wrap_line(
365
- arranger: arranger,
366
- width: one_word_width,
367
- document: pdf
368
- )
369
- expect(string).to eq("hello#{Prawn::Text::SHY}")
370
- end
371
-
372
- it 'does not process UTF-8 chars with default font', issue: 693 do
373
- array = [{ text: 'Test' }]
374
- arranger.format_array = array
375
-
376
- expect do
377
- line_wrap.wrap_line(
378
- arranger: arranger,
379
- width: 300,
380
- document: pdf
381
- )
382
- end.to raise_exception(Prawn::Errors::IncompatibleStringEncoding)
383
- end
384
-
385
- it 'processes UTF-8 chars with UTF-8 font', issue: 693 do
386
- array = [{ text: 'Test' }]
387
- arranger.format_array = array
388
-
389
- pdf.font Pathname.new("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf")
390
- string = line_wrap.wrap_line(
391
- arranger: arranger,
392
- width: 300,
393
- document: pdf
394
- )
395
-
396
- expect(string).to eq('Test')
397
- end
398
- end
399
-
400
- describe '#space_count' do
401
- let(:arranger) { Prawn::Text::Formatted::Arranger.new(pdf) }
402
-
403
- it 'returns the number of spaces in the last wrapped line' do
404
- array = [
405
- { text: 'hello world, ' },
406
- { text: 'goodbye', style: [:bold] }
407
- ]
408
- arranger.format_array = array
409
- line_wrap.wrap_line(
410
- arranger: arranger,
411
- width: 300,
412
- document: pdf
413
- )
414
- expect(line_wrap.space_count).to eq(2)
415
- end
416
-
417
- it 'excludes preceding and trailing spaces from the count' do
418
- array = [
419
- { text: ' hello world, ' },
420
- { text: 'goodbye ', style: [:bold] }
421
- ]
422
- arranger.format_array = array
423
- line_wrap.wrap_line(
424
- arranger: arranger,
425
- width: 300,
426
- document: pdf
427
- )
428
- expect(line_wrap.space_count).to eq(2)
429
- end
430
- end
431
-
432
- describe '#paragraph_finished?' do
433
- let(:arranger) { Prawn::Text::Formatted::Arranger.new(pdf) }
434
- let(:line_wrap) { described_class.new }
435
- let(:one_word_width) { 50 }
436
-
437
- it 'is false when the last printed line is not the end of the paragraph' do
438
- array = [{ text: 'hello world' }]
439
- arranger.format_array = array
440
- line_wrap.wrap_line(
441
- arranger: arranger,
442
- width: one_word_width,
443
- document: pdf
444
- )
445
-
446
- expect(line_wrap.paragraph_finished?).to eq(false)
447
- end
448
-
449
- it 'is true when the last printed line is the last fragment to print' do
450
- array = [{ text: 'hello world' }]
451
- arranger.format_array = array
452
- line_wrap.wrap_line(
453
- arranger: arranger,
454
- width: one_word_width,
455
- document: pdf
456
- )
457
- line_wrap.wrap_line(
458
- arranger: arranger,
459
- width: one_word_width,
460
- document: pdf
461
- )
462
-
463
- expect(line_wrap.paragraph_finished?).to eq(true)
464
- end
465
-
466
- it 'be_trues when a newline exists on the current line' do
467
- array = [{ text: "hello\n world" }]
468
- arranger.format_array = array
469
- line_wrap.wrap_line(
470
- arranger: arranger,
471
- width: one_word_width,
472
- document: pdf
473
- )
474
-
475
- expect(line_wrap.paragraph_finished?).to eq(true)
476
- end
477
-
478
- it 'be_trues when a newline exists in the next fragment' do
479
- array = [
480
- { text: 'hello ' },
481
- { text: " \n" },
482
- { text: 'world' }
483
- ]
484
- arranger.format_array = array
485
- line_wrap.wrap_line(
486
- arranger: arranger,
487
- width: one_word_width,
488
- document: pdf
489
- )
490
-
491
- expect(line_wrap.paragraph_finished?).to eq(true)
492
- end
493
- end
494
- end