metanorma-standoc 2.4.4 → 2.4.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75e40756e5df255cdb9b0f3bb4d4d2f020ac176558e26bc673bf9b0cf9197d48
4
- data.tar.gz: d1c03ebbfa2bffdc9e526370584ee26757c43e0d545c279a15b89000743efc18
3
+ metadata.gz: 93ecb6aeaf9ddd1f6d695e84bdc1e0fc3a916da96ec174dd2a39045c58ac3b8d
4
+ data.tar.gz: ef76e529c8d445e62e7d0d9a1ad847c91607c050d84ba3f270709968acc90116
5
5
  SHA512:
6
- metadata.gz: 70c270785a8fa09a9734bca27b90a119b3bd7c9b78ab48f88aed19e6e5f805086996acc55412741c260b2ae272bac27b3ede2e6158aa215c12b0751bba98462a
7
- data.tar.gz: 81881b81ae25e30dd2e4cfc22ff424fe268355697f62feaf18e3e07c2f55769fc64ab9f9a228cd5e815abf3144db6ec5d215702786863cb04d952d6b1f8ed9d4
6
+ metadata.gz: 62a612cbc8ae3a06c659def78b581ce31f47846aae73417475b7aae1b9648f2ff56db79f0b34f5099db5a09d0b79d7e96dfd2e2c767c465654941b4e6e249b72
7
+ data.tar.gz: '08959b3bebcc9a764d8191c68228b7ab77355fec635165b21e1baf84c9908914677845a25b6a0d05d2237ec1135e95e3c222e1194dcd4cf159ddbe938026c48e'
@@ -73,6 +73,8 @@ module Metanorma
73
73
  @sourcecode_markup_start = node.attr("sourcecode-markup-start") || "{{{"
74
74
  @sourcecode_markup_end = node.attr("sourcecode-markup-end") || "}}}"
75
75
  @datauriimage = node.attr("data-uri-image") != "false"
76
+ @blockunnumbered = (node.attr("block-unnumbered") || "").split(",")
77
+ .map(&:strip)
76
78
  end
77
79
 
78
80
  def init_reqt(node)
@@ -38,7 +38,7 @@ module Metanorma
38
38
 
39
39
  def todo_attrs(node)
40
40
  date = node.attr("date") || Date.today.iso8601.gsub(/\+.*$/, "")
