asciidoctor-pdf 2.1.3 → 2.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7753392586bac4a044601fefa9ecb58745e02fc37434dd5a26e020692890e65
4
- data.tar.gz: 301fe3fef546588aacba4ca8d9c5afd91d4a19a816f07a8fcc66121c8f58f626
3
+ metadata.gz: 626c05cc96837efcf9f6fd0b96f0f31e8791188f27db387609a6a2d6a1345e94
4
+ data.tar.gz: 311afcb050d8063c6878166b8ce89e2e7bd1986af9b212ee9ee9202d87ba3a53
5
5
  SHA512:
6
- metadata.gz: b26fe1f74b22bd73eba166190d21afebafdc1630dba5fee8174aa946b463d81b7e620cb8f400e803507f050c6dd48a1d732a1273a78fc1cd0e958da69a0a3c9c
7
- data.tar.gz: 15cd75342088585a51f19cb342a8023fbc2aa6d0cd89fff72385370172059ac10c98fa51b8126845ce40436fcd89dc0c1f47aa763df14dad24ba2bcd95f92205
6
+ metadata.gz: a82a51068e74bf9ea3bdb89c11a8075a27e58c49fdc84bfdce9066030e7f6688a99a6956bbbd8a1739aa5d2de3eaf5943a9e6ec234ecfce0bc5bc938d0ffc91a
7
+ data.tar.gz: bad6ea4168ef017bec92534f657ec54208851cb224ae2c4e2c37fe329946192bab9d0e5519c8d2d19cf3c1184185664402523fe7175b4fb496465a3ebed41b01
data/CHANGELOG.adoc CHANGED
@@ -5,6 +5,43 @@
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.1.6 (2022-07-19) - @mojavelinux
9
+
10
+ Bug Fixes::
11
+
12
+ * resolve font size for monospaced cell when font size value on `codespan` key in theme is relative (#2281)
13
+
14
+ === Details
15
+
16
+ {url-repo}/releases/tag/v2.1.6[git tag] | {url-repo}/compare/v2.1.5\...v2.1.6[full diff]
17
+
18
+ == 2.1.5 (2022-07-10) - @mojavelinux
19
+
20
+ Bug Fixes::
21
+
22
+ * fix position of background color on caption with outside margin (#2271)
23
+ * don't allow font scale to compound when entering nested table (#2276)
24
+
25
+ === Details
26
+
27
+ {url-repo}/releases/tag/v2.1.5[git tag] | {url-repo}/compare/v2.1.4\...v2.1.5[full diff]
28
+
29
+ == 2.1.4 (2022-06-26) - @mojavelinux
30
+
31
+ Improvements::
32
+
33
+ * include source location in warning message for truncated table cell if sourcemap is enabled (#2261)
34
+
35
+ Bug Fixes::
36
+
37
+ * allow alt text for block image, video, and audio to wrap to next line on same page (#2258)
38
+ * apply `text-transform` from custom role on phrase after attributes have been resolved (#2263)
39
+ * make URL check more strict so image target containing a colon is not mistaken as a URL
40
+
41
+ === Details
42
+
43
+ {url-repo}/releases/tag/v2.1.4[git tag] | {url-repo}/compare/v2.1.3\...v2.1.4[full diff]
44
+
8
45
  == 2.1.3 (2022-06-23) - @mojavelinux
9
46
 
10
47
  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.1.3, 2022-06-23
3
+ v2.1.6, 2022-07-19
4
4
  // Settings:
5
5
  :experimental:
6
6
  :idprefix:
data/bin/asciidoctor-pdf CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- if File.file?(asciidoctor_pdf = (File.expand_path '../../lib/asciidoctor/pdf.rb', __FILE__))
4
+ if File.file? (asciidoctor_pdf = File.join (File.dirname __dir__), 'lib/asciidoctor/pdf.rb')
5
5
  require asciidoctor_pdf
6
6
  else
7
7
  require 'asciidoctor/pdf'
@@ -10,14 +10,14 @@ require 'asciidoctor/cli'
10
10
 
11
11
  options = Asciidoctor::Cli::Options.new backend: 'pdf', header_footer: true
12
12
 
13
- # FIXME provide an API in Asciidoctor for sub-components to print version information
13
+ # FIXME: provide an API in Asciidoctor for sub-components to print version information
14
14
  unless ARGV != ['-v'] && (ARGV & ['-V', '--version']).empty?
15
15
  $stdout.write %(Asciidoctor PDF #{Asciidoctor::PDF::VERSION} using )
16
16
  options.print_version
17
17
  exit 0
18
18
  end
19
19
 
20
- # FIXME This is a really bizarre API. Please make me simpler.
20
+ # FIXME: This is a really bizarre API. Please make me simpler.
21
21
  case (result = options.parse! ARGV)
22
22
  when Integer
23
23
  exit result
@@ -27,8 +27,6 @@ module Asciidoctor
27
27
 
28
28
  attr_accessor :font_scale
29
29
 
30
- attr_reader :root_font_size
31
-
32
30
  attr_reader :index
33
31
 
34
32
  attr_reader :theme
@@ -114,6 +112,7 @@ module Asciidoctor
114
112
  UriBreakCharsRx = %r((?:/|\?|&amp;|#)(?!$))
115
113
  UriBreakCharRepl = %(\\&#{ZeroWidthSpace})
116
114
  UriSchemeBoundaryRx = %r((?<=://))
115
+ UrlSniffRx = %r(^\p{Alpha}[\p{Alnum}+.-]*://)
117
116
  LineScanRx = /\n|.+/
118
117
  BlankLineRx = /\n{2,}/
119
118
  CjkLineBreakRx = /(?=[\u3000\u30a0-\u30ff\u3040-\u309f\p{Han}\uff00-\uffef])/
@@ -1886,7 +1885,7 @@ module Asciidoctor
1886
1885
  add_dest_for_block node if node.id
1887
1886
  audio_path = node.media_uri node.attr 'target'
1888
1887
  play_symbol = (node.document.attr? 'icons', 'font') ? %(<font name="fas">#{(icon_font_data 'fas').unicode 'play'}</font>) : RightPointer
1889
- ink_prose %(#{play_symbol}#{NoBreakSpace}<a href="#{audio_path}">#{audio_path}</a> <em>(audio)</em>), normalize: false, margin: 0, single_line: true
1888
+ ink_prose %(#{play_symbol}#{NoBreakSpace}<a href="#{audio_path}">#{audio_path}</a> <em>(audio)</em>), normalize: false, margin: 0
1890
1889
  ink_caption node, labeled: false, end: :bottom if node.title?
1891
1890
  theme_margin :block, :bottom, (next_enclosed_block node)
1892
1891
  end
@@ -1914,7 +1913,7 @@ module Asciidoctor
1914
1913
  if poster.nil_or_empty?
1915
1914
  add_dest_for_block node if node.id
1916
1915
  play_symbol = (node.document.attr? 'icons', 'font') ? %(<font name="fas">#{(icon_font_data 'fas').unicode 'play'}</font>) : RightPointer
1917
- ink_prose %(#{play_symbol}#{NoBreakSpace}<a href="#{video_path}">#{video_path}</a> <em>(#{type})</em>), normalize: false, margin: 0, single_line: true
1916
+ ink_prose %(#{play_symbol}#{NoBreakSpace}<a href="#{video_path}">#{video_path}</a> <em>(#{type})</em>), normalize: false, margin: 0
1918
1917
  ink_caption node, labeled: false, end: :bottom if node.title?
1919
1918
  theme_margin :block, :bottom, (next_enclosed_block node)
1920
1919
  else
@@ -1995,6 +1994,7 @@ module Asciidoctor
1995
1994
  num_cols = node.columns.size
1996
1995
  table_header_size = false
1997
1996
  theme = @theme
1997
+ prev_font_scale, @font_scale = @font_scale, 1 if node.document.nested?
1998
1998
 
1999
1999
  tbl_bg_color = resolve_theme_color :table_background_color
2000
2000
  # QUESTION: should we fallback to page background color? (which is never transparent)
@@ -2053,7 +2053,8 @@ module Asciidoctor
2053
2053
  content: cell_text,
2054
2054
  colspan: cell.colspan || 1,
2055
2055
  align: (cell.attr 'halign').to_sym,
2056
- valign: (val = cell.attr 'valign') == 'middle' ? :center : val.to_sym
2056
+ valign: (val = cell.attr 'valign') == 'middle' ? :center : val.to_sym,
2057
+ source_location: cell.source_location
2057
2058
  end)
2058
2059
  end
2059
2060
  end unless head_rows.empty?
@@ -2072,7 +2073,8 @@ module Asciidoctor
2072
2073
  colspan: cell.colspan || 1,
2073
2074
  rowspan: cell.rowspan || 1,
2074
2075
  align: (cell.attr 'halign').to_sym,
2075
- valign: (val = cell.attr 'valign') == 'middle' ? :center : val.to_sym
2076
+ valign: (val = cell.attr 'valign') == 'middle' ? :center : val.to_sym,
2077
+ source_location: cell.source_location
2076
2078
  cell_line_metrics = body_cell_line_metrics
2077
2079
  case cell.style
2078
2080
  when :emphasis
@@ -2102,10 +2104,15 @@ module Asciidoctor
2102
2104
  when :monospaced
2103
2105
  cell_data.delete :font_style
2104
2106
  cell_line_height = @base_line_height
2107
+ current_font_size = @font_size
2105
2108
  theme_font :codespan do
2106
2109
  mono_cell_font_info = font_info
2107
2110
  cell_data[:font] = mono_cell_font_info[:family]
2108
- cell_data[:size] = mono_cell_font_info[:size]
2111
+ if ::String === @font_size || @font_size < 1
2112
+ @font_size = current_font_size
2113
+ font_size mono_cell_font_info[:size]
2114
+ end
2115
+ cell_data[:size] = @font_size
2109
2116
  cell_data[:text_color] = @font_color
2110
2117
  cell_line_metrics = calc_line_metrics cell_line_height
2111
2118
  end
@@ -2132,8 +2139,8 @@ module Asciidoctor
2132
2139
  end
2133
2140
  # NOTE: line metrics get applied when AsciiDoc content is converted
2134
2141
  cell_line_metrics = nil
2135
- asciidoc_cell = ::Prawn::Table::Cell::AsciiDoc.new self, (cell_data.merge content: cell.inner_document, padding: body_cell_padding)
2136
- cell_data = { content: asciidoc_cell }
2142
+ asciidoc_cell = ::Prawn::Table::Cell::AsciiDoc.new self, (cell_data.merge content: cell.inner_document, padding: body_cell_padding, root_font_size: @root_font_size)
2143
+ cell_data = { content: asciidoc_cell, source_location: cell.source_location }
2137
2144
  end
2138
2145
  if cell_line_metrics
2139
2146
  cell_padding = body_cell_padding.dup
@@ -2336,6 +2343,8 @@ module Asciidoctor
2336
2343
  theme_margin :block, :bottom, (next_enclosed_block node)
2337
2344
  rescue ::Prawn::Errors::CannotFit
2338
2345
  log :error, (message_with_context 'cannot fit contents of table cell into specified column width', source_location: node.source_location)
2346
+ ensure
2347
+ @font_scale = prev_font_scale if prev_font_scale
2339
2348
  end
2340
2349
 
2341
2350
  def convert_thematic_break node
@@ -2685,13 +2694,7 @@ module Asciidoctor
2685
2694
  end
2686
2695
 
2687
2696
  if (roles = node.role)
2688
- theme = load_theme node.document
2689
- roles.split.each do |role|
2690
- if (text_transform = theme[%(role_#{role}_text_transform)])
2691
- inner_text = transform_text inner_text, text_transform
2692
- end
2693
- inner_text = inner_text.gsub DoubleSpaceRx, ' ' + ZeroWidthSpace if role == 'pre-wrap' && (inner_text.include? DoubleSpace)
2694
- end
2697
+ inner_text = inner_text.gsub DoubleSpaceRx, ' ' + ZeroWidthSpace if (node.has_role? 'pre-wrap') && (inner_text.include? DoubleSpace)
2695
2698
  quoted_text = is_tag ? %(#{open.chop} class="#{roles}">#{inner_text}#{close}) : %(<span class="#{roles}">#{open}#{inner_text}#{close}</span>)
2696
2699
  else
2697
2700
  quoted_text = %(#{open}#{inner_text}#{close})
@@ -3106,7 +3109,8 @@ module Asciidoctor
3106
3109
  end
3107
3110
  unless scratch? || !(bg_color = @theme[%(#{category_caption}_background_color)] || @theme.caption_background_color)
3108
3111
  caption_height = height_of_typeset_text string
3109
- fill_at = [bounds.left, cursor + (margin[:top] || 0)]
3112
+ fill_at = [bounds.left, cursor]
3113
+ fill_at[1] -= (margin[:top] || 0) unless at_page_top?
3110
3114
  float { bounding_box(fill_at, width: container_width, height: caption_height) { fill_bounds bg_color } }
3111
3115
  end
3112
3116
  indent(*indent_by) do
@@ -3241,7 +3245,8 @@ module Asciidoctor
3241
3245
  end
3242
3246
  end
3243
3247
 
3244
- # NOTE: inline_format is true by default
3248
+ # NOTE: inline_format option is true by default
3249
+ # NOTE: single_line option is not compatible with this method
3245
3250
  def ink_prose string, opts = {}
3246
3251
  top_margin = (margin = (opts.delete :margin)) || (opts.delete :margin_top) || 0
3247
3252
  bot_margin = margin || (opts.delete :margin_bottom) || @theme.prose_margin_bottom
@@ -4255,10 +4260,10 @@ module Asciidoctor
4255
4260
  # NOTE: this will catch a classloader resource path on JRuby (e.g., uri:classloader:/path/to/image)
4256
4261
  elsif ::File.absolute_path? image_path
4257
4262
  ::File.absolute_path image_path
4258
- elsif !(is_uri = node.is_uri? image_path) && imagesdir && (::File.absolute_path? imagesdir)
4263
+ elsif !(is_url = url? image_path) && imagesdir && (::File.absolute_path? imagesdir)
4259
4264
  ::File.absolute_path image_path, imagesdir
4260
4265
  # handle case when image is a URI
4261
- elsif is_uri || (imagesdir && (node.is_uri? imagesdir) && (image_path = node.normalize_web_path image_path, imagesdir, false))
4266
+ elsif is_url || (imagesdir && (url? imagesdir) && (image_path = node.normalize_web_path image_path, imagesdir, false))
4262
4267
  if !allow_uri_read
4263
4268
  log :warn, %(cannot embed remote image: #{image_path} (allow-uri-read attribute not enabled))
4264
4269
  return
@@ -4496,6 +4501,7 @@ module Asciidoctor
4496
4501
  end
4497
4502
 
4498
4503
  # TODO: document me, esp the first line formatting functionality
4504
+ # NOTE: single_line option should only be used if height option is specified
4499
4505
  def typeset_text string, line_metrics, opts = {}
4500
4506
  opts = { leading: line_metrics.leading, final_gap: line_metrics.final_gap }.merge opts
4501
4507
  string = string.gsub CjkLineBreakRx, ZeroWidthSpace if @cjk_line_breaks
@@ -4950,7 +4956,7 @@ module Asciidoctor
4950
4956
  alt_text_vars[:'/link'] = ''
4951
4957
  end
4952
4958
  theme_font :image_alt do
4953
- ink_prose alt_text_template % alt_text_vars, align: opts[:align], margin: 0, normalize: false, single_line: true
4959
+ ink_prose alt_text_template % alt_text_vars, align: opts[:align], margin: 0, normalize: false
4954
4960
  end
4955
4961
  ink_caption node, category: :image, end: :bottom if node.title?
4956
4962
  theme_margin :block, :bottom, (next_enclosed_block node) unless opts[:pinned]
@@ -5045,6 +5051,10 @@ module Asciidoctor
5045
5051
  false
5046
5052
  end
5047
5053
 
5054
+ def url? str
5055
+ (str.include? ':/') && (UrlSniffRx.match? str)
5056
+ end
5057
+
5048
5058
  # Calculate the width that is needed to print all the
5049
5059
  # fragments without wrapping any lines.
5050
5060
  #
@@ -528,29 +528,6 @@ module Asciidoctor
528
528
  end
529
529
  end
530
530
 
531
- # Apply the text transform to the specified text.
532
- #
533
- # Supported transform values are "uppercase", "lowercase", or "none" (passed
534
- # as either a String or a Symbol). When the uppercase transform is applied to
535
- # the text, it correctly uppercases visible text while leaving markup and
536
- # named character entities unchanged. The none transform returns the text
537
- # unmodified.
538
- #
539
- def transform_text text, transform
540
- case transform
541
- when :uppercase, 'uppercase'
542
- uppercase_pcdata text
543
- when :lowercase, 'lowercase'
544
- lowercase_pcdata text
545
- when :capitalize, 'capitalize'
546
- capitalize_words_pcdata text
547
- when :smallcaps, 'smallcaps'
548
- smallcaps_pcdata text
549
- else
550
- text
551
- end
552
- end
553
-
554
531
  def hyphenate_text text, hyphenator
555
532
  hyphenate_words_pcdata text, hyphenator
556
533
  end
@@ -7,6 +7,7 @@ module Prawn
7
7
  include ::Asciidoctor::Logging
8
8
 
9
9
  attr_accessor :align
10
+ attr_accessor :root_font_size
10
11
  attr_accessor :valign
11
12
 
12
13
  def initialize pdf, opts = {}
@@ -91,7 +92,9 @@ module Prawn
91
92
  # TODO: apply horizontal alignment; currently it is necessary to specify alignment on content blocks
92
93
  apply_font_properties { pdf.traverse content }
93
94
  if (extra_pages = pdf.page_number - start_page) > 0
94
- logger.error %(the table cell on page #{start_page} has been truncated; Asciidoctor PDF does not support table cell content that exceeds the height of a single page) unless extra_pages == 1 && pdf.page.empty?
95
+ unless extra_pages == 1 && pdf.page.empty?
96
+ logger.error message_with_context %(the table cell on page #{start_page} has been truncated; Asciidoctor PDF does not support table cell content that exceeds the height of a single page), source_location: @source_location
97
+ end
95
98
  extra_pages.times { pdf.delete_current_page }
96
99
  end
97
100
  nil
@@ -107,7 +110,7 @@ module Prawn
107
110
  prev_font_color, pdf.font_color = pdf.font_color, font_color if font_color
108
111
  font_family ||= font_info[:family]
109
112
  if font_size
110
- prev_font_scale, pdf.font_scale = pdf.font_scale, (font_size.to_f / @pdf.root_font_size)
113
+ prev_font_scale, pdf.font_scale = pdf.font_scale, (font_size.to_f / @root_font_size)
111
114
  else
112
115
  font_size = font_info[:size]
113
116
  end
@@ -16,7 +16,9 @@ class Prawn::Table::Cell::Text
16
16
  height: spanned_content_height + FPTolerance,
17
17
  at: [0, @pdf.cursor]).render
18
18
  end
19
- logger.error %(the table cell on page #{@pdf.page_number} has been truncated; Asciidoctor PDF does not support table cell content that exceeds the height of a single page) unless remaining_text.empty? || @pdf.scratch?
19
+ unless remaining_text.empty? || @pdf.scratch?
20
+ logger.error message_with_context %(the table cell on page #{@pdf.page_number} has been truncated; Asciidoctor PDF does not support table cell content that exceeds the height of a single page), source_location: @source_location
21
+ end
20
22
  end
21
23
  end
22
24
 
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Prawn::Table::Cell.prepend (Module.new do
4
+ attr_writer :source_location
5
+
4
6
  def border_color= color
5
7
  color = [color, color] if Asciidoctor::PDF::ThemeLoader::CMYKColorValue === color
6
8
  super
@@ -4,6 +4,8 @@ module Asciidoctor
4
4
  module PDF
5
5
  module FormattedText
6
6
  class Transform
7
+ include TextTransformer
8
+
7
9
  LF = ?\n
8
10
  ZeroWidthSpace = ?\u200b
9
11
  CharEntityTable = { amp: '&', apos: ?', gt: '>', lt: '<', nbsp: ?\u00a0, quot: '"' }
@@ -21,8 +23,8 @@ module Asciidoctor
21
23
  'font_size' => :size,
22
24
  'text_decoration_color' => :text_decoration_color,
23
25
  'text_decoration_width' => :text_decoration_width,
26
+ 'text_transform' => :text_transform,
24
27
  }
25
- #DummyText = ?\u0000
26
28
 
27
29
  def initialize options = {}
28
30
  @merge_adjacent_text_nodes = options[:merge_adjacent_text_nodes]
@@ -172,6 +174,11 @@ module Asciidoctor
172
174
  previous_fragment_is_text && ((previous_fragment_text = fragments[-1][:text]).end_with? ' ')
173
175
  fragments[-1][:text] = previous_fragment_text.chop
174
176
  end
177
+ if (text_transform = fragment.delete :text_transform)
178
+ text = (text_chunks = extract_text pcdata).join
179
+ text_io = StringIO.new transform_text text, text_transform
180
+ restore_text pcdata, text_chunks.each_with_object([]) {|chunk, accum| accum << (text_io.read chunk.length) }
181
+ end
175
182
  # NOTE: decorate child fragments with inherited properties from this element
176
183
  apply pcdata, fragments, fragment
177
184
  previous_fragment_is_text = false
@@ -251,6 +258,8 @@ module Asciidoctor
251
258
  fragments
252
259
  end
253
260
 
261
+ private
262
+
254
263
  def build_fragment fragment, tag_name, attrs
255
264
  styles = (fragment[:styles] ||= ::Set.new)
256
265
  case tag_name
@@ -324,7 +333,6 @@ module Asciidoctor
324
333
  # NOTE: spaces in style value are superfluous for our purpose; split drops record after trailing ;
325
334
  attrs[:style].tr(' ', '').split(';').each do |style|
326
335
  pname, pvalue = style.split ':', 2
327
- # TODO: text-transform
328
336
  case pname
329
337
  when 'color' # color needed to support syntax highlighters
330
338
  fragment[:color] = pvalue.length == 7 ? (pvalue.slice 1, 6) : (pvalue.slice 1, 3).each_char.map {|c| c * 2 }.join if (pvalue.start_with? '#') && (HexColorRx.match? pvalue)
@@ -409,6 +417,29 @@ module Asciidoctor
409
417
  end
410
418
  end
411
419
  end
420
+
421
+ def extract_text pcdata
422
+ pcdata.reduce [] do |accum, it|
423
+ case it[:type]
424
+ when :text
425
+ accum << it[:value]
426
+ when :element
427
+ accum += (extract_text it[:pcdata]) if it.key? :pcdata
428
+ end
429
+ accum
430
+ end
431
+ end
432
+
433
+ def restore_text pcdata, text_chunks
434
+ pcdata.each do |it|
435
+ case it[:type]
436
+ when :text
437
+ it[:value] = text_chunks.shift
438
+ when :element
439
+ restore_text it[:pcdata], text_chunks if it.key? :pcdata
440
+ end
441
+ end
442
+ end
412
443
  end
413
444
  end
414
445
  end
@@ -3,7 +3,7 @@
3
3
  module Asciidoctor
4
4
  module PDF
5
5
  class IndexCatalog
6
- include ::Asciidoctor::PDF::TextTransformer
6
+ include TextTransformer
7
7
 
8
8
  LeadingAlphaRx = /^\p{Alpha}/
9
9
 
@@ -64,6 +64,29 @@ module Asciidoctor
64
64
  string.tr LowerAlphaChars, SmallCapsChars
65
65
  end
66
66
  end
67
+
68
+ # Apply the text transform to the specified text.
69
+ #
70
+ # Supported transform values are "uppercase", "lowercase", or "none" (passed
71
+ # as either a String or a Symbol). When the uppercase transform is applied to
72
+ # the text, it correctly uppercases visible text while leaving markup and
73
+ # named character entities unchanged. The none transform returns the text
74
+ # unmodified.
75
+ #
76
+ def transform_text text, transform
77
+ case transform
78
+ when :uppercase, 'uppercase'
79
+ uppercase_pcdata text
80
+ when :lowercase, 'lowercase'
81
+ lowercase_pcdata text
82
+ when :capitalize, 'capitalize'
83
+ capitalize_words_pcdata text
84
+ when :smallcaps, 'smallcaps'
85
+ smallcaps_pcdata text
86
+ else
87
+ text
88
+ end
89
+ end
67
90
  end
68
91
  end
69
92
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module PDF
5
- VERSION = '2.1.3'
5
+ VERSION = '2.1.6'
6
6
  end
7
7
  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: 2.1.3
4
+ version: 2.1.6
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-23 00:00:00.000000000 Z
12
+ date: 2022-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: asciidoctor