asciidoctor-pdf 2.0.0.beta.2 → 2.0.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 +54 -0
- data/README.adoc +79 -1103
- data/docs/theming-guide.adoc +1 -1
- data/lib/asciidoctor/pdf/converter.rb +2122 -2115
- data/lib/asciidoctor/pdf/ext/asciidoctor/abstract_block.rb +31 -0
- data/lib/asciidoctor/pdf/ext/asciidoctor.rb +1 -0
- data/lib/asciidoctor/pdf/ext/prawn/document/column_box.rb +9 -5
- data/lib/asciidoctor/pdf/ext/prawn/extensions.rb +58 -28
- data/lib/asciidoctor/pdf/ext/prawn/formatted_text/protect_bottom_gutter.rb +8 -5
- data/lib/asciidoctor/pdf/formatted_text/inline_image_arranger.rb +5 -1
- data/lib/asciidoctor/pdf/formatted_text/source_wrap.rb +9 -3
- data/lib/asciidoctor/pdf/formatted_text/transform.rb +21 -17
- data/lib/asciidoctor/pdf/theme_loader.rb +7 -7
- data/lib/asciidoctor/pdf/version.rb +1 -1
- metadata +5 -4
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Asciidoctor::AbstractBlock.prepend (Module.new do
|
4
|
+
def empty?
|
5
|
+
blocks.empty?
|
6
|
+
end
|
7
|
+
|
8
|
+
def first_child
|
9
|
+
blocks[0]
|
10
|
+
end
|
11
|
+
|
12
|
+
def last_child
|
13
|
+
blocks[-1]
|
14
|
+
end
|
15
|
+
|
16
|
+
def last_child?
|
17
|
+
self == parent.blocks[-1]
|
18
|
+
end
|
19
|
+
|
20
|
+
def next_sibling
|
21
|
+
(siblings = parent.blocks)[(siblings.index self) + 1]
|
22
|
+
end
|
23
|
+
|
24
|
+
def previous_sibling
|
25
|
+
(self_idx = (siblings = parent.blocks).index self) > 0 ? siblings[self_idx - 1] : nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove
|
29
|
+
parent.blocks.delete self
|
30
|
+
end
|
31
|
+
end)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# NOTE: these are either candidates for inclusion in Asciidoctor core or backports
|
4
|
+
require_relative 'asciidoctor/abstract_block'
|
4
5
|
require_relative 'asciidoctor/document'
|
5
6
|
require_relative 'asciidoctor/section'
|
6
7
|
require_relative 'asciidoctor/list'
|
@@ -5,12 +5,16 @@ Prawn::Document::ColumnBox.prepend (Module.new do
|
|
5
5
|
stretchy? ? @parent.absolute_bottom : super
|
6
6
|
end
|
7
7
|
|
8
|
-
def move_past_bottom
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
def move_past_bottom
|
9
|
+
(doc = @document).y = @y
|
10
|
+
return if (@current_column = (@current_column + 1) % @columns) > 0
|
11
|
+
@y = (par = @parent).absolute_top if @reflow_margins
|
12
|
+
initial_margins = doc.page.margins
|
13
|
+
par.move_past_bottom
|
14
|
+
if doc.page.margins != initial_margins
|
15
|
+
doc.bounds = self.class.new doc, par, (margin_box = doc.margin_box).absolute_top_left,
|
13
16
|
columns: @columns, reflow_margins: true, spacer: @spacer, width: margin_box.width
|
14
17
|
end
|
18
|
+
nil
|
15
19
|
end
|
16
20
|
end)
|
@@ -4,7 +4,7 @@ Prawn::Font::AFM.instance_variable_set :@hide_m17n_warning, true
|
|
4
4
|
|
5
5
|
require 'prawn/icon'
|
6
6
|
|
7
|
-
Prawn::Icon::Compatibility.
|
7
|
+
Prawn::Icon::Compatibility.prepend (::Module.new { def warning *_args; end })
|
8
8
|
|
9
9
|
module Asciidoctor
|
10
10
|
module Prawn
|
@@ -13,6 +13,8 @@ module Asciidoctor
|
|
13
13
|
include ::Asciidoctor::PDF::Sanitizer
|
14
14
|
include ::Asciidoctor::PDF::TextTransformer
|
15
15
|
|
16
|
+
ColumnBox = ::Prawn::Document::ColumnBox
|
17
|
+
|
16
18
|
FontAwesomeIconSets = %w(fab far fas)
|
17
19
|
IconSets = %w(fab far fas fi pf).to_set
|
18
20
|
IconSetPrefixes = IconSets.map {|it| it + '-' }
|
@@ -429,20 +431,27 @@ module Asciidoctor
|
|
429
431
|
|
430
432
|
# NOTE: override built-in fill_formatted_text_box to insert leading before second line when :first_line is true
|
431
433
|
def fill_formatted_text_box text, options
|
434
|
+
if (initial_gap = options[:initial_gap]) && !text.empty? && text[0][:from_page] != page_number
|
435
|
+
self.y -= initial_gap
|
436
|
+
end
|
432
437
|
merge_text_box_positioning_options options
|
433
438
|
box = ::Prawn::Text::Formatted::Box.new text, options
|
434
|
-
|
439
|
+
remaining_fragments = box.render
|
435
440
|
@no_text_printed = box.nothing_printed?
|
436
441
|
@all_text_printed = box.everything_printed?
|
442
|
+
unless remaining_fragments.empty? || (remaining_fragments[0][:from_page] ||= page_number) == page_number
|
443
|
+
log :error, %(cannot fit formatted text on page: #{remaining_fragments.map {|it| it[:image_path] || it[:text] }.join})
|
444
|
+
page.tare_content_stream
|
445
|
+
remaining_fragments = {}
|
446
|
+
end
|
437
447
|
|
438
|
-
if
|
439
|
-
(options[:first_line] && (options[:final_gap] || !(@no_text_printed || @all_text_printed)))
|
448
|
+
if @final_gap || (options[:first_line] && !(@no_text_printed || @all_text_printed))
|
440
449
|
self.y -= box.height + box.line_gap + box.leading
|
441
450
|
else
|
442
451
|
self.y -= box.height
|
443
452
|
end
|
444
453
|
|
445
|
-
|
454
|
+
remaining_fragments
|
446
455
|
end
|
447
456
|
|
448
457
|
# NOTE: override built-in draw_indented_formatted_line to set first_line flag
|
@@ -455,7 +464,7 @@ module Asciidoctor
|
|
455
464
|
# remaining lines (which is the default behavior in Prawn).
|
456
465
|
def text_with_formatted_first_line string, first_line_options, options
|
457
466
|
if (first_line_font_color = first_line_options.delete :color)
|
458
|
-
|
467
|
+
remaining_lines_font_color, options[:color] = options[:color], first_line_font_color
|
459
468
|
end
|
460
469
|
fragments = parse_text string, options
|
461
470
|
# NOTE: the low-level APIs we're using don't recognize the :styles option, so we must resolve
|
@@ -468,19 +477,25 @@ module Asciidoctor
|
|
468
477
|
end
|
469
478
|
first_line_text_transform = first_line_options.delete :text_transform
|
470
479
|
options = options.merge document: self
|
480
|
+
@final_gap = final_gap = options.delete :final_gap
|
471
481
|
text_indent = options.delete :indent_paragraphs
|
472
482
|
# QUESTION: should we merge more carefully here? (hand-select keys?)
|
473
483
|
first_line_options = (options.merge first_line_options).merge single_line: true, first_line: true
|
474
484
|
box = ::Prawn::Text::Formatted::Box.new fragments, first_line_options
|
475
485
|
if text_indent
|
476
|
-
remaining_fragments = indent
|
477
|
-
box.render dry_run: true
|
478
|
-
end
|
486
|
+
remaining_fragments = indent(text_indent) { box.render dry_run: true }
|
479
487
|
else
|
480
488
|
remaining_fragments = box.render dry_run: true
|
481
489
|
end
|
490
|
+
if remaining_fragments.empty?
|
491
|
+
remaining_fragments = nil
|
492
|
+
elsif (remaining_fragments[0][:from_page] ||= page_number) != page_number
|
493
|
+
log :error, %(cannot fit formatted text on page: #{remaining_fragments.map {|it| it[:image_path] || it[:text] }.join})
|
494
|
+
page.tare_content_stream
|
495
|
+
remaining_fragments = nil
|
496
|
+
end
|
482
497
|
if first_line_text_transform
|
483
|
-
# NOTE: applying text transform here could alter the wrapping, so
|
498
|
+
# NOTE: applying text transform here could alter the wrapping, so isolate first line and shrink it to fit
|
484
499
|
first_line_text = (box.instance_variable_get :@printed_lines)[0]
|
485
500
|
unless first_line_text == fragments[0][:text]
|
486
501
|
original_fragments, fragments = fragments, []
|
@@ -496,17 +511,16 @@ module Asciidoctor
|
|
496
511
|
end
|
497
512
|
fragments.each {|fragment| fragment[:text] = transform_text fragment[:text], first_line_text_transform }
|
498
513
|
first_line_options[:overflow] = :shrink_to_fit
|
499
|
-
|
514
|
+
@final_gap = first_line_options[:force_justify] = true if remaining_fragments
|
500
515
|
end
|
501
516
|
if text_indent
|
502
|
-
indent
|
503
|
-
fill_formatted_text_box fragments, first_line_options
|
504
|
-
end
|
517
|
+
indent(text_indent) { fill_formatted_text_box fragments, first_line_options }
|
505
518
|
else
|
506
519
|
fill_formatted_text_box fragments, first_line_options
|
507
520
|
end
|
508
|
-
|
509
|
-
options[:color] =
|
521
|
+
if remaining_fragments
|
522
|
+
options[:color] = remaining_lines_font_color if first_line_font_color
|
523
|
+
@final_gap = final_gap if first_line_text_transform
|
510
524
|
remaining_fragments = fill_formatted_text_box remaining_fragments, options
|
511
525
|
draw_remaining_formatted_text_on_new_pages remaining_fragments, options
|
512
526
|
end
|
@@ -541,6 +555,18 @@ module Asciidoctor
|
|
541
555
|
|
542
556
|
# Cursor
|
543
557
|
|
558
|
+
# Override the built-in float method to add support for restoring the current column of a ColumnBox
|
559
|
+
#
|
560
|
+
def float
|
561
|
+
original_page_number = page_number
|
562
|
+
original_y = y
|
563
|
+
original_column = bounds.instance_variable_get :@current_column if ColumnBox === bounds
|
564
|
+
yield
|
565
|
+
go_to_page original_page_number unless page_number == original_page_number
|
566
|
+
self.y = original_y
|
567
|
+
bounds.instance_variable_set :@current_column, original_column if original_column
|
568
|
+
end
|
569
|
+
|
544
570
|
# Short-circuits the call to the built-in move_up operation
|
545
571
|
# when n is 0.
|
546
572
|
#
|
@@ -589,7 +615,7 @@ module Asciidoctor
|
|
589
615
|
p_top, p_right, p_bottom, p_left = expand_padding_value padding
|
590
616
|
# logic is intentionally inlined
|
591
617
|
begin
|
592
|
-
if node && ((last_block = node).content_model != :compound || (last_block = node.
|
618
|
+
if node && ((last_block = node).content_model != :compound || (last_block = node.last_child)&.context == :paragraph)
|
593
619
|
@bottom_gutters << { last_block => p_bottom }
|
594
620
|
else
|
595
621
|
@bottom_gutters << {}
|
@@ -599,7 +625,7 @@ module Asciidoctor
|
|
599
625
|
bounds.add_right_padding p_right
|
600
626
|
yield
|
601
627
|
ensure
|
602
|
-
cursor > p_bottom ? (move_down p_bottom) :
|
628
|
+
cursor > p_bottom ? (move_down p_bottom) : bounds.move_past_bottom unless at_page_top?
|
603
629
|
@bottom_gutters.pop
|
604
630
|
bounds.subtract_left_padding p_left
|
605
631
|
bounds.subtract_right_padding p_right
|
@@ -943,7 +969,7 @@ module Asciidoctor
|
|
943
969
|
# if the current page is the last page of the document. Otherwise, it simply
|
944
970
|
# advances to the next existing page.
|
945
971
|
def advance_page options = {}
|
946
|
-
last_page? ? (start_new_page options) :
|
972
|
+
!options.empty? && last_page? ? (start_new_page options) : bounds.move_past_bottom
|
947
973
|
end
|
948
974
|
|
949
975
|
# Start a new page without triggering the on_page_create callback
|
@@ -952,14 +978,14 @@ module Asciidoctor
|
|
952
978
|
perform_discretely { start_new_page options }
|
953
979
|
end
|
954
980
|
|
955
|
-
#
|
981
|
+
# Scratch
|
956
982
|
|
957
|
-
def
|
958
|
-
@
|
983
|
+
def allocate_scratch_prototype
|
984
|
+
@scratch_prototype = create_scratch_prototype { ::Marshal.load ::Marshal.dump self }
|
959
985
|
end
|
960
986
|
|
961
987
|
def scratch
|
962
|
-
@scratch ||= ((Marshal.load Marshal.dump @
|
988
|
+
@scratch ||= ((Marshal.load Marshal.dump @scratch_prototype).send :init_scratch, self)
|
963
989
|
end
|
964
990
|
|
965
991
|
def scratch?
|
@@ -1116,10 +1142,14 @@ module Asciidoctor
|
|
1116
1142
|
# Returns an Extent or ScratchExtent object that describes the bounds of the content block.
|
1117
1143
|
def dry_run keep_together: nil, pages_advanced: 0, single_page: nil, onto: nil, &block
|
1118
1144
|
(scratch_pdf = scratch).start_new_page
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1145
|
+
saved_bounds = scratch_pdf.bounds
|
1146
|
+
scratch_pdf.bounds = bounds.dup.tap do |bounds_copy|
|
1147
|
+
bounds_copy.instance_variable_set :@document, scratch_pdf
|
1148
|
+
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
|
1123
1153
|
end
|
1124
1154
|
scratch_pdf.move_cursor_to cursor unless (scratch_start_at_top = keep_together || pages_advanced > 0 || at_page_top?)
|
1125
1155
|
scratch_start_cursor = scratch_pdf.cursor
|
@@ -1161,7 +1191,7 @@ module Asciidoctor
|
|
1161
1191
|
extent = ScratchExtent.new scratch_start_page, scratch_start_cursor, scratch_end_page, scratch_end_cursor
|
1162
1192
|
onto ? extent.position_onto(*onto) : extent
|
1163
1193
|
ensure
|
1164
|
-
|
1194
|
+
scratch_pdf.bounds = saved_bounds
|
1165
1195
|
end
|
1166
1196
|
end
|
1167
1197
|
end
|
@@ -2,12 +2,15 @@
|
|
2
2
|
|
3
3
|
module Prawn::Text::Formatted::ProtectBottomGutter
|
4
4
|
def enough_height_for_this_line?
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
if @arranger.finished? && @arranger.fragments.none? {|it| it.format_state[:full_height] }
|
6
|
+
begin
|
7
|
+
@height -= @bottom_gutter
|
8
|
+
super
|
9
|
+
ensure
|
10
|
+
@height += @bottom_gutter
|
11
|
+
end
|
12
|
+
else
|
8
13
|
super
|
9
|
-
ensure
|
10
|
-
@height += @bottom_gutter
|
11
14
|
end
|
12
15
|
end
|
13
16
|
end
|
@@ -38,7 +38,7 @@ module Asciidoctor::PDF::FormattedText
|
|
38
38
|
return if (raw_image_fragments = fragments.select {|f| (f.key? :image_path) && !(f.key? :image_obj) }).empty?
|
39
39
|
scratch = doc.scratch?
|
40
40
|
available_w = available_width
|
41
|
-
available_h = doc.
|
41
|
+
available_h = doc.bounds.height
|
42
42
|
last_fragment = {}
|
43
43
|
raw_image_fragments.each do |fragment|
|
44
44
|
if fragment[:object_id] == last_fragment[:object_id]
|
@@ -96,6 +96,10 @@ module Asciidoctor::PDF::FormattedText
|
|
96
96
|
if (f_height = image_h) > (line_font = doc.font).height * 1.5
|
97
97
|
# align with descender (equivalent to vertical-align: bottom in CSS)
|
98
98
|
fragment[:ascender] = f_height - (fragment[:descender] = line_font.descender)
|
99
|
+
if f_height == available_h
|
100
|
+
fragment[:ascender] -= (doc.calc_line_metrics (doc.instance_variable_get :@base_line_height), line_font, doc.font_size).padding_top
|
101
|
+
fragment[:full_height] = true
|
102
|
+
end
|
99
103
|
doc.font_size (fragment[:size] = f_height * (doc.font_size / line_font.height))
|
100
104
|
# align with baseline (roughly equivalent to vertical-align: baseline in CSS)
|
101
105
|
#fragment[:ascender] = f_height
|
@@ -11,15 +11,15 @@ module Asciidoctor
|
|
11
11
|
def wrap array
|
12
12
|
return super unless array[0][:linenum] # sanity check
|
13
13
|
initialize_wrap array
|
14
|
+
@line_wrap.extend SourceLineWrap
|
14
15
|
highlight_line = stop = nil
|
15
16
|
unconsumed = @arranger.unconsumed
|
16
17
|
until stop
|
17
18
|
if (first_fragment = unconsumed[0])[:linenum]
|
18
19
|
linenum_text = first_fragment[:text]
|
19
|
-
linenum_spacer ||= { text: (NoBreakSpace.encode linenum_text.encoding) + (' ' * (linenum_text.length - 1)) }
|
20
|
+
linenum_spacer ||= { text: (NoBreakSpace.encode linenum_text.encoding) + (' ' * (linenum_text.length - 1)), linenum: :spacer }
|
20
21
|
highlight_line = (second_fragment = unconsumed[1])[:highlight] ? second_fragment.dup : nil
|
21
|
-
else
|
22
|
-
# NOTE: a wrapped line
|
22
|
+
else # wrapped line
|
23
23
|
first_fragment[:text] = first_fragment[:text].lstrip
|
24
24
|
@arranger.unconsumed.unshift highlight_line if highlight_line
|
25
25
|
@arranger.unconsumed.unshift linenum_spacer.dup
|
@@ -43,6 +43,12 @@ module Asciidoctor
|
|
43
43
|
@arranger.unconsumed
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
module SourceLineWrap
|
48
|
+
def update_line_status_based_on_last_output
|
49
|
+
@arranger.current_format_state[:linenum] ? nil : super
|
50
|
+
end
|
51
|
+
end
|
46
52
|
end
|
47
53
|
end
|
48
54
|
end
|
@@ -95,22 +95,24 @@ module Asciidoctor
|
|
95
95
|
styles: (to_styles theme.menu_font_style),
|
96
96
|
}.compact,
|
97
97
|
}
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
(
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
98
|
+
@theme_settings.tap do |accum|
|
99
|
+
revise_roles = [].to_set
|
100
|
+
theme.each_pair do |key, val|
|
101
|
+
next unless (key = key.to_s).start_with? 'role_'
|
102
|
+
role, key = (key.slice 5, key.length).split '_', 2
|
103
|
+
if (prop = ThemeKeyToFragmentProperty[key])
|
104
|
+
(accum[role] ||= {})[prop] = val
|
105
|
+
#elsif key == 'font_kerning'
|
106
|
+
# unless (resolved_val = val == 'none' ? false : (val == 'normal' ? true : nil)).nil?
|
107
|
+
# (accum[role] ||= {})[:kerning] = resolved_val
|
108
|
+
# end
|
109
|
+
elsif key == 'font_style' || key == 'text_decoration'
|
110
|
+
revise_roles << role
|
111
|
+
end
|
112
|
+
end
|
113
|
+
revise_roles.each do |role|
|
114
|
+
(accum[role] ||= {})[:styles] = to_styles theme[%(role_#{role}_font_style)], theme[%(role_#{role}_text_decoration)]
|
110
115
|
end
|
111
|
-
end
|
112
|
-
revise_roles.each_with_object @theme_settings do |role, accum|
|
113
|
-
(accum[role] ||= {})[:styles] = to_styles theme[%(role_#{role}_font_style)], theme[%(role_#{role}_text_decoration)]
|
114
116
|
end
|
115
117
|
@theme_settings['line-through'] = { styles: [:strikethrough].to_set } unless @theme_settings.key? 'line-through'
|
116
118
|
@theme_settings['underline'] = { styles: [:underline].to_set } unless @theme_settings.key? 'underline'
|
@@ -276,8 +278,10 @@ module Asciidoctor
|
|
276
278
|
when '#' # hex string (e.g., #FF0000)
|
277
279
|
fragment[:color] = value.length == 7 ? (value.slice 1, 6) : (value.slice 1, 3).each_char.map {|c| c * 2 }.join if HexColorRx.match? value
|
278
280
|
when '[' # CMYK array (e.g., [50, 100, 0, 0])
|
279
|
-
fragment[:color] =
|
280
|
-
|
281
|
+
fragment[:color] = [0, 0, 0, 0].tap do |accum|
|
282
|
+
(((value.slice 1, value.length).chomp ']').split ', ', 4).each_with_index do |it, idx|
|
283
|
+
accum[idx] = (ival = it.to_i) == (fval = it.to_f) ? ival : fval
|
284
|
+
end
|
281
285
|
end
|
282
286
|
else # assume a 6-character hex color (internal only)
|
283
287
|
fragment[:color] = value
|
@@ -15,9 +15,7 @@ module Asciidoctor
|
|
15
15
|
BaseThemePath = ::File.join ThemesDir, 'base-theme.yml'
|
16
16
|
BundledThemeNames = (::Dir.children ThemesDir).map {|it| it.slice 0, it.length - 10 }
|
17
17
|
DeprecatedCategoryKeys = { 'blockquote' => 'quote', 'key' => 'kbd', 'literal' => 'codespan', 'outline_list' => 'list' }
|
18
|
-
DeprecatedKeys = %w(base heading heading_h1 heading_h2 heading_h3 heading_h4 heading_h5 heading_h6 title_page abstract abstract_title admonition_label sidebar_title toc_title).
|
19
|
-
accum[%(#{prefix}_align)] = %(#{prefix}_text_align)
|
20
|
-
end
|
18
|
+
DeprecatedKeys = { 'table_caption_side' => 'table_caption_end' }.tap {|accum| %w(base heading heading_h1 heading_h2 heading_h3 heading_h4 heading_h5 heading_h6 title_page abstract abstract_title admonition_label sidebar_title toc_title).each {|prefix| accum[%(#{prefix}_align)] = %(#{prefix}_text_align) } }
|
21
19
|
PaddingBottomHackKeys = %w(example_padding quote_padding sidebar_padding verse_padding)
|
22
20
|
|
23
21
|
VariableRx = /\$([a-z0-9_-]+)/
|
@@ -159,10 +157,12 @@ module Asciidoctor
|
|
159
157
|
elsif key == 'font_fallbacks'
|
160
158
|
data[key] = ::Array === val ? val.map {|name| expand_vars name.to_s, data } : []
|
161
159
|
elsif key.start_with? 'admonition_icon_'
|
162
|
-
data[key] =
|
163
|
-
|
164
|
-
|
165
|
-
|
160
|
+
data[key] = {}.tap do |accum|
|
161
|
+
val.each do |key2, val2|
|
162
|
+
key2 = key2.tr '-', '_' if key2.include? '-'
|
163
|
+
accum[key2.to_sym] = (key2.end_with? '_color') ? (to_color evaluate val2, data) : (evaluate val2, data)
|
164
|
+
end
|
165
|
+
end if val
|
166
166
|
elsif ::Hash === val
|
167
167
|
if (rekey = DeprecatedCategoryKeys[key])
|
168
168
|
logger.warn %(the #{key.tr '_', '-'} theme category is deprecated; use the #{rekey.tr '_', '-'} category instead)
|
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.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-05-
|
12
|
+
date: 2022-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: asciidoctor
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- lib/asciidoctor/pdf/converter.rb
|
247
247
|
- lib/asciidoctor/pdf/ext.rb
|
248
248
|
- lib/asciidoctor/pdf/ext/asciidoctor.rb
|
249
|
+
- lib/asciidoctor/pdf/ext/asciidoctor/abstract_block.rb
|
249
250
|
- lib/asciidoctor/pdf/ext/asciidoctor/document.rb
|
250
251
|
- lib/asciidoctor/pdf/ext/asciidoctor/image.rb
|
251
252
|
- lib/asciidoctor/pdf/ext/asciidoctor/list.rb
|
@@ -324,9 +325,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
324
325
|
version: '0'
|
325
326
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
326
327
|
requirements:
|
327
|
-
- - "
|
328
|
+
- - ">="
|
328
329
|
- !ruby/object:Gem::Version
|
329
|
-
version:
|
330
|
+
version: '0'
|
330
331
|
requirements: []
|
331
332
|
rubygems_version: 3.3.7
|
332
333
|
signing_key:
|