prawn 2.3.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 +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,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # text/formatted/fragment.rb : Implements information about a formatted fragment
4
- #
5
- # Copyright March 2010, Daniel Nelson. All Rights Reserved.
6
- #
7
- # This is free software. Please see the LICENSE and COPYING files for details.
8
-
9
3
  module Prawn
10
4
  module Text
11
5
  module Formatted
@@ -14,11 +8,19 @@ module Prawn
14
8
  #
15
9
  # @private
16
10
  class Fragment
17
- attr_reader :format_state, :text
11
+ attr_reader :format_state
12
+ attr_reader :text
18
13
  attr_writer :width
19
- attr_accessor :line_height, :descender, :ascender
20
- attr_accessor :word_spacing, :left, :baseline
21
-
14
+ attr_accessor :line_height
15
+ attr_accessor :descender
16
+ attr_accessor :ascender
17
+ attr_accessor :word_spacing
18
+ attr_accessor :left
19
+ attr_accessor :baseline
20
+
21
+ # @param text [String]
22
+ # @param format_state [Hash{Symbol => any}]
23
+ # @param document [Prawn::Documnt]
22
24
  def initialize(text, format_state, document)
23
25
  @format_state = format_state
24
26
  @document = document
@@ -30,35 +32,58 @@ module Prawn
30
32
  @text = process_text(@original_text)
31
33
  end
32
34
 
35
+ # Width of fragment.
36
+ #
37
+ # @return [Number]
33
38
  def width
34
39
  if @word_spacing.zero? then @width
35
- else @width + @word_spacing * space_count
40
+ else
41
+ @width + (@word_spacing * space_count)
36
42
  end
37
43
  end
38
44
 
45
+ # Height of fragment.
46
+ #
47
+ # @return [Number]
39
48
  def height
40
49
  top - bottom
41
50
  end
42
51
 
52
+ # Is this a subscript fragment?
53
+ #
54
+ # @return [Boolean]
43
55
  def subscript?
44
56
  styles.include?(:subscript)
45
57
  end
46
58
 
59
+ # Is this a superscript fragment?
60
+ #
61
+ # @return [Boolean]
47
62
  def superscript?
48
63
  styles.include?(:superscript)
49
64
  end
50
65
 
66
+ # Vertical offset of the fragment.
67
+ #
68
+ # @return [Number]
51
69
  def y_offset
52
70
  if subscript? then -descender
53
71
  elsif superscript? then 0.85 * ascender
54
- else 0
72
+ else
73
+ 0
55
74
  end
56
75
  end
57
76
 
77
+ # Fragment bounding box, relative to the containing bounding box.
78
+ #
79
+ # @return [Array(Number, Number, Number, Number)]
58
80
  def bounding_box
59
81
  [left, bottom, right, top]
60
82
  end
61
83
 
84
+ # Fragment bounding box, relative to the containing page.
85
+ #
86
+ # @return [Array(Number, Number, Number, Number)]
62
87
  def absolute_bounding_box
63
88
  box = bounding_box
64
89
  box[0] += @document.bounds.absolute_left
@@ -68,53 +93,90 @@ module Prawn
68
93
  box
69
94
  end
70
95
 
96
+ # Underline endpoints.
97
+ #
98
+ # @return [Array(Array(Number, Number), Array(Number, Number))]
71
99
  def underline_points
72
100
  y = baseline - 1.25
73
101
  [[left, y], [right, y]]
74
102
  end
75
103
 
104
+ # Strikethrough endpoints.
105
+ #
106
+ # @return [Array(Array(Number, Number), Array(Number, Number))]
76
107
  def strikethrough_points
77
- y = baseline + ascender * 0.3
108
+ y = baseline + (ascender * 0.3)
78
109
  [[left, y], [right, y]]
79
110
  end
80
111
 
112
+ # Fragment font styles.
113
+ #
114
+ # @return [Array<Symbol>]
81
115
  def styles
82
116
  @format_state[:styles] || []
83
117
  end
84
118
 
119
+ # Fragment link.
120
+ #
121
+ # @return [String, nil]
85
122
  def link
86
123
  @format_state[:link]
87
124
  end
88
125
 
