metanorma-standoc 2.8.5 → 2.8.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: c543029f3b14b657d9688b9fd220df2a476c0d34a50eafd89bc7a94342a59fe0
4
- data.tar.gz: 6c84b411e9fd00947893827f821a63f6877b3fab227873611fe76e6793776bf5
3
+ metadata.gz: 26ef7eeadddd66ca86125ae72f91a3e920057ad5ed1e8f0e1e5670f831355d0b
4
+ data.tar.gz: e1d1e42f6d4962d11ab86421fec3fc2877480e33fdac9aabcc4bd478fd3cc2df
5
5
  SHA512:
6
- metadata.gz: eb65532e33f4114c5a268094f26053338b5dc56911f1801d3a78b4f61b6f1e9ed5d5689d2a6cf22a02d2c06266fb1758a809edf078c353933222c4fd64eba552
7
- data.tar.gz: 9b2b1c7bd047da5dc81128e00f04da4b4f9e735699e542568665577167889ad9b671bad82fa72b4147f85a3263aa7a6e2923b1b444fe33f97e48f62c0bd9e0d8
6
+ metadata.gz: 4a014a7cbc4f3665f07322713d0edad6dbd42301eb3b0e548a78efd116f7c6da4b7359db4f26e3cbc50315cdbdad99169997493fa792000b6f36e63c49c8ace1
7
+ data.tar.gz: 25f39be9f0df10ecdfaea29ecdf2e1cf8a50789f80fce1cf6fa71cd23beb1a69f6b890e2ca69527bc486091631281cce5926f3b3ec743bdbbfb24b9c7d195264
@@ -31,10 +31,11 @@ module Metanorma
31
31
 
32
32
  def inline_anchor_xref_attrs(node)
33
33
  text = concatenate_attributes_to_xref_text(node)
