pdf-core 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 72b9c9e3df4caa328d5e4166d6843e77d4eb2ca8
4
- data.tar.gz: 7833e82447f0f3ae5f25a0c9c5ad3f973442944b
2
+ SHA256:
3
+ metadata.gz: 429f3bfae75301dabdb339edccbdd816026f605dc84d1902f07d6494277d6360
4
+ data.tar.gz: 13fa187ef7307bc6de531a06d9d97272ff2ba0c2a9e21744b52efe1c387094d5
5
5
  SHA512:
6
- metadata.gz: 1240f1c5ff136fb1df4ca8a34a1cc1461fea31b672ae9340385ed0e8d7c61d300259e4ffa7eabee3362969de5de70d234604dac376e0b9ed822cffaece07931b
7
- data.tar.gz: dcd7098604c252a3cb8315a02ba58ceabca12de4fa51319ecb2ed4a1f4bf3054d79f1defdea0085a32743d8eb3daf9265f1f305c480511fa8d23f56f8f3b02cd
6
+ metadata.gz: 76f74e81e59e382b4ab8c0bfe0cd58eb6b8624afd4b6b92fee6ed56da432205ad682cd3bd99b364d29be38747727a198f796975cb7718c7f62ad682f33f4953f
7
+ data.tar.gz: b0b08cdd020ba23a4b3aa135d795eb35089cf0c6fbe34dd5457a3302f78969062347952b2f0f532b9066578a81537059afed889edd7d102817f26439b7f0848e
Binary file
data.tar.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bundler'
4
- Bundler.setup
5
-
6
3
  require 'rake'
7
4
  require 'rspec/core/rake_task'
8
5
 
@@ -15,3 +12,18 @@ end
15
12
 
16
13
  require 'rubocop/rake_task'
17
14
  RuboCop::RakeTask.new
15
+
16
+ require 'rubygems/package_task'
17
+ spec = Gem::Specification.load 'pdf-core.gemspec'
18
+ Gem::PackageTask.new(spec) do |pkg|
19
+ pkg.need_zip = true
20
+ pkg.need_tar = true
21
+ end
22
+
23
+ task :checksum do
24
+ require 'digest/sha2'
25
+ built_gem_path = "pkg/pdf-core-#{Prawn::VERSION}.gem"
26
+ checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
27
+ checksum_path = "checksums/#{built_gem_path}.sha512"
28
+ File.write(checksum_path, checksum)
29
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module PDF
@@ -28,18 +28,18 @@ module PDF
28
28
  @on_page_create_callback = nil
29
29
  end
30
30
 
31
- attr_accessor :store, :version, :pages, :page, :trailer, :compress,
32
- :encrypt, :encryption_key, :skip_encoding,
33
- :before_render_callbacks, :on_page_create_callback
31
+ attr_accessor :store, :version, :pages, :page, :trailer, :compress, :encrypt, :encryption_key, :skip_encoding
32
+ attr_accessor :before_render_callbacks, :on_page_create_callback
34
33
 
35
34
  def populate_pages_from_store(document)
36
35
  return 0 if @store.page_count <= 0 || !@pages.empty?
37
36
 
38
37
  count = (1..@store.page_count)
39
- @pages = count.map do |index|
40
- orig_dict_id = @store.object_id_for_page(index)
41
- PDF::Core::Page.new(document, object_id: orig_dict_id)
42
- end
38
+ @pages =
39
+ count.map do |index|
40
+ orig_dict_id = @store.object_id_for_page(index)
41
+ PDF::Core::Page.new(document, object_id: orig_dict_id)
42
+ end
43
43
  end
44
44
 
45
45
  def normalize_metadata(options)
@@ -3,6 +3,18 @@
3
3
  module PDF
4
4
  module Core
5
5
  class FilterList
