prawn 1.1.0 → 2.4.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 (309) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +1 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -9
  6. data/Rakefile +9 -40
  7. data/lib/prawn/document/bounding_box.rb +54 -40
  8. data/lib/prawn/document/column_box.rb +8 -10
  9. data/lib/prawn/document/internals.rb +39 -146
  10. data/lib/prawn/document/span.rb +23 -17
  11. data/lib/prawn/document.rb +217 -182
  12. data/lib/prawn/encoding.rb +69 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +124 -104
  15. data/lib/prawn/font_metric_cache.rb +23 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +5 -12
  18. data/lib/prawn/fonts/otf.rb +11 -0
  19. data/lib/prawn/fonts/ttc.rb +36 -0
  20. data/lib/prawn/{font → fonts}/ttf.rb +140 -88
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +5 -5
  23. data/lib/prawn/graphics/color.rb +46 -44
  24. data/lib/prawn/graphics/dash.rb +27 -11
  25. data/lib/prawn/graphics/join_style.rb +11 -6
  26. data/lib/prawn/graphics/patterns.rb +220 -78
  27. data/lib/prawn/graphics/transformation.rb +20 -12
  28. data/lib/prawn/graphics/transparency.rb +20 -18
  29. data/lib/prawn/graphics.rb +153 -115
  30. data/lib/prawn/grid.rb +93 -50
  31. data/lib/prawn/image_handler.rb +4 -4
  32. data/lib/prawn/images/image.rb +3 -2
  33. data/lib/prawn/images/jpg.rb +31 -24
  34. data/lib/prawn/images/png.rb +101 -68
  35. data/lib/prawn/images.rb +64 -56
  36. data/lib/prawn/measurement_extensions.rb +10 -9
  37. data/lib/prawn/measurements.rb +20 -23
  38. data/lib/prawn/outline.rb +96 -75
  39. data/lib/prawn/repeater.rb +16 -16
  40. data/lib/prawn/security/arcfour.rb +2 -2
  41. data/lib/prawn/security.rb +100 -85
  42. data/lib/prawn/soft_mask.rb +37 -38
  43. data/lib/prawn/stamp.rb +28 -13
  44. data/lib/prawn/text/box.rb +24 -29
  45. data/lib/prawn/text/formatted/arranger.rb +108 -63
  46. data/lib/prawn/text/formatted/box.rb +187 -124
  47. data/lib/prawn/text/formatted/fragment.rb +24 -20
  48. data/lib/prawn/text/formatted/line_wrap.rb +133 -73
  49. data/lib/prawn/text/formatted/parser.rb +147 -127
  50. data/lib/prawn/text/formatted/wrap.rb +48 -35
  51. data/lib/prawn/text/formatted.rb +5 -5
  52. data/lib/prawn/text.rb +103 -68
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +10 -22
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +39 -54
  58. data/manual/basic_concepts/adding_pages.rb +6 -7
  59. data/manual/basic_concepts/basic_concepts.rb +34 -25
  60. data/manual/basic_concepts/creation.rb +10 -11
  61. data/manual/basic_concepts/cursor.rb +4 -5
  62. data/manual/basic_concepts/measurement.rb +8 -9
  63. data/manual/basic_concepts/origin.rb +5 -6
  64. data/manual/basic_concepts/other_cursor_helpers.rb +11 -12
  65. data/manual/basic_concepts/view.rb +48 -0
  66. data/manual/bounding_box/bounding_box.rb +30 -28
  67. data/manual/bounding_box/bounds.rb +12 -13
  68. data/manual/bounding_box/canvas.rb +7 -8
  69. data/manual/bounding_box/creation.rb +6 -7
  70. data/manual/bounding_box/indentation.rb +14 -15
  71. data/manual/bounding_box/nesting.rb +25 -18
  72. data/manual/bounding_box/russian_boxes.rb +18 -18
  73. data/manual/bounding_box/stretchy.rb +12 -14
  74. data/manual/contents.rb +28 -22
  75. data/manual/cover.rb +33 -32
  76. data/manual/document_and_page_options/background.rb +15 -13
  77. data/manual/document_and_page_options/document_and_page_options.rb +24 -22
  78. data/manual/document_and_page_options/metadata.rb +20 -18
  79. data/manual/document_and_page_options/page_margins.rb +18 -20
  80. data/manual/document_and_page_options/page_size.rb +13 -13
  81. data/manual/document_and_page_options/print_scaling.rb +18 -15
  82. data/manual/example_helper.rb +5 -4
  83. data/manual/graphics/blend_mode.rb +52 -0
  84. data/manual/graphics/circle_and_ellipse.rb +4 -5
  85. data/manual/graphics/color.rb +7 -9
  86. data/manual/graphics/common_lines.rb +7 -8
  87. data/manual/graphics/fill_and_stroke.rb +5 -6
  88. data/manual/graphics/fill_rules.rb +12 -11
  89. data/manual/graphics/gradients.rb +27 -21
  90. data/manual/graphics/graphics.rb +46 -40
  91. data/manual/graphics/helper.rb +19 -9
  92. data/manual/graphics/line_width.rb +8 -7
  93. data/manual/graphics/lines_and_curves.rb +8 -9
  94. data/manual/graphics/polygon.rb +6 -8
  95. data/manual/graphics/rectangle.rb +4 -5
  96. data/manual/graphics/rotate.rb +6 -9
  97. data/manual/graphics/scale.rb +14 -13
  98. data/manual/graphics/soft_masks.rb +4 -6
  99. data/manual/graphics/stroke_cap.rb +7 -8
  100. data/manual/graphics/stroke_dash.rb +15 -16
  101. data/manual/graphics/stroke_join.rb +6 -7
  102. data/manual/graphics/translate.rb +10 -10
  103. data/manual/graphics/transparency.rb +7 -9
  104. data/manual/how_to_read_this_manual.rb +8 -9
  105. data/manual/images/absolute_position.rb +6 -7
  106. data/manual/images/fit.rb +7 -8
  107. data/manual/images/horizontal.rb +10 -11
  108. data/manual/images/images.rb +28 -27
  109. data/manual/images/plain_image.rb +5 -6
  110. data/manual/images/scale.rb +9 -10
  111. data/manual/images/vertical.rb +16 -14
  112. data/manual/images/width_and_height.rb +10 -11
  113. data/manual/layout/boxes.rb +10 -11
  114. data/manual/layout/content.rb +9 -10
  115. data/manual/layout/layout.rb +17 -18
  116. data/manual/layout/simple_grid.rb +6 -7
  117. data/manual/outline/add_subsection_to.rb +20 -21
  118. data/manual/outline/insert_section_after.rb +15 -16
  119. data/manual/outline/outline.rb +22 -21
  120. data/manual/outline/sections_and_pages.rb +17 -18
  121. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  122. data/manual/repeatable_content/page_numbering.rb +17 -16
  123. data/manual/repeatable_content/repeatable_content.rb +27 -23
  124. data/manual/repeatable_content/repeater.rb +15 -16
  125. data/manual/repeatable_content/stamp.rb +14 -15
  126. data/manual/security/encryption.rb +8 -11
  127. data/manual/security/permissions.rb +20 -15
  128. data/manual/security/security.rb +18 -18
  129. data/manual/table.rb +16 -0
  130. data/manual/text/alignment.rb +16 -17
  131. data/manual/text/color.rb +12 -12
  132. data/manual/text/column_box.rb +9 -11
  133. data/manual/text/fallback_fonts.rb +25 -21
  134. data/manual/text/font.rb +11 -12
  135. data/manual/text/font_size.rb +13 -14
  136. data/manual/text/font_style.rb +10 -8
  137. data/manual/text/formatted_callbacks.rb +33 -23
  138. data/manual/text/formatted_text.rb +36 -25
  139. data/manual/text/free_flowing_text.rb +22 -23
  140. data/manual/text/inline.rb +18 -19
  141. data/manual/text/kerning_and_character_spacing.rb +14 -15
  142. data/manual/text/leading.rb +7 -8
  143. data/manual/text/line_wrapping.rb +37 -18
  144. data/manual/text/paragraph_indentation.rb +15 -10
  145. data/manual/text/positioned_text.rb +16 -17
  146. data/manual/text/registering_families.rb +27 -24
  147. data/manual/text/rendering_and_color.rb +9 -10
  148. data/manual/text/right_to_left_text.rb +30 -19
  149. data/manual/text/rotation.rb +33 -24
  150. data/manual/text/single_usage.rb +8 -9
  151. data/manual/text/text.rb +56 -54
  152. data/manual/text/text_box_excess.rb +20 -17
  153. data/manual/text/text_box_extensions.rb +18 -15
  154. data/manual/text/text_box_overflow.rb +24 -17
  155. data/manual/text/utf8.rb +12 -13
  156. data/manual/text/win_ansi_charset.rb +28 -25
  157. data/prawn.gemspec +45 -50
  158. data/spec/extensions/encoding_helpers.rb +3 -3
  159. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  160. data/spec/prawn/document/column_box_spec.rb +75 -0
  161. data/spec/prawn/document/security_spec.rb +176 -0
  162. data/spec/prawn/document_annotations_spec.rb +76 -0
  163. data/spec/prawn/document_destinations_spec.rb +15 -0
  164. data/spec/prawn/document_grid_spec.rb +99 -0
  165. data/spec/prawn/document_reference_spec.rb +27 -0
  166. data/spec/prawn/document_span_spec.rb +44 -0
  167. data/spec/prawn/document_spec.rb +805 -0
  168. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  169. data/spec/prawn/font_spec.rb +544 -0
  170. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  171. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  172. data/spec/prawn/graphics_spec.rb +872 -0
  173. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  174. data/spec/prawn/image_handler_spec.rb +53 -0
  175. data/spec/prawn/images/jpg_spec.rb +20 -0
  176. data/spec/prawn/images/png_spec.rb +283 -0
  177. data/spec/prawn/images_spec.rb +229 -0
  178. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  179. data/spec/prawn/outline_spec.rb +512 -0
  180. data/spec/prawn/repeater_spec.rb +166 -0
  181. data/spec/prawn/soft_mask_spec.rb +74 -0
  182. data/spec/prawn/stamp_spec.rb +173 -0
  183. data/spec/prawn/text/box_spec.rb +1110 -0
  184. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  185. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  186. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  187. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  188. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  189. data/spec/prawn/text_draw_text_spec.rb +150 -0
  190. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  191. data/spec/prawn/text_spacing_spec.rb +95 -0
  192. data/spec/prawn/text_spec.rb +603 -0
  193. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  194. data/spec/prawn/transformation_stack_spec.rb +66 -0
  195. data/spec/prawn/view_spec.rb +63 -0
  196. data/spec/prawn_manual_spec.rb +35 -0
  197. data/spec/spec_helper.rb +19 -25
  198. data.tar.gz.sig +0 -0
  199. metadata +113 -276
  200. metadata.gz.sig +0 -0
  201. data/data/encodings/win_ansi.txt +0 -29
  202. data/data/images/16bit.alpha +0 -0
  203. data/data/images/16bit.color +0 -0
  204. data/data/images/16bit.png +0 -0
  205. data/data/images/arrow.png +0 -0
  206. data/data/images/arrow2.png +0 -0
  207. data/data/images/dice.alpha +0 -0
  208. data/data/images/dice.color +0 -0
  209. data/data/images/dice.png +0 -0
  210. data/data/images/dice_interlaced.png +0 -0
  211. data/data/images/fractal.jpg +0 -0
  212. data/data/images/indexed_color.dat +0 -0
  213. data/data/images/indexed_color.png +0 -0
  214. data/data/images/letterhead.jpg +0 -0
  215. data/data/images/license.md +0 -8
  216. data/data/images/page_white_text.alpha +0 -0
  217. data/data/images/page_white_text.color +0 -0
  218. data/data/images/page_white_text.png +0 -0
  219. data/data/images/pigs.jpg +0 -0
  220. data/data/images/prawn.png +0 -0
  221. data/data/images/ruport.png +0 -0
  222. data/data/images/ruport_data.dat +0 -0
  223. data/data/images/ruport_transparent.png +0 -0
  224. data/data/images/ruport_type0.png +0 -0
  225. data/data/images/stef.jpg +0 -0
  226. data/data/images/tru256.bmp +0 -0
  227. data/data/images/web-links.dat +0 -1
  228. data/data/images/web-links.png +0 -0
  229. data/data/pdfs/complex_template.pdf +0 -0
  230. data/data/pdfs/contains_ttf_font.pdf +0 -0
  231. data/data/pdfs/encrypted.pdf +0 -0
  232. data/data/pdfs/form.pdf +1 -819
  233. data/data/pdfs/hexagon.pdf +0 -61
  234. data/data/pdfs/indirect_reference.pdf +0 -86
  235. data/data/pdfs/multipage_template.pdf +0 -127
  236. data/data/pdfs/nested_pages.pdf +0 -118
  237. data/data/pdfs/page_without_mediabox.pdf +0 -193
  238. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  239. data/data/pdfs/two_hexagons.pdf +0 -90
  240. data/data/pdfs/version_1_6.pdf +0 -61
  241. data/data/shift_jis_text.txt +0 -1
  242. data/lib/prawn/document/graphics_state.rb +0 -73
  243. data/lib/prawn/font/afm.rb +0 -247
  244. data/lib/prawn/table/cell/image.rb +0 -69
  245. data/lib/prawn/table/cell/in_table.rb +0 -33
  246. data/lib/prawn/table/cell/span_dummy.rb +0 -93
  247. data/lib/prawn/table/cell/subtable.rb +0 -66
  248. data/lib/prawn/table/cell/text.rb +0 -154
  249. data/lib/prawn/table/cell.rb +0 -772
  250. data/lib/prawn/table/cells.rb +0 -255
  251. data/lib/prawn/table/column_width_calculator.rb +0 -182
  252. data/lib/prawn/table.rb +0 -644
  253. data/manual/table/basic_block.rb +0 -53
  254. data/manual/table/before_rendering_page.rb +0 -26
  255. data/manual/table/cell_border_lines.rb +0 -24
  256. data/manual/table/cell_borders_and_bg.rb +0 -31
  257. data/manual/table/cell_dimensions.rb +0 -30
  258. data/manual/table/cell_text.rb +0 -38
  259. data/manual/table/column_widths.rb +0 -30
  260. data/manual/table/content_and_subtables.rb +0 -39
  261. data/manual/table/creation.rb +0 -27
  262. data/manual/table/filtering.rb +0 -36
  263. data/manual/table/flow_and_header.rb +0 -17
  264. data/manual/table/image_cells.rb +0 -33
  265. data/manual/table/position.rb +0 -29
  266. data/manual/table/row_colors.rb +0 -20
  267. data/manual/table/span.rb +0 -30
  268. data/manual/table/style.rb +0 -22
  269. data/manual/table/table.rb +0 -52
  270. data/manual/table/width.rb +0 -27
  271. data/spec/acceptance/png.rb +0 -25
  272. data/spec/annotations_spec.rb +0 -74
  273. data/spec/bounding_box_spec.rb +0 -510
  274. data/spec/cell_spec.rb +0 -629
  275. data/spec/column_box_spec.rb +0 -65
  276. data/spec/destinations_spec.rb +0 -15
  277. data/spec/document_spec.rb +0 -730
  278. data/spec/extensions/mocha.rb +0 -46
  279. data/spec/font_metric_cache_spec.rb +0 -52
  280. data/spec/font_spec.rb +0 -449
  281. data/spec/formatted_text_arranger_spec.rb +0 -421
  282. data/spec/formatted_text_box_spec.rb +0 -639
  283. data/spec/formatted_text_fragment_spec.rb +0 -298
  284. data/spec/graphics_spec.rb +0 -669
  285. data/spec/grid_spec.rb +0 -96
  286. data/spec/image_handler_spec.rb +0 -54
  287. data/spec/images_spec.rb +0 -153
  288. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  289. data/spec/jpg_spec.rb +0 -25
  290. data/spec/line_wrap_spec.rb +0 -344
  291. data/spec/measurement_units_spec.rb +0 -25
  292. data/spec/outline_spec.rb +0 -430
  293. data/spec/png_spec.rb +0 -237
  294. data/spec/reference_spec.rb +0 -25
  295. data/spec/repeater_spec.rb +0 -160
  296. data/spec/security_spec.rb +0 -158
  297. data/spec/soft_mask_spec.rb +0 -79
  298. data/spec/span_spec.rb +0 -44
  299. data/spec/stamp_spec.rb +0 -160
  300. data/spec/stroke_styles_spec.rb +0 -211
  301. data/spec/table/span_dummy_spec.rb +0 -17
  302. data/spec/table_spec.rb +0 -1527
  303. data/spec/text_at_spec.rb +0 -115
  304. data/spec/text_box_spec.rb +0 -1034
  305. data/spec/text_rendering_mode_spec.rb +0 -45
  306. data/spec/text_spacing_spec.rb +0 -93
  307. data/spec/text_spec.rb +0 -437
  308. data/spec/text_with_inline_formatting_spec.rb +0 -35
  309. data/spec/transparency_spec.rb +0 -91
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # core/text/formatted/arranger.rb : Implements a data structure for 2-stage
4
4
  # processing of lines of formatted text
