metanorma-standoc 2.1.2 → 2.1.5

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/biblio.rng +102 -5
  3. data/lib/metanorma/standoc/blocks.rb +3 -6
  4. data/lib/metanorma/standoc/blocks_notes.rb +1 -1
  5. data/lib/metanorma/standoc/cleanup.rb +3 -1
  6. data/lib/metanorma/standoc/cleanup_block.rb +41 -1
  7. data/lib/metanorma/standoc/cleanup_footnotes.rb +19 -17
  8. data/lib/metanorma/standoc/cleanup_ref.rb +16 -0
  9. data/lib/metanorma/standoc/cleanup_section.rb +6 -0
  10. data/lib/metanorma/standoc/cleanup_terms.rb +6 -2
  11. data/lib/metanorma/standoc/cleanup_xref.rb +2 -1
  12. data/lib/metanorma/standoc/converter.rb +2 -0
  13. data/lib/metanorma/standoc/isodoc.rng +33 -0
  14. data/lib/metanorma/standoc/macros_note.rb +26 -0
  15. data/lib/metanorma/standoc/ref.rb +3 -1
  16. data/lib/metanorma/standoc/ref_sect.rb +5 -2
  17. data/lib/metanorma/standoc/ref_utility.rb +20 -6
  18. data/lib/metanorma/standoc/section.rb +3 -1
  19. data/lib/metanorma/standoc/term_lookup_cleanup.rb +1 -1
  20. data/lib/metanorma/standoc/utils.rb +1 -1
  21. data/lib/metanorma/standoc/version.rb +1 -1
  22. data/metanorma-standoc.gemspec +1 -1
  23. data/spec/examples/datamodel/address_class_profile.presentation.xml +14 -0
  24. data/spec/metanorma/blocks_spec.rb +55 -0
  25. data/spec/metanorma/cleanup_blocks_spec.rb +83 -0
  26. data/spec/metanorma/cleanup_sections_spec.rb +55 -4
  27. data/spec/metanorma/cleanup_spec.rb +1 -1
  28. data/spec/metanorma/isobib_cache_spec.rb +6 -4
  29. data/spec/metanorma/macros_spec.rb +36 -8
  30. data/spec/metanorma/refs_dl_spec.rb +18 -7
  31. data/spec/metanorma/refs_spec.rb +252 -281
  32. data/spec/metanorma/validate_spec.rb +60 -1
  33. data/spec/spec_helper.rb +1 -1
  34. data/spec/vcr_cassettes/bsi16341.yml +58 -72
  35. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +98 -98
  36. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +14 -14
  37. data/spec/vcr_cassettes/hide_refs.yml +57 -57
  38. data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
  39. data/spec/vcr_cassettes/isobib_get_123_1.yml +27 -27
  40. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +36 -36
  41. data/spec/vcr_cassettes/isobib_get_123_2.yml +295 -0
  42. data/spec/vcr_cassettes/isobib_get_123_2001.yml +13 -13
  43. data/spec/vcr_cassettes/isobib_get_124.yml +13 -13
  44. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +228 -52
  45. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
  46. data/spec/vcr_cassettes/std-link.yml +13 -71
  47. metadata +7 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56e2b9105572c28858ffc12d075b16615ec8195836ad4bf7d7d2122fbf81dc05
4
- data.tar.gz: 2594f703aeba2f78a5bf3df715709f78b3b6da1a751cb52fedd3ebce299eaf2d
3
+ metadata.gz: 9487b5701cc86946c27e560e244cc4f84fceb61b0a93dd271068875654eb49a0
4
+ data.tar.gz: c647cf6fb530aba3bc96c9087e7a9d49408ce239a6c6aa3a4a46a0e8cf1a5763
5
5
  SHA512:
6
- metadata.gz: eeef127fe3ea160b49aa62cbb1aa665fb4e0cdb6d1712f646667394a41633c89864a294900c444abc1fceb7fbe2649bdfb2f539d1ccc66d3df89cd247ea31655
7
- data.tar.gz: 2d1ded28e889db67a42275a5890a8e942b2b966e342e7bb7bc2b21129875394dff03ce1c1cd634b409ce72a68de0e4fd4eff518731cb3b8809c70d5c0c5f0449
6
+ metadata.gz: c8356539be6d28f5dc6d4d148cfcabb8ed7dbc033392544d382d36e1e392e33da6b29a64b535f6c24cdab85a4d17d1dc5698367f0edff8f45eb02b1f8ed97330
7
+ data.tar.gz: 13c49550edea0d6169fef67357a5030e146cdf62fec3cb41900db7490d95c09f9dbb1c4f4b55bea4836651ba11fcaf0714b20f37fc3a96a48dd31596cf564549
@@ -623,6 +623,97 @@
623
623
  <zeroOrMore>
624
624
  <ref name="bsource"/>
625
625
  </zeroOrMore>
626
+ <oneOrMore>
627
+ <ref name="docidentifier"/>
628
+ </oneOrMore>
629
+ <optional>
630
+ <ref name="docnumber"/>
631
+ </optional>
632
+ <zeroOrMore>
633
+ <ref name="bdate"/>
634
+ </zeroOrMore>
635
+ <zeroOrMore>
636
+ <ref name="contributor"/>
637
+ </zeroOrMore>
638
+ <optional>
639
+ <ref name="edition"/>
640
+ </optional>
641
+ <zeroOrMore>
642
+ <ref name="version"/>
643
+ </zeroOrMore>
644
+ <zeroOrMore>
645
+ <ref name="biblionote"/>
646
+ </zeroOrMore>
647
+ <zeroOrMore>
648
+ <ref name="language"/>
649
+ </zeroOrMore>
650
+ <zeroOrMore>
651
+ <ref name="script"/>
652
+ </zeroOrMore>
653
+ <zeroOrMore>
654
+ <ref name="bibabstract"/>
655
+ </zeroOrMore>
656
+ <optional>
657
+ <ref name="status"/>
658
+ </optional>
659
+ <zeroOrMore>
660
+ <ref name="copyright"/>
661
+ </zeroOrMore>
662
+ <zeroOrMore>
663
+ <ref name="docrelation"/>
664
+ </zeroOrMore>
665
+ <zeroOrMore>
666
+ <ref name="series"/>
667
+ </zeroOrMore>
668
+ <optional>
669
+ <ref name="medium"/>
670
+ </optional>
671
+ <zeroOrMore>
672
+ <ref name="bplace"/>
673
+ </zeroOrMore>
674
+ <zeroOrMore>
675
+ <ref name="bprice"/>
676
+ </zeroOrMore>
677
+ <zeroOrMore>
678
+ <ref name="extent"/>
679
+ </zeroOrMore>
680
+ <optional>
681
+ <ref name="bibliographic_size"/>
682
+ </optional>
683
+ <zeroOrMore>
684
+ <ref name="accesslocation"/>
685
+ </zeroOrMore>
686
+ <zeroOrMore>
687
+ <ref name="license"/>
688
+ </zeroOrMore>
689
+ <zeroOrMore>
690
+ <ref name="bclassification"/>
691
+ </zeroOrMore>
692
+ <zeroOrMore>
693
+ <ref name="bkeyword"/>
694
+ </zeroOrMore>
695
+ <optional>
696
+ <ref name="validity"/>
697
+ </optional>
698
+ </define>
699
+ <define name="ReducedBibliographicItem">
700
+ <optional>
701
+ <attribute name="type">
702
+ <ref name="BibItemType"/>
703
+ </attribute>
704
+ </optional>
705
+ <optional>
706
+ <ref name="fetched"/>
707
+ </optional>
708
+ <optional>
709
+ <ref name="formattedref"/>
710
+ </optional>
711
+ <zeroOrMore>
712
+ <ref name="btitle"/>
713
+ </zeroOrMore>
714
+ <zeroOrMore>
715
+ <ref name="bsource"/>
716
+ </zeroOrMore>
626
717
  <zeroOrMore>