6
+ class NotFilter < StandardError
7
+ DEFAULT_MESSAGE = 'Can not interpret input as a filter'
8
+ MESSAGE_WITH_FILTER = 'Can not interpret input as a filter: %<filter>s'
9
+
10
+ def initialize(message = DEFAULT_MESSAGE, filter: nil)
11
+ if filter
12
+ super format(MESSAGE_WITH_FILTER, filter: filter)
13
+ else
14
+ super(message)
15
+ end
16
+ end
17
+ end
6
18
  def initialize
7
19
  @list = []
8
20
  end
@@ -16,7 +28,7 @@ module PDF
16
28
  @list << [name, params]
17
29
  end
18
30
  else
19
- raise "Can not interpret input as filter: #{filter.inspect}"
31
+ raise NotFilter.new(filter: filter)
20
32
  end
21
33
 
22
34
  self
@@ -43,10 +55,8 @@ module PDF
43
55
  @list.inspect
44
56
  end
45
57
 
46
- def each
47
- @list.each do |filter|
48
- yield(filter)
49
- end
58
+ def each(&block)
59
+ @list.each(&block)
50
60
  end
51
61
  end
52
62
  end
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  #
@@ -45,8 +44,7 @@ module PDF
45
44
 
46
45
  # NOTE: This class may be a good candidate for a copy-on-write hash.
47
46
  class GraphicState
48
- attr_accessor :color_space, :dash, :cap_style, :join_style, :line_width,
49
- :fill_color, :stroke_color
47
+ attr_accessor :color_space, :dash, :cap_style, :join_style, :line_width, :fill_color, :stroke_color
50
48
 
51
49
  def initialize(previous_state = nil)
52
50
  if previous_state
@@ -65,11 +63,12 @@ module PDF
65
63
  def dash_setting
66
64
  return '[] 0 d' unless @dash[:dash]
67
65
 
68
- array = if @dash[:dash].is_a?(Array)
69
- @dash[:dash]
70
- else
71
- [@dash[:dash], @dash[:space]]
72
- end
66
+ array =
67
+ if @dash[:dash].is_a?(Array)
68
+ @dash[:dash]
69
+ else
70
+ [@dash[:dash], @dash[:space]]
71
+ end
73
72
 
74
73
  "[#{PDF::Core.real_params(array)}] "\
75
74
  "#{PDF::Core.real(@dash[:phase])} d"
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  module PDF
@@ -31,7 +31,7 @@ module PDF
31
31
  end
32
32
 
33
33
  def size
34
- leaf? ? children.size : children.map(&:size).reduce(:+)
34
+ leaf? ? children.size : children.sum(&:size)
35
35
  end
36
36
 
37
37
  def leaf?
@@ -78,7 +78,7 @@ module PDF
78
78
  children.insert(insertion_point(value), value)
79
79
  split! if children.length > limit
80
80
  else
81
- fit = children.detect { |child| child >= value }
81
+ fit = children.find { |child| child >= value }
82
82
  fit ||= children.last
83
83
  fit << value
84
84
  end
@@ -107,8 +107,7 @@ module PDF
107
107
  def deep_copy
108
108
  node = dup
109
109
  node.instance_variable_set('@children', Utils.deep_clone(children))
110
- node.instance_variable_set('@ref',
111
- node.ref ? node.ref.deep_copy : nil)
110
+ node.instance_variable_set('@ref', node.ref ? node.ref.deep_copy : nil)
112
111
  node
113
112
  end
114
113
 
@@ -3,8 +3,7 @@
3
3
  module PDF
4
4
  module Core
5
5
  class OutlineItem #:nodoc:
6
- attr_accessor :count, :first, :last, :next, :prev, :parent, :title, :dest,
7
- :closed
6
+ attr_accessor :count, :first, :last, :next, :prev, :parent, :title, :dest, :closed
8
7
 
9
8
  def initialize(title, parent, options)
10
9
  @closed = options[:closed]
@@ -12,8 +12,7 @@ require_relative 'graphics_state'
12
12
  module PDF
13
13
  module Core
14
14
  class Page #:nodoc:
15
- attr_accessor :art_indents, :bleeds, :crops, :document, :margins, :stack,
16
- :trims
15
+ attr_accessor :art_indents, :bleeds, :crops, :document, :margins, :stack, :trims
17
16
  attr_writer :content, :dictionary