@@ -10,13 +10,32 @@
10
10
  module Prawn
11
11
  module Text
12
12
  module Formatted #:nodoc:
13
-
14
13
  # @private
15
14
 
16
15
  class Arranger #:nodoc:
16
+ class NotFinalized < StandardError
17
+ DEFAULT_MESSAGE = 'Lines must be finalized'
18
+ MESSAGE_WITH_METHOD = 'Lines must be finalized before calling #%<method>s'
19
+
20
+ def initialize(message = DEFAULT_MESSAGE, method: nil)
21
+ if method && message == DEFAULT_MESSAGE
22
+ super format(MESSAGE_WITH_METHOD, method: method)
23
+ else
24
+ super message
25
+ end
26
+ end
27
+ end
28
+
29
+ class BadFontFamily < StandardError
30
+ def initialize(message = 'Bad font family')
31
+ super
32
+ end
33
+ end
34
+
17
35
  attr_reader :max_line_height
18
36
  attr_reader :max_descender
19
37
  attr_reader :max_ascender
38
+ attr_reader :finalized
20
39
  attr_accessor :consumed
21
40
 
22
41
  # The following present only for testing purposes
@@ -24,7 +43,7 @@ module Prawn
24
43
  attr_reader :fragments
25
44
  attr_reader :current_format_state
