asciidoctor 2.0.18 → 2.0.23

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.
@@ -445,7 +445,14 @@ module Substitutors
445
445
  # indexterm:[Tigers,Big cats]
446
446
  if (attrlist = normalize_text $2, true, true).include? '='
447
447
  if (primary = (attrs = (AttributeList.new attrlist, self).parse)[1])
448
- attrs['terms'] = [primary]
448
+ terms = [primary]
449
+ if (secondary = attrs[2])
450
+ terms << secondary
451
+ if (tertiary = attrs[3])
452
+ terms << tertiary
453
+ end
454
+ end
455
+ attrs['terms'] = terms
449
456
  if (see_also = attrs['see-also'])
450
457
  attrs['see-also'] = (see_also.include? ',') ? (see_also.split ',').map {|it| it.lstrip } : [see_also]
451
458
  end
@@ -524,105 +531,100 @@ module Substitutors
524
531
  end
525
532
 
526
533
  if found_colon && (text.include? '://')
527
- # inline urls, target[text] (optionally prefixed with link: and optionally surrounded by <>)
534
+ # inline urls, target[text] (optionally prefixed with link: or enclosed in <>)
528
535
  text = text.gsub InlineLinkRx do
529
- if (target = $2).start_with? RS
530
- # honor the escape
531
- next %(#{$1}#{target.slice 1, target.length}#{$4})
532
- end
533
-
534
- prefix, suffix = $1, ''
535
- # NOTE if $4 is set, we're looking at a formal macro (e.g., https://example.org[])
536
- if $4
537
- prefix = '' if prefix == 'link:'
538
- link_text = nil if (link_text = $4).empty?
536
+ if $2 && !$5
537
+ # honor the escapes
538
+ next $&.slice 1, $&.length if $1.start_with? RS
539
+ next %(#{$1}#{$&.slice $1.length + 1, $&.length}) if $3.start_with? RS
540
+ next $& unless $6
541
+ doc.register :links, (target = $3 + $6)
542
+ link_text = (doc_attrs.key? 'hide-uri-scheme') ? (target.sub UriSniffRx, '') : target
543
+ (Inline.new self, :anchor, link_text, type: :link, target: target, attributes: { 'role' => 'bare' }).convert
539
544
  else
540
- # invalid macro syntax (link: prefix w/o trailing square brackets or enclosed in double quotes)
541
- # FIXME we probably shouldn't even get here when the link: prefix is present; the regex is doing too much
542
- case prefix
543
- when 'link:', ?", ?'
544
- next $&
545
- end
546
- case $3
547
- when ')', '?', '!'
548
- target = target.chop
549
- if (suffix = $3) == ')' && (target.end_with? '.', '?', '!')
550
- suffix = target[-1] + suffix
551
- target = target.chop
552
- end
553
- # NOTE handle case when modified target is a URI scheme (e.g., http://)
554
- next $& if target.end_with? '://'
555
- when ';'
556
- if (prefix.start_with? '&lt;') && (target.end_with? '&gt;')
557
- # move surrounding <> out of URL
558
- prefix = prefix.slice 4, prefix.length
559
- target = target.slice 0, target.length - 4
560
- elsif (target = target.chop).end_with? ')'
561
- # move trailing ); out of URL
562
- target = target.chop
563
- suffix = ');'
564
- else
565
- # move trailing ; out of URL
566
- suffix = ';'
545
+ # honor the escape
546
+ next %(#{$1}#{$&.slice $1.length + 1, $&.length}) if $3.start_with? RS
547
+ prefix, target, suffix = $1, $3 + ($4 || $7), ''
548
+ # NOTE if $5 is set (the attrlist), we're looking at a formal macro (e.g., https://example.org[])
549
+ if $5
550
+ prefix = '' if prefix == 'link:'
551
+ link_text = nil if (link_text = $5).empty?
552
+ else
553
+ case prefix
554
+ # invalid macro syntax (link: prefix w/o trailing square brackets or URL enclosed in quotes)
555
+ # FIXME we probably shouldn't even get here when the link: prefix is present; the regex is doing too much
556
+ when 'link:', ?", ?'
557
+ next $&
567
558
  end
568
- # NOTE handle case when modified target is a URI scheme (e.g., http://)
569
- next $& if target.end_with? '://'
570
- when ':'
571
- if (target = target.chop).end_with? ')'
572
- # move trailing ): out of URL
573
- target = target.chop
574
- suffix = '):'
575
- else
576
- # move trailing : out of URL
577
- suffix = ':'
559
+ case $8
560
+ when ';'
561
+ if (target = target.chop).end_with? ')'
562
+ # move trailing ); out of URL
563
+ target = target.chop
564
+ suffix = ');'
565
+ else
566
+ # move trailing ; out of URL
567
+ suffix = ';'
568
+ end
569
+ # NOTE handle case when modified target is a bare URI scheme (e.g., http://)
570
+ next $& if target == $3
571
+ when ':'
572
+ if (target = target.chop).end_with? ')'
573
+ # move trailing ): out of URL
574
+ target = target.chop
575
+ suffix = '):'
576
+ else
577
+ # move trailing : out of URL
578
+ suffix = ':'
579
+ end
580
+ # NOTE handle case when modified target is a bare URI scheme (e.g., http://)
581
+ next $& if target == $3
578
582
  end
579
- # NOTE handle case when modified target is a URI scheme (e.g., http://)
580
- next $& if target.end_with? '://'
581
583
  end
582
- end
583
584
 
584
- attrs, link_opts = nil, { type: :link }
585
+ link_opts = { type: :link }
585
586
 
586
- if link_text
587
- new_link_text = link_text = link_text.gsub ESC_R_SB, R_SB if link_text.include? R_SB
588
- if !doc.compat_mode && (link_text.include? '=')
589
- # NOTE if an equals sign (=) is present, extract attributes from link text
590
- link_text, attrs = extract_attributes_from_text link_text, ''
591
- new_link_text = link_text
592
- link_opts[:id] = attrs['id']
593
- end
587
+ if link_text
588
+ new_link_text = link_text = link_text.gsub ESC_R_SB, R_SB if link_text.include? R_SB
589
+ if !doc.compat_mode && (link_text.include? '=')
590
+ # NOTE if an equals sign (=) is present, extract attributes from link text
591
+ link_text, attrs = extract_attributes_from_text link_text, ''
592
+ new_link_text = link_text
593
+ link_opts[:id] = attrs['id']
594
+ end
594
595
 
595
- if link_text.end_with? '^'
596
- new_link_text = link_text = link_text.chop
597
- if attrs
598
- attrs['window'] ||= '_blank'
599
- else
600
- attrs = { 'window' => '_blank' }
596
+ if link_text.end_with? '^'
597
+ new_link_text = link_text = link_text.chop
598
+ if attrs
599
+ attrs['window'] ||= '_blank'
600
+ else
601
+ attrs = { 'window' => '_blank' }
602
+ end
601
603
  end
602
- end
603
604
 
604
- if new_link_text && new_link_text.empty?
605
- # NOTE it's not possible for the URI scheme to be bare in this case
605
+ if new_link_text && new_link_text.empty?
606
+ # NOTE the modified target will not be a bare URI scheme (e.g., http://) in this case
607
+ link_text = (doc_attrs.key? 'hide-uri-scheme') ? (target.sub UriSniffRx, '') : target
608
+ bare = true
609
+ end
610
+ else
611
+ # NOTE the modified target will not be a bare URI scheme (e.g., http://) in this case
606
612
  link_text = (doc_attrs.key? 'hide-uri-scheme') ? (target.sub UriSniffRx, '') : target
607
613
  bare = true
608
614
  end
609
- else
610
- # NOTE it's not possible for the URI scheme to be bare in this case
611
- link_text = (doc_attrs.key? 'hide-uri-scheme') ? (target.sub UriSniffRx, '') : target
612
- bare = true
613
- end
614
615
 
615
- if bare
616
- if attrs
617
- attrs['role'] = (attrs.key? 'role') ? %(bare #{attrs['role']}) : 'bare'
618
- else
619
- attrs = { 'role' => 'bare' }
616
+ if bare
617
+ if attrs
618
+ attrs['role'] = (attrs.key? 'role') ? %(bare #{attrs['role']}) : 'bare'
619
+ else
620
+ attrs = { 'role' => 'bare' }
621
+ end
620
622
  end
621
- end
622
623
 
623
- doc.register :links, (link_opts[:target] = target)
624
- link_opts[:attributes] = attrs if attrs
625
- %(#{prefix}#{(Inline.new self, :anchor, link_text, link_opts).convert}#{suffix})
624
+ doc.register :links, (link_opts[:target] = target)
625
+ link_opts[:attributes] = attrs if attrs
626
+ %(#{prefix}#{(Inline.new self, :anchor, link_text, link_opts).convert}#{suffix})
627
+ end
626
628
  end
627
629
  end
628
630
 
@@ -755,7 +757,7 @@ module Substitutors
755
757
 
756
758
  if doc.compat_mode
757
759
  fragment = refid
758
- elsif (hash_idx = refid.index '#')
760
+ elsif (hash_idx = refid.index '#') && refid[hash_idx - 1] != '&'
759
761
  if hash_idx > 0
760
762
  if (fragment_len = refid.length - 1 - hash_idx) > 0
761
763
  path, fragment = (refid.slice 0, hash_idx), (refid.slice hash_idx + 1, fragment_len)
@@ -1027,11 +1029,17 @@ module Substitutors
1027
1029
  next %(#{$1}[#{attrlist}]#{RS * (escape_count - 1)}#{boundary}#{$5}#{boundary})
1028
1030
  elsif $1 == RS
1029
1031
  preceding = %([#{attrlist}])
1030
- else
1031
- if boundary == '++' && (attrlist.end_with? 'x-')
1032
+ elsif boundary == '++'
1033
+ if attrlist == 'x-'
1034
+ old_behavior = true
1035
+ attributes = {}
1036
+ elsif attrlist.end_with? ' x-'
1032
1037
  old_behavior = true
1033
- attrlist = attrlist.slice 0, attrlist.length - 2
1038
+ attributes = parse_quoted_text_attributes attrlist.slice 0, attrlist.length - 3
1039
+ else
1040
+ attributes = parse_quoted_text_attributes attrlist
1034
1041
  end
1042
+ else
1035
1043
  attributes = parse_quoted_text_attributes attrlist
1036
1044
  end
1037
1045
  elsif (escape_count = $3.length) > 0
@@ -1066,41 +1074,43 @@ module Substitutors
1066
1074
  pass_inline_char1, pass_inline_char2, pass_inline_rx = InlinePassRx[compat_mode]
1067
1075
  text = text.gsub pass_inline_rx do
1068
1076
  preceding = $1
1069
- attrlist = $2
1070
- escape_mark = RS if (quoted_text = $3).start_with? RS
1071
- format_mark = $4
1072
- content = $5
1077
+ attrlist = $4 || $3
1078
+ escaped = true if $5
1079
+ quoted_text = $6
1080
+ format_mark = $7
1081
+ content = $8
1073
1082
 
1074
1083
  if compat_mode
1075
1084
  old_behavior = true
1076
- elsif (old_behavior = attrlist && (attrlist.end_with? 'x-'))
1077
- attrlist = attrlist.slice 0, attrlist.length - 2
1085
+ elsif attrlist && (attrlist == 'x-' || (attrlist.end_with? ' x-'))
1086
+ old_behavior = old_behavior_forced = true
1078
1087
  end
1079
1088
 
1080
1089
  if attrlist
1081
- if format_mark == '`' && !old_behavior
1082
- next extract_inner_passthrough content, %(#{preceding}[#{attrlist}]#{escape_mark})
1083
- elsif escape_mark
1090
+ if escaped
1084
1091
  # honor the escape of the formatting mark
1085
1092
  next %(#{preceding}[#{attrlist}]#{quoted_text.slice 1, quoted_text.length})
1086
1093
  elsif preceding == RS
1087
1094
  # honor the escape of the attributes
1095
+ next %(#{preceding}[#{attrlist}]#{quoted_text}) if old_behavior_forced && format_mark == '`'
1088
1096
  preceding = %([#{attrlist}])
1097
+ elsif old_behavior_forced
1098
+ attributes = attrlist == 'x-' ? {} : (parse_quoted_text_attributes attrlist.slice 0, attrlist.length - 3)
1089
1099
  else
1090
1100
  attributes = parse_quoted_text_attributes attrlist
1091
1101
  end
1092
- elsif format_mark == '`' && !old_behavior
1093
- next extract_inner_passthrough content, %(#{preceding}#{escape_mark})
1094
- elsif escape_mark
1102
+ elsif escaped
1095
1103
  # honor the escape of the formatting mark
1096
1104
  next %(#{preceding}#{quoted_text.slice 1, quoted_text.length})
1105
+ elsif compat_mode && preceding == RS
1106
+ next quoted_text
1097
1107
  end
1098
1108
 
1099
1109
  if compat_mode
1100
1110
  passthrus[passthru_key = passthrus.size] = { text: content, subs: BASIC_SUBS, attributes: attributes, type: :monospaced }
1101
1111
  elsif attributes
1102
1112
  if old_behavior
1103
- subs = (format_mark == '`' ? BASIC_SUBS : NORMAL_SUBS)
1113
+ subs = format_mark == '`' ? BASIC_SUBS : NORMAL_SUBS
1104
1114
  passthrus[passthru_key = passthrus.size] = { text: content, subs: subs, attributes: attributes, type: :monospaced }
1105
1115
  else
1106
1116
  passthrus[passthru_key = passthrus.size] = { text: content, subs: BASIC_SUBS, attributes: attributes, type: :unquoted }
@@ -1399,20 +1409,6 @@ module Substitutors
1399
1409
  end.join LF)
1400
1410
  end
1401
1411
 
1402
- # Internal: Extract nested single-plus passthrough; otherwise return unprocessed
1403
- def extract_inner_passthrough text, pre
1404
- if (text.end_with? '+') && (text.start_with? '+', '\+') && SinglePlusInlinePassRx =~ text
1405
- if $1
1406
- %(#{pre}`+#{$2}+`)
1407
- else
1408
- @passthroughs[passthru_key = @passthroughs.size] = { text: $2, subs: BASIC_SUBS }
1409
- %(#{pre}`#{PASS_START}#{passthru_key}#{PASS_END}`)
1410
- end
1411
- else
1412
- %(#{pre}`#{text}`)
1413
- end
1414
- end
1415
-
1416
1412
  # Internal: Convert a quoted text region
1417
1413
  #
1418
1414
  # match - The MatchData for the quoted text region
@@ -300,7 +300,7 @@ class Table::Cell < AbstractBlock
300
300
  # QUESTION is is faster to check for :: before splitting?
301
301
  inner_document_lines = cell_text.split LF, -1
302
302
  if (unprocessed_line1 = inner_document_lines[0]).include? '::'
303
- preprocessed_lines = (PreprocessorReader.new @document, [unprocessed_line1]).readlines
303
+ preprocessed_lines = (PreprocessorReader.new @document, [unprocessed_line1], inner_document_cursor).readlines
304
304
  unless unprocessed_line1 == preprocessed_lines[0] && preprocessed_lines.size < 2
305
305
  inner_document_lines.shift
306
306
  inner_document_lines.unshift(*preprocessed_lines) unless preprocessed_lines.empty?
@@ -659,36 +659,43 @@ class Table::ParserContext
659
659
  end
660
660
  end
661
661
  else
662
- # QUESTION is this right for cells that span columns?
663
- unless (column = @table.columns[@current_row.size])
664
- logger.error message_with_context 'dropping cell because it exceeds specified number of columns', source_location: @reader.cursor_before_mark
665
- return nil
666
- end
662
+ column = @table.columns[@current_row.size]
667
663
  end
668
664
 
669
- cell = Table::Cell.new(column, cell_text, cellspec, cursor: @reader.cursor_before_mark)
665
+ cell = Table::Cell.new column, cell_text, cellspec, cursor: (cursor_before_mark = @reader.cursor_before_mark)
670
666
  @reader.mark
671
667
  unless !cell.rowspan || cell.rowspan == 1
672
668
  activate_rowspan(cell.rowspan, (cell.colspan || 1))
673
669
  end
674
670
  @column_visits += (cell.colspan || 1)
675
671
  @current_row << cell
676
- # don't close the row if we're on the first line and the column count has not been set explicitly
677
- # TODO perhaps the colcount/linenum logic should be in end_of_row? (or a should_end_row? method)
678
- close_row if end_of_row? && (@colcount != -1 || @linenum > 0 || (eol && i == repeat))
672
+ if (row_status = end_of_row?) > -1 && (@colcount != -1 || @linenum > 0 || (eol && i == repeat))
673
+ if row_status > 0
674
+ logger.error message_with_context 'dropping cell because it exceeds specified number of columns', source_location: cursor_before_mark
675
+ close_row true
676
+ else
677
+ close_row
678
+ end
679
+ end
679
680
  end
680
681
  @cell_open = false
681
682
  nil
682
683
  end
683
684
 
685
+ def close_table
686
+ return if @column_visits == 0
687
+ logger.error message_with_context 'dropping cells from incomplete row detected end of table', source_location: @reader.cursor_before_mark
688
+ nil
689
+ end
690
+
684
691
  private
685
692
 
686
693
  # Internal: Close the row by adding it to the Table and resetting the row
687
694
  # Array and counter variables.
688
695
  #
689
696
  # returns nothing
690
- def close_row
691
- @table.rows.body << @current_row
697
+ def close_row drop = false
698
+ @table.rows.body << @current_row unless drop
692
699
  # don't have to account for active rowspans here
693
700
  # since we know this is first row
694
701
  @colcount = @column_visits if @colcount == -1
@@ -709,8 +716,10 @@ class Table::ParserContext
709
716
  end
710
717
 
711
718
  # Internal: Check whether we've met the number of effective columns for the current row.
719
+ #
720
+ # returns -1 if not at end of row, 0 if exactly at end of row, and 1 if overruns end of row
712
721
  def end_of_row?
713
- @colcount == -1 || effective_column_visits == @colcount
722
+ @colcount == -1 ? 0 : effective_column_visits <=> @colcount
714
723
  end
715
724
 
716
725
  # Internal: Calculate the effective column visits, which consists of the number of
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Asciidoctor
3
- VERSION = '2.0.18'
3
+ VERSION = '2.0.23'
4
4
  end
data/lib/asciidoctor.rb CHANGED
@@ -6,7 +6,6 @@ if RUBY_ENGINE == 'opal'
6
6
  # this require is satisfied by the Asciidoctor.js build; it augments the Ruby environment for Asciidoctor.js
7
7
  require 'asciidoctor/js'
8
8
  else
9
- autoload :Base64, 'base64'
10
9
  require 'cgi/util'
11
10
  autoload :OpenURI, 'open-uri'
12
11
  autoload :Pathname, 'pathname'
@@ -209,13 +208,13 @@ module Asciidoctor
209
208
  BOM_BYTES_UTF_16BE = [0xfe, 0xff]
210
209
 
211
210
  # The mode to use when opening a file for reading
212
- FILE_READ_MODE = RUBY_ENGINE_OPAL ? 'r' : 'rb:utf-8:utf-8'
211
+ FILE_READ_MODE = RUBY_ENGINE_OPAL ? 'r' : 'rb:UTF-8:UTF-8'
213
212
 
214
213
  # The mode to use when opening a URI for reading
215
214
  URI_READ_MODE = FILE_READ_MODE
216
215
 
217
216
  # The mode to use when opening a file for writing
218
- FILE_WRITE_MODE = RUBY_ENGINE_OPAL ? 'w' : 'w:utf-8'
217
+ FILE_WRITE_MODE = RUBY_ENGINE_OPAL ? 'w' : 'wb:UTF-8'
219
218
 
220
219
  # The default document type
221
220
  # Can influence markup generated by the converters
data/man/asciidoctor.1 CHANGED
@@ -1,13 +1,13 @@
1
1
  '\" t
2
2
  .\" Title: asciidoctor
3
3
  .\" Author: Dan Allen, Sarah White
4
- .\" Generator: Asciidoctor 2.0.17
5
- .\" Date: 2022-01-05
4
+ .\" Generator: Asciidoctor 2.0.22
5
+ .\" Date: 2018-03-20
6
6
  .\" Manual: Asciidoctor Manual
7
- .\" Source: Asciidoctor 2.0.17
7
+ .\" Source: Asciidoctor 2.0.23
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "ASCIIDOCTOR" "1" "2022-01-05" "Asciidoctor 2.0.17" "Asciidoctor Manual"
10
+ .TH "ASCIIDOCTOR" "1" "2018-03-20" "Asciidoctor 2.0.23" "Asciidoctor Manual"
11
11
  .ie \n(.g .ds Aq \(aq
12
12
  .el .ds Aq '
13
13
  .ss \n[.ss] 0
@@ -67,10 +67,11 @@ If not set, the safe mode level defaults to \fIunsafe\fP when Asciidoctor is inv
67
67
  .RS 4
68
68
  Define, override, or unset a document attribute.
69
69
  Command\-line attributes take precedence over attributes defined in the source file unless either the name or value ends in \fI@\fP.
70
+ No substitutions are applied to the value.
70
71
  .sp
71
72
  \fIATTRIBUTE\fP is normally formatted as a key\-value pair, in the form \fINAME=VALUE\fP.
72
73
  Alternate forms are \fINAME\fP (where the \fIVALUE\fP defaults to an empty string), \fINAME!\fP (unsets the \fINAME\fP attribute), and \fINAME=VALUE@\fP (or \fINAME@=VALUE\fP) (where \fIVALUE\fP does not override the \fINAME\fP attribute if it\(cqs already defined in the source document).
73
- Values containing spaces should be enclosed in quotes.
74
+ A value containing spaces must be enclosed in quotes, in the form \fINAME="VALUE WITH SPACES"\fP.
74
75
  .sp
75
76
  This option may be specified more than once.
76
77
  .RE
@@ -263,4 +264,4 @@ Jason Porter wrote the first implementation of the CLI interface provided by thi
263
264
  .SH "COPYING"
264
265
  .sp
265
266
  Copyright (C) 2012\-present Dan Allen, Sarah White, Ryan Waldron, and the individual contributors to Asciidoctor.
266
- Use of this software is granted under the terms of the MIT License.
267
+ Use of this software is granted under the terms of the MIT License.
data/man/asciidoctor.adoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = asciidoctor(1)
2
2
  Dan Allen; Sarah White
3
3
  :doctype: manpage
4
- :release-version: 2.0.17
4
+ :release-version: 2.0.23
5
5
  :man manual: Asciidoctor Manual
6
6
  :man source: Asciidoctor {release-version}
7
7
  ifdef::backend-manpage[:!author:]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.18
4
+ version: 2.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
@@ -63,42 +63,42 @@ dependencies:
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 5.2.0
66
+ version: 6.1.0
67
67
  type: :development
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: 5.2.0
73
+ version: 6.1.0
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: minitest
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: 5.14.0
80
+ version: 5.22.0
81
81
  type: :development
82
82
  prerelease: false
83
83
  version_requirements: !ruby/object:Gem::Requirement
84
84
  requirements:
85
85
  - - "~>"
86
86
  - !ruby/object:Gem::Version
87
- version: 5.14.0
87
+ version: 5.22.0
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: nokogiri
90
90
  requirement: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
- version: 1.10.0
94
+ version: 1.13.0
95
95
  type: :development
96
96
  prerelease: false
97
97
  version_requirements: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: 1.10.0
101
+ version: 1.13.0
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rake
104
104
  requirement: !ruby/object:Gem::Requirement
@@ -188,6 +188,7 @@ files:
188
188
  - data/locale/attributes-sr.adoc
189
189
  - data/locale/attributes-sr_Latn.adoc
190
190
  - data/locale/attributes-sv.adoc
191
+ - data/locale/attributes-sw.adoc
191
192
  - data/locale/attributes-th.adoc
192
193
  - data/locale/attributes-tr.adoc
193
194
  - data/locale/attributes-uk.adoc
@@ -271,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
272
  - !ruby/object:Gem::Version
272
273
  version: '0'
273
274
  requirements: []
274
- rubygems_version: 3.3.7
275
+ rubygems_version: 3.5.9
275
276
  signing_key:
276
277
  specification_version: 4
277
278
  summary: An implementation of the AsciiDoc text processor and publishing toolchain