18
17
 
19
18
  ZERO_INDENTS = {
@@ -25,20 +24,22 @@ module PDF
25
24
 
26
25
  def initialize(document, options = {})
27
26
  @document = document
28
- @margins = options[:margins] || { left: 36,
29
- right: 36,
30
- top: 36,
31
- bottom: 36 }
27
+ @margins = options[:margins] || {
28
+ left: 36,
29
+ right: 36,
30
+ top: 36,
31
+ bottom: 36
32
+ }
32
33
  @crops = options[:crops] || ZERO_INDENTS
33
34
  @bleeds = options[:bleeds] || ZERO_INDENTS
34
35
  @trims = options[:trims] || ZERO_INDENTS
35
36
  @art_indents = options[:art_indents] || ZERO_INDENTS
36
37
  @stack = GraphicStateStack.new(options[:graphic_state])
37
- @size = options[:size] || 'LETTER'
38
- @layout = options[:layout] || :portrait
38
+ @size = options[:size] || 'LETTER'
39
+ @layout = options[:layout] || :portrait
39
40
 
40
- @stamp_stream = nil
41
- @stamp_dictionary = nil
41
+ @stamp_stream = nil
42
+ @stamp_dictionary = nil
42
43
 
43
44
  @content = document.ref({})
44
45
  content << 'q' << "\n"
@@ -85,7 +86,7 @@ module PDF
85
86
  graphic_stack_size = stack.stack.size
86
87
 
87
88
  document.save_graphics_state
88
- document.send(:freeze_stamp_graphics)
89
+ document.__send__(:freeze_stamp_graphics)
89
90
  yield if block_given?
90
91
 
91
92
  until graphic_stack_size == stack.stack.size
@@ -13,7 +13,7 @@ module PDF
13
13
  module_function
14
14
 
15
15
  def real(num)
16
- num.to_f.round(4)
16
+ format('%<number>.5f', number: num).sub(/((?<!\.)0)+\z/, '')
17
17
  end
18
18
 
19
19
  def real_params(array)
@@ -29,9 +29,11 @@ module PDF
29
29
  # with only 0-9 and a-f characters. That result is valid ASCII so tag
30
30
  # it as such to account for behaviour of different ruby VMs
31
31
  def string_to_hex(str)
32
- str.unpack('H*').first.force_encoding(::Encoding::US_ASCII)
32
+ str.unpack1('H*').force_encoding(::Encoding::US_ASCII)
33
33
  end
34
34
 
35
+ ESCAPED_NAME_CHARACTERS = (1..32).to_a + [35, 40, 41, 47, 60, 62] + (127..255).to_a
36
+
35
37
  # Serializes Ruby objects to their PDF equivalents. Most primitive objects
36
38
  # will work as expected, but please note that Name objects are represented
37
39
  # by Ruby Symbol objects and Dictionary objects are represented by Ruby
@@ -61,27 +63,29 @@ module PDF
61
63
  # Truncate trailing fraction zeroes
62
64
  num_string.sub(/(\d*)((\.0*$)|(\.0*[1-9]*)0*$)/, '\1\4')
63
65
  when Array
64
- '[' + obj.map { |e| pdf_object(e, in_content_stream) }.join(' ') + ']'
66
+ "[#{obj.map { |e| pdf_object(e, in_content_stream) }.join(' ')}]"
65
67
  when PDF::Core::LiteralString
66
- obj = obj.gsub(/[\\\n\r\t\b\f\(\)]/) { |m| "\\#{m}" }
68
+ obj = obj.gsub(/[\\\n\r\t\b\f()]/) { |m| "\\#{m}" }
67
69
  "(#{obj})"
68
70
  when Time
69
- obj = obj.strftime('D:%Y%m%d%H%M%S%z').chop.chop + "'00'"
70
- obj = obj.gsub(/[\\\n\r\t\b\f\(\)]/) { |m| "\\#{m}" }
71
+ obj = "#{obj.strftime('D:%Y%m%d%H%M%S%z').chop.chop}'00'"
72
+ obj = obj.gsub(/[\\\n\r\t\b\f()]/) { |m| "\\#{m}" }
71
73
  "(#{obj})"
72
74
  when PDF::Core::ByteString
73
- "<#{obj.unpack('H*').first}>"
75
+ "<#{obj.unpack1('H*')}>"
74
76
  when String
75
77
  obj = utf8_to_utf16(obj) unless in_content_stream
76
78
  "<#{string_to_hex(obj)}>"
77
79
  when Symbol
78
- '/' + obj.to_s.unpack('C*').map do |n|
79
- if n < 33 || n > 126 || [35, 40, 41, 47, 60, 62].include?(n)
80
- '#' + n.to_s(16).upcase
81
- else
82
- [n].pack('C*')
83
- end
84
- end.join
80
+ name_string =
81
+ obj.to_s.unpack('C*').map do |n|
82
+ if ESCAPED_NAME_CHARACTERS.include?(n)
83
+ "##{n.to_s(16).upcase}"
84
+ else
85
+ [n].pack('C*')
86
+ end
87
+ end.join
88
+ "/#{name_string}"
85
89
  when ::Hash
86
90
  output = +'<< '
87
91
  obj.each do |k, v|
@@ -98,7 +102,7 @@ module PDF
98
102
  when PDF::Core::NameTree::Node
99
103
  pdf_object(obj.to_hash)
100
104
  when PDF::Core::NameTree::Value
101
- pdf_object(obj.name) + ' ' + pdf_object(obj.value)
105
+ "#{pdf_object(obj.name)} #{pdf_object(obj.value)}"
102
106
  when PDF::Core::OutlineRoot, PDF::Core::OutlineItem
103
107
  pdf_object(obj.to_hash)
104
108
  else
@@ -13,6 +13,12 @@ module PDF
13
13
  class Reference #:nodoc:
14
14
  attr_accessor :gen, :data, :offset, :stream, :identifier
15
15
 
16
+ class CannotAttachStream < StandardError
17
+ def initialize(message = 'Cannot attach stream to a non-dictionary object')
18
+ super
19
+ end
20
+ end
21
+
16
22
  def initialize(id, data)
17
23
  @identifier = id
18
24
  @gen = 0
@@ -34,8 +40,9 @@ module PDF
34
40
 
35
41
  def <<(io)
36
42
  unless @data.is_a?(::Hash)
37
- raise 'Cannot attach stream to non-dictionary object'
43
+ raise CannotAttachStream
38
44
  end
45
+
39
46
  (@stream ||= Stream.new) << io
40
47
  end
41
48
 
@@ -170,9 +170,7 @@ module PDF
170
170
  if output.instance_of?(StringIO)
171
171
  str = output.string
172
172
  str.force_encoding(::Encoding::ASCII_8BIT)
173
- return str
174
- else
175
- return nil
173
+ str
176
174
  end
177
175
  end
178
176
 
@@ -210,7 +208,7 @@ module PDF
210
208
  output << "0 #{state.store.size + 1}\n"
211
209
  output << "0000000000 65535 f \n"
212
210
  state.store.each do |ref|
213
- output.printf('%010d', ref.offset)
211
+ output.printf('%<offset>010d', offset: ref.offset)
214
212
  output << " 00000 n \n"
215
213
  end
216
214
  end
@@ -90,8 +90,14 @@ module PDF
90
90
  end
91
91
 
92
92
  def inspect
93
- "#<#{self.class.name}:0x#{format '%014x', object_id} "\
94
- "@stream=#{@stream.inspect}, @filters=#{@filters.inspect}>"
93
+ format(
94
+ '#<%<class>s:0x%<object_id>014x '\
95
+ '@stream=%<stream>s, @filters=%<filters>s>',
96
+ class: self.class.name,
97
+ object_id: object_id,
98
+ stream: @stream.inspect,
99
+ filters: @filters.inspect
100
+ )
95
101
  end
96
102
  end
97
103
  end
@@ -17,11 +17,18 @@ module PDF
17
17
  stroke: 1,
18
18
  fill_stroke: 2,
19
19
  invisible: 3,
20
- fill_clip: 4, stroke_clip: 5,
20
+ fill_clip: 4,
21
+ stroke_clip: 5,
21
22
  fill_stroke_clip: 6,
22
23
  clip: 7
23
24
  }.freeze
