metanorma-standoc 2.2.4 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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