41
- date += "T00:00:00Z" unless /T/.match? date
41
+ date += "T00:00:00Z" unless date.include?("T")
42
42
  attr_code(id_attr(node)
43
43
  .merge(reviewer: node.attr("reviewer") || node.attr("source") ||
44
44
  "(Unknown)",
@@ -7,6 +7,7 @@ require_relative "./cleanup_footnotes"
7
7
  require_relative "./cleanup_ref"
8
8
  require_relative "./cleanup_asciibib"
9
9
  require_relative "./cleanup_boilerplate"
10
+ require_relative "./cleanup_bibdata"
10
11
  require_relative "./cleanup_section"
11
12
  require_relative "./cleanup_terms"
12
13
  require_relative "./cleanup_symbols"
@@ -26,6 +27,8 @@ module Metanorma
26
27
  def cleanup(xmldoc)
27
28
  element_name_cleanup(xmldoc)
28
29
  passthrough_cleanup(xmldoc)
30
+ unnumbered_blocks_cleanup(xmldoc)
31
+ metadata_cleanup(xmldoc) # feeds: boilerplate_cleanup
29
32
  sections_cleanup(xmldoc) # feeds: obligations_cleanup, toc_cleanup,
30
33
  # floatingtitle_cleanup
31
34
  obligations_cleanup(xmldoc)
@@ -70,7 +73,6 @@ module Metanorma
70
73
  svgmap_cleanup(xmldoc) # feeds: img_cleanup
71
74
  boilerplate_cleanup(xmldoc)
72
75
  toc_cleanup(xmldoc)
73
- metadata_cleanup(xmldoc)
74
76
  smartquotes_cleanup(xmldoc)
75
77
  variant_cleanup(xmldoc)
76
78
  para_cleanup(xmldoc)
@@ -0,0 +1,127 @@
1
+ module Metanorma
2
+ module Standoc
3
+ module Cleanup
4
+ def bibdata_cleanup(xmldoc)
5
+ bibdata_anchor_cleanup(xmldoc)
6
+ bibdata_docidentifier_cleanup(xmldoc)
7
+ bibdata_embed_hdr_cleanup(xmldoc) # feeds bibdata_embed_id_cleanup
8
+ bibdata_embed_id_cleanup(xmldoc)
9
+ biblio_indirect_erefs(xmldoc, @internal_eref_namespaces&.uniq)
10
+ end
11
+
12
+ def bibdata_anchor_cleanup(xmldoc)
13
+ xmldoc.xpath("//bibdata//bibitem | //bibdata//note").each do |b|
14
+ b.delete("id")
15
+ end
16
+ end
17
+
18
+ def bibdata_docidentifier_cleanup(xmldoc)
19
+ ins = xmldoc.at("//bibdata/docidentifier")
20
+ xmldoc.xpath("//bibdata/docidentifier").each_with_index do |b, i|
21
+ i.zero? and next
22
+ ins.next = b.remove
23
+ ins = ins.next
24
+ end
25
+ end
26
+
27
+ def gather_indirect_erefs(xmldoc, prefix)
28
+ xmldoc.xpath("//eref[@type = '#{prefix}']")
29
+ .each_with_object({}) do |e, m|
30
+ e.delete("type")
31
+ m[e["bibitemid"]] = true
32
+ end.keys
33
+ end
34
+
35
+ def insert_indirect_biblio(xmldoc, refs, prefix)
36
+ i = xmldoc.at("bibliography") or
37
+ xmldoc.root << "<bibliography/>" and i = xmldoc.at("bibliography")
38
+ i = i.add_child("<references hidden='true' normative='false'/>").first
39
+ refs.each do |x|
40
+ i << <<~BIB
41
+ <bibitem id="#{x}" type="internal">
42
+ <docidentifier type="repository">#{x.sub(/^#{prefix}_/, "#{prefix}/")}</docidentifier>
43
+ </bibitem>
44
+ BIB
45
+ end
46
+ end
47
+
48
+ def indirect_eref_to_xref(eref, ident)
49
+ loc = eref.at("./localityStack[locality[@type = 'anchor']]")
50
+ &.remove&.text ||
51
+ eref.at("./locality[@type = 'anchor']")&.remove&.text || ident
52
+ eref.name = "xref"
53
+ eref.delete("bibitemid")
54
+ eref.delete("citeas")
55
+ eref["target"] = loc
56
+ unless eref.document.at("//*[@id = '#{loc}']")
57
+ eref.children = %(** Missing target #{loc})
58
+ eref["target"] = ident
59
+ end
60
+ end
61
+
62
+ def resolve_local_indirect_erefs(xmldoc, refs, prefix)
63
+ refs.each_with_object([]) do |r, m|
64
+ id = r.sub(/^#{prefix}_/, "")
65
+ n = xmldoc.at("//*[@id = '#{id}']")
66
+ if n&.at("./ancestor-or-self::*[@type = '#{prefix}']")
67
+ xmldoc.xpath("//eref[@bibitemid = '#{r}']").each do |e|
68
+ indirect_eref_to_xref(e, id)
69
+ end
70
+ else m << r
71
+ end
72
+ end
73
+ end
74
+
75
+ def biblio_indirect_erefs(xmldoc, prefixes)
76
+ prefixes&.each do |prefix|
77
+ refs = gather_indirect_erefs(xmldoc, prefix)
78
+ refs = resolve_local_indirect_erefs(xmldoc, refs, prefix)
79
+ refs.empty? and next
80
+ insert_indirect_biblio(xmldoc, refs, prefix)
81
+ end
82
+ end
83
+
84
+ def bibdata_embed_hdr_cleanup(xmldoc)
85
+ (@embed_hdr.nil? || @embed_hdr.empty?) and return
86
+ xmldoc.at("//bibdata") << "<relation type='derivedFrom'>" \
87
+ "#{hdr2bibitem(@embed_hdr.first)}</relation>"
88
+ end
89
+
90
+ def hdr2bibitem(hdr)
91
+ xml = Asciidoctor
92
+ .convert(hdr[:text], backend: hdr2bibitem_type(hdr),
93
+ header_footer: true)
94
+ b = Nokogiri::XML(xml).at("//xmlns:bibdata")
95
+ b.name = "bibitem"
96
+ b.delete("type")
97
+ embed_recurse(b, hdr)
98
+ b.to_xml
99
+ end
100
+
101
+ def hdr2bibitem_type(hdr)
102
+ m = /:mn-document-class: (\S+)/.match(hdr[:text])
103
+ if m then m[1].to_sym
104
+ else Processor.new.asciidoctor_backend
105
+ end
106
+ end
107
+
108
+ def embed_recurse(bibitem, node)
109
+ node[:child].map { |x| hdr2bibitem(x) }.each do |x|
110
+ bibitem << "<relation type='derivedFrom'>#{x}</relation>"
111
+ end
112
+ end
113
+
114
+ def bibdata_embed_id_cleanup(xmldoc)
115
+ @embed_id.nil? and return
116
+ bibdata = xmldoc.at("//bibdata")
117
+ @embed_id.each do |d|
118
+ bibdata = bibdata.at("./relation[@type = 'derivedFrom']/bibitem")
119
+ ident = bibdata.at("./docidentifier[@primary = 'true']") ||
120
+ bibdata.at("./docidentifier")
121
+ xmldoc.xpath("//xref[@target = '#{d}'][normalize-space(text()) = '']")
122
+ .each { |x| x << ident.text }
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -12,6 +12,7 @@ module Metanorma
12
12
  "ancestor::table or ancestor::bibdata)]"].each do |w|
13
13
  inject_id(xmldoc, w)
14
14
  end
15
+ xmldoc.xpath("//p[not(text()) and not(node())]").each(&:remove)
15
16
  end
16
17
 
17
18
  def inject_id(xmldoc, path)
@@ -67,11 +68,10 @@ module Metanorma
67
68
  # examples containing only figures become subfigures of figures
68
69
  def subfigure_cleanup(xmldoc)
69
70
  xmldoc.xpath("//example[figure]").each do |e|
70
- next unless e.elements.reject do |m|
71
+ e.elements.reject do |m|
71
72
  %w(name figure index note).include?(m.name) ||
72
73
  (m.name == "dl" && m["key"] == "true")
73
- end.empty?
74
-
74
+ end.empty? or next
75
75
  e.name = "figure"
76
76
  end
77
77
  end
@@ -100,8 +100,7 @@ module Metanorma
100
100
  # (so there was no way of making that block include the note)
101
101
  def note_cleanup(xmldoc)
102
102
  xmldoc.xpath("//note").each do |n|
103
- next if n["keep-separate"] == "true" || !n.ancestors("table").empty?
104
-
103
+ n["keep-separate"] == "true" || !n.ancestors("table").empty? and next
105
104
  prev = n.previous_element || next
106
105
  n.parent = prev if ELEMS_ALLOW_NOTES.include? prev.name
107
106
  end
@@ -129,7 +128,7 @@ module Metanorma
129
128
 
130
129
  def merge_annotations_into_sourcecode(xmldoc)
131
130
  xmldoc.xpath("//sourcecode").each do |x|
132
- while x&.next_element&.name == "annotation"
131
+ while x.next_element&.name == "annotation"
133
132
  x.next_element.parent = x
134
133
  end
135
134
  end
@@ -143,10 +142,8 @@ module Metanorma
143
142
  def sourcecode_cleanup(xmldoc)
144
143
  xmldoc.xpath("//sourcecode").each do |x|
145
144
  x.traverse do |n|
146
- next unless n.text?
147
- next unless /#{Regexp.escape(@sourcecode_markup_start)}/
148
- .match?(n.text)
149
-
145
+ n.text? or next
146
+ /#{Regexp.escape(@sourcecode_markup_start)}/.match?(n.text) or next
150
147
  n.replace(sourcecode_markup(n))
151
148
  end
152
149
  end
@@ -164,8 +161,7 @@ module Metanorma
164
161
  #{Regexp.escape(@sourcecode_markup_end)})/x)
165
162
  .each_slice(4).map.with_object([]) do |a, acc|
166
163
  acc << safe_noko(a[0], node.document)
167
- next unless a.size == 4
168
-
164
+ a.size == 4 or next
169
165
  acc << Asciidoctor.convert(
170
166
  a[2], doctype: :inline, backend: (self&.backend&.to_sym || :standoc)
171
167
  )
@@ -174,7 +170,7 @@ module Metanorma
174
170
 
175
171
  def form_cleanup(xmldoc)
176
172
  xmldoc.xpath("//select").each do |s|
177
- while s&.next_element&.name == "option"
173
+ while s.next_element&.name == "option"
178
174
  s << s.next_element
179
175
  end
180
176
  end
@@ -200,8 +196,7 @@ module Metanorma
200
196
  end
201
197
 
202
198
  def include_indexterm?(elem)
203
- return false if elem.nil?
204
-
199
+ elem.nil? and return false
205
200
  !%w(image literal sourcecode).include?(elem.name)
206
201
  end
207
202
 
@@ -234,6 +229,14 @@ module Metanorma
234
229
  s.delete("type")
235
230
  end
236
231
  end
232
+
233
+ def unnumbered_blocks_cleanup(xmldoc)
234
+ @blockunnumbered&.each do |b|
235
+ xmldoc.xpath("//#{b}").each do |e|
236
+ e["unnumbered"] ||= "true"
237
+ end
238
+ end
239
+ end
237
240
  end
238
241
  end
239
242
  end
@@ -118,132 +118,47 @@ module Metanorma
118
118
  end
119
119
 
120
120
  def boilerplate(xml, conv)
121
+ # prevent infinite recursion of asciidoc boilerplate processing
122
+ xml.at("//metanorma-extension/semantic-metadata/" \
123
+ "headless[text() = 'true']") and return nil
121
124
  file = boilerplate_file(xml)
122
- @boilerplateauthority and
123
- file = File.join(@localdir, @boilerplateauthority)
125
+ @boilerplateauthority and file = File.join(@localdir,
126
+ @boilerplateauthority)
124
127
  (!file.nil? and File.exist?(file)) or return
125
- conv.populate_template(File.read(file, encoding: "UTF-8"), nil)
128
+ b = conv.populate_template(boilerplate_read(file), nil)
129
+ boilerplate_file_convert(b)
126
130
  end
127
131
 
128
- def bibdata_cleanup(xmldoc)
129
- bibdata_anchor_cleanup(xmldoc)
130
- bibdata_docidentifier_cleanup(xmldoc)
131
- bibdata_embed_hdr_cleanup(xmldoc) # feeds bibdata_embed_id_cleanup
132
- bibdata_embed_id_cleanup(xmldoc)
133
- biblio_indirect_erefs(xmldoc, @internal_eref_namespaces&.uniq)
132
+ def boilerplate_read(file)
133
+ ret = File.read(file, encoding: "UTF-8")
134
+ /\.adoc$/.match?(file) and
135
+ ret.gsub!(/(?<!\{)(\{\{[^{}]+\}\})(?!\})/, "pass:[\\1]")
136
+ ret
134
137
  end
135
138
 
136
- def bibdata_anchor_cleanup(xmldoc)
137
- xmldoc.xpath("//bibdata//bibitem | //bibdata//note").each do |b|
138
- b.delete("id")
139
- end
140
- end
141
-
142
- def bibdata_docidentifier_cleanup(xmldoc)
143
- ins = xmldoc.at("//bibdata/docidentifier")
144
- xmldoc.xpath("//bibdata/docidentifier").each_with_index do |b, i|
145
- i.zero? and next
146
- ins.next = b.remove
147
- ins = ins.next
148
- end
149
- end
150
-
151
- def gather_indirect_erefs(xmldoc, prefix)
152
- xmldoc.xpath("//eref[@type = '#{prefix}']")
153
- .each_with_object({}) do |e, m|
154
- e.delete("type")
155
- m[e["bibitemid"]] = true
156
- end.keys
157
- end
158
-
159
- def insert_indirect_biblio(xmldoc, refs, prefix)
160
- i = xmldoc.at("bibliography") or
161
- xmldoc.root << "<bibliography/>" and i = xmldoc.at("bibliography")
162
- i = i.add_child("<references hidden='true' normative='false'/>").first
163
- refs.each do |x|
164
- i << <<~BIB
165
- <bibitem id="#{x}" type="internal">
166
- <docidentifier type="repository">#{x.sub(/^#{prefix}_/, "#{prefix}/")}</docidentifier>
167
- </bibitem>
168
- BIB
169
- end
170
- end
171
-
172
- def indirect_eref_to_xref(eref, ident)
173
- loc = eref.at("./localityStack[locality[@type = 'anchor']]")
174
- &.remove&.text ||
175
- eref.at("./locality[@type = 'anchor']")&.remove&.text || ident
176
- eref.name = "xref"
177
- eref.delete("bibitemid")
178
- eref.delete("citeas")
179
- eref["target"] = loc
180
- unless eref.document.at("//*[@id = '#{loc}']")
181
- eref.children = %(** Missing target #{loc})
182
- eref["target"] = ident
183
- end
184
- end
185
-
186
- def resolve_local_indirect_erefs(xmldoc, refs, prefix)
187
- refs.each_with_object([]) do |r, m|
188
- id = r.sub(/^#{prefix}_/, "")
189
- n = xmldoc.at("//*[@id = '#{id}']")
190
- if n&.at("./ancestor-or-self::*[@type = '#{prefix}']")
191
- xmldoc.xpath("//eref[@bibitemid = '#{r}']").each do |e|
192
- indirect_eref_to_xref(e, id)
193
- end
194
- else m << r
195
- end
196
- end
197
- end
198
-
199
- def biblio_indirect_erefs(xmldoc, prefixes)
200
- prefixes&.each do |prefix|
201
- refs = gather_indirect_erefs(xmldoc, prefix)
202
- refs = resolve_local_indirect_erefs(xmldoc, refs, prefix)
203
- refs.empty? and next
204
- insert_indirect_biblio(xmldoc, refs, prefix)
205
- end
206
- end
207
-
208
- def bibdata_embed_hdr_cleanup(xmldoc)
209
- (@embed_hdr.nil? || @embed_hdr.empty?) and return
210
- xmldoc.at("//bibdata") << "<relation type='derivedFrom'>" \
211
- "#{hdr2bibitem(@embed_hdr.first)}</relation>"
212
- end
213
-
214
- def hdr2bibitem(hdr)
215
- xml = Asciidoctor
216
- .convert(hdr[:text], backend: hdr2bibitem_type(hdr),
217
- header_footer: true)
218
- b = Nokogiri::XML(xml).at("//xmlns:bibdata")
219
- b.name = "bibitem"
220
- b.delete("type")
221
- embed_recurse(b, hdr)
222
- b.to_xml
223
- end
224
-
225
- def hdr2bibitem_type(hdr)
226
- m = /:mn-document-class: (\S+)/.match(hdr[:text])
227
- if m then m[1].to_sym
228
- else Processor.new.asciidoctor_backend
229
- end
139
+ # If Asciidoctor, convert top clauses to tags and wrap in <boilerplate>
140
+ def boilerplate_file_convert(file)
141
+ Nokogiri::XML(file).root and return file
142
+ to_xml(boilerplate_file_restructure(file))
230
143
  end
231
144
 
232
- def embed_recurse(bibitem, node)
233
- node[:child].map { |x| hdr2bibitem(x) }.each do |x|
234
- bibitem << "<relation type='derivedFrom'>#{x}</relation>"
145
+ # If Asciidoctor, convert top clauses to tags and wrap in <boilerplate>
146
+ def boilerplate_file_restructure(file)
147
+ ret = adoc2xml(file, backend.to_sym)
148
+ ns = ret.namespace.href
149
+ ret.traverse do |n|
150
+ n.element? and n.namespace.href == ns and n.namespace = nil
235
151
  end
152
+ ret.name = "boilerplate"
153
+ boilerplate_top_elements(ret)
154
+ ret
236
155
  end
237
156
 
238
- def bibdata_embed_id_cleanup(xmldoc)
239
- @embed_id.nil? and return
240
- bibdata = xmldoc.at("//bibdata")
241
- @embed_id.each do |d|
242
- bibdata = bibdata.at("./relation[@type = 'derivedFrom']/bibitem")
243
- ident = bibdata.at("./docidentifier[@primary = 'true']") ||
244
- bibdata.at("./docidentifier")
245
- xmldoc.xpath("//xref[@target = '#{d}'][normalize-space(text()) = '']")
246
- .each { |x| x << ident.text }
157
+ def boilerplate_top_elements(xml)
158
+ xml.elements.each do |e|
159
+ (t = e.at("./title") and /-statement$/.match?(t.text)) or next
160
+ e.name = t.remove.text
161
+ e.keys.each { |a| e.delete(a) } # rubocop:disable Style/HashEachMethods
247
162
  end
248
163
  end
249
164
  end
@@ -26,6 +26,7 @@ module Metanorma
26
26
  preprocessor Metanorma::Plugin::Datastruct::Json2TextPreprocessor
27
27
  preprocessor Metanorma::Plugin::Datastruct::Yaml2TextPreprocessor
28
28
  inline_macro Metanorma::Standoc::PreferredTermInlineMacro
29
+ inline_macro Metanorma::Standoc::DateInlineMacro
29
30
  inline_macro Metanorma::Standoc::SpanInlineMacro
30
31
  inline_macro Metanorma::Standoc::AltTermInlineMacro
31
32
  inline_macro Metanorma::Standoc::AdmittedTermInlineMacro
@@ -1012,6 +1012,7 @@
1012
1012
  <ref name="del"/>
1013
1013
  <ref name="span"/>
1014
1014
  <ref name="erefstack"/>
1015
+ <ref name="date_inline"/>
1015
1016
  </choice>
1016
1017
  </define>
1017
1018
  <define name="add">
@@ -1053,6 +1054,23 @@
1053
1054
  </oneOrMore>
1054
1055
  </element>
1055
1056
  </define>
1057
+ <define name="date_inline">
1058
+ <element name="date">
1059
+ <attribute name="value"/>
1060
+ <optional>
1061
+ <attribute name="format"/>
1062
+ </optional>
1063
+ <optional>
1064
+ <attribute name="language"/>
1065
+ </optional>
1066
+ <optional>
1067
+ <attribute name="script"/>
1068
+ </optional>
1069
+ <optional>
1070
+ <attribute name="locale"/>
1071
+ </optional>
1072
+ </element>
1073
+ </define>
1056
1074
  <define name="concept">
1057
1075
  <element name="concept">
1058
1076
  <optional>
@@ -27,7 +27,7 @@ module Metanorma
27
27
 
28
28
  def process(_parent, target, attr)
29
29
  args = preprocess_attrs(attr) or return
30
- ret = "<index-xref also='#{target == 'also'}'>"\
30
+ ret = "<index-xref also='#{target == 'also'}'>" \
31
31
  "<primary>#{args[:primary]}</primary>"
32
32
  ret += "<secondary>#{args[:secondary]}</secondary>" if args[:secondary]
33
33
  ret += "<tertiary>#{args[:tertiary]}</tertiary>" if args[:tertiary]
@@ -69,7 +69,7 @@ module Metanorma
69
69
  rpend = attributes["rpend"]
70
70
  end
71
71
 
72
- "<ruby>#{target}<rp>#{rpbegin}</rp><rt>#{rt}</rt>"\
72
+ "<ruby>#{target}<rp>#{rpbegin}</rp><rt>#{rt}</rt>" \
73
73
  "<rp>#{rpend}</rp></ruby>"
74
74
  end
75
75
  end
@@ -101,6 +101,18 @@ module Metanorma
101
101
  end
102
102
  end
103
103
 
104
+ class DateInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
105
+ use_dsl
106
+ named :date
107
+ using_format :short
108
+
109
+ def process(_parent, _target, attrs)
110
+ format = "%F"
111
+ attrs.size >= 2 and format = attrs[2]
112
+ %{<date format='#{format}' value='#{attrs[1]}'/>}
113
+ end
114
+ end
115
+
104
116
  class AddMacro < Asciidoctor::Extensions::InlineMacroProcessor
105
117
  use_dsl
106
118
  named :add
@@ -5,7 +5,7 @@ module Metanorma
5
5
  class Processor < Metanorma::Processor
6
6
  class << self
7
7
  attr_reader :asciidoctor_backend
8
- end
8
+ end
9
9
 
10
10
  def initialize # rubocop:disable Lint/MissingSuper
11
11
  @short = :standoc
@@ -22,7 +22,7 @@ module Metanorma
22
22
  end
23
23
 
24
24
  def version
25
- "Metanorma::Standoc #{Metanorma::Standoc::VERSION}/"\
25
+ "Metanorma::Standoc #{Metanorma::Standoc::VERSION}/" \
26
26
  "IsoDoc #{IsoDoc::VERSION}"
27
27
  end
28
28
 
@@ -35,7 +35,7 @@ module Metanorma
35
35
 
36
36
  xml_table.colgroup do |cg|
37
37
  node.columns.each do |col|
38
- cg.col **{ width: "#{col.attr 'colpcwidth'}%" }
38
+ cg.col width: "#{col.attr 'colpcwidth'}%"
39
39
  end
40
40
  end
41
41
  end
@@ -76,6 +76,17 @@ module Metanorma
76
76
  .gsub(/&apos;/, "'")
77
77
  end
78
78
 
79
+ # wrapped in <sections>
80
+ def adoc2xml(text, flavour)
81
+ Nokogiri::XML(text).root and return text
82
+ c = Asciidoctor.convert("= X\nA\n:semantic-metadata-headless: true\n" \
83
+ ":novalid:\n\n#{text}\n",
84
+ backend: flavour, header_footer: true)
85
+ Nokogiri::XML(c).at("//xmlns:sections")
86
+ end
87
+
88
+ module_function :adoc2xml
89
+
79
90
  class EmptyAttr
80
91
  def attr(_any_attribute)
81
92
  nil
@@ -122,7 +122,7 @@ module Metanorma
122
122
  err2 = "There is a crossreference to an instance of #{inner.name} " \
123
123
  "nested within #{outer.name}: #{i.to_xml}"
124
124
  @log.add("Style", i, err2)
125
- @fatalerror << err2
125
+ # @fatalerror << err2
126
126
  end
127
127
 
128
128
  def concept_validate(doc, tag, refterm)
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "2.4.4".freeze
22
+ VERSION = "2.4.6".freeze
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-standoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.4
4
+ version: 2.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-22 00:00:00.000000000 Z
11
+ date: 2023-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -475,6 +475,7 @@ files:
475
475
  - lib/metanorma/standoc/cleanup.rb
476
476
  - lib/metanorma/standoc/cleanup_amend.rb
477
477
  - lib/metanorma/standoc/cleanup_asciibib.rb
478
+ - lib/metanorma/standoc/cleanup_bibdata.rb
478
479
  - lib/metanorma/standoc/cleanup_block.rb
479
480
  - lib/metanorma/standoc/cleanup_boilerplate.rb
480
481
  - lib/metanorma/standoc/cleanup_footnotes.rb