prawn 0.13.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 (348) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +10 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -16
  6. data/Rakefile +17 -39
  7. data/lib/prawn/document/bounding_box.rb +85 -42
  8. data/lib/prawn/document/column_box.rb +21 -11
  9. data/lib/prawn/document/internals.rb +40 -147
  10. data/lib/prawn/document/span.rb +25 -17
  11. data/lib/prawn/document.rb +286 -245
  12. data/lib/prawn/encoding.rb +68 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +204 -155
  15. data/lib/prawn/font_metric_cache.rb +25 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +7 -13
  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 +142 -80
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +6 -5
  23. data/lib/prawn/graphics/color.rb +47 -44
  24. data/lib/prawn/graphics/dash.rb +30 -13
  25. data/lib/prawn/graphics/join_style.rb +13 -6
  26. data/lib/prawn/graphics/patterns.rb +221 -90
  27. data/lib/prawn/graphics/transformation.rb +21 -12
  28. data/lib/prawn/graphics/transparency.rb +21 -17
  29. data/lib/prawn/graphics.rb +155 -128
  30. data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
  31. data/lib/prawn/image_handler.rb +16 -2
  32. data/lib/prawn/images/image.rb +4 -2
  33. data/lib/prawn/images/jpg.rb +39 -30
  34. data/lib/prawn/images/png.rb +132 -169
  35. data/lib/prawn/images.rb +70 -62
  36. data/lib/prawn/measurement_extensions.rb +15 -10
  37. data/lib/prawn/measurements.rb +22 -23
  38. data/lib/prawn/outline.rb +301 -13
  39. data/lib/prawn/repeater.rb +19 -17
  40. data/lib/prawn/security/arcfour.rb +54 -0
  41. data/lib/prawn/security.rb +108 -86
  42. data/lib/prawn/soft_mask.rb +40 -41
  43. data/lib/prawn/stamp.rb +29 -12
  44. data/lib/prawn/text/box.rb +27 -29
  45. data/lib/prawn/text/formatted/arranger.rb +110 -67
  46. data/lib/prawn/text/formatted/box.rb +233 -165
  47. data/lib/prawn/text/formatted/fragment.rb +27 -27
  48. data/lib/prawn/text/formatted/line_wrap.rb +137 -97
  49. data/lib/prawn/text/formatted/parser.rb +149 -127
  50. data/lib/prawn/text/formatted/wrap.rb +57 -37
  51. data/lib/prawn/text/formatted.rb +6 -4
  52. data/lib/prawn/text.rb +105 -73
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +11 -21
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +42 -68
  58. data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
  59. data/manual/basic_concepts/adding_pages.rb +9 -10
  60. data/manual/basic_concepts/basic_concepts.rb +33 -24
  61. data/manual/basic_concepts/creation.rb +10 -11
  62. data/manual/basic_concepts/cursor.rb +9 -10
  63. data/manual/basic_concepts/measurement.rb +10 -11
  64. data/manual/basic_concepts/origin.rb +8 -9
  65. data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
  66. data/manual/basic_concepts/view.rb +48 -0
  67. data/manual/bounding_box/bounding_box.rb +31 -29
  68. data/manual/bounding_box/bounds.rb +17 -18
  69. data/manual/bounding_box/canvas.rb +8 -9
  70. data/manual/bounding_box/creation.rb +8 -9
  71. data/manual/bounding_box/indentation.rb +22 -23
  72. data/manual/bounding_box/nesting.rb +32 -25
  73. data/manual/bounding_box/russian_boxes.rb +19 -19
  74. data/manual/bounding_box/stretchy.rb +18 -20
  75. data/manual/contents.rb +35 -0
  76. data/manual/cover.rb +43 -0
  77. data/manual/document_and_page_options/background.rb +16 -14
  78. data/manual/document_and_page_options/document_and_page_options.rb +26 -23
  79. data/manual/document_and_page_options/metadata.rb +21 -19
  80. data/manual/document_and_page_options/page_margins.rb +20 -22
  81. data/manual/document_and_page_options/page_size.rb +15 -15
  82. data/manual/document_and_page_options/print_scaling.rb +23 -0
  83. data/manual/example_helper.rb +5 -408
  84. data/manual/graphics/blend_mode.rb +52 -0
  85. data/manual/graphics/circle_and_ellipse.rb +8 -9
  86. data/manual/graphics/color.rb +11 -13
  87. data/manual/graphics/common_lines.rb +13 -12
  88. data/manual/graphics/fill_and_stroke.rb +10 -11
  89. data/manual/graphics/fill_rules.rb +13 -12
  90. data/manual/graphics/gradients.rb +28 -22
  91. data/manual/graphics/graphics.rb +52 -46
  92. data/manual/graphics/helper.rb +20 -10
  93. data/manual/graphics/line_width.rb +13 -12
  94. data/manual/graphics/lines_and_curves.rb +13 -14
  95. data/manual/graphics/polygon.rb +10 -12
  96. data/manual/graphics/rectangle.rb +7 -8
  97. data/manual/graphics/rotate.rb +9 -12
  98. data/manual/graphics/scale.rb +19 -18
  99. data/manual/graphics/soft_masks.rb +5 -7
  100. data/manual/graphics/stroke_cap.rb +10 -11
  101. data/manual/graphics/stroke_dash.rb +16 -17
  102. data/manual/graphics/stroke_join.rb +10 -11
  103. data/manual/graphics/translate.rb +13 -13
  104. data/manual/graphics/transparency.rb +11 -13
  105. data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
  106. data/manual/images/absolute_position.rb +9 -10
  107. data/manual/images/fit.rb +9 -10
  108. data/manual/images/horizontal.rb +13 -14
  109. data/manual/images/images.rb +31 -30
  110. data/manual/images/plain_image.rb +6 -7
  111. data/manual/images/scale.rb +12 -13
  112. data/manual/images/vertical.rb +19 -17
  113. data/manual/images/width_and_height.rb +13 -14
  114. data/manual/layout/boxes.rb +14 -15
  115. data/manual/layout/content.rb +12 -13
  116. data/manual/layout/layout.rb +19 -20
  117. data/manual/layout/simple_grid.rb +8 -9
  118. data/manual/outline/add_subsection_to.rb +26 -27
  119. data/manual/outline/insert_section_after.rb +19 -20
  120. data/manual/outline/outline.rb +23 -22
  121. data/manual/outline/sections_and_pages.rb +24 -25
  122. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  123. data/manual/repeatable_content/page_numbering.rb +20 -19
  124. data/manual/repeatable_content/repeatable_content.rb +26 -22
  125. data/manual/repeatable_content/repeater.rb +18 -19
  126. data/manual/repeatable_content/stamp.rb +18 -19
  127. data/manual/security/encryption.rb +8 -11
  128. data/manual/security/permissions.rb +20 -15
  129. data/manual/security/security.rb +20 -20
  130. data/manual/table.rb +16 -0
  131. data/manual/text/alignment.rb +17 -18
  132. data/manual/text/color.rb +13 -13
  133. data/manual/text/column_box.rb +10 -12
  134. data/manual/text/fallback_fonts.rb +29 -25
  135. data/manual/text/font.rb +17 -18
  136. data/manual/text/font_size.rb +21 -22
  137. data/manual/text/font_style.rb +12 -10
  138. data/manual/text/formatted_callbacks.rb +36 -26
  139. data/manual/text/formatted_text.rb +41 -34
  140. data/manual/text/free_flowing_text.rb +28 -29
  141. data/manual/text/inline.rb +23 -26
  142. data/manual/text/kerning_and_character_spacing.rb +20 -21
  143. data/manual/text/leading.rb +10 -11
  144. data/manual/text/line_wrapping.rb +40 -21
  145. data/manual/text/paragraph_indentation.rb +17 -12
  146. data/manual/text/positioned_text.rb +19 -20
  147. data/manual/text/registering_families.rb +33 -30
  148. data/manual/text/rendering_and_color.rb +11 -12
  149. data/manual/text/right_to_left_text.rb +31 -20
  150. data/manual/text/rotation.rb +36 -27
  151. data/manual/text/single_usage.rb +13 -14
  152. data/manual/text/text.rb +62 -62
  153. data/manual/text/text_box_excess.rb +22 -19
  154. data/manual/text/text_box_extensions.rb +21 -18
  155. data/manual/text/text_box_overflow.rb +28 -21
  156. data/manual/text/utf8.rb +16 -17
  157. data/manual/text/win_ansi_charset.rb +29 -26
  158. data/prawn.gemspec +45 -43
  159. data/spec/extensions/encoding_helpers.rb +4 -3
  160. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  161. data/spec/prawn/document/column_box_spec.rb +75 -0
  162. data/spec/prawn/document/security_spec.rb +176 -0
  163. data/spec/prawn/document_annotations_spec.rb +76 -0
  164. data/spec/prawn/document_destinations_spec.rb +15 -0
  165. data/spec/prawn/document_grid_spec.rb +99 -0
  166. data/spec/prawn/document_reference_spec.rb +27 -0
  167. data/spec/prawn/document_span_spec.rb +44 -0
  168. data/spec/prawn/document_spec.rb +805 -0
  169. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  170. data/spec/prawn/font_spec.rb +544 -0
  171. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  172. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  173. data/spec/prawn/graphics_spec.rb +872 -0
  174. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  175. data/spec/prawn/image_handler_spec.rb +53 -0
  176. data/spec/prawn/images/jpg_spec.rb +20 -0
  177. data/spec/prawn/images/png_spec.rb +283 -0
  178. data/spec/prawn/images_spec.rb +229 -0
  179. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  180. data/spec/prawn/outline_spec.rb +512 -0
  181. data/spec/prawn/repeater_spec.rb +166 -0
  182. data/spec/prawn/soft_mask_spec.rb +74 -0
  183. data/spec/prawn/stamp_spec.rb +173 -0
  184. data/spec/prawn/text/box_spec.rb +1110 -0
  185. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  186. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  187. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  188. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  189. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  190. data/spec/prawn/text_draw_text_spec.rb +150 -0
  191. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  192. data/spec/prawn/text_spacing_spec.rb +95 -0
  193. data/spec/prawn/text_spec.rb +603 -0
  194. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  195. data/spec/prawn/transformation_stack_spec.rb +66 -0
  196. data/spec/prawn/view_spec.rb +63 -0
  197. data/spec/prawn_manual_spec.rb +35 -0
  198. data/spec/spec_helper.rb +22 -21
  199. data.tar.gz.sig +0 -0
  200. metadata +168 -307
  201. metadata.gz.sig +0 -0
  202. data/README.md +0 -109
  203. data/data/encodings/win_ansi.txt +0 -29
  204. data/data/images/16bit.alpha +0 -0
  205. data/data/images/16bit.dat +0 -0
  206. data/data/images/16bit.png +0 -0
  207. data/data/images/arrow.png +0 -0
  208. data/data/images/arrow2.png +0 -0
  209. data/data/images/barcode_issue.png +0 -0
  210. data/data/images/dice.alpha +0 -0
  211. data/data/images/dice.dat +0 -0
  212. data/data/images/dice.png +0 -0
  213. data/data/images/dice_interlaced.png +0 -0
  214. data/data/images/indexed_color.dat +0 -0
  215. data/data/images/indexed_color.png +0 -0
  216. data/data/images/letterhead.jpg +0 -0
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.dat +0 -0
  219. data/data/images/page_white_text.png +0 -0
  220. data/data/images/pigs.jpg +0 -0
  221. data/data/images/prawn.png +0 -0
  222. data/data/images/ruport.png +0 -0
  223. data/data/images/ruport_data.dat +0 -0
  224. data/data/images/ruport_transparent.png +0 -0
  225. data/data/images/ruport_type0.png +0 -0
  226. data/data/images/stef.jpg +0 -0
  227. data/data/images/tru256.bmp +0 -0
  228. data/data/images/web-links.dat +0 -1
  229. data/data/images/web-links.png +0 -0
  230. data/data/pdfs/complex_template.pdf +0 -0
  231. data/data/pdfs/contains_ttf_font.pdf +0 -0
  232. data/data/pdfs/encrypted.pdf +0 -0
  233. data/data/pdfs/form.pdf +1 -819
  234. data/data/pdfs/hexagon.pdf +0 -61
  235. data/data/pdfs/indirect_reference.pdf +0 -86
  236. data/data/pdfs/multipage_template.pdf +0 -127
  237. data/data/pdfs/nested_pages.pdf +0 -118
  238. data/data/pdfs/page_without_mediabox.pdf +0 -193
  239. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  240. data/data/pdfs/two_hexagons.pdf +0 -90
  241. data/data/pdfs/version_1_6.pdf +0 -61
  242. data/data/shift_jis_text.txt +0 -1
  243. data/lib/pdf/core/annotations.rb +0 -60
  244. data/lib/pdf/core/byte_string.rb +0 -9
  245. data/lib/pdf/core/destinations.rb +0 -90
  246. data/lib/pdf/core/document_state.rb +0 -78
  247. data/lib/pdf/core/filter_list.rb +0 -51
  248. data/lib/pdf/core/filters.rb +0 -36
  249. data/lib/pdf/core/graphics_state.rb +0 -68
  250. data/lib/pdf/core/literal_string.rb +0 -16
  251. data/lib/pdf/core/name_tree.rb +0 -177
  252. data/lib/pdf/core/object_store.rb +0 -320
  253. data/lib/pdf/core/outline.rb +0 -315
  254. data/lib/pdf/core/page.rb +0 -212
  255. data/lib/pdf/core/page_geometry.rb +0 -126
  256. data/lib/pdf/core/pdf_object.rb +0 -124
  257. data/lib/pdf/core/reference.rb +0 -103
  258. data/lib/pdf/core/stream.rb +0 -98
  259. data/lib/pdf/core/text.rb +0 -275
  260. data/lib/pdf/core.rb +0 -35
  261. data/lib/prawn/compatibility.rb +0 -91
  262. data/lib/prawn/document/graphics_state.rb +0 -73
  263. data/lib/prawn/document/snapshot.rb +0 -89
  264. data/lib/prawn/font/afm.rb +0 -203
  265. data/lib/prawn/layout.rb +0 -20
  266. data/lib/prawn/table/cell/image.rb +0 -70
  267. data/lib/prawn/table/cell/in_table.rb +0 -27
  268. data/lib/prawn/table/cell/span_dummy.rb +0 -92
  269. data/lib/prawn/table/cell/subtable.rb +0 -65
  270. data/lib/prawn/table/cell/text.rb +0 -153
  271. data/lib/prawn/table/cell.rb +0 -770
  272. data/lib/prawn/table/cells.rb +0 -295
  273. data/lib/prawn/table.rb +0 -643
  274. data/manual/example_file.rb +0 -116
  275. data/manual/example_package.rb +0 -53
  276. data/manual/example_section.rb +0 -46
  277. data/manual/manual/cover.rb +0 -35
  278. data/manual/manual/foreword.rb +0 -85
  279. data/manual/manual/manual.rb +0 -35
  280. data/manual/syntax_highlight.rb +0 -52
  281. data/manual/table/basic_block.rb +0 -53
  282. data/manual/table/before_rendering_page.rb +0 -26
  283. data/manual/table/cell_border_lines.rb +0 -24
  284. data/manual/table/cell_borders_and_bg.rb +0 -31
  285. data/manual/table/cell_dimensions.rb +0 -30
  286. data/manual/table/cell_text.rb +0 -38
  287. data/manual/table/column_widths.rb +0 -30
  288. data/manual/table/content_and_subtables.rb +0 -39
  289. data/manual/table/creation.rb +0 -27
  290. data/manual/table/filtering.rb +0 -36
  291. data/manual/table/flow_and_header.rb +0 -17
  292. data/manual/table/image_cells.rb +0 -33
  293. data/manual/table/position.rb +0 -29
  294. data/manual/table/row_colors.rb +0 -20
  295. data/manual/table/span.rb +0 -30
  296. data/manual/table/style.rb +0 -22
  297. data/manual/table/table.rb +0 -52
  298. data/manual/table/width.rb +0 -27
  299. data/manual/templates/full_template.rb +0 -25
  300. data/manual/templates/page_template.rb +0 -48
  301. data/manual/templates/templates.rb +0 -27
  302. data/manual/text/group.rb +0 -29
  303. data/spec/acceptance/png.rb +0 -23
  304. data/spec/annotations_spec.rb +0 -74
  305. data/spec/bounding_box_spec.rb +0 -493
  306. data/spec/cell_spec.rb +0 -628
  307. data/spec/column_box_spec.rb +0 -33
  308. data/spec/destinations_spec.rb +0 -15
  309. data/spec/document_spec.rb +0 -761
  310. data/spec/extensions/mocha.rb +0 -44
  311. data/spec/filters_spec.rb +0 -34
  312. data/spec/font_metric_cache_spec.rb +0 -52
  313. data/spec/font_spec.rb +0 -464
  314. data/spec/formatted_text_arranger_spec.rb +0 -421
  315. data/spec/formatted_text_box_spec.rb +0 -650
  316. data/spec/formatted_text_fragment_spec.rb +0 -298
  317. data/spec/graphics_spec.rb +0 -651
  318. data/spec/grid_spec.rb +0 -85
  319. data/spec/image_handler_spec.rb +0 -42
  320. data/spec/images_spec.rb +0 -157
  321. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  322. data/spec/jpg_spec.rb +0 -25
  323. data/spec/line_wrap_spec.rb +0 -333
  324. data/spec/measurement_units_spec.rb +0 -23
  325. data/spec/name_tree_spec.rb +0 -112
  326. data/spec/object_store_spec.rb +0 -170
  327. data/spec/outline_spec.rb +0 -448
  328. data/spec/pdf_object_spec.rb +0 -172
  329. data/spec/png_spec.rb +0 -240
  330. data/spec/reference_spec.rb +0 -82
  331. data/spec/repeater_spec.rb +0 -158
  332. data/spec/security_spec.rb +0 -158
  333. data/spec/snapshot_spec.rb +0 -186
  334. data/spec/soft_mask_spec.rb +0 -117
  335. data/spec/span_spec.rb +0 -44
  336. data/spec/stamp_spec.rb +0 -158
  337. data/spec/stream_spec.rb +0 -58
  338. data/spec/stroke_styles_spec.rb +0 -211
  339. data/spec/table/span_dummy_spec.rb +0 -17
  340. data/spec/table_spec.rb +0 -1355
  341. data/spec/template_spec.rb +0 -351
  342. data/spec/text_at_spec.rb +0 -130
  343. data/spec/text_box_spec.rb +0 -1030
  344. data/spec/text_rendering_mode_spec.rb +0 -45
  345. data/spec/text_spacing_spec.rb +0 -93
  346. data/spec/text_spec.rb +0 -425
  347. data/spec/text_with_inline_formatting_spec.rb +0 -35
  348. data/spec/transparency_spec.rb +0 -89
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # graphics.rb : Implements PDF drawing primitives
4
4
  #
