asciidoctor-pdf 1.5.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +68 -1
  3. data/{LICENSE.adoc → LICENSE} +3 -4
  4. data/NOTICE.adoc +4 -6
  5. data/README.adoc +139 -46
  6. data/asciidoctor-pdf.gemspec +11 -14
  7. data/bin/asciidoctor-pdf-optimize +1 -1
  8. data/docs/theming-guide.adoc +26 -22
  9. data/lib/asciidoctor/pdf/converter.rb +88 -78
  10. data/lib/asciidoctor/pdf/ext/asciidoctor/section.rb +3 -2
  11. data/lib/asciidoctor/pdf/ext/core/file.rb +4 -5
  12. data/lib/asciidoctor/pdf/ext/core.rb +0 -1
  13. data/lib/asciidoctor/pdf/ext/pdf-core/pdf_object.rb +1 -1
  14. data/lib/asciidoctor/pdf/ext/pdf-core.rb +15 -0
  15. data/lib/asciidoctor/pdf/ext/prawn/coderay_encoder.rb +4 -13
  16. data/lib/asciidoctor/pdf/ext/prawn/extensions.rb +28 -2
  17. data/lib/asciidoctor/pdf/ext/prawn/font_metric_cache.rb +1 -1
  18. data/lib/asciidoctor/pdf/ext/prawn/formatted_text/arranger.rb +15 -0
  19. data/lib/asciidoctor/pdf/ext/prawn/formatted_text/box.rb +28 -7
  20. data/lib/asciidoctor/pdf/ext/prawn-svg.rb +0 -1
  21. data/lib/asciidoctor/pdf/ext/prawn.rb +1 -0
  22. data/lib/asciidoctor/pdf/ext/pygments.rb +11 -9
  23. data/lib/asciidoctor/pdf/ext.rb +0 -1
  24. data/lib/asciidoctor/pdf/formatted_text/fragment_position_renderer.rb +5 -1
  25. data/lib/asciidoctor/pdf/formatted_text/inline_image_arranger.rb +9 -2
  26. data/lib/asciidoctor/pdf/formatted_text/transform.rb +6 -4
  27. data/lib/asciidoctor/pdf/index_catalog.rb +1 -1
  28. data/lib/asciidoctor/pdf/optimizer.rb +40 -12
  29. data/lib/asciidoctor/pdf/pdfmark.rb +1 -2
  30. data/lib/asciidoctor/pdf/text_transformer.rb +10 -71
  31. data/lib/asciidoctor/pdf/theme_loader.rb +1 -1
  32. data/lib/asciidoctor/pdf/version.rb +1 -1
  33. data/lib/asciidoctor/pdf.rb +3 -0
  34. metadata +21 -63
  35. data/lib/asciidoctor/pdf/ext/core/numeric.rb +0 -26
  36. data/lib/asciidoctor/pdf/ext/prawn-svg/interface.rb +0 -14
  37. data/lib/asciidoctor/pdf/ext/prawn-templates.rb +0 -7
@@ -18,7 +18,7 @@ module Asciidoctor
18
18
  creation_date = (::Time.parse doc.attr 'localdatetime') rescue (now || ::Time.now)
19
19
  end
20
20
  # FIXME: use sanitize: :plain_text once available