24
25
 
26
+ class BadFontFamily < StandardError
27
+ def initialize(message = 'Bad font family')
28
+ super
29
+ end
30
+ end
31
+
25
32
  attr_reader :skip_encoding
26
33
 
27
34
  # Low level call to set the current font style and extract text options
@@ -29,7 +36,8 @@ module PDF
29
36
  #
30
37
  def process_text_options(options)
31
38
  if options[:style]
32
- raise 'Bad font family' unless font.family
39
+ raise BadFontFamily unless font.family
40
+
33
41
  font(font.family, style: options[:style])
34
42
  end
35
43
 
@@ -47,6 +55,7 @@ module PDF
47
55
  #
48
56
  def default_kerning?
49
57
  return true unless defined?(@default_kerning)
58
+
50
59
  @default_kerning
51
60
  end
52
61
 
@@ -182,6 +191,7 @@ module PDF
182
191
  if mode.nil?
183
192
  return defined?(@text_rendering_mode) && @text_rendering_mode || :fill
184
193
  end
194
+
185
195
  unless MODES.key?(mode)
186
196
  raise ArgumentError,
187
197
  "mode must be between one of #{MODES.keys.join(', ')} (#{mode})"
@@ -211,6 +221,7 @@ module PDF
211
221
  if amount.nil?
