metanorma-iso 2.1.9 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ require_relative "xref_section"
2
+
1
3
  module IsoDoc
2
4
  module Iso
3
5
  class Counter < IsoDoc::XrefGen::Counter
@@ -17,21 +19,20 @@ module IsoDoc
17
19
 
18
20
  def initial_anchor_names_amd(doc)
19
21
  if @parse_settings.empty? || @parse_settings[:clauses]
20
- doc.xpath(ns("//preface/*")).each do |c|
21
- c.element? and preface_names(c)
22
+ ["//preface/*", "//sections/clause"].each do |xpath|
23
+ doc.xpath(ns(xpath)).each do |c|
24
+ c.element? and preface_names(c)
25
+ end
22
26
  end
23
- doc.xpath(ns("//sections/clause")).each do |c|
24
- c.element? and preface_names(c)
25
- end
26
- end
27
- if @parse_settings.empty?
28
- sequential_asset_names(doc.xpath(ns("//preface/*")))
29
- middle_section_asset_names(doc)
30
- termnote_anchor_names(doc)
31
- termexample_anchor_names(doc)
32
27
  end
33
28
  end
34
29
 
30
+ def asset_anchor_names(doc)
31
+ super
32
+ @parse_settings.empty? or return
33
+ sequential_asset_names(doc.xpath(ns("//preface/*")))
34
+ end
35
+
35
36
  def initial_anchor_names1(doc)
36
37
  if @parse_settings.empty? || @parse_settings[:clauses]
37
38
  doc.xpath(ns("//preface/*")).each do |c|
@@ -47,81 +48,6 @@ module IsoDoc
47
48
  n = section_names(c, n, 1)
48
49
  end
49
50
  end
50
- if @parse_settings.empty?
51
- middle_section_asset_names(doc)
52
- termnote_anchor_names(doc)
53
- termexample_anchor_names(doc)
54
- end
55
- end
56
-
57
- # we can reference 0-number clauses in introduction
58
- def introduction_names(clause)
59
- return if clause.nil?
60
-
61
- clause.at(ns("./clause")) and
62
- @anchors[clause["id"]] = { label: "0", level: 1, type: "clause",
63
- xref: clause.at(ns("./title"))&.text }
64
- i = Counter.new
65
- clause.xpath(ns("./clause")).each do |c|
66
- i.increment(c)
67
- section_names1(c, "0.#{i.print}", 2)
68
- end
69
- end
70
-
71
- def annex_names(clause, num)
72
- appendix_names(clause, num)
73
- super
74
- end
75
-
76
- def appendix_names(clause, _num)
77
- i = Counter.new
78
- clause.xpath(ns("./appendix")).each do |c|
79
- i.increment(c)
80
- @anchors[c["id"]] =
81
- anchor_struct(i.print, nil, @labels["appendix"],
82
- "clause").merge(level: 2, subtype: "annex",
83
- container: clause["id"])
84
- j = Counter.new
85
- c.xpath(ns("./clause | ./references")).each do |c1|
86
- j.increment(c1)
87
- lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
88
- appendix_names1(c1, l10n(lbl), 3, clause["id"])
89
- end
90
- end
91
- end
92
-
93
- # subclauses are not prefixed with "Clause"
94
- # retaining subtype for the semantics
95
- def section_names1(clause, num, level)
96
- @anchors[clause["id"]] =
97
- { label: num, level: level, xref: num, subtype: "clause" }
98
- i = Counter.new
99
- clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
100
- "./references"))
101
- .each do |c|
102
- i.increment(c)
103
- section_names1(c, "#{num}.#{i.print}", level + 1)
104
- end
105
- end
106
-
107
- def annex_names1(clause, num, level)
108
- @anchors[clause["id"]] = { label: num, xref: num, level: level,
109
- subtype: "annex" }
110
- i = Counter.new
111
- clause.xpath(ns("./clause | ./references")).each do |c|
112
- i.increment(c)
113
- annex_names1(c, "#{num}.#{i.print}", level + 1)
114
- end
115
- end
116
-
117
- def appendix_names1(clause, num, level, container)
118
- @anchors[clause["id"]] = { label: num, xref: num, level: level,
119
- container: container }
120
- i = Counter.new
121
- clause.xpath(ns("./clause | ./references")).each do |c|
122
- i.increment(c)
123
- appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
124
- end
125
51
  end
126
52
 
127
53
  def hierarchical_formula_names(clause, num)
@@ -137,10 +63,10 @@ module IsoDoc
137
63
  end
138
64
  end
139
65
 
140
- def figure_anchor(elem, sublabel, label)
66
+ def figure_anchor(elem, sublabel, label, klass)
141
67
  @anchors[elem["id"]] = anchor_struct(
142
68
  (sublabel ? "#{label} #{sublabel}" : label),
143
- nil, @labels["figure"], "figure", elem["unnumbered"]
69
+ nil, @labels[klass] || klass.capitalize, klass, elem["unnumbered"]
144
70
  )
145
71
  sublabel && elem["unnumbered"] != "true" and
146
72
  @anchors[elem["id"]][:label] = sublabel
@@ -148,27 +74,49 @@ module IsoDoc
148
74
 
149
75
  def sequential_figure_names(clause)
150
76
  j = 0
151
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
77
+ clause.xpath(ns(FIGURE_NO_CLASS)).noblank
152
78
  .each_with_object(IsoDoc::XrefGen::Counter.new) do |t, c|
153
79
  j = subfigure_increment(j, c, t)
154
80
  sublabel = j.zero? ? nil : "#{(j + 96).chr})"
155
- next if blank?(t["id"])
81
+ figure_anchor(t, sublabel, c.print, "figure")
82
+ end
83
+ sequential_figure_class_names(clause)
84
+ end
156
85
 
157
- figure_anchor(t, sublabel, c.print)
86
+ def sequential_figure_class_names(clause)
87
+ c = {}
88
+ j = 0
89
+ clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]"))
90
+ .each do |t|
91
+ c[t["class"]] ||= IsoDoc::XrefGen::Counter.new
92
+ j = subfigure_increment(j, c[t["class"]], t)
93
+ sublabel = j.zero? ? nil : "#{(j + 96).chr})"
94
+ figure_anchor(t, sublabel, c.print, t["class"])
158
95
  end
159
96
  end
160
97
 
161
98
  def hierarchical_figure_names(clause, num)
162
99
  c = IsoDoc::XrefGen::Counter.new
163
100
  j = 0
164
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
165
- .each do |t|
101
+ clause.xpath(ns(FIGURE_NO_CLASS)).noblank.each do |t|
166
102
  j = subfigure_increment(j, c, t)
167
103
  label = "#{num}#{hiersep}#{c.print}"
168
104
  sublabel = j.zero? ? nil : "#{(j + 96).chr})"
169
- next if blank?(t["id"])
105
+ figure_anchor(t, sublabel, label, "figure")
106
+ end
107
+ hierarchical_figure_class_names(clause, num)
108
+ end
170
109
 
171
- figure_anchor(t, sublabel, label)
110
+ def hierarchical_figure_class_names(clause, num)
111
+ c = {}
112
+ j = 0
113
+ clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]"))
114
+ .noblank.each do |t|
115
+ c[t["class"]] ||= IsoDoc::XrefGen::Counter.new
116
+ j = subfigure_increment(j, c[t["class"]], t)
117
+ label = "#{num}#{hiersep}#{c.print}"
118
+ sublabel = j.zero? ? nil : "#{(j + 96).chr})"
119
+ figure_anchor(t, sublabel, label, t["class"])
172
120
  end
173
121
  end
174
122
 
@@ -185,10 +133,6 @@ module IsoDoc
185
133
  end
186
134
  end
187
135
 
188
- def annex_name_lbl(clause, num)
189
- super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>")
190
- end
191
-
192
136
  def list_anchor_names(sections)
193
137
  sections.each do |s|
194
138
  notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
@@ -0,0 +1,79 @@
1
+ module IsoDoc
2
+ module Iso
3
+ class Xref < IsoDoc::Xref
4
+ # we can reference 0-number clauses in introduction
5
+ def introduction_names(clause)
6
+ return if clause.nil?
7
+
8
+ clause.at(ns("./clause")) and
9
+ @anchors[clause["id"]] = { label: "0", level: 1, type: "clause",
10
+ xref: clause.at(ns("./title"))&.text }
11
+ i = Counter.new
12
+ clause.xpath(ns("./clause")).each do |c|
13
+ i.increment(c)
14
+ section_names1(c, "0.#{i.print}", 2)
15
+ end
16
+ end
17
+
18
+ def annex_names(clause, num)
19
+ appendix_names(clause, num)
20
+ super
21
+ end
22
+
23
+ def appendix_names(clause, _num)
24
+ i = Counter.new
25
+ clause.xpath(ns("./appendix")).each do |c|
26
+ i.increment(c)
27
+ @anchors[c["id"]] =
28
+ anchor_struct(i.print, nil, @labels["appendix"],
29
+ "clause").merge(level: 2, subtype: "annex",
30
+ container: clause["id"])
31
+ j = Counter.new
32
+ c.xpath(ns("./clause | ./references")).each do |c1|
33
+ j.increment(c1)
34
+ lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
35
+ appendix_names1(c1, l10n(lbl), 3, clause["id"])
36
+ end
37
+ end
38
+ end
39
+
40
+ # subclauses are not prefixed with "Clause"
41
+ # retaining subtype for the semantics
42
+ def section_names1(clause, num, level)
43
+ @anchors[clause["id"]] =
44
+ { label: num, level: level, xref: num, subtype: "clause" }
45
+ i = Counter.new
46
+ clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
47
+ "./references"))
48
+ .each do |c|
49
+ i.increment(c)
50
+ section_names1(c, "#{num}.#{i.print}", level + 1)
51
+ end
52
+ end
53
+
54
+ def annex_names1(clause, num, level)
55
+ @anchors[clause["id"]] = { label: num, xref: num, level: level,
56
+ subtype: "annex" }
57
+ i = Counter.new
58
+ clause.xpath(ns("./clause | ./references")).each do |c|
59
+ i.increment(c)
60
+ annex_names1(c, "#{num}.#{i.print}", level + 1)
61
+ end
62
+ end
63
+
64
+ def appendix_names1(clause, num, level, container)
65
+ @anchors[clause["id"]] = { label: num, xref: num, level: level,
66
+ container: container }
67
+ i = Counter.new
68
+ clause.xpath(ns("./clause | ./references")).each do |c|
69
+ i.increment(c)
70
+ appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
71
+ end
72
+ end
73
+
74
+ def annex_name_lbl(clause, num)
75
+ super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>")
76
+ end
77
+ end
78
+ end
79
+ end
@@ -73,8 +73,14 @@
73
73
  <text/>
74
74
  </element>
75
75
  </define>
76
- <define name="script">
76
+ <define name="locale">
77
77
  <a:documentation>ISO-639</a:documentation>
78
+ <element name="locale">
79
+ <text/>
80
+ </element>
81
+ </define>
82
+ <define name="script">
83
+ <a:documentation>ISO-3166</a:documentation>
78
84
  <element name="script">
79
85
  <text/>
80
86
  </element>
@@ -93,6 +99,9 @@
93
99
  <!-- multiple languages and scripts possible: comma delimit them if so -->
94
100
  <attribute name="language"/>
95
101
  </optional>
102
+ <optional>
103
+ <attribute name="locale"/>
104
+ </optional>
96
105
  <optional>
97
106
  <attribute name="script"/>
98
107
  </optional>
@@ -136,6 +145,9 @@
136
145
  <!-- multiple languages and scripts possible: comma delimit them if so -->
137
146
  <attribute name="language"/>
138
147
  </optional>
148
+ <optional>
149
+ <attribute name="locale"/>
150
+ </optional>
139
151
  <optional>
140
152
  <attribute name="script"/>
141
153
  </optional>
@@ -650,6 +662,9 @@
650
662
  <zeroOrMore>
651
663
  <ref name="language"/>
652
664
  </zeroOrMore>
665
+ <zeroOrMore>
666
+ <ref name="locale"/>
667
+ </zeroOrMore>
653
668
  <zeroOrMore>
654
669
  <ref name="script"/>
655
670
  </zeroOrMore>
@@ -741,6 +756,9 @@
741
756
  <zeroOrMore>
742
757
  <ref name="language"/>
743
758
  </zeroOrMore>
759
+ <zeroOrMore>
760
+ <ref name="locale"/>
761
+ </zeroOrMore>
744
762
  <zeroOrMore>
745
763
  <ref name="script"/>
746
764
  </zeroOrMore>
@@ -854,6 +872,15 @@
854
872
  <optional>
855
873
  <attribute name="type"/>
856
874
  </optional>
875
+ <optional>
876
+ <attribute name="language"/>
877
+ </optional>
878
+ <optional>
879
+ <attribute name="locale"/>
880
+ </optional>
881
+ <optional>
882
+ <attribute name="script"/>
883
+ </optional>
857
884
  <data type="anyURI"/>
858
885
  </define>
859
886
  <define name="DateType">
@@ -882,6 +909,7 @@
882
909
  <value>vote-started</value>
883
910
  <value>vote-ended</value>
884
911
  <value>announced</value>
912
+ <value>stable-until</value>
885
913
  </choice>
886
914
  </define>
887
915
  <define name="bdate">
@@ -930,6 +958,9 @@
930
958
  <optional>
931
959
  <attribute name="language"/>
932
960
  </optional>
961
+ <optional>
962
+ <attribute name="locale"/>
963
+ </optional>
933
964
  <optional>
934
965
  <attribute name="script"/>
935
966
  </optional>
@@ -215,11 +215,11 @@ pub = (node.attr("publisher") || "ISO").split(/[;,]/)
215
215
 
216
216
  def id_stage_abbr1(stage, substage, node, bare)
217
217
  if bare
218
- IsoDoc::Iso::Metadata.new("en", "Latn", @i18n)
218
+ IsoDoc::Iso::Metadata.new("en", "Latn", nil, @i18n)
219
219
  .status_abbrev(stage_abbr(stage, substage, doctype(node)),
220
220
  substage, nil, nil, doctype(node))
221
221
  else
222
- IsoDoc::Iso::Metadata.new("en", "Latn", @i18n)
222
+ IsoDoc::Iso::Metadata.new("en", "Latn", nil, @i18n)
223
223
  .status_abbrev(stage_abbr(stage, substage, doctype(node)),
224
224
  substage, node.attr("iteration"),
225
225
  node.attr("draft"), doctype(node))
@@ -205,6 +205,15 @@
205
205
  <data type="boolean"/>
206
206
  </attribute>
207
207
  </optional>
208
+ <optional>
209
+ <attribute name="style">
210
+ <choice>
211
+ <value>basic</value>
212
+ <value>full</value>
213
+ <value>short</value>
214
+ </choice>
215
+ </attribute>
216
+ </optional>
208
217
  <ref name="XrefBody"/>
209
218
  </element>
210
219
  </define>
@@ -508,6 +508,9 @@
508
508
  </define>
509
509
  <define name="stagename">
510
510
  <element name="stagename">
511
+ <optional>
512
+ <attribute name="abbreviation"/>
513
+ </optional>
511
514
  <text/>
512
515
  </element>
513
516
  </define>
@@ -27,7 +27,7 @@ module Metanorma
27
27
  end
28
28
  end
29
29
 
30
- # ISO/IEC DIR 2, 15.5.3
30
+ # ISO/IEC DIR 2, 15.5.3, 20.2
31
31
  # does not deal with preceding text marked up
32
32
  def see_xrefs_validate(root)
33
33
  root.xpath("//xref").each do |t|
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "2.1.9".freeze
3
+ VERSION = "2.2.1".freeze
4
4
  end
5
5
  end
data/lib/metanorma/iso.rb CHANGED
@@ -2,6 +2,5 @@ require_relative "./iso/processor"
2
2
 
3
3
  module Metanorma
4
4
  module Iso
5
-
6
5
  end
7
6
  end
@@ -3,16 +3,24 @@ module Metanorma
3
3
  class Modspec
4
4
  # Don't want to inherit from Metanorma::Requirements::Modspec
5
5
  class Iso < ::Metanorma::Requirements::Modspec
6
+ def recommendation_label_xref(elem, label, xrefs, _type)
7
+ id = @reqtlabels[label]
8
+ number = xrefs.anchor(id, :xref_reqt2reqt, false)
9
+ number.nil? and return type
10
+ elem.ancestors("requirement, recommendation, permission").empty? and
11
+ return number
12
+ "<xref target='#{id}'>#{number}</xref>"
13
+ end
14
+
6
15
  def recommendation_label(elem, type, xrefs)
7
16
  lbl = super
8
17
  title = elem.at(ns("./title"))
9
- return lbl unless title # &&
18
+ return lbl unless title &&
19
+ elem.ancestors("requirement, recommendation, permission").empty?
10
20
 
11
- # elem.ancestors("requirement, recommendation, permission").empty?
12
-
13
- lbl += l10n(": ") if lbl
21
+ lbl += ": " if lbl
14
22
  lbl += title.children.to_xml
15
- lbl
23
+ l10n(lbl)
16
24
  end
17
25
 
18
26
  # ISO labels modspec reqt as table, with reqt label as title
@@ -30,7 +38,8 @@ module Metanorma
30
38
  def requirement_component_parse(node, out)
31
39
  if node["exclude"] != "true" && node.name == "description"
32
40
  lbl = "statement"
33
- lbl = "declaration" if recommend_class(node) == "recommendclass"
41
+ recommend_class(node.parent) == "recommendclass" and
42
+ lbl = "description"
34
43
  out << "<tr><td>#{@labels['modspec'][lbl]}</td>"\
35
44
  "<td>#{node.children.to_xml}</td></tr>"
36
45
  else
@@ -38,11 +47,13 @@ module Metanorma
38
47
  end
39
48
  end
40
49
 
41
- def requirement_table_cleanup(table)
50
+ def requirement_table_cleanup(node, table)
42
51
  return table unless table["type"] == "recommendclass"
43
52
 
53
+ label = if node["type"] == "conformanceclass" then "conformancetests"
54
+ else "provisions" end
44
55
  ins = table.at(ns("./tbody/tr[td/table]")) or return table
45
- ins.replace("<tr><td>#{@labels['modspec']['provisions']}</td>" +
56
+ ins.replace("<tr><td>#{@labels['modspec'][label]}</td>" +
46
57
  "<td>#{nested_tables_names(table)}</td></tr>")
47
58
  table.xpath(ns("./tbody/tr[td/table]")).each(&:remove)
48
59
  table
@@ -54,6 +65,61 @@ module Metanorma
54
65
  m << t.at(ns("./name")).children.to_xml
55
66
  end.join("<br/>")
56
67
  end
68
+
69
+ def postprocess_anchor_struct(block, anchor)
70
+ super
71
+ anchor[:xref_reqt2reqt] = anchor[:xref_bare]
72
+ if l = block.at(ns("./title"))
73
+ anchor[:xref_reqt2reqt] =
74
+ l10n("#{anchor[:xref_reqt2reqt]}: #{l.children.to_xml.strip}")
75
+ end
76
+ anchor
77
+ end
78
+
79
+ def reqt_ids(docxml)
80
+ docxml.xpath(ns("//requirement | //recommendation | //permission"))
81
+ .each_with_object({}) do |r, m|
82
+ id = r.at(ns("./identifier")) or next
83
+ m[id.text] =
84
+ { id: r["id"],
85
+ lbl: @xrefs.anchor(r["id"], :xref_reqt2reqt, false) }
86
+ end
87
+ end
88
+
89
+ def reqt_links_test(docxml)
90
+ docxml.xpath(ns("//requirement | //recommendation | //permission"))
91
+ .each_with_object({}) do |r, m|
92
+ next unless %w(conformanceclass
93
+ verification).include?(r["type"])
94
+
95
+ subj = r.at(ns("./classification[tag = 'target']/value"))
96
+ id = r.at(ns("./identifier")) or next
97
+ lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id], :xref_reqt2reqt,
98
+ false)
99
+ next unless subj
100
+
101
+ m[subj.text] = { lbl: lbl, id: r["id"] }
102
+ end
103
+ end
104
+
105
+ def reqt_links_class(docxml)
106
+ docxml.xpath(ns("//requirement | //recommendation | //permission"))
107
+ .each_with_object({}) do |r, m|
108
+ next unless %w(class
109
+ conformanceclass).include?(r["type"])
110
+
111
+ id = r.at(ns("./identifier")) or next
112
+ r.xpath(ns("./requirement | ./recommendation | ./permission"))
113
+ .each do |r1|
114
+ id1 = r1.at(ns("./identifier")) or next
115
+ lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id],
116
+ :xref_reqt2reqt, false)
117
+ next unless lbl
118
+
119
+ m[id1.text] = { lbl: lbl, id: r["id"] }
120
+ end
121
+ end
122
+ end
57
123
  end
58
124
  end
59
125
  end
data/lib/metanorma-iso.rb CHANGED
@@ -10,6 +10,7 @@ require_relative "isodoc/iso/isosts_convert"
10
10
  require_relative "isodoc/iso/presentation_xml_convert"
11
11
  require_relative "html2doc/lists"
12
12
  require "asciidoctor/extensions"
13
+ require "metanorma"
13
14
 
14
15
  if defined? Metanorma::Registry
15
16
  require_relative "metanorma/iso"
@@ -1,4 +1,56 @@
1
+ extenttemplate:
2
+ book: "{{ volume }} {{ page }}"
3
+ booklet: book
4
+ proceedings: book
5
+ journal: book
6
+ standard: book
7
+ techreport: book
8
+ inbook: "{{ volume }} {{ page }}"
9
+ misc: "{{ volume }} {{issue}} {{ page }}, {{ duration }}"
10
+ nametemplate:
11
+ one: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %}"
12
+ two: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , & {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}.{% endif %}"
13
+ more: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}. {% endif %} , & {% if nonpersonal[2] %}{{ nonpersonal[2] }}{% else %}{{surname[2]}} {{initials[2] | join: ''}}.{% endif %}"
14
+ # disabled the following: they should be provided in inheriting calls
15
+ # etal: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0] | upcase}} ,_{%if given[0]%}{{given[0]}} {{middle[0]}}{%else%}{{initials[0] | join: ' '}}.{%endif%}{% endif %}, {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{%if given[1]%}{{given[1]}} {{middle[1]}}{%else%}{{initials[1] | join: ' '}}.{%endif%} {{surname[1] | upcase}}{% endif %} <em>et al.</em>"
16
+ # etal_count: 5
17
+ seriestemplate: "{% if series_formatted %}{{ series_formatted }}{%else%}{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %} ({{series_run}}) {{series_num}}|({{series_partnumber}}){%endif%}"
18
+ journaltemplate: "<em>{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %}</em> ({{series_run}}) {{ labels['volume'] }}_{{series_num}} {{ labels['part'] }}_{{series_partnumber}}"
1
19
  template:
2
20
  # skip standardidentifier, it is inserted in front of formattedref within metanorma
3
21
  standard: "<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}."
4
- website: "{{ creatornames }} ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{ place }}: {{ publisher }}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. {{ standardidentifier | first }}. {{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
22
+ website: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{place}}: {{ publisher }}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
23
+ book: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . <em>{{ title }}</em> . {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
24
+ booklet: book
25
+ manual: book
26
+ proceedings: book
27
+ inbook: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }} . <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames}}). {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
28
+ inproceedings: inbook
29
+ incollection: inbook
30
+ journal: "<em>{{ title}}</em> . {{ edition | capitalize_first }}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
31
+ article: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }}. {{ series }} . {{date}}, {{ extent }}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
32
+ software: "<smallcap>{{ creatornames }}</smallcap> ({{ role}}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize}}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
33
+ electronic resource: software
34
+ dataset: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize }}. {{ labels['in'] | capitalize }}:_{{series}}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. {{ authoritative_identifier | join '. ' }}. {{ other_identifier | join '. ' }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ size }}. {{ extent}}. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
35
+ webresource: website
36
+ unpublished: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
37
+ presentation: unpublished
38
+ thesis: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{place}}: {{ publisher }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
39
+ misc: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ date }}."
40
+ # following are # unsupported types:
41
+ map: misc
42
+ audiovisual: misc
43
+ film: misc
44
+ video: misc
45
+ broadcast: misc
46
+ graphic_work: misc
47
+ music: misc
48
+ performance: misc
49
+ patent: misc
50
+ archival: misc
51
+ social_media: misc
52
+ alert: misc
53
+ message: misc
54
+ conversation: misc
55
+ internal: misc
56
+
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
30
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
- spec.add_dependency "metanorma-standoc", "~> 2.2.0"
32
+ spec.add_dependency "metanorma-standoc", "~> 2.2.4"
33
33
  spec.add_dependency "mnconvert", "~> 1.14"
34
34
  spec.add_dependency "pubid-iso"
35
35
  spec.add_dependency "ruby-jing"
@@ -1332,7 +1332,7 @@ RSpec.describe IsoDoc do
1332
1332
  <clause id="D" obligation="normative" type="scope" displayorder='3'>
1333
1333
  <title depth="1">1<tab/>Scope</title>
1334
1334
  <p id="E">
1335
- <eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712, <span class='citetbl'>第1–1表</span></eref>
1335
+ <eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712 <span class='citetbl'>第1–1表</span></eref>
1336
1336
  </p>
1337
1337
  </clause>
1338
1338
  <clause id="H" obligation="normative" displayorder='5'>
@@ -1423,7 +1423,7 @@ RSpec.describe IsoDoc do
1423
1423
  <div id='D'>
1424
1424
  <h1>1 Scope</h1>
1425
1425
  <p id='E'>
1426
- <a href='#ISO712'>ISO 712, 第1–1表</a>
1426
+ <a href='#ISO712'>ISO 712 第1–1表</a>
1427
1427
  </p>
1428
1428
  </div>
1429
1429
  <div>