asciidoctor-pdf 2.0.7 → 2.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +20 -0
- data/README.adoc +4 -4
- data/lib/asciidoctor/pdf/converter.rb +5 -1
- data/lib/asciidoctor/pdf/ext/prawn/document/column_box.rb +21 -6
- data/lib/asciidoctor/pdf/ext/prawn/extensions.rb +13 -9
- data/lib/asciidoctor/pdf/theme_loader.rb +1 -1
- 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: cd47554913fab2e3f8002491a92c430e0dbfe48b9177705470ffa7c64155289b
|
4
|
+
data.tar.gz: 580c0c9e6a46e5614927f42c4ad309e303dd69681bf10ddb674241cd930e6b31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 326e87435e664dde2e944b878d2c5c9a5b71cfd285da78115331a8cd14e20f2aaa0cb2b81779bc99ca8642df004ef03f60386a971e9176eb03d17755a9db951b
|
7
|
+
data.tar.gz: 7d7cd662e4bbe5df6d10c057e2f00a1a1c800f0e5a3e4f7731c94b657b0bf6ec51599e88d42dbd806a1e4bf991e54282c4efb820b0d39912ed34a74d25f89ff4
|
data/CHANGELOG.adoc
CHANGED
@@ -5,6 +5,26 @@
|
|
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.8 (2022-06-08) - @mojavelinux
|
9
|
+
|
10
|
+
Improvements::
|
11
|
+
|
12
|
+
* encapsulate logic to adjust column box inside float and dry run
|
13
|
+
* automatically set height on column box if not specified; update value automatically when reflowing margins
|
14
|
+
|
15
|
+
Bug Fixes::
|
16
|
+
|
17
|
+
* correctly compute value of to cursor on extent when column box starts below top of page (#2230)
|
18
|
+
* fix crash in `ColumnBox#move_past_bottom` when `:reflow_margins` option is not set
|
19
|
+
* fix x position of SVG when advanced to next column of column box
|
20
|
+
* `at_page_top?` should consider top of column box to be top of page
|
21
|
+
* prevent SVG image taller than column from being advanced to next column
|
22
|
+
* don't push section that follows index section in article to new page if last page of index does not extend to bottom of page
|
23
|
+
|
24
|
+
=== Details
|
25
|
+
|
26
|
+
{url-repo}/releases/tag/v2.0.8[git tag] | {url-repo}/compare/v2.0.7\...v2.0.8[full diff]
|
27
|
+
|
8
28
|
== 2.0.7 (2022-06-03) - @mojavelinux
|
9
29
|
|
10
30
|
Improvements::
|
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.
|
3
|
+
v2.0.8, 2022-06-08
|
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.
|
27
|
+
:release-version: 2.0.8
|
28
28
|
// URLs:
|
29
29
|
:url-gem: https://rubygems.org/gems/asciidoctor-pdf
|
30
30
|
:url-project: https://github.com/asciidoctor/asciidoctor-pdf
|
@@ -62,7 +62,7 @@ Asciidoctor PDF converts an AsciiDoc document directly to a PDF document.
|
|
62
62
|
The style and layout of the PDF are controlled by a dedicated theme file.
|
63
63
|
To the degree possible, Asciidoctor PDF supports all the features of AsciiDoc that are supported by Asciidoctor.
|
64
64
|
It also provides {url-project-docs}/features/[PDF-specific features].
|
65
|
-
However, there are {url-project-docs}/features/#limitations[certain
|
65
|
+
However, there are {url-project-docs}/features/#limitations[certain limitations] imposed by the PDF format and the PDF library this extension uses.
|
66
66
|
|
67
67
|
Asciidoctor PDF uses the Prawn gem and Prawn's extensions, such as prawn-svg and prawn-table, to generate a PDF document.
|
68
68
|
{url-prawn}[Prawn] is a general purpose PDF generator for Ruby that features high-level APIs for common needs like setting up the page and inserting images and low-level APIs for positioning and rendering text and graphics.
|
@@ -182,7 +182,7 @@ Asciidoctor creates the output file in the same directory as the input file by d
|
|
182
182
|
Open the [.path]_basic-example.pdf_ file with a PDF viewer to see the result.
|
183
183
|
|
184
184
|
.Example PDF document rendered in a PDF viewer
|
185
|
-
image::docs/modules/ROOT/images/basic-example-pdf-screenshot.png[Screenshot of PDF document,960,
|
185
|
+
image::docs/modules/ROOT/images/basic-example-pdf-screenshot.png[Screenshot of PDF document,960,pdfwidth=100%]
|
186
186
|
|
187
187
|
For more information about how to use Asciidoctor PDF and PDF-specific AsciiDoc syntax, see the {url-project-docs}/[Asciidoctor PDF documentation].
|
188
188
|
|
@@ -162,7 +162,6 @@ module Asciidoctor
|
|
162
162
|
doc.attributes['outline'] = '' unless (doc.attribute_locked? 'outline') || ((doc.instance_variable_get :@attributes_modified).include? 'outline')
|
163
163
|
doc.attributes['outline-title'] = '' unless (doc.attribute_locked? 'outline-title') || ((doc.instance_variable_get :@attributes_modified).include? 'outline-title')
|
164
164
|
doc.attributes['pagenums'] = '' unless (doc.attribute_locked? 'pagenums') || ((doc.instance_variable_get :@attributes_modified).include? 'pagenums')
|
165
|
-
#assign_missing_section_ids doc
|
166
165
|
|
167
166
|
on_page_create(&(method :init_page))
|
168
167
|
|
@@ -703,6 +702,7 @@ module Asciidoctor
|
|
703
702
|
def convert_index_section node
|
704
703
|
space_needed_for_category = @theme.description_list_term_spacing + (2 * (height_of_typeset_text 'A'))
|
705
704
|
pagenum_sequence_style = node.document.attr 'index-pagenum-sequence-style'
|
705
|
+
end_cursor = nil
|
706
706
|
column_box [0, cursor], columns: @theme.index_columns, width: bounds.width, reflow_margins: true, spacer: @theme.index_column_gap do
|
707
707
|
@index.categories.each do |category|
|
708
708
|
bounds.move_past_bottom if space_needed_for_category > cursor
|
@@ -714,7 +714,10 @@ module Asciidoctor
|
|
714
714
|
category.terms.each {|term| convert_index_list_item term, pagenum_sequence_style }
|
715
715
|
@theme.prose_margin_bottom > cursor ? bounds.move_past_bottom : (move_down @theme.prose_margin_bottom)
|
716
716
|
end
|
717
|
+
end_cursor = cursor if bounds.current_column == 0
|
717
718
|
end
|
719
|
+
# Q: could we move this logic into column_box?
|
720
|
+
move_cursor_to end_cursor if end_cursor
|
718
721
|
nil
|
719
722
|
end
|
720
723
|
|
@@ -1752,6 +1755,7 @@ module Asciidoctor
|
|
1752
1755
|
if (rendered_h = svg_size.output_height) > (available_h = cursor - caption_h)
|
1753
1756
|
unless pinned || at_page_top?
|
1754
1757
|
advance_page
|
1758
|
+
(svg_obj.options[:at] = svg_obj.position)[0] += bounds.left if ColumnBox === bounds
|
1755
1759
|
available_h = cursor - caption_h
|
1756
1760
|
end
|
1757
1761
|
rendered_w = (svg_obj.resize height: (rendered_h = available_h)).output_width if rendered_h > available_h
|
@@ -1,20 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Prawn::Document::ColumnBox.prepend (Module.new do
|
4
|
-
|
5
|
-
stretchy? ? @parent.absolute_bottom : super
|
6
|
-
end
|
4
|
+
attr_accessor :current_column
|
7
5
|
|
8
6
|
def move_past_bottom
|
9
7
|
(doc = @document).y = @y
|
10
8
|
return if (@current_column = (@current_column + 1) % @columns) > 0
|
11
|
-
|
9
|
+
par = @parent
|
10
|
+
if (reset_y = @reflow_margins) && (reset_y == true || reset_y > doc.page_number)
|
11
|
+
@y = par.absolute_top
|
12
|
+
@height = par.height unless stretchy?
|
13
|
+
end
|
12
14
|
initial_margins = doc.page.margins
|
13
15
|
par.move_past_bottom
|
14
16
|
if doc.page.margins != initial_margins
|
15
|
-
doc.bounds = self.class.new doc, par, (margin_box = doc.margin_box).
|
16
|
-
columns: @columns, reflow_margins:
|
17
|
+
doc.bounds = self.class.new doc, par, [(margin_box = doc.margin_box).absolute_left, @y],
|
18
|
+
columns: @columns, reflow_margins: @reflow_margins, spacer: @spacer, width: margin_box.width, height: @height
|
19
|
+
end
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
# Rearranges the column box into a single column, where the original columns are in a single file. Used
|
24
|
+
# for the purpose of computing the extent of content in a scratch document.
|
25
|
+
def single_file
|
26
|
+
if @reflow_margins && @parent.absolute_top > @y && @columns > @current_column + 1
|
27
|
+
# defer reflow margins until all columns on current page have been exhausted
|
28
|
+
@reflow_margins = @document.page_number + (@columns - @current_column)
|
17
29
|
end
|
30
|
+
@width = bare_column_width
|
31
|
+
@columns = 1
|
32
|
+
@current_column = 0
|
18
33
|
nil
|
19
34
|
end
|
20
35
|
end)
|
@@ -251,16 +251,17 @@ module Asciidoctor
|
|
251
251
|
# Returns whether the cursor is at the top of the page (i.e., margin box).
|
252
252
|
#
|
253
253
|
def at_page_top?
|
254
|
-
@y == @margin_box.absolute_top
|
254
|
+
@y == (ColumnBox === bounds ? bounds : @margin_box).absolute_top
|
255
255
|
end
|
256
256
|
|
257
257
|
# Prevents at_page_top? from returning true while yielding to the specified block.
|
258
258
|
#
|
259
259
|
def conceal_page_top
|
260
|
-
|
260
|
+
old_top = (outer_bounds = ColumnBox === bounds ? bounds : @margin_box).absolute_top
|
261
|
+
outer_bounds.instance_variable_set :@y, old_top + 0.0001
|
261
262
|
yield
|
262
263
|
ensure
|
263
|
-
|
264
|
+
outer_bounds.instance_variable_set :@y, old_top
|
264
265
|
end
|
265
266
|
|
266
267
|
# Returns whether the current page is the last page in the document.
|
@@ -560,11 +561,11 @@ module Asciidoctor
|
|
560
561
|
def float
|
561
562
|
original_page_number = page_number
|
562
563
|
original_y = y
|
563
|
-
original_column = bounds.
|
564
|
+
original_column = bounds.current_column if ColumnBox === bounds
|
564
565
|
yield
|
565
566
|
go_to_page original_page_number unless page_number == original_page_number
|
566
567
|
self.y = original_y
|
567
|
-
bounds.
|
568
|
+
bounds.current_column = original_column if original_column
|
568
569
|
end
|
569
570
|
|
570
571
|
# Short-circuits the call to the built-in move_up operation
|
@@ -721,6 +722,12 @@ module Asciidoctor
|
|
721
722
|
end
|
722
723
|
end
|
723
724
|
|
725
|
+
# Wraps the column_box method and automatically sets the height unless the :height option is specified.
|
726
|
+
def column_box point, options, &block
|
727
|
+
options[:height] = cursor unless options.key? :height
|
728
|
+
super
|
729
|
+
end
|
730
|
+
|
724
731
|
# A flowing version of bounding_box. If the content runs to another page, the cursor starts at
|
725
732
|
# the top of the page instead of from the original cursor position. Similar to span, except
|
726
733
|
# the :position option is limited to a numeric value and additional options are passed through
|
@@ -1146,10 +1153,7 @@ module Asciidoctor
|
|
1146
1153
|
scratch_pdf.bounds = bounds.dup.tap do |bounds_copy|
|
1147
1154
|
bounds_copy.instance_variable_set :@document, scratch_pdf
|
1148
1155
|
bounds_copy.instance_variable_set :@parent, saved_bounds
|
1149
|
-
if ColumnBox === bounds_copy
|
1150
|
-
bounds_copy.instance_variable_set :@width, bounds_copy.bare_column_width
|
1151
|
-
bounds_copy.instance_variable_set :@current_column, (bounds_copy.instance_variable_set :@columns, 1) - 1
|
1152
|
-
end
|
1156
|
+
bounds_copy.single_file if ColumnBox === bounds_copy
|
1153
1157
|
end
|
1154
1158
|
scratch_pdf.move_cursor_to cursor unless (scratch_start_at_top = keep_together || pages_advanced > 0 || at_page_top?)
|
1155
1159
|
scratch_start_cursor = scratch_pdf.cursor
|
@@ -69,7 +69,7 @@ module Asciidoctor
|
|
69
69
|
# NOTE: base theme is loaded "as is" (no post-processing)
|
70
70
|
def self.load_base_theme
|
71
71
|
::File.open BaseThemePath, mode: 'r:UTF-8' do |io|
|
72
|
-
(::OpenStruct.new ::YAML.safe_load io,
|
72
|
+
(::OpenStruct.new ::YAML.safe_load io, filename: BaseThemePath).tap {|theme| theme.__dir__ = ThemesDir }
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
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.
|
4
|
+
version: 2.0.8
|
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-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: asciidoctor
|