@@ -6,16 +6,16 @@
6
6
  #
7
7
  # This is free software. Please see the LICENSE and COPYING files for details.
8
8
 
9
- require "prawn/graphics/color"
10
- require "prawn/graphics/dash"
11
- require "prawn/graphics/cap_style"
12
- require "prawn/graphics/join_style"
13
- require "prawn/graphics/transparency"
14
- require "prawn/graphics/transformation"
15
- require "prawn/graphics/patterns"
9
+ require_relative 'graphics/blend_mode'
10
+ require_relative 'graphics/color'
11
+ require_relative 'graphics/dash'
12
+ require_relative 'graphics/cap_style'
13
+ require_relative 'graphics/join_style'
14
+ require_relative 'graphics/transparency'
15
+ require_relative 'graphics/transformation'
16
+ require_relative 'graphics/patterns'
16
17
 
17
18
  module Prawn
18
-
19
19
  # Implements the drawing facilities for Prawn::Document.
20
20
  # Use this to draw the most beautiful imaginable things.
21
21
  #
@@ -23,7 +23,7 @@ module Prawn
23
23
  # ruby-pdf.rubyforge.org
24
24
  #
25
25
  module Graphics
26
-
26
+ include BlendMode
27
27
  include Color
28
28
  include Dash
29
29
  include CapStyle