212
222
  return defined?(@character_spacing) && @character_spacing || 0
213
223
  end
224
+
214
225
  original_character_spacing = character_spacing
215
226
  if original_character_spacing == amount
216
227
  yield
@@ -229,6 +240,7 @@ module PDF
229
240
  #
230
241
  def word_spacing(amount = nil)
231
242
  return defined?(@word_spacing) && @word_spacing || 0 if amount.nil?
243
+
232
244
  original_word_spacing = word_spacing
233
245
  if original_word_spacing == amount
234
246
  yield
@@ -246,8 +258,7 @@ module PDF
246
258
  # percentage of the normal width.
247
259
  def horizontal_text_scaling(amount = nil)
248
260
  if amount.nil?
249
- return defined?(@horizontal_text_scaling) &&
250
- @horizontal_text_scaling || 100
261
+ return defined?(@horizontal_text_scaling) && @horizontal_text_scaling || 100
251
262
  end
252
263
 
253
264
  original_horizontal_text_scaling = horizontal_text_scaling
@@ -262,7 +273,6 @@ module PDF
262
273
  end
263
274
  end
264
275
 
265
- # rubocop: disable Naming/UncommunicativeMethodParamName
266
276
  def add_text_content(text, x, y, options)
267
277
  chunks = font.encode_text(text, options)
268
278
 
@@ -291,12 +301,11 @@ module PDF
291
301
  ].join(' ')
292
302
 
293
303
  operation = options[:kerning] && string.is_a?(Array) ? 'TJ' : 'Tj'
294
- add_content PDF::Core.pdf_object(string, true) + ' ' + operation
304
+ add_content "#{PDF::Core.pdf_object(string, true)} #{operation}"
295
305
  end
296
306
 
297
307
  add_content "ET\n"
298
308
  end
299
- # rubocop: enable Naming/UncommunicativeMethodParamName
300
309
  end
301
310
  end
302
311
  end
@@ -3,10 +3,11 @@
3
3
  module PDF
4
4
  module Core
5
5
  module Utils
6
+ module_function
7
+
6
8
  def deep_clone(object)
7
9
  Marshal.load(Marshal.dump(object))
8
10
  end
9
- module_function :deep_clone
10
11
  end
