prawn 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (278) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +0 -0
  4. data/Gemfile +1 -9
  5. data/Rakefile +12 -22
  6. data/lib/prawn.rb +29 -48
  7. data/lib/prawn/document.rb +148 -123
  8. data/lib/prawn/document/bounding_box.rb +33 -26
  9. data/lib/prawn/document/column_box.rb +5 -7
  10. data/lib/prawn/document/internals.rb +6 -6
  11. data/lib/prawn/document/span.rb +20 -17
  12. data/lib/prawn/encoding.rb +65 -67
  13. data/lib/prawn/errors.rb +10 -7
  14. data/lib/prawn/font.rb +78 -62
  15. data/lib/prawn/font/afm.rb +93 -66
  16. data/lib/prawn/font/dfont.rb +2 -10
  17. data/lib/prawn/font/ttc.rb +34 -0
  18. data/lib/prawn/font/ttf.rb +73 -65
  19. data/lib/prawn/font_metric_cache.rb +9 -8
  20. data/lib/prawn/graphics.rb +110 -70
  21. data/lib/prawn/graphics/blend_mode.rb +7 -8
  22. data/lib/prawn/graphics/cap_style.rb +2 -4
  23. data/lib/prawn/graphics/color.rb +23 -26
  24. data/lib/prawn/graphics/dash.rb +22 -12
  25. data/lib/prawn/graphics/join_style.rb +8 -4
  26. data/lib/prawn/graphics/patterns.rb +185 -96
  27. data/lib/prawn/graphics/transformation.rb +11 -9
  28. data/lib/prawn/graphics/transparency.rb +15 -13
  29. data/lib/prawn/grid.rb +20 -20
  30. data/lib/prawn/image_handler.rb +4 -6
  31. data/lib/prawn/images.rb +22 -15
  32. data/lib/prawn/images/image.rb +0 -1
  33. data/lib/prawn/images/jpg.rb +26 -22
  34. data/lib/prawn/images/png.rb +60 -57
  35. data/lib/prawn/measurement_extensions.rb +8 -9
  36. data/lib/prawn/measurements.rb +14 -15
  37. data/lib/prawn/outline.rb +96 -78
  38. data/lib/prawn/repeater.rb +12 -10
  39. data/lib/prawn/security.rb +66 -48
  40. data/lib/prawn/security/arcfour.rb +1 -3
  41. data/lib/prawn/soft_mask.rb +23 -25
  42. data/lib/prawn/stamp.rb +16 -12
  43. data/lib/prawn/text.rb +59 -45
  44. data/lib/prawn/text/box.rb +9 -8
  45. data/lib/prawn/text/formatted.rb +4 -6
  46. data/lib/prawn/text/formatted/arranger.rb +51 -30
  47. data/lib/prawn/text/formatted/box.rb +112 -88
  48. data/lib/prawn/text/formatted/fragment.rb +10 -15
  49. data/lib/prawn/text/formatted/line_wrap.rb +118 -61
  50. data/lib/prawn/text/formatted/parser.rb +134 -110
  51. data/lib/prawn/text/formatted/wrap.rb +42 -32
  52. data/lib/prawn/transformation_stack.rb +3 -4
  53. data/lib/prawn/utilities.rb +6 -21
  54. data/lib/prawn/version.rb +1 -3
  55. data/lib/prawn/view.rb +4 -2
  56. data/manual/basic_concepts/adding_pages.rb +4 -7
  57. data/manual/basic_concepts/basic_concepts.rb +29 -22
  58. data/manual/basic_concepts/creation.rb +8 -11
  59. data/manual/basic_concepts/cursor.rb +2 -5
  60. data/manual/basic_concepts/measurement.rb +3 -6
  61. data/manual/basic_concepts/origin.rb +3 -6
  62. data/manual/basic_concepts/other_cursor_helpers.rb +9 -12
  63. data/manual/basic_concepts/view.rb +20 -16
  64. data/manual/bounding_box/bounding_box.rb +27 -24
  65. data/manual/bounding_box/bounds.rb +9 -12
  66. data/manual/bounding_box/canvas.rb +2 -5
  67. data/manual/bounding_box/creation.rb +4 -7
  68. data/manual/bounding_box/indentation.rb +12 -15
  69. data/manual/bounding_box/nesting.rb +22 -17
  70. data/manual/bounding_box/russian_boxes.rb +8 -9
  71. data/manual/bounding_box/stretchy.rb +10 -13
  72. data/manual/contents.rb +26 -22
  73. data/manual/cover.rb +22 -20
  74. data/manual/document_and_page_options/background.rb +9 -13
  75. data/manual/document_and_page_options/document_and_page_options.rb +23 -20
  76. data/manual/document_and_page_options/metadata.rb +16 -16
  77. data/manual/document_and_page_options/page_margins.rb +16 -20
  78. data/manual/document_and_page_options/page_size.rb +11 -12
  79. data/manual/document_and_page_options/print_scaling.rb +15 -15
  80. data/manual/example_helper.rb +2 -4
  81. data/manual/graphics/blend_mode.rb +10 -9
  82. data/manual/graphics/circle_and_ellipse.rb +2 -5
  83. data/manual/graphics/color.rb +5 -9
  84. data/manual/graphics/common_lines.rb +5 -8
  85. data/manual/graphics/fill_and_stroke.rb +2 -5
  86. data/manual/graphics/fill_rules.rb +7 -10
  87. data/manual/graphics/gradients.rb +25 -21
  88. data/manual/graphics/graphics.rb +49 -43
  89. data/manual/graphics/helper.rb +10 -9
  90. data/manual/graphics/line_width.rb +5 -7
  91. data/manual/graphics/lines_and_curves.rb +5 -8
  92. data/manual/graphics/polygon.rb +4 -8
  93. data/manual/graphics/rectangle.rb +2 -5
  94. data/manual/graphics/rotate.rb +4 -7
  95. data/manual/graphics/scale.rb +12 -15
  96. data/manual/graphics/soft_masks.rb +1 -4
  97. data/manual/graphics/stroke_cap.rb +3 -6
  98. data/manual/graphics/stroke_dash.rb +9 -12
  99. data/manual/graphics/stroke_join.rb +2 -5
  100. data/manual/graphics/translate.rb +7 -10
  101. data/manual/graphics/transparency.rb +5 -8
  102. data/manual/how_to_read_this_manual.rb +4 -6
  103. data/manual/images/absolute_position.rb +4 -7
  104. data/manual/images/fit.rb +5 -8
  105. data/manual/images/horizontal.rb +6 -9
  106. data/manual/images/images.rb +25 -23
  107. data/manual/images/plain_image.rb +3 -6
  108. data/manual/images/scale.rb +7 -10
  109. data/manual/images/vertical.rb +10 -13
  110. data/manual/images/width_and_height.rb +8 -11
  111. data/manual/layout/boxes.rb +3 -6
  112. data/manual/layout/content.rb +5 -8
  113. data/manual/layout/layout.rb +16 -16
  114. data/manual/layout/simple_grid.rb +4 -7
  115. data/manual/outline/add_subsection_to.rb +18 -21
  116. data/manual/outline/insert_section_after.rb +13 -16
  117. data/manual/outline/outline.rb +19 -17
  118. data/manual/outline/sections_and_pages.rb +15 -18
  119. data/manual/repeatable_content/alternate_page_numbering.rb +19 -17
  120. data/manual/repeatable_content/page_numbering.rb +15 -16
  121. data/manual/repeatable_content/repeatable_content.rb +23 -19
  122. data/manual/repeatable_content/repeater.rb +12 -15
  123. data/manual/repeatable_content/stamp.rb +12 -15
  124. data/manual/security/encryption.rb +7 -10
  125. data/manual/security/permissions.rb +17 -14
  126. data/manual/security/security.rb +17 -16
  127. data/manual/table.rb +2 -4
  128. data/manual/text/alignment.rb +14 -17
  129. data/manual/text/color.rb +10 -11
  130. data/manual/text/column_box.rb +5 -8
  131. data/manual/text/fallback_fonts.rb +23 -21
  132. data/manual/text/font.rb +9 -12
  133. data/manual/text/font_size.rb +11 -14
  134. data/manual/text/font_style.rb +4 -7
  135. data/manual/text/formatted_callbacks.rb +23 -21
  136. data/manual/text/formatted_text.rb +31 -25
  137. data/manual/text/free_flowing_text.rb +18 -21
  138. data/manual/text/inline.rb +16 -19
  139. data/manual/text/kerning_and_character_spacing.rb +12 -15
  140. data/manual/text/leading.rb +5 -8
  141. data/manual/text/line_wrapping.rb +33 -17
  142. data/manual/text/paragraph_indentation.rb +11 -14
  143. data/manual/text/positioned_text.rb +13 -16
  144. data/manual/text/registering_families.rb +16 -19
  145. data/manual/text/rendering_and_color.rb +7 -10
  146. data/manual/text/right_to_left_text.rb +24 -19
  147. data/manual/text/rotation.rb +26 -23
  148. data/manual/text/single_usage.rb +6 -9
  149. data/manual/text/text.rb +56 -52
  150. data/manual/text/text_box_excess.rb +18 -17
  151. data/manual/text/text_box_extensions.rb +16 -15
  152. data/manual/text/text_box_overflow.rb +15 -18
  153. data/manual/text/utf8.rb +9 -12
  154. data/manual/text/win_ansi_charset.rb +18 -19
  155. data/prawn.gemspec +37 -27
  156. data/spec/extensions/encoding_helpers.rb +0 -2
  157. data/spec/manual_spec.rb +33 -0
  158. data/spec/prawn/document/bounding_box_spec.rb +546 -0
  159. data/spec/prawn/document/column_box_spec.rb +73 -0
  160. data/spec/prawn/document/security_spec.rb +173 -0
  161. data/spec/prawn/document_annotations_spec.rb +74 -0
  162. data/spec/prawn/document_destinations_spec.rb +13 -0
  163. data/spec/prawn/document_grid_spec.rb +96 -0
  164. data/spec/prawn/document_reference_spec.rb +25 -0
  165. data/spec/prawn/document_span_spec.rb +34 -0
  166. data/spec/prawn/document_spec.rb +751 -0
  167. data/spec/prawn/font_metric_cache_spec.rb +52 -0
  168. data/spec/prawn/font_spec.rb +513 -0
  169. data/spec/prawn/graphics/blend_mode_spec.rb +61 -0
  170. data/spec/prawn/graphics/transparency_spec.rb +79 -0
  171. data/spec/prawn/graphics_spec.rb +817 -0
  172. data/spec/prawn/graphics_stroke_styles_spec.rb +227 -0
  173. data/spec/{image_handler_spec.rb → prawn/image_handler_spec.rb} +13 -15
  174. data/spec/prawn/images/jpg_spec.rb +18 -0
  175. data/spec/prawn/images/png_spec.rb +281 -0
  176. data/spec/prawn/images_spec.rb +170 -0
  177. data/spec/prawn/measurements_extensions_spec.rb +22 -0
  178. data/spec/prawn/outline_spec.rb +408 -0
  179. data/spec/prawn/repeater_spec.rb +163 -0
  180. data/spec/prawn/soft_mask_spec.rb +72 -0
  181. data/spec/prawn/stamp_spec.rb +168 -0
  182. data/spec/prawn/text/box_spec.rb +1113 -0
  183. data/spec/prawn/text/formatted/arranger_spec.rb +464 -0
  184. data/spec/prawn/text/formatted/box_spec.rb +825 -0
  185. data/spec/prawn/text/formatted/fragment_spec.rb +341 -0
  186. data/spec/prawn/text/formatted/line_wrap_spec.rb +491 -0
  187. data/spec/prawn/text/formatted/parser_spec.rb +667 -0
  188. data/spec/prawn/text_draw_text_spec.rb +147 -0
  189. data/spec/prawn/text_rendering_mode_spec.rb +42 -0
  190. data/spec/prawn/text_spacing_spec.rb +93 -0
  191. data/spec/prawn/text_spec.rb +601 -0
  192. data/spec/prawn/text_with_inline_formatting_spec.rb +33 -0
  193. data/spec/{transformation_stack_spec.rb → prawn/transformation_stack_spec.rb} +21 -20
  194. data/spec/prawn/view_spec.rb +45 -0
  195. data/spec/spec_helper.rb +16 -16
  196. metadata +96 -151
  197. metadata.gz.sig +1 -0
  198. data/data/images/16bit.alpha +0 -0
  199. data/data/images/16bit.color +0 -0
  200. data/data/images/16bit.png +0 -0
  201. data/data/images/arrow.png +0 -0
  202. data/data/images/arrow2.png +0 -0
  203. data/data/images/blend_modes_bottom_layer.jpg +0 -0
  204. data/data/images/blend_modes_top_layer.jpg +0 -0
  205. data/data/images/dice.alpha +0 -0
  206. data/data/images/dice.color +0 -0
  207. data/data/images/dice.png +0 -0
  208. data/data/images/dice_interlaced.png +0 -0
  209. data/data/images/fractal.jpg +0 -0
  210. data/data/images/indexed_color.dat +0 -0
  211. data/data/images/indexed_color.png +0 -0
  212. data/data/images/indexed_transparency.png +0 -0
  213. data/data/images/indexed_transparency_alpha.dat +0 -0
  214. data/data/images/indexed_transparency_color.dat +0 -0
  215. data/data/images/letterhead.jpg +0 -0
  216. data/data/images/license.md +0 -8
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.color +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/spec/acceptance/png_spec.rb +0 -35
  244. data/spec/annotations_spec.rb +0 -67
  245. data/spec/blend_mode_spec.rb +0 -71
  246. data/spec/bounding_box_spec.rb +0 -501
  247. data/spec/column_box_spec.rb +0 -59
  248. data/spec/destinations_spec.rb +0 -13
  249. data/spec/document_spec.rb +0 -738
  250. data/spec/font_metric_cache_spec.rb +0 -52
  251. data/spec/font_spec.rb +0 -475
  252. data/spec/formatted_text_arranger_spec.rb +0 -452
  253. data/spec/formatted_text_box_spec.rb +0 -716
  254. data/spec/formatted_text_fragment_spec.rb +0 -299
  255. data/spec/graphics_spec.rb +0 -705
  256. data/spec/grid_spec.rb +0 -95
  257. data/spec/images_spec.rb +0 -167
  258. data/spec/inline_formatted_text_parser_spec.rb +0 -568
  259. data/spec/jpg_spec.rb +0 -23
  260. data/spec/line_wrap_spec.rb +0 -366
  261. data/spec/measurement_units_spec.rb +0 -22
  262. data/spec/outline_spec.rb +0 -409
  263. data/spec/png_spec.rb +0 -257
  264. data/spec/reference_spec.rb +0 -25
  265. data/spec/repeater_spec.rb +0 -154
  266. data/spec/security_spec.rb +0 -151
  267. data/spec/soft_mask_spec.rb +0 -78
  268. data/spec/span_spec.rb +0 -43
  269. data/spec/stamp_spec.rb +0 -179
  270. data/spec/stroke_styles_spec.rb +0 -208
  271. data/spec/text_at_spec.rb +0 -142
  272. data/spec/text_box_spec.rb +0 -1042
  273. data/spec/text_rendering_mode_spec.rb +0 -45
  274. data/spec/text_spacing_spec.rb +0 -93
  275. data/spec/text_spec.rb +0 -543
  276. data/spec/text_with_inline_formatting_spec.rb +0 -35
  277. data/spec/transparency_spec.rb +0 -91
  278. data/spec/view_spec.rb +0 -42
@@ -1,13 +1,11 @@
1
- # encoding: utf-8
2
-
3
1
  # wrap.rb: Handles text wrapping for for formatted text
4
2
  #
5
3
  # Contributed by Daniel Nelson
6
4
  #
7
5
  # This is free software. Please see the LICENSE and COPYING files for details.
8
6
 
9
- require_relative "line_wrap"
10
- require_relative "arranger"
7
+ require_relative 'line_wrap'
8
+ require_relative 'arranger'
11
9
 
12
10
  module Prawn
13
11
  module Text
@@ -15,10 +13,12 @@ module Prawn
15
13
  # @private
16
14
 
17
15
  module Wrap #:nodoc:
18
- def initialize(array, options)
16
+ def initialize(_array, options)
19
17
  @line_wrap = Prawn::Text::Formatted::LineWrap.new
20
- @arranger = Prawn::Text::Formatted::Arranger.new(@document,
21
- :kerning => options[:kerning])
18
+ @arranger = Prawn::Text::Formatted::Arranger.new(
19
+ @document,
20
+ kerning: options[:kerning]
21
+ )
22
22
  @disable_wrap_by_char = options[:disable_wrap_by_char]
23
23
  end
24
24
 
@@ -46,15 +46,17 @@ module Prawn
46
46
  initialize_wrap(array)
47
47
 
48
48
  stop = false
49
- while !stop
49
+ until stop
50
50
  # wrap before testing if enough height for this line because the
51
51
  # height of the highest fragment on this line will be used to
52
52
  # determine the line height
53
- @line_wrap.wrap_line(:document => @document,
54
- :kerning => @kerning,
55
- :width => available_width,
56
- :arranger => @arranger,
57
- :disable_wrap_by_char => @disable_wrap_by_char)
53
+ @line_wrap.wrap_line(
54
+ document: @document,
55
+ kerning: @kerning,
56
+ width: available_width,
57
+ arranger: @arranger,
58
+ disable_wrap_by_char: @disable_wrap_by_char
59
+ )
58
60
 
59
61
  if enough_height_for_this_line?
60
62
  move_baseline_down
@@ -78,30 +80,36 @@ module Prawn
78
80
  fragments_this_line = []
79
81
 
80
82
  word_spacing = word_spacing_for_this_line
81
- while fragment = @arranger.retrieve_fragment
83
+ @arranger.fragments.each do |fragment|
82
84
  fragment.word_spacing = word_spacing
83
85
  if fragment.text == "\n"
84
- printed_fragments << "\n" if @printed_lines.last == ""
86
+ printed_fragments << "\n" if @printed_lines.last == ''
85
87
  break
86
88
  end
87
89
  printed_fragments << fragment.text
88
90
  fragments_this_line << fragment
89
91
  end
92
+ @arranger.fragments.replace []
90
93
 
91
94
  accumulated_width = 0
92
95
  fragments_this_line.reverse! if @direction == :rtl
93
96
  fragments_this_line.each do |fragment_this_line|
94
97
  fragment_this_line.default_direction = @direction
95
- format_and_draw_fragment(fragment_this_line, accumulated_width,
96
- @line_wrap.width, word_spacing)
98
+ format_and_draw_fragment(
99
+ fragment_this_line, accumulated_width,
100
+ @line_wrap.width, word_spacing
101
+ )
97
102
  accumulated_width += fragment_this_line.width
98
103
  end
99
104
 
100
- @printed_lines << printed_fragments.map { |s| s.force_encoding(::Encoding::UTF_8) }.join
105
+ @printed_lines << printed_fragments.map do |s|
106
+ s.force_encoding(::Encoding::UTF_8)
107
+ end.join
101
108
  end
102
109
 
103
110
  def word_spacing_for_this_line
104
- if @align == :justify && @line_wrap.space_count > 0 && !@line_wrap.paragraph_finished?
111
+ if @align == :justify && @line_wrap.space_count > 0 &&
112
+ !@line_wrap.paragraph_finished?
105
113
  (available_width - @line_wrap.width) / @line_wrap.space_count
106
114
  else
107
115
  0
@@ -110,13 +118,13 @@ module Prawn
110
118
 
111
119
  def enough_height_for_this_line?
112
120
  @line_height = @arranger.max_line_height
113
- @descender = @arranger.max_descender
114
- @ascender = @arranger.max_ascender
115
- if @baseline_y == 0
116
- diff = @ascender + @descender
117
- else
118
- diff = @descender + @line_height + @leading
119
- end
121
+ @descender = @arranger.max_descender
122
+ @ascender = @arranger.max_ascender
123
+ diff = if @baseline_y.zero?
124
+ @ascender + @descender
125
+ else
126
+ @descender + @line_height + @leading
127
+ end
120
128
  require_relatived_total_height = @baseline_y.abs + diff
121
129
  if require_relatived_total_height > @height + 0.0001
122
130
  # no room for the full height of this line
@@ -133,9 +141,9 @@ module Prawn
133
141
 
134
142
  # these values will depend on the maximum value within a given line
135
143
  @line_height = 0
136
- @descender = 0
137
- @ascender = 0
138
- @baseline_y = 0
144
+ @descender = 0
145
+ @ascender = 0
146
+ @baseline_y = 0
139
147
 
140
148
  @printed_lines = []
141
149
  @nothing_printed = true
@@ -143,10 +151,12 @@ module Prawn
143
151
  end
144
152
 
145
153
  def format_and_draw_fragment(fragment, accumulated_width,
146
- line_width, word_spacing)
154
+ line_width, word_spacing)
147
155
  @arranger.apply_color_and_font_settings(fragment) do
148
- draw_fragment(fragment, accumulated_width,
149
- line_width, word_spacing)
156
+ draw_fragment(
157
+ fragment, accumulated_width,
158
+ line_width, word_spacing
159
+ )
150
160
  end
151
161
  end
152
162
  end
@@ -1,14 +1,13 @@
1
- # encoding: utf-8
2
- #
3
- # transformation_stack.rb : Stores the transformations that have been applied to the document
1
+ # transformation_stack.rb : Stores the transformations that have been applied to
2
+ # the document
4
3
  #
5
4
  # Copyright 2015, Roger Nesbitt. All Rights Reserved.
6
5
  #
7
6
  # This is free software. Please see the LICENSE and COPYING files for details.
8
- #
9
7
 
10
8
  require 'matrix'
11
9
 
10
+ # rubocop: disable Metrics/ParameterLists
12
11
  module Prawn
13
12
  module TransformationStack
14
13
  def add_to_transformation_stack(a, b, c, d, e, f)
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  # utilities.rb : General-purpose utility classes which don't fit anywhere else
4
2
  #
5
3
  # Copyright August 2012, Alex Dowad. All Rights Reserved.
@@ -9,15 +7,17 @@
9
7
  require 'thread'
10
8
 
11
9
  module Prawn
12
- # Throughout the Prawn codebase, repeated calculations which can benefit from caching are made
13
- # In some cases, caching and reusing results can not only save CPU cycles but also greatly
14
- # reduce memory requirements
10
+ # Throughout the Prawn codebase, repeated calculations which can benefit from
11
+ # caching are made.
12
+ # In some cases, caching and reusing results can not only save CPU cycles but
13
+ # also greatly reduce memory requirements
15
14
  # But at the same time, we don't want to throw away thread safety
16
15
  # We have two interchangeable thread-safe cache implementations:
17
16
 
18
17
  # @private
19
18
  class SynchronizedCache
20
- # As an optimization, this could access the hash directly on VMs with a global interpreter lock (like MRI)
19
+ # As an optimization, this could access the hash directly on VMs with
20
+ # a global interpreter lock (like MRI)
21
21
  def initialize
22
22
  @cache = {}
23
23
  @mutex = Mutex.new
@@ -31,19 +31,4 @@ module Prawn
31
31
  @mutex.synchronize { @cache[key] = value }
32
32
  end
33
33
  end
34
-
35
- # @private
36
- class ThreadLocalCache
37
- def initialize
38
- @cache_id = "cache_#{self.object_id}".to_sym
39
- end
40
-
41
- def [](key)
42
- (Thread.current[@cache_id] ||= {})[key]
43
- end
44
-
45
- def []=(key, value)
46
- (Thread.current[@cache_id] ||= {})[key] = value
47
- end
48
- end
49
34
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module Prawn
4
- VERSION = "2.1.0"
2
+ VERSION = '2.2.0'.freeze
5
3
  end
@@ -1,5 +1,3 @@
1
- # encoding: UTF-8
2
- #
3
1
  # prawn/view.rb : Implements a mixin for Prawn's DSL
4
2
  #
5
3
  # This is free software. Please see the LICENSE and COPYING files for details.
@@ -69,6 +67,10 @@ module Prawn
69
67
  document.send(m, *a, &b)
70
68
  end
71
69
 
70
+ def respond_to_missing?
71
+ document.respond_to?(m)
72
+ end
73
+
72
74
  # Syntactic sugar that uses +instance_eval+ under the hood to provide
73
75
  # a block-based DSL.
74
76
  #
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # A PDF document is a collection of pages. When we create a new document be it
4
2
  # with <code>Document.new</code> or on a <code>Document.generate</code> block
5
3
  # one initial page is created for us.
@@ -12,14 +10,13 @@
12
10
  #
13
11
  # Just use the <code>start_new_page</code> method and a shiny new page will be
14
12
  # created for you just like in the following snippet.
15
- #
16
- require File.expand_path(File.join(File.dirname(__FILE__),
17
- %w[.. example_helper]))
13
+
14
+ require_relative '../example_helper'
18
15
 
19
16
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
20
17
  Prawn::ManualBuilder::Example.generate(filename) do
21
- text "We are still on the initial page for this example. Now I'll ask " +
22
- "Prawn to gently start a new page. Please follow me to the next page."
18
+ text "We are still on the initial page for this example. Now I'll ask " \
19
+ 'Prawn to gently start a new page. Please follow me to the next page.'
23
20
 
24
21
  start_new_page
25
22
 
@@ -1,34 +1,41 @@
1
- # encoding: utf-8
2
- #
3
1
  # Examples for Prawn basic concepts.
4
2
  #
5
3
 
6
- require_relative "../example_helper"
4
+ require_relative '../example_helper'
7
5
 
8
- Prawn::ManualBuilder::Example.generate("basic_concepts.pdf", :page_size => "FOLIO") do
9
- package "basic_concepts" do |p|
10
- p.example "creation", :eval_source => false, :full_source => true
11
- p.example "origin"
12
- p.example "cursor"
13
- p.example "other_cursor_helpers"
14
- p.example "adding_pages"
15
- p.example "measurement"
16
- p.example "view", :eval_source => false, :full_source => true
6
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
7
+ Prawn::ManualBuilder::Example.generate(filename, page_size: 'FOLIO') do
8
+ package 'basic_concepts' do |p|
9
+ p.example 'creation', eval_source: false, full_source: true
10
+ p.example 'origin'
11
+ p.example 'cursor'
12
+ p.example 'other_cursor_helpers'
13
+ p.example 'adding_pages'
14
+ p.example 'measurement'
15
+ p.example 'view', eval_source: false, full_source: true
17
16
 
18
17
  p.intro do
19
- prose("This chapter covers the minimum amount of functionality you'll need to start using Prawn.
18
+ prose <<-END
19
+ This chapter covers the minimum amount of functionality you'll need to
20
+ start using Prawn.
20
21
 
21
- If you are new to Prawn this is the first chapter to read. Once you are comfortable with the concepts shown here you might want to check the Basics section of the Graphics, Bounding Box and Text sections.
22
+ If you are new to Prawn this is the first chapter to read. Once you are
23
+ comfortable with the concepts shown here you might want to check the
24
+ Basics section of the Graphics, Bounding Box and Text sections.
22
25
 
23
- The examples show:")
26
+ The examples show:
27
+ END
24
28
 
25
- list( "How to create new pdf documents in every possible way",
26
- "Where the origin for the document coordinates is. What are Bounding Boxes and how they interact with the origin",
27
- "How the cursor behaves",
28
- "How to start new pages",
29
- "What the base unit for measurement and coordinates is and how to use other convenient measures",
30
- "How to build custom view objects that use Prawn's DSL"
31
- )
29
+ list(
30
+ 'How to create new pdf documents in every possible way',
31
+ 'Where the origin for the document coordinates is. What are Bounding '\
32
+ 'Boxes and how they interact with the origin',
33
+ 'How the cursor behaves',
34
+ 'How to start new pages',
35
+ 'What the base unit for measurement and coordinates is and how to use '\
36
+ 'other convenient measures',
37
+ "How to build custom view objects that use Prawn's DSL"
38
+ )
32
39
  end
33
40
  end
34
41
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # There are three ways to create a PDF Document in Prawn: creating a new
4
2
  # <code>Prawn::Document</code> instance, or using the
5
3
  # <code>Prawn::Document.generate</code> method with and without block arguments.
@@ -19,21 +17,20 @@
19
17
  # The generate method without block arguments requires
20
18
  # less typing and defines and renders the pdf document in one shot.
21
19
  # Almost all of the examples are coded this way.
22
- #
23
- require File.expand_path(File.join(File.dirname(__FILE__),
24
- %w[.. example_helper]))
20
+
21
+ require_relative '../example_helper'
25
22
 
26
23
  # Assignment
27
24
  pdf = Prawn::Document.new
28
- pdf.text "Hello World"
29
- pdf.render_file "assignment.pdf"
25
+ pdf.text 'Hello World'
26
+ pdf.render_file 'assignment.pdf'
30
27
 
31
28
  # Implicit Block
32
- Prawn::Document.generate("implicit.pdf") do
33
- text "Hello World"
29
+ Prawn::Document.generate('implicit.pdf') do
30
+ text 'Hello World'
34
31
  end
35
32
 
36
33
  # Explicit Block
37
- Prawn::Document.generate("explicit.pdf") do |pdf|
38
- pdf.text "Hello World"
34
+ Prawn::Document.generate('explicit.pdf') do |pdf|
35
+ pdf.text 'Hello World'
39
36
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # We normally write our documents from top to bottom and it is no different with
4
2
  # Prawn. Even if the origin is on the bottom left corner we still fill the page
5
3
  # from the top to the bottom. In other words the cursor for inserting content
@@ -11,9 +9,8 @@
11
9
  # The following snippet shows how the cursor behaves when we add some text to
12
10
  # the page and demonstrates some of the helpers to manage the cursor position.
13
11
  # The <code>cursor</code> method returns the current cursor position.
14
- #
15
- require File.expand_path(File.join(File.dirname(__FILE__),
16
- %w[.. example_helper]))
12
+
13
+ require_relative '../example_helper'
17
14
 
18
15
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
19
16
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # The base unit in Prawn is the PDF Point. One PDF Point is equal to 1/72 of
4
2
  # an inch.
5
3
  #
@@ -10,13 +8,12 @@
10
8
  # Just <code>require "prawn/measurement_extensions"</code> and it will mix some
11
9
  # helpers onto <code>Numeric</code> for converting common measurement units to
12
10
  # PDF Points.
13
- #
14
- require File.expand_path(File.join(File.dirname(__FILE__),
15
- %w[.. example_helper]))
11
+
12
+ require_relative '../example_helper'
16
13
 
17
14
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
18
15
  Prawn::ManualBuilder::Example.generate(filename) do
19
- require "prawn/measurement_extensions"
16
+ require 'prawn/measurement_extensions'
20
17
 
21
18
  [:mm, :cm, :dm, :m, :in, :yd, :ft].each do |measurement|
22
19
  text "1 #{measurement} in PDF Points: #{1.send(measurement)} pt"
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # This is the most important concept you need to learn about Prawn:
4
2
  #
5
3
  # PDF documents have the origin <code>[0,0]</code> at the bottom-left corner of
@@ -21,9 +19,8 @@
21
19
  #
22
20
  # The following snippet strokes a circle on the margin box origin. Then strokes
23
21
  # the boundaries of a bounding box and a circle on its origin.
24
- #
25
- require File.expand_path(File.join(File.dirname(__FILE__),
26
- %w[.. example_helper]))
22
+
23
+ require_relative '../example_helper'
27
24
 
28
25
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
29
26
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -31,7 +28,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
31
28
 
32
29
  stroke_circle [0, 0], 10
33
30
 
34
- bounding_box([100, 300], :width => 300, :height => 200) do
31
+ bounding_box([100, 300], width: 300, height: 200) do
35
32
  stroke_bounds
36
33
  stroke_circle [0, 0], 10
37
34
  end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
- #
3
1
  # Another group of helpers for changing the cursor position are the pad methods.
4
2
  # They accept a numeric value and a block. <code>pad</code> will use the numeric
5
3
  # value to move the cursor down both before and after the block content.
@@ -8,33 +6,32 @@
8
6
  #
9
7
  # <code>float</code> is a method for not changing the cursor. Pass it a block
10
8
  # and the cursor will remain on the same place when the block returns.
11
- #
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
9
+
10
+ require_relative '../example_helper'
14
11
 
15
12
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
13
  Prawn::ManualBuilder::Example.generate(filename) do
17
14
  stroke_horizontal_rule
18
- pad(20) { text "Text padded both before and after." }
15
+ pad(20) { text 'Text padded both before and after.' }
19
16
 
20
17
  stroke_horizontal_rule
21
- pad_top(20) { text "Text padded on the top." }
18
+ pad_top(20) { text 'Text padded on the top.' }
22
19
 
23
20
  stroke_horizontal_rule
24
- pad_bottom(20) { text "Text padded on the bottom." }
21
+ pad_bottom(20) { text 'Text padded on the bottom.' }
25
22
 
26
23
  stroke_horizontal_rule
27
24
  move_down 30
28
25
 
29
- text "Text written before the float block."
26
+ text 'Text written before the float block.'
30
27
 
31
28
  float do
32
29
  move_down 30
33
- bounding_box([0, cursor], :width => 200) do
34
- text "Text written inside the float block."
30
+ bounding_box([0, cursor], width: 200) do
31
+ text 'Text written inside the float block.'
35
32
  stroke_bounds
36
33
  end
37
34
  end
38
35
 
39
- text "Text written after the float block."
36
+ text 'Text written after the float block.'
40
37
  end