@@ -32,6 +32,8 @@ module Prawn
32
32
  include Transformation
33
33
  include Patterns
34
34
 
35
+ # @group Stable API
36
+
35
37
  #######################################################################
36
38
  # Low level drawing operations must map the point to absolute coords! #
37
39
  #######################################################################
@@ -43,8 +45,8 @@ module Prawn
43
45
  # pdf.move_to(100,50)
44
46
  #
45
47
  def move_to(*point)
46
- x,y = map_to_absolute(point)
47
- add_content("%.3f %.3f m" % [ x, y ])
48
+ xy = PDF::Core.real_params(map_to_absolute(point))
49
+ renderer.add_content("#{xy} m")
48
50
  end
49
51
 
50
52
  # Draws a line from the current drawing position to the specified point.
@@ -54,8 +56,8 @@ module Prawn
54
56
  # pdf.line_to(50,50)
55
57
  #
56
58
  def line_to(*point)
57
- x,y = map_to_absolute(point)
58
- add_content("%.3f %.3f l" % [ x, y ])
59
+ xy = PDF::Core.real_params(map_to_absolute(point))
60
+ renderer.add_content("#{xy} l")
59
61
  end
60
62
 
61
63
  # Draws a Bezier curve from the current drawing position to the
@@ -63,14 +65,18 @@ module Prawn
63
65
  #