21
- content = <<~EOS
21
+ <<~EOS
22
22
  [ /Title #{(sanitize doc.doctitle use_fallback: true).to_pdf_object}
23
23
  /Author #{(doc.attr 'authors').to_pdf_object}
24
24
  /Subject #{(doc.attr 'subject').to_pdf_object}
@@ -29,7 +29,6 @@ module Asciidoctor
29
29
  /Producer #{(doc.attr 'publisher').to_pdf_object}
30
30
  /DOCINFO pdfmark
31
31
  EOS
32
- content
33
32
  end
34
33
 
35
34
  def generate_file pdf_file
@@ -1,34 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- unless RUBY_VERSION >= '2.4'
4
- begin
5
- require 'unicode' unless defined? Unicode::VERSION
6
- rescue LoadError
7
- begin
8
- require 'active_support/multibyte' unless defined? ActiveSupport::Multibyte
9
- rescue LoadError; end
10
- end
11
- end
12
-
13
3
  module Asciidoctor
14
4
  module PDF
15
5
  module TextTransformer
16
6
  XMLMarkupRx = /&#?[a-z\d]+;|</
17
7
  PCDATAFilterRx = /(&#?[a-z\d]+;|<[^>]+>)|([^&<]+)/
18
8
  TagFilterRx = /(<[^>]+>)|([^<]+)/
19
- WordRx = /\S+/
9
+ ContiguousCharsRx = /\p{Graph}+/
10
+ WordRx = /\p{Word}+/
11
+ Hyphen = '-'
20
12
  SoftHyphen = ?\u00ad
21
13
 
22
14
  def capitalize_words_pcdata string
23
15
  if XMLMarkupRx.match? string
24
- string.gsub(PCDATAFilterRx) { $2 ? (capitalize_words_mb $2) : $1 }
16
+ string.gsub(PCDATAFilterRx) { $2 ? (capitalize_words $2) : $1 }
25
17
  else
26
- capitalize_words_mb string
18
+ capitalize_words string
27
19
  end
28
20
  end
29
21
 
30
- def capitalize_words_mb string
31
- string.gsub(WordRx) { capitalize_mb $& }
22
+ def capitalize_words string
23
+ string.gsub(ContiguousCharsRx) { $&.capitalize }
32
24
  end
33
25
 
34
26
  def hyphenate_words_pcdata string, hyphenator
@@ -45,69 +37,16 @@ module Asciidoctor
45
37
 
46
38
  def lowercase_pcdata string
47
39
  if string.include? '<'
48
- string.gsub(TagFilterRx) { $2 ? (lowercase_mb $2) : $1 }
40
+ string.gsub(TagFilterRx) { $2 ? $2.downcase : $1 }
49
41
  else
50
- lowercase_mb string
42
+ string.downcase
51
43
  end
52
44
  end
53
45
 
54
46
  def uppercase_pcdata string
55
47
  if XMLMarkupRx.match? string
56
- string.gsub(PCDATAFilterRx) { $2 ? (uppercase_mb $2) : $1 }
48
+ string.gsub(PCDATAFilterRx) { $2 ? $2.upcase : $1 }
57
49
  else
58
- uppercase_mb string
59
- end
60
- end
61
-
62
- if RUBY_VERSION >= '2.4'
63
- def capitalize_mb string
64
- string.capitalize
65
- end
66
-
67
- def lowercase_mb string
68
- string.downcase
69
- end
70
-
71
- def uppercase_mb string
72
- string.upcase
73
- end
74
- # NOTE Unicode library is 4x as fast as ActiveSupport::MultiByte::Chars
75
- elsif defined? ::Unicode
76
- def capitalize_mb string
77
- string.ascii_only? ? string.capitalize : (::Unicode.capitalize string)
78
- end
79
-
80
- def lowercase_mb string
81
- string.ascii_only? ? string.downcase : (::Unicode.downcase string)
82
- end
83
-
84
- def uppercase_mb string
85
- string.ascii_only? ? string.upcase : (::Unicode.upcase string)
86
- end
87
- elsif defined? ::ActiveSupport::Multibyte
88
- MultibyteChars = ::ActiveSupport::Multibyte::Chars
89
-
90
- def capitalize_mb string
91
- string.ascii_only? ? string.capitalize : (MultibyteChars.new string).capitalize.to_s
92
- end
93
-
94
- def lowercase_mb string
95
- string.ascii_only? ? string.downcase : (MultibyteChars.new string).downcase.to_s
96
- end
97
-
98
- def uppercase_mb string
99
- string.ascii_only? ? string.upcase : (MultibyteChars.new string).upcase.to_s
100
- end
101
- else
102
- def capitalize_mb string
103
- string.capitalize
104
- end
105
-
106
- def lowercase_mb string
107
- string.downcase
108
- end
109
-
110
- def uppercase_mb string
111
50
  string.upcase
112
51
  end
113
52
  end
@@ -94,7 +94,7 @@ module Asciidoctor
94
94
  yaml_data = ::SafeYAML.load data, filename
95
95
  if ::Hash === yaml_data && (yaml_data.key? 'extends')
96
96
  if (extends = yaml_data.delete 'extends')
97
- [*extends].each do |extend_path|
97
+ (Array extends).each do |extend_path|
98
98
  if extend_path == 'base'
99
99
  theme_data = theme_data ? (::OpenStruct.new theme_data.to_h.merge load_base_theme.to_h) : load_base_theme
100
100
  next
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module PDF
5
- VERSION = '1.5.2'
5
+ VERSION = '1.6.1'
6
6
  end
7
7
  Pdf = PDF unless const_defined? :Pdf, false
8
8
  end
@@ -3,6 +3,9 @@
3
3
  require_relative 'pdf/version'
4
4
  require 'asciidoctor' unless defined? Asciidoctor.load
5
5
  require 'prawn'
6
+ Prawn.send :remove_const, :FLOAT_PRECISION
7
+ Prawn::FLOAT_PRECISION = 1e-3
8
+ require 'prawn/templates'
6
9
  begin
7
10
  require 'prawn/gmagick'
8
11
  rescue LoadError
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
@@ -9,62 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-02-21 00:00:00.000000000 Z
12
+ date: 2021-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: asciidoctor
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: 1.5.3
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: 3.0.0
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: 1.5.3
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: 3.0.0
34
- - !ruby/object:Gem::Dependency
35
- name: prawn
36
16
  requirement: !ruby/object:Gem::Requirement
37
17
  requirements:
38
18
  - - "~>"
39
19
  - !ruby/object:Gem::Version
40
- version: 2.2.0
20
+ version: '2.0'
41
21
  type: :runtime
42
22
  prerelease: false
43
23
  version_requirements: !ruby/object:Gem::Requirement
44
24
  requirements:
45
25
  - - "~>"
46
26
  - !ruby/object:Gem::Version
47
- version: 2.2.0
27
+ version: '2.0'
48
28
  - !ruby/object:Gem::Dependency
49
- name: ttfunk
29
+ name: prawn
50
30
  requirement: !ruby/object:Gem::Requirement
51
31
  requirements:
52
32
  - - "~>"
53
33
  - !ruby/object:Gem::Version
54
- version: 1.5.0
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: 1.5.1
34
+ version: 2.4.0
58
35
  type: :runtime
59
36
  prerelease: false
60
37
  version_requirements: !ruby/object:Gem::Requirement
61
38
  requirements:
62
39
  - - "~>"
63
40
  - !ruby/object:Gem::Version
64
- version: 1.5.0
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: 1.5.1
41
+ version: 2.4.0
68
42
  - !ruby/object:Gem::Dependency
69
43
  name: prawn-table
70
44
  requirement: !ruby/object:Gem::Requirement
@@ -99,28 +73,28 @@ dependencies:
99
73
  requirements:
100
74
  - - "~>"
101
75
  - !ruby/object:Gem::Version
102
- version: 0.30.0
76
+ version: 0.32.0
103
77
  type: :runtime
104
78
  prerelease: false
105
79
  version_requirements: !ruby/object:Gem::Requirement
106
80
  requirements:
107
81
  - - "~>"
108
82
  - !ruby/object:Gem::Version
109
- version: 0.30.0
83
+ version: 0.32.0
110
84
  - !ruby/object:Gem::Dependency
111
85
  name: prawn-icon
112
86
  requirement: !ruby/object:Gem::Requirement
113
87
  requirements:
114
88
  - - "~>"
115
89
  - !ruby/object:Gem::Version
116
- version: 2.5.0
90
+ version: 3.0.0
117
91
  type: :runtime
118
92
  prerelease: false
119
93
  version_requirements: !ruby/object:Gem::Requirement
120
94
  requirements:
121
95
  - - "~>"
122
96
  - !ruby/object:Gem::Version
123
- version: 2.5.0
97
+ version: 3.0.0
124
98
  - !ruby/object:Gem::Dependency
125
99
  name: safe_yaml
126
100
  requirement: !ruby/object:Gem::Requirement
@@ -135,34 +109,20 @@ dependencies:
135
109
  - - "~>"
136
110
  - !ruby/object:Gem::Version
137
111
  version: 1.0.0
138
- - !ruby/object:Gem::Dependency
139
- name: thread_safe
140
- requirement: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: 0.3.0
145
- type: :runtime
146
- prerelease: false
147
- version_requirements: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: 0.3.0
152
112
  - !ruby/object:Gem::Dependency
153
113
  name: concurrent-ruby
154
114
  requirement: !ruby/object:Gem::Requirement
155
115
  requirements:
156
116
  - - "~>"
157
117
  - !ruby/object:Gem::Version
158
- version: 1.1.0
118
+ version: '1.1'
159
119
  type: :runtime
160
120
  prerelease: false
161
121
  version_requirements: !ruby/object:Gem::Requirement
162
122
  requirements:
163
123
  - - "~>"
164
124
  - !ruby/object:Gem::Version
165
- version: 1.1.0
125
+ version: '1.1'
166
126
  - !ruby/object:Gem::Dependency
167
127
  name: treetop
168
128
  requirement: !ruby/object:Gem::Requirement
@@ -197,14 +157,14 @@ dependencies:
197
157
  requirements:
198
158
  - - "~>"
199
159
  - !ruby/object:Gem::Version
200
- version: 3.9.0
160
+ version: 3.10.0
201
161
  type: :development
202
162
  prerelease: false
203
163
  version_requirements: !ruby/object:Gem::Requirement
204
164
  requirements:
205
165
  - - "~>"
206
166
  - !ruby/object:Gem::Version
207
- version: 3.9.0
167
+ version: 3.10.0
208
168
  - !ruby/object:Gem::Dependency
209
169
  name: pdf-inspector
210
170
  requirement: !ruby/object:Gem::Requirement
@@ -253,14 +213,14 @@ dependencies:
253
213
  requirements:
254
214
  - - "~>"
255
215
  - !ruby/object:Gem::Version
256
- version: 1.3.0
216
+ version: 1.4.0
257
217
  type: :development
258
218
  prerelease: false
259
219
  version_requirements: !ruby/object:Gem::Requirement
260
220
  requirements:
261
221
  - - "~>"
262
222
  - !ruby/object:Gem::Version
263
- version: 1.3.0
223
+ version: 1.4.0
264
224
  description: An extension for Asciidoctor that converts AsciiDoc documents to PDF
265
225
  using the Prawn PDF library.
266
226
  email: dan@opendevise.com
@@ -272,7 +232,7 @@ extra_rdoc_files: []
272
232
  files:
273
233
  - ".yardopts"
274
234
  - CHANGELOG.adoc
275
- - LICENSE.adoc
235
+ - LICENSE
276
236
  - NOTICE.adoc
277
237
  - README.adoc
278
238
  - asciidoctor-pdf.gemspec
@@ -321,7 +281,6 @@ files:
321
281
  - lib/asciidoctor/pdf/ext/core/array.rb
322
282
  - lib/asciidoctor/pdf/ext/core/file.rb
323
283
  - lib/asciidoctor/pdf/ext/core/hash.rb
324
- - lib/asciidoctor/pdf/ext/core/numeric.rb
325
284
  - lib/asciidoctor/pdf/ext/core/object.rb
326
285
  - lib/asciidoctor/pdf/ext/core/quantifiable_stdout.rb
327
286
  - lib/asciidoctor/pdf/ext/core/regexp.rb
@@ -330,17 +289,16 @@ files:
330
289
  - lib/asciidoctor/pdf/ext/pdf-core/page.rb
331
290
  - lib/asciidoctor/pdf/ext/pdf-core/pdf_object.rb
332
291
  - lib/asciidoctor/pdf/ext/prawn-svg.rb
333
- - lib/asciidoctor/pdf/ext/prawn-svg/interface.rb
334
292
  - lib/asciidoctor/pdf/ext/prawn-table.rb
335
293
  - lib/asciidoctor/pdf/ext/prawn-table/cell.rb
336
294
  - lib/asciidoctor/pdf/ext/prawn-table/cell/asciidoc.rb
337
295
  - lib/asciidoctor/pdf/ext/prawn-table/cell/text.rb
338
- - lib/asciidoctor/pdf/ext/prawn-templates.rb
339
296
  - lib/asciidoctor/pdf/ext/prawn.rb
340
297
  - lib/asciidoctor/pdf/ext/prawn/coderay_encoder.rb
341
298
  - lib/asciidoctor/pdf/ext/prawn/extensions.rb
342
299
  - lib/asciidoctor/pdf/ext/prawn/font/afm.rb
343
300
  - lib/asciidoctor/pdf/ext/prawn/font_metric_cache.rb
301
+ - lib/asciidoctor/pdf/ext/prawn/formatted_text/arranger.rb
344
302
  - lib/asciidoctor/pdf/ext/prawn/formatted_text/box.rb
345
303
  - lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb
346
304
  - lib/asciidoctor/pdf/ext/prawn/images.rb
@@ -374,7 +332,7 @@ licenses:
374
332
  - MIT
375
333
  metadata:
376
334
  bug_tracker_uri: https://github.com/asciidoctor/asciidoctor-pdf/issues
377
- changelog_uri: https://github.com/asciidoctor/asciidoctor-pdf/blob/master/CHANGELOG.adoc
335
+ changelog_uri: https://github.com/asciidoctor/asciidoctor-pdf/blob/main/CHANGELOG.adoc
378
336
  mailing_list_uri: http://discuss.asciidoctor.org
379
337
  source_code_uri: https://github.com/asciidoctor/asciidoctor-pdf
380
338
  post_install_message:
@@ -392,7 +350,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
392
350
  - !ruby/object:Gem::Version
393
351
  version: '0'
394
352
  requirements: []
395
- rubygems_version: 3.0.6
353
+ rubygems_version: 3.2.22
396
354
  signing_key:
397
355
  specification_version: 4
398
356
  summary: Converts AsciiDoc documents to PDF using Asciidoctor and Prawn
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # NOTE remove once minimum required Ruby version is at least 2.4
4
- Float.prepend (Module.new do
5
- def truncate *args
6
- if args.length == 1
7
- if (precision = Integer args.shift) == 0
8
- super
9
- elsif precision > 0
10
- precision_factor = 10.0**precision
11
- (self * precision_factor).to_i / precision_factor
12
- else
13
- precision_factor = 10**precision.abs
14
- (self / precision_factor).to_i * precision_factor
15
- end
16
- else
17
- super
18
- end
19
- end
20
- end) if (Float.instance_method :truncate).arity == 0
21
-
22
- Integer.prepend (Module.new do
23
- def truncate *_args
24
- super()
25
- end
26
- end) if (Integer.instance_method :truncate).arity == 0
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Prawn
4
- module SVG
5
- class Interface
6
- def resize opts = {}
7
- sizing = document.sizing
8
- sizing.requested_width = opts[:width]
9
- sizing.requested_height = opts[:height]
10
- sizing.calculate
11
- end
12
- end
13
- end
14
- end unless Prawn::SVG::Interface.method_defined? :resize
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Prawn::Document
4
- # NOTE allows prawn-templates 0.0.4 to be used with prawn >= 2.2.0
5
- const_set :VALID_OPTIONS, (send :remove_const, :VALID_OPTIONS).dup if VALID_OPTIONS.frozen?
6
- end
7
- require 'prawn/templates'