asciidoctor-pdf 2.0.2 → 2.0.5

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
2
  SHA256:
3
- metadata.gz: c06c3e7edce9f473ace6df96c041850636e6561860f21a12725410370527ac27
4
- data.tar.gz: a6fd22809163ed0d4fa07b8f2a51e0e20227e69f03a9af884c5512ff79d39a06
3
+ metadata.gz: 3c80f2acfd251ff6721a173c153551989ca3372a3a51ddbf628176f24dd84f5f
4
+ data.tar.gz: 19c675f8b088711366559a831dcea41e2008a242dc4e19a321f7e40df50e1acf
5
5
  SHA512:
6
- metadata.gz: 397e550c0519ac08cab6af6f2ea2d598419a79c928a420d54ca296124a6ee6175a4005904c38c4a45e6cbdd5f01b61d410b673ad4133a018aafc69737b4c4c44
7
- data.tar.gz: 19d24ba2f84be03ebff16a738224b1025a52e7a0d77c8dc1c3ffcc44d4c2a825989425da4ad00a886b3456c427287cd4b00b3943bbe13e4b9a4fb48b4842bb62
6
+ metadata.gz: 994846a17ff30b567e29a7a14f63c8d74348ac1644a4bd9ce1d85e687736c8f0a241a5f1fa91a84c52b3ecb9c66ef68701162bdf53fd7e5733c4e6df7b19f81b
7
+ data.tar.gz: 3889ba7c0cee283800c613a6d8d5e2c34b29d1cccb3d68a5d83c09c9ff300e1550c6cf28ffdc5b3b3873a35f14b6ad2b90a75f6e97431d0667c6c4b62a1e5a79
data/CHANGELOG.adoc CHANGED
@@ -5,6 +5,43 @@
5
5
  This document provides a high-level view of the changes to the {project-name} by release.
6
6
  For a detailed view of what has changed, refer to the {url-repo}/commits/main[commit history] on GitHub.
7
7
 
8
+ == 2.0.5 (2022-05-26) - @mojavelinux
9
+
10
+ Bug Fixes::
11
+
12
+ * do not filter TOC entries without an ID when computing the TOC extent (#2210)
13
+ * fix width of multi-word phrase with background and border offset (#2059)
14
+
15
+ === Details
16
+
17
+ {url-repo}/releases/tag/v2.0.5[git tag] | {url-repo}/compare/v2.0.4\...v2.0.5[full diff]
18
+
19
+ == 2.0.4 (2022-05-25) - @mojavelinux
20
+
21
+ Bug Fixes::
22
+
23
+ * fix calculation of TOC extent when TOC entry has children but no ID (#2208)
24
+
25
+ === Details
26
+
27
+ {url-repo}/releases/tag/v2.0.4[git tag] | {url-repo}/compare/v2.0.3\...v2.0.4[full diff]
28
+
29
+ == 2.0.3 (2022-05-25) - @mojavelinux
30
+
31
+ Improvements::
32
+
33
+ * compute the optimize settings in init_pdf and store as Hash instead of after writing the PDF file
34
+
35
+ Bug Fixes::
36
+
37
+ * adjust TrimBox to fit inside of BleedBox when using optimizer and compliance is PDF/X (#2203)
38
+ * set height of resized image to available height to avoid float precision error when scaling down image to fit page (#2205)
39
+ * prevent content on title page from overrunning the bounds of a single page and warn; restriction applies to `ink_title_page`
40
+
41
+ === Details
42
+
43
+ {url-repo}/releases/tag/v2.0.3[git tag] | {url-repo}/compare/v2.0.2\...v2.0.3[full diff]
44
+
8
45
  == 2.0.2 (2022-05-22) - @mojavelinux
9
46
 
10
47
  Bug Fixes::
data/README.adoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Asciidoctor PDF: A native PDF converter for AsciiDoc
2
2
  Dan Allen <https://github.com/mojavelinux[@mojavelinux]>; Sarah White <https://github.com/graphitefriction[@graphitefriction]>
3
- v2.0.2, 2022-05-22
3
+ v2.0.5, 2022-05-26
4
4
  // Settings:
5
5
  :experimental:
6
6
  :idprefix:
@@ -24,7 +24,7 @@ endif::[]
24
24
  :project-handle: asciidoctor-pdf
25
25
  // Variables:
26
26
  :release-line: 2.0.x
27
- :release-version: 2.0.2
27
+ :release-version: 2.0.5
28
28
  // URLs:
29
29
  :url-gem: https://rubygems.org/gems/asciidoctor-pdf
30
30
  :url-project: https://github.com/asciidoctor/asciidoctor-pdf
@@ -97,14 +97,7 @@ Pass the name of the gem to the `gem install` command as follows:
97
97
  Installing Asciidoctor PDF will install a number of other gems mentioned in these docs, including asciidoctor, prawn, prawn-svg, prawn-table, prawn-icon, and ttfunk.
98
98
  For the most part, the versions of these dependencies are locked to the version of Asciidoctor PDF.
99
99
 
100
- If you're using Ruby 3.1 or better, you must also install the matrix gem until Prawn 2.5.0 or better is released.
101
-
102
- $ gem install matrix
103
-
104
- The matrix gem used to be bundled in the Ruby distribution, but was split out starting in Ruby 3.1.
105
- This requirement will be lifted once Prawn declares it as a runtime dependency.
106
-
107
- For further installation information, see {url-project-docs}/install/[the installation documentation].
100
+ For further installation information about installing Asciidoctor PDF, see {url-project-docs}/install/[the installation documentation].
108
101
  For troubleshooting help, see {url-project-docs}/install/#installation-troubleshooting[Installation troubleshooting].
109
102
 
110
103
  === Install a prerelease or development version
@@ -174,7 +174,9 @@ module Asciidoctor
174
174
  if (has_title_page = (title_page_on = doc.doctype == 'book' || (doc.attr? 'title-page')) && (start_title_page doc))
175
175
  # NOTE: the base font must be set before any content is written to the main or scratch document
176
176
  font @theme.base_font_family, size: @root_font_size, style: @theme.base_font_style
177
- ink_title_page doc
177
+ if perform_on_single_page { ink_title_page doc }
178
+ log :warn, 'the title page contents has been truncated to prevent it from overrunning the bounds of a single page'
179
+ end
178
180
  start_new_page
179
181
  else
180
182
  @page_margin_by_side[:cover] = @page_margin_by_side[:recto] if @media == 'prepress' && page_number == 0
@@ -321,6 +323,7 @@ module Asciidoctor
321
323
  stamp_foreground_image doc, has_front_cover
322
324
  ink_cover_page doc, :back
323
325
  add_dest_for_top doc
326
+ state.pages.each {|it| fit_trim_box it } if (@optimize&.[] :compliance)&.start_with? 'PDF/X'
324
327
  nil
325
328
  end
326
329
 
@@ -411,8 +414,14 @@ module Asciidoctor
411
414
  # NOTE: we have to init Pdfmark class here while we have reference to the doc
412
415
  @pdfmark = (doc.attr? 'pdfmark') ? (Pdfmark.new doc) : nil
413
416
  # NOTE: defer instantiating optimizer until we know min pdf version
414
- if (@optimize = doc.attr 'optimize')
415
- @optimize = nil unless (defined? ::Asciidoctor::PDF::Optimizer) || !(Helpers.require_library OptimizerRequirePath, 'rghost', :warn).nil? # rubocop:disable Style/SoleNestedConditional
417
+ if (optimize = doc.attr 'optimize') &&
418
+ ((defined? ::Asciidoctor::PDF::Optimizer) || !(Helpers.require_library OptimizerRequirePath, 'rghost', :warn).nil?)
419
+ @optimize = (optimize.include? ',') ?
420
+ ([:quality, :compliance].zip (optimize.split ',', 2)).to_h :
421
+ ((optimize.include? '/') ? { compliance: optimize } : { quality: optimize })
422
+ fit_trim_box if @optimize[:compliance]&.start_with? 'PDF/X'
423
+ else
424
+ @optimize = nil
416
425
  end
417
426
  allocate_scratch_prototype
418
427
  self
@@ -1110,11 +1119,11 @@ module Asciidoctor
1110
1119
  end
1111
1120
  if (srclang = node.attr 'language')
1112
1121
  if srclang.include? '?'
1113
- if (lexer = ::Rouge::Lexer.find_fancy srclang) && lexer.tag == 'php' && !(node.option? 'mixed') && !((lexer_opts = lexer.options).key? 'start_inline')
1122
+ if (lexer = ::Rouge::Lexer.find_fancy srclang)&.tag == 'php' && !(node.option? 'mixed') && !((lexer_opts = lexer.options).key? 'start_inline')
1114
1123
  lexer = lexer.class.new lexer_opts.merge 'start_inline' => true
1115
1124
  end
1116
- elsif (lexer = ::Rouge::Lexer.find srclang)
1117
- lexer = lexer.new start_inline: true if lexer.tag == 'php' && !(node.option? 'mixed')
1125
+ elsif (lexer = ::Rouge::Lexer.find srclang)&.tag == 'php' && !(node.option? 'mixed')
1126
+ lexer = lexer.new start_inline: true
1118
1127
  end
1119
1128
  end
1120
1129
  lexer ||= ::Rouge::Lexers::PlainText
@@ -1205,10 +1214,10 @@ module Asciidoctor
1205
1214
  b_left_width = nil
1206
1215
  b_width = nil if (b_width = @theme[%(#{category}_border_width)]) == 0
1207
1216
  end
1208
- if (attribution = (node.attr? 'attribution') && (node.attr 'attribution'))
1217
+ if (attribution = node.attr 'attribution')
1209
1218
  # NOTE: temporary workaround to allow bare & to be used without having to wrap value in single quotes
1210
1219
  attribution = escape_amp attribution if attribution.include? '&'
1211
- if (citetitle = node.attr 'citetitle') && (citetitle.include? '&')
1220
+ if (citetitle = node.attr 'citetitle')&.include? '&'
1212
1221
  citetitle = escape_amp citetitle
1213
1222
  end
1214
1223
  end
@@ -1760,7 +1769,7 @@ module Asciidoctor
1760
1769
  advance_page
1761
1770
  available_h = cursor - caption_h
1762
1771
  end
1763
- rendered_w, rendered_h = image_info.calc_image_dimensions height: available_h if rendered_h > available_h
1772
+ rendered_w = (image_info.calc_image_dimensions height: (rendered_h = available_h))[0] if rendered_h > available_h
1764
1773
  end
1765
1774
  add_dest_for_block node if node.id
1766
1775
  # NOTE: workaround to fix Prawn not adding fill and stroke commands on page that only has an image;
@@ -3608,7 +3617,6 @@ module Asciidoctor
3608
3617
  end
3609
3618
  end
3610
3619
 
3611
- # TODO: prevent content from spilling to next page
3612
3620
  theme_font :title_page do
3613
3621
  if (title_top = @theme.title_page_title_top)
3614
3622
  @y = resolve_top title_top
@@ -3748,7 +3756,6 @@ module Asciidoctor
3748
3756
  hanging_indent = @theme.toc_hanging_indent
3749
3757
  entries.each do |entry|
3750
3758
  next if (num_levels_for_entry = (entry.attr 'toclevels', num_levels).to_i) < (entry_level = entry.level + 1).pred ||
3751
- !(entry_anchor = (entry.attr 'pdf-anchor') || entry.id) ||
3752
3759
  ((entry.option? 'notitle') && entry == entry.document.last_child && entry.empty?)
3753
3760
  theme_font :toc, level: entry_level do
3754
3761
  entry_title = entry.context == :section ? entry.numbered_title : (entry.title? ? entry.title : (entry.xreftext 'basic'))
@@ -3762,6 +3769,7 @@ module Asciidoctor
3762
3769
  ink_prose entry_title, anchor: true, normalize: false, hanging_indent: hanging_indent, normalize_line_height: true, margin: 0
3763
3770
  end
3764
3771
  else
3772
+ entry_anchor = (entry.attr 'pdf-anchor') || entry.id
3765
3773
  if !(physical_pgnum = entry.attr 'pdf-page-start') &&
3766
3774
  (target_page_ref = (get_dest entry_anchor)&.first) &&
3767
3775
  (target_page_idx = state.pages.index {|candidate| candidate.dictionary == target_page_ref })
@@ -4403,13 +4411,8 @@ module Asciidoctor
4403
4411
  pdf_doc.render_file target
4404
4412
  # QUESTION: restore attributes first?
4405
4413
  @pdfmark&.generate_file target
4406
- if (quality = @optimize)
4407
- if quality.include? ','
4408
- quality, compliance = quality.split ',', 2
4409
- elsif quality.include? '/'
4410
- quality, compliance = nil, quality
4411
- end
4412
- (Optimizer.new quality, pdf_doc.min_version, compliance).optimize_file target
4414
+ if (optimize = @optimize)
4415
+ (Optimizer.new optimize[:quality], pdf_doc.min_version, optimize[:compliance]).optimize_file target
4413
4416
  end
4414
4417
  to_file = true
4415
4418
  end
@@ -4636,6 +4639,15 @@ module Asciidoctor
4636
4639
  (max_height = bounds.height) < preferred_size ? max_height : preferred_size
4637
4640
  end
4638
4641
 
4642
+ def fit_trim_box page_ = page
4643
+ page_.dictionary.data[:TrimBox].tap do |trim_box|
4644
+ trim_box[0] += 1e-4
4645
+ trim_box[1] += 1e-4
4646
+ trim_box[2] -= 1e-4
4647
+ trim_box[3] -= 1e-4
4648
+ end
4649
+ end
4650
+
4639
4651
  def font_path font_file, fonts_dir
4640
4652
  # resolve relative to built-in font dir unless path is absolute
4641
4653
  ::File.absolute_path font_file, fonts_dir
@@ -5,8 +5,12 @@ Prawn::Text::Formatted::Fragment.prepend (Module.new do
5
5
 
6
6
  # Prevent fragment from being written by discarding the text, optionally forcing the width to 0
7
7
  def conceal force_width_to_zero = false
8
- @text = ''
9
- @width = 0 if force_width_to_zero
8
+ if force_width_to_zero
9
+ @width = 0
10
+ @text = ''
11
+ else
12
+ @text = ' ' * space_count # preserve space_count so width is still computed correctly
13
+ end
10
14
  end
11
15
 
12
16
  # Don't strip soft hyphens when repacking unretrieved fragments
@@ -9,11 +9,16 @@ module Asciidoctor::PDF::FormattedText
9
9
  text = fragment.text
10
10
  x = fragment.left
11
11
  y = fragment.baseline
12
- align = fragment.format_state[:align]
13
- if (align == :center || align == :right) && (gap_width = fragment.width - (document.width_of text)) != 0
14
- x += gap_width * (align == :center ? 0.5 : 1)
12
+ align = (format_state = fragment.format_state)[:align]
13
+ if align == :center || align == :right
14
+ gap_width = (format_state.key? :width) ?
15
+ fragment.width - (document.width_of text) :
16
+ (format_state[:border_offset] || 0) * 2
17
+ x += gap_width * (align == :center ? 0.5 : 1) if gap_width > 0
18
+ end
19
+ document.word_spacing fragment.word_spacing do
20
+ document.draw_text! text, at: [x, y], kerning: document.default_kerning?
15
21
  end
16
- document.draw_text! text, at: [x, y]
17
22
  fragment.conceal
18
23
  end
19
24
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module PDF
5
- VERSION = '2.0.2'
5
+ VERSION = '2.0.5'
6
6
  end
7
7
  end
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: 2.0.2
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-22 00:00:00.000000000 Z
12
+ date: 2022-05-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: asciidoctor