asciidoctor-pdf 1.5.0.alpha.13 → 1.5.0.alpha.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +131 -4
- data/Gemfile +8 -1
- data/README.adoc +199 -36
- data/Rakefile +1 -0
- data/asciidoctor-pdf.gemspec +4 -4
- data/data/themes/base-theme.yml +9 -2
- data/data/themes/default-theme.yml +34 -20
- data/docs/theming-guide.adoc +1147 -268
- data/lib/asciidoctor-pdf/asciidoctor_ext/image.rb +7 -1
- data/lib/asciidoctor-pdf/converter.rb +841 -409
- data/lib/asciidoctor-pdf/core_ext.rb +1 -0
- data/lib/asciidoctor-pdf/core_ext/numeric.rb +12 -8
- data/lib/asciidoctor-pdf/core_ext/object.rb +6 -0
- data/lib/asciidoctor-pdf/core_ext/string.rb +15 -0
- data/lib/asciidoctor-pdf/formatted_text/inline_destination_marker.rb +5 -0
- data/lib/asciidoctor-pdf/formatted_text/inline_image_arranger.rb +75 -28
- data/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb +3 -2
- data/lib/asciidoctor-pdf/formatted_text/transform.rb +97 -89
- data/lib/asciidoctor-pdf/index_catalog.rb +119 -0
- data/lib/asciidoctor-pdf/measurements.rb +58 -0
- data/lib/asciidoctor-pdf/pdf-core_ext.rb +1 -0
- data/lib/asciidoctor-pdf/{pdf_core_ext → pdf-core_ext}/page.rb +3 -7
- data/lib/asciidoctor-pdf/pdfmark.rb +33 -0
- data/lib/asciidoctor-pdf/prawn-svg_ext.rb +4 -0
- data/lib/asciidoctor-pdf/prawn-svg_ext/interface.rb +10 -0
- data/lib/asciidoctor-pdf/prawn-table_ext.rb +3 -0
- data/lib/asciidoctor-pdf/prawn-table_ext/cell/asciidoc.rb +69 -0
- data/lib/asciidoctor-pdf/prawn-table_ext/cell/text.rb +12 -0
- data/lib/asciidoctor-pdf/prawn_ext/extensions.rb +89 -76
- data/lib/asciidoctor-pdf/prawn_ext/images.rb +0 -1
- data/lib/asciidoctor-pdf/roman_numeral.rb +1 -1
- data/lib/asciidoctor-pdf/rouge_ext/formatters/prawn.rb +51 -11
- data/lib/asciidoctor-pdf/rouge_ext/themes/pastie.rb +64 -59
- data/lib/asciidoctor-pdf/sanitizer.rb +53 -2
- data/lib/asciidoctor-pdf/theme_loader.rb +8 -21
- data/lib/asciidoctor-pdf/version.rb +1 -1
- metadata +19 -13
- data/docs/theme-schema.json +0 -114
- data/lib/asciidoctor-pdf/pdf_core_ext.rb +0 -2
- data/lib/asciidoctor-pdf/pdf_core_ext/pdf_object.rb +0 -25
- data/lib/asciidoctor-pdf/pdfmarks.rb +0 -35
@@ -11,7 +11,6 @@ module Images
|
|
11
11
|
def image file, opts = {}
|
12
12
|
# FIXME handle case when SVG is a File or IO object
|
13
13
|
if ::String === file && (file.downcase.end_with? '.svg')
|
14
|
-
opts[:at] ||= bounds.top_left
|
15
14
|
opts[:fallback_font_name] ||= default_svg_font if respond_to? :default_svg_font
|
16
15
|
svg (::IO.read file), opts
|
17
16
|
else
|
@@ -48,7 +48,7 @@ class RomanNumeral
|
|
48
48
|
|
49
49
|
def initialize initial_value, letter_case = nil
|
50
50
|
initial_value ||= 1
|
51
|
-
if
|
51
|
+
if ::Integer === initial_value
|
52
52
|
@integer_value = initial_value
|
53
53
|
else
|
54
54
|
@integer_value = RomanNumeral.roman_to_int initial_value
|
@@ -5,6 +5,8 @@ module Formatters
|
|
5
5
|
class Prawn < Formatter
|
6
6
|
tag 'prawn'
|
7
7
|
|
8
|
+
Tokens = ::Rouge::Token::Tokens
|
9
|
+
|
8
10
|
LF = %(\n)
|
9
11
|
NoBreakSpace = %(\u00a0)
|
10
12
|
InnerIndent = %(\n )
|
@@ -13,6 +15,7 @@ class Prawn < Formatter
|
|
13
15
|
BoldStyle = [:bold].to_set
|
14
16
|
ItalicStyle = [:italic].to_set
|
15
17
|
BoldItalicStyle = [:bold, :italic].to_set
|
18
|
+
UnderlineStyle = [:underline].to_set
|
16
19
|
|
17
20
|
def initialize opts = {}
|
18
21
|
unless ::Rouge::Theme === (theme = opts[:theme])
|
@@ -23,7 +26,12 @@ class Prawn < Formatter
|
|
23
26
|
end
|
24
27
|
@theme = theme
|
25
28
|
@normalized_colors = {}
|
26
|
-
@
|
29
|
+
@background_colorizer = BackgroundColorizer.new line_gap: opts[:line_gap]
|
30
|
+
@linenum_fragment_base = (create_fragment Tokens::Generic::Lineno).merge linenum: true
|
31
|
+
end
|
32
|
+
|
33
|
+
def background_color
|
34
|
+
@background_color ||= normalize_color((@theme.style_for Tokens::Text).bg)
|
27
35
|
end
|
28
36
|
|
29
37
|
# Override format method so fragments don't get flatted to a string
|
@@ -43,13 +51,13 @@ class Prawn < Formatter
|
|
43
51
|
fragments << { text: LF }
|
44
52
|
fragments << (create_linenum_fragment linenum += 1)
|
45
53
|
elsif val.include? LF
|
54
|
+
# NOTE we assume if the fragment ends in a line feed, the intention was to match a line-oriented form
|
55
|
+
line_oriented = val.end_with? LF
|
46
56
|
base_fragment = create_fragment tok, val
|
47
57
|
val.each_line do |line|
|
48
|
-
fragments << (base_fragment.merge text: line)
|
58
|
+
fragments << (line_oriented ? (base_fragment.merge text: line, line_oriented: true) : (base_fragment.merge text: line))
|
49
59
|
# NOTE append linenum fragment if there's a next line; only works if source doesn't have trailing endline
|
50
|
-
if line.end_with? LF
|
51
|
-
fragments << (create_linenum_fragment linenum += 1)
|
52
|
-
end
|
60
|
+
fragments << (create_linenum_fragment linenum += 1) if line.end_with? LF
|
53
61
|
end
|
54
62
|
else
|
55
63
|
fragments << (create_fragment tok, val)
|
@@ -76,9 +84,12 @@ class Prawn < Formatter
|
|
76
84
|
else
|
77
85
|
val[0] = GuardedIndent if start_of_line && (val.start_with? ' ')
|
78
86
|
val.gsub! InnerIndent, GuardedInnerIndent if val.include? InnerIndent
|
79
|
-
|
80
|
-
#
|
81
|
-
val.rstrip.empty? ? { text: val } : (create_fragment tok, val)
|
87
|
+
# QUESTION do we need the call to create_fragment if val contains only spaces? consider bg
|
88
|
+
#fragment = create_fragment tok, val
|
89
|
+
fragment = val.rstrip.empty? ? { text: val } : (create_fragment tok, val)
|
90
|
+
# NOTE we assume if the fragment ends in a line feed, the intention was to match a line-oriented form
|
91
|
+
fragment[:line_oriented] = true if (start_of_line = val.end_with? LF)
|
92
|
+
fragment
|
82
93
|
end
|
83
94
|
end
|
84
95
|
# QUESTION should we strip trailing newline?
|
@@ -89,14 +100,26 @@ class Prawn < Formatter
|
|
89
100
|
def create_fragment tok, val = nil
|
90
101
|
fragment = val ? { text: val } : {}
|
91
102
|
if (style_rules = @theme.style_for tok)
|
92
|
-
|
103
|
+
if (bg = normalize_color style_rules.bg) && bg != @background_color
|
104
|
+
fragment[:background_color] = bg
|
105
|
+
fragment[:callback] = @background_colorizer
|
106
|
+
fragment[:inline_block] = true if style_rules[:inline_block]
|
107
|
+
fragment[:extend] = true if style_rules[:extend]
|
108
|
+
end
|
93
109
|
if (fg = normalize_color style_rules.fg)
|
94
110
|
fragment[:color] = fg
|
95
111
|
end
|
96
112
|
if style_rules[:bold]
|
97
|
-
fragment[:styles] = style_rules[:italic] ? BoldItalicStyle : BoldStyle
|
113
|
+
fragment[:styles] = style_rules[:italic] ? BoldItalicStyle.dup : BoldStyle.dup
|
98
114
|
elsif style_rules[:italic]
|
99
|
-
fragment[:styles] = ItalicStyle
|
115
|
+
fragment[:styles] = ItalicStyle.dup
|
116
|
+
end
|
117
|
+
if style_rules[:underline]
|
118
|
+
if fragment.key? :styles
|
119
|
+
fragment[:styles] << UnderlineStyle.first
|
120
|
+
else
|
121
|
+
fragment[:styles] = UnderlineStyle.dup
|
122
|
+
end
|
100
123
|
end
|
101
124
|
end
|
102
125
|
fragment
|
@@ -117,5 +140,22 @@ class Prawn < Formatter
|
|
117
140
|
end
|
118
141
|
end
|
119
142
|
end
|
143
|
+
|
144
|
+
class BackgroundColorizer
|
145
|
+
def initialize opts = {}
|
146
|
+
@line_gap = opts[:line_gap] || 0
|
147
|
+
end
|
148
|
+
|
149
|
+
def render_behind fragment
|
150
|
+
pdf = fragment.document
|
151
|
+
data = fragment.format_state
|
152
|
+
prev_fill_color = pdf.fill_color
|
153
|
+
pdf.fill_color data[:background_color]
|
154
|
+
v_gap = data[:inline_block] ? @line_gap : 0
|
155
|
+
fragment_width = data[:line_oriented] && data[:extend] ? (pdf.bounds.width - fragment.left) : fragment.width
|
156
|
+
pdf.fill_rectangle [fragment.left, fragment.top + v_gap * 0.5], fragment_width, (fragment.height + v_gap)
|
157
|
+
pdf.fill_color prev_fill_color
|
158
|
+
end
|
159
|
+
end
|
120
160
|
end
|
121
161
|
end
|
@@ -1,61 +1,66 @@
|
|
1
1
|
module Rouge
|
2
|
-
module Themes
|
3
|
-
# A
|
4
|
-
# See https://bitbucket.org/birkenfeld/pygments-main/src/default/pygments/styles/pastie.py
|
5
|
-
class Pastie < CSSTheme
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
2
|
+
module Themes
|
3
|
+
# A port of the pastie style from Pygments.
|
4
|
+
# See https://bitbucket.org/birkenfeld/pygments-main/src/default/pygments/styles/pastie.py
|
5
|
+
class Pastie < CSSTheme
|
6
|
+
name 'pastie'
|
7
|
+
|
8
|
+
# Deviate from pastie here since our italic is actually a thinner font
|
9
|
+
style Comment, fg: '#888888' #, italic: true
|
10
|
+
style Comment::Preproc, fg: '#cc0000', bold: true
|
11
|
+
# Deviate from pastie here by not using a background color
|
12
|
+
style Comment::Special, fg: '#cc0000', bold: true #, bg: '#fff0f0'
|
13
|
+
|
14
|
+
style Error, fg: '#a61717', bg: '#e3d2d2'
|
15
|
+
style Generic::Error, fg: '#aa0000'
|
16
|
+
|
17
|
+
style Generic::Heading, fg: '#333333'
|
18
|
+
style Generic::Subheading, fg: '#666666'
|
19
|
+
|
20
|
+
style Generic::Deleted, fg: '#000000', bg: '#ffdddd', inline_block: true, extend: true
|
21
|
+
style Generic::Inserted, fg: '#000000', bg: '#ddffdd', inline_block: true, extend: true
|
22
|
+
|
23
|
+
style Generic::Emph, italic: true
|
24
|
+
style Generic::Strong, bold: true
|
25
|
+
|
26
|
+
style Generic::Lineno, fg: '#888888'
|
27
|
+
style Generic::Output, fg: '#888888'
|
28
|
+
style Generic::Prompt, fg: '#555555'
|
29
|
+
style Generic::Traceback, fg: '#aa0000'
|
30
|
+
|
31
|
+
style Keyword, fg: '#008800', bold: true
|
32
|
+
style Keyword::Pseudo, fg: '#008800'
|
33
|
+
style Keyword::Type, fg: '#888888', bold: true
|
34
|
+
|
35
|
+
style Num, fg: '#0000dd', bold: true
|
36
|
+
|
37
|
+
# Deviate from pastie here by not using background colors
|
38
|
+
style Str, fg: '#dd2200' #, bg: '#fff0f0'
|
39
|
+
style Str::Escape, fg: '#0044dd' #, bg: '#fff0f0'
|
40
|
+
style Str::Interpol, fg: '#3333bb' #, bg: '#fff0f0'
|
41
|
+
style Str::Other, fg: '#22bb22' #, bg: '#f0fff0'
|
42
|
+
style Str::Regex, fg: '#008800' #, bg: '#fff0ff'
|
43
|
+
style Str::Symbol, fg: '#aa6600' #, bg: '#fff0f0'
|
44
|
+
|
45
|
+
style Name::Attribute, fg: '#336699'
|
46
|
+
style Name::Builtin, fg: '#003388'
|
47
|
+
style Name::Class, fg: '#bb0066', bold: true
|
48
|
+
style Name::Constant, fg: '#003366', bold: true
|
49
|
+
style Name::Decorator, fg: '#555555'
|
50
|
+
style Name::Exception, fg: '#bb0066', bold: true
|
51
|
+
style Name::Function, fg: '#0066bb', bold: true
|
52
|
+
# Name::Label is used for built-in CSS properties in Rouge, so let's drop italics
|
53
|
+
style Name::Label, fg: '#336699' #, italic: true
|
54
|
+
style Name::Namespace, fg: '#bb0066', bold: true
|
55
|
+
style Name::Property, fg: '#336699', bold: true
|
56
|
+
style Name::Tag, fg: '#bb0066', bold: true
|
57
|
+
style Name::Variable, fg: '#336699'
|
58
|
+
style Name::Variable::Global, fg: '#dd7700'
|
59
|
+
style Name::Variable::Instance, fg: '#3333bb'
|
60
|
+
|
61
|
+
style Operator::Word, fg: '#008800'
|
62
|
+
|
63
|
+
style Text, {}
|
64
|
+
end
|
65
|
+
end
|
61
66
|
end
|
@@ -1,3 +1,11 @@
|
|
1
|
+
begin
|
2
|
+
require 'unicode' unless defined? Unicode::VERSION
|
3
|
+
rescue LoadError
|
4
|
+
begin
|
5
|
+
require 'active_support/multibyte' unless defined? ActiveSupport::Multibyte
|
6
|
+
rescue LoadError; end
|
7
|
+
end
|
8
|
+
|
1
9
|
module Asciidoctor
|
2
10
|
module Pdf
|
3
11
|
module Sanitizer
|
@@ -8,6 +16,8 @@ module Sanitizer
|
|
8
16
|
}
|
9
17
|
BuiltInEntityCharRx = /(?:#{BuiltInEntityChars.keys * '|'})/
|
10
18
|
BuiltInEntityCharOrTagRx = /(?:#{BuiltInEntityChars.keys * '|'}|<)/
|
19
|
+
InverseBuiltInEntityChars = BuiltInEntityChars.invert
|
20
|
+
InverseBuiltInEntityCharRx = /[#{InverseBuiltInEntityChars.keys.join}]/
|
11
21
|
NumericCharRefRx = /&#(\d{2,6});/
|
12
22
|
XmlSanitizeRx = /<[^>]+>/
|
13
23
|
SegmentPcdataRx = /(?:(&[a-z]+;|<[^>]+>)|([^&<]+))/
|
@@ -25,12 +35,53 @@ module Sanitizer
|
|
25
35
|
.gsub(BuiltInEntityCharRx, BuiltInEntityChars)
|
26
36
|
end
|
27
37
|
|
28
|
-
def
|
38
|
+
def escape_xml string
|
39
|
+
string.gsub InverseBuiltInEntityCharRx, InverseBuiltInEntityChars
|
40
|
+
end
|
41
|
+
|
42
|
+
def uppercase_pcdata string
|
29
43
|
if BuiltInEntityCharOrTagRx =~ string
|
30
|
-
string.gsub(SegmentPcdataRx) { $2 ? $2
|
44
|
+
string.gsub(SegmentPcdataRx) { $2 ? (uppercase_mb $2) : $1 }
|
31
45
|
else
|
46
|
+
uppercase_mb string
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if RUBY_VERSION >= '2.4'
|
51
|
+
def uppercase_mb string
|
52
|
+
string.upcase
|
53
|
+
end
|
54
|
+
|
55
|
+
def lowercase_mb string
|
56
|
+
string.downcase
|
57
|
+
end
|
58
|
+
# NOTE Unicode library is 4x as fast as ActiveSupport::MultiByte::Chars
|
59
|
+
elsif defined? ::Unicode
|
60
|
+
def uppercase_mb string
|
61
|
+
string.ascii_only? ? string.upcase : (::Unicode.upcase string)
|
62
|
+
end
|
63
|
+
|
64
|
+
def lowercase_mb string
|
65
|
+
string.ascii_only? ? string.downcase : (::Unicode.downcase string)
|
66
|
+
end
|
67
|
+
elsif defined? ::ActiveSupport::Multibyte
|
68
|
+
MultibyteChars = ::ActiveSupport::Multibyte::Chars
|
69
|
+
|
70
|
+
def uppercase_mb string
|
71
|
+
string.ascii_only? ? string.upcase : (MultibyteChars.new string).upcase.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
def lowercase_mb string
|
75
|
+
string.ascii_only? ? string.downcase : (MultibyteChars.new string).downcase.to_s
|
76
|
+
end
|
77
|
+
else
|
78
|
+
def uppercase_mb string
|
32
79
|
string.upcase
|
33
80
|
end
|
81
|
+
|
82
|
+
def lowercase_mb string
|
83
|
+
string.downcase
|
84
|
+
end
|
34
85
|
end
|
35
86
|
end
|
36
87
|
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'safe_yaml/load'
|
2
2
|
require 'ostruct'
|
3
3
|
require_relative 'core_ext/ostruct'
|
4
|
+
require_relative 'measurements'
|
4
5
|
|
5
6
|
module Asciidoctor
|
6
7
|
module Pdf
|
7
8
|
class ThemeLoader
|
9
|
+
include ::Asciidoctor::Pdf::Measurements
|
10
|
+
|
8
11
|
DataDir = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', 'data'))
|
9
12
|
ThemesDir = ::File.join DataDir, 'themes'
|
10
13
|
FontsDir = ::File.join DataDir, 'fonts'
|
@@ -14,7 +17,7 @@ class ThemeLoader
|
|
14
17
|
VariableRx = /\$([a-z0-9_]+)/
|
15
18
|
LoneVariableRx = /^\$([a-z0-9_]+)$/
|
16
19
|
HexColorEntryRx = /^(?<k>[[:blank:]]*[[:graph:]]+): +(?!null$)(?<q>["']?)#?(?<v>\w{3,6})\k<q> *(?:#.*)?$/
|
17
|
-
MeasurementValueRx = /(?<=^| |\()(-?\d+(?:\.\d+)?)(in|mm|cm|
|
20
|
+
MeasurementValueRx = /(?<=^| |\()(-?\d+(?:\.\d+)?)(in|mm|cm|p[txc])(?=$| |\))/
|
18
21
|
MultiplyDivideOpRx = /(-?\d+(?:\.\d+)?) +([*\/]) +(-?\d+(?:\.\d+)?)/
|
19
22
|
AddSubtractOpRx = /(-?\d+(?:\.\d+)?) +([+\-]) +(-?\d+(?:\.\d+)?)/
|
20
23
|
PrecisionFuncRx = /^(round|floor|ceil)\(/
|
@@ -111,7 +114,7 @@ class ThemeLoader
|
|
111
114
|
# QUESTION do we need to evaluate_math in this case?
|
112
115
|
data[key] = to_color(evaluate val, data)
|
113
116
|
elsif %(#{key.chomp '_'}_).include? '_content_'
|
114
|
-
data[key] = expand_vars val, data
|
117
|
+
data[key] = (expand_vars val.to_s, data).to_s
|
115
118
|
else
|
116
119
|
data[key] = evaluate val, data
|
117
120
|
end
|
@@ -144,26 +147,10 @@ class ThemeLoader
|
|
144
147
|
|
145
148
|
def evaluate_math expr
|
146
149
|
return expr if !(::String === expr) || ColorValue === expr
|
147
|
-
|
148
|
-
# expand measurement values (e.g., 0.5in)
|
150
|
+
# resolve measurement values (e.g., 0.5in => 36)
|
149
151
|
# QUESTION should we round the value? perhaps leave that to the precision functions
|
150
152
|
# NOTE leave % as a string; handled by converter for now
|
151
|
-
expr = expr
|
152
|
-
# TODO extract to_pt method and use it here
|
153
|
-
val = $1.to_f
|
154
|
-
case $2
|
155
|
-
when 'in'
|
156
|
-
val * 72
|
157
|
-
when 'mm'
|
158
|
-
val * (72 / 25.4)
|
159
|
-
when 'cm'
|
160
|
-
val * (720 / 25.4)
|
161
|
-
when 'px'
|
162
|
-
val * 0.75
|
163
|
-
else
|
164
|
-
val # default unit is pt
|
165
|
-
end
|
166
|
-
}
|
153
|
+
expr = resolve_measurement_values(original = expr)
|
167
154
|
while true
|
168
155
|
result = expr.gsub(MultiplyDivideOpRx) { $1.to_f.send $2.to_sym, $3.to_f }
|
169
156
|
unchanged = (result == expr)
|
@@ -230,7 +217,7 @@ class ThemeLoader
|
|
230
217
|
end
|
231
218
|
else
|
232
219
|
# Unknown type; coerce to a string
|
233
|
-
value =
|
220
|
+
value = value.to_s
|
234
221
|
end
|
235
222
|
value = case value.size
|
236
223
|
when 6
|
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: 1.5.0.alpha.
|
4
|
+
version: 1.5.0.alpha.14
|
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:
|
12
|
+
date: 2017-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -96,7 +96,7 @@ dependencies:
|
|
96
96
|
version: 0.21.0
|
97
97
|
- - "<"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: 0.
|
99
|
+
version: 0.27.0
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
102
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -106,21 +106,21 @@ dependencies:
|
|
106
106
|
version: 0.21.0
|
107
107
|
- - "<"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
109
|
+
version: 0.27.0
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
111
|
name: prawn-icon
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - '='
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.
|
116
|
+
version: 1.3.0
|
117
117
|
type: :runtime
|
118
118
|
prerelease: false
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
121
|
- - '='
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 1.
|
123
|
+
version: 1.3.0
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: safe_yaml
|
126
126
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,7 +167,7 @@ description: 'An extension for Asciidoctor that converts AsciiDoc documents to P
|
|
167
167
|
using the Prawn PDF library.
|
168
168
|
|
169
169
|
'
|
170
|
-
email: dan@opendevise.
|
170
|
+
email: dan@opendevise.com
|
171
171
|
executables:
|
172
172
|
- asciidoctor-pdf
|
173
173
|
extensions: []
|
@@ -198,7 +198,6 @@ files:
|
|
198
198
|
- data/fonts/notoserif-regular-subset.ttf
|
199
199
|
- data/themes/base-theme.yml
|
200
200
|
- data/themes/default-theme.yml
|
201
|
-
- docs/theme-schema.json
|
202
201
|
- docs/theming-guide.adoc
|
203
202
|
- lib/asciidoctor-pdf.rb
|
204
203
|
- lib/asciidoctor-pdf/asciidoctor_ext.rb
|
@@ -210,6 +209,7 @@ files:
|
|
210
209
|
- lib/asciidoctor-pdf/core_ext.rb
|
211
210
|
- lib/asciidoctor-pdf/core_ext/array.rb
|
212
211
|
- lib/asciidoctor-pdf/core_ext/numeric.rb
|
212
|
+
- lib/asciidoctor-pdf/core_ext/object.rb
|
213
213
|
- lib/asciidoctor-pdf/core_ext/ostruct.rb
|
214
214
|
- lib/asciidoctor-pdf/core_ext/quantifiable_stdout.rb
|
215
215
|
- lib/asciidoctor-pdf/core_ext/string.rb
|
@@ -222,10 +222,16 @@ files:
|
|
222
222
|
- lib/asciidoctor-pdf/formatted_text/parser.treetop
|
223
223
|
- lib/asciidoctor-pdf/formatted_text/transform.rb
|
224
224
|
- lib/asciidoctor-pdf/implicit_header_processor.rb
|
225
|
-
- lib/asciidoctor-pdf/
|
226
|
-
- lib/asciidoctor-pdf/
|
227
|
-
- lib/asciidoctor-pdf/
|
228
|
-
- lib/asciidoctor-pdf/
|
225
|
+
- lib/asciidoctor-pdf/index_catalog.rb
|
226
|
+
- lib/asciidoctor-pdf/measurements.rb
|
227
|
+
- lib/asciidoctor-pdf/pdf-core_ext.rb
|
228
|
+
- lib/asciidoctor-pdf/pdf-core_ext/page.rb
|
229
|
+
- lib/asciidoctor-pdf/pdfmark.rb
|
230
|
+
- lib/asciidoctor-pdf/prawn-svg_ext.rb
|
231
|
+
- lib/asciidoctor-pdf/prawn-svg_ext/interface.rb
|
232
|
+
- lib/asciidoctor-pdf/prawn-table_ext.rb
|
233
|
+
- lib/asciidoctor-pdf/prawn-table_ext/cell/asciidoc.rb
|
234
|
+
- lib/asciidoctor-pdf/prawn-table_ext/cell/text.rb
|
229
235
|
- lib/asciidoctor-pdf/prawn_ext.rb
|
230
236
|
- lib/asciidoctor-pdf/prawn_ext/coderay_encoder.rb
|
231
237
|
- lib/asciidoctor-pdf/prawn_ext/extensions.rb
|
@@ -265,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
265
271
|
version: 1.3.1
|
266
272
|
requirements: []
|
267
273
|
rubyforge_project:
|
268
|
-
rubygems_version: 2.
|
274
|
+
rubygems_version: 2.6.8
|
269
275
|
signing_key:
|
270
276
|
specification_version: 4
|
271
277
|
summary: Converts AsciiDoc documents to PDF using Prawn
|