metanorma-iso 3.1.8 → 3.2.1

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.
@@ -20,18 +20,16 @@ module Metanorma
20
20
  def isosubgroup_validate(root)
21
21
  root.xpath("#{COMMITTEE_XPATH}[@type = 'Technical committee']/@subtype").each do |t|
22
22
  %w{TC PC JTC JPC}.include?(t.text) or
23
- @log.add("Document Attributes", nil,
24
- "invalid technical committee type #{t}")
23
+ @log.add("ISO_2", nil, params: [t.text])
25
24
  end
26
25
  root.xpath("#{COMMITTEE_XPATH}[@type = 'Subcommittee']/@subtype").each do |t|
27
26
  %w{SC JSC}.include?(t.text) or
28
- @log.add("Document Attributes", nil,
29
- "invalid subcommittee type #{t}")
27
+ @log.add("ISO_3", nil, params: [t.text])
30
28
  end
31
29
  end
32
30
 
33
31
  def termdef_warn(text, regex, elem, term, msg)
34
- regex.match(text) && @log.add("Style", elem, "#{term}: #{msg}")
32
+ regex.match(text) && @log.add(msg, elem, params: [term])
35
33
  end
36
34
 
37
35
  # ISO/IEC DIR 2, 16.5.6
@@ -39,11 +37,10 @@ module Metanorma
39
37
  xmldoc.xpath("//term").each do |t|
40
38
  para = t.at("./definition/verbal-definition") || return
41
39
  term = t.at("./preferred//name").text
42
- @lang == "en" and termdef_warn(para.text, /\A(the|a)\b/i, t, term,
43
- "term definition starts with article")
40
+ @lang == "en" and
41
+ termdef_warn(para.text, /\A(the|a)\b/i, t, term, "ISO_4")
44
42
  %(Cyrl Latn).include?(@script) and
45
- termdef_warn(para.text, /\.\Z/i, t, term,
46
- "term definition ends with period")
43
+ termdef_warn(para.text, /\.\Z/i, t, term, "ISO_35")
47
44
  end
48
45
  end
49
46
 
@@ -53,15 +50,13 @@ module Metanorma
53
50
  guide amendment technical-corrigendum committee-document addendum
54
51
  recommendation)
55
52
  .include? @doctype or
56
- @log.add("Document Attributes", nil,
57
- "#{@doctype} is not a recognised document type")
53
+ @log.add("ISO_5", nil, params: [@doctype])
58
54
  end
59
55
 
60
56
  def iteration_validate(xmldoc)
61
57
  iteration = xmldoc&.at("//bibdata/status/iteration")&.text or return
62
58
  /^\d+/.match(iteration) or
63
- @log.add("Document Attributes", nil,
64
- "#{iteration} is not a recognised iteration")
59
+ @log.add("ISO_6", nil, params: [iteration])
65
60
  end
66
61
 
67
62
  def bibdata_validate(doc)
@@ -75,7 +70,7 @@ module Metanorma
75
70
  xmldoc.xpath("//figure//figure").each do |f|
76
71
  elems.each do |k, v|
77
72
  f.xpath(".//#{v}").each do |n|
78
- @log.add("Style", n, "#{k} is not permitted in a subfigure")
73
+ @log.add("ISO_7", n, params: [k])
79
74
  end
80
75
  end
81
76
  end
@@ -106,9 +101,7 @@ module Metanorma
106
101
  def bibitem_validate(xmldoc)
107
102
  xmldoc.xpath("//bibitem[date/on = '–']").each do |b|
108
103
  b.at("./note[@type = 'Unpublished-Status']") or
109
- @log.add("Style", b,
110
- "Reference does not have an " \
111
- "associated footnote indicating unpublished status")
104
+ @log.add("ISO_8", b)
112
105
  end
113
106
  end
114
107
 
@@ -22,32 +22,26 @@ module Metanorma
22
22
  def foreword_validate(root)
23
23
  f = root.at("//foreword") || return
24
24
  s = f.at("./clause")
25
- @log.add("Style", f, "foreword contains subclauses") unless s.nil?
25
+ @log.add("ISO_23", f) unless s.nil?
26
26
  end
27
27
 
28
28
  # ISO/IEC DIR 2, 15.4
29
29
  def normref_validate(root)
30
30
  f = root.at("//references[@normative = 'true']") || return
31
31
  f.at("./references | ./clause") &&
32
- @log.add("Style", f, "normative references contains subclauses")
32
+ @log.add("ISO_24", f)
33
33
  end
34
34
 
35
- ONE_SYMBOLS_WARNING = "Only one Symbols and Abbreviated " \
36
- "Terms section in the standard".freeze
37
- NON_DL_SYMBOLS_WARNING = "Symbols and Abbreviated Terms can " \
38
- "only contain a definition list".freeze
39
-
40
35
  def symbols_validate(root)
41
36
  f = root.xpath("//definitions")
42
37
  f.empty? && return
43
38
  (f.size == 1 || @vocab) or
44
- @log.add("Style", f.first, ONE_SYMBOLS_WARNING)
39
+ @log.add("ISO_25", f.first)
45
40
  f.first.elements.reject { |e| %w(title dl).include? e.name }.empty? or
46
- @log.add("Style", f.first, NON_DL_SYMBOLS_WARNING)
41
+ @log.add("ISO_26", f.first)
47
42
  @vocab and f.each do |f1|
48
43
  f1.at("./ancestor::annex") or
49
- @log.add("Style", f1, "In vocabulary documents, Symbols and " \
50
- "Abbreviated Terms are only permitted in annexes")
44
+ @log.add("ISO_27", f1)
51
45
  end
52
46
  end
53
47
 
@@ -57,18 +51,18 @@ module Metanorma
57
51
 
58
52
  test = accepted.map { |a| n.at(a) }
59
53
  if test.all?(&:nil?)
60
- @log.add("Style", nil, msg)
54
+ @log.add("ISO_28", nil, params: [msg])
61
55
  end
62
56
  names
63
57
  end
64
58
 
65
59
  def sections_presence_validate(root)
66
60
  root.at("//sections/clause[@type = 'scope']") or
67
- @log.add("Style", nil, "Scope clause missing")
61
+ @log.add("ISO_29", nil)
68
62
  root.at("//references[@normative = 'true']") or
69
- @log.add("Style", nil, "Normative references missing")
63
+ @log.add("ISO_30", nil)
70
64
  root.at("//terms") or
71
- @log.add("Style", nil, "Terms & definitions missing")
65
+ @log.add("ISO_31", nil)
72
66
  end
73
67
 
74
68
  # spec of permissible section sequence
@@ -116,24 +110,20 @@ module Metanorma
116
110
 
117
111
  def sections_sequence_validate_body(names, elem)
118
112
  if elem.nil? || elem.name != "clause"
119
- @log.add("Style", elem, "Document must contain at least one clause")
113
+ @log.add("ISO_32", elem)
120
114
  end
121
115
  elem&.at("./self::clause") or
122
- @log.add("Style", elem, "Document must contain clause after " \
123
- "Terms and Definitions")
116
+ @log.add("ISO_33", elem)
124
117
  elem&.at("./self::clause[@type = 'scope']") and
125
- @log.add("Style", elem,
126
- "Scope must not occur after Terms and Definitions")
118
+ @log.add("ISO_34", elem)
127
119
  elem = names.shift
128
120
  while elem&.name == "clause"
129
121
  elem&.at("./self::clause[@type = 'scope']") and
130
- @log.add("Style", elem,
131
- "Scope must not occur after Terms and Definitions")
122
+ @log.add("ISO_34", elem)
132
123
  elem = names.shift
133
124
  end
134
125
  %w(annex references).include? elem&.name or
135
- @log.add("Style", elem,
136
- "Only annexes and references can follow clauses")
126
+ @log.add("ISO_36", elem)
137
127
  [names, elem]
138
128
  end
139
129
 
@@ -142,8 +132,7 @@ module Metanorma
142
132
  elem = names.shift
143
133
  end
144
134
  %w(annex references).include? elem&.name or
145
- @log.add("Style", elem,
146
- "Only annexes and references can follow terms and clauses")
135
+ @log.add("ISO_37", elem)
147
136
  [names, elem]
148
137
  end
149
138
 
@@ -151,36 +140,27 @@ module Metanorma
151
140
  while elem&.name == "annex"
152
141
  elem = names.shift
153
142
  if elem.nil?
154
- @log.add("Style", nil, "Document must include (references) " \
155
- "Normative References")
143
+ @log.add("ISO_38", nil)
156
144
  end
157
145
  end
158
146
  elem.nil? and return
159
147
  elem&.at("./self::references[@normative = 'true']") ||
160
- @log.add("Style", nil, "Document must include (references) " \
161
- "Normative References")
148
+ @log.add("ISO_38", nil)
162
149
  elem = names&.shift
163
150
  elem.nil? and return
164
151
  elem&.at("./self::references[@normative = 'false']") ||
165
- @log.add("Style", elem,
166
- "Final section must be (references) Bibliography")
152
+ @log.add("ISO_40", elem)
167
153
  names.empty? ||
168
- @log.add("Style", elem,
169
- "There are sections after the final Bibliography")
154
+ @log.add("ISO_41", elem)
170
155
  end
171
156
 
172
- NORM_ISO_WARN = <<~WARN.freeze
173
- non-ISO/IEC reference is allowed as normative only subject to the conditions in ISO/IEC DIR 2 10.2
174
- WARN
175
- SCOPE_WARN = "Scope contains subclauses: should be succinct".freeze
176
-
177
157
  def section_style(root)
178
158
  foreword_style(root.at("//foreword"))
179
159
  introduction_style(root.at("//introduction"))
180
160
  scope_style(root.at("//clause[@type = 'scope']"))
181
161
  scope = root.at("//clause[@type = 'scope']/clause")
182
162
  # ISO/IEC DIR 2, 14.4
183
- scope.nil? || style_warning(scope, SCOPE_WARN, nil)
163
+ scope.nil? || @log.add("ISO_39", scope)
184
164
  tech_report_style(root)
185
165
  end
186
166
 
@@ -205,7 +185,7 @@ module Metanorma
205
185
  def norm_bibitem_style(root)
206
186
  root.xpath(NORM_BIBITEMS).each do |b|
207
187
  if b.at(ISO_PUBLISHER_XPATH).nil?
208
- @log.add("Style", b, "#{NORM_ISO_WARN}: #{b.text}")
188
+ @log.add("ISO_42", b, params: [b.text])
209
189
  end
210
190
  end
211
191
  end
@@ -221,7 +201,7 @@ module Metanorma
221
201
  def onlychild_clause_validate(root)
222
202
  root.xpath(Standoc::Utils::SUBCLAUSE_XPATH).each do |c|
223
203
  c.xpath("../clause").size == 1 or next
224
- @log.add("Style", c, "subclause is only child")
204
+ @log.add("ISO_43", c)
225
205
  end
226
206
  end
227
207
 
@@ -230,15 +210,11 @@ module Metanorma
230
210
  terms = root.xpath("//sections/terms | //sections/clause[.//terms]")
231
211
  if terms.size == 1
232
212
  ((t = terms.first.at("./title")) && (t&.text == @i18n.termsdef)) or
233
- @log.add("Style", terms.first,
234
- "Single terms clause in vocabulary document " \
235
- "should have normal Terms and definitions heading")
213
+ @log.add("ISO_44", terms.first)
236
214
  elsif terms.size > 1
237
215
  terms.each do |x|
238
216
  ((t = x.at("./title")) && /^#{@i18n.termsrelated}/.match?(t&.text)) or
239
- @log.add("Style", x,
240
- "Multiple terms clauses in vocabulary document " \
241
- "should have 'Terms related to' heading")
217
+ @log.add("ISO_45", x)
242
218
  end
243
219
  end
244
220
  end
@@ -142,7 +142,7 @@ module Metanorma
142
142
  @novalid and return
143
143
  w = msg
144
144
  w += ": #{text}" if text
145
- @log.add("Style", node, w, display:)
145
+ @log.add("STANDOC_48", node, params: [w], display:)
146
146
  end
147
147
 
148
148
  ASSETS_TO_STYLE =
@@ -11,10 +11,10 @@ module Metanorma
11
11
  title_intro_en = title_lang_part(root, "intro", "en")
12
12
  title_intro_fr = title_lang_part(root, "intro", "fr")
13
13
  if title_intro_en.nil? && !title_intro_fr.nil?
14
- @log.add("Style", title_intro_fr, "No English Title Intro!")
14
+ @log.add("ISO_10", title_intro_fr)
15
15
  end
16
16
  if !title_intro_en.nil? && title_intro_fr.nil?
17
- @log.add("Style", title_intro_en, "No French Title Intro!")
17
+ @log.add("ISO_11", title_intro_en)
18
18
  end
19
19
  end
20
20
 
@@ -22,20 +22,20 @@ module Metanorma
22
22
  title_main_en = title_lang_part(root, "main", "en")
23
23
  title_main_fr = title_lang_part(root, "main", "fr")
24
24
  if title_main_en.nil? && !title_main_fr.nil?
25
- @log.add("Style", title_main_fr, "No English Title!")
25
+ @log.add("ISO_12", title_main_fr)
26
26
  end
27
27
  if !title_main_en.nil? && title_main_fr.nil?
28
- @log.add("Style", title_main_en, "No French Title!")
28
+ @log.add("ISO_13", title_main_en)
29
29
  end
30
30
  end
31
31
 
32
32
  def title_part_validate(root)
33
33
  title_part_en = title_lang_part(root, "part", "en")
34
34
  title_part_fr = title_lang_part(root, "part", "fr")
35
- (title_part_en.nil? && !title_part_fr.nil?) &&
36
- @log.add("Style", title_part_fr, "No English Title Part!")
37
- (!title_part_en.nil? && title_part_fr.nil?) &&
38
- @log.add("Style", title_part_en, "No French Title Part!")
35
+ title_part_en.nil? && !title_part_fr.nil? &&
36
+ @log.add("ISO_14", title_part_fr)
37
+ !title_part_en.nil? && title_part_fr.nil? &&
38
+ @log.add("ISO_15", title_part_en)
39
39
  end
40
40
 
41
41
  # ISO/IEC DIR 2, 11.4
@@ -46,7 +46,7 @@ module Metanorma
46
46
  "organization[abbreviation = 'IEC' or " \
47
47
  "name = 'International Electrotechnical Commission']")
48
48
  subpart && !iec and
49
- @log.add("Style", docid, "Subpart defined on non-IEC document!")
49
+ @log.add("ISO_16", docid)
50
50
  end
51
51
 
52
52
  # ISO/IEC DIR 2, 11.5.2
@@ -56,11 +56,10 @@ module Metanorma
56
56
  Publicly\sAvailable\sSpecification | Technical\sReport | Guide /xi
57
57
  title_main_en = title_lang_part(root, "main", "en")
58
58
  !title_main_en.nil? && doctypes.match(title_main_en.text) and
59
- @log.add("Style", title_main_en, "Main Title may name document type")
59
+ @log.add("ISO_17", title_main_en)
60
60
  title_intro_en = title_lang_part(root, "intro", "en")
61
61
  !title_intro_en.nil? && doctypes.match(title_intro_en.text) and
62
- @log.add("Style", title_intro_en,
63
- "Title Intro may name document type")
62
+ @log.add("ISO_18", title_intro_en)
64
63
  end
65
64
 
66
65
  # ISO/IEC DIR 2, 22.2
@@ -70,8 +69,7 @@ module Metanorma
70
69
  s.xpath("./clause | ./terms | ./references").each do |ss|
71
70
  subtitle = ss.at("./title")
72
71
  (!subtitle.nil? && !subtitle&.text&.empty?) or
73
- @log.add("Style", ss,
74
- "#{title}: each first-level subclause must have a title")
72
+ @log.add("ISO_19", ss, params: [title])
75
73
  end
76
74
  end
77
75
  end
@@ -88,8 +86,7 @@ module Metanorma
88
86
  withtitle = withtitle || (subtitle && !subtitle.text.empty?)
89
87
  end
90
88
  notitle && withtitle &&
91
- @log.add("Style", nil,
92
- "#{label}: all subclauses must have a title, or none")
89
+ @log.add("ISO_20", nil, params: [label])
93
90
  end
94
91
 
95
92
  # https://www.iso.org/ISO-house-style.html#iso-hs-s-text-r-p-full
@@ -11,8 +11,7 @@ module Metanorma
11
11
  !preceding.nil? &&
12
12
  /\b(see| refer to)\p{Zs}*\Z/mi.match(preceding) or next
13
13
  anchors[t["target"]] and
14
- @log.add("Style", t,
15
- "'see #{t['target']}' is pointing to a normative section")
14
+ @log.add("ISO_46", t, params: [t["target"]])
16
15
  end
17
16
  end
18
17
 
@@ -37,13 +36,11 @@ module Metanorma
37
36
  !prec.nil? && /\b(see|refer to)\p{Zs}*\Z/mi.match(prec) or next
38
37
  unless target = bibitemids[t["bibitemid"]]
39
38
  # unless target = root.at("//bibitem[@anchor = '#{t['bibitemid']}']")
40
- @log.add("Bibliography", t,
41
- "'#{t} is not pointing to a real reference")
39
+ @log.add("ISO_47", t, params: [t])
42
40
  next
43
41
  end
44
42
  target[:norm] and
45
- @log.add("Style", t,
46
- "'see #{t}' is pointing to a normative reference")
43
+ @log.add("ISO_48", t, params: [t])
47
44
  end
48
45
  end
49
46
 
@@ -64,9 +61,7 @@ module Metanorma
64
61
  root.xpath("//eref[descendant::locality]").each do |t|
65
62
  if /^(ISO|IEC)/.match?(t["citeas"]) &&
66
63
  !/: ?(\d+{4}|–)$/.match?(t["citeas"])
67
- @log.add("Style", t,
68
- "undated reference #{t['citeas']} should not contain " \
69
- "specific elements")
64
+ @log.add("ISO_49", t, params: [t["citeas"]])
70
65
  end
71
66
  end
72
67
  end
@@ -88,13 +83,9 @@ module Metanorma
88
83
  def term_xrefs_validate1(xref, termids)
89
84
  closest_id = xref.xpath("./ancestor::*[@id]")&.last or return
90
85
  termids[xref["target"]] && !termids[closest_id["id"]] and
91
- @log.add("Style", xref,
92
- "only terms clauses can cross-reference terms clause " \
93
- "(#{xref['target']})")
86
+ @log.add("ISO_50", xref, params: [xref["target"]])
94
87
  !termids[xref["target"]] && termids[closest_id["id"]] and
95
- @log.add("Style", xref,
96
- "non-terms clauses cannot cross-reference terms clause " \
97
- "(#{xref['target']})")
88
+ @log.add("ISO_51", xref, params: [xref["target"]])
98
89
  end
99
90
 
100
91
  # require that all assets of a particular type be cross-referenced
@@ -112,9 +103,8 @@ module Metanorma
112
103
  (xmldoc.xpath(xpath) - xmldoc.xpath(exc)).each do |x|
113
104
  x["unnumbered"] == "true" and next
114
105
  @doc_xrefs[x["anchor"]] or
115
- @log.add("Style", x, "#{name} #{x['anchor']} has not been " \
116
- "cross-referenced within document",
117
- severity: xpath == "//formula" ? 2 : 1)
106
+ @log.add(xpath == "//formula" ? "ISO_22" : "ISO_21",
107
+ x, params: [name, x["anchor"]])
118
108
  end
119
109
  end
120
110
 
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Iso
3
- VERSION = "3.1.8".freeze
3
+ VERSION = "3.2.1".freeze
4
4
  end
5
5
  end
@@ -16,28 +16,68 @@ nametemplate:
16
16
  # etal_count: 5
17
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
18
  journaltemplate: "<em>{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %}</em> ({{series_run}}) {{ labels['volume'] }}_{{series_num}} {{ labels['part'] }}_{{series_partnumber}}"
19
+
20
+ citetemplate:
21
+ short:
22
+ standard: "{% if home_standard %}<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}{% else %}{{ creatornames | selective_upcase }}$$$ <em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }} $$$ {{ labels['version'] | capitalize }}_{{ edition_raw }}$$$ {{labels['updated'] | capitalize }}_{{date_updated}}$$$ {{status | capitalize}}$$$ {{ authorizer }}{% endif %}"
23
+ website: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em><span_class='stddocTitle'>{{ title }}</span></em> [{{ labels['website'] }}]$$$ {{ labels['version'] | capitalize }}_{{ edition_raw }}$$$ {{place}}: {{ publisher }}$$$ {{date}}"
24
+ book: "{{ creatornames | selective_upcase }}$$$ ({{role}}) <em>{{ title }}</em> $$$ {{ edition | capitalize_first }}$$$ ({{ series }})$$$ {% if place %}{{place}}:{%endif%} {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}"
25
+ booklet: book
26
+ manual: book
27
+ techreport: book
28
+ proceedings: book
29
+ inbook: "{{ creatornames | selective_upcase }}$$$ ({{role}}) {{ title }} $$$ <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames | replace: '+++', ''}}) $$$ {{ edition | capitalize_first }}$$$ ({{ series }})$$$ {% if place %}{{place}}:{%endif%} {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}"
30
+ inproceedings: inbook
31
+ incollection: inbook
32
+ journal: "<em>{{ title}}</em> $$$ {{ edition | capitalize_first }}$$$ {{place}}: {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}"
33
+ article: "{{ creatornames | selective_upcase }}$$$ ({{role}}) {{ title }}$$$ {{ series }} $$$ {{date}}, {{ extent }}$$$ {{ labels['updated'] | capitalize }}:_{{date_updated}}"
34
+ software: "{{ creatornames | selective_upcase }}$$$ ({{ role}}) <em>{{ title }}</em> $$$ {{ labels['version'] | capitalize }}_{{ edition_raw }}$$$ {{medium | capitalize}}$$$ {{place}}: {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}"
35
+ electronic resource: software
36
+ dataset: "{{ creatornames | selective_upcase }}$$$ ({{ 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 '$$$ ' }}"
37
+ webresource: website
38
+ unpublished: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em>{{ title }}</em> $$$ {{ medium | capitalize }}$$$ {{ date }}$$$ {{ labels['at'] | capitalize}}:_{{ access_location }}"
39
+ presentation: unpublished
40
+ thesis: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em>{{ title }}</em> $$$ {{ medium | capitalize }}$$$ {{place}}: {{ publisher }}$$$ {{ date }}"
41
+ misc: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em>{{ title }}</em> $$$ {{ date }}$$$"
42
+ # following are # unsupported types:
43
+ map: misc
44
+ audiovisual: misc
45
+ film: misc
46
+ video: misc
47
+ broadcast: misc
48
+ graphic_work: misc
49
+ music: misc
50
+ performance: misc
51
+ patent: misc
52
+ archival: misc
53
+ social_media: misc
54
+ alert: misc
55
+ message: misc
56
+ conversation: misc
57
+ internal: misc
58
+
19
59
  template:
20
60
  # skip standardidentifier, it is inserted in front of formattedref within metanorma
21
- standard: "{% if home_standard %}<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}{% else %}{{ creatornames | selective_upcase }}. <em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }} . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{labels['updated'] | capitalize }}_{{date_updated}}. {{status | capitalize}}. {{ authorizer }}. {{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>.{% endif %}"
22
- website: "{{ creatornames | selective_upcase }}. ({{ role }}) <em><span_class='stddocTitle'>{{ title }}</span></em> [{{ labels['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: "{{ creatornames | selective_upcase }}. ({{role}}) <em>{{ title }}</em> . {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}:{%endif%} {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
61
+ standard: "{% if home_standard %}<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}{% else %}{{ creatornames | selective_upcase }}$$$ <em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }} $$$ {{ labels['version'] | capitalize }}_{{ edition_raw }}$$$ {{labels['updated'] | capitalize }}_{{date_updated}}$$$ {{status | capitalize}}$$$ {{ authorizer }}$$$ {{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>$$${% endif %}"
62
+ website: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em><span_class='stddocTitle'>{{ title }}</span></em> [{{ labels['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}}]$$$ "
63
+ book: "{{ creatornames | selective_upcase }}$$$ ({{role}}) <em>{{ title }}</em> $$$ {{ edition | capitalize_first }}$$$ ({{ series }})$$$ {% if place %}{{place}}:{%endif%} {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}$$$ $$$_{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>$$$ {{ labels['at'] | capitalize}}:_{{ access_location }}$$$ [{{ labels['viewed'] }}:_{{date_accessed}}]$$$"
24
64
  booklet: book
25
65
  manual: book
26
66
  techreport: book
27
67
  proceedings: book
28
- inbook: "{{ creatornames | selective_upcase }}. ({{role}}) {{ title }} . <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames | replace: '+++', ''}}) . {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}:{%endif%} {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
68
+ inbook: "{{ creatornames | selective_upcase }}$$$ ({{role}}) {{ title }} $$$ <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames | replace: '+++', ''}}) $$$ {{ edition | capitalize_first }}$$$ ({{ series }})$$$ {% if place %}{{place}}:{%endif%} {{publisher}}$$$ {{date}}$$$ {{size}}$$$ {{extent}}$$$ $$$_{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>$$$ {{ labels['at'] | capitalize}}:_{{ access_location }}$$$ [{{ labels['viewed'] }}:_{{date_accessed}}]$$$"
29
69
  inproceedings: inbook
30
70
  incollection: inbook
31
- 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}}]."
32
- article: "{{ creatornames | selective_upcase }}. ({{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}}]."
33
- software: "{{ creatornames | selective_upcase }}. ({{ 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}}]. "
71
+ 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}}]$$$"
72
+ article: "{{ creatornames | selective_upcase }}$$$ ({{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}}]$$$"
73
+ software: "{{ creatornames | selective_upcase }}$$$ ({{ 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}}]$$$ "
34
74
  electronic resource: software
35
- dataset: "{{ creatornames | selective_upcase }}. ({{ 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}}]. "
75
+ dataset: "{{ creatornames | selective_upcase }}$$$ ({{ 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}}]$$$ "
36
76
  webresource: website
37
- unpublished: "{{ creatornames | selective_upcase }}. ({{ role }}) <em>{{ title }}</em> . {{ medium | capitalize }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
77
+ unpublished: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em>{{ title }}</em> $$$ {{ medium | capitalize }}$$$ {{ date }}$$$ {{ labels['at'] | capitalize}}:_{{ access_location }}$$$ $$$_{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>$$$ [{{ labels['viewed'] }}:_{{date_accessed}}]$$$"
38
78
  presentation: unpublished
39
- thesis: "{{ creatornames | selective_upcase }}. ({{ 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}}]."
40
- misc: "{{ creatornames | selective_upcase }}. ({{ role }}) <em>{{ title }}</em> . {{ date }}."
79
+ thesis: "{{ creatornames | selective_upcase }}$$$ ({{ 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}}]$$$"
80
+ misc: "{{ creatornames | selective_upcase }}$$$ ({{ role }}) <em>{{ title }}</em> $$$ {{ date }}$$$"
41
81
  # following are # unsupported types:
42
82
  map: misc
43
83
  audiovisual: misc
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
33
33
  spec.required_ruby_version = Gem::Requirement.new(">= 3.1.0")
34
34
 
35
- spec.add_dependency "metanorma-standoc", "~> 3.1.0"
35
+ spec.add_dependency "metanorma-standoc", "~> 3.2.0"
36
36
  spec.add_dependency "mnconvert", "~> 1.14"
37
37
  spec.add_dependency "pubid"
38
38
  spec.add_dependency "tokenizer", "~> 0.3.0"
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
42
42
  spec.add_development_dependency "guard", "~> 2.14"
43
43
  spec.add_development_dependency "guard-rspec", "~> 4.7"
44
44
  spec.add_development_dependency "iev", "~> 0.3.0"
45
+ spec.add_development_dependency "openssl"
45
46
  spec.add_development_dependency "rake", "~> 13.0"
46
47
  spec.add_development_dependency "rspec", "~> 3.6"
47
48
  spec.add_development_dependency "rubocop", "~> 1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-iso
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.8
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-13 00:00:00.000000000 Z
11
+ date: 2025-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.0
19
+ version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.0
26
+ version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mnconvert
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.3.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: openssl
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -338,6 +352,7 @@ files:
338
352
  - lib/isodoc/iso/metadata.rb
339
353
  - lib/isodoc/iso/pdf_convert.rb
340
354
  - lib/isodoc/iso/presentation_bibdata.rb
355
+ - lib/isodoc/iso/presentation_origin.rb
341
356
  - lib/isodoc/iso/presentation_section.rb
342
357
  - lib/isodoc/iso/presentation_terms.rb
343
358
  - lib/isodoc/iso/presentation_xml_convert.rb
@@ -371,6 +386,7 @@ files:
371
386
  - lib/metanorma/iso/isostandard-compile.rng
372
387
  - lib/metanorma/iso/isostandard.rnc
373
388
  - lib/metanorma/iso/isostandard.rng
389
+ - lib/metanorma/iso/log.rb
374
390
  - lib/metanorma/iso/processor.rb
375
391
  - lib/metanorma/iso/relaton-iso.rng
376
392
  - lib/metanorma/iso/reqt.rng