metanorma-standoc 1.4.4 → 1.5.0

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: 841be88451455a61d53e89d5c557c57f1769372d878c5200826136dae8d62cfd
4
- data.tar.gz: b922c30fbd44544dda7ee63a4090d672030f2af570861b500dcd3e8f205497d3
3
+ metadata.gz: 76c3b117ea592275339f9ee8103f17645d9675f45635abfbc8e5333fc512af1c
4
+ data.tar.gz: a345b19a2657f356225f2087e17a7dba7bd4720389cf44487892d3f1e1bc5345
5
5
  SHA512:
6
- metadata.gz: cd2d8b314061fb9c108b6e7568ee9dc65ce81180e955961d593bcaf17081b0e8e7c3e22c8d132ce57c0f5c698869347ff35fd7b56b62d0d1ee34b6c8877a462c
7
- data.tar.gz: 7e501083f23311f0b8a8b22eeaf8ec2990d39bc442fe76882b9172bb9bfafc44d273f1485ae0a9117006ba508beff735857194fdf0a49d8eb80deaf902b3a433
6
+ metadata.gz: 630d1159cc78920d3bab3e73a2577b54d00bb966b0faa15166ff1af832656ab985e55f8fa830d40a2fbec96a8cf8555880f89f0e73d749dc73540e6cd8303469
7
+ data.tar.gz: f3c46604bb69f1e34eb8b2af182e198e99a6f2cae3bce808a9547e096b1852b4868c00a8522370a52c92ad5f263ab2f7e5ee348196fffbe1084ef1c666900080
@@ -5,6 +5,6 @@
5
5
  inherit_from:
6
6
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.3
8
+ TargetRubyVersion: 2.6
9
9
  Rails:
10
10
  Enabled: true
@@ -111,9 +111,10 @@ module Asciidoctor
111
111
  @log = Asciidoctor::Standoc::Log.new
112
112
  init_bib_caches(node)
113
113
  init_iev_caches(node)
114
- lang = (node.attr("language") || "en")
115
- script = (node.attr("script") || "en")
116
- i18n_init(lang, script)
114
+ @lang = (node.attr("language") || "en")
115
+ @script = (node.attr("script") || "Latn")
116
+ @isodoc = isodoc(@lang, @script, node.attr("i18nyaml"))
117
+ @i18n = @isodoc.i18n
117
118
  end
118
119
 
119
120
  def default_fonts(node)
@@ -2,25 +2,25 @@ module Asciidoctor
2
2
  module Standoc
3
3
  module Cleanup
4
4
  def external_terms_boilerplate(sources)