26
45
 
27
- def initialize(document, options={})
46
+ def initialize(document, options = {})
28
47
  @document = document
29
48
  @fragments = []
30
49
  @unconsumed = []
@@ -32,46 +51,55 @@ module Prawn
32
51
  end
33
52
 
34
53
  def space_count
35
- if @unfinalized_line
36
- raise "Lines must be finalized before calling #space_count"
54
+ unless finalized
55
+ raise NotFinalized.new(method: 'space_count')
37
56
  end
38
- @fragments.inject(0) do |sum, fragment|
57
+
58
+ @fragments.reduce(0) do |sum, fragment|
39
59
  sum + fragment.space_count
40
60
  end
41
61
  end
42
62
 
43
63
  def line_width
44
- if @unfinalized_line
45
- raise "Lines must be finalized before calling #line_width"
64
+ unless finalized
65
+ raise raise NotFinalized.new(method: 'line_width')
46
66
  end
47
- @fragments.inject(0) do |sum, fragment|
67
+
68
+ @fragments.reduce(0) do |sum, fragment|
48
69
  sum + fragment.width
49
70
  end
50
71
  end
51
72
 
52
73
  def line
53
- if @unfinalized_line
54
- raise "Lines must be finalized before calling #line"
74
+ unless finalized
75
+ raise NotFinalized.new(method: 'line')
55
76
  end
