metanorma-jis 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a9602ab994ed2bd305740c06c8e905e6a006cc61f90a86eaae5636382029592
4
- data.tar.gz: 720ccbdc20eef80020f6360d049655b8b3d50a7341290eca697f126e7b8cf1db
3
+ metadata.gz: 6bbc9bfd3ed93ebd4eb27838a31bae9b074c79c280f0eee5c476475de1239a9c
4
+ data.tar.gz: 3404f0677c547960ef888d5503ed89b942a21c33812bb3ae042c9ed7d09f5fdb
5
5
  SHA512:
6
- metadata.gz: c9aba7ea31bf9d5d50c2c1a16cb7e430287c11440ed7bf636483c077830b494d782c1b858649f065031180ebcbc12f745b887628f6ca312794f1de8afe9655f6
7
- data.tar.gz: cb1d5e2653e717b942d10d6d83211a57c4343e30989f7f023dcb9dc0eee3ec8ef2011a68e05b993344779031f7c53e3e60714fd6017ae98979dd34a7c0608080
6
+ metadata.gz: '0839e480d352f8971eda023631979408b4ac4f352b06673b17e5ee02f3280842c2e51a40b9cd1bb091494f54cc9cc4235453d8d8ee18458bad55f43fe9228ec3'
7
+ data.tar.gz: bcaf0551aa3d35711b213137019a580eb84ae83c4b13a409c76644fc2af6eb577e06d46acb65260a48699598537064a6354fb35072392137161405097bc22798
data/Gemfile CHANGED
@@ -2,11 +2,14 @@ Encoding.default_external = Encoding::UTF_8
2
2
  Encoding.default_internal = Encoding::UTF_8
3
3
 
4
4
  source "https://rubygems.org"
5
+ git_source(:github) { |repo| "https://github.com/#{repo}" }
5
6
 
6
- # Specify your gem's dependencies in gemspec
7
- gemspec
7
+ group :development, :test do
8
+ gem "rspec"
9
+ end
8
10
 
9
11
  if File.exist? "Gemfile.devel"
10
12
  eval File.read("Gemfile.devel"), nil, "Gemfile.devel" # rubocop:disable Security/Eval
11
13
  end
12
14
 
15
+ gemspec
@@ -1,15 +1,15 @@
1
1
  module IsoDoc
2
2
  module JIS
3
3
  class I18n < IsoDoc::Iso::I18n
4
+ def load_file(fname)
5
+ f = File.join(File.dirname(__FILE__), fname)
6
+ File.exist?(f) ? YAML.load_file(f) : {}
7
+ end
8
+
4
9
  def load_yaml1(lang, script)
5
- y = if lang == "en"
6
- YAML.load_file(File.join(File.dirname(__FILE__), "i18n-en.yaml"))
7
- else
8
- YAML.load_file(File.join(File.dirname(__FILE__), "i18n-ja.yaml"))
9
- end
10
- super.deep_merge(y)
10
+ y = load_file("i18n-#{yaml_lang(lang, script)}.yaml")
11
+ y.empty? ? load_file("i18n-en.yaml").merge(super) : super.deep_merge(y)
11
12
  end
12
13
  end
13
14
  end
14
15
  end
15
-
@@ -205,7 +205,7 @@ module IsoDoc
205
205
  elem = s.children.first
206
206
  middle_title_hdr(elem)
207
207
  middle_title_main(elem, "zzSTDTitle1")
208
- middle_subtitle_main(elem)
208
+ middle_subtitle_main(elem, "zzSTDTitle2")
209
209
  # middle_title_amd(s.children.first)
210
210
  end
211
211
 
@@ -225,11 +225,8 @@ module IsoDoc
225
225
  def middle_title_main(out, style)
226
226
  t = @meta.get[:doctitlemain]
227
227
  (t && !t.empty?) or return
228
- ret = "<p class='#{style}'>#{@meta.get[:doctitleintro]}"
229
- ret += " &#x2014; " if @meta.get[:doctitleintro] && t
230
- ret += t
231
- ret += " &#x2014; " if t && @meta.get[:doctitlepart]
232
- ret += "</p>"
228
+ ret =
229
+ middle_title_para(style, :doctitleintro, :doctitlemain, :doctitlepart)
233
230
  if a = @meta.get[:doctitlepart]
234
231
  ret += "<p class='zzSTDTitle1'>"
235
232
  b = @meta.get[:doctitlepartlabel] and ret += "#{b}: "
@@ -238,14 +235,11 @@ module IsoDoc
238
235
  out.previous = ret
239
236
  end
240
237
 
241
- def middle_subtitle_main(out)
238
+ def middle_subtitle_main(out, style)
242
239
  t = @meta.get[:docsubtitlemain]
243
240
  (t && !t.empty?) or return
244
- ret = "<p class='zzSTDTitle2'>#{@meta.get[:docsubtitleintro]}"
245
- ret += " &#x2014; " if @meta.get[:docsubtitleintro] && t
246
- ret += @meta.get[:docsubtitlemain]
247
- ret += " &#x2014; " if t && @meta.get[:docsubtitlepart]
248
- ret += "</p>"
241
+ ret = middle_title_para(style, :docsubtitleintro, :docsubtitlemain,
242
+ :docsubtitlepart)
249
243
  if a = @meta.get[:docsubtitlepart]
250
244
  ret += "<p class='zzSTDTitle2'>"
251
245
  b = @meta.get[:docsubtitlepartlabel] and ret += "#{b}: "
@@ -254,6 +248,15 @@ module IsoDoc
254
248
  out.previous = ret
255
249
  end
256
250
 
251
+ def middle_title_para(style, intro, main, part)
252
+ ret = "<p class='#{style}'>#{@meta.get[intro]}"
253
+ ret += " &#x2014; " if @meta.get[intro] && @meta.get[main]
254
+ ret += @meta.get[main]
255
+ ret += " &#x2014; " if @meta.get[main] && @meta.get[part]
256
+ ret += "</p>"
257
+ ret
258
+ end
259
+
257
260
  include Init
258
261
  end
259
262
  end
@@ -59,11 +59,11 @@ module IsoDoc
59
59
  def back_clauses_anchor_names(xml)
60
60
  clause_order_back(xml).each do |a|
61
61
  xml.xpath(ns(a[:path])).each do |c|
62
- if c["commentary"] == "true"
63
- commentary_names(c)
64
- else
65
- preface_names(c)
62
+ if c["commentary"] == "true" then commentary_names(c)
63
+ else preface_names(c)
66
64
  end
65
+ x = Nokogiri::XML::NodeSet.new(c.document, [c])
66
+ sequential_asset_names(x, container: true)
67
67
  a[:multi] or break
68
68
  end
69
69
  end
@@ -374,6 +374,16 @@
374
374
  <ref name="image"/>
375
375
  </element>
376
376
  </define>
377
+ <define name="depiction">
378
+ <element name="depiction">
379
+ <optional>
380
+ <attribute name="scope"/>
381
+ </optional>
382
+ <zeroOrMore>
383
+ <ref name="image"/>
384
+ </zeroOrMore>
385
+ </element>
386
+ </define>
377
387
  <define name="NameWithVariants">
378
388
  <element name="primary">
379
389
  <ref name="LocalizedString"/>
@@ -760,6 +770,9 @@
760
770
  <optional>
761
771
  <ref name="validity"/>
762
772
  </optional>
773
+ <optional>
774
+ <ref name="depiction"/>
775
+ </optional>
763
776
  </define>
764
777
  <define name="ReducedBibliographicItem">
765
778
  <optional>
@@ -7,29 +7,28 @@ module Metanorma
7
7
  super.merge("Japanese Industrial Standards" => "JIS")
8
8
  end
9
9
 
10
- def home_agency
10
+ def default_publisher
11
11
  "JIS"
12
12
  end
13
13
 
14
- # Like the ISO code, but multilingual
15
14
  def metadata_author(node, xml)
16
- metadata_contrib_sdo(node, xml, JIS_HASH,
17
- { role: "author", sourcerole: "publisher" })
15
+ org_contributor(node, xml,
16
+ { source: ["publisher", "pub"], role: "author",
17
+ default: JIS_HASH })
18
18
  node.attr("doctype") == "expert-commentary" and
19
19
  personal_author(node, xml)
20
20
  end
21
21
 
22
22
  def metadata_publisher(node, xml)
23
- metadata_contrib_sdo(node, xml, JIS_HASH,
24
- { role: "publisher", sourcerole: "publisher" })
25
- metadata_contrib_sdo(node, xml, nil,
26
- { role: "authorizer",
27
- sourcerole: "investigative-organization",
28
- desc: "Investigative organization" })
29
- metadata_contrib_sdo(node, xml, nil,
30
- { role: "authorizer",
31
- sourcerole: "investigative-committee",
32
- desc: "Investigative committee" })
23
+ [{ source: ["publisher", "pub"], role: "publisher", default: JIS_HASH },
24
+ { role: "authorizer",
25
+ source: ["investigative-organization"],
26
+ desc: "Investigative organization" },
27
+ { role: "authorizer",
28
+ source: ["investigative-committee"],
29
+ desc: "Investigative committee" }].each do |o|
30
+ org_contributor(node, xml, o)
31
+ end
33
32
  end
34
33
 
35
34
  LANGS = %w(ja en).freeze
@@ -37,56 +36,58 @@ module Metanorma
37
36
  JIS_HASH =
38
37
  { "ja" => "日本工業規格", "en" => "Japanese Industrial Standards" }.freeze
39
38
 
40
- def metadata_contrib_sdo(node, xml, default_value, opt)
41
- pub, default = metadata_contrib_extract(node, opt[:sourcerole], default_value)
42
- metadata_contrib_sdo_build(node, xml, pub, default, opt)
39
+ def org_organization(node, xml, org)
40
+ organization(xml, { name: org[:name], abbr: org[:abbr] }.compact,
41
+ node, !multiling_docattr(node, "publisher", "", LANGS))
42
+ org_address(org, xml)
43
+ org_logo(xml, org[:logo])
43
44
  end
44
45
 
45
- def metadata_contrib_sdo_build(node, xml, pub, default, opt)
46
- pub&.each do |p|
47
- xml.contributor do |c|
48
- c.role type: opt[:role] do |r|
49
- opt[:desc] and r.description opt[:desc]
50
- end
51
- c.organization do |a|
52
- organization(a, p, opt[:role] == "publisher", node, default)
53
- end
54
- end
46
+ def org_attrs_parse(node, opts)
47
+ source = opts[:source]&.detect { |s| node.attr(s) }
48
+ source ||= opts[:source]&.detect do |s|
49
+ LANGS.detect { |l| node.attr("#{s}-#{l}") }
55
50
  end
51
+ org_attrs_simple_parse(node, opts, source) ||
52
+ org_attrs_complex_parse(node, opts, source)
53
+ end
54
+
55
+ def org_attrs_complex_parse(node, opts, source)
56
+ i = 1
57
+ suffix = ""
58
+ ret = []
59
+ while multiling_docattr(node, source, suffix, LANGS)
60
+ ret << extract_org_attrs_complex(node, opts, source, suffix)
61
+ i += 1
62
+ suffix = "_#{i}"
63
+ end
64
+ ret
56
65
  end
57
66
 
58
- def metadata_contrib_extract(node, role, default_value)
59
- pub, default = multiling_docattr_csv(node, role, LANGS, default_value)
60
- a = node.attr("#{role}-abbr") and abbr = a # one abbrev for all languages
61
- [pub&.map { |p| { name: p, abbr: abbr } }, default]
62
- end
63
-
64
- def multiling_docattr(node, attr, langs)
65
- ret = node.attr(attr) and return ret
67
+ def multiling_docattr(node, attr, suffix, langs)
68
+ node.nil? and return nil
69
+ ret = node.attr(attr + suffix) and return ret
66
70
  ret = langs.each_with_object({}).each do |l, m|
67
- x = node.attr("#{attr}-#{l}") and m[l] = x
71
+ x = node.attr("#{attr}-#{l}#{suffix}") and m[l] = x
68
72
  end.compact
69
73
  ret.empty? and return nil
70
74
  ret
71
75
  end
72
76
 
73
- def multiling_docattr_csv(node, attr, langs, default)
74
- ret = multiling_docattr(node, attr, langs)
75
- not_found = ret.nil?
76
- ret ||= default
77
- ret &&= if ret.is_a?(Hash) then interleave_multiling_docattr(ret)
78
- else csv_split(ret)
79
- end
80
- [ret, not_found]
77
+ def extract_org_attrs_complex(node, opts, source, suffix)
78
+ { name: multiling_docattr(node, source, suffix, LANGS),
79
+ role: opts[:role], desc: opts[:desc],
80
+ abbr: multiling_docattr(node, "#{source}-abbr", suffix, LANGS),
81
+ logo: multiling_docattr(node, "#{source}_logo", suffix, LANGS) }
82
+ .compact
83
+ .merge(extract_org_attrs_address(node, opts, suffix))
81
84
  end
82
85
 
83
- # TODO abort if CSV count different between different languages
84
- def interleave_multiling_docattr(ret)
85
- h = ret.transform_values { |v| csv_split(v) }
86
- h.each_with_object([]) do |(k, v), m|
87
- v.each_with_index do |v1, i|
88
- m[i] ||= {}
89
- m[i][k] = v1
86
+ def extract_org_attrs_address(node, opts, suffix)
87
+ %w(address phone fax email uri).each_with_object({}) do |a, m|
88
+ opts[:source]&.each do |s|
89
+ p = multiling_docattr(node, "#{s}-#{a}", suffix, LANGS) and
90
+ m[a.to_sym] = p
90
91
  end
91
92
  end
92
93
  end
@@ -104,37 +105,26 @@ module Metanorma
104
105
  end
105
106
  end
106
107
 
107
- def organization(xml, org, _is_pub, node = nil, default_org = nil)
108
- org.is_a?(Hash) or org = { name: org }
108
+ def organization(xml, org, node = nil, default_org = nil)
109
+ org.is_a?(Hash) && org[:name] or org = { name: org }
109
110
  abbrevs = org_abbrev
110
111
  name_str = org[:name].is_a?(Hash) ? org[:name]["en"] : org[:name]
111
112
  n = abbrevs.invert[org[:name]] and org = { name: n, abbr: org[:name] }
112
113
  multiling_noko_value(org[:name], "name", xml)
113
- default_org && a = multiling_docattr(node, "subdivision", LANGS) and
114
+ default_org && a = multiling_docattr(node, "subdivision", "", LANGS) and
114
115
  multiling_noko_value(a, "subdivision", xml)
115
116
  abbr = org[:abbr]
116
117
  abbr ||= org_abbrev[name_str]
117
- default_org && b = node.attr("subdivision-abbr") and abbr = b
118
+ default_org && b = node&.attr("subdivision-abbr") and abbr = b
118
119
  abbr and xml.abbreviation abbr
119
- # is_pub && node and org_address(node, org) # should refactor into struct, like abbr
120
120
  end
121
121
 
122
- def metadata_copyright(node, xml)
123
- pub, default = metadata_contrib_extract(node, "copyright-holder", nil)
124
- if default
125
- pub, default = metadata_contrib_extract(node, "publisher", JIS_HASH)
126
- end
127
-
128
- pub&.each do |p|
129
- xml.copyright do |c|
130
- c.from (node.attr("copyright-year") || Date.today.year)
131
- c.owner do |owner|
132
- owner.organization do |o|
133
- organization(o, p, true, node, default)
134
- end
135
- end
136
- end
137
- end
122
+ def copyright_parse(node)
123
+ opt = { source: ["copyright-holder", "publisher", "pub"],
124
+ role: "publisher", default: JIS_HASH }
125
+ ret = org_attrs_parse(node, opt)
126
+ ret.empty? and ret = [{ name: "-" }]
127
+ ret
138
128
  end
139
129
 
140
130
  def title(node, xml)
@@ -149,8 +139,6 @@ module Metanorma
149
139
  end
150
140
 
151
141
  def metadata_id(node, xml)
152
- node.attr("docidentifier") || node.attr("docnumber") or
153
- @fatalerror << "No docnumber attribute supplied"
154
142
  if id = node.attr("docidentifier")
155
143
  xml.docidentifier id.sub(/^JIS /, ""), **attr_code(type: "JIS")
156
144
  else iso_id(node, xml)
@@ -167,21 +155,8 @@ module Metanorma
167
155
  end
168
156
  end
169
157
 
170
- def iso_id(node, xml)
171
- (!@amd && node.attr("docnumber")) || (@amd && node.attr("updates")) or
172
- return
173
- params = iso_id_params(node)
174
- iso_id_out(xml, params, true)
175
- end
176
-
177
- def iso_id_params(node)
178
- params = iso_id_params_core(node)
179
- params2 = iso_id_params_add(node)
180
- if node.attr("updates")
181
- orig_id = Pubid::Jis::Identifier::Base.parse(node.attr("updates"))
182
- orig_id.edition ||= 1
183
- end
184
- iso_id_params_resolve(params, params2, node, orig_id)
158
+ def base_pubid
159
+ Pubid::Jis::Identifier
185
160
  end
186
161
 
187
162
  def iso_id_params_core(node)
@@ -208,7 +183,7 @@ module Metanorma
208
183
  end
209
184
 
210
185
  def iso_id_default(params)
211
- Pubid::Jis::Identifier.create(**params)
186
+ base_pubid.create(**params)
212
187
  rescue StandardError => e
213
188
  clean_abort("Document identifier: #{e}", xml)
214
189
  end
@@ -17,7 +17,7 @@
17
17
  these elements; we just want one namespace for any child grammars
18
18
  of this.
19
19
  -->
20
- <!-- VERSION v1.2.8 -->
20
+ <!-- VERSION v1.2.9 -->
21
21
  <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
22
22
  <include href="reqt.rng"/>
23
23
  <include href="basicdoc.rng">
@@ -1958,6 +1958,16 @@
1958
1958
  <data type="boolean"/>
1959
1959
  </attribute>
1960
1960
  </optional>
1961
+ <optional>
1962
+ <attribute name="type">
1963
+ <choice>
1964
+ <value>letter</value>
1965
+ <value>symbol</value>
1966
+ <value>formula</value>
1967
+ <value>equation</value>
1968
+ </choice>
1969
+ </attribute>
1970
+ </optional>
1961
1971
  <element name="name">
1962
1972
  <oneOrMore>
1963
1973
  <choice>
@@ -1,6 +1,6 @@
1
1
  module Metanorma
2
2
  module JIS
3
- VERSION = "0.1.3".freeze
3
+ VERSION = "0.1.5".freeze
4
4
  end
5
5
  end
6
6
 
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
31
31
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
32
32
 
33
- spec.add_dependency "metanorma-iso", "~> 2.5.4"
33
+ spec.add_dependency "metanorma-iso", "~> 2.6.0"
34
34
  spec.add_dependency "pubid-jis"
35
35
 
36
36
  spec.add_development_dependency "debug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-jis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-20 00:00:00.000000000 Z
11
+ date: 2023-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-iso
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.5.4
19
+ version: 2.6.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: 2.5.4
26
+ version: 2.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pubid-jis
29
29
  requirement: !ruby/object:Gem::Requirement