asciidoctor-pdf 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +17 -0
- data/README.adoc +2 -2
- data/lib/asciidoctor/pdf/converter.rb +15 -5
- data/lib/asciidoctor/pdf/ext/prawn/extensions.rb +27 -26
- data/lib/asciidoctor/pdf/formatted_text/text_background_and_border_renderer.rb +3 -3
- data/lib/asciidoctor/pdf/formatted_text/transform.rb +3 -0
- data/lib/asciidoctor/pdf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfcc8354e8152f540a4510dbddc39d38d577ee958aa51fbfb10b92d965abaa0c
|
4
|
+
data.tar.gz: 68848a664ded97d88c45e2d8357f3880a5e10f4b6cc0f0c44b014cd85088d1ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1fb4074705e06fb70c188278e677c69f696e832d28d5ad49e6135b218ef36416abfaebfdedd980ff094579ae509d5006b59a52c57cf62374e9bdd69822b3714
|
7
|
+
data.tar.gz: 07acff80d3d5c04e5ba8fbf591bbf3d952685bd0de605ac0e60645bbe478eafd1013451d4085abf8e2a41a996f5c4d8bba885377a1878a301ad75e144c0d2316
|
data/CHANGELOG.adoc
CHANGED
@@ -5,6 +5,23 @@
|
|
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.1.1 (2022-06-15) - @mojavelinux
|
9
|
+
|
10
|
+
Improvements::
|
11
|
+
|
12
|
+
* store zero-based column on Extent for extensions to use to position cursor at start of extent
|
13
|
+
|
14
|
+
Bug Fixes::
|
15
|
+
|
16
|
+
* place block image in SVG format in correct column when align is left and page columns are enabled (#2241)
|
17
|
+
* accurately trap LoadError from CodeRay if source language is not recognized on code block
|
18
|
+
* only draw rounded rectangle around phrase if `border-radius` is > 0
|
19
|
+
* use `base-border-color` value if border width is set on role for inline phrase but not border color
|
20
|
+
|
21
|
+
=== Details
|
22
|
+
|
23
|
+
{url-repo}/releases/tag/v2.1.1[git tag] | {url-repo}/compare/v2.1.0\...v2.1.1[full diff]
|
24
|
+
|
8
25
|
== 2.1.0 (2022-06-11) - @mojavelinux
|
9
26
|
|
10
27
|
Enhancements::
|
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.1.
|
3
|
+
v2.1.1, 2022-06-15
|
4
4
|
// Settings:
|
5
5
|
:experimental:
|
6
6
|
:idprefix:
|
@@ -46,7 +46,7 @@ The aim of this library is to take the pain out of creating PDF documents from A
|
|
46
46
|
|
47
47
|
[NOTE]
|
48
48
|
====
|
49
|
-
The documentation for the latest, stable release of Asciidoctor PDF
|
49
|
+
The documentation for the latest, stable release of Asciidoctor PDF is available at {url-project-docs}/.
|
50
50
|
|
51
51
|
If you're looking for the documentation for Asciidoctor PDF 1.6, refer to the {url-project-repo}/tree/v1.6.x#readme[README] in the v1.6.x branch.
|
52
52
|
Asciidoctor PDF 1.6 is no longer being developed and will reach EOL later this year.
|
@@ -1108,7 +1108,10 @@ module Asciidoctor
|
|
1108
1108
|
srclang = node.attr 'language', 'text'
|
1109
1109
|
begin
|
1110
1110
|
::CodeRay::Scanners[(srclang = (srclang.start_with? 'html+') ? (srclang.slice 5, srclang.length).to_sym : srclang.to_sym)]
|
1111
|
-
rescue
|
1111
|
+
rescue
|
1112
|
+
until ::LoadError === (cause ||= $!) || ::ArgumentError === cause
|
1113
|
+
raise $! unless (cause = cause.cause)
|
1114
|
+
end
|
1112
1115
|
srclang = :text
|
1113
1116
|
end
|
1114
1117
|
fragments = (::CodeRay.scan source_string, srclang).to_prawn
|
@@ -1787,7 +1790,6 @@ module Asciidoctor
|
|
1787
1790
|
file_request_root = { base: (::File.dirname image_path), root: @jail_dir }
|
1788
1791
|
end
|
1789
1792
|
svg_obj = ::Prawn::SVG::Interface.new svg_data, self,
|
1790
|
-
position: alignment,
|
1791
1793
|
width: width,
|
1792
1794
|
fallback_font_name: fallback_svg_font_name,
|
1793
1795
|
enable_web_requests: allow_uri_read ? (method :load_open_uri).to_proc : false,
|
@@ -1804,7 +1806,6 @@ module Asciidoctor
|
|
1804
1806
|
if (rendered_h = svg_size.output_height) > (available_h = cursor - caption_h)
|
1805
1807
|
unless pinned || at_page_top?
|
1806
1808
|
advance_page
|
1807
|
-
(svg_obj.options[:at] = svg_obj.position)[0] += bounds.left if ColumnBox === bounds
|
1808
1809
|
available_h = cursor - caption_h
|
1809
1810
|
end
|
1810
1811
|
rendered_w = (svg_obj.resize height: (rendered_h = available_h)).output_width if rendered_h > available_h
|
@@ -1815,7 +1816,16 @@ module Asciidoctor
|
|
1815
1816
|
update_colors if graphic_state.color_space.empty?
|
1816
1817
|
ink_caption node, category: :image, end: :top, block_align: alignment, block_width: rendered_w, max_width: caption_max_width if caption_end == :top && node.title?
|
1817
1818
|
image_y = y
|
1818
|
-
|
1819
|
+
# NOTE: prawn-svg does not compute :at for alignment correctly in column box, so resort to our own logic
|
1820
|
+
case alignment
|
1821
|
+
when :center
|
1822
|
+
left = bounds.left + (available_w - rendered_w) * 0.5
|
1823
|
+
when :right
|
1824
|
+
left = bounds.left + available_w - rendered_w
|
1825
|
+
else
|
1826
|
+
left = bounds.left
|
1827
|
+
end
|
1828
|
+
svg_obj.options[:at] = [left, (image_cursor = cursor)]
|
1819
1829
|
svg_obj.draw # NOTE: cursor advances automatically
|
1820
1830
|
svg_obj.document.warnings.each do |img_warning|
|
1821
1831
|
log :warn, %(problem encountered in image: #{image_path}; #{img_warning})
|
@@ -4389,7 +4399,7 @@ module Asciidoctor
|
|
4389
4399
|
b_shift, b_gap_color = (b_width ||= 0.5) * 0.5, @page_bg_color
|
4390
4400
|
end
|
4391
4401
|
ink_caption node_with_caption, category: category if node_with_caption
|
4392
|
-
extent.from.page
|
4402
|
+
extent.from.page = page_number unless extent.from.page == page_number # sanity check
|
4393
4403
|
float do
|
4394
4404
|
extent.each_page do |first_page, last_page|
|
4395
4405
|
advance_page unless first_page
|
@@ -34,13 +34,14 @@ module Asciidoctor
|
|
34
34
|
# - :final_gap determines whether a gap is added below the last line
|
35
35
|
LineMetrics = ::Struct.new :height, :leading, :padding_top, :padding_bottom, :final_gap
|
36
36
|
|
37
|
-
Position = ::Struct.new :page, :cursor
|
37
|
+
Position = ::Struct.new :page, :column, :cursor
|
38
38
|
|
39
39
|
Extent = ::Struct.new :current, :from, :to do
|
40
|
-
def initialize current_page, current_cursor,
|
41
|
-
self.
|
42
|
-
self.from = Position.new
|
43
|
-
self.
|
40
|
+
def initialize current_page, current_column, current_cursor, from_page, from_column, from_cursor, to_page, to_cursor
|
41
|
+
self.current = Position.new current_page, current_column, current_cursor
|
42
|
+
self.from = Position.new from_page, from_column, from_cursor
|
43
|
+
self.from = current if from == current
|
44
|
+
self.to = Position.new to_page, nil, to_cursor
|
44
45
|
end
|
45
46
|
|
46
47
|
def each_page
|
@@ -64,23 +65,23 @@ module Asciidoctor
|
|
64
65
|
|
65
66
|
ScratchExtent = ::Struct.new :from, :to do
|
66
67
|
def initialize start_page, start_cursor, end_page, end_cursor
|
67
|
-
self.from = Position.new start_page, start_cursor
|
68
|
-
self.to = Position.new end_page, end_cursor
|
68
|
+
self.from = Position.new start_page, 0, start_cursor
|
69
|
+
self.to = Position.new end_page, 0, end_cursor
|
69
70
|
end
|
70
71
|
|
71
72
|
def position_onto pdf, keep_together = nil
|
72
73
|
current_page = pdf.page_number
|
74
|
+
current_column = ColumnBox === pdf.bounds ? (column_box = pdf.bounds).current_column : 0
|
73
75
|
current_cursor = pdf.cursor
|
74
|
-
|
75
|
-
to_page = current_page + (to.page - 1)
|
76
|
-
if advance_by > 0
|
76
|
+
if (advance_by = from.page - 1) > 0
|
77
77
|
advance_by.times { pdf.advance_page }
|
78
78
|
elsif keep_together && single_page? && !(try_to_fit_on_previous current_cursor)
|
79
79
|
pdf.advance_page
|
80
|
-
from_page += 1
|
81
|
-
to_page += 1
|
82
80
|
end
|
83
|
-
|
81
|
+
from_page = pdf.page_number
|
82
|
+
from_column = column_box&.current_column || 0
|
83
|
+
to_page = from_page + (to.page - from.page)
|
84
|
+
Extent.new current_page, current_column, current_cursor, from_page, from_column, from.cursor, to_page, to.cursor
|
84
85
|
end
|
85
86
|
|
86
87
|
def single_page?
|
@@ -972,11 +973,11 @@ module Asciidoctor
|
|
972
973
|
state.on_page_create_callback = saved_callback
|
973
974
|
end
|
974
975
|
|
975
|
-
# This method is a smarter version of start_new_page. It calls start_new_page
|
976
|
-
#
|
977
|
-
#
|
976
|
+
# This method is a smarter version of start_new_page. It only calls start_new_page options are
|
977
|
+
# specified and the current page is the last page in the document. Otherwise, it advances the
|
978
|
+
# cursor to the next page (or column) using Bounds#move_past_bottom.
|
978
979
|
def advance_page options = {}
|
979
|
-
|
980
|
+
options.empty? || !last_page? ? bounds.move_past_bottom : (start_new_page options)
|
980
981
|
end
|
981
982
|
|
982
983
|
# Start a new page without triggering the on_page_create callback
|
@@ -1136,15 +1137,15 @@ module Asciidoctor
|
|
1136
1137
|
# Note that if the block has content that itself requires a dry run, that nested dry run will
|
1137
1138
|
# be performed in a separate scratch document.
|
1138
1139
|
#
|
1139
|
-
#
|
1140
|
-
#
|
1141
|
-
#
|
1142
|
-
#
|
1143
|
-
#
|
1144
|
-
#
|
1145
|
-
#
|
1146
|
-
#
|
1147
|
-
#
|
1140
|
+
# options - A Hash of options that configure the dry run computation:
|
1141
|
+
# :keep_together - A Boolean indicating whether an attempt should be made to keep
|
1142
|
+
# the content on the same page (optional, default: false).
|
1143
|
+
# :single_page - A Boolean indicating whether the operation should stop if the
|
1144
|
+
# content exceeds the height of a single page.
|
1145
|
+
# :onto - The document onto which to position the scratch extent. If this option is
|
1146
|
+
# set, the method returns an Extent instance (optional, default: false)
|
1147
|
+
# :pages_advanced - The number of pages the content has been advanced during this
|
1148
|
+
# operation (internal only) (optional, default: 0)
|
1148
1149
|
#
|
1149
1150
|
# Returns an Extent or ScratchExtent object that describes the bounds of the content block.
|
1150
1151
|
def dry_run keep_together: nil, pages_advanced: 0, single_page: nil, onto: nil, &block
|
@@ -25,11 +25,11 @@ module Asciidoctor::PDF::FormattedText
|
|
25
25
|
width = fragment.width
|
26
26
|
height = fragment.height
|
27
27
|
end
|
28
|
-
border_radius = data[:border_radius]
|
28
|
+
border_radius = data[:border_radius] || 0
|
29
29
|
if (background_color = data[:background_color])
|
30
30
|
prev_fill_color = pdf.fill_color
|
31
31
|
pdf.fill_color background_color
|
32
|
-
if border_radius
|
32
|
+
if border_radius > 0
|
33
33
|
pdf.fill_rounded_rectangle at, width, height, border_radius
|
34
34
|
else
|
35
35
|
pdf.fill_rectangle at, width, height
|
@@ -41,7 +41,7 @@ module Asciidoctor::PDF::FormattedText
|
|
41
41
|
prev_line_width = pdf.line_width
|
42
42
|
pdf.stroke_color border_color
|
43
43
|
pdf.line_width border_width
|
44
|
-
border_radius ? (pdf.stroke_rounded_rectangle at, width, height, border_radius) : (pdf.stroke_rectangle at, width, height)
|
44
|
+
border_radius > 0 ? (pdf.stroke_rounded_rectangle at, width, height, border_radius) : (pdf.stroke_rectangle at, width, height)
|
45
45
|
pdf.stroke_color prev_stroke_color
|
46
46
|
pdf.line_width prev_line_width
|
47
47
|
end
|
@@ -102,6 +102,9 @@ module Asciidoctor
|
|
102
102
|
role, key = (key.slice 5, key.length).split '_', 2
|
103
103
|
if (prop = ThemeKeyToFragmentProperty[key])
|
104
104
|
(accum[role] ||= {})[prop] = val
|
105
|
+
if key == 'border_width' && val && !(theme[%(role_#{role}_border_color)])
|
106
|
+
accum[role][:border_color] = theme.base_border_color
|
107
|
+
end
|
105
108
|
#elsif key == 'font_kerning'
|
106
109
|
# unless (resolved_val = val == 'none' ? false : (val == 'normal' ? true : nil)).nil?
|
107
110
|
# (accum[role] ||= {})[:kerning] = resolved_val
|
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.1.
|
4
|
+
version: 2.1.1
|
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-06-
|
12
|
+
date: 2022-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: asciidoctor
|