asciidoctor-pdf 2.3.18 → 2.3.19
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 +4 -4
- data/CHANGELOG.adoc +16 -0
- data/README.adoc +1 -1
- data/lib/asciidoctor/pdf/ext/prawn/formatted_text/box.rb +1 -1
- data/lib/asciidoctor/pdf/ext/prawn-table/cell/asciidoc.rb +7 -3
- data/lib/asciidoctor/pdf/theme_data.rb +57 -0
- data/lib/asciidoctor/pdf/theme_loader.rb +6 -6
- data/lib/asciidoctor/pdf/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 465fb67274afdfc25ce6bddf7a7f0f8a7079bcc828d11cd86472c30f62b6cf5c
|
4
|
+
data.tar.gz: e034a8cbedf9329cdd48d2cc03063ca146ae9cf1ed28e2417b878ce14b4ca680
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8da14edb4931a36dcfe223d1ccbe9dbaf6aa3c0a443818412062850158a5c7f15eebb6b3cbe39824440b9c9613d232ee2537a5d77ec156d491e8e619139694a
|
7
|
+
data.tar.gz: 991f86d8acdddb6e4ec1773d5db27fce3673ec4f8a0c4b7889a6095ef69c52d1e08b0dc63fcdde797beaf4f4d12bea49f11595f67e576d5da7594386f9c76f6e
|
data/CHANGELOG.adoc
CHANGED
@@ -5,6 +5,22 @@
|
|
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.3.19 (2024-10-11) - @mojavelinux
|
9
|
+
|
10
|
+
Improvements::
|
11
|
+
|
12
|
+
* replace OpenStruct with internal ThemeData class for storing theme data (#2535)
|
13
|
+
|
14
|
+
Bug Fixes::
|
15
|
+
|
16
|
+
* support horizontal alignment on AsciiDoc table cell that only contains paragraphs (#2358)
|
17
|
+
* don't allow AsciiDoc table cell to overrun bottom of page on which it fits (#2538)
|
18
|
+
* don't look for NULL glyph in fallback font as this can impact line height (#2541)
|
19
|
+
|
20
|
+
=== Details
|
21
|
+
|
22
|
+
{url-repo}/releases/tag/v2.3.19[git tag] | {url-repo}/compare/v2.3.18\...v2.3.19[full diff]
|
23
|
+
|
8
24
|
== 2.3.18 (2024-07-27) - @mojavelinux
|
9
25
|
|
10
26
|
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.3.
|
3
|
+
v2.3.19, 2024-10-11
|
4
4
|
// Settings:
|
5
5
|
:experimental:
|
6
6
|
:idprefix:
|
@@ -61,8 +61,8 @@ Prawn::Text::Formatted::Box.prepend (Module.new do
|
|
61
61
|
form_fragments_from_like_font_glyph_pairs font_glyph_pairs, fragment_hash
|
62
62
|
end
|
63
63
|
|
64
|
-
# TODO: remove once Prawn 2.5 is released
|
65
64
|
def find_font_for_this_glyph char, current_font, current_font_opts = {}, fallback_fonts_to_check = [], original_font = current_font
|
65
|
+
return current_font if char == ?\u0000 # never look for NUL character in fallback fonts as it's not rendered
|
66
66
|
(doc = @document).font current_font, current_font_opts
|
67
67
|
if doc.font.glyph_present? char
|
68
68
|
current_font
|
@@ -73,9 +73,8 @@ module Prawn
|
|
73
73
|
end
|
74
74
|
# NOTE: draw_bounded_content automatically adds FPTolerance to width and height
|
75
75
|
pdf.bounds.instance_variable_set :@width, spanned_content_width
|
76
|
-
|
77
|
-
|
78
|
-
pdf.bounds.instance_variable_set :@height, (pdf.y - pdf.page.margins[:bottom] - padding_adjustment)
|
76
|
+
# NOTE: we've already reserved the space, so just let the box stretch to the maximum that could fit on a page
|
77
|
+
pdf.bounds.instance_variable_set :@height, (pdf.margin_box.height - padding_top - padding_bottom)
|
79
78
|
if @valign != :top && (excess_y = spanned_content_height - natural_content_height) > 0
|
80
79
|
# QUESTION: could this cause a unexpected page overrun?
|
81
80
|
pdf.move_down(@valign == :center ? (excess_y.fdiv 2) : excess_y)
|
@@ -116,11 +115,16 @@ module Prawn
|
|
116
115
|
font_size = font_info[:size]
|
117
116
|
end
|
118
117
|
font_style ||= font_info[:style]
|
118
|
+
if (@align == :center || @align == :right) && content.blocks.map(&:context).uniq == [:paragraph]
|
119
|
+
prev_text_align = pdf.instance_variable_get :@base_text_align
|
120
|
+
pdf.instance_variable_set :@base_text_align, @align
|
121
|
+
end
|
119
122
|
pdf.font font_family, size: font_size, style: font_style do
|
120
123
|
yield
|
121
124
|
ensure
|
122
125
|
pdf.font_color = prev_font_color if prev_font_color
|
123
126
|
pdf.font_scale = prev_font_scale if prev_font_scale
|
127
|
+
pdf.instance_variable_set :@base_text_align, prev_text_align if prev_text_align
|
124
128
|
end
|
125
129
|
end
|
126
130
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Asciidoctor
|
4
|
+
module PDF
|
5
|
+
class ThemeData
|
6
|
+
attr_reader :table
|
7
|
+
|
8
|
+
def initialize data = nil
|
9
|
+
@table = (data || {}).transform_keys(&:to_sym)
|
10
|
+
end
|
11
|
+
|
12
|
+
def [] name
|
13
|
+
@table[name.to_sym]
|
14
|
+
end
|
15
|
+
|
16
|
+
def []= name, value
|
17
|
+
@table[name.to_sym] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def each_pair &block
|
21
|
+
@table.each_pair(&block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def eql? other
|
25
|
+
@table.to_h.eql? other.to_h
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete_field name
|
29
|
+
@table.delete name
|
30
|
+
end
|
31
|
+
|
32
|
+
def dup
|
33
|
+
ThemeData.new @table
|
34
|
+
end
|
35
|
+
|
36
|
+
def method_missing name, *args
|
37
|
+
if (name_str = name.to_s).end_with? '='
|
38
|
+
@table[name_str.chop.to_sym] = args[0]
|
39
|
+
else
|
40
|
+
@table[name]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def respond_to? name, _include_all = false
|
45
|
+
@table.key? name.to_sym
|
46
|
+
end
|
47
|
+
|
48
|
+
def respond_to_missing? name, _include_all = false
|
49
|
+
@table.key? name.to_sym
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_h
|
53
|
+
@table
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'theme_data'
|
4
4
|
require_relative 'measurements'
|
5
5
|
|
6
6
|
module Asciidoctor
|
@@ -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
|
-
(
|
72
|
+
(ThemeData.new ::YAML.safe_load io, filename: BaseThemePath).tap {|theme| theme.__dir__ = ThemesDir }
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
@@ -78,7 +78,7 @@ module Asciidoctor
|
|
78
78
|
if theme_path == BaseThemePath
|
79
79
|
load_base_theme
|
80
80
|
else
|
81
|
-
theme_data = load_file theme_path, (
|
81
|
+
theme_data = load_file theme_path, (ThemeData.new base_font_size: 12), theme_dir
|
82
82
|
unless (::File.dirname theme_path) == ThemesDir
|
83
83
|
theme_data.base_text_align ||= 'left'
|
84
84
|
theme_data.base_line_height ||= 1
|
@@ -102,12 +102,12 @@ module Asciidoctor
|
|
102
102
|
line.sub(HexColorEntryRx) { %(#{(m = $~)[:k]}: #{m[:h] || (m[:k].end_with? 'color') ? "'#{m[:v]}'" : m[:v]}) }
|
103
103
|
end.join unless (::File.dirname filename) == ThemesDir
|
104
104
|
yaml_data = ::YAML.safe_load data, aliases: true, filename: filename
|
105
|
-
(loaded = (theme_data ||=
|
105
|
+
(loaded = (theme_data ||= ThemeData.new).__loaded__ ||= ::Set.new).add filename
|
106
106
|
if ::Hash === yaml_data && (extends = yaml_data.delete 'extends')
|
107
107
|
(Array extends).each do |extend_path|
|
108
108
|
extend_path = extend_path.slice 0, extend_path.length - 11 if (force = extend_path.end_with? ' !important')
|
109
109
|
if extend_path == 'base'
|
110
|
-
theme_data =
|
110
|
+
theme_data = ThemeData.new theme_data.to_h.merge load_base_theme.to_h if (loaded.add? 'base') || force
|
111
111
|
next
|
112
112
|
elsif BundledThemeNames.include? extend_path
|
113
113
|
extend_path, extend_theme_dir = resolve_theme_file extend_path, ThemesDir
|
@@ -123,7 +123,7 @@ module Asciidoctor
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def load hash, theme_data = nil
|
126
|
-
::Hash === hash ? hash.reduce(theme_data ||
|
126
|
+
::Hash === hash ? hash.reduce(theme_data || ThemeData.new) {|data, (key, val)| process_entry key, val, data, true } : (theme_data || ThemeData.new)
|
127
127
|
end
|
128
128
|
|
129
129
|
private
|
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.3.
|
4
|
+
version: 2.3.19
|
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: 2024-
|
12
|
+
date: 2024-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: asciidoctor
|
@@ -325,6 +325,7 @@ files:
|
|
325
325
|
- lib/asciidoctor/pdf/sanitizer.rb
|
326
326
|
- lib/asciidoctor/pdf/section_info_by_page.rb
|
327
327
|
- lib/asciidoctor/pdf/text_transformer.rb
|
328
|
+
- lib/asciidoctor/pdf/theme_data.rb
|
328
329
|
- lib/asciidoctor/pdf/theme_loader.rb
|
329
330
|
- lib/asciidoctor/pdf/version.rb
|
330
331
|
homepage: https://asciidoctor.org/docs/asciidoctor-pdf
|
@@ -350,7 +351,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
350
351
|
- !ruby/object:Gem::Version
|
351
352
|
version: '0'
|
352
353
|
requirements: []
|
353
|
-
rubygems_version: 3.5.
|
354
|
+
rubygems_version: 3.5.16
|
354
355
|
signing_key:
|
355
356
|
specification_version: 4
|
356
357
|
summary: Converts AsciiDoc documents to PDF using Asciidoctor and Prawn
|