metanorma-standoc 1.8.6 → 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -3
  4. data/Gemfile.devel +0 -0
  5. data/lib/asciidoctor/standoc/base.rb +41 -36
  6. data/lib/asciidoctor/standoc/biblio.rng +4 -6
  7. data/lib/asciidoctor/standoc/blocks.rb +44 -14
  8. data/lib/asciidoctor/standoc/blocks_notes.rb +41 -24
  9. data/lib/asciidoctor/standoc/cleanup.rb +33 -78
  10. data/lib/asciidoctor/standoc/cleanup_block.rb +77 -62
  11. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +51 -29
  12. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +1 -0
  13. data/lib/asciidoctor/standoc/cleanup_image.rb +71 -0
  14. data/lib/asciidoctor/standoc/cleanup_maths.rb +37 -28
  15. data/lib/asciidoctor/standoc/cleanup_ref.rb +24 -15
  16. data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +1 -1
  17. data/lib/asciidoctor/standoc/cleanup_reqt.rb +47 -0
  18. data/lib/asciidoctor/standoc/cleanup_section.rb +21 -15
  19. data/lib/asciidoctor/standoc/converter.rb +10 -3
  20. data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +67 -66
  21. data/lib/asciidoctor/standoc/front.rb +35 -18
  22. data/lib/asciidoctor/standoc/front_contributor.rb +5 -5
  23. data/lib/asciidoctor/standoc/inline.rb +1 -1
  24. data/lib/asciidoctor/standoc/isodoc.rng +304 -1
  25. data/lib/asciidoctor/standoc/lists.rb +4 -2
  26. data/lib/asciidoctor/standoc/macros.rb +50 -23
  27. data/lib/asciidoctor/standoc/macros_form.rb +63 -0
  28. data/lib/asciidoctor/standoc/ref.rb +87 -112
  29. data/lib/asciidoctor/standoc/ref_date_id.rb +62 -0
  30. data/lib/asciidoctor/standoc/ref_sect.rb +22 -19
  31. data/lib/asciidoctor/standoc/section.rb +3 -1
  32. data/lib/asciidoctor/standoc/terms.rb +27 -16
  33. data/lib/asciidoctor/standoc/utils.rb +35 -9
  34. data/lib/asciidoctor/standoc/validate.rb +30 -28
  35. data/lib/metanorma-standoc.rb +0 -1
  36. data/lib/metanorma/standoc/version.rb +5 -5
  37. data/metanorma-standoc.gemspec +11 -11
  38. data/spec/asciidoctor/base_spec.rb +78 -8
  39. data/spec/asciidoctor/blocks_spec.rb +832 -727
  40. data/spec/asciidoctor/cleanup_sections_spec.rb +52 -15
  41. data/spec/asciidoctor/cleanup_spec.rb +1860 -1874
  42. data/spec/asciidoctor/inline_spec.rb +272 -273
  43. data/spec/asciidoctor/isobib_cache_spec.rb +406 -358
  44. data/spec/asciidoctor/macros_spec.rb +539 -437
  45. data/spec/asciidoctor/macros_yaml2text_spec.rb +1 -1
  46. data/spec/asciidoctor/refs_spec.rb +135 -7
  47. data/spec/asciidoctor/section_spec.rb +743 -690
  48. data/spec/assets/html-override.css +1 -0
  49. data/spec/assets/word-override.css +1 -0
  50. data/spec/spec_helper.rb +11 -9
  51. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +60 -60
  52. data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
  53. data/spec/vcr_cassettes/isobib_get_123_1.yml +30 -30
  54. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +42 -42
  55. data/spec/vcr_cassettes/isobib_get_123_2001.yml +15 -15
  56. data/spec/vcr_cassettes/isobib_get_124.yml +15 -15
  57. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  58. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +53 -49
  59. metadata +72 -68
  60. data/.rubocop.ribose.yml +0 -66
  61. data/.rubocop.tb.yml +0 -650
  62. data/spec/asciidoctor/macros_lutaml_spec.rb +0 -80
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d29f898d11836b1b9ae020605081f35a144ed06406a24776b93841d05cafac62
4
- data.tar.gz: 5f47fb98bf9189ab80a18fe9f32150e0cf840f6860ec2317147122583748f162
3
+ metadata.gz: b3b789e06df237e881bdd055cfe9b90e191d781e71e82dd6a80c098f23b08934
4
+ data.tar.gz: 27f1499d7f7adccf29c2b9c9ac731e6ff1988a008530a4aa13e63adb4fbef490
5
5
  SHA512:
6
- metadata.gz: 92cf686a035d48f5b0507d0fffa91b2b207f741cc14a939b498330065e204b6a194bab1b7796115ff790ae0f29e046d7bf429da1dd51b554b5251febd9b350eb
7
- data.tar.gz: 91a13d5900acf6099186c51e294dd6f441bd298fdafa958bc53d8a0ef95dbfad4427cfad1464cffb1ced2ae840158cb9364c00249a25595b4cfea9a65d4f2136
6
+ metadata.gz: c72e91aac553b2e9d3151a59fde54b02ae5cb6340aeb0781dd4326d5a6bce3166e20fd2ece37d909c3e8b7f72d6d26892bd279d4256b190cf28dbe41e1bdbf3e
7
+ data.tar.gz: 8314c96a3af15b47d56c42cd040e369455616b40dafb37a3d2ee32d0ba46976293eee36f3b9ab99d3b2d94002df3f3bf0a319e98f262e0d5eb3049fb90c30d4f
data/.gitignore CHANGED
@@ -10,3 +10,5 @@ spec/examples/rice.html
10
10
  spec/examples/rice.xml
11
11
  spec/examples/rice_files/
12
12
  Gemfile.lock
13
+
14
+ .rubocop-https--*
data/.rubocop.yml CHANGED
@@ -1,10 +1,12 @@
1
1
  # This project follows the Ribose OSS style guide.
2
2
  # https://github.com/riboseinc/oss-guides
3
3
  # All project-specific additions and overrides should be specified in this file.
4
-
5
4
  inherit_from:
6
5
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
+
7
+ # local repo-specific modifications
8
+
7
9
  AllCops:
10
+ DisplayCopNames: false
11
+ StyleGuideCopsOnly: false
8
12
  TargetRubyVersion: 2.4
9
- Rails:
10
- Enabled: true
data/Gemfile.devel ADDED
File without changes
@@ -8,6 +8,7 @@ require "isodoc"
8
8
  require "relaton"
9
9
  require "fileutils"
10
10
  require "metanorma-utils"
11
+ require "isodoc/xslfo_convert"
11
12
 
12
13
  module Asciidoctor
13
14
  module Standoc
@@ -43,6 +44,7 @@ module Asciidoctor
43
44
  i18nyaml: node.attr("i18nyaml"),
44
45
  scope: node.attr("scope"),
45
46
  htmlstylesheet: node.attr("htmlstylesheet"),
47
+ htmlstylesheet_override: node.attr("htmlstylesheet-override"),
46
48
  htmlcoverpage: node.attr("htmlcoverpage"),
47
49
  htmlintropage: node.attr("htmlintropage"),
48
50
  scripts: node.attr("scripts"),
@@ -51,6 +53,7 @@ module Asciidoctor
51
53
  htmltoclevels: node.attr("htmltoclevels") || node.attr("toclevels"),
52
54
  doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
53
55
  break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
56
+ sectionsplit: node.attr("sectionsplit"),
54
57
  }
55
58
  end
56
59
 
@@ -59,7 +62,7 @@ module Asciidoctor
59
62
  end
60
63
 
61
64
  def doc_extract_attributes(node)