56
- @fragments.collect do |fragment|
77
+
78
+ @fragments.map do |fragment|
79
+ fragment.text.dup.encode(::Encoding::UTF_8)
80
+ rescue ::Encoding::InvalidByteSequenceError,
81
+ ::Encoding::UndefinedConversionError
57
82
  fragment.text.dup.force_encoding(::Encoding::UTF_8)
58
83
  end.join
59
84
  end
60
85
 
61
86
  def finalize_line
62
- @unfinalized_line = false
87
+ @finalized = true
88
+
63
89
  omit_trailing_whitespace_from_line_width
64
90
  @fragments = []
65
91
  @consumed.each do |hash|
66
92
  text = hash[:text]
67
93
  format_state = hash.dup
68
94
  format_state.delete(:text)
69
- fragment = Prawn::Text::Formatted::Fragment.new(text,
70
- format_state,
71
- @document)
95
+ fragment = Prawn::Text::Formatted::Fragment.new(
96
+ text,
97
+ format_state,
98
+ @document
99
+ )
72
100
  @fragments << fragment
73
- set_fragment_measurements(fragment)
74
- set_line_measurement_maximums(fragment)
101
+ self.fragment_measurements = fragment
102
+ self.line_measurement_maximums = fragment
75
103
  end
76
104
  end
