prawn 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -5
  3. data/lib/prawn.rb +4 -4
  4. data/lib/prawn/document.rb +47 -46
  5. data/lib/prawn/document/bounding_box.rb +13 -19
  6. data/lib/prawn/document/column_box.rb +3 -5
  7. data/lib/prawn/document/internals.rb +0 -1
  8. data/lib/prawn/document/span.rb +12 -12
  9. data/lib/prawn/errors.rb +32 -33
  10. data/lib/prawn/font.rb +29 -36
  11. data/lib/prawn/font/afm.rb +20 -20
  12. data/lib/prawn/font/dfont.rb +0 -1
  13. data/lib/prawn/font/ttf.rb +30 -27
  14. data/lib/prawn/font_metric_cache.rb +4 -8
  15. data/lib/prawn/graphics.rb +37 -42
  16. data/lib/prawn/graphics/cap_style.rb +1 -1
  17. data/lib/prawn/graphics/color.rb +21 -23
  18. data/lib/prawn/graphics/dash.rb +5 -6
  19. data/lib/prawn/graphics/join_style.rb +1 -2
  20. data/lib/prawn/graphics/patterns.rb +25 -21
  21. data/lib/prawn/graphics/transformation.rb +4 -5
  22. data/lib/prawn/graphics/transparency.rb +6 -8
  23. data/lib/prawn/grid.rb +21 -14
  24. data/lib/prawn/image_handler.rb +2 -2
  25. data/lib/prawn/images.rb +29 -31
  26. data/lib/prawn/images/image.rb +1 -1
  27. data/lib/prawn/images/jpg.rb +10 -12
  28. data/lib/prawn/images/png.rb +13 -13
  29. data/lib/prawn/measurements.rb +7 -14
  30. data/lib/prawn/outline.rb +6 -6
  31. data/lib/prawn/repeater.rb +1 -5
  32. data/lib/prawn/security.rb +17 -25
  33. data/lib/prawn/security/arcfour.rb +1 -1
  34. data/lib/prawn/soft_mask.rb +11 -12
  35. data/lib/prawn/stamp.rb +16 -8
  36. data/lib/prawn/text.rb +23 -20
  37. data/lib/prawn/text/box.rb +3 -6
  38. data/lib/prawn/text/formatted/arranger.rb +9 -12
  39. data/lib/prawn/text/formatted/box.rb +23 -22
  40. data/lib/prawn/text/formatted/fragment.rb +0 -4
  41. data/lib/prawn/text/formatted/line_wrap.rb +13 -24
  42. data/lib/prawn/text/formatted/parser.rb +16 -20
  43. data/lib/prawn/text/formatted/wrap.rb +2 -7
  44. data/lib/prawn/utilities.rb +6 -3
  45. data/lib/prawn/version.rb +1 -1
  46. data/manual/basic_concepts/basic_concepts.rb +0 -2
  47. data/manual/basic_concepts/view.rb +1 -1
  48. data/manual/bounding_box/bounding_box.rb +0 -3
  49. data/manual/bounding_box/russian_boxes.rb +7 -8
  50. data/manual/bounding_box/stretchy.rb +0 -1
  51. data/manual/contents.rb +2 -2
  52. data/manual/cover.rb +11 -12
  53. data/manual/document_and_page_options/document_and_page_options.rb +2 -5
  54. data/manual/document_and_page_options/metadata.rb +10 -10
  55. data/manual/document_and_page_options/page_size.rb +0 -1
  56. data/manual/graphics/fill_rules.rb +5 -4
  57. data/manual/graphics/graphics.rb +0 -3
  58. data/manual/graphics/lines_and_curves.rb +1 -1
  59. data/manual/graphics/rotate.rb +0 -2
  60. data/manual/graphics/scale.rb +4 -2
  61. data/manual/graphics/soft_masks.rb +0 -1
  62. data/manual/graphics/stroke_cap.rb +1 -1
  63. data/manual/graphics/stroke_join.rb +1 -1
  64. data/manual/graphics/translate.rb +3 -3
  65. data/manual/graphics/transparency.rb +0 -1
  66. data/manual/how_to_read_this_manual.rb +0 -1
  67. data/manual/images/images.rb +0 -3
  68. data/manual/layout/boxes.rb +5 -5
  69. data/manual/layout/content.rb +2 -2
  70. data/manual/layout/layout.rb +0 -3
  71. data/manual/outline/outline.rb +0 -3
  72. data/manual/repeatable_content/page_numbering.rb +1 -1
  73. data/manual/repeatable_content/repeatable_content.rb +0 -3
  74. data/manual/repeatable_content/repeater.rb +6 -6
  75. data/manual/security/encryption.rb +0 -2
  76. data/manual/security/permissions.rb +0 -2
  77. data/manual/security/security.rb +0 -3
  78. data/manual/text/alignment.rb +3 -3
  79. data/manual/text/color.rb +0 -1
  80. data/manual/text/column_box.rb +0 -1
  81. data/manual/text/fallback_fonts.rb +2 -2
  82. data/manual/text/formatted_callbacks.rb +3 -2
  83. data/manual/text/paragraph_indentation.rb +2 -3
  84. data/manual/text/registering_families.rb +13 -9
  85. data/manual/text/rotation.rb +0 -1
  86. data/manual/text/text.rb +0 -3
  87. data/manual/text/text_box_overflow.rb +7 -5
  88. data/manual/text/utf8.rb +1 -1
  89. data/manual/text/win_ansi_charset.rb +2 -2
  90. data/prawn.gemspec +4 -4
  91. data/spec/acceptance/png.rb +6 -7
  92. data/spec/annotations_spec.rb +21 -28
  93. data/spec/bounding_box_spec.rb +100 -109
  94. data/spec/column_box_spec.rb +26 -32
  95. data/spec/destinations_spec.rb +2 -4
  96. data/spec/document_spec.rb +145 -151
  97. data/spec/extensions/mocha.rb +0 -1
  98. data/spec/font_metric_cache_spec.rb +7 -7
  99. data/spec/font_spec.rb +103 -102
  100. data/spec/formatted_text_arranger_spec.rb +76 -74
  101. data/spec/formatted_text_box_spec.rb +170 -159
  102. data/spec/formatted_text_fragment_spec.rb +57 -56
  103. data/spec/graphics_spec.rb +158 -175
  104. data/spec/grid_spec.rb +28 -29
  105. data/spec/image_handler_spec.rb +4 -5
  106. data/spec/images_spec.rb +50 -36
  107. data/spec/inline_formatted_text_parser_spec.rb +397 -393
  108. data/spec/jpg_spec.rb +4 -6
  109. data/spec/line_wrap_spec.rb +54 -55
  110. data/spec/measurement_units_spec.rb +12 -15
  111. data/spec/outline_spec.rb +77 -98
  112. data/spec/png_spec.rb +55 -65
  113. data/spec/reference_spec.rb +3 -3
  114. data/spec/repeater_spec.rb +20 -26
  115. data/spec/security_spec.rb +42 -49
  116. data/spec/soft_mask_spec.rb +4 -5
  117. data/spec/span_spec.rb +5 -6
  118. data/spec/spec_helper.rb +2 -4
  119. data/spec/stamp_spec.rb +41 -22
  120. data/spec/stroke_styles_spec.rb +36 -39
  121. data/spec/text_at_spec.rb +28 -29
  122. data/spec/text_box_spec.rb +160 -165
  123. data/spec/text_rendering_mode_spec.rb +9 -9
  124. data/spec/text_spacing_spec.rb +13 -13
  125. data/spec/text_spec.rb +116 -124
  126. data/spec/text_with_inline_formatting_spec.rb +5 -5
  127. data/spec/transparency_spec.rb +20 -20
  128. data/spec/view_spec.rb +0 -1
  129. metadata +7 -7
