metanorma-standoc 2.2.4 → 2.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/automerge.yml +31 -0
  3. data/lib/isodoc/html/htmlstyle.css +1 -1
  4. data/lib/metanorma/standoc/base.rb +1 -0
  5. data/lib/metanorma/standoc/basicdoc.rng +0 -27
  6. data/lib/metanorma/standoc/biblio-standoc.rng +164 -0
  7. data/lib/metanorma/standoc/biblio.rng +45 -18
  8. data/lib/metanorma/standoc/blocks.rb +2 -1
  9. data/lib/metanorma/standoc/cleanup.rb +1 -0
  10. data/lib/metanorma/standoc/cleanup_asciibib.rb +110 -0
  11. data/lib/metanorma/standoc/cleanup_biblio.rb +5 -111
  12. data/lib/metanorma/standoc/cleanup_block.rb +7 -6
  13. data/lib/metanorma/standoc/cleanup_boilerplate.rb +6 -6
  14. data/lib/metanorma/standoc/cleanup_inline.rb +2 -2
  15. data/lib/metanorma/standoc/cleanup_text.rb +10 -3
  16. data/lib/metanorma/standoc/inline.rb +3 -1
  17. data/lib/metanorma/standoc/isodoc-compile.rng +7 -0
  18. data/lib/metanorma/standoc/isodoc.rng +32 -195
  19. data/lib/metanorma/standoc/macros_plantuml.rb +23 -10
  20. data/lib/metanorma/standoc/validate.rb +8 -8
  21. data/lib/metanorma/standoc/version.rb +1 -1
  22. data/metanorma-standoc.gemspec +0 -1
  23. data/spec/metanorma/biblio_spec.rb +152 -144
  24. data/spec/metanorma/blocks_spec.rb +2 -2
  25. data/spec/metanorma/cleanup_sections_spec.rb +1 -2
  26. data/spec/metanorma/cleanup_spec.rb +11 -0
  27. data/spec/metanorma/inline_spec.rb +70 -8
  28. data/spec/metanorma/isobib_cache_spec.rb +2 -2
  29. data/spec/metanorma/macros_plantuml_spec.rb +4 -4
  30. data/spec/metanorma/macros_spec.rb +2 -2
  31. data/spec/metanorma/refs_spec.rb +25 -25
  32. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +3 -3
  33. data/spec/vcr_cassettes/bsi16341.yml +70 -72
  34. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +82 -82
  35. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +12 -12
  36. data/spec/vcr_cassettes/hide_refs.yml +58 -58
  37. data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
  38. data/spec/vcr_cassettes/isobib_get_123_1.yml +22 -22
  39. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +33 -33
  40. data/spec/vcr_cassettes/isobib_get_123_2.yml +25 -25
  41. data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -12
  42. data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
  43. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +37 -21
  44. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +45 -45
  45. data/spec/vcr_cassettes/std-link.yml +12 -12
  46. metadata +6 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8dfe44699d10166a0388cc7ebad8484584eaad6f13ec9777b4ad70484fcd8002
4
- data.tar.gz: 13d5367c69704b000b00f676b81c5285ef5dba303db110e1463504c45c0f84f0
3
+ metadata.gz: '033585c8aaadb0c5672e328edd9c30012ee330cb800cbf8a7f4e2a7e5498a61e'
4
+ data.tar.gz: 07b1cba33ba7917f68429d91393c8795d787c63e06f60d3f8d00938088e13138
5
5
  SHA512:
6
- metadata.gz: 7d3f9d03a2e32b41e7a2851eb5ca735800708c90ea21b472b11953a2130e1bdfff63b16d98585b6506857802642f5182fd09add53e022ab32af9e9c6115b7cb7
7
- data.tar.gz: 69f79d44f92bc8a2f40769febf4707cf75cdea9be62691b0d39219eb06a7a0dc489896c4914db99244f47f50bf5dd4fb1b64c64848783a53378d4f604ae9dc7a
6
+ metadata.gz: d163281f43172f6c1be2391bb923245f58270efd2f1eb482412b08e41ebdfeed91f6edeb4df61e4e5056feba0fd7c17b673b8d8d324f9837f93ac310052eda73
7
+ data.tar.gz: 1a8dbeadcc05872bf5daadebf262204461e75f9e39ffd9a0d2b77ebaec68131cd04786cb22a8adfaccfdaf3cad3db3019a51a85b18d8be1a8d363381c7618045
@@ -0,0 +1,31 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ # source: https://github.com/marketplace/actions/merge-pull-requests#usage
4
+ name: automerge
5
+ on:
6
+ pull_request:
7
+ types:
8
+ - labeled
9
+ - unlabeled
10
+ - synchronize
11
+ - opened
12
+ - edited
13
+ - ready_for_review
14
+ - reopened
15
+ - unlocked
16
+ pull_request_review:
17
+ types:
18
+ - submitted
19
+ check_suite:
20
+ types:
21
+ - completed
22
+ status: {}
23
+ jobs:
24
+ automerge:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - id: automerge
28
+ name: automerge
29
+ uses: "pascalgn/automerge-action@v0.15.3"
30
+ env:
31
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
@@ -368,7 +368,7 @@ div.figure {
368
368
  font-weight: 700;
369
369
  font-size: 1em;
370
370
  text-align: center; }
371
- div.figure > img {
371
+ div.figure > img, div.figure > svg {
372
372
  margin-left: auto;
373
373
  margin-right: auto;
374
374
  display: block;
@@ -56,6 +56,7 @@ module Metanorma
56
56
  @boilerplateauthority = node.attr("boilerplate-authority")
57
57
  @embed_hdr = node.attr("embed_hdr")
58
58
  @document_scheme = node.attr("document-scheme")
59
+ @xrefstyle = node.attr("xrefstyle")
59
60
  end
60
61
 
61
62
  def init_processing(node)
@@ -1,10 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
- <include href="biblio.rng">
4
- <start>
5
- <ref name="document"/>
6
- </start>
7
- </include>
8
3
  <define name="document">
9
4
  <element name="document">
10
5
  <optional>
@@ -1125,26 +1120,4 @@
1125
1120
  </zeroOrMore>
1126
1121
  </element>
1127
1122
  </define>
1128
- <define name="ext">
1129
- <element name="ext">
1130
- <ref name="BibDataExtensionType"/>
1131
- </element>
1132
- </define>
1133
- <define name="BibDataExtensionType">
1134
- <ref name="doctype"/>
1135
- </define>
1136
- <define name="doctype">
1137
- <element name="doctype">
1138
- <ref name="DocumentType"/>
1139
- </element>
1140
- </define>
1141
- <define name="DocumentType">
1142
- <value>document</value>
1143
- </define>
1144
- <define name="BibData">
1145
- <ref name="BibliographicItem"/>
1146
- <optional>
1147
- <ref name="ext"/>
1148
- </optional>
1149
- </define>
1150
1123
  </grammar>
@@ -0,0 +1,164 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
3
+ <!--
4
+ Add-ons to biblio.rnc for standoc model: defines the extension point BibDataExtensionType
5
+ of relaton
6
+
7
+ Specialisations as for biblio.rnc. Extension point can be redefined completely for a flavour of standoc
8
+ (SDO); but other elements in Bibdata can only be extended (more specialised vocabularies for Bibdata)
9
+ -->
10
+ <include href="biblio.rng">
11
+ <define name="BibData">
12
+ <ref name="BibliographicItem"/>
13
+ <optional>
14
+ <ref name="ext"/>
15
+ </optional>
16
+ </define>
17
+ </include>
18
+ <define name="ext">
19
+ <element name="ext">
20
+ <ref name="BibDataExtensionType"/>
21
+ </element>
22
+ </define>
23
+ <define name="BibDataExtensionType">
24
+ <optional>
25
+ <attribute name="schema-version"/>
26
+ </optional>
27
+ <ref name="doctype"/>
28
+ <optional>
29
+ <ref name="docsubtype"/>
30
+ </optional>
31
+ <optional>
32
+ <ref name="editorialgroup"/>
33
+ </optional>
34
+ <zeroOrMore>
35
+ <ref name="ics"/>
36
+ </zeroOrMore>
37
+ <zeroOrMore>
38
+ <ref name="structuredidentifier"/>
39
+ </zeroOrMore>
40
+ </define>
41
+ <define name="doctype">
42
+ <element name="doctype">
43
+ <optional>
44
+ <attribute name="abbreviation"/>
45
+ </optional>
46
+ <ref name="DocumentType"/>
47
+ </element>
48
+ </define>
49
+ <define name="DocumentType">
50
+ <value>document</value>
51
+ </define>
52
+ <define name="docsubtype">
53
+ <element name="subdoctype">
54
+ <ref name="DocumentSubtype"/>
55
+ </element>
56
+ </define>
57
+ <define name="DocumentSubtype">
58
+ <text/>
59
+ </define>
60
+ <define name="editorialgroup">
61
+ <element name="editorialgroup">
62
+ <oneOrMore>
63
+ <ref name="technical-committee"/>
64
+ </oneOrMore>
65
+ </element>
66
+ </define>
67
+ <define name="technical-committee">
68
+ <element name="technical-committee">
69
+ <ref name="IsoWorkgroup"/>
70
+ </element>
71
+ </define>
72
+ <define name="IsoWorkgroup">
73
+ <optional>
74
+ <attribute name="number"/>
75
+ </optional>
76
+ <optional>
77
+ <attribute name="type"/>
78
+ </optional>
79
+ <optional>
80
+ <attribute name="identifier"/>
81
+ </optional>
82
+ <optional>
83
+ <attribute name="prefix"/>
84
+ </optional>
85
+ <text/>
86
+ </define>
87
+ <define name="ics">
88
+ <element name="ics">
89
+ <element name="code">
90
+ <text/>
91
+ </element>
92
+ <optional>
93
+ <element name="text">
94
+ <text/>
95
+ </element>
96
+ </optional>
97
+ </element>
98
+ </define>
99
+ <define name="structuredidentifier">
100
+ <element name="structuredidentifier">
101
+ <optional>
102
+ <attribute name="type"/>
103
+ </optional>
104
+ <oneOrMore>
105
+ <element name="agency">
106
+ <text/>
107
+ </element>
108
+ </oneOrMore>
109
+ <optional>
110
+ <element name="class">
111
+ <text/>
112
+ </element>
113
+ </optional>
114
+ <element name="docnumber">
115
+ <text/>
116
+ </element>
117
+ <optional>
118
+ <element name="partnumber">
119
+ <text/>
120
+ </element>
121
+ </optional>
122
+ <optional>
123
+ <element name="edition">
124
+ <text/>
125
+ </element>
126
+ </optional>
127
+ <optional>
128
+ <element name="version">
129
+ <text/>
130
+ </element>
131
+ </optional>
132
+ <optional>
133
+ <element name="supplementtype">
134
+ <text/>
135
+ </element>
136
+ </optional>
137
+ <optional>
138
+ <element name="supplementnumber">
139
+ <text/>
140
+ </element>
141
+ </optional>
142
+ <optional>
143
+ <element name="amendment">
144
+ <text/>
145
+ </element>
146
+ </optional>
147
+ <optional>
148
+ <element name="corrigendum">
149
+ <text/>
150
+ </element>
151
+ </optional>
152
+ <optional>
153
+ <element name="language">
154
+ <text/>
155
+ </element>
156
+ </optional>
157
+ <optional>
158
+ <element name="year">
159
+ <text/>
160
+ </element>
161
+ </optional>
162
+ </element>
163
+ </define>
164
+ </grammar>
@@ -33,9 +33,10 @@
33
33
  <param name="pattern">([\+\-]?\d{4})((-?)((0[1-9]|1[0-2])((-?)([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6]))))?</param>
34
34
  </data>
35
35
  </define>
36
- <start>
37
- <ref name="bibitem"/>
38
- </start>
36
+ <!-- start = bibitem -->
37
+ <define name="BibData">
38
+ <ref name="BibliographicItem"/>
39
+ </define>
39
40
  <define name="status">
40
41
  <element name="status">
41
42
  <ref name="stage"/>
@@ -170,27 +171,25 @@
170
171
  </define>
171
172
  <define name="contributor">
172
173
  <element name="contributor">
173
- <zeroOrMore>
174
+ <oneOrMore>
174
175
  <ref name="role"/>
175
- </zeroOrMore>
176
+ </oneOrMore>
176
177
  <ref name="ContributorInfo"/>
177
178
  </element>
178
179
  </define>
179
180
  <define name="role">
180
181
  <element name="role">
181
- <optional>
182
- <attribute name="type">
183
- <choice>
184
- <value>author</value>
185
- <value>performer</value>
186
- <value>publisher</value>
187
- <value>editor</value>
188
- <value>adapter</value>
189
- <value>translator</value>
190
- <value>distributor</value>
191
- </choice>
192
- </attribute>
193
- </optional>
182
+ <attribute name="type">
183
+ <choice>
184
+ <value>author</value>
185
+ <value>performer</value>
186
+ <value>publisher</value>
187
+ <value>editor</value>
188
+ <value>adapter</value>
189
+ <value>translator</value>
190
+ <value>distributor</value>
191
+ </choice>
192
+ </attribute>
194
193
  <zeroOrMore>
195
194
  <ref name="roledescription"/>
196
195
  </zeroOrMore>
@@ -512,6 +511,17 @@
512
511
  </define>
513
512
  <define name="localityStack">
514
513
  <element name="localityStack">
514
+ <optional>
515
+ <attribute name="connective">
516
+ <choice>
517
+ <value>and</value>
518
+ <value>or</value>
519
+ <value>from</value>
520
+ <value>to</value>
521
+ <value/>
522
+ </choice>
523
+ </attribute>
524
+ </optional>
515
525
  <zeroOrMore>
516
526
  <ref name="locality"/>
517
527
  </zeroOrMore>
@@ -524,6 +534,17 @@
524
534
  </define>
525
535
  <define name="sourceLocalityStack">
526
536
  <element name="sourceLocalityStack">
537
+ <optional>
538
+ <attribute name="connective">
539
+ <choice>
540
+ <value>and</value>
541
+ <value>or</value>
542
+ <value>from</value>
543
+ <value>to</value>
544
+ <value/>
545
+ </choice>
546
+ </attribute>
547
+ </optional>
527
548
  <zeroOrMore>
528
549
  <ref name="sourceLocality"/>
529
550
  </zeroOrMore>
@@ -626,6 +647,9 @@
626
647
  <ref name="BibItemType"/>
627
648
  </attribute>
628
649
  </optional>
650
+ <optional>
651
+ <attribute name="schema-version"/>
652
+ </optional>
629
653
  <optional>
630
654
  <ref name="fetched"/>
631
655
  </optional>
@@ -720,6 +744,9 @@
720
744
  <ref name="BibItemType"/>
721
745
  </attribute>
722
746
  </optional>
747
+ <optional>
748
+ <attribute name="schema-version"/>
749
+ </optional>
723
750
  <optional>
724
751
  <ref name="fetched"/>
725
752
  </optional>
@@ -174,7 +174,8 @@ module Metanorma
174
174
  end
175
175
 
176
176
  def figure_attrs(node)
177
- attr_code(id_unnum_attrs(node).merge(keep_attrs(node)))
177
+ attr_code(id_unnum_attrs(node).merge(keep_attrs(node))
178
+ .merge(class: node.attr("class")))
178
179
  end
179
180
 
180
181
  def image(node)
@@ -5,6 +5,7 @@ require_relative "./cleanup_block"
5
5
  require_relative "./cleanup_table"
6
6
  require_relative "./cleanup_footnotes"
7
7
  require_relative "./cleanup_ref"
8
+ require_relative "./cleanup_asciibib"
8
9
  require_relative "./cleanup_biblio"
9
10
  require_relative "./cleanup_boilerplate"
10
11
  require_relative "./cleanup_section"
@@ -0,0 +1,110 @@
1
+ require "set"
2
+ require "relaton_bib"
3
+
4
+ module Metanorma
5
+ module Standoc
6
+ module Cleanup
7
+ def ref_dl_cleanup(xmldoc)
8
+ xmldoc.xpath("//clause[@bibitem = 'true']").each do |c|
9
+ bib = dl_bib_extract(c) or next
10
+ validate_ref_dl(bib, c)
11
+ bibitemxml = RelatonBib::BibliographicItem.from_hash(bib).to_xml or next
12
+ bibitem = Nokogiri::XML(bibitemxml)
13
+ bibitem.root["id"] = c["id"] if c["id"] && !/^_/.match(c["id"])
14
+ c.replace(bibitem.root)
15
+ end
16
+ end
17
+
18
+ # do not accept implicit id
19
+ def validate_ref_dl(bib, clause)
20
+ id = bib["id"]
21
+ id ||= clause["id"] unless /^_/.match?(clause["id"])
22
+ unless id
23
+ @log.add("Anchors", clause,
24
+ "The following reference is missing an anchor:\n" \
25
+ "#{clause.to_xml}")
26
+ return
27
+ end
28
+ @refids << id
29
+ validate_ref_dl1(bib, id, clause)
30
+ end
31
+
32
+ def validate_ref_dl1(bib, id, clause)
33
+ bib["title"] or
34
+ @log.add("Bibliography", clause, "Reference #{id} is missing a title")
35
+ bib["docid"] or
36
+ @log.add("Bibliography", clause,
37
+ "Reference #{id} is missing a document identifier (docid)")
38
+ end
39
+
40
+ def extract_from_p(tag, bib, key)
41
+ return unless bib[tag]
42
+
43
+ "<#{key}>#{bib[tag].at('p').children}</#{key}>"
44
+ end
45
+
46
+ # if the content is a single paragraph, replace it with its children
47
+ # single links replaced with uri
48
+ def p_unwrap(para)
49
+ elems = para.elements
50
+ if elems.size == 1 && elems[0].name == "p"
51
+ link_unwrap(elems[0]).children.to_xml.strip
52
+ else
53
+ para.to_xml.strip
54
+ end
55
+ end
56
+
57
+ def link_unwrap(para)
58
+ elems = para.elements
59
+ if elems.size == 1 && elems[0].name == "link"
60
+ para.at("./link").replace(elems[0]["target"].strip)
61
+ end
62
+ para
63
+ end
64
+
65
+ def dd_bib_extract(dtd)
66
+ return nil if dtd.children.empty?
67
+
68
+ dtd.at("./dl") and return dl_bib_extract(dtd)
69
+ elems = dtd.remove.elements
70
+ return p_unwrap(dtd) unless elems.size == 1 &&
71
+ %w(ol ul).include?(elems[0].name)
72
+
73
+ elems[0].xpath("./li").each_with_object([]) do |li, ret|
74
+ ret << p_unwrap(li)
75
+ end
76
+ end
77
+
78
+ def add_to_hash(bib, key, val)
79
+ Metanorma::Utils::set_nested_value(bib, key.split("."), val)
80
+ end
81
+
82
+ # definition list, with at most one level of unordered lists
83
+ def dl_bib_extract(clause, nested = false)
84
+ dl = clause.at("./dl") or return
85
+ key = ""
86
+ bib = dl.xpath("./dt | ./dd").each_with_object({}) do |dtd, m|
87
+ (dtd.name == "dt" and key = dtd.text.sub(/:+$/, "")) and next
88
+ add_to_hash(m, key, dd_bib_extract(dtd))
89
+ end
90
+ clause.xpath("./clause").each do |c1|
91
+ key = c1&.at("./title")&.text&.downcase&.strip
92
+ next unless %w(contributor relation series).include? key
93
+
94
+ add_to_hash(bib, key, dl_bib_extract(c1, true))
95
+ end
96
+ dl_bib_extract_title(bib, clause, nested)
97
+ end
98
+
99
+ def dl_bib_extract_title(bib, clause, nested)
100
+ (!nested && clause.at("./title")) or return bib
101
+ title = clause.at("./title").remove.children.to_xml
102
+ bib["title"] = [bib["title"]] if bib["title"].is_a?(Hash) ||
103
+ bib["title"].is_a?(String)
104
+ bib["title"] ||= []
105
+ bib["title"] << title if !title.empty?
106
+ bib
107
+ end
108
+ end
109
+ end
110
+ end
@@ -1,113 +1,6 @@
1
- require "set"
2
- require "relaton_bib"
3
-
4
1
  module Metanorma
5
2
  module Standoc
6
3
  module Cleanup
7
- def ref_dl_cleanup(xmldoc)
8
- xmldoc.xpath("//clause[@bibitem = 'true']").each do |c|
9
- bib = dl_bib_extract(c) or next
10
- validate_ref_dl(bib, c)
11
- bibitemxml = RelatonBib::BibliographicItem.from_hash(bib).to_xml or next
12
- bibitem = Nokogiri::XML(bibitemxml)
13
- bibitem.root["id"] = c["id"] if c["id"] && !/^_/.match(c["id"])
14
- c.replace(bibitem.root)
15
- end
16
- end
17
-
18
- # do not accept implicit id
19
- def validate_ref_dl(bib, clause)
20
- id = bib["id"]
21
- id ||= clause["id"] unless /^_/.match?(clause["id"])
22
- unless id
23
- @log.add("Anchors", clause,
24
- "The following reference is missing an anchor:\n"\
25
- "#{clause.to_xml}")
26
- return
27
- end
28
- @refids << id
29
- validate_ref_dl1(bib, id, clause)
30
- end
31
-
32
- def validate_ref_dl1(bib, id, clause)
33
- bib["title"] or
34
- @log.add("Bibliography", clause, "Reference #{id} is missing a title")
35
- bib["docid"] or
36
- @log.add("Bibliography", clause,
37
- "Reference #{id} is missing a document identifier (docid)")
38
- end
39
-
40
- def extract_from_p(tag, bib, key)
41
- return unless bib[tag]
42
-
43
- "<#{key}>#{bib[tag].at('p').children}</#{key}>"
44
- end
45
-
46
- # if the content is a single paragraph, replace it with its children
47
- # single links replaced with uri
48
- def p_unwrap(para)
49
- elems = para.elements
50
- if elems.size == 1 && elems[0].name == "p"
51
- link_unwrap(elems[0]).children.to_xml.strip
52
- else
53
- para.to_xml.strip
54
- end
55
- end
56
-
57
- def link_unwrap(para)
58
- elems = para.elements
59
- if elems.size == 1 && elems[0].name == "link"
60
- para.at("./link").replace(elems[0]["target"].strip)
61
- end
62
- para
63
- end
64
-
65
- def dd_bib_extract(dtd)
66
- return nil if dtd.children.empty?
67
-
68
- dtd.at("./dl") and return dl_bib_extract(dtd)
69
- elems = dtd.remove.elements
70
- return p_unwrap(dtd) unless elems.size == 1 &&
71
- %w(ol ul).include?(elems[0].name)
72
-
73
- elems[0].xpath("./li").each_with_object([]) do |li, ret|
74
- ret << p_unwrap(li)
75
- end
76
- end
77
-
78
- def add_to_hash(bib, key, val)
79
- Metanorma::Utils::set_nested_value(bib, key.split("."), val)
80
- end
81
-
82
- # definition list, with at most one level of unordered lists
83
- def dl_bib_extract(clause, nested = false)
84
- dl = clause.at("./dl") or return
85
- key = ""
86
- bib = dl.xpath("./dt | ./dd").each_with_object({}) do |dtd, m|
87
- (dtd.name == "dt" and key = dtd.text.sub(/:+$/, "")) and next
88
- add_to_hash(m, key, dd_bib_extract(dtd))
89
- end
90
- clause.xpath("./clause").each do |c1|
91
- key = c1&.at("./title")&.text&.downcase&.strip
92
- next unless %w(contributor relation series).include? key
93
-
94
- add_to_hash(bib, key, dl_bib_extract(c1, true))
95
- end
96
- dl_bib_extract_title(bib, clause, nested)
97
- end
98
-
99
- def dl_bib_extract_title(bib, clause, nested)
100
- (!nested && clause.at("./title")) or return bib
101
- title = clause.at("./title").remove.children.to_xml
102
- bib["title"] = [bib["title"]] if bib["title"].is_a?(Hash) ||
103
- bib["title"].is_a?(String)
104
- bib["title"] ||= []
105
- bib["title"] << title if !title.empty?
106
- bib
107
- end
108
-
109
- # ---
110
-
111
4
  def formattedref_spans(xmldoc)
112
5
  xmldoc.xpath("//bibitem[formattedref//span]").each do |b|
113
6
  spans = spans_preprocess(extract_content(b))
@@ -263,10 +156,11 @@ module Metanorma
263
156
 
264
157
  def span_to_extent(span, key)
265
158
  values = span.split(/[-–]/)
266
- ret = "<extent type='#{key}'><referenceFrom>#{values[0]}</referenceFrom>"
159
+ ret = "<extent type='#{key}'><locality>" \
160
+ "<referenceFrom>#{values[0]}</referenceFrom>"
267
161
  values[1] and
268
162
  ret += "<referenceTo>#{values[1]}</referenceTo>"
269
- "#{ret}</extent>"
163
+ "#{ret}</locality></extent>"
270
164
  end
271
165
 
272
166
  def span_to_docid(span, key)
@@ -287,10 +181,10 @@ module Metanorma
287
181
 
288
182
  def span_to_person(span)
289
183
  pre = (span[:"formatted-initials"] and
290
- "<formatted-initials>"\
184
+ "<formatted-initials>" \
291
185
  "#{span[:"formatted-initials"]}</formatted-initials>") ||
292
186
  "<forename>#{span[:givenname]}</forename>"
293
- "<person><name>#{pre}<surname>#{span[:surname]}</surname></name>"\
187
+ "<person><name>#{pre}<surname>#{span[:surname]}</surname></name>" \
294
188
  "</person>"
295
189
  end
296
190
  end
@@ -7,7 +7,8 @@ module Metanorma
7
7
  def para_cleanup(xmldoc)
8
8
  ["//p[not(ancestor::bibdata)]", "//ol[not(ancestor::bibdata)]",
9
9
  "//ul[not(ancestor::bibdata)]", "//quote[not(ancestor::bibdata)]",
10
- "//note[not(ancestor::bibitem or "\
10
+ "//dl[not(ancestor::bibdata)]",
11
+ "//note[not(ancestor::bibitem or " \
11
12
  "ancestor::table or ancestor::bibdata)]"].each do |w|
12
13
  inject_id(xmldoc, w)
13
14
  end
@@ -106,7 +107,7 @@ module Metanorma
106
107
  prev = n.previous_element || next
107
108
  n.parent = prev if ELEMS_ALLOW_NOTES.include? prev.name
108
109
  end
109
- xmldoc.xpath("//note[@keep-separate] | "\
110
+ xmldoc.xpath("//note[@keep-separate] | " \
110
111
  "//termnote[@keep-separate]").each do |n|
111
112
  n.delete("keep-separate")
112
113
  end
@@ -182,10 +183,10 @@ module Metanorma
182
183
  end
183
184
 
184
185
  def block_index_cleanup(xmldoc)
185
- xmldoc.xpath("//quote | //td | //th | //formula | //li | //dt | "\
186
- "//dd | //example | //note | //figure | //sourcecode | "\
187
- "//admonition | //termnote | //termexample | //form | "\
188
- "//requirement | //recommendation | //permission | "\
186
+ xmldoc.xpath("//quote | //td | //th | //formula | //li | //dt | " \
187
+ "//dd | //example | //note | //figure | //sourcecode | " \
188
+ "//admonition | //termnote | //termexample | //form | " \
189
+ "//requirement | //recommendation | //permission | " \
189
190
  "//imagemap | //svgmap").each do |b|
190
191
  b.xpath("./p[indexterm]").each do |p|
191
192
  indexterm_para?(p) or next