pdf-core 0.8.1 → 0.9.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.
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