@@ -8,22 +8,20 @@
8
8
  #
9
9
 
10
10
  module Prawn
11
-
12
11
  # Cache used internally by Prawn::Document instances to calculate the width
13
12
  # of various strings for layout purposes.
14
13
  #
15
14
  # @private
16
15
  class FontMetricCache
16
+ CacheEntry = Struct.new(:font, :options, :string)
17
17
 
18
- CacheEntry = Struct.new( :font, :options, :string )
19
-
20
- def initialize( document )
18
+ def initialize(document)
21
19
  @document = document
22
20
 
23
21
  @cache = {}
24
22
  end
25
23
 
26
- def width_of( string, options )
24
+ def width_of(string, options)
27
25
  f = if options[:style]
28
26
  # override style with :style => :bold
29
27
  @document.find_font(@document.font.family, :style => options[:style])
@@ -31,7 +29,7 @@ module Prawn
31
29
  @document.font
32
30
  end
33
31
 
34
- key = CacheEntry.new( f, options, string )
32
+ key = CacheEntry.new(f, options, string)
35
33
 
36
34
  unless length = @cache[ key ]
37
35
  length = @cache[ key ] = f.compute_width_of(string, options)
@@ -40,7 +38,5 @@ module Prawn
40
38
  length +
41
39
  (@document.character_spacing * @document.font.character_count(string))