627
718
  <ref name="docidentifier"/>
628
719
  </zeroOrMore>
@@ -638,9 +729,9 @@
638
729
  <optional>
639
730
  <ref name="edition"/>
640
731
  </optional>
641
- <optional>
732
+ <zeroOrMore>
642
733
  <ref name="version"/>
643
- </optional>
734
+ </zeroOrMore>
644
735
  <zeroOrMore>
645
736
  <ref name="biblionote"/>
646
737
  </zeroOrMore>
@@ -833,6 +924,12 @@
833
924
  <data type="boolean"/>
834
925
  </attribute>
835
926
  </optional>
927
+ <optional>
928
+ <attribute name="language"/>
929
+ </optional>
930
+ <optional>
931
+ <attribute name="script"/>
932
+ </optional>
836
933
  <text/>
837
934
  </element>
838
935
  </define>
@@ -1172,7 +1269,7 @@
1172
1269
  </element>
1173
1270
  </optional>
1174
1271
  <element name="bibitem">
1175
- <ref name="BibliographicItem"/>
1272
+ <ref name="ReducedBibliographicItem"/>
1176
1273
  </element>
1177
1274
  <choice>
1178
1275
  <zeroOrMore>
@@ -1197,9 +1294,9 @@
1197
1294
  <optional>
1198
1295
  <ref name="revision-date"/>
1199
1296
  </optional>
1200
- <zeroOrMore>
1297
+ <optional>
1201
1298
  <ref name="draft"/>
1202
- </zeroOrMore>
1299
+ </optional>
1203
1300
  </element>
1204
1301
  </define>
1205
1302
  <define name="vedition">
@@ -38,9 +38,7 @@ module Metanorma
38
38
  role == "form" and return form(node)
39
39
  role == "definition" and return termdefinition(node)
40
40
  result = []
41
- node.blocks.each do |b|
42
- result << send(b.context, b)
43
- end
41
+ node.blocks.each { |b| result << send(b.context, b) }
44
42
  result
45
43
  end
46
44
 
@@ -82,7 +80,7 @@ module Metanorma
82
80
  noko do |xml|
83
81
  xml.termexample **attr_code(id_attr(node)
84
82
  .merge(
85
- keepasterm: node.option?("termexample") ? "true" : nil,
83
+ keepasterm: node.option?("termexample") || nil,
86
84
  )) do |ex|
87
85
  wrap_in_para(node, ex)
88
86
  end
@@ -244,8 +242,7 @@ module Metanorma
244
242
  noko do |xml|
245
243
  xml.passthrough **attr_code(formats:
246
244
  node.attr("format") || "metanorma") do |p|
247
- p << c.encode(c.decode(node.content),
248
- :basic, :hexadecimal)
245
+ p << c.encode(c.decode(node.content), :basic, :hexadecimal)
249
246
  end
250
247
  end
251
248
  end
@@ -94,7 +94,7 @@ module Metanorma
94
94
  end
95
95
 
96
96
  def admonition(node)
97
- return termnote(node) if in_terms?
97
+ return termnote(node) if in_terms? && node.attr("name") == "note"
98
98
  return note(node) if node.attr("name") == "note"
99
99
  return todo(node) if node.attr("name") == "todo"
100
100
 
@@ -28,6 +28,8 @@ module Metanorma
28
28
  passthrough_cleanup(xmldoc)
29
29
  sections_cleanup(xmldoc)
30
30
  obligations_cleanup(xmldoc)
31
+ para_index_cleanup(xmldoc)
32
+ block_index_cleanup(xmldoc)
31
33
  table_cleanup(xmldoc)
32
34
  formula_cleanup(xmldoc)
33
35
  form_cleanup(xmldoc)
@@ -51,7 +53,7 @@ module Metanorma
51
53
  termdef_cleanup(xmldoc)