62
- {
65
+ attrs = {
63
66
  script: node.attr("script"),
64
67
  bodyfont: node.attr("body-font"),
65
68
  headerfont: node.attr("header-font"),
@@ -67,6 +70,7 @@ module Asciidoctor
67
70
  i18nyaml: node.attr("i18nyaml"),
68
71
  scope: node.attr("scope"),
69
72
  wordstylesheet: node.attr("wordstylesheet"),
73
+ wordstylesheet_override: node.attr("wordstylesheet-override"),
70
74
  standardstylesheet: node.attr("standardstylesheet"),
71
75
  header: node.attr("header"),
72
76
  wordcoverpage: node.attr("wordcoverpage"),
@@ -77,6 +81,14 @@ module Asciidoctor
77
81
  doctoclevels: node.attr("doctoclevels") || node.attr("toclevels"),
78
82
  break_up_urls_in_tables: node.attr("break-up-urls-in-tables"),
79
83
  }
84
+
85
+ if font_manifest_file = node.attr("mn2pdf-font-manifest-file")
86
+ attrs[IsoDoc::XslfoPdfConvert::MN2PDF_OPTIONS] = {
87
+ IsoDoc::XslfoPdfConvert::MN2PDF_FONT_MANIFEST => font_manifest_file,
88
+ }
89
+ end
90
+
91
+ attrs
80
92
  end
81
93
 
82
94
  def doc_converter(node)
@@ -96,10 +108,15 @@ module Asciidoctor
96
108
  @draft = node.attributes.has_key?("draft")
97
109
  @novalid = node.attr("novalid")
98
110
  @smartquotes = node.attr("smartquotes") != "false"
99
- @keepasciimath = node.attr("mn-keep-asciimath") && node.attr("mn-keep-asciimath") != "false"
111
+ @keepasciimath = node.attr("mn-keep-asciimath") &&
112
+ node.attr("mn-keep-asciimath") != "false"
100
113
  @fontheader = default_fonts(node)
101
114
  @files_to_delete = []
102
- @filename = node.attr("docfile") ? File.basename(node.attr("docfile")).gsub(/\.adoc$/, "") : ""
115
+ if node.attr("docfile")
116
+ @filename = File.basename(node.attr("docfile"))&.gsub(/\.adoc$/, "")
117
+ else
118
+ @filename = ""
119
+ end
103
120
  @localdir = Metanorma::Utils::localdir(node)
104
121
  @output_dir = outputdir node
105
122
  @no_isobib_cache = node.attr("no-isobib-cache")
@@ -131,10 +148,12 @@ module Asciidoctor
131
148
  end
132
149
 
133
150
  def outputs(node, ret)
134
- File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
135
- presentation_xml_converter(node).convert(@filename + ".xml")
136
- html_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.html")
137
- doc_converter(node).convert(@filename + ".presentation.xml", nil, false, "#{@filename}.doc")
151
+ File.open("#{@filename}.xml", "w:UTF-8") { |f| f.write(ret) }
152
+ presentation_xml_converter(node).convert("#{@filename}.xml")
153
+ html_converter(node).convert("#{@filename}.presentation.xml",
154
+ nil, false, "#{@filename}.html")
155
+ doc_converter(node).convert("#{@filename}.presentation.xml",
156
+ nil, false, "#{@filename}.doc")
138
157
  end
139
158
 
140
159
  def document(node)
@@ -151,12 +170,21 @@ module Asciidoctor
151
170
  end
152
171
 
153
172
  def clean_exit
154
- @log.write(@output_dir + @filename + ".err") unless @novalid
173
+ @log.write("#{@output_dir}#{@filename}.err") unless @novalid
174
+
155
175
  @files_to_delete.each { |f| FileUtils.rm f }
156
176
  end
157
177
 
178
+ def clean_abort(msg, file = nil)
179
+ file and
180
+ File.open("#{@filename}.xml.abort", "w:UTF-8") { |f| f.write(file) }
181
+ clean_exit
182
+ abort(msg)
183
+ end
184
+
158
185
  def makexml1(node)
159
- result = ["<?xml version='1.0' encoding='UTF-8'?>", "<#{xml_root_tag} type='semantic' version='#{version}'>"]
186
+ result = ["<?xml version='1.0' encoding='UTF-8'?>",
187
+ "<#{xml_root_tag} type='semantic' version='#{version}'>"]
160
188
  result << noko { |ixml| front node, ixml }
161
189
  result << noko { |ixml| middle node, ixml }
162
190
  result << "</#{xml_root_tag}>"
@@ -191,36 +219,13 @@ module Asciidoctor
191
219
  end
192
220
  end
193
221
 
194
- def default_script(lang)
195
- case lang
196
- when "ar", "fa"
197
- "Arab"
198
- when "ur"
199
- "Aran"
200
- when "ru", "bg"
201
- "Cyrl"
202
- when "hi"
203
- "Deva"
204
- when "el"
205
- "Grek"
206
- when "zh"
207
- "Hans"
208
- when "ko"
209
- "Kore"
210
- when "he"
211
- "Hebr"
212
- when "ja"
213
- "Jpan"
214
- else
215
- "Latn"
216
- end
217
- end
218
-
219
222
  private
220
223
 
221
224
  def outputdir(node)
222
- if node.attr("output_dir").nil_or_empty? then Metanorma::Utils::localdir(node)
223
- else File.join(node.attr("output_dir"), "")
225
+ if node.attr("output_dir").nil_or_empty?
226
+ Metanorma::Utils::localdir(node)
227
+ else
228
+ File.join(node.attr("output_dir"), "")
224
229
  end
225
230
  end
226
231
  end
@@ -124,7 +124,7 @@
124
124
  <value>application/tei+xml</value>
125
125
  <value>text/x-asciidoc</value>
126
126
  <value>text/markdown</value>
127
- <value>application/x-isodoc+xml</value>
127
+ <value>application/x-metanorma+xml</value>
128
128
  <text/>
129
129
  </choice>
130
130
  </attribute>
@@ -452,6 +452,7 @@
452
452
  <attribute name="type">
453
453
  <choice>
454
454
  <value>isni</value>
455
+ <value>orcid</value>
455
456
  <value>uri</value>
456
457
  </choice>
457
458
  </attribute>
@@ -461,10 +462,7 @@
461
462
  <define name="org-identifier">
462
463
  <element name="identifier">
463
464
  <attribute name="type">
464
- <choice>
465
- <value>orcid</value>
466
- <value>uri</value>
467
- </choice>
465
+ <data type="string" datatypeLibrary=""/>
468
466
  </attribute>
469
467
  <text/>
470
468
  </element>
@@ -1106,7 +1104,7 @@
1106
1104
  <value>complementOf</value>
1107
1105
  <value>obsoletes</value>
1108
1106
  <value>obsoletedBy</value>
1109
- <value>cited</value>
1107
+ <value>cites</value>
1110
1108
  <value>isCitedIn</value>
1111
1109
  </choice>
1112
1110
  </define>
@@ -30,6 +30,7 @@ module Asciidoctor
30
30
  def open(node)
31
31
  role = node.role || node.attr("style")
32
32
  reqt_subpart(role) and return requirement_subpart(node)
33
+ role == "form" and return form(node)
33
34
  result = []
34
35
  node.blocks.each do |b|
35
36
  result << send(b.context, b)
@@ -37,6 +38,17 @@ module Asciidoctor
37
38
  result
38
39
  end
39
40
 
41
+ def form(node)
42
+ noko do |xml|
43
+ xml.form **attr_code(
44
+ id: Metanorma::Utils::anchor_or_uuid,
45
+ name: node.attr("name"), action: node.attr("action")
46
+ ) do |f|
47
+ f << node.content
48
+ end
49
+ end
50
+ end
51
+
40
52
  def literal_attrs(node)
41
53
  attr_code(id_attr(node).merge(keep_attrs(node)))
42
54
  end
@@ -45,8 +57,9 @@ module Asciidoctor
45
57
  noko do |xml|
46
58
  xml.figure **literal_attrs(node) do |f|
47
59
  figure_title(node, f)
48
- f.pre node.lines.join("\n"), **attr_code(id: Metanorma::Utils::anchor_or_uuid,
49
- alt: node.attr("alt"))
60
+ f.pre node.lines.join("\n"),
61
+ **attr_code(id: Metanorma::Utils::anchor_or_uuid,
62
+ alt: node.attr("alt"))
50
63
  end
51
64
  end
52
65
  end
@@ -70,19 +83,32 @@ module Asciidoctor
70
83
 
71
84
  def example(node)
72
85
  return term_example(node) if in_terms?
86
+
73
87
  role = node.role || node.attr("style")
74
88
  %w(recommendation requirement permission).include?(role) and
75
89
  return requirement(node, role)
76
90
  return pseudocode_example(node) if role == "pseudocode"
77
91
  return svgmap_example(node) if role == "svgmap"
92
+ return form(node) if role == "form"
93
+
78
94
  example_proper(node)
79
95
  end
80
96
 
97
+ def svgmap_attrs(node)
98
+ attr_code( { id: node.id,
99
+ unnumbered: node.option?("unnumbered") ? "true" : nil,
100
+ number: node.attr("number"),
101
+ subsequence: node.attr("subsequence") }.
102
+ merge(keep_attrs(node)))
103
+ end
104
+
81
105
  def svgmap_example(node)
82
106
  noko do |xml|
83
- xml.svgmap **attr_code(example_attrs(node).merge(src: node.attr("src"), alt: node.attr("alt"))) do |ex|
84
- ex << node.content
85
- end
107
+ xml.svgmap **attr_code(svgmap_attrs(node).merge(
108
+ src: node.attr("src"), alt: node.attr("alt"))) do |ex|
109
+ figure_title(node, ex)
110
+ ex << node.content
111
+ end
86
112
  end.join("\n")
87
113
  end
88
114
 
@@ -129,12 +155,14 @@ module Asciidoctor
129
155
  end
130
156
 
131
157
  def para_attrs(node)
132
- attr_code(keep_attrs(node).merge(align: node.attr("align"),
133
- id: Metanorma::Utils::anchor_or_uuid(node)))
158
+ attr_code(keep_attrs(node)
159
+ .merge(align: node.attr("align"),
160
+ id: Metanorma::Utils::anchor_or_uuid(node)))
134
161
  end
135
162
 
136
163
  def paragraph(node)
137
164
  return termsource(node) if node.role == "source"
165
+
138
166
  noko do |xml|
139
167
  xml.p **para_attrs(node) do |xml_t|
140
168
  xml_t << node.content
@@ -143,8 +171,9 @@ module Asciidoctor
143
171
  end
144
172
 
145
173
  def quote_attrs(node)
146
- attr_code(keep_attrs(node).merge(align: node.attr("align"),
147
- id: Metanorma::Utils::anchor_or_uuid(node)))
174
+ attr_code(keep_attrs(node)
175
+ .merge(align: node.attr("align"),
176
+ id: Metanorma::Utils::anchor_or_uuid(node)))
148
177
  end
149
178
 
150
179
  def quote_attribution(node, out)
@@ -168,11 +197,12 @@ module Asciidoctor
168
197
  end
169
198
 
170
199
  def listing_attrs(node)
171
- attr_code(keep_attrs(node).merge(lang: node.attr("language"),
172
- id: Metanorma::Utils::anchor_or_uuid(node),
173
- unnumbered: node.option?("unnumbered") ? "true" : nil,
174
- number: node.attr("number"),
175
- filename: node.attr("filename")))
200
+ attr_code(keep_attrs(node).
201
+ merge(lang: node.attr("language"),
202
+ id: Metanorma::Utils::anchor_or_uuid(node),
203
+ unnumbered: node.option?("unnumbered") ? "true" : nil,
204
+ number: node.attr("number"),
205
+ filename: node.attr("filename")))
176
206
  end
177
207
 
178
208
  # NOTE: html escaping is performed by Nokogiri
@@ -2,30 +2,41 @@ module Asciidoctor
2
2
  module Standoc
3
3
  module Blocks
4
4
  def termnote_attrs(node)
5
- attr_code(id_attr(node).merge(
6
- unnumbered: node.attr("unnumbered"),
7
- number: node.attr("number"),
8
- subsequence: node.attr("subsequence"),
9
- "keep-with-next": node.attr("keep-with-next"),
10
- "keep-lines-together": node.attr("keep-with-next"),
11
- "keep-separate": node.attr("keep-separate")))
5
+ attr_code(
6
+ id_attr(node).merge(
7
+ unnumbered: node.attr("unnumbered"),
8
+ number: node.attr("number"),
9
+ subsequence: node.attr("subsequence"),
10
+ "keep-with-next": node.attr("keep-with-next"),
11
+ "keep-lines-together": node.attr("keep-with-next"),
12
+ "keep-separate": node.attr("keep-separate")
13
+ )
14
+ )
12
15
  end
13
16
 
14
17
  def note_attrs(node)
15
- attr_code(termnote_attrs(node).merge(
16
- type: node.attr("type"),
17
- beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil))
18
+ attr_code(
19
+ termnote_attrs(node).merge(
20
+ type: node.attr("type"),
21
+ beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil
22
+ )
23
+ )
18
24
  end
19
25
 
20
26
  def sidebar_attrs(node)
21
- todo_attrs(node).merge(attr_code(
22
- from: node.attr("from"), to: node.attr("to") || node.attr("from") ))
27
+ todo_attrs(node).merge(
28
+ attr_code(
29
+ from: node.attr("from"),
30
+ to: node.attr("to") || node.attr("from")
31
+ )
32
+ )
23
33
  end
24
34
 
25
35
  def sidebar(node)
26
36
  return unless draft?
37
+
27
38
  noko do |xml|
28
- xml.review **(sidebar_attrs(node)) do |r|
39
+ xml.review **sidebar_attrs(node) do |r|
29
40
  wrap_in_para(node, r)
30
41
  end
31
42
  end
@@ -33,33 +44,34 @@ module Asciidoctor
33
44
 
34
45
  def todo_attrs(node)
35
46
  date = node.attr("date") || Date.today.iso8601.gsub(/\+.*$/, "")
36
- date += "T00:00:00Z" unless /T/.match date
47
+ date += "T00:00:00Z" unless /T/.match? date
37
48
  attr_code(
38
49
  id: ::Metanorma::Utils::anchor_or_uuid(node),
39
50
  reviewer: node.attr("reviewer") || node.attr("source") || "(Unknown)",
40
- date: date )
51
+ date: date
52
+ )
41
53
  end