42
40
  end
43
-
44
41
  end
45
-
46
42
  end
@@ -6,7 +6,6 @@
6
6
  #
7
7
  # This is free software. Please see the LICENSE and COPYING files for details.
8
8
 
9
-
10
9
  require_relative "graphics/color"
11
10
  require_relative "graphics/dash"
12
11
  require_relative "graphics/cap_style"
@@ -16,7 +15,6 @@ require_relative "graphics/transformation"
16
15
  require_relative "graphics/patterns"
17
16
 
18
17
  module Prawn
19
-
20
18
  # Implements the drawing facilities for Prawn::Document.
21
19
  # Use this to draw the most beautiful imaginable things.
22
20
  #
@@ -24,7 +22,6 @@ module Prawn
24
22
  # ruby-pdf.rubyforge.org
25
23
  #
26
24
  module Graphics
27
-
28
25
  include Color
29
26
  include Dash
30
27
  include CapStyle
@@ -66,15 +63,16 @@ module Prawn
66
63
  #
67
64
  # pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]
68
65
  #
69
- def curve_to(dest,options={})
70
- options[:bounds] or raise Prawn::Errors::InvalidGraphicsPath,
71
- "Bounding points for bezier curve must be specified "+
72
- "as :bounds => [[x1,y1],[x2,y2]]"
66
+ def curve_to(dest, options = {})
67
+ options[:bounds] or fail Prawn::Errors::InvalidGraphicsPath,
68
+ "Bounding points for bezier curve must be specified " \
69
+ "as :bounds => [[x1,y1],[x2,y2]]"
73
70
 
74
- curve_points = PDF::Core.real_params(
75
- (options[:bounds] << dest).flat_map { |e| map_to_absolute(e) })
71
+ curve_points = PDF::Core.real_params(
72
+ (options[:bounds] << dest).flat_map { |e| map_to_absolute(e) }
73
+ )
76
74
 
77
- renderer.add_content("#{curve_points} c")
75
+ renderer.add_content("#{curve_points} c")
78
76
  end
79
77
 
80
78
  # Draws a rectangle given <tt>point</tt>, <tt>width</tt> and
@@ -82,8 +80,8 @@ module Prawn
82
80
  #
83
81
  # pdf.rectangle [300,300], 100, 200
84
82
  #
85
- def rectangle(point,width,height)
86
- x,y = map_to_absolute(point)
83
+ def rectangle(point, width, height)
84
+ x, y = map_to_absolute(point)
87
85
  box = PDF::Core.real_params([x, y - height, width, height])
88
86
 
89
87
  renderer.add_content("#{box} re")
@@ -95,12 +93,11 @@ module Prawn
95
93
  #
96
94
  # pdf.rounded_rectangle [300,300], 100, 200, 10
97
95
  #
98
- def rounded_rectangle(point,width,height,radius)
96
+ def rounded_rectangle(point, width, height, radius)
99
97
  x, y = point
100
98
  rounded_polygon(radius, point, [x + width, y], [x + width, y - height], [x, y - height])
101
99
  end
102
100
 
103
-
104
101
  ###########################################################
105
102
  # Higher level functions: May use relative coords #
106
103
  ###########################################################
@@ -120,7 +117,7 @@ module Prawn
120
117
  # pdf.line_width(5)
121
118
  # pdf.line_width #=> 5
122
119
  #
123
- def line_width(width=nil)
120
+ def line_width(width = nil)
124
121
  if width
125
122
  self.line_width = width
126
123
  else
@@ -135,7 +132,7 @@ module Prawn
135
132
  # pdf.line(100,100,200,250)
136
133
  #
137
134
  def line(*points)
138
- x0,y0,x1,y1 = points.flatten
135
+ x0, y0, x1, y1 = points.flatten
139
136
  move_to(x0, y0)
140
137
  line_to(x1, y1)
141
138
  end
@@ -146,14 +143,14 @@ module Prawn
146
143
  # # draw a line from [25, 75] to [100, 75]
147
144
  # horizontal_line 25, 100, :at => 75
148
145
  #
149
- def horizontal_line(x1,x2,options={})
146
+ def horizontal_line(x1, x2, options = {})
150
147
  if options[:at]
151
148
  y1 = options[:at]
152
149
  else
153
150
  y1 = y - bounds.absolute_bottom
154
151
  end
155
152
 
156
- line(x1,y1,x2,y1)
153
+ line(x1, y1, x2, y1)
157
154
  end
158
155
 
159
156
  # Draws a horizontal line from the left border to the right border of the
@@ -168,8 +165,8 @@ module Prawn
168
165
  # # draw a line from [25, 100] to [25, 300]
169
166
  # vertical_line 100, 300, :at => 25
170
167
  #
171
- def vertical_line(y1,y2,params)
172
- line(params[:at],y1,params[:at],y2)
168
+ def vertical_line(y1, y2, params)
169
+ line(params[:at], y1, params[:at], y2)
173
170
  end
174
171
 
175
172
  # Draws a Bezier curve between two points, bounded by two additional
@@ -177,9 +174,9 @@ module Prawn
177
174
  #
178
175
  # pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]
179
176
  #
180
- def curve(origin,dest, options={})
177
+ def curve(origin, dest, options = {})
181
178
  move_to(*origin)
182
- curve_to(dest,options)
179
+ curve_to(dest, options)
183
180
  end
184
181
 
185
182
  # This constant is used to approximate a symmetrical arc using a cubic
@@ -214,19 +211,19 @@ module Prawn
214
211
 
215
212
  # Upper right hand corner
216
213
  curve_to [x, y + r2],
217
- :bounds => [[x + r1, y + l2], [x + l1, y + r2]]
214
+ :bounds => [[x + r1, y + l2], [x + l1, y + r2]]
218
215
 
219
216
  # Upper left hand corner
220
217
  curve_to [x - r1, y],
221
- :bounds => [[x - l1, y + r2], [x - r1, y + l2]]
218
+ :bounds => [[x - l1, y + r2], [x - r1, y + l2]]
222
219
 
223
220
  # Lower left hand corner
224
221
  curve_to [x, y - r2],
225
- :bounds => [[x - r1, y - l2], [x - l1, y - r2]]
222
+ :bounds => [[x - r1, y - l2], [x - l1, y - r2]]
226
223
 
227
224
  # Lower right hand corner
228
225
  curve_to [x + r1, y],
229
- :bounds => [[x + l1, y - r2], [x + r1, y - l2]]
226
+ :bounds => [[x + l1, y - r2], [x + r1, y - l2]]
230
227
 
231
228
  move_to(x, y)
232
229
  end
@@ -261,15 +258,14 @@ module Prawn
261
258
  renderer.add_content "h"
262
259
  end
263
260
 
264
-
265
261
  # Creates a rounded vertex for a line segment used for building a rounded polygon
266
262
  # requires a radius to define bezier curve and three points. The first two points define
267
263
  # the line segment and the third point helps define the curve for the vertex.
268
264
  def rounded_vertex(radius, *points)
269
265
  radial_point_1 = point_on_line(radius, points[0], points[1])
270
- bezier_point_1 = point_on_line((radius - radius*KAPPA), points[0], points[1] )
266
+ bezier_point_1 = point_on_line((radius - radius * KAPPA), points[0], points[1])
271
267
  radial_point_2 = point_on_line(radius, points[2], points[1])
272
- bezier_point_2 = point_on_line((radius - radius*KAPPA), points[2], points[1])
268
+ bezier_point_2 = point_on_line((radius - radius * KAPPA), points[2], points[1])
273
269
  line_to(radial_point_1)
274
270
  curve_to(radial_point_2, :bounds => [bezier_point_1, bezier_point_2])
275
271
  end
@@ -322,12 +318,12 @@ module Prawn
322
318
  #
323
319
  def stroke_axis(options = {})
324
320
  options = {
325
- :at => [0,0],
326
- :height => bounds.height.to_i - (options[:at] || [0,0])[1],
327
- :width => bounds.width.to_i - (options[:at] || [0,0])[0],
321
+ :at => [0, 0],
322
+ :height => bounds.height.to_i - (options[:at] || [0, 0])[1],
323
+ :width => bounds.width.to_i - (options[:at] || [0, 0])[0],
328
324
  :step_length => 100,
329
325
  :negative_axes_length => 20,
330
- :color => "000000",
326
+ :color => "000000"
331
327
  }.merge(options)
332
328
 
333
329
  Prawn.verify_options([:at, :width, :height, :step_length,
@@ -365,7 +361,7 @@ module Prawn
365
361
  # will be used. See the PDF reference, "Graphics -> Path Construction and
366
362
  # Painting -> Clipping Path Operators" for details on the difference.
367
363
  #
368
- def fill(options={})
364
+ def fill(options = {})
369
365
  yield if block_given?
370
366
  renderer.add_content(options[:fill_rule] == :even_odd ? "f*" : "f")
371
367
  end
@@ -379,7 +375,7 @@ module Prawn
379
375
  # will be used. See the PDF reference, "Graphics -> Path Construction and
380
376
  # Painting -> Clipping Path Operators" for details on the difference.
381
377
  #
382
- def fill_and_stroke(options={})
378
+ def fill_and_stroke(options = {})
383
379
  yield if block_given?
384
380
  renderer.add_content(options[:fill_rule] == :even_odd ? "b*" : "b")
385
381
  end
@@ -600,7 +596,7 @@ module Prawn
600
596
  shapes = %w{line_to curve_to rectangle rounded_rectangle line horizontal_line horizontal_rule vertical_line
601
597
  curve circle_at circle ellipse_at ellipse polygon rounded_polygon rounded_vertex}
602
598
 
603
- ops.product(shapes).each do |operation,shape|
599
+ ops.product(shapes).each do |operation, shape|
604
600
  class_eval "def #{operation}_#{shape}(*args); #{shape}(*args); #{operation}; end"
605
601
  end
606
602
 
@@ -619,7 +615,7 @@ module Prawn
619
615
  end
620
616
 
621
617
  def map_to_absolute(*point)
622
- x,y = point.flatten
618
+ x, y = point.flatten
623
619
  [@bounding_box.absolute_left + x, @bounding_box.absolute_bottom + y]
624
620
  end
625
621
 
@@ -628,19 +624,18 @@ module Prawn
628
624
  end
629
625
 
630
626
  def degree_to_rad(angle)
631
- angle * Math::PI / 180
627
+ angle * Math::PI / 180
632
628
  end
633
629
 
634
630
  # Returns the coordinates for a point on a line that is a given distance away from the second
635
631
  # point defining the line segement
636
632
  def point_on_line(distance_from_end, *points)
637
- x0,y0,x1,y1 = points.flatten
633
+ x0, y0, x1, y1 = points.flatten
638
634
  length = Math.sqrt((x1 - x0)**2 + (y1 - y0)**2)
639
635
  p = (length - distance_from_end) / length
640
- xr = x0 + p*(x1 - x0)
641
- yr = y0 + p*(y1 - y0)
636
+ xr = x0 + p * (x1 - x0)
637
+ yr = y0 + p * (y1 - y0)
642
638
  [xr, yr]
643
639
  end
644
-
645
640
  end
646
641
  end
@@ -19,7 +19,7 @@ module Prawn
19
19
  #
20
20
  # NOTE: If this method is never called, :butt will be used by default.
21
21
  #
22
- def cap_style(style=nil)
22
+ def cap_style(style = nil)
23
23
  return current_cap_style || :butt if style.nil?
24
24
 
25
25
  self.current_cap_style = style
@@ -74,8 +74,8 @@ module Prawn
74
74
  # => [255, 120, 8]
75
75
  #
76
76
  def hex2rgb(hex)
77
- r,g,b = hex[0..1], hex[2..3], hex[4..5]
78
- [r,g,b].map { |e| e.to_i(16) }
77
+ r, g, b = hex[0..1], hex[2..3], hex[4..5]
78
+ [r, g, b].map { |e| e.to_i(16) }
79
79
  end
80
80
 
81
81
  private
@@ -87,7 +87,7 @@ module Prawn
87
87
  when 4
88
88
  color
89
89
  else
90
- raise ArgumentError, 'wrong number of arguments supplied'
90
+ fail ArgumentError, 'wrong number of arguments supplied'
91
91
  end
92
92
  end
93
93
 
@@ -102,7 +102,7 @@ module Prawn
102
102
  when 4
103
103
  :CMYK
104
104
  else
105
- raise ArgumentError, "Unknown type of color: #{color.inspect}"
105
+ fail ArgumentError, "Unknown type of color: #{color.inspect}"
106
106
  end
107
107
  end
108
108
  end
@@ -110,10 +110,10 @@ module Prawn
110
110
  def normalize_color(color)
111
111
  case color_type(color)
112
112
  when :RGB
113
- r,g,b = hex2rgb(color)
113
+ r, g, b = hex2rgb(color)
114
114
  [r / 255.0, g / 255.0, b / 255.0]
115
115
  when :CMYK
116
- c,m,y,k = *color
116
+ c, m, y, k = *color
117
117
  [c / 100.0, m / 100.0, y / 100.0, k / 100.0]
118
118
  end
119
119
  end
@@ -139,30 +139,30 @@ module Prawn
139
139
  set_current_color_space(color_space, type)
140
140
 
141
141
  unless COLOR_SPACES.include?(color_space)
142
- raise ArgumentError, "unknown color space: '#{color_space}'"
142
+ fail ArgumentError, "unknown color space: '#{color_space}'"
143
143
  end
144
144
 
145
145
  operator = case type
146
- when :fill
147
- 'cs'
148
- when :stroke
149
- 'CS'
150
- else
151
- raise ArgumentError, "unknown type '#{type}'"
152
- end
146
+ when :fill
147
+ 'cs'
148
+ when :stroke
149
+ 'CS'
150
+ else
151
+ fail ArgumentError, "unknown type '#{type}'"
152
+ end
153
153
 
154
154
  renderer.add_content "/#{color_space} #{operator}"
155
155
  end
156
156
 
157
157
  def set_color(type, color, options = {})
158
158
  operator = case type
159
- when :fill
160
- 'scn'
161
- when :stroke
162
- 'SCN'
163
- else
164
- raise ArgumentError, "unknown type '#{type}'"
165
- end
159
+ when :fill
160
+ 'scn'
161
+ when :stroke
162
+ 'SCN'
163
+ else
164
+ fail ArgumentError, "unknown type '#{type}'"
165
+ end
166
166
 
167
167
  if options[:pattern]
168
168
  set_color_space type, :Pattern
@@ -225,8 +225,6 @@ module Prawn
225
225
  def write_color(color, operator)
226
226
  renderer.add_content "#{color} #{operator}"
227
227
  end
228
-
229
228
  end
230
229
  end
231
230
  end
232
-
@@ -52,17 +52,17 @@ module Prawn
52
52
  # Integers or Floats may be used for length and the option values.
53
53
  # Dash units are in PDF points (1/72 inch).
54
54
  #
55
- def dash(length=nil, options={})
55
+ def dash(length = nil, options = {})
56
56
  return current_dash_state if length.nil?
57
57
 
58
58
  if length == 0 || length.kind_of?(Array) && length.any? { |e| e == 0 }
59
- raise ArgumentError,
60
- "Zero length dashes are invalid. Call #undash to disable dashes."
59
+ fail ArgumentError,
60
+ "Zero length dashes are invalid. Call #undash to disable dashes."
61
61
  end
62
62
 
63
63
  self.current_dash_state = { :dash => length,
64
- :space => length.kind_of?(Array) ? nil : options[:space] || length,
65
- :phase => options[:phase] || 0 }
64
+ :space => length.kind_of?(Array) ? nil : options[:space] || length,
65
+ :phase => options[:phase] || 0 }
66
66
 
67
67
  write_stroke_dash
68
68
  end
@@ -103,7 +103,6 @@ module Prawn
103
103
  def dash_setting
104
104
  graphic_state.dash_setting
105
105
  end
106
-
107
106
  end
108
107
  end
109
108
  end
@@ -20,7 +20,7 @@ module Prawn
20
20
  # NOTE: if this method is never called, :miter will be used for join style
21
21
  # throughout the document
22
22
  #
23
- def join_style(style=nil)
23
+ def join_style(style = nil)
24
24
  return current_join_style || :miter if style.nil?
25
25
 
26
26
  self.current_join_style = style
@@ -40,7 +40,6 @@ module Prawn
40
40
  graphic_state.join_style = style
41
41
  end
42
42
 
43
-
44
43
  def write_stroke_join_style
45
44
  renderer.add_content "#{JOIN_STYLES[current_join_style]} j"
46
45
  end
@@ -47,13 +47,13 @@ module Prawn
47
47
  end
48
48
 
49
49
  operator = case type
50
- when :fill
51
- 'scn'
52
- when :stroke
53
- 'SCN'
54
- else
55
- raise ArgumentError, "unknown type '#{type}'"
56
- end
50
+ when :fill
51
+ 'scn'
52
+ when :stroke
53
+ 'SCN'
54
+ else
55
+ fail ArgumentError, "unknown type '#{type}'"
56
+ end
57
57
 
58
58
  set_color_space type, :Pattern
59
59
  renderer.add_content "/SP#{registry_key} #{operator}"
@@ -83,43 +83,47 @@ module Prawn
83
83
 
84
84
  def gradient(*args)
85
85
  if args.length != 4 && args.length != 6
86
- raise ArgumentError, "Unknown type of gradient: #{args.inspect}"
86
+ fail ArgumentError, "Unknown type of gradient: #{args.inspect}"
87
87
  end
88
88
 
89
89
  color1 = normalize_color(args[-2]).dup.freeze
90
90
  color2 = normalize_color(args[-1]).dup.freeze
91
91
 
92
92
  if color_type(color1) != color_type(color2)
93
- raise ArgumentError, "Both colors must be of the same color space: #{color1.inspect} and #{color2.inspect}"
93
+ fail ArgumentError, "Both colors must be of the same color space: #{color1.inspect} and #{color2.inspect}"
94
94
  end
95
95
 
96
96
  process_color color1
97
97
  process_color color2
98
98
 
99
- shader = ref!({
99
+ shader = ref!(
100
100
  :FunctionType => 2,
101
101
  :Domain => [0.0, 1.0],
102
102
  :C0 => color1,
103
103
  :C1 => color2,
104
- :N => 1.0,
105
- })
104
+ :N => 1.0
105
+ )
106
+
107
+ if args.length == 4
108
+ coords = [0, 0, args[1].first - args[0].first, args[1].last - args[0].last]
109
+ else
110
+ coords = [0, 0, args[1], args[2].first - args[0].first, args[2].last - args[0].last, args[3]]
111
+ end
106
112
 
107
- shading = ref!({
113
+ shading = ref!(
108
114
  :ShadingType => args.length == 4 ? 2 : 3, # axial : radial shading
109
115
  :ColorSpace => color_space(color1),
110
- :Coords => args.length == 4 ?
111
- [0, 0, args[1].first - args[0].first, args[1].last - args[0].last] :
112
- [0, 0, args[1], args[2].first - args[0].first, args[2].last - args[0].last, args[3]],
116
+ :Coords => coords,
113
117
  :Function => shader,
114
- :Extend => [true, true],
115
- })
118
+ :Extend => [true, true]
119
+ )
116
120
 
117
- ref!({
121
+ ref!(
118
122
  :PatternType => 2, # shading pattern
119
123
  :Shading => shading,
120
124
  :Matrix => [1, 0,
121
- 0, 1] + map_to_absolute(args[0]),
122
- })
125
+ 0, 1] + map_to_absolute(args[0])
126
+ )
123
127
  end
124
128
  end
125
129
  end