52
54
  RelatonIev::iev_cleanup(xmldoc, @bibdb)
53
55
  element_name_cleanup(xmldoc)
54
- index_cleanup(xmldoc)
56
+ term_index_cleanup(xmldoc)
55
57
  bpart_cleanup(xmldoc)
56
58
  quotesource_cleanup(xmldoc)
57
59
  callout_cleanup(xmldoc)
@@ -66,7 +66,7 @@ module Metanorma
66
66
  def subfigure_cleanup(xmldoc)
67
67
  xmldoc.xpath("//example[figure]").each do |e|
68
68
  next unless e.elements.map(&:name).reject do |m|
69
- %w(name figure).include? m
69
+ %w(name figure index).include? m
70
70
  end.empty?
71
71
 
72
72
  e.name = "figure"
@@ -178,6 +178,46 @@ module Metanorma
178
178
  end
179
179
  end
180
180
  end
181
+
182
+ def block_index_cleanup(xmldoc)
183
+ xmldoc.xpath("//quote | //td | //th | //formula | //li | //dt | "\
184
+ "//dd | //example | //note | //figure | //sourcecode | "\
185
+ "//admonition | //termnote | //termexample | //form | "\
186
+ "//requirement | //recommendation | //permission | "\
187
+ "//imagemap | //svgmap").each do |b|
188
+ b.xpath("./p[indexterm]").each do |p|
189
+ indexterm_para?(p) or next
190
+ p.replace(p.children)
191
+ end
192
+ end
193
+ end
194
+
195
+ def indexterm_para?(para)
196
+ p = para.dup
197
+ p.xpath("./index").each(&:remove)
198
+ p.text.strip.empty?
199
+ end
200
+
201
+ def include_indexterm?(elem)
202
+ return false if elem.nil?
203
+
204
+ !%w(image literal sourcecode).include?(elem.name)
205
+ end
206
+
207
+ def para_index_cleanup(xmldoc)
208
+ xmldoc.xpath("//p[index]").select { |p| indexterm_para?(p) }
209
+ .each do |p|
210
+ para_index_cleanup1(p, p.previous_element, p.next_element)
211
+ end
212
+ end
213
+
214
+ def para_index_cleanup1(para, prev, foll)
215
+ if include_indexterm?(prev)
216
+ prev << para.remove.children
217
+ elsif include_indexterm?(foll) && !foll.children.empty?
218
+ foll.children.first.previous = para.remove.children
219
+ end
220
+ end
181
221
  end
182
222
  end
183
223
  end
@@ -13,14 +13,16 @@ module Metanorma
13
13
  c.gsub(/ id="[^"]+"/, "")
14
14
  end
15
15
 
16
+ FIGURE_FN_XPATH =
17
+ "//figure/following-sibling::*[1][self::p and *[1][self::fn]]".freeze
18
+
16
19
  # include footnotes inside figure if they are the only content
17
20
  # of the paras following
18
21
  def figure_footnote_cleanup(xmldoc)
19
22
  nomatches = false
20
23
  until nomatches
21
- q = "//figure/following-sibling::*[1][self::p and *[1][self::fn]]"
22
24
  nomatches = true
23
- xmldoc.xpath(q).each do |s|
25
+ xmldoc.xpath(FIGURE_FN_XPATH).each do |s|
24
26
  next if s.children.map do |c|
25
27
  c.text? && /[[:alpha:]]/.match(c.text)
26
28
  end.any?
@@ -32,17 +34,17 @@ module Metanorma
32
34
  end
33
35
  end
34
36
 
35
- def table_footnote_renumber1(fnote, i, seen)
37
+ def table_footnote_renumber1(fnote, idx, seen)
36
38
  content = footnote_content(fnote)
37
39
  if seen[content] then outnum = seen[content]
38
40
  else
39
- i += 1
40
- outnum = i
41
+ idx += 1
42
+ outnum = idx
41
43
  seen[content] = outnum
42
44
  end