11
12
  end
12
13
  end
@@ -2,15 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'pdf-core'
5
- spec.version = '0.8.1'
5
+ spec.version = '0.9.0'
6
6
  spec.platform = Gem::Platform::RUBY
7
7
  spec.summary = 'PDF::Core is used by Prawn to render PDF documents'
8
- spec.files = Dir.glob('lib/**/**/*') +
9
- %w[COPYING GPLv2 GPLv3 LICENSE] +
10
- %w[Gemfile Rakefile] +
11
- ['pdf-core.gemspec']
8
+ spec.files =
9
+ Dir.glob('lib/**/**/*') +
10
+ %w[COPYING GPLv2 GPLv3 LICENSE] +
11
+ %w[Gemfile Rakefile] +
12
+ ['pdf-core.gemspec']
12
13
  spec.require_path = 'lib'
13
- spec.required_ruby_version = '>= 2.3'
14
+ spec.required_ruby_version = '>= 2.5'
14
15
  spec.required_rubygems_version = '>= 1.3.6'
15
16
 
16
17
  spec.cert_chain = ['certs/pointlessone.pem']
@@ -29,16 +30,15 @@ Gem::Specification.new do |spec|
29
30
  'gregory.t.brown@gmail.com', 'brad@bradediger.com', 'dnelson@bluejade.com',
30
31
  'greenberg@entryway.net', 'jimmy@deefa.com'
31
32
  ]
32
- spec.rubyforge_project = 'prawn'
33
33
  spec.licenses = %w[PRAWN GPL-2.0 GPL-3.0]
34
- spec.add_development_dependency('bundler')
35
34
  spec.add_development_dependency('pdf-inspector', '~> 1.1.0')
36
35
  spec.add_development_dependency('pdf-reader', '~>1.2')
37
36
  spec.add_development_dependency('rake')
38
37
  spec.add_development_dependency('rspec')
39
- spec.add_development_dependency('rubocop', '~> 0.55')
40
- spec.add_development_dependency('rubocop-rspec', '~> 1.25')
38
+ spec.add_development_dependency('rubocop', '~> 0.93')
39
+ spec.add_development_dependency('rubocop-performance', '~> 1.8')
40
+ spec.add_development_dependency('rubocop-rspec', '~> 1.44')
41
41
  spec.add_development_dependency('simplecov')
42
- spec.homepage = 'http://prawn.majesticseacreature.com'
42
+ spec.homepage = 'http://prawnpdf.org'
43
43
  spec.description = 'PDF::Core is used by Prawn to render PDF documents'
44
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdf-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregory Brown
@@ -14,42 +14,27 @@ bindir: bin
14
14
  cert_chain:
15
15
  - |
16
16
  -----BEGIN CERTIFICATE-----