34
- m = inline_anchor_xref_match(text)
35
34
  t = node.target.gsub(/^#/, "").gsub(%r{(\.xml|\.adoc)(#.*$)}, "\\2")
36
- m.nil? and return { target: t, type: "inline", text: text }
37
- inline_anchor_xref_attrs1(m, t, text)
35
+ attrs, text = inline_anchor_xref_match(text)
36
+ attrs.empty? and
37
+ return { target: t, type: "inline", text: text, style: @xrefstyle }
38
+ inline_anchor_xref_attrs1(attrs, t, text)
38
39
  end
39
40
 
40
41
  def concatenate_attributes_to_xref_text(node)
@@ -44,20 +45,29 @@ module Metanorma
44
45
  end.map { |x| x.sub(/%+/, "%") }.join + (node.text || "")
45
46
  end
46
47
 
47
- def inline_anchor_xref_attrs1(match, target, text)
48
- { target: target, hidden: match[:hidden],
49
- type: match[:fn].nil? ? "inline" : "footnote",
50
- case: match[:case]&.sub(/%$/, ""),
51
- style: match[:style] || @xrefstyle,
52
- droploc: match[:drop].nil? && match[:drop2].nil? ? nil : true,
53
- text: inline_anchor_xref_text(match, text) }
48
+ def inline_anchor_xref_attrs1(attrs, target, text)
49
+ { target: target, hidden: attrs["hidden"],
50
+ type: attrs.key?("fn") ? "footnote" : "inline",
51
+ case: %w(capital lowercase).detect { |x| attrs.key?(x) },
52
+ label: attrs["label"],
53
+ style: attrs["style"] || @xrefstyle,
54
+ droploc: attrs.key?("droploc") ? true : nil,
55
+ text: text }.compact
54
56
  end
55
57
 
58
+ XREF_ATTRS = "hidden|style|droploc|capital|lowercase|label".freeze
59
+
56
60
  def inline_anchor_xref_match(text)
57
- /^(?:hidden%(?<hidden>[^,]+),?)?
58
- (?:style=(?<style>[^%]+)%)?
59
- (?<drop>droploc%)?(?<case>capital%|lowercase%)?(?<drop2>droploc%)?
60
- (?<fn>fn:?\s*)?(?<text>.*)$/x.match text
61
+ attrs = {}
62
+ while m = /^(#{XREF_ATTRS})(=[^%]+)?%(.*)$/o.match(text)
63
+ text = m[3]
64
+ attrs[m[1]] = m[2]&.sub(/^=/, "")
65
+ end
66
+ if m = /^(fn:?\s*)(\S.*)?$/.match(text)
67
+ text = m[2]
68
+ attrs["fn"] = ""
69
+ end
70
+ [attrs, text]
61
71
  end
62
72
 
63
73
  def inline_anchor_xref_text(match, text)
@@ -208,7 +208,9 @@
208
208
  </define>
209
209
  <define name="roledescription">
210
210
  <element name="description">
211
- <ref name="FormattedString"/>
211
+ <oneOrMore>
212
+ <ref name="TextElement"/>
213
+ </oneOrMore>
212
214
  </element>
213
215
  </define>
214
216
  <define name="person">
@@ -333,7 +335,9 @@
333
335
  </define>
334
336
  <define name="affiliationdescription">
335
337
  <element name="description">
336
- <ref name="FormattedString"/>
338
+ <oneOrMore>
339
+ <ref name="TextElement"/>
340
+ </oneOrMore>
337
341
  </element>
338
342
  </define>
339
343
  <define name="organization">
@@ -897,7 +901,9 @@
897
901
  </define>
898
902
  <define name="formattedref">
899
903
  <element name="formattedref">
900
- <ref name="FormattedString"/>
904
+ <oneOrMore>
905
+ <ref name="TextElement"/>
906
+ </oneOrMore>
901
907
  </element>
902
908
  </define>
903
909
  <define name="license">
@@ -942,7 +948,9 @@
942
948
  <optional>
943
949
  <attribute name="type"/>
944
950
  </optional>
945
- <ref name="FormattedString"/>
951
+ <zeroOrMore>
952
+ <ref name="TextElement"/>
953
+ </zeroOrMore>
946
954
  </define>
947
955
  <!-- TitleType = ( "alternative" | "original" | "unofficial" | "subtitle" | "main" ) -->
948
956
  <define name="TypedUri">
@@ -1042,7 +1050,9 @@
1042
1050
  <optional>
1043
1051
  <attribute name="script"/>
1044
1052
  </optional>
1045
- <text/>
1053
+ <oneOrMore>
1054
+ <ref name="TextElement"/>
1055
+ </oneOrMore>
1046
1056
  </element>
1047
1057
  </define>
1048
1058
  <define name="docnumber">
@@ -1267,12 +1277,16 @@
1267
1277
  <optional>
1268
1278
  <attribute name="type"/>
1269
1279
  </optional>
1270
- <ref name="FormattedString"/>
1280
+ <oneOrMore>
1281
+ <ref name="TextElement"/>
1282
+ </oneOrMore>
1271
1283
  </element>
1272
1284
  </define>
1273
1285
  <define name="bibabstract">
1274
1286
  <element name="abstract">
1275
- <ref name="FormattedString"/>
1287
+ <oneOrMore>
1288
+ <ref name="TextElement"/>
1289
+ </oneOrMore>
1276
1290
  </element>
1277
1291
  </define>
1278
1292
  <define name="copyright">
@@ -1377,7 +1391,9 @@
1377
1391
  </attribute>
1378
1392
  <optional>
1379
1393
  <element name="description">
1380
- <ref name="FormattedString"/>
1394
+ <oneOrMore>
1395
+ <ref name="TextElement"/>
1396
+ </oneOrMore>
1381
1397
  </element>
1382
1398
  </optional>
1383
1399
  <element name="bibitem">
@@ -36,7 +36,8 @@ module Metanorma
36
36
 
37
37
  def figure_attrs(node)
38
38
  attr_code(id_unnum_attrs(node).merge(keep_attrs(node))
39
- .merge(class: node.attr("class")))
39
+ .merge(class: node.attr("class"),
40
+ width: node.attr("width")))
40
41
  end
41
42
 
42
43
  def image(node)
@@ -1,4 +1,5 @@
1
1
  require "vectory"
2
+ require "crass"
2
3
 
3
4
  module Metanorma
4
5
  module Standoc
@@ -30,8 +31,7 @@ module Metanorma
30
31
  def svgmap_moveattrs1(svgmap, figure)
31
32
  %w(unnumbered number subsequence keep-with-next
32
33
  keep-lines-together tag multilingual-rendering).each do |a|
33
- next if figure[a] || !svgmap[a]
34
-
34
+ figure[a] || !svgmap[a] and next
35
35
  figure[a] = svgmap[a]
36
36
  svgmap.delete(a)
37
37
  end
@@ -43,7 +43,7 @@ module Metanorma
43
43
  s.children.remove
44
44
  f = s1.at(".//figure") and s << f
45
45
  s1.xpath(".//li").each do |li|
46
- t = li&.at(".//eref | .//link | .//xref") or next
46
+ t = li.at(".//eref | .//link | .//xref") or next
47
47
  href = t.xpath("./following-sibling::node()")
48
48
  href.empty? or
49
49
  s << %[<target href="#{svgmap_target(href)}">#{t.to_xml}</target>]
@@ -53,8 +53,7 @@ module Metanorma
53
53
 
54
54
  def svgmap_target(nodeset)
55
55
  nodeset.each do |n|
56
- next unless n.name == "link"
57
-
56
+ n.name == "link" or next
58
57
  n.children = n["target"]
59
58
  end
60
59
  nodeset.text.sub(/^[,; ]/, "").strip
@@ -69,13 +68,17 @@ module Metanorma
69
68
  end
70
69
  end
71
70
  end
72
- svg_uniqueids(xmldoc)
71
+ svg_cleanup(xmldoc)
73
72
  xmldoc
74
73
  end
75
74
 
76
- def read_in_if_svg(img, localdir)
77
- return false unless img["src"]
75
+ def svg_cleanup(xmldoc)
76
+ svg_uniqueids(xmldoc)
77
+ svg_classupdate(xmldoc)
78
+ end
78
79
 
80
+ def read_in_if_svg(img, localdir)
81
+ img["src"] or return false
79
82
  path = Vectory::Utils.svgmap_rewrite0_path(img["src"], localdir)
80
83
  File.file?(path) or return false
81
84
  types = MIME::Types.type_for(path) or return false
@@ -85,6 +88,31 @@ module Metanorma
85
88
  true
86
89
  end
87
90
 
91
+ def svg_classupdate(xmldoc)
92
+ xmldoc.xpath("//m:svg[m:style]", "m" => SVG_NS)
93
+ .each_with_index do |s, i|
94
+ svg_classupdate1(s, s.at("./m:style", "m" => SVG_NS), i)
95
+ end
96
+ end
97
+
98
+ def svg_classupdate1(svg, style, idx)
99
+ tree = Crass.parse(style.text)
100
+ tree.each { |n| svg_suffix_css_style(n, idx) }
101
+ style.children = Crass::Parser.stringify(tree)
102
+ svg.xpath(".//*[@class]").each do |n|
103
+ n["class"] = n["class"].split(/\s+/)
104
+ .map { |x| "#{x}_inject_#{idx}" }.join(" ")
105
+ end
106
+ end
107
+
108
+ def svg_suffix_css_style(node, idx)
109
+ node[:node] == :style_rule && /\./.match?(node[:selector][:value]) or
110
+ return
111
+ v = node[:selector][:value]
112
+ .gsub(/([^.\s]*\.\S+)/, "\\1_inject_#{idx}")
113
+ node[:selector] = Crass.parse("#{v} {}").first[:selector]
114
+ end
115
+
88
116
  IRI_TAG_PROPERTIES_MAP = {
89
117
  clipPath: ["clip-path"],
90
118
  "color-profile": nil,
@@ -111,13 +139,12 @@ module Metanorma
111
139
 
112
140
  def svg_iri_properties(id_elems)
113
141
  iri_tag_names = id_elems.each_with_object([]) do |e, m|
114
- IRI_TAG_PROPERTIES_MAP.key?(e.name.to_sym) and m = m << e.name
142
+ IRI_TAG_PROPERTIES_MAP.key?(e.name.to_sym) and m << e.name
115
143
  end.uniq
116
144
  iri_properties = iri_tag_names.each_with_object([]) do |t, m|
117
145
  (IRI_TAG_PROPERTIES_MAP[t.to_sym] || [t]).each { |t1| m = m << t1 }
118
146
  end.uniq
119
- return [] if iri_properties.empty?
120
-
147
+ iri_properties.empty? and return []
121
148
  iri_properties << "style"
122
149
  end
123
150
 
@@ -132,8 +159,7 @@ module Metanorma
132
159
 
133
160
  def svg_uniqueids2(svg, iri_properties, idx, ids)
134
161
  svg.traverse do |e|
135
- next unless e.element?
136
-
162
+ e.element? or next
137
163
  if e.name == "style"
138
164
  svg_styleupdate(e, idx, ids)
139
165
  elsif !e.attributes.empty?
@@ -158,8 +184,7 @@ module Metanorma
158
184
 
159
185
  def svg_attrupdate(elem, iri_properties, idx, ids)
160
186
  iri_properties.each do |p|
161
- next unless elem[p]
162
-
187
+ elem[p] or next
163
188
  elem[p] = svg_update_url(elem[p], idx, ids)
164
189
  end
165
190
  end
@@ -167,17 +192,15 @@ module Metanorma
167
192
  def svg_linkupdate(elem, idx, ids)
168
193
  %w(xlink:href href).each do |ref|
169
194
  iri = elem[ref]&.strip
170
- next unless /^#/.match?(iri)
171
- next unless ids[iri.sub(/^#/, "")]
172
-
195
+ /^#/.match?(iri) or next
196
+ ids[iri.sub(/^#/, "")] or next
173
197
  elem[ref] += "_inject_#{idx}"
174
198
  end
175
199
  end
176
200
 
177
201
  def svg_idupdate(elem, idx, ids)
178
- return unless elem["id"]
179
- return unless ids[elem["id"]]
180
-
202
+ elem["id"] or return
203
+ ids[elem["id"]] or return
181
204
  elem["id"] += "_inject_#{idx}"
182
205
  end
183
206
  end
@@ -97,8 +97,7 @@ module Metanorma
97
97
  def make_annexes(xml)
98
98
  xml.xpath("//*[@annex]").each do |y|
99
99
  y.delete("annex")
100
- next if y.name == "annex" || !y.ancestors("annex").empty?
101
-
100
+ y.name == "annex" || !y.ancestors("annex").empty? and next
102
101
  y.wrap("<annex/>")
103
102
  y.parent["id"] = "_#{UUIDTools::UUID.random_create}"
104
103
  y.parent["obligation"] = y["obligation"]
@@ -117,8 +116,7 @@ module Metanorma
117
116
 
118
117
  def sections_level_cleanup(xml)
119
118
  m = maxlevel(xml)
120
- return if m < 6
121
-
119
+ m < 6 and return
122
120
  m.downto(6).each do |l|
123
121
  xml.xpath("//clause[@level = '#{l}']").each do |c|
124
122
  c.delete("level")
@@ -173,7 +171,7 @@ module Metanorma
173
171
  r["obligation"] = "normative" unless r["obligation"]
174
172
  end
175
173
  xml.xpath(Utils::SUBCLAUSE_XPATH).each do |r|
176
- o = r&.at("./ancestor::*/@obligation")&.text and r["obligation"] = o
174
+ o = r.at("./ancestor::*/@obligation")&.text and r["obligation"] = o
177
175
  end
178
176
  end
179
177
 
@@ -183,8 +181,7 @@ module Metanorma
183
181
  end
184
182
 
185
183
  def preface_clausebefore_cleanup(xmldoc)
186
- return unless xmldoc.at("//preface")
187
-
184
+ xmldoc.at("//preface") or return
188
185
  ins = insert_before(xmldoc, "//preface")
189
186
  xmldoc.xpath("//preface//*[@beforeclauses = 'true']").each do |x|
190
187
  x.delete("beforeclauses")
@@ -232,9 +229,8 @@ module Metanorma
232
229
  loop do
233
230
  found = false
234
231
  xmldoc.xpath("//floating-title").each do |t|
235
- next unless t.next_element.nil?
236
- next if %w(sections annex preface).include? t.parent.name
237
-
232
+ t.next_element.nil? or next
233
+ %w(sections annex preface).include? t.parent.name and next
238
234
  t.parent.next = t
239
235
  found = true
240
236
  end
@@ -16,22 +16,32 @@ module Metanorma
16
16
  text or return
17
17
  doc.xpath(xpath).each_with_index do |node, i|
18
18
  first && !i.zero? and next
19
+ node["keeptitle"] == "true" and next
19
20
  title = get_or_make_title(node)
20
- fn = title.xpath("./fn | ./bookmark")
21
- fn.each(&:remove)
22
- title.children = text
23
- fn.each { |n| title << n }
21
+ set_title_with_footnotes(title, text)
24
22
  end
25
23
  end
26
24
 
25
+ def set_title_with_footnotes(title, text)
26
+ fn = title.xpath("./fn | ./bookmark | ./index")
27
+ fn.each(&:remove)
28
+ title.children = text
29
+ fn.each { |n| title << n }
30
+ end
31
+
27
32
  def sections_names_cleanup(xml)
28
33
  replace_title(xml, "//clause[@type = 'scope']", @i18n&.scope)
34
+ sections_names_pref_cleanup(xml)
35
+ section_names_refs_cleanup(xml)
36
+ section_names_terms_cleanup(xml)
37
+ xml.xpath("//*[@keeptitle]").each { |s| s.delete("keeptitle") }
38
+ end
39
+
40
+ def sections_names_pref_cleanup(xml)
29
41
  replace_title(xml, "//preface//abstract", @i18n&.abstract)
30
42
  replace_title(xml, "//foreword", @i18n&.foreword)
31
43
  replace_title(xml, "//introduction", @i18n&.introduction)
32
44
  replace_title(xml, "//acknowledgements", @i18n&.acknowledgements)
33
- section_names_refs_cleanup(xml)
34
- section_names_terms_cleanup(xml)
35
45
  end
36
46
 
37
47
  def section_names_refs_cleanup(xml)
@@ -82,11 +92,8 @@ module Metanorma
82
92
  @i18n&.termsdefsymbolsabbrev, true)
83
93
  replace_title(xml, "//terms#{NO_SYMABBR} | //clause[.//terms]#{NO_SYMABBR}",
84
94
  @i18n&.termsdefsymbolsabbrev, true)
85
- replace_title(
86
- xml,
87
- "//terms[not(.//definitions)] | //clause[.//terms][not(.//definitions)]",
88
- @i18n&.termsdef, true
89
- )
95
+ replace_title(xml, "//terms[not(.//definitions)] | //clause[.//terms][not(.//definitions)]",
96
+ @i18n&.termsdef, true)
90
97
  end
91
98
 
92
99
  # do not auto-name terms sections if there are terms subclauses
@@ -10,7 +10,7 @@ module Metanorma
10
10
  module Front
11
11
  def metadata_id(node, xml)
12
12
  id = node.attr("docidentifier") || metadata_id_build(node)
13
- xml.docidentifier id
13
+ xml.docidentifier id, primary: "true"
14
14
  end
15
15
 
16
16
  def metadata_id_build(node)
@@ -156,44 +156,7 @@
156
156
  </define>
157
157
  <define name="xref">
158
158
  <element name="xref">
159
- <attribute name="target">
160
- <data type="string">
161
- <param name="pattern">\i\c*|\c+#\c+</param>
162
- </data>
163
- </attribute>
164
- <optional>
165
- <attribute name="to">
166
- <data type="string">
167
- <param name="pattern">\i\c*|\c+#\c+</param>
168
- </data>
169
- </attribute>
170
- </optional>
171
- <optional>
172
- <attribute name="type">
173
- <ref name="ReferenceFormat"/>
174
- </attribute>
175
- </optional>
176
- <optional>
177
- <attribute name="alt"/>
178
- </optional>
179
- <optional>
180
- <attribute name="case">
181
- <choice>
182
- <value>capital</value>
183
- <value>lowercase</value>
184
- </choice>
185
- </attribute>
186
- </optional>
187
- <optional>
188
- <attribute name="droploc">
189
- <data type="boolean"/>
190
- </attribute>
191
- </optional>
192
- <optional>
193
- <attribute name="style">
194
- <ref name="XrefStyleType"/>
195
- </attribute>
196
- </optional>
159
+ <ref name="XrefAttributes"/>
197
160
  <ref name="XrefBody"/>
198
161
  </element>
199
162
  </define>
@@ -407,23 +370,7 @@
407
370
  </define>
408
371
  <define name="figure">
409
372
  <element name="figure">
410
- <attribute name="id">
411
- <data type="ID"/>
412
- </attribute>
413
- <optional>
414
- <attribute name="unnumbered">
415
- <data type="boolean"/>
416
- </attribute>
417
- </optional>
418
- <optional>
419
- <attribute name="number"/>
420
- </optional>
421
- <optional>
422
- <attribute name="subsequence"/>
423
- </optional>
424
- <optional>
425
- <attribute name="class"/>
426
- </optional>
373
+ <ref name="FigureAttributes"/>
427
374
  <ref name="BlockAttributes"/>
428
375
  <optional>
429
376
  <ref name="tname"/>
@@ -2450,6 +2397,49 @@
2450
2397
  </zeroOrMore>
2451
2398
  </element>
2452
2399
  </define>
2400
+ <define name="XrefAttributes">
2401
+ <attribute name="target">
2402
+ <data type="string">
2403
+ <param name="pattern">\i\c*|\c+#\c+</param>
2404
+ </data>
2405
+ </attribute>
2406
+ <optional>
2407
+ <attribute name="to">
2408
+ <data type="string">
2409
+ <param name="pattern">\i\c*|\c+#\c+</param>
2410
+ </data>
2411
+ </attribute>
2412
+ </optional>
2413
+ <optional>
2414
+ <attribute name="type">
2415
+ <ref name="ReferenceFormat"/>
2416
+ </attribute>
2417
+ </optional>
2418
+ <optional>
2419
+ <attribute name="alt"/>
2420
+ </optional>
2421
+ <optional>
2422
+ <attribute name="case">
2423
+ <choice>
2424
+ <value>capital</value>
2425
+ <value>lowercase</value>
2426
+ </choice>
2427
+ </attribute>
2428
+ </optional>
2429
+ <optional>
2430
+ <attribute name="droploc">
2431
+ <data type="boolean"/>
2432
+ </attribute>
2433
+ </optional>
2434
+ <optional>
2435
+ <attribute name="style">
2436
+ <ref name="XrefStyleType"/>
2437
+ </attribute>
2438
+ </optional>
2439
+ <optional>
2440
+ <attribute name="label"/>
2441
+ </optional>
2442
+ </define>
2453
2443
  <define name="XrefBody">
2454
2444
  <zeroOrMore>
2455
2445
  <ref name="XrefTarget"/>
@@ -2528,6 +2518,28 @@
2528
2518
  <attribute name="columns"/>
2529
2519
  </optional>
2530
2520
  </define>
2521
+ <define name="FigureAttributes">
2522
+ <attribute name="id">
2523
+ <data type="ID"/>
2524
+ </attribute>
2525
+ <optional>
2526
+ <attribute name="unnumbered">
2527
+ <data type="boolean"/>
2528
+ </attribute>
2529
+ </optional>
2530
+ <optional>
2531
+ <attribute name="number"/>
2532
+ </optional>
2533
+ <optional>
2534
+ <attribute name="subsequence"/>
2535
+ </optional>
2536
+ <optional>
2537
+ <attribute name="class"/>
2538
+ </optional>
2539
+ <optional>
2540
+ <attribute name="width"/>
2541
+ </optional>
2542
+ </define>
2531
2543
  <start>
2532
2544
  <ref name="standard-document"/>
2533
2545
  </start>
@@ -201,7 +201,13 @@ module Metanorma
201
201
  using_format :short
202
202
 
203
203
  def process(parent, _target, attrs)
204
- create_anchor(parent, "hidden%#{attrs['text']}",
204
+ t = attrs["text"]
205
+ t = if /,/.match?(t)
206
+ t.sub(/,/, "%")
207
+ else
208
+ "#{t}%"
209
+ end
210
+ create_anchor(parent, "hidden=#{t}",
205
211
  type: :xref, target: "_#{UUIDTools::UUID.random_create}")
206
212
  end
207
213
  end
@@ -10,9 +10,8 @@ module Metanorma
10
10
  @norm_ref = false
11
11
 
12
12
  def sectiontype1(node)
13
- return "abstract" if node.attr("style") == "abstract"
14
-
15
- node&.attr("heading")&.downcase ||
13
+ node.attr("style") == "abstract" and return "abstract"
14
+ node.attr("heading")&.downcase ||
16
15
  node.title
17
16
  .gsub(%r{<index>.*?</index>}m, "")
18
17
  .gsub(%r{<fn[^>]*>.*?</fn>}m, "")
@@ -25,7 +24,7 @@ module Metanorma
25
24
  ret = sectiontype1(node)
26
25
  ret1 = preface_main_filter(sectiontype_streamline(ret), node)
27
26
  ret1 == "symbols and abbreviated terms" and return ret1
28
- !level || node.level == 1 or return nil
27
+ !level || node.level == 1 || node.attr("heading") or return nil
29
28
  @seen_headers.include? ret and return nil
30
29
  @seen_headers << ret unless ret1.nil?
31
30
  @seen_headers_canonical << ret1 unless ret1.nil?
@@ -59,9 +58,12 @@ module Metanorma
59
58
  ["normative references", "terms and definitions", "scope",
60
59
  "symbols and abbreviated terms", "clause", "bibliography"].freeze
61
60
 
62
- def start_main_section(ret, node)
63
- return if node.role == "preface" || node.attr("style") == "preface"
61
+ def role_style(node, value)
62
+ node.role == value || node.attr("style") == value
63
+ end
64
64
 
65
+ def start_main_section(ret, node)
66
+ role_style(node, "preface") and return
65
67
  @preface = false if self.class::MAIN_CLAUSE_NAMES.include?(ret)
66
68
  @preface = false if self.class::PREFACE_CLAUSE_NAMES
67
69
  .intersection(@seen_headers_canonical + [ret]).empty?
@@ -79,29 +81,20 @@ module Metanorma
79
81
  end
80
82
 
81
83
  def section_attributes(node)
82
- ret = { id: Metanorma::Utils::anchor_or_uuid(node),
83
- language: node.attributes["language"],
84
- script: node.attributes["script"],
85
- number: node.attributes["number"],
86
- "branch-number": node.attributes["branch-number"],
87
- type: node.attributes["type"],
88
- annex: (if (node.attr("style") == "appendix" ||
89
- node.role == "appendix") &&
90
- node.level == 1
91
- true
92
- end),
93
- tag: node&.attr("tag"),
94
- "multilingual-rendering": node&.attr("multilingual-rendering"),
95
- colophon: (if node.role == "colophon" ||
96
- node.attr("style") == "colophon"
97
- true
98
- end),
99
- preface: (if node.role == "preface" ||
100
- node.attr("style") == "preface"
101
- true
102
- end) }
103
- return ret unless node.attributes["change"]
84
+ ret =
85
+ { id: Metanorma::Utils::anchor_or_uuid(node),
86
+ annex: role_style(node, "appendix") && node.level == 1 ? true : nil,
87
+ colophon: role_style(node, "colophon") ? true : nil,
88
+ preface: role_style(node, "preface") ? true : nil }
89
+ %w(language script number branch-number type tag keeptitle
90
+ multilingual-rendering).each do |k|
91
+ a = node.attr(k) and ret[k.to_sym] = a
92
+ end
93
+ section_attributes_change(node, ret).compact
94
+ end
104
95
 
96
+ def section_attributes_change(node, ret)
97
+ node.attributes["change"] or return ret
105
98
  ret.merge(change: node.attributes["change"],
106
99
  path: node.attributes["path"],
107
100
  path_end: node.attributes["path_end"],
@@ -5,8 +5,6 @@ module Metanorma
5
5
  # Intelligent term lookup xml modifier
6
6
  class TermLookupCleanup
7
7
  AUTO_GEN_ID_REGEXP = /\A_/.freeze
8
- EXISTING_TERM_REGEXP = /\Aterm-/.freeze
9
- EXISTING_SYMBOL_REGEXP = /\Asymbol-/.freeze
10
8
 
11
9
  attr_reader :xmldoc, :lookup, :log
12
10
 
@@ -61,13 +59,12 @@ module Metanorma
61
59
  def related_cleanup
62
60
  xmldoc.xpath("//related").each do |n|
63
61
  refterm = n.at("./refterm") or next
62
+ repl = "<preferred><expression>" \
63
+ "<name>#{refterm.children.to_xml}</name></expression></preferred>"
64
64
  lookup = norm_ref_id_text(refterm.text.strip)
65
65
  p = @lookup[:sec2prim][lookup] and refterm.children = @c.encode(p)
66
66
  p || @lookup[:term][lookup] and
67
- refterm.replace(<<~XML,
68
- <preferred><expression><name>#{refterm.children.to_xml}</name></expression></preferred>
69
- XML
70
- )
67
+ refterm.replace(repl)
71
68
  end
72
69
  end
73
70
 
@@ -96,7 +93,7 @@ module Metanorma
96
93
  def remove_missing_ref?(node)
97
94
  node.at("../eref | ../termref") and return false
98
95
  xref = node.at("../xref") or return true
99
- xref["target"] && !xref["target"]&.empty? and return false
96
+ xref["target"] && !xref["target"].empty? and return false
100
97
  xref.remove # if xref supplied by user, we won't delete
101
98
  true
102
99
  end
@@ -251,8 +248,7 @@ module Metanorma
251
248
  end
252
249
 
253
250
  def unique_text_id(text, prefix)
254
- @idhash["#{prefix}-#{text}"] or
255
- return "#{prefix}-#{text}"
251
+ @idhash["#{prefix}-#{text}"] or return "#{prefix}-#{text}"
256
252
  (1..Float::INFINITY).lazy.each do |index|
257
253
  @idhash["#{prefix}-#{text}-#{index}"] or
258
254
  break("#{prefix}-#{text}-#{index}")
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "2.8.5".freeze
22
+ VERSION = "2.8.6".freeze
23
23
  end
24
24
  end
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency "addressable", "~> 2.8.0"
32
32
  spec.add_dependency "asciidoctor", "~> 2.0.0"
33
+ spec.add_dependency "crass", "~> 1.0.0"
33
34
  spec.add_dependency "iev", "~> 0.3.0"
34
35
  spec.add_dependency "isodoc", "~> 2.9.0"
35
36
  spec.add_dependency "metanorma", ">= 1.6.0"
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.8.5
4
+ version: 2.8.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: 2024-03-10 00:00:00.000000000 Z
11
+ date: 2024-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: crass
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: iev
43
57
  requirement: !ruby/object:Gem::Requirement