metanorma-standoc 2.1.1 → 2.1.4

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/lib/metanorma/standoc/base.rb +3 -1
  3. data/lib/metanorma/standoc/biblio.rng +134 -39
  4. data/lib/metanorma/standoc/blocks.rb +8 -6
  5. data/lib/metanorma/standoc/blocks_notes.rb +4 -1
  6. data/lib/metanorma/standoc/cleanup.rb +1 -0
  7. data/lib/metanorma/standoc/cleanup_footnotes.rb +32 -25
  8. data/lib/metanorma/standoc/cleanup_inline.rb +17 -0
  9. data/lib/metanorma/standoc/cleanup_ref.rb +16 -0
  10. data/lib/metanorma/standoc/cleanup_section.rb +6 -0
  11. data/lib/metanorma/standoc/cleanup_terms.rb +3 -1
  12. data/lib/metanorma/standoc/cleanup_text.rb +9 -4
  13. data/lib/metanorma/standoc/cleanup_xref.rb +2 -1
  14. data/lib/metanorma/standoc/converter.rb +4 -0
  15. data/lib/metanorma/standoc/isodoc.rng +32 -0
  16. data/lib/metanorma/standoc/lists.rb +8 -3
  17. data/lib/metanorma/standoc/macros.rb +28 -1
  18. data/lib/metanorma/standoc/macros_note.rb +27 -6
  19. data/lib/metanorma/standoc/ref.rb +3 -1
  20. data/lib/metanorma/standoc/ref_sect.rb +5 -2
  21. data/lib/metanorma/standoc/ref_utility.rb +20 -5
  22. data/lib/metanorma/standoc/section.rb +1 -1
  23. data/lib/metanorma/standoc/version.rb +1 -1
  24. data/metanorma-standoc.gemspec +2 -2
  25. data/spec/examples/datamodel/address_class_profile.presentation.xml +14 -0
  26. data/spec/metanorma/base_spec.rb +41 -5
  27. data/spec/metanorma/blocks_spec.rb +58 -1
  28. data/spec/metanorma/cleanup_sections_spec.rb +60 -9
  29. data/spec/metanorma/cleanup_spec.rb +6 -6
  30. data/spec/metanorma/cleanup_terms_spec.rb +1 -1
  31. data/spec/metanorma/inline_spec.rb +3 -3
  32. data/spec/metanorma/lists_spec.rb +10 -4
  33. data/spec/metanorma/macros_spec.rb +50 -15
  34. data/spec/metanorma/refs_dl_spec.rb +18 -7
  35. data/spec/metanorma/refs_spec.rb +390 -450
  36. data/spec/metanorma/table_spec.rb +24 -6
  37. data/spec/spec_helper.rb +2 -2
  38. data/spec/vcr_cassettes/bsi16341.yml +57 -71
  39. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +67 -67
  40. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +14 -14
  41. data/spec/vcr_cassettes/hide_refs.yml +62 -62
  42. data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
  43. data/spec/vcr_cassettes/isobib_get_123_1.yml +26 -26
  44. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +37 -37
  45. data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
  46. data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
  47. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +228 -52
  48. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +47 -49
  49. data/spec/vcr_cassettes/std-link.yml +15 -15
  50. metadata +10 -10
  51. data/docs/quickstart.adoc +0 -375
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2c3089664934dc34b5f41b7e03a7bc2d2b1060e17decafb29dfc1f36fb7bed0
4
- data.tar.gz: 7ecc333b2847252e7965be128c701f4cb2241d148179cd43b66a9f5cd2a2e108
3
+ metadata.gz: d55c699cf84e05288a133b4e0b9305cfb14809780ec379b8d617a928338f1fca
4
+ data.tar.gz: 772eaa9e0e09e9ad7c40b70ade1825d437ba079673767b31c3c5b493cf29af4f
5
5
  SHA512:
6
- metadata.gz: 5308c4354dc5fd14e1d5d18dc32e7b52d81ba492e53381771e7dfecea4c83af0bd73387af2bfb6c913687352eaad85c44ded592e1c95179d5d41b3974bc923ff
7
- data.tar.gz: ba8122c376d231eb6f1f4f4ea235b608b4dd1769394a899fe9fcd6f5bee011f2384cf1455fae0d86d32648e37aee080c0db18755d4a761e793ad5164b500ce61
6
+ metadata.gz: fba5328a1ebbc7d236174893d3e98ece5768c3d8935c326506692023d1254c1a2bda95f842956b4830d18c949ba817d4ca4f00548c569999ae38381c1406f02f
7
+ data.tar.gz: d3aed7321347c856c5f8ff600118773094ffc948a5f7b3be6655dff48749c4780a5a4048baf1a04d4aad94e22b650648c91c7ca9bc159680beb48ec4275a8904
@@ -171,7 +171,9 @@ module Metanorma
171
171
  end
172
172
 
173
173
  def doctype(node)
174
- node.attr("doctype")&.gsub(/\s+/, "-")&.downcase
174
+ ret = node.attr("doctype")&.gsub(/\s+/, "-")&.downcase || "standard"
175
+ ret = "standard" if ret == "article"
176
+ ret
175
177
  end
176
178
 
177
179
  def front(node, xml)
@@ -614,12 +614,103 @@
614
614
  <optional>
615
615
  <ref name="fetched"/>
616
616
  </optional>
617
- <choice>
618
- <oneOrMore>
619
- <ref name="btitle"/>
620
- </oneOrMore>
617
+ <optional>
621
618
  <ref name="formattedref"/>
622
- </choice>
619
+ </optional>
620
+ <oneOrMore>
621
+ <ref name="btitle"/>
622
+ </oneOrMore>
623
+ <zeroOrMore>
624
+ <ref name="bsource"/>
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>
623
714
  <zeroOrMore>
624
715
  <ref name="bsource"/>
625
716
  </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>
@@ -986,36 +1083,34 @@
986
1083
  <ref name="SeriesType"/>
987
1084
  </attribute>
988
1085
  </optional>
989
- <choice>
1086
+ <optional>
990
1087
  <ref name="formattedref"/>
991
- <group>
992
- <ref name="btitle"/>
993
- <optional>
994
- <ref name="bplace"/>
995
- </optional>
996
- <optional>
997
- <ref name="seriesorganization"/>
998
- </optional>
999
- <optional>
1000
- <ref name="abbreviation"/>
1001
- </optional>
1002
- <optional>
1003
- <ref name="seriesfrom"/>
1004
- </optional>
1005
- <optional>
1006
- <ref name="seriesto"/>
1007
- </optional>
1008
- <optional>
1009
- <ref name="seriesnumber"/>
1010
- </optional>
1011
- <optional>
1012
- <ref name="seriespartnumber"/>
1013
- </optional>
1014
- <optional>
1015
- <ref name="seriesrun"/>
1016
- </optional>
1017
- </group>
1018
- </choice>
1088
+ </optional>
1089
+ <ref name="btitle"/>
1090
+ <optional>
1091
+ <ref name="bplace"/>
1092
+ </optional>
1093
+ <optional>
1094
+ <ref name="seriesorganization"/>
1095
+ </optional>
1096
+ <optional>
1097
+ <ref name="abbreviation"/>
1098
+ </optional>
1099
+ <optional>
1100
+ <ref name="seriesfrom"/>
1101
+ </optional>
1102
+ <optional>
1103
+ <ref name="seriesto"/>
1104
+ </optional>
1105
+ <optional>
1106
+ <ref name="seriesnumber"/>
1107
+ </optional>
1108
+ <optional>
1109
+ <ref name="seriespartnumber"/>
1110
+ </optional>
1111
+ <optional>
1112
+ <ref name="seriesrun"/>
1113
+ </optional>
1019
1114
  </element>
1020
1115
  </define>
1021
1116
  <define name="SeriesType">
@@ -1174,7 +1269,7 @@
1174
1269
  </element>
1175
1270
  </optional>
1176
1271
  <element name="bibitem">
1177
- <ref name="BibliographicItem"/>
1272
+ <ref name="ReducedBibliographicItem"/>
1178
1273
  </element>
1179
1274
  <choice>
1180
1275
  <zeroOrMore>
@@ -1199,9 +1294,9 @@
1199
1294
  <optional>
1200
1295
  <ref name="revision-date"/>
1201
1296
  </optional>
1202
- <zeroOrMore>
1297
+ <optional>
1203
1298
  <ref name="draft"/>
1204
- </zeroOrMore>
1299
+ </optional>
1205
1300
  </element>
1206
1301
  </define>
1207
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
 
@@ -80,14 +78,17 @@ module Metanorma
80
78
 
81
79
  def term_example(node)
82
80
  noko do |xml|
83
- xml.termexample **attr_code(id_attr(node)) do |ex|
81
+ xml.termexample **attr_code(id_attr(node)
82
+ .merge(
83
+ keepasterm: node.option?("termexample") || nil,
84
+ )) do |ex|
84
85
  wrap_in_para(node, ex)
85
86
  end
86
87
  end.join("\n")
87
88
  end
88
89
 
89
90
  def example(node)
90
- return term_example(node) if in_terms?
91
+ return term_example(node) if in_terms? || node.option?("termexample")
91
92
 
92
93
  role = node.role || node.attr("style")
93
94
  %w(recommendation requirement permission).include?(role) and
@@ -237,10 +238,11 @@ module Metanorma
237
238
  end
238
239
 
239
240
  def pass(node)
241
+ c = HTMLEntities.new
240
242
  noko do |xml|
241
243
  xml.passthrough **attr_code(formats:
242
244
  node.attr("format") || "metanorma") do |p|
243
- p << HTMLEntities.new.encode(node.content, :basic, :hexadecimal)
245
+ p << c.encode(c.decode(node.content), :basic, :hexadecimal)
244
246
  end
245
247
  end
246
248
  end
@@ -8,6 +8,7 @@ module Metanorma
8
8
  number: node.attr("number"),
9
9
  subsequence: node.attr("subsequence"),
10
10
  "keep-separate": node.attr("keep-separate"),
11
+ keepasterm: node.option?("termnote") ? "true" : nil,
11
12
  )))
12
13
  end
13
14
 
@@ -61,6 +62,8 @@ module Metanorma
61
62
  end
62
63
 
63
64
  def note(node)
65
+ return termnote(node) if node.option?("termnote")
66
+
64
67
  noko do |xml|
65
68
  xml.note **note_attrs(node) do |c|
66
69
  wrap_in_para(node, c)
@@ -91,7 +94,7 @@ module Metanorma
91
94
  end
92
95
 
93
96
  def admonition(node)
94
- return termnote(node) if in_terms?
97
+ return termnote(node) if in_terms? && node.attr("name") == "note"
95
98
  return note(node) if node.attr("name") == "note"
96
99
  return todo(node) if node.attr("name") == "todo"
97
100
 
@@ -25,6 +25,7 @@ module Metanorma
25
25
  module Cleanup
26
26
  def cleanup(xmldoc)
27
27
  element_name_cleanup(xmldoc)
28
+ passthrough_cleanup(xmldoc)
28
29
  sections_cleanup(xmldoc)
29
30
  obligations_cleanup(xmldoc)
30
31
  table_cleanup(xmldoc)
@@ -5,20 +5,27 @@ require "json"
5
5
  module Metanorma
6
6
  module Standoc
7
7
  module Cleanup
8
- def footnote_content(fn)
9
- c = fn.children.respond_to?(:to_xml) ? fn.children.to_xml : fn.children
8
+ def footnote_content(fnote)
9
+ c = if fnote.children.respond_to?(:to_xml)
10
+ fnote.children.to_xml
11
+ else fn.children
12
+ end
10
13
  c.gsub(/ id="[^"]+"/, "")
11
14
  end
12
15
 
13
- # include footnotes inside figure if they are the only content
16
+ FIGURE_FN_XPATH =
17
+ "//figure/following-sibling::*[1][self::p and *[1][self::fn]]".freeze
18
+
19
+ # include footnotes inside figure if they are the only content
14
20
  # of the paras following
15
21
  def figure_footnote_cleanup(xmldoc)
16
22
  nomatches = false
17
23
  until nomatches
18
- q = "//figure/following-sibling::*[1][self::p and *[1][self::fn]]"
19
24
  nomatches = true
20
- xmldoc.xpath(q).each do |s|
21
- next if s.children.map { |c| c.text? && /[[:alpha:]]/.match(c.text) }.any?
25
+ xmldoc.xpath(FIGURE_FN_XPATH).each do |s|
26
+ next if s.children.map do |c|
27
+ c.text? && /[[:alpha:]]/.match(c.text)
28
+ end.any?
22
29
 
23
30
  s.previous_element << s.first_element_child.remove
24
31
  s.remove
@@ -27,17 +34,17 @@ module Metanorma
27
34
  end
28
35
  end
29
36
 
30
- def table_footnote_renumber1(fn, i, seen)
31
- content = footnote_content(fn)
37
+ def table_footnote_renumber1(fnote, idx, seen)
38
+ content = footnote_content(fnote)
32
39
  if seen[content] then outnum = seen[content]
33
40
  else
34
- i += 1
35
- outnum = i
41
+ idx += 1
42
+ outnum = idx
36
43
  seen[content] = outnum
37
44
  end
38
- fn["reference"] = (outnum - 1 + "a".ord).chr
39
- fn["table"] = true
40
- [i, seen]
45
+ fnote["reference"] = (outnum - 1 + "a".ord).chr
46
+ fnote["table"] = true
47
+ [idx, seen]
41
48
  end
42
49
 
43
50
  def table_footnote_renumber(xmldoc)
@@ -50,18 +57,18 @@ module Metanorma
50
57
  end
51
58
  end
52
59
 
53
- def other_footnote_renumber1(fn, i, seen)
54
- unless fn["table"]
55
- content = footnote_content(fn)
56
- if seen[content] then outnum = seen[content]
57
- else
58
- i += 1
59
- outnum = i
60
- seen[content] = outnum
61
- end
62
- 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
63
69
  end
64
- [i, seen]
70
+ fnote["reference"] = outnum.to_s
71
+ [idx, seen]
65
72
  end
66
73
 
67
74
  def other_footnote_renumber(xmldoc)
@@ -84,7 +91,7 @@ module Metanorma
84
91
 
85
92
  def footnote_block_cleanup(xmldoc)
86
93
  xmldoc.xpath("//footnoteblock").each do |f|
87
- f.name = 'fn'
94
+ f.name = "fn"
88
95
  if id = xmldoc.at("//*[@id = '#{f.text}']")
89
96
  f.children = id.remove.children
90
97
  else
@@ -185,6 +185,23 @@ module Metanorma
185
185
  Digest::MD5.hexdigest("#{elem.path}////#{elem.text}")
186
186
  .sub(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, "_\\1-\\2-\\3-\\4-\\5")
187
187
  end
188
+
189
+ def passthrough_cleanup(doc)
190
+ doc.xpath("//passthrough-inline").each do |p|
191
+ p.name = "passthrough"
192
+ p.children = select_odd_chars(p.children.to_xml)
193
+ end
194
+ doc.xpath("//identifier").each do |p|
195
+ p.children = select_odd_chars(p.children.to_xml)
196
+ end
197
+ end
198
+
199
+ private
200
+
201
+ # skip ZWNJ inserted to prevent regexes operating in asciidoctor
202
+ def select_odd_chars(text)
203
+ text.gsub(/(?!&)([[:punct:]])\u200c/, "\\1")
204
+ end
188
205
  end
189
206
  end
190
207
  end
@@ -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)
@@ -93,7 +93,9 @@ module Metanorma
93
93
  def termnote_example_cleanup(xmldoc)
94
94
  %w(note example).each do |w|
95
95
  xmldoc.xpath("//term#{w}[not(ancestor::term)]").each do |x|
96
- x.name = w
96
+ if x["keepasterm"] then x.delete("keepasterm")
97
+ else x.name = w
98
+ end
97
99
  end
98
100
  end
99
101
  end
@@ -5,8 +5,11 @@ module Metanorma
5
5
  text = result.flatten.map { |l| l.sub(/\s*\Z/, "") } * "\n"
6
6
  !@keepasciimath and text = asciimath2mathml(text)
7
7
  text = text.gsub(/\s+<fn /, "<fn ")
8
- text.gsub(%r{<passthrough\s+formats="metanorma">([^<]*)
9
- </passthrough>}mx) { HTMLEntities.new.decode($1) }
8
+ %w(passthrough passthrough-inline).each do |v|
9
+ text.gsub!(%r{<#{v}\s+formats="metanorma">([^<]*)
10
+ </#{v}>}mx) { HTMLEntities.new.decode($1) }
11
+ end
12
+ text
10
13
  end
11
14
 
12
15
  def smartquotes_cleanup(xmldoc)
@@ -33,7 +36,8 @@ module Metanorma
33
36
 
34
37
  def uninterrupt_quotes_around_xml_skip(elem)
35
38
  !(/\A['"]/.match?(elem.text) &&
36
- elem.previous.ancestors("pre, tt, sourcecode, stem, figure, bibdata")
39
+ elem.previous.ancestors("pre, tt, sourcecode, stem, figure, bibdata,
40
+ passthrough, identifer")
37
41
  .empty? &&
38
42
  ((elem.previous.text.strip.empty? &&
39
43
  !empty_tag_with_text_content?(elem.previous)) ||
@@ -70,7 +74,8 @@ module Metanorma
70
74
  empty_tag_with_text_content?(x) and prev = "dummy"
71
75
  next unless x.text?
72
76
 
73
- x.ancestors("pre, tt, sourcecode, stem, figure, bibdata").empty? and
77
+ x.ancestors("pre, tt, sourcecode, stem, figure, bibdata, passthrough,
78
+ identifier").empty? and
74
79
  dumb2smart_quotes1(x, prev)
75
80
  prev = x.text if x.ancestors("index").empty?
76
81
  end
@@ -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)
@@ -36,6 +36,7 @@ module Metanorma
36
36
  inline_macro Metanorma::Standoc::DomainTermInlineMacro
37
37
  inline_macro Metanorma::Standoc::InheritInlineMacro
38
38
  inline_macro Metanorma::Standoc::HTML5RubyMacro
39
+ inline_macro Metanorma::Standoc::IdentifierInlineMacro
39
40
  inline_macro Metanorma::Standoc::ConceptInlineMacro
40
41
  inline_macro Metanorma::Standoc::AutonumberInlineMacro
41
42
  inline_macro Metanorma::Standoc::VariantInlineMacro
@@ -58,11 +59,14 @@ module Metanorma
58
59
  inline_macro Metanorma::Plugin::Lutaml::LutamlTableInlineMacro
59
60
  block_macro Metanorma::Plugin::Lutaml::LutamlDiagramBlockMacro
60
61
  block Metanorma::Standoc::ToDoAdmonitionBlock
62
+ block Metanorma::Standoc::EditorAdmonitionBlock
63
+ treeprocessor Metanorma::Standoc::EditorInlineAdmonitionBlock
61
64
  treeprocessor Metanorma::Standoc::ToDoInlineAdmonitionBlock
62
65
  block Metanorma::Standoc::PlantUMLBlockMacro
63
66
  block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
64
67
  block Metanorma::Standoc::PseudocodeBlockMacro
65
68
  preprocessor Metanorma::Standoc::EmbedIncludeProcessor
69
+ preprocessor Metanorma::Standoc::NamedEscapePreprocessor
66
70
  end
67
71
 
68
72
  include ::Asciidoctor::Converter
@@ -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>
@@ -282,6 +298,9 @@
282
298
  <ref name="MultilingualRenderingType"/>
283
299
  </attribute>
284
300
  </optional>
301
+ <optional>
302
+ <ref name="tname"/>
303
+ </optional>
285
304
  <oneOrMore>
286
305
  <ref name="ul_li"/>
287
306
  </oneOrMore>
@@ -324,6 +343,9 @@
324
343
  </choice>
325
344
  </attribute>
326
345
  </optional>
346
+ <optional>
347
+ <ref name="tname"/>
348
+ </optional>
327
349
  <oneOrMore>
328
350
  <ref name="li"/>
329
351
  </oneOrMore>
@@ -360,6 +382,9 @@
360
382
  <ref name="MultilingualRenderingType"/>
361
383
  </attribute>
362
384
  </optional>
385
+ <optional>
386
+ <ref name="tname"/>
387
+ </optional>
363
388
  <oneOrMore>
364
389
  <ref name="dt"/>
365
390
  <ref name="dd"/>
@@ -694,6 +719,9 @@
694
719
  <optional>
695
720
  <attribute name="tag"/>
696
721
  </optional>
722
+ <optional>
723
+ <attribute name="type"/>
724
+ </optional>
697
725
  <optional>
698
726
  <attribute name="multilingual-rendering">
699
727
  <ref name="MultilingualRenderingType"/>
@@ -729,6 +757,9 @@
729
757
  <optional>
730
758
  <attribute name="tag"/>
731
759
  </optional>
760
+ <optional>
761
+ <attribute name="type"/>
762
+ </optional>
732
763
  <optional>
733
764
  <attribute name="multilingual-rendering">
734
765
  <ref name="MultilingualRenderingType"/>
@@ -2050,6 +2081,7 @@
2050
2081
  <value>compare</value>
2051
2082
  <value>contrast</value>
2052
2083
  <value>see</value>
2084
+ <value>seealso</value>
2053
2085
  </choice>
2054
2086
  </define>
2055
2087
  <define name="deprecates">