17
- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQ0wCwYDVQQDDARhbGV4
18
- MRkwFwYKCZImiZPyLGQBGRYJcG9pbnRsZXNzMRMwEQYKCZImiZPyLGQBGRYDb25l
19
- MB4XDTE4MDQyNzE5NTkyNloXDTE5MDQyNzE5NTkyNlowPzENMAsGA1UEAwwEYWxl
20
- eDEZMBcGCgmSJomT8ixkARkWCXBvaW50bGVzczETMBEGCgmSJomT8ixkARkWA29u
21
- ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM85Us8YQr55o/rMl+J+
22
- ula89ODiqjdc0kk+ibzRLCpfaFUJWxEMrhFiApRCopFDMeGXHXjBkfBYsRMFVs0M
23
- Zfe6rIKdNZQlQqHfJ2JlKFek0ehX81buGERi82wNwECNhOZu9c6G5gKjRPP/Q3Y6
24
- K6f/TAggK0+/K1j1NjT+WSVaMBuyomM067ejwhiQkEA3+tT3oT/paEXCOfEtxOdX
25
- 1F8VFd2MbmMK6CGgHbFLApfyDBtDx+ydplGZ3IMZg2nPqwYXTPJx+IuRO21ssDad
26
- gBMIAvL3wIeezJk2xONvhYg0K5jbIQOPB6zD1/9E6Q0LrwSBDkz5oyOn4PRZxgZ/
27
- OiMCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFE+A
28
- jBJVt6ie5r83L/znvqjF1RuuMB0GA1UdEQQWMBSBEmFsZXhAcG9pbnRsZXNzLm9u
29
- ZTAdBgNVHRIEFjAUgRJhbGV4QHBvaW50bGVzcy5vbmUwDQYJKoZIhvcNAQEFBQAD
30
- ggEBAIAbB2aGarAHVCU9gg7Se3Rf2m97uZrSG+LCe8h5x36ZtjxARb6cyBPxoX4C
31
- Tsy3MAgtj2thAoke++/c+XRCeXzzVMDxq3KEK7FONiy3APdHXfygN9iFjnN/K+Nv
32
- 7yKfaocMWSlBlyj0k4r76neyoIgFHHjcnhS8EMst+UR9iUwFibAlVylu88hvnnK0
33
- fD6AgoHJro0u+R/P++J4dKC5wOD4gHGnq694kAdY/3rtRvorLtOJm+pHZSKe/9Je
34
- CWt9UspdQDfg95fK56I9NFeV+LrQ5Cj866DCeH25SFbgK9acS7lw4uOLVu/9QWhZ
35
- otbeukAemPO8HXWM/JCgkR6BaPE=
17
+ MIIDODCCAiCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDDBhhbGV4
18
+ L0RDPXBvaW50bGVzcy9EQz1vbmUwHhcNMjAwODAxMTQxMjE1WhcNMjEwODAxMTQx
19
+ MjE1WjAjMSEwHwYDVQQDDBhhbGV4L0RDPXBvaW50bGVzcy9EQz1vbmUwggEiMA0G
20
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPOVLPGEK+eaP6zJfifrpWvPTg4qo3
21
+ XNJJPom80SwqX2hVCVsRDK4RYgKUQqKRQzHhlx14wZHwWLETBVbNDGX3uqyCnTWU
22
+ JUKh3ydiZShXpNHoV/NW7hhEYvNsDcBAjYTmbvXOhuYCo0Tz/0N2Oiun/0wIICtP
23
+ vytY9TY0/lklWjAbsqJjNOu3o8IYkJBAN/rU96E/6WhFwjnxLcTnV9RfFRXdjG5j
24
+ CughoB2xSwKX8gwbQ8fsnaZRmdyDGYNpz6sGF0zycfiLkTttbLA2nYATCALy98CH
25
+ nsyZNsTjb4WINCuY2yEDjwesw9f/ROkNC68EgQ5M+aMjp+D0WcYGfzojAgMBAAGj
26
+ dzB1MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRPgIwSVbeonua/
27
+ Ny/8576oxdUbrjAdBgNVHREEFjAUgRJhbGV4QHBvaW50bGVzcy5vbmUwHQYDVR0S
28
+ BBYwFIESYWxleEBwb2ludGxlc3Mub25lMA0GCSqGSIb3DQEBCwUAA4IBAQAzhGxF
29
+ M0bXJ9GWD9vdVHOyzBQBJcJAvnsz2yV3+r4eJBsQynFIscsea8lHFL/d1eHYP0mN
30
+ k0fhK+WDcPlrj0Sn/Ezhk2qogTIekwDOK6pZkGRQzD45leJqQMnYd+/TXK3ri485
31
+ Gi4oJ6NitnnUT59SQnjD5JcENfc0EcRzclmVRFE8W4O+ORgo4Dypq1rwYUzxeyUk
32
+ mP5jNBWtH+hGUph28GQb0Hph6YnQb8zEFB88Xq80PK1SzkIPHpbTBk9mwPf6ypeX
33
+ Un1TJEahAlgENVml6CyDXSwk0H8N1V3gm1mb9Fe1T2Z/kAzvjo0qTDEtMVLU7Bxh
34
+ uqMUrdETjTnRYCVq
36
35
  -----END CERTIFICATE-----