42
54
 
43
55
  def todo(node)
44
56
  noko do |xml|
45
- xml.review **(todo_attrs(node)) do |r|
57
+ xml.review **todo_attrs(node) do |r|
46
58
  wrap_in_para(node, r)
47
59
  end
48
60
  end
49
61
  end
50
62
 
51
- def termnote(n)
63
+ def termnote(node)
52
64
  noko do |xml|
53
- xml.termnote **termnote_attrs(n) do |ex|
54
- wrap_in_para(n, ex)
65
+ xml.termnote **termnote_attrs(node) do |ex|
66
+ wrap_in_para(node, ex)
55
67
  end
56
68
  end.join("\n")
57
69
  end
58
70
 
59
- def note(n)
71
+ def note(node)
60
72
  noko do |xml|
61
- xml.note **note_attrs(n) do |c|
62
- wrap_in_para(n, c)
73
+ xml.note **note_attrs(node) do |c|
74
+ wrap_in_para(node, c)
63
75
  end
64
76
  end.join("\n")
65
77
  end
@@ -69,14 +81,19 @@ module Asciidoctor
69
81
  a = node.attr("type") and ["danger", "safety precautions"].each do |t|
70
82
  name = t if a.casecmp(t).zero?
71
83
  end
72
- attr_code(keep_attrs(node).merge(id: Metanorma::Utils::anchor_or_uuid(node), type: name,
73
- beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil))
84
+ attr_code(
85
+ keep_attrs(node).merge(
86
+ id: Metanorma::Utils::anchor_or_uuid(node), type: name,
87
+ beforeclauses: node.attr("beforeclauses") == "true" ? "true" : nil
88
+ )
89
+ )
74
90
  end
75
91
 
76
92
  def admonition(node)
77
93
  return termnote(node) if in_terms?
78
94
  return note(node) if node.attr("name") == "note"
79
95
  return todo(node) if node.attr("name") == "todo"
96
+
80
97
  noko do |xml|
81
98
  xml.admonition **admonition_attrs(node) do |a|
82
99
  node.title.nil? or a.name { |name| name << node.title }