43
45
  fnote["reference"] = (outnum - 1 + "a".ord).chr
44
46
  fnote["table"] = true
45
- [i, seen]
47
+ [idx, seen]
46
48
  end
47
49
 
48
50
  def table_footnote_renumber(xmldoc)
@@ -55,18 +57,18 @@ module Metanorma
55
57
  end
56
58
  end
57
59
 
58
- def other_footnote_renumber1(fn, i, seen)
59
- unless fn["table"]
60
- content = footnote_content(fn)
61
- if seen[content] then outnum = seen[content]
62
- else
63
- i += 1
64
- outnum = i
65
- seen[content] = outnum
66
- end
67
- fn["reference"] = outnum.to_s
60
+ def other_footnote_renumber1(fnote, idx, seen)
61
+ return [idx, seen] if fnote["table"]
62
+
63
+ content = footnote_content(fnote)
64
+ if seen[content] then outnum = seen[content]
65
+ else
66
+ idx += 1
67
+ outnum = idx
68
+ seen[content] = outnum
68
69
  end
69
- [i, seen]
70
+ fnote["reference"] = outnum.to_s
71
+ [idx, seen]
70
72
  end
71
73
 
72
74
  def other_footnote_renumber(xmldoc)
@@ -80,6 +80,7 @@ module Metanorma
80
80
 
81
81
  def biblio_cleanup(xmldoc)
82
82
  biblio_reorder(xmldoc)
83
+ biblio_annex(xmldoc)
83
84
  biblio_nested(xmldoc)
84
85
  biblio_renumber(xmldoc)
85
86
  biblio_linkonly(xmldoc)
@@ -119,6 +120,16 @@ module Metanorma
119
120
  xmldoc.xpath("//bibitem/ext").each(&:remove)
120
121
  end
121
122
 
123
+ def biblio_annex(xmldoc)
124
+ xmldoc.xpath("//annex[references/references]").each do |t|
125
+ next unless t.xpath("./clause | ./references | ./terms").size == 1
126
+
127
+ r = t.at("./references")
128
+ r.xpath("./references").each { |b| b["normative"] = r["normative"] }
129
+ r.replace(r.elements)
130
+ end
131
+ end
132
+
122
133
  def biblio_nested(xmldoc)
123
134
  xmldoc.xpath("//references[references]").each do |t|
124
135
  t.name = "clause"
@@ -143,6 +154,11 @@ module Metanorma
143
154
  def reference_names(xmldoc)
144
155
  xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
145
156
  docid = ref.at("./docidentifier[@type = 'metanorma']") ||
157
+ ref.at("./docidentifier[@primary = 'true'][@language = '#{@lang}']") ||
158
+ ref.at("./docidentifier[@primary = 'true'][not(@language)]") ||
159
+ ref.at("./docidentifier[@primary = 'true']") ||
160
+ ref.at("./docidentifier[not(@type = 'DOI')][@language = '#{@lang}']") ||
161
+ ref.at("./docidentifier[not(@type = 'DOI')][not(@language)]") ||
146
162
  ref.at("./docidentifier[not(@type = 'DOI')]") or next
147
163
  reference = format_ref(docid.children.to_xml, docid["type"])
148
164
  @anchors[ref["id"]] = { xref: reference }
@@ -118,6 +118,12 @@ module Metanorma
118
118
  change_clauses(xml)
119
119
  end
120
120
 
121
+ def single_clause_annex(xml)
122
+ xml.xpath("//annex").each do |a|
123
+ single_clause_annex1(a)
124
+ end
125
+ end
126
+
121
127
  def obligations_cleanup(xml)
122
128
  obligations_cleanup_info(xml)
123
129
  obligations_cleanup_norm(xml)
@@ -100,9 +100,13 @@ module Metanorma
100
100
  end
101
101
  end
102
102
 
103
+ def termlookup_cleanup(xmldoc)
104
+ Metanorma::Standoc::TermLookupCleanup.new(xmldoc, @log).call
105
+ end
106
+
103
107
  def termdef_cleanup(xmldoc)
104
108
  termdef_unnest_cleanup(xmldoc)
105
- Metanorma::Standoc::TermLookupCleanup.new(xmldoc, @log).call
109
+ termlookup_cleanup(xmldoc)
106
110
  term_nonverbal_designations(xmldoc)
107
111
  term_dl_to_metadata(xmldoc)
108
112
  term_termsource_to_designation(xmldoc)
@@ -117,7 +121,7 @@ module Metanorma
117
121
  termdocsource_cleanup(xmldoc)
118
122
  end
119
123
 
120
- def index_cleanup(xmldoc)
124
+ def term_index_cleanup(xmldoc)
121
125
  return unless @index_terms
122
126
 
123
127
  xmldoc.xpath("//preferred").each do |p|
@@ -68,9 +68,10 @@ module Metanorma
68
68
  end
69
69
 
70
70
  def xref_to_eref(elem)
71
+ c = HTMLEntities.new
71
72
  elem["bibitemid"] = elem["target"]
72
73
  if ref = @anchors&.dig(elem["target"], :xref)
73
- elem["citeas"] = HTMLEntities.new.encode(ref, :hexadecimal)
74
+ elem["citeas"] = c.decode(ref)
74
75
  else
75
76
  elem["citeas"] = ""
76
77
  xref_to_eref1(elem)
@@ -59,6 +59,8 @@ module Metanorma
59
59
  inline_macro Metanorma::Plugin::Lutaml::LutamlTableInlineMacro
60
60
  block_macro Metanorma::Plugin::Lutaml::LutamlDiagramBlockMacro
61
61
  block Metanorma::Standoc::ToDoAdmonitionBlock
62
+ block Metanorma::Standoc::EditorAdmonitionBlock
63
+ treeprocessor Metanorma::Standoc::EditorInlineAdmonitionBlock
62
64
  treeprocessor Metanorma::Standoc::ToDoInlineAdmonitionBlock
63
65
  block Metanorma::Standoc::PlantUMLBlockMacro
64
66
  block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
@@ -69,6 +69,17 @@
69
69
  </zeroOrMore>
70
70
  </element>
71
71
  </define>
72
+ <define name="AdmonitionType">
73
+ <choice>
74
+ <value>warning</value>
75
+ <value>note</value>
76
+ <value>tip</value>
77
+ <value>important</value>
78
+ <value>caution</value>
79
+ <value>statement</value>
80
+ <value>editorial</value>
81
+ </choice>
82
+ </define>
72
83
  <define name="index">
73
84
  <element name="index">
74
85
  <optional>
@@ -116,6 +127,11 @@
116
127
  <data type="boolean"/>
117
128
  </attribute>
118
129
  </optional>
130
+ <optional>
131
+ <attribute name="suppress_identifier">
132
+ <data type="boolean"/>
133
+ </attribute>
134
+ </optional>
119
135
  <ref name="BibliographicItem"/>
120
136
  </element>
121
137
  </define>
@@ -703,6 +719,9 @@
703
719
  <optional>
704
720
  <attribute name="tag"/>
705
721
  </optional>
722
+ <optional>
723
+ <attribute name="type"/>
724
+ </optional>
706
725
  <optional>
707
726
  <attribute name="multilingual-rendering">
708
727
  <ref name="MultilingualRenderingType"/>
@@ -738,6 +757,9 @@
738
757
  <optional>
739
758
  <attribute name="tag"/>
740
759
  </optional>
760
+ <optional>
761
+ <attribute name="type"/>
762
+ </optional>
741
763
  <optional>
742
764
  <attribute name="multilingual-rendering">
743
765
  <ref name="MultilingualRenderingType"/>
@@ -2059,6 +2081,7 @@
2059
2081
  <value>compare</value>
2060
2082
  <value>contrast</value>
2061
2083
  <value>see</value>
2084
+ <value>seealso</value>
2062
2085
  </choice>
2063
2086
  </define>
2064
2087
  <define name="deprecates">
@@ -2481,6 +2504,16 @@
2481
2504
  <text/>
2482
2505
  </element>
2483
2506
  </optional>
2507
+ <optional>
2508
+ <element name="amendment">
2509
+ <text/>
2510
+ </element>
2511
+ </optional>
2512
+ <optional>
2513
+ <element name="corrigendum">
2514
+ <text/>
2515
+ </element>
2516
+ </optional>
2484
2517
  <optional>
2485
2518
  <element name="language">
2486
2519
  <text/>
@@ -37,5 +37,31 @@ module Metanorma
37
37
  %{<footnoteblock>#{out}</footnoteblock>}
38
38
  end
39
39
  end
40
+
41
+ class EditorAdmonitionBlock < Asciidoctor::Extensions::BlockProcessor
42
+ use_dsl
43
+ named :EDITOR
44
+ on_contexts :example, :paragraph
45
+
46
+ def process(parent, reader, attrs)
47
+ attrs["name"] = "editorial"
48
+ attrs["caption"] = "EDITOR"
49
+ create_block(parent, :admonition, reader.lines, attrs,
50
+ content_model: :compound)
51
+ end
52
+ end
53
+
54
+ class EditorInlineAdmonitionBlock < Asciidoctor::Extensions::Treeprocessor
55
+ def process(document)
56
+ (document.find_by context: :paragraph).each do |para|
57
+ next unless /^EDITOR: /.match? para.lines[0]
58
+
59
+ para.set_attr("name", "editorial")
60
+ para.set_attr("caption", "EDITOR")
61
+ para.lines[0].sub!(/^EDITOR: /, "")
62
+ para.context = :admonition
63
+ end
64
+ end
65
+ end
40
66
  end
41
67
  end
@@ -82,7 +82,8 @@ module Metanorma
82
82
  def isorefmatches3out(item, xml)
83
83
  if item[:doc] then use_retrieved_relaton(item, xml)
84
84
  else
85
- isorefmatches3_1(xml, item[:ref][:match], item[:ref][:yr],
85
+ isorefmatches3_1(xml, item[:ref][:match],
86
+ item[:ref][:yr],
86
87
  item[:ref][:hasyr], item[:doc])
87
88
  end
88
89
  end
@@ -117,6 +118,7 @@ module Metanorma
117
118
 
118
119
  def refitem_render(xml, match, code)
119
120
  xml.bibitem **attr_code(id: match[:anchor],
121
+ suppress_identifier: code[:dropid],
120
122
  hidden: code[:hidden]) do |t|
121
123
  t.formattedref **{ format: "application/x-isodoc+xml" } do |i|
122
124
  i << ref_normalise_no_format(match[:text])
@@ -84,7 +84,8 @@ module Metanorma
84
84
  if ref[:code].nil? || ref[:no_year] || @bibdb.nil?
85
85
  res << [ref, idx, nil]
86
86
  else
87
- @bibdb.fetch_async(ref[:code], ref[:year], ref) do |doc|
87
+ @bibdb.fetch_async(HTMLEntities.new.decode(ref[:code]),
88
+ ref[:year], ref) do |doc|
88
89
  res << [ref, idx, doc]
89
90
  end
90
91
  end
@@ -119,7 +120,9 @@ module Metanorma
119
120
  def use_retrieved_relaton(item, xml)
120
121
  xml.parent.add_child(smart_render_xml(item[:doc], item[:ref][:code],
121
122
  item[:ref]))
122
- use_my_anchor(xml, item[:ref][:match][:anchor], item.dig(:ref, :analyse_code, :hidden))
123
+ use_my_anchor(xml, item[:ref][:match][:anchor],
124
+ hidden: item.dig(:ref, :analyse_code, :hidden),
125
+ dropid: item.dig(:ref, :analyse_code, :dropid))
123
126
  end
124
127
 
125
128
  def init_bib_caches(node)
@@ -31,9 +31,11 @@ module Metanorma
31
31
  end
32
32
  end
33
33
 
34
- def use_my_anchor(ref, id, hidden)
34
+ def use_my_anchor(ref, id, opt)
35
35
  ref.parent.elements.last["id"] = id
36
- hidden and ref.parent.elements.last["hidden"] = hidden
36
+ opt[:hidden] and ref.parent.elements.last["hidden"] = opt[:hidden]
37
+ opt[:dropid] and
38
+ ref.parent.elements.last["suppress_identifier"] = opt[:dropid]
37
39
  ref
38
40
  end
39
41
 
@@ -57,6 +59,7 @@ module Metanorma
57
59
 
58
60
  def mn_code(code)
59
61
  code.sub(/^\(/, "[").sub(/\).*$/, "]")
62
+ .sub(/^dropid\((.+)\)$/, "\\1")
60
63
  .sub(/^hidden\((.+)\)$/, "\\1")
61
64
  .sub(/^nofetch\((.+)\)$/, "\\1")
62
65
  end
@@ -73,6 +76,12 @@ module Metanorma
73
76
  ret.merge(id: m[:id], hidden: true)
74
77
  end
75
78
 
79
+ def analyse_ref_dropid(ret)
80
+ return ret unless m = /^dropid\((?<id>.+)\)$/.match(ret[:id])
81
+
82
+ ret.merge(id: m[:id], dropid: true)
83
+ end
84
+
76
85
  def analyse_ref_repo_path(ret)
77
86
  return ret unless m =
78
87
  /^(?<type>repo|path):\((?<key>[^,]+),?(?<id>.*)\)$/
@@ -89,14 +98,16 @@ module Metanorma
89
98
  end
90
99
 
91
100
  # ref id = (usrlbl)code[:-]year
92
- # code = nofetch(code) | hidden(code) | (repo|path):(key,code) |
101
+ # code = nofetch(code) | hidden(code) | dropid(code) | (repo|path):(key,code) |
93
102
  # \[? number \]? | ident
94
103
  def analyse_ref_code(code)
95
104
  ret = { id: code }
96
105
  return ret if code.blank?
97
106
 
98
- analyse_ref_nofetch(
99
- analyse_ref_hidden(analyse_ref_repo_path(analyse_ref_numeric(ret))),
107
+ analyse_ref_numeric(
108
+ analyse_ref_repo_path(
109
+ analyse_ref_dropid(analyse_ref_hidden(analyse_ref_nofetch(ret))),
110
+ ),
100
111
  )
101
112
  end
102
113
 
@@ -110,7 +121,10 @@ module Metanorma
110
121
  end
111
122
 
112
123
  def ref_attributes(match)
113
- { id: match[:anchor], type: "standard" }
124
+ code = analyse_ref_code(match[:code])
125
+
126
+ { id: match[:anchor], type: "standard",
127
+ suppress_identifier: code[:dropid] || nil }
114
128
  end
115
129
 
116
130
  MALFORMED_REF = <<~REF.freeze
@@ -38,6 +38,8 @@ module Metanorma
38
38
  when "symbols and abbreviated terms",
39
39
  "symbols", "abbreviated terms", "abbreviations"
40
40
  "symbols and abbreviated terms"
41
+ when "acknowledgements", "acknowledgments"
42
+ "acknowledgements"
41
43
  else
42
44
  ret
43
45
  end
@@ -152,7 +154,7 @@ module Metanorma
152
154
  attrs[:bibitem] = true if node.option? "bibitem"
153
155
  attrs[:level] = node.attr("level")
154
156
  set_obligation(attrs, node)
155
- xml.send "clause", **attr_code(attrs) do |xml_section|
157
+ xml.send :clause, **attr_code(attrs) do |xml_section|
156
158
  xml_section.title { |n| n << node.title } unless node.title.nil?
157
159
  xml_section << node.content
158
160
  end