5
- IsoDoc::Function::I18n::l10n(
6
- @external_terms_boilerplate.gsub(/%/, sources || "???"),
5
+ @i18n.l10n(
6
+ @i18n.external_terms_boilerplate.gsub(/%/, sources || "???"),
7
7
  @lang, @script)
8
8
  end
9
9
 
10
10
  def internal_external_terms_boilerplate(sources)
11
- IsoDoc::Function::I18n::l10n(
12
- @internal_external_terms_boilerplate.gsub(/%/, sources || "??"),
11
+ @i18n.l10n(
12
+ @i18n.internal_external_terms_boilerplate.gsub(/%/, sources || "??"),
13
13
  @lang, @script)
14
14
  end
15
15
 
16
16
  def term_defs_boilerplate(div, source, term, preface, isodoc)
17
- div.next = @term_def_boilerplate
17
+ a = @i18n.term_def_boilerplate and div.next = a
18
18
  source.each do |s|
19
19
  @anchors[s["bibitemid"]] or
20
20
  @log.add("Crossreferences", nil, "term source #{s['bibitemid']} not referenced")
21
21
  end
22
22
  if source.empty? && term.nil?
23
- div.next = @no_terms_boilerplate
23
+ div.next = @i18n.no_terms_boilerplate
24
24
  else
25
25
  div.next = term_defs_boilerplate_cont(source, term, isodoc)
26
26
  end
@@ -30,7 +30,7 @@ module Asciidoctor
30
30
  sources = isodoc.sentence_join(src.map do |s|
31
31
  %{<eref bibitemid="#{s['bibitemid']}"/>}
32
32
  end)
33
- if src.empty? then @internal_terms_boilerplate
33
+ if src.empty? then @i18n.internal_terms_boilerplate
34
34
  elsif term.nil? then external_terms_boilerplate(sources)
35
35
  else
36
36
  internal_external_terms_boilerplate(sources)
@@ -42,7 +42,7 @@ module Asciidoctor
42
42
  ["reference", "bibitem"].include? e.name
43
43
  end
44
44
  f.at("./title").next =
45
- "<p>#{(refs.empty? ? @norm_empty_pref : @norm_with_refs_pref)}</p>"
45
+ "<p>#{(refs.empty? ? @i18n.norm_empty_pref : @i18n.norm_with_refs_pref)}</p>"
46
46
  end
47
47
 
48
48
  TERM_CLAUSE = "//sections/terms | "\
@@ -54,13 +54,9 @@ module Asciidoctor
54
54
  x = xmldoc.dup
55
55
  x.root.add_namespace(nil, self.class::XML_NAMESPACE)
56
56
  xml = Nokogiri::XML(x.to_xml)
57
- conv = html_converter(EmptyAttr.new)
58
- @lang = xmldoc&.at("//bibdata/language")&.text
59
- @script = xmldoc&.at("//bibdata/script")&.text
60
- conv.i18n_init(@lang, @script)
61
- conv.metadata_init(@lang, @script, conv.labels)
62
- conv.info(xml, nil)
63
- conv
57
+ @isodoc ||= isodoc(@lang, @script)
58
+ @isodoc.info(xml, nil)
59
+ @isodoc
64
60
  end
65
61
 
66
62
  def boilerplate_cleanup(xmldoc)
@@ -83,15 +79,6 @@ module Asciidoctor
83
79
  preface.previous = b
84
80
  end
85
81
 
86
- class EmptyAttr
87
- def attr(_x)
88
- nil
89
- end
90
- def attributes
91
- {}
92
- end
93
- end
94
-
95
82
  def boilerplate_file(xmldoc)
96
83
  File.join(@libdir, "boilerplate.xml")
97
84
  end
@@ -39,6 +39,7 @@ module Asciidoctor
39
39
  dupabstract.traverse { |n| n.remove_attribute("id") }
40
40
  dupabstract.remove_attribute("language")
41
41
  dupabstract.remove_attribute("script")
42
+ dupabstract&.at("./title")&.remove
42
43
  bibabstract.next = dupabstract
43
44
  end
44
45
  end
@@ -105,6 +106,7 @@ module Asciidoctor
105
106
  def sections_cleanup(x)
106
107
  sections_order_cleanup(x)
107
108
  sections_level_cleanup(x)
109
+ sections_names_cleanup(x)
108
110
  end
109
111
 
110
112
  def obligations_cleanup(x)
@@ -118,15 +120,15 @@ module Asciidoctor
118
120
  (s = x.at("//introduction")) && s["obligation"] = "informative"
119
121
  (s = x.at("//acknowledgements")) && s["obligation"] = "informative"
120
122
  x.xpath("//references").each { |r| r["obligation"] = "informative" }
121
- x.xpath("//preface//clause").each { |r| r["obligation"] = "informative" }
123
+ x.xpath("//preface//clause").each do |r|
124
+ r["obligation"] = "informative"
125
+ end
122
126
  end
123
127
 
124
128
  def obligations_cleanup_norm(x)
125
- (s = x.at("//clause[title = 'Scope']")) && s["obligation"] = "normative"
126
- (s = x.at("//clause[title = 'Symbols and Abbreviated Terms']")) &&
127
- s["obligation"] = "normative"
129
+ (s = x.at("//clause[@type = 'scope']")) && s["obligation"] = "normative"
128
130
  x.xpath("//terms").each { |r| r["obligation"] = "normative" }
129
- x.xpath("//symbols-abbrevs").each { |r| r["obligation"] = "normative" }
131
+ x.xpath("//definitions").each { |r| r["obligation"] = "normative" }
130
132
  end
131
133
 
132
134
  def obligations_cleanup_inherit(x)
@@ -149,6 +151,71 @@ module Asciidoctor
149
151
  ins.previous = x.remove
150
152
  end
151
153
  end
154
+
155
+ def get_or_make_title(node)
156
+ unless node.at("./title")
157
+ if node.children.empty?
158
+ node << "<title/>"
159
+ else
160
+ node.children.first.previous = "<title/>"
161
+ end
162
+ end
163
+ node.at("./title")
164
+ end
165
+
166
+ def replace_title(doc, xpath, text, first = false)
167
+ return unless text
168
+ doc.xpath(xpath).each_with_index do |node, i|
169
+ next if first && !i.zero?
170
+ title = get_or_make_title(node)
171
+ fn = title.xpath("./fn")
172
+ fn.each { |n| n.remove }
173
+ title.content = text
174
+ fn.each { |n| title << n }
175
+ end
176
+ end
177
+
178
+ def sections_names_cleanup(x)
179
+ replace_title(x, "//clause[@type = 'scope']", @i18n&.scope)
180
+ replace_title(x, "//preface//abstract", @i18n&.abstract)
181
+ replace_title(x, "//foreword", @i18n&.foreword)
182
+ replace_title(x, "//introduction", @i18n&.introduction)
183
+ replace_title(x, "//acknowledgements", @i18n&.acknowledgements)
184
+ section_names_refs_cleanup(x)
185
+ section_names_terms_cleanup(x)
186
+ end
187
+
188
+ def section_names_refs_cleanup(x)
189
+ replace_title(x, "//references[@normative = 'true']",
190
+ @i18n&.normref, true)
191
+ replace_title(x, "//references[@normative = 'false']",
192
+ @i18n&.bibliography, true)
193
+ end
194
+
195
+ NO_SYMABBR = "[.//definitions[not(@type)]]"
196
+ SYMABBR = "[.//definitions[@type = 'symbols']"\
197
+ "[@type = 'abbreviated_terms']]".freeze
198
+ SYMnoABBR = "[.//definitions[@type = 'symbols']"\
199
+ "[not(@type = 'abbreviated_terms')]]".freeze
200
+ ABBRnoSYM = "[.//definitions[not(@type = 'symbols')]"\
201
+ "[@type = 'abbreviated_terms']]".freeze
202
+
203
+ def section_names_terms_cleanup(x)
204
+ replace_title(x, "//definitions[@type = 'symbols']", @i18n&.symbols)
205
+ replace_title(x, "//definitions[@type = 'abbreviated_terms']", @i18n&.abbrev)
206
+ replace_title(x, "//definitions[not(@type)]", @i18n&.symbolsabbrev)
207
+ replace_title(x, "//terms#{SYMnoABBR} | //clause[.//terms]#{SYMnoABBR}",
208
+ @i18n&.termsdefsymbols, true)
209
+ replace_title(x, "//terms#{ABBRnoSYM} | //clause[.//terms]#{ABBRnoSYM}",
210
+ @i18n&.termsdefabbrev, true)
211
+ replace_title(x, "//terms#{SYMABBR} | //clause[.//terms]#{SYMABBR}",
212
+ @i18n&.termsdefsymbolsabbrev, true)
213
+ replace_title(x, "//terms#{NO_SYMABBR} | //clause[.//terms]#{NO_SYMABBR}",
214
+ @i18n&.termsdefsymbolsabbrev, true)
215
+ replace_title(
216
+ x, "//terms[not(.//definitions)] | //clause[.//terms][not(.//definitions)]",
217
+ @i18n&.termsdef, true)
218
+ end
152
219
  end
153
220
  end
154
221
  end
@@ -76,6 +76,15 @@ module Asciidoctor
76
76
  end
77
77
  end
78
78
 
79
+ def termnote_example_cleanup(xmldoc)
80
+ xmldoc.xpath("//termnote[not(ancestor::term)]").each do |x|
81
+ x.name = "note"
82
+ end
83
+ xmldoc.xpath("//termexample[not(ancestor::term)]").each do |x|
84
+ x.name = "note"
85
+ end
86
+ end
87
+
79
88
  def termdef_cleanup(xmldoc)
80
89
  termdef_from_termbase(xmldoc)
81
90
  termdef_unnest_cleanup(xmldoc)
@@ -83,6 +92,7 @@ module Asciidoctor
83
92
  termdomain_cleanup(xmldoc)
84
93
  termdefinition_cleanup(xmldoc)
85
94
  termdomain1_cleanup(xmldoc)
95
+ termnote_example_cleanup(xmldoc)
86
96
  termdef_boilerplate_cleanup(xmldoc)
87
97
  termdef_subclause_cleanup(xmldoc)
88
98
  term_children_cleanup(xmldoc)
@@ -11,7 +11,6 @@ require "asciidoctor/standoc/table"
11
11
  require "asciidoctor/standoc/validate"
12
12
  require "asciidoctor/standoc/utils"
13
13
  require "asciidoctor/standoc/cleanup"
14
- require "asciidoctor/standoc/i18n"
15
14
  require "asciidoctor/standoc/reqt"
16
15
  require_relative "./macros.rb"
17
16
  require_relative "./log.rb"
@@ -48,7 +47,6 @@ module Asciidoctor
48
47
  include ::Asciidoctor::Standoc::Section
49
48
  include ::Asciidoctor::Standoc::Table
50
49
  include ::Asciidoctor::Standoc::Utils
51
- include ::Asciidoctor::Standoc::I18n
52
50
  include ::Asciidoctor::Standoc::Cleanup
53
51
  include ::Asciidoctor::Standoc::Validate
54
52
 
@@ -922,6 +922,9 @@
922
922
  <optional>
923
923
  <attribute name="script"/>
924
924
  </optional>
925
+ <optional>
926
+ <attribute name="type"/>
927
+ </optional>
925
928
  <optional>
926
929
  <attribute name="obligation">
927
930
  <choice>
@@ -961,9 +964,6 @@
961
964
  </define>
962
965
  <define name="content-subsection">
963
966
  <element name="clause">
964
- <optional>
965
- <attribute name="type"/>
966
- </optional>
967
967
  <ref name="Content-Section"/>
968
968
  </element>
969
969
  </define>
@@ -992,6 +992,9 @@
992
992
  </choice>
993
993
  </attribute>
994
994
  </optional>
995
+ <optional>
996
+ <attribute name="type"/>
997
+ </optional>
995
998
  <optional>
996
999
  <ref name="section-title"/>
997
1000
  </optional>
@@ -1011,9 +1014,6 @@
1011
1014
  </define>
1012
1015
  <define name="clause">
1013
1016
  <element name="clause">
1014
- <optional>
1015
- <attribute name="type"/>
1016
- </optional>
1017
1017
  <ref name="Clause-Section"/>
1018
1018
  </element>
1019
1019
  </define>
@@ -1042,6 +1042,9 @@
1042
1042
  </choice>
1043
1043
  </attribute>
1044
1044
  </optional>
1045
+ <optional>
1046
+ <attribute name="type"/>
1047
+ </optional>
1045
1048
  <optional>
1046
1049
  <ref name="section-title"/>
1047
1050
  </optional>
@@ -1180,6 +1183,9 @@
1180
1183
  <optional>
1181
1184
  <attribute name="script"/>
1182
1185
  </optional>
1186
+ <optional>
1187
+ <attribute name="type"/>
1188
+ </optional>
1183
1189
  <optional>
1184
1190
  <attribute name="obligation">
1185
1191
  <choice>
@@ -61,10 +61,10 @@ module Asciidoctor
61
61
  end
62
62
 
63
63
  def isorefrender1(t, m, yr, allp = "")
64
- t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
65
- docid(t, m[:usrlbl]) if m[:usrlbl]
66
- docid(t, id_and_year(m[:code], yr) + allp)
67
- docnumber(t, m[:code])
64
+ t.title(**plaintxt) { |i| i << ref_normalise(m[:text]) }
65
+ docid(t, m[:usrlbl]) if m[:usrlbl]
66
+ docid(t, id_and_year(m[:code], yr) + allp)
67
+ docnumber(t, m[:code])
68
68
  end
69
69
 
70
70
  def isorefmatches(xml, m)
@@ -106,15 +106,16 @@ module Asciidoctor
106
106
 
107
107
  def isorefmatches3(xml, m)
108
108
  yr = norm_year(m[:year])
109
- hasyr = m.names.include?("year") && yr != "--"
110
- noyr = m.names.include?("year") && yr == "--"
111
- ref = fetch_ref xml, m[:code], hasyr ? yr : nil,
112
- all_parts: true, no_year: noyr, text: m[:text], usrlbl: m[:usrlbl]
109
+ #hasyr = m.names.include?("year") && yr != "--"
110
+ hasyr = !yr.nil? && yr != "--"
111
+ #noyr = m.names.include?("year") && yr == "--"
112
+ ref = fetch_ref xml, m[:code], hasyr ? yr : nil, all_parts: true,
113
+ no_year: yr == "--", text: m[:text], usrlbl: m[:usrlbl]
113
114
  return use_my_anchor(ref, m[:anchor]) if ref
114
115
 
115
116
  xml.bibitem(**attr_code(ref_attributes(m))) do |t|
116
117
  isorefrender1(t, m, yr, " (all parts)")
117
- conditional_date(t, m, noyr)
118
+ conditional_date(t, m, yr == "--")
118
119
  iso_publisher(t, m[:code])
119
120
  m.names.include?("fn") && m[:fn] and
120
121
  t.note(**plaintxt.merge(type: "ISO DATE")) { |p| p << "#{m[:fn]}" }
@@ -150,32 +151,30 @@ module Asciidoctor
150
151
  "https://www.metanorma.com/author/iso/topics/markup/#bibliographies".freeze
151
152
 
152
153
  def analyse_ref_nofetch(ret)
153
- if m = /^nofetch\((?<id>.+)\)$/.match(ret[:id])
154
- ret[:id] = m[:id]
155
- ret[:nofetch] = true
156
- end
154
+ return ret unless m = /^nofetch\((?<id>.+)\)$/.match(ret[:id])
155
+ ret[:id] = m[:id]
156
+ ret[:nofetch] = true
157
157
  ret
158
158
  end
159
-
159
+
160
160
  def analyse_ref_repo_path(ret)
161
- if m = /^(?<type>repo|path):\((?<key>[^,]+),(?<id>.+)\)$/.match(ret[:id])
162
- ret[:id] = m[:id]
163
- ret[:type] = m[:type]
164
- ret[:key] = m[:key]
165
- ret[:nofetch] = true
166
- end
167
- ret
161
+ return ret unless m =
162
+ /^(?<type>repo|path):\((?<key>[^,]+),(?<id>.+)\)$/.match(ret[:id])
163
+ ret[:id] = m[:id]
164
+ ret[:type] = m[:type]
165
+ ret[:key] = m[:key]
166
+ ret[:nofetch] = true
167
+ ret
168
168
  end
169
169
 
170
170
  def analyse_ref_numeric(ret)
171
- if /^\d+$/.match(ret[:id])
172
- ret[:numeric] = true
173
- end
171
+ return ret unless /^\d+$/.match(ret[:id])
172
+ ret[:numeric] = true
174
173
  ret
175
174
  end
176
175
 
177
176
  # ref id = (usrlbl)code[:-]year
178
- # code = nofetch(code) | (repo|path):(key,code) | \[? number \]? | identifier
177
+ # code = nofetch(code) | (repo|path):(key,code) | \[? number \]? | ident
179
178
  def analyse_ref_code(code)
180
179
  ret = {id: code}
181
180
  return ret if code.nil? || code.empty?
@@ -13,9 +13,13 @@ module Asciidoctor
13
13
  @term_def
14
14
  end
15
15
 
16
- def sectiontype(node, level = true)
17
- ret = node&.attr("heading")&.downcase ||
16
+ def sectiontype1(node)
17
+ node&.attr("heading")&.downcase ||
18
18
  node.title.gsub(/<[^>]+>/, "").downcase
19
+ end
20
+
21
+ def sectiontype(node, level = true)
22
+ ret = sectiontype1(node)
19
23
  ret1 = sectiontype_streamline(ret)
20
24
  return ret1 if "symbols and abbreviated terms" == ret1
21
25
  return nil unless !level || node.level == 1
@@ -61,16 +65,18 @@ module Asciidoctor
61
65
  case sectiontype(node)
62
66
  when "introduction" then introduction_parse(a, xml, node)
63
67
  when "foreword" then foreword_parse(a, xml, node)
68
+ when "scope" then scope_parse(a, xml, node)
64
69
  when "normative references" then norm_ref_parse(a, xml, node)
65
70
  when "terms and definitions"
66
71
  @term_def = true
67
72
  term_def_parse(a, xml, node, true)
68
73
  @term_def = false
69
74
  when "symbols and abbreviated terms"
70
- symbols_parse(a, xml, node)
75
+ symbols_parse(symbols_attrs(node, a), xml, node)
71
76
  when "acknowledgements"
72
77
  acknowledgements_parse(a, xml, node)
73
- when "bibliography" then bibliography_parse(a, xml, node)
78
+ when "bibliography"
79
+ bibliography_parse(a, xml, node)
74
80
  else
75
81
  if @term_def then term_def_subclause_parse(a, xml, node)
76
82
  elsif @definitions then symbols_parse(a, xml, node)
@@ -106,7 +112,7 @@ module Asciidoctor
106
112
  def preamble(node)
107
113
  noko do |xml|
108
114
  xml.foreword **attr_code(section_attributes(node)) do |xml_abstract|
109
- xml_abstract.title { |t| t << (node.blocks[0].title || "Foreword") }
115
+ xml_abstract.title { |t| t << (node.blocks[0].title || @i18n.foreword) }
110
116
  content = node.content
111
117
  xml_abstract << content
112
118
  end
@@ -119,6 +125,10 @@ module Asciidoctor
119
125
  end
120
126
  end
121
127
 
128
+ def scope_parse(attrs, xml, node)
129
+ clause_parse(attrs.merge(type: "scope"), xml, node)
130
+ end
131
+
122
132
  def clause_parse(attrs, xml, node)
123
133
  attrs["inline-header".to_sym] = node.option? "inline-header"
124
134
  attrs[:bibitem] = true if node.option? "bibitem"
@@ -145,6 +155,15 @@ module Asciidoctor
145
155
  @definitions = true
146
156
  end
147
157
 
158
+ def symbols_attrs(node, a)
159
+ case sectiontype1(node)
160
+ when "symbols" then a.merge(type: "symbols")
161
+ when "abbreviated terms", "abbreviations" then a.merge(type: "abbreviated_terms")
162
+ else
163
+ a
164
+ end
165
+ end
166
+
148
167
  def symbols_parse(attr, xml, node)
149
168
  node.role == "nonterm" and return nonterm_symbols_parse(attr, xml, node)
150
169
  xml.definitions **attr_code(attr) do |xml_section|
@@ -159,9 +178,6 @@ module Asciidoctor
159
178
  end
160
179
  end
161
180
 
162
- SYMBOLS_TITLES = ["symbols and abbreviated terms", "symbols",
163
- "abbreviated terms"].freeze
164
-
165
181
  def nonterm_term_def_subclause_parse(attrs, xml, node)
166
182
  @term_def = false
167
183
  clause_parse(attrs, xml, node)
@@ -190,23 +206,9 @@ module Asciidoctor
190
206
  end
191
207
  end
192
208
 
193
- def term_def_title(toplevel, node)
194
- return node.title unless toplevel
195
- sub = node.find_by(context: :section) do |s|
196
- SYMBOLS_TITLES.include? s.title.downcase
197
- end
198
- return "Terms and definitions" if sub.empty?
199
- sym = /symbol/i.match(node.title)
200
- abbrev = /abbreviat/i.match(node.title)
201
- sym && abbrev and return "Terms, definitions, symbols and abbreviated terms"
202
- sym and return "Terms, definitions and symbols"
203
- abbrev and return "Terms, definitions and abbreviated terms"
204
- "Terms, definitions, symbols and abbreviated terms"
205
- end
206
-
207
209
  def term_def_parse(attrs, xml, node, toplevel)
208
210
  xml.terms **attr_code(attrs) do |section|
209
- section.title { |t| t << term_def_title(toplevel, node) }
211
+ section.title { |t| t << node.title }
210
212
  (s = node.attr("source")) && s.split(/,/).each do |s1|
211
213
  section.termdocsource(nil, **attr_code(bibitemid: s1))
212
214
  end
@@ -216,7 +218,7 @@ module Asciidoctor
216
218
 
217
219
  def introduction_parse(attrs, xml, node)
218
220
  xml.introduction **attr_code(attrs) do |xml_section|
219
- xml_section.title { |t| t << "Introduction" }
221
+ xml_section.title { |t| t << @i18n.introduction }
220
222
  content = node.content
221
223
  xml_section << content
222
224
  end
@@ -232,7 +234,7 @@ module Asciidoctor
232
234
 
233
235
  def acknowledgements_parse(attrs, xml, node)
234
236
  xml.acknowledgements **attr_code(attrs) do |xml_section|
235
- xml_section.title { |t| t << node.title || "Acknowledgements" }
237
+ xml_section.title { |t| t << node.title || @i18n.acknowledgements }
236
238
  content = node.content
237
239
  xml_section << content
238
240
  end