77
105
 
@@ -80,13 +108,13 @@ module Prawn
80
108
  @unconsumed = []
81
109
  array.each do |hash|
82
110
  hash[:text].scan(/[^\n]+|\n/) do |line|
83
- @unconsumed << hash.merge(:text => line)
111
+ @unconsumed << hash.merge(text: line)
84
112
  end
85
113
  end
86
114
  end
87
115
 
88
116
  def initialize_line
89
- @unfinalized_line = true
117
+ @finalized = false
90
118
  @max_line_height = 0
91
119
  @max_descender = 0
92
120
  @max_ascender = 0
@@ -96,28 +124,30 @@ module Prawn
96
124
  end
97
125
 
98
126
  def finished?
99
- @unconsumed.length == 0
127
+ @unconsumed.empty?
100
128
  end
101
129
 
102
130
  def next_string
103
- unless @unfinalized_line
104
- raise "Lines must not be finalized when calling #next_string"
131
+ if finalized
132
+ raise NotFinalized.new(method: 'next_string')
105
133
  end
106
- hash = @unconsumed.shift
107
- if hash.nil?
108
- nil
109
- else
110
- @consumed << hash.dup
111
- @current_format_state = hash.dup
134
+
135
+ next_unconsumed_hash = @unconsumed.shift
136
+
137
+ if next_unconsumed_hash
138
+ @consumed << next_unconsumed_hash.dup
139
+ @current_format_state = next_unconsumed_hash.dup
112
140
  @current_format_state.delete(:text)