37
- date: 2018-04-28 00:00:00.000000000 Z
36
+ date: 2020-10-24 00:00:00.000000000 Z
38
37
  dependencies:
39
- - !ruby/object:Gem::Dependency
40
- name: bundler
41
- requirement: !ruby/object:Gem::Requirement
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- type: :development
47
- prerelease: false
48
- version_requirements: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: '0'
53
38
  - !ruby/object:Gem::Dependency
54
39
  name: pdf-inspector
55
40
  requirement: !ruby/object:Gem::Requirement
@@ -112,28 +97,42 @@ dependencies:
112
97
  requirements:
113
98
  - - "~>"
114
99
  - !ruby/object:Gem::Version
115
- version: '0.55'
100
+ version: '0.93'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '0.93'
108
+ - !ruby/object:Gem::Dependency
109
+ name: rubocop-performance
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.8'
116
115
  type: :development
117
116
  prerelease: false
118
117
  version_requirements: !ruby/object:Gem::Requirement
119
118
  requirements:
120
119
  - - "~>"
121
120
  - !ruby/object:Gem::Version
122
- version: '0.55'
121
+ version: '1.8'
123
122
  - !ruby/object:Gem::Dependency
124
123
  name: rubocop-rspec
125
124
  requirement: !ruby/object:Gem::Requirement
126
125
  requirements:
127
126
  - - "~>"
128
127
  - !ruby/object:Gem::Version
129
- version: '1.25'
128
+ version: '1.44'
130
129
  type: :development
131
130
  prerelease: false
132
131
  version_requirements: !ruby/object:Gem::Requirement
133
132
  requirements:
134
133
  - - "~>"
135
134
  - !ruby/object:Gem::Version
136
- version: '1.25'
135
+ version: '1.44'
137
136
  - !ruby/object:Gem::Dependency
138
137
  name: simplecov
139
138
  requirement: !ruby/object:Gem::Requirement
@@ -187,7 +186,7 @@ files:
187
186
  - lib/pdf/core/text.rb
188
187
  - lib/pdf/core/utils.rb
189
188
  - pdf-core.gemspec
190
- homepage: http://prawn.majesticseacreature.com
189
+ homepage: http://prawnpdf.org
191
190
  licenses:
192
191
  - PRAWN
193
192
  - GPL-2.0
@@ -201,15 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
200
  requirements:
202
201
  - - ">="
203
202
  - !ruby/object:Gem::Version
204
- version: '2.3'
203
+ version: '2.5'
205
204
  required_rubygems_version: !ruby/object:Gem::Requirement
206
205
  requirements:
207
206
  - - ">="
208
207
  - !ruby/object:Gem::Version
209
208
  version: 1.3.6
210
209
  requirements: []
211
- rubyforge_project: prawn
212
- rubygems_version: 2.6.14
210
+ rubygems_version: 3.0.3
213
211
  signing_key:
214
212
  specification_version: 4
215
213
  summary: PDF::Core is used by Prawn to render PDF documents
metadata.gz.sig CHANGED
@@ -1 +1,2 @@
1
- ���HC[K���u/#�oB�*WN�i�����W�C�ݞI�PW���`�텃9m�1��p�*��j�[��j�S�Q$;�T�s���_��}�{�~7_lB��x���ې�W����M~����)c��'ꐭ����}|mQ��l�l��F����f��ܷ#)X.��0��ɠ��)^�`��6|H'�Q�w������\kį�wni�ϴ�_ ˺��&���Y�������,Ⅎ�o�^���+uuG"��
1
+ *gT?���ԜIIJ
2
+ i=��u��!s�8=�{`���1�눖)�oY�1���D�"�4��2r��-Ҏv�7o{\��n�<���b�r���cax�E2TuZ�?���ׯ��p�r�fČZ� �0�#_��-`��W��ח��~�Q�u�B���h���]^-� ��X�-��\�0ՑjY�&�g�G(����:ϖ�Ŝ���姕#���],4�'yE����X�Bz