126
+ # Anchor.
127
+ #
128
+ # @return [PDF::Core::Reference, Array, Hash]
89
129
  def anchor
90
130
  @format_state[:anchor]
91
131
  end
92
132
 
133
+ # Local destination.
134
+ #
135
+ # @return [String]
93
136
  def local
94
137
  @format_state[:local]
95
138
  end
96
139
 
140
+ # Fragment color.
141
+ #
142
+ # @return [Color]
97
143
  def color
98
144
  @format_state[:color]
99
145
  end
100
146
 
147
+ # Fragment font name.
148
+ #
149
+ # @return [String]
101
150
  def font
102
151
  @format_state[:font]
103
152
  end
104
153
 
154
+ # Font size.
155
+ #
156
+ # @return [Number]
105
157
  def size
106
158
  @format_state[:size]
107
159
  end
108
160
 
161
+ # Character spacing.
162
+ #
163
+ # @return [Number]
109
164
  def character_spacing
110
165
  @format_state[:character_spacing] ||
111
166
  @document.character_spacing
112
167
  end
113
168
 
169
+ # Text direction.
170
+ #
171
+ # @return [:ltr, :rtl]
114
172
  def direction
115
173
  @format_state[:direction]
116
174
  end
117
175
 
176
+ # Set default text direction.
177
+ #
178
+ # @param direction [:ltr, :rtl]
179
+ # @return [void]
118
180
  def default_direction=(direction)
119
181
  unless @format_state[:direction]
120
182
  @format_state[:direction] = direction
@@ -122,15 +184,24 @@ module Prawn
122
184
  end
123
185
  end
124
186
 
187
+ # Keep trailing spaces.
188
+ #
189
+ # @return [void]
125
190
  def include_trailing_white_space!
126
191
  @format_state.delete(:exclude_trailing_white_space)
127
192
  @text = process_text(@original_text)
128
193
  end
129
194
 
195
+ # Number of spaces in the text.
196
+ #
197
+ # @return [Integer]
130
198
  def space_count
131
199
  @text.count(' ')
132
200
  end
133
201
 
202
+ # Callbacks.
203
+ #
204
+ # @return [Array]
134
205
  def callback_objects
135
206
  callback = @format_state[:callback]
136
207
  if callback.nil?
@@ -142,62 +213,107 @@ module Prawn
142
213
  end
143
214
  end
144
215
 
216
+ # Horizontal coordinate of the right side of the fragment.
217
+ #
218
+ # @return [Number]
145
219
  def right
146
220
  left + width
147
221
  end
148
222
 
223
+ # Vertical coordinate of the top side of the fragment.
224
+ #
225
+ # @return [Number]
149
226
  def top
150
227
  baseline + ascender
151
228
  end
152
229
 
230
+ # Vertical coordinate of the bottom side of the fragment.
231
+ #
232
+ # @return [Number]
153
233
  def bottom
154
234
  baseline - descender
155
235
  end
156
236
 
237
+ # Coordinates of the top left corner of the fragment.
238
+ #
239
+ # @return [Array(Number, Number)]
157
240
  def top_left
158
241
  [left, top]
159
242
  end
160
243
 
244
+ # Coordinates of the top right corner of the fragment.
245
+ #
246
+ # @return [Array(Number, Number)]
161
247
  def top_right
162
248
  [right, top]
163
249
  end
164
250
 
251
+ # Coordinates of the bottom right corner of the fragment.
252
+ #
253
+ # @return [Array(Number, Number)]
165
254
  def bottom_right
166
255
  [right, bottom]
167
256
  end
168
257
 
258
+ # Coordinates of the bottom left corner of the fragment.
259
+ #
260
+ # @return [Array(Number, Number)]
169
261
  def bottom_left
170
262
  [left, bottom]
171
263
  end
172
264
 
265
+ # Absolute horizontal coordinate of the left side of the fragment.
266
+ #
267
+ # @return [Number]
173
268
  def absolute_left
174
269
  absolute_bounding_box[0]
175
270
  end
176
271
 
272
+ # Absolute horizontal coordinate of the right side of the fragment.
273
+ #
274
+ # @return [Number]
177
275
  def absolute_right
178
276
  absolute_bounding_box[2]
179
277
  end
180
278
 
279
+ # Absolute vertical coordinate of the top side of the fragment.
280
+ #
281
+ # @return [Number]
181
282
  def absolute_top
182
283
  absolute_bounding_box[3]
183
284
  end
184
285
 
286
+ # Absolute vertical coordinate of the bottom side of the fragment.
287
+ #
288
+ # @return [Number]
185
289
  def absolute_bottom
186
290
  absolute_bounding_box[1]
187
291
  end
188
292
 
293
+ # Absolute coordinates of the top left corner of the fragment.
294
+ #
295
+ # @return [Array(Number, Number)]
189
296
  def absolute_top_left
190
297
  [absolute_left, absolute_top]
191
298
  end
192
299
 
300
+ # Absolute coordinates of the top right corner of the fragment.
301
+ #
302
+ # @return [Array(Number, Number)]
193
303
  def absolute_top_right
194
304
  [absolute_right, absolute_top]
195
305
  end
196
306
 
307
+ # Absolute coordinates of the bottom left corner of the fragment.
308
+ #
309
+ # @return [Array(Number, Number)]
197
310
  def absolute_bottom_left
198
311
  [absolute_left, absolute_bottom]
199
312
  end
200
313
 
314
+ # Absolute coordinates of the bottom right corner of the fragment.
315
+ #
316
+ # @return [Array(Number, Number)]
201
317
  def absolute_bottom_right
202
318
  [absolute_right, absolute_bottom]
203
319
  end
@@ -211,7 +327,7 @@ module Prawn
211
327
  string = string.rstrip
212
328
 
213
329
  if soft_hyphens_need_processing?(string)
214
- string = process_soft_hyphens(string[0..-2]) + string[-1..-1]
330
+ string = process_soft_hyphens(string[0..-2]) + string[-1..]
215
331
  end
216
332
  elsif soft_hyphens_need_processing?(string)
217
333
  string = process_soft_hyphens(string)
@@ -1,40 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # core/text/formatted/line_wrap.rb : Implements individual line wrapping of
4
- # formatted text
5
- #
6
- # Copyright February 2010, Daniel Nelson. All Rights Reserved.
7
- #
8
- # This is free software. Please see the LICENSE and COPYING files for details.
9
- #
10
-
11
3
  module Prawn
12
4
  module Text
13
- module Formatted #:nodoc:
5
+ module Formatted
6
+ # Implements individual line wrapping of formatted text.
7
+ #
14
8
  # @private
15
- class LineWrap #:nodoc:
16
- # The width of the last wrapped line
9
+ class LineWrap
10
+ # The width of the last wrapped line.
17
11
  #
12
+ # @return [Number]
18
13
  def width
19
14
  @accumulated_width || 0
20
15
  end
21
16
 
22
- # The number of spaces in the last wrapped line
17
+ # The number of spaces in the last wrapped line.
18
+ # @return [Integer]
23
19
  attr_reader :space_count
24
20
 
25
- # Whether this line is the last line in the paragraph
21
+ # Whether this line is the last line in the paragraph.
22
+ #
23
+ # @return [Boolean]
26
24
  def paragraph_finished?
27
25
  @newline_encountered || next_string_newline? || @arranger.finished?
28
26
  end
29
27
 
28
+ # Break the fragment into tokens.
29
+ #
30
+ # @param fragment [String]
31
+ # @return [Array<String>]
30
32
  def tokenize(fragment)
31
33
  fragment.scan(scan_pattern(fragment.encoding))
32
34
  end
33
35
 
34
- # Work in conjunction with the PDF::Formatted::Arranger
35
- # defined in the :arranger option to determine what formatted text
36
- # will fit within the width defined by the :width option
36
+ # Work in conjunction with the {Prawn::Text::Formatted::Arranger}
37
+ # defined in the `:arranger` option to determine what formatted text
38
+ # will fit within the width defined by the `:width` option.
37
39
  #
40
+ # @param options [Hash{Symbol => any}]
41
+ # @option options :document [Prawn::Document]
42
+ # @option options :kerning [Boolean]
43
+ # @option options :width [Number]
44
+ # @option options :disable_wrap_by_char [Boolean]
45
+ # @option options :arranger [Prawn::Text::Formatted::Arranger]
46
+ # @return [String]
38
47
  def wrap_line(options)
39
48
  initialize_line(options)
40
49
 
@@ -86,18 +95,20 @@ module Prawn
86
95
  # the line
87
96
  #
88
97
  def add_fragment_to_line(fragment)
89
- if fragment == ''
98
+ case fragment
99
+ when ''
90
100
  true
91
- elsif fragment == "\n"
101
+ when "\n"
92
102
  @newline_encountered = true
93
103
  false
94
104
  else
95
105
  tokenize(fragment).each do |segment|
96
- segment_width = if segment == zero_width_space(segment.encoding)
97
- 0
98
- else
99
- @document.width_of(segment, kerning: @kerning)
100
- end
106
+ segment_width =
107
+ if segment == zero_width_space(segment.encoding)
108
+ 0
109
+ else
110
+ @document.width_of(segment, kerning: @kerning)
111
+ end
101
112
 
102
113
  if @accumulated_width + segment_width <= @width
103
114
  @accumulated_width += segment_width
@@ -136,7 +147,7 @@ module Prawn
136
147
  "[^#{ebc}]+",
137
148
  "[#{ews}]+",
138
149
  "#{ehy}+[^#{ebc}]*",
139
- eshy.to_s
150
+ eshy.to_s,
140
151
  ]
141
152
 
142
153
  pattern = patterns
@@ -151,17 +162,18 @@ module Prawn
151
162
  # word breaking is needed
152
163
  #
153
164
  def word_division_scan_pattern(encoding = ::Encoding::UTF_8)
154
- common_whitespaces = ["\t", "\n", "\v", "\r", ' '].map do |c|
155
- c.encode(encoding)
156
- end
165
+ common_whitespaces =
166
+ ["\t", "\n", "\v", "\r", ' '].map { |c|
167
+ c.encode(encoding)
168
+ }
157
169
 
158
170
  Regexp.union(
159
171
  common_whitespaces +
160
172
  [
161
173
  zero_width_space(encoding),
162
174
  soft_hyphen(encoding),
163
- hyphen(encoding)
164
- ].compact
175
+ hyphen(encoding),
176
+ ].compact,
165
177
  )
166
178
  end
167
179
 
@@ -176,7 +188,7 @@ module Prawn
176
188
  [
177
189
  whitespace(encoding),
178
190
  soft_hyphen(encoding),
179
- hyphen(encoding)
191
+ hyphen(encoding),
180
192
  ].join('')
181
193
  end
182
194
 
@@ -227,7 +239,7 @@ module Prawn
227
239
  else
228
240
  update_output_based_on_last_fragment(
229
241
  fragment,
230
- soft_hyphen(fragment.encoding)
242
+ soft_hyphen(fragment.encoding),
231
243
  )
232
244
  update_line_status_based_on_last_output
233
245
  pull_preceding_fragment_to_join_this_one?(fragment)
@@ -248,18 +260,17 @@ module Prawn
248
260
  @arranger.update_last_string(
249
261
  @fragment_output,
250
262
  remaining_text,
251
- normalized_soft_hyphen
263
+ normalized_soft_hyphen,
252
264
  )
253
265
  end
254
266
 
255
267
  def pull_preceding_fragment_to_join_this_one?(current_fragment)
256
268
  if @fragment_output.empty? && !current_fragment.empty? &&
257
- @line_contains_more_than_one_word
258
- unless previous_fragment_ended_with_breakable? ||
259
- fragment_begins_with_breakable?(current_fragment)
260
- @fragment_output = @previous_fragment_output_without_last_word
261
- update_output_based_on_last_fragment(@previous_fragment)
262
- end
269
+ @line_contains_more_than_one_word &&
270
+ !(previous_fragment_ended_with_breakable? ||
271
+ fragment_begins_with_breakable?(current_fragment))
272
+ @fragment_output = @previous_fragment_output_without_last_word
273
+ update_output_based_on_last_fragment(@previous_fragment)
263
274
  end
264
275
  end
265
276