113
- hash[:text]
141
+
142
+ next_unconsumed_hash[:text]
114
143
  end
115
144
  end
116
145
 
117
146
  def preview_next_string
118
- hash = @unconsumed.first
119
- if hash.nil? then nil
120
- else hash[:text]
147
+ next_unconsumed_hash = @unconsumed.first
148
+
149
+ if next_unconsumed_hash
150
+ next_unconsumed_hash[:text]
121
151
  end
122
152
  end
123
153
 
@@ -135,26 +165,28 @@ module Prawn
135
165
  end
136
166
  end
137
167
 
138
- def apply_font_settings(fragment=nil, &block)
168
+ def apply_font_settings(fragment = nil, &block)
139
169
  if fragment.nil?
140
170
  font = current_format_state[:font]
141
171
  size = current_format_state[:size]
142
172
  character_spacing = current_format_state[:character_spacing] ||
143
- @document.character_spacing
173
+ @document.character_spacing
144
174
  styles = current_format_state[:styles]
145
- font_style = font_style(styles)
146
175
  else
147
176
  font = fragment.font
148
177
  size = fragment.size
149
178
  character_spacing = fragment.character_spacing
150
179
  styles = fragment.styles
151
- font_style = font_style(styles)
152
180
  end
181
+ font_style = font_style(styles)
153
182
 
154
183
  @document.character_spacing(character_spacing) do
155
184
  if font || font_style != :normal
156
- raise "Bad font family" unless @document.font.family
157
- @document.font(font || @document.font.family, :style => font_style) do
185
+ raise BadFontFamily unless @document.font.family
186
+
187
+ @document.font(
188
+ font || @document.font.family, style: font_style
189
+ ) do
158
190
  apply_font_size(size, styles, &block)
159
191
  end
160
192
  else
@@ -163,8 +195,9 @@ module Prawn
163
195
  end
164
196
  end
165
197
 
166
- def update_last_string(printed, unprinted, normalized_soft_hyphen=nil)
198
+ def update_last_string(printed, unprinted, normalized_soft_hyphen = nil)
167
199
  return if printed.nil?
200
+
168
201
  if printed.empty?
169
202
  @consumed.pop
170
203
  else
@@ -175,32 +208,34 @@ module Prawn
175
208
  end
176
209
 
177
210
  unless unprinted.empty?
178
- @unconsumed.unshift(@current_format_state.merge(:text => unprinted))
211
+ @unconsumed.unshift(@current_format_state.merge(text: unprinted))
179
212
  end
180
213
 
181
214
  load_previous_format_state if printed.empty?
182
215
  end
183
216
 
184
217
  def retrieve_fragment
185
- if @unfinalized_line
186
- raise "Lines must be finalized before fragments can be retrieved"
218
+ unless finalized
219
+ raise NotFinalized, 'Lines must be finalized before fragments can be retrieved'
187
220
  end
221
+
188
222
  @fragments.shift
189
223
  end
190
224
 
191
225
  def repack_unretrieved
192
226
  new_unconsumed = []
227
+ # rubocop: disable Lint/AssignmentInCondition
193
228
  while fragment = retrieve_fragment
229
+ # rubocop: enable Lint/AssignmentInCondition
194
230
  fragment.include_trailing_white_space!
195
- new_unconsumed << fragment.format_state.merge(:text => fragment.text)
231
+ new_unconsumed << fragment.format_state.merge(text: fragment.text)
196
232
  end
197
233
  @unconsumed = new_unconsumed.concat(@unconsumed)
198
234
  end
199
235
 
200
236
  def font_style(styles)
201
- if styles.nil?
202
- :normal
203
- elsif styles.include?(:bold) && styles.include?(:italic)
237
+ styles = Array(styles)
238
+ if styles.include?(:bold) && styles.include?(:italic)
204
239
  :bold_italic
205
240
  elsif styles.include?(:bold)
206
241
  :bold
@@ -223,19 +258,20 @@ module Prawn
223
258
  end
224
259
  end
225
260
 
226
- def apply_font_size(size, styles)
261
+ def apply_font_size(size, styles, &block)
227
262
  if subscript?(styles) || superscript?(styles)
228
263
  relative_size = 0.583
229
- if size.nil?
230
- size = @document.font_size * relative_size
231
- else
232
- size = size * relative_size
233
- end
264
+ size =
265
+ if size.nil?
266
+ @document.font_size * relative_size
267
+ else
268
+ size * relative_size
269
+ end
234
270
  end
235
271
  if size.nil?
236
272
  yield
237
273
  else
238
- @document.font_size(size) { yield }
274
+ @document.font_size(size, &block)
239
275
  end
240
276
  end
241
277
 
@@ -267,24 +303,33 @@ module Prawn
267
303
  end
268
304
  end
269
305
 
270
- def set_fragment_measurements(fragment)
306
+ def fragment_measurements=(fragment)
271
307
  apply_font_settings(fragment) do
272
- fragment.width = @document.width_of(fragment.text,
273
- :kerning => @kerning)
308
+ fragment.width = @document.width_of(
309
+ fragment.text,
310
+ kerning: @kerning
311
+ )
274
312
  fragment.line_height = @document.font.height
275
313
  fragment.descender = @document.font.descender
276
314
  fragment.ascender = @document.font.ascender
277
315
  end
278
316
  end
279
317
 
280
- def set_line_measurement_maximums(fragment)
281
- @max_line_height = [defined?(@max_line_height) && @max_line_height, fragment.line_height].compact.max
282
- @max_descender = [defined?(@max_descender) && @max_descender, fragment.descender].compact.max
283
- @max_ascender = [defined?(@max_ascender) && @max_ascender, fragment.ascender].compact.max
318
+ def line_measurement_maximums=(fragment)
319
+ @max_line_height = [
320
+ defined?(@max_line_height) && @max_line_height,
321
+ fragment.line_height
322
+ ].compact.max
323
+ @max_descender = [
324
+ defined?(@max_descender) && @max_descender,
325
+ fragment.descender
326
+ ].compact.max
327
+ @max_ascender = [
328
+ defined?(@max_ascender) && @max_ascender,
329
+ fragment.ascender
330
+ ].compact.max
284
331
  end
285
-
286
332
  end
287
-
288
333
  end
289
334
  end
290
335
  end