64
66
  # pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]
65
67
  #
66
- def curve_to(dest,options={})
67
- options[:bounds] or raise Prawn::Errors::InvalidGraphicsPath,
68
- "Bounding points for bezier curve must be specified "+
69
- "as :bounds => [[x1,y1],[x2,y2]]"
68
+ def curve_to(dest, options = {})
69
+ options[:bounds] || raise(
70
+ Prawn::Errors::InvalidGraphicsPath,
71
+ 'Bounding points for bezier curve must be specified ' \
72
+ 'as :bounds => [[x1,y1],[x2,y2]]'
73
+ )
74
+
75
+ curve_points = PDF::Core.real_params(
76
+ (options[:bounds] << dest).flat_map { |e| map_to_absolute(e) }
77
+ )
70
78
 
71
- curve_points = (options[:bounds] << dest).map { |e| map_to_absolute(e) }
72
- add_content("%.3f %.3f %.3f %.3f %.3f %.3f c" %
73
- curve_points.flatten )
79
+ renderer.add_content("#{curve_points} c")
74
80
  end
75
81
 
76
82
  # Draws a rectangle given <tt>point</tt>, <tt>width</tt> and
@@ -78,9 +84,11 @@ module Prawn
78
84
  #
79
85
  # pdf.rectangle [300,300], 100, 200
80
86
  #
81
- def rectangle(point,width,height)
82
- x,y = map_to_absolute(point)
83
- add_content("%.3f %.3f %.3f %.3f re" % [ x, y - height, width, height ])
87
+ def rectangle(point, width, height)
88
+ x, y = map_to_absolute(point)
89
+ box = PDF::Core.real_params([x, y - height, width, height])
90
+
91
+ renderer.add_content("#{box} re")
84
92
  end
85
93
 
86
94
  # Draws a rounded rectangle given <tt>point</tt>, <tt>width</tt> and
@@ -89,12 +97,13 @@ module Prawn
89
97
  #
90
98
  # pdf.rounded_rectangle [300,300], 100, 200, 10
91
99
  #
92
- def rounded_rectangle(point,width,height,radius)
100
+ def rounded_rectangle(point, width, height, radius)
93
101
  x, y = point
94
- rounded_polygon(radius, point, [x + width, y], [x + width, y - height], [x, y - height])
102
+ rounded_polygon(
103
+ radius, point, [x + width, y], [x + width, y - height], [x, y - height]
104
+ )
95
105
  end
96
106
 
97
-
98
107
  ###########################################################
99
108
  # Higher level functions: May use relative coords #
100
109
  ###########################################################
@@ -114,7 +123,7 @@ module Prawn
114
123
  # pdf.line_width(5)
115
124
  # pdf.line_width #=> 5
116
125
  #
117
- def line_width(width=nil)
126
+ def line_width(width = nil)
118
127
  if width
119
128
  self.line_width = width
120
129
  else
@@ -129,7 +138,7 @@ module Prawn
129
138
  # pdf.line(100,100,200,250)
130
139
  #
131
140
  def line(*points)
132
- x0,y0,x1,y1 = points.flatten
141
+ x0, y0, x1, y1 = points.flatten
133
142
  move_to(x0, y0)
134
143
  line_to(x1, y1)
135
144
  end
@@ -140,14 +149,10 @@ module Prawn
140
149
  # # draw a line from [25, 75] to [100, 75]
141
150
  # horizontal_line 25, 100, :at => 75
142
151
  #
143
- def horizontal_line(x1,x2,options={})
144
- if options[:at]
145
- y1 = options[:at]
146
- else
147
- y1 = y - bounds.absolute_bottom
148
- end
152
+ def horizontal_line(x1, x2, options = {})
153
+ y1 = options[:at] || y - bounds.absolute_bottom
149
154
 
150
- line(x1,y1,x2,y1)
155
+ line(x1, y1, x2, y1)
151
156
  end
152
157
 
153
158
  # Draws a horizontal line from the left border to the right border of the
@@ -162,8 +167,8 @@ module Prawn
162
167
  # # draw a line from [25, 100] to [25, 300]
163
168
  # vertical_line 100, 300, :at => 25
164
169
  #
165
- def vertical_line(y1,y2,params)
166
- line(params[:at],y1,params[:at],y2)
170
+ def vertical_line(y1, y2, params)
171
+ line(params[:at], y1, params[:at], y2)
167
172
  end
168
173
 
169
174
  # Draws a Bezier curve between two points, bounded by two additional
@@ -171,9 +176,9 @@ module Prawn
171
176
  #
172
177
  # pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]
173
178
  #
174
- def curve(origin,dest, options={})
179
+ def curve(origin, dest, options = {})
175
180
  move_to(*origin)
176
- curve_to(dest,options)
181
+ curve_to(dest, options)
177
182
  end
178
183
 
179
184
  # This constant is used to approximate a symmetrical arc using a cubic
@@ -181,16 +186,9 @@ module Prawn
181
186
  #
182
187
  KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0)
183
188
 
184
- # <b>DEPRECATED:</b> Please use <tt>circle</tt> instead.
185
- def circle_at(point, options)
186
- warn "[DEPRECATION] 'circle_at' is deprecated in favor of 'circle'. " +
187
- "'circle_at' will be removed in release 1.1"
188
- circle(point, options[:radius])
189
- end
190
-
191
- # Draws a circle of radius <tt>radius</tt> with the centre-point at <tt>point</tt>
192
- # as a complete subpath. The drawing point will be moved to the
193
- # centre-point upon completion of the drawing the circle.
189
+ # Draws a circle of radius <tt>radius</tt> with the centre-point at
190
+ # <tt>point</tt> as a complete subpath. The drawing point will be moved to
191
+ # the centre-point upon completion of the drawing the circle.
194
192
  #
195
193
  # pdf.circle [100,100], 25
196
194
  #
@@ -198,43 +196,36 @@ module Prawn
198
196
  ellipse(center, radius, radius)
199
197
  end
200
198
 
201
- # <b>DEPRECATED:</b> Please use <tt>ellipse</tt> instead.
202
- def ellipse_at(point, r1, r2=r1)
203
- warn "[DEPRECATION] 'ellipse_at' is deprecated in favor of 'ellipse'. " +
204
- "'ellipse_at' will be removed in release 1.1"
205
- ellipse(point, r1, r2)
206
- end
207
-
208
- # Draws an ellipse of +x+ radius <tt>r1</tt> and +y+ radius <tt>r2</tt>
209
- # with the centre-point at <tt>point</tt> as a complete subpath. The
210
- # drawing point will be moved to the centre-point upon completion of the
211
- # drawing the ellipse.
199
+ # Draws an ellipse of +x+ radius <tt>radius1</tt> and +y+ radius
200
+ # <tt>radius2</tt> with the centre-point at <tt>point</tt> as a complete
201
+ # subpath. The drawing point will be moved to the centre-point upon
202
+ # completion of the drawing the ellipse.
212
203
  #
213
204
  # # draws an ellipse with x-radius 25 and y-radius 50
214
205
  # pdf.ellipse [100,100], 25, 50
215
206
  #
216
- def ellipse(point, r1, r2 = r1)
207
+ def ellipse(point, radius1, radius2 = radius1)
217
208
  x, y = point
218
- l1 = r1 * KAPPA
219
- l2 = r2 * KAPPA
209
+ l1 = radius1 * KAPPA
210
+ l2 = radius2 * KAPPA
220
211
 
221
- move_to(x + r1, y)
212
+ move_to(x + radius1, y)
222
213
 
223
214
  # Upper right hand corner
224
- curve_to [x, y + r2],
225
- :bounds => [[x + r1, y + l2], [x + l1, y + r2]]
215
+ curve_to [x, y + radius2],
216
+ bounds: [[x + radius1, y + l2], [x + l1, y + radius2]]
226
217
 
227
218
  # Upper left hand corner
228
- curve_to [x - r1, y],
229
- :bounds => [[x - l1, y + r2], [x - r1, y + l2]]
219
+ curve_to [x - radius1, y],
220
+ bounds: [[x - l1, y + radius2], [x - radius1, y + l2]]
230
221
 
231
222
  # Lower left hand corner
232
- curve_to [x, y - r2],
233
- :bounds => [[x - r1, y - l2], [x - l1, y - r2]]
223
+ curve_to [x, y - radius2],
224
+ bounds: [[x - radius1, y - l2], [x - l1, y - radius2]]
234
225
 
235
226
  # Lower right hand corner
236
- curve_to [x + r1, y],
237
- :bounds => [[x + l1, y - r2], [x + r1, y - l2]]
227
+ curve_to [x + radius1, y],
228
+ bounds: [[x + l1, y - radius2], [x + radius1, y - l2]]
238
229
 
239
230
  move_to(x, y)
240
231
  end
@@ -250,36 +241,47 @@ module Prawn
250
241
  line_to(*point)
251
242
  end
252
243
  # close the path
253
- add_content "h"
244
+ renderer.add_content 'h'
254
245
  end
255
246
 
256
- # Draws a rounded polygon from specified points using the radius to define bezier curves
247
+ # Draws a rounded polygon from specified points using the radius to define
248
+ # bezier curves
257
249
  #
258
- # # draws a rounded filled in polygon
259
- # pdf.fill_and_stroke_rounded_polygon(10, [100, 250], [200, 300], [300, 250],
260
- # [300, 150], [200, 100], [100, 150])
250
+ # # draws a rounded filled in polygon
251
+ # pdf.fill_and_stroke_rounded_polygon(
252
+ # 10, [100, 250], [200, 300], [300, 250], [300, 150], [200, 100],
253
+ # [100, 150]
254
+ # )
261
255
  def rounded_polygon(radius, *points)
262
256
  move_to point_on_line(radius, points[1], points[0])
263
257
  sides = points.size
264
258
  points << points[0] << points[1]
265
- (sides).times do |i|
259
+ sides.times do |i|
266
260
  rounded_vertex(radius, points[i], points[i + 1], points[i + 2])
267
261
  end
268
262
  # close the path
269
- add_content "h"
263
+ renderer.add_content 'h'
270
264
  end
271
265
 
272
-
273
- # Creates a rounded vertex for a line segment used for building a rounded polygon
274
- # requires a radius to define bezier curve and three points. The first two points define
275
- # the line segment and the third point helps define the curve for the vertex.
266
+ # Creates a rounded vertex for a line segment used for building a rounded
267
+ # polygon requires a radius to define bezier curve and three points. The
268
+ # first two points define the line segment and the third point helps define
269
+ # the curve for the vertex.
276
270
  def rounded_vertex(radius, *points)
277
- radial_point_1 = point_on_line(radius, points[0], points[1])
278
- bezier_point_1 = point_on_line((radius - radius*KAPPA), points[0], points[1] )
279
- radial_point_2 = point_on_line(radius, points[2], points[1])
280
- bezier_point_2 = point_on_line((radius - radius*KAPPA), points[2], points[1])
281
- line_to(radial_point_1)
282
- curve_to(radial_point_2, :bounds => [bezier_point_1, bezier_point_2])
271
+ radial_point1 = point_on_line(radius, points[0], points[1])
272
+ bezier_point1 = point_on_line(
273
+ (radius - radius * KAPPA),
274
+ points[0],
275
+ points[1]
276
+ )
277
+ radial_point2 = point_on_line(radius, points[2], points[1])
278
+ bezier_point2 = point_on_line(
279
+ (radius - radius * KAPPA),
280
+ points[2],
281
+ points[1]
282
+ )
283
+ line_to(radial_point1)
284
+ curve_to(radial_point2, bounds: [bezier_point1, bezier_point2])
283
285
  end
284
286
 
285
287
  # Strokes the current path. If a block is provided, yields to the block
@@ -287,7 +289,7 @@ module Prawn
287
289
  #
288
290
  def stroke
289
291
  yield if block_given?
290
- add_content "S"
292
+ renderer.add_content 'S'
291
293
  end
292
294
 
293
295
  # Closes and strokes the current path. If a block is provided, yields to
@@ -295,7 +297,7 @@ module Prawn
295
297
  #
296
298
  def close_and_stroke
297
299
  yield if block_given?
298
- add_content "s"
300
+ renderer.add_content 's'
299
301
  end
300
302
 
301
303
  # Draws and strokes a rectangle represented by the current bounding box
@@ -330,38 +332,56 @@ module Prawn
330
332
  #
331
333
  def stroke_axis(options = {})
332
334
  options = {
333
- :at => [0,0],
334
- :height => bounds.height.to_i - (options[:at] || [0,0])[1],
335
- :width => bounds.width.to_i - (options[:at] || [0,0])[0],
336
- :step_length => 100,
337
- :negative_axes_length => 20,
338
- :color => "000000",
335
+ at: [0, 0],
336
+ height: bounds.height.to_i - (options[:at] || [0, 0])[1],
337
+ width: bounds.width.to_i - (options[:at] || [0, 0])[0],
338
+ step_length: 100,
339
+ negative_axes_length: 20,
340
+ color: '000000'
339
341
  }.merge(options)
340
342
 
341
- Prawn.verify_options([:at, :width, :height, :step_length,
342
- :negative_axes_length, :color], options)
343
+ Prawn.verify_options(
344
+ %i[at width height step_length negative_axes_length color],
345
+ options
346
+ )
343
347
 
344
348
  save_graphics_state do
345
349
  fill_color(options[:color])
346
350
  stroke_color(options[:color])
347
351
 
348
- dash(1, :space => 4)
349
- stroke_horizontal_line(options[:at][0] - options[:negative_axes_length],
350
- options[:at][0] + options[:width], :at => options[:at][1])
351
- stroke_vertical_line(options[:at][1] - options[:negative_axes_length],
352
- options[:at][1] + options[:height], :at => options[:at][0])
352
+ dash(1, space: 4)
353
+ stroke_horizontal_line(
354
+ options[:at][0] - options[:negative_axes_length],
355
+ options[:at][0] + options[:width],
356
+ at: options[:at][1]
357
+ )
358
+ stroke_vertical_line(
359
+ options[:at][1] - options[:negative_axes_length],
360
+ options[:at][1] + options[:height],
361
+ at: options[:at][0]
362
+ )
353
363
  undash
354
364
 
355
365
  fill_circle(options[:at], 1)
356
366
 
357
- (options[:step_length]..options[:width]).step(options[:step_length]) do |point|
367
+ (options[:step_length]..options[:width])
368
+ .step(options[:step_length]) do |point|
358
369
  fill_circle([options[:at][0] + point, options[:at][1]], 1)
359
- draw_text(point, :at => [options[:at][0] + point - 5, options[:at][1] - 10], :size => 7)
370
+ draw_text(
371
+ point,
372
+ at: [options[:at][0] + point - 5, options[:at][1] - 10],
373
+ size: 7
374
+ )
360
375
  end
361
376
 
362
- (options[:step_length]..options[:height]).step(options[:step_length]) do |point|
377
+ (options[:step_length]..options[:height])
378
+ .step(options[:step_length]) do |point|
363
379
  fill_circle([options[:at][0], options[:at][1] + point], 1)
364
- draw_text(point, :at => [options[:at][0] - 17, options[:at][1] + point - 2], :size => 7)
380
+ draw_text(
381
+ point,
382
+ at: [options[:at][0] - 17, options[:at][1] + point - 2],
383
+ size: 7
384
+ )
365
385
  end
366
386
  end
367
387
  end
@@ -373,9 +393,9 @@ module Prawn
373
393
  # will be used. See the PDF reference, "Graphics -> Path Construction and
374
394
  # Painting -> Clipping Path Operators" for details on the difference.
375
395
  #
376
- def fill(options={})
396
+ def fill(options = {})
377
397
  yield if block_given?
378
- add_content(options[:fill_rule] == :even_odd ? "f*" : "f")
398
+ renderer.add_content(options[:fill_rule] == :even_odd ? 'f*' : 'f')
379
399
  end
380
400
 
381
401
  # Closes, fills, and strokes the current path. If a block is provided,
@@ -387,15 +407,15 @@ module Prawn
387
407
  # will be used. See the PDF reference, "Graphics -> Path Construction and
388
408
  # Painting -> Clipping Path Operators" for details on the difference.
389
409
  #
390
- def fill_and_stroke(options={})
410
+ def fill_and_stroke(options = {})
391
411
  yield if block_given?
392
- add_content(options[:fill_rule] == :even_odd ? "b*" : "b")
412
+ renderer.add_content(options[:fill_rule] == :even_odd ? 'b*' : 'b')
393
413
  end
394
414
 
395
415
  # Closes the current path.
396
416
  #
397
417
  def close_path
398
- add_content "h"
418
+ renderer.add_content 'h'
399
419
  end
400
420
 
401
421
  ##
@@ -604,12 +624,20 @@ module Prawn
604
624
  # :call-seq:
605
625
  # fill_and_stroke_rounded_polygon(radius, *points)
606
626
 
607
- ops = %w{fill stroke fill_and_stroke}
608
- shapes = %w{line_to curve_to rectangle rounded_rectangle line horizontal_line horizontal_rule vertical_line
609
- curve circle_at circle ellipse_at ellipse polygon rounded_polygon rounded_vertex}
627
+ ops = %w[fill stroke fill_and_stroke]
628
+ shapes = %w[
629
+ line_to curve_to rectangle rounded_rectangle line horizontal_line
630
+ horizontal_rule vertical_line curve circle_at circle ellipse_at ellipse
631
+ polygon rounded_polygon rounded_vertex
632
+ ]
610
633
 
611
- ops.product(shapes).each do |operation,shape|
612
- class_eval "def #{operation}_#{shape}(*args); #{shape}(*args); #{operation}; end"
634
+ ops.product(shapes).each do |operation, shape|
635
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
636
+ def #{operation}_#{shape}(*args) # def fill_polygon(*args)
637
+ #{shape}(*args) # polygon(*args)
638
+ #{operation} # fill
639
+ end # end
640
+ METHOD
613
641
  end
614
642
 
615
643
  private
@@ -623,11 +651,11 @@ module Prawn
623
651
  end
624
652
 
625
653
  def write_line_width
626
- add_content("#{current_line_width} w")
654
+ renderer.add_content("#{current_line_width} w")
627
655
  end
628
656
 
629
657
  def map_to_absolute(*point)
630
- x,y = point.flatten
658
+ x, y = point.flatten
631
659
  [@bounding_box.absolute_left + x, @bounding_box.absolute_bottom + y]
632
660
  end
633
661
 
@@ -636,19 +664,18 @@ module Prawn
636
664
  end
637
665
 
638
666
  def degree_to_rad(angle)
639
- angle * Math::PI / 180
667
+ angle * Math::PI / 180
640
668
  end
641
669
 
642
- # Returns the coordinates for a point on a line that is a given distance away from the second
643
- # point defining the line segement
670
+ # Returns the coordinates for a point on a line that is a given distance
671
+ # away from the second point defining the line segement
644
672
  def point_on_line(distance_from_end, *points)
645
- x0,y0,x1,y1 = points.flatten
673
+ x0, y0, x1, y1 = points.flatten
646
674
  length = Math.sqrt((x1 - x0)**2 + (y1 - y0)**2)
647
675
  p = (length - distance_from_end) / length
648
- xr = x0 + p*(x1 - x0)
649
- yr = y0 + p*(y1 - y0)
676
+ xr = x0 + p * (x1 - x0)
677
+ yr = y0 + p * (y1 - y0)
650
678
  [xr, yr]
651
679
  end
652
-
653
680
  end
654
681
  end