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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +131 -4
  3. data/Gemfile +8 -1
  4. data/README.adoc +199 -36
  5. data/Rakefile +1 -0
  6. data/asciidoctor-pdf.gemspec +4 -4
  7. data/data/themes/base-theme.yml +9 -2
  8. data/data/themes/default-theme.yml +34 -20
  9. data/docs/theming-guide.adoc +1147 -268
  10. data/lib/asciidoctor-pdf/asciidoctor_ext/image.rb +7 -1
  11. data/lib/asciidoctor-pdf/converter.rb +841 -409
  12. data/lib/asciidoctor-pdf/core_ext.rb +1 -0
  13. data/lib/asciidoctor-pdf/core_ext/numeric.rb +12 -8
  14. data/lib/asciidoctor-pdf/core_ext/object.rb +6 -0
  15. data/lib/asciidoctor-pdf/core_ext/string.rb +15 -0
  16. data/lib/asciidoctor-pdf/formatted_text/inline_destination_marker.rb +5 -0
  17. data/lib/asciidoctor-pdf/formatted_text/inline_image_arranger.rb +75 -28
  18. data/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb +3 -2
  19. data/lib/asciidoctor-pdf/formatted_text/transform.rb +97 -89
  20. data/lib/asciidoctor-pdf/index_catalog.rb +119 -0
  21. data/lib/asciidoctor-pdf/measurements.rb +58 -0
  22. data/lib/asciidoctor-pdf/pdf-core_ext.rb +1 -0
  23. data/lib/asciidoctor-pdf/{pdf_core_ext → pdf-core_ext}/page.rb +3 -7
  24. data/lib/asciidoctor-pdf/pdfmark.rb +33 -0
  25. data/lib/asciidoctor-pdf/prawn-svg_ext.rb +4 -0
  26. data/lib/asciidoctor-pdf/prawn-svg_ext/interface.rb +10 -0
  27. data/lib/asciidoctor-pdf/prawn-table_ext.rb +3 -0
  28. data/lib/asciidoctor-pdf/prawn-table_ext/cell/asciidoc.rb +69 -0
  29. data/lib/asciidoctor-pdf/prawn-table_ext/cell/text.rb +12 -0
  30. data/lib/asciidoctor-pdf/prawn_ext/extensions.rb +89 -76
  31. data/lib/asciidoctor-pdf/prawn_ext/images.rb +0 -1
  32. data/lib/asciidoctor-pdf/roman_numeral.rb +1 -1
  33. data/lib/asciidoctor-pdf/rouge_ext/formatters/prawn.rb +51 -11
  34. data/lib/asciidoctor-pdf/rouge_ext/themes/pastie.rb +64 -59
  35. data/lib/asciidoctor-pdf/sanitizer.rb +53 -2
  36. data/lib/asciidoctor-pdf/theme_loader.rb +8 -21
  37. data/lib/asciidoctor-pdf/version.rb +1 -1
  38. metadata +19 -13
  39. data/docs/theme-schema.json +0 -114
  40. data/lib/asciidoctor-pdf/pdf_core_ext.rb +0 -2
  41. data/lib/asciidoctor-pdf/pdf_core_ext/pdf_object.rb +0 -25
  42. 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 initial_value.is_a? ::Integer
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
- @linenum_fragment_base = (create_fragment Token['Generic.Lineno']).merge linenum: true
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
- start_of_line = val.end_with? LF
80
- # NOTE this optimization assumes we don't support/use background colors
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
- # TODO support background color
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 Rouge theme that matches 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
- style Text::Whitespace, fg: '#bbbbbb'
9
-
10
- style Comment, fg: '#888888'
11
- style Comment::Preproc, fg: '#cc0000', bold: true
12
- style Comment::Special, fg: '#cc0000', bg: '#fff0f0', bold: true
13
-
14
- style Error, fg: '#a61717', bg: '#e3d2d2'
15
- style Generic::Error, fg: '#aa0000'
16
- style Generic::Traceback, fg: '#aa0000'
17
-
18
- style Generic::Deleted, fg: '#000000', bg: '#ffdddd'
19
- style Generic::Emph, italic: true
20
- style Generic::Inserted, fg: '#000000', bg: '#ddffdd'
21
- style Generic::Heading, fg: '#333333'
22
- #style Generic::Lineno, fg: '#555555'
23
- style Generic::Lineno, fg: '#888888'
24
- style Generic::Output, fg: '#888888'
25
- style Generic::Prompt, fg: '#555555'
26
- style Generic::Strong, bold: true
27
- style Generic::Subheading, fg: '#666666'
28
-
29
- style Keyword, fg: '#008800', bold: true
30
- style Keyword::Pseudo, fg: '#008800'
31
- style Keyword::Type, fg: '#888888', bold: true
32
-
33
- style Literal::Number, fg: '#0000dd', bold: true
34
-
35
- style Literal::String, fg: '#dd2200', bg: '#fff0f0'
36
- style Literal::String::Escape, fg: '#0044dd'
37
- style Literal::String::Interpol, fg: '#3333bb'
38
- style Literal::String::Other, fg: '#22bb22', bg: '#f0fff0'
39
- style Literal::String::Regex, fg: '#008800', bg: '#fff0ff'
40
- style Literal::String::Symbol, fg: '#aa6600'
41
-
42
- style Name::Attribute, fg: '#336699'
43
- style Name::Builtin, fg: '#003388'
44
- style Name::Class, fg: '#bb0066', bold: true
45
- style Name::Constant, fg: '#003366', bold: true
46
- style Name::Decorator, fg: '#555555'
47
- style Name::Exception, fg: '#bb0066', bold: true
48
- style Name::Function, fg: '#0066bb', bold: true
49
- #style Name::Label, fg: '#336699', italic: true
50
- style Name::Label, fg: '#336699'
51
- style Name::Namespace, fg: '#bb0066', bold: true
52
- style Name::Property, fg: '#336699', bold: true
53
- style Name::Tag, fg: '#bb0066', bold: true
54
- style Name::Variable::Global, fg: '#dd7700'
55
- style Name::Variable::Instance, fg: '#3333bb'
56
- style Name::Variable, fg: '#336699'
57
-
58
- style Operator::Word, fg: '#008800'
59
- end
60
- end
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 upcase_pcdata string
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.upcase : $1 }
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|pt|px)(?=$| |\))/
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
- original = expr
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.gsub(MeasurementValueRx) {
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 = %(#{value})
220
+ value = value.to_s
234
221
  end
235
222
  value = case value.size
236
223
  when 6
@@ -1,5 +1,5 @@
1
1
  module Asciidoctor
2
2
  module Pdf
3
- VERSION = '1.5.0.alpha.13'
3
+ VERSION = '1.5.0.alpha.14'
4
4
  end
5
5
  end
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.13
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: 2016-09-19 00:00:00.000000000 Z
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.26.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.26.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.2.0
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.2.0
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.io
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/pdf_core_ext.rb
226
- - lib/asciidoctor-pdf/pdf_core_ext/page.rb
227
- - lib/asciidoctor-pdf/pdf_core_ext/pdf_object.rb
228
- - lib/asciidoctor-pdf/pdfmarks.rb
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.5.1
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