pubid-iso 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +118 -39
  3. data/lib/pubid/iso/errors.rb +0 -3
  4. data/lib/pubid/iso/harmonized_stage_code.rb +1 -145
  5. data/lib/pubid/iso/identifier/amendment.rb +52 -0
  6. data/lib/pubid/iso/identifier/base.rb +365 -0
  7. data/lib/pubid/iso/identifier/corrigendum.rb +53 -0
  8. data/lib/pubid/iso/identifier/directives.rb +29 -0
  9. data/lib/pubid/iso/identifier/guide.rb +32 -0
  10. data/lib/pubid/iso/identifier/international_standard.rb +45 -0
  11. data/lib/pubid/iso/identifier/international_standardized_profile.rb +30 -0
  12. data/lib/pubid/iso/identifier/international_workshop_agreement.rb +25 -0
  13. data/lib/pubid/iso/identifier/publicly_available_specification.rb +30 -0
  14. data/lib/pubid/iso/identifier/recommendation.rb +19 -0
  15. data/lib/pubid/iso/identifier/supplement.rb +39 -0
  16. data/lib/pubid/iso/identifier/technical_committee.rb +19 -0
  17. data/lib/pubid/iso/identifier/technical_report.rb +30 -0
  18. data/lib/pubid/iso/identifier/technical_specification.rb +30 -0
  19. data/lib/pubid/iso/identifier/technology_trends_assessments.rb +30 -0
  20. data/lib/pubid/iso/identifier.rb +39 -264
  21. data/lib/pubid/iso/parser.rb +56 -20
  22. data/lib/pubid/iso/renderer/amendment.rb +7 -0
  23. data/lib/pubid/iso/renderer/base.rb +129 -98
  24. data/lib/pubid/iso/renderer/corrigendum.rb +7 -0
  25. data/lib/pubid/iso/renderer/dir.rb +5 -3
  26. data/lib/pubid/iso/renderer/guide.rb +19 -0
  27. data/lib/pubid/iso/renderer/international_standard.rb +11 -0
  28. data/lib/pubid/iso/renderer/international_standardized_profile.rb +13 -0
  29. data/lib/pubid/iso/renderer/international_workshop_agreement.rb +17 -0
  30. data/lib/pubid/iso/renderer/publicly_available_specification.rb +12 -0
  31. data/lib/pubid/iso/renderer/recommendation.rb +13 -0
  32. data/lib/pubid/iso/renderer/supplement.rb +63 -0
  33. data/lib/pubid/iso/renderer/technical_committee.rb +47 -0
  34. data/lib/pubid/iso/renderer/technical_report.rb +13 -0
  35. data/lib/pubid/iso/renderer/technical_specification.rb +13 -0
  36. data/lib/pubid/iso/renderer/technology_trends_assessments.rb +13 -0
  37. data/lib/pubid/iso/renderer/urn-amendment.rb +12 -0
  38. data/lib/pubid/iso/renderer/urn-corrigendum.rb +12 -0
  39. data/lib/pubid/iso/renderer/urn-dir.rb +11 -3
  40. data/lib/pubid/iso/renderer/urn-supplement.rb +31 -0
  41. data/lib/pubid/iso/renderer/urn-tc.rb +2 -0
  42. data/lib/pubid/iso/renderer/urn.rb +25 -13
  43. data/lib/pubid/iso/stage.rb +1 -99
  44. data/lib/pubid/iso/transformer.rb +91 -107
  45. data/lib/pubid/iso/type.rb +9 -1
  46. data/lib/pubid/iso/version.rb +1 -1
  47. data/lib/pubid/iso.rb +20 -14
  48. data/stages.yaml +93 -0
  49. data/update_codes.yaml +1 -0
  50. metadata +37 -11
  51. data/lib/pubid/iso/amendment.rb +0 -15
  52. data/lib/pubid/iso/corrigendum.rb +0 -31
  53. data/lib/pubid/iso/renderer/french.rb +0 -29
  54. data/lib/pubid/iso/renderer/russian.rb +0 -64
  55. data/lib/pubid/iso/renderer/tc.rb +0 -30
  56. data/lib/pubid/iso/supplement.rb +0 -56
  57. data/lib/pubid/iso/typed_stage.rb +0 -204
@@ -2,130 +2,147 @@ module Pubid::Iso::Renderer
2
2
  class Base < Pubid::Core::Renderer::Base
3
3
  attr_accessor :prerendered_params
4
4
 
5
- TYPE_VALUES = {
6
- tr: "TR",
7
- ts: "TS",
8
- isp: "ISP",
9
- guide: "Guide",
10
- pas: "PAS",
11
- dpas: "DPAS",
5
+ TRANSLATION = {
6
+ russian: {
7
+ publisher: { "ISO" => "ИСО", "IEC" => "МЭК" },
8
+ stage: { "FDIS" => "ОПМС",
9
+ "DIS" => "ПМС",
10
+ "NP" => "НП",
11
+ "AWI" => "АВИ",
12
+ "CD" => "КПК",
13
+ "PD" => "ПД",
14
+ "FPD" => "ФПД" },
15
+ type: { "TS" => "ТС",
16
+ "TR" => "ТО",
17
+ "ISP" => "ИСП" },
18
+ },
19
+ french: {
20
+ publisher: { "IEC" => "CEI" },
21
+ },
12
22
  }.freeze
13
23
 
14
- # Prerender parameters
15
- def prerender(with_edition: true, **args)
16
- @params[:type_stage] = @params.slice(:stage, :type) if @params[:stage] || @params[:type]
17
- super
18
- end
24
+ TYPE = "".freeze
19
25
 
20
- def render_supplement(supplement_params, **args)
21
- if supplement_params[:base].type == :amd
22
- # render inner amendment (cor -> amd -> base)
23
- render_supplement(supplement_params[:base].get_params, **args)
24
- else
25
- self.class.new(supplement_params[:base].get_params).render_base_identifier(
26
- # always render year for identifiers with supplement
27
- **args.merge({ with_date: true }),
28
- )
29
- end +
30
- case supplement_params[:typed_stage].type.type
31
- when :amd
32
- render_amendments(
33
- [Pubid::Iso::Amendment.new(**supplement_params.slice(:number, :year, :typed_stage, :edition, :iteration))],
34
- args,
35
- nil,
36
- )
37
- when :cor
38
- render_corrigendums(
39
- [Pubid::Iso::Corrigendum.new(**supplement_params.slice(:number, :year, :typed_stage, :edition, :iteration))],
40
- args,
41
- nil,
42
- )
43
- # copy parameters from Identifier only supported by Corrigendum
44
- end +
45
- (supplement_params[:base].language ? render_language(supplement_params[:base].language, args, nil) : "")
26
+ def render_base_identifier(**args)
27
+ prerender(**args)
28
+
29
+ render_identifier(@prerendered_params, args)
46
30
  end
47
31
 
48
32
  # Render identifier
49
33
  # @param with_edition [Boolean] include edition in output
50
34
  # @see Pubid::Core::Renderer::Base for another options
51
35
  def render(with_edition: true, with_language_code: :iso, with_date: true, **args)
52
- # super(**args.merge({ with_edition: with_edition }))
53
- if %i(amd cor).include? @params[:typed_stage]&.type&.type
54
- render_supplement(@params, **args.merge({ with_date: with_date,
55
- with_language_code: with_language_code,
56
- with_edition: with_edition }))
36
+ render_base_identifier(**args.merge({ with_date: with_date,
37
+ with_language_code: with_language_code,
38
+ with_edition: with_edition })) +
39
+ @prerendered_params[:language].to_s
40
+ end
41
+
42
+ def render_base(_base, _opts, _params)
43
+ end
44
+
45
+ def render_type_prefix(params)
46
+ result = params[:typed_stage].nil? || params[:typed_stage].empty? ? self.class::TYPE : ""
47
+
48
+ if params[:stage] && !params[:stage].empty? && !result.empty?
49
+ " #{result}"
57
50
  else
58
- render_base_identifier(**args.merge({ with_date: with_date,
59
- with_language_code: with_language_code,
60
- with_edition: with_edition })) +
61
- @prerendered_params[:language].to_s
51
+ result
62
52
  end
53
+ end
63
54
 
55
+ def render_identifier(params, opts)
56
+ "%{publisher}%{typed_stage}%{stage}#{render_type_prefix(params)} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{addendum}%{edition}" % params
64
57
  end
65
58
 
66
- def render_identifier(params)
67
- # typed_stage = if params[:typed_stage] && params[:typed_stage] != ""
68
- # ((params[:copublisher] && !params[:copublisher].empty?) ? " " : "/") + params[:typed_stage].to_s
69
- # else
70
- # ""
71
- # end
72
- render_base(params, params[:typed_stage]) +
73
- ("%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params)
74
- end
75
-
76
- def render_typed_stage(typed_stage, _opts, params)
77
- (params[:copublisher] ? " " : "/") + typed_stage.to_s
78
- end
79
-
80
- # def render_type_stage(values, opts, params)
81
- #
82
- # # prerender stage and type before
83
- # stage = render_stage(values[:stage], opts, params)
84
- # type = values[:type]&.to_s
85
- # return unless type || stage
86
- #
87
- # if type && stage
88
- # # don't add prefix for pdf format
89
- # if %w(DIS FDIS).include?(stage)
90
- # "#{render_short_stage(stage)}#{type}"
91
- # else
92
- # "#{stage} #{type}"
93
- # end
94
- # else
95
- # # when only type or stage
96
- # "#{type}#{stage}"
97
- # end
98
- # end
99
-
100
- def render_short_stage(stage)
101
- case stage
102
- when "DIS"
103
- "D"
104
- when "FDIS"
105
- "FD"
59
+ def render_copublisher_string(publisher, copublishers, opts)
60
+ case copublishers
61
+ when String
62
+ if opts[:language]
63
+ copublishers = TRANSLATION[opts[:language]][:publisher][copublishers] || copublishers
64
+ end
65
+ [publisher, copublishers].join("/")
66
+ when Array
67
+ ([publisher] + copublishers.map(&:to_s).sort).map do |pub|
68
+ if opts[:language]
69
+ (TRANSLATION[opts[:language]][:publisher][pub] || pub).gsub('-', '/')
70
+ else
71
+ pub
72
+ end
73
+ end.join("/")
74
+ else
75
+ raise StandardError.new("copublisher must be a string or an array")
106
76
  end
107
77
  end
108
78
 
109
- def render_stage(stage, opts, _params)
110
- return if stage.nil? || (stage.abbr == "PRF" and !opts[:with_prf]) || stage.abbr == "IS"
79
+ def omit_post_publisher_symbol?(typed_stage, stage, opts)
80
+ # return false unless typed_stage
111
81
 
112
- stage.abbr
82
+ (stage.nil? || stage.empty_abbr?(with_prf: opts[:with_prf])) && typed_stage.nil?
113
83
  end
114
84
 
115
- def render_edition(edition, opts, _params)
116
- " ED#{edition}" if opts[:with_edition]
85
+ def render_publisher(publisher, opts, params)
86
+
87
+ if opts[:language]
88
+ publisher = TRANSLATION[opts[:language]][:publisher][publisher] || publisher
89
+ end
90
+ # No copublishers
91
+ unless params[:copublisher]
92
+
93
+ # No copublisher and IS
94
+ # ISO xxx
95
+ if omit_post_publisher_symbol?(params[:typed_stage], params[:stage], opts)
96
+ return publisher
97
+ end
98
+
99
+ # No copublisher and not IS
100
+ # ISO/TR xxx
101
+ return "#{publisher}/"
102
+ end
103
+
104
+ publisher_string = render_copublisher_string(publisher, params[:copublisher], opts)
105
+ publisher_string.sub!("/IEC", "/CEI") if opts[:language] == :french
106
+
107
+ # With copublisher and IS
108
+ # ISO/IEC xxx
109
+ if omit_post_publisher_symbol?(params[:typed_stage], params[:stage], opts)
110
+ return publisher_string
111
+ end
112
+
113
+ # With copublisher but not IS
114
+ # ISO/IEC TR xxx
115
+ publisher_string + " "
117
116
  end
118
117
 
119
- def render_iteration(iteration, _opts, _params)
120
- ".#{iteration}"
118
+ def render_typed_stage(typed_stage, opts, params)
119
+ return nil if typed_stage.to_s.empty?
120
+
121
+ if opts[:language]
122
+ return TRANSLATION[opts[:language]][:stage][typed_stage.to_s] || typed_stage.to_s
123
+ end
124
+
125
+ typed_stage.to_s
126
+ end
127
+
128
+ def render_stage(stage, opts, params)
129
+ return if params[:typed_stage]
130
+ return if stage.empty_abbr?(with_prf: opts[:with_prf])
131
+
132
+ if opts[:language]
133
+ return TRANSLATION[opts[:language]][:stage][stage.to_s(with_prf: opts[:with_prf])] ||
134
+ stage.to_s(with_prf: opts[:with_prf])
135
+ end
136
+
137
+ stage.to_s(with_prf: opts[:with_prf])
121
138
  end
122
139
 
123
- def render_amendments(amendments, opts, _params)
124
- amendments.sort.map { |amendment| amendment.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
140
+ def render_edition(edition, opts, _params)
141
+ " ED#{edition}" if opts[:with_edition]
125
142
  end
126
143
 
127
- def render_corrigendums(corrigendums, opts, _params)
128
- corrigendums.sort.map { |corrigendum| corrigendum.render_pubid(opts[:stage_format_long], opts[:with_date]) }.join("+")
144
+ def render_iteration(iteration, _opts, _params)
145
+ ".#{iteration}"
129
146
  end
130
147
 
131
148
  def render_language(language, opts, _params)
@@ -137,5 +154,19 @@ module Pubid::Iso::Renderer
137
154
  return ":#{year}" if params[:amendments] || params[:corrigendums]
138
155
  opts[:with_date] && ":#{year}" || ""
139
156
  end
157
+
158
+ def render_part(part, opts, _params)
159
+ return "-#{part.reverse.join('-')}" if part.is_a?(Array)
160
+
161
+ "-#{part}"
162
+ end
163
+
164
+ def render_addendum(addendum, _opts, _params)
165
+ if addendum[:year]
166
+ "/Add #{addendum[:number]}:#{addendum[:year]}"
167
+ else
168
+ "/Add #{addendum[:number]}"
169
+ end
170
+ end
140
171
  end
141
172
  end
@@ -0,0 +1,7 @@
1
+ require_relative "supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Corrigendum < Supplement
5
+ TYPE = "Cor".freeze
6
+ end
7
+ end
@@ -1,13 +1,15 @@
1
+ require_relative "base"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class Dir < Base
3
5
 
4
- def render_identifier(params)
5
- res = ("%{publisher}%{copublisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
6
+ def render_identifier(params, opts)
7
+ res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
6
8
 
7
9
  if params.key?(:joint_document)
8
10
  joint_params = prerender_params(params[:joint_document].get_params, {})
9
11
  joint_params.default = ""
10
- res += (" + %{publisher}%{copublisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
12
+ res += (" + %{publisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
11
13
  end
12
14
 
13
15
  res
@@ -0,0 +1,19 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Guide < Base
5
+ def render_identifier(params, opts)
6
+ if opts[:language] == :french
7
+ "Guide %{publisher}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
8
+ elsif opts[:language] == :russian
9
+ "Руководство %{publisher}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
10
+ else
11
+ if params[:typed_stage] && !params[:typed_stage].empty?
12
+ "%{publisher}%{typed_stage}%{stage} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
13
+ else
14
+ "%{publisher}%{stage} Guide %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{edition}" % params
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalStandard < Base
5
+ def omit_post_publisher_symbol?(typed_stage, stage)
6
+ # return false unless typed_stage
7
+
8
+ !stage.nil? && !typed_stage.nil?
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalStandardizedProfile < Base
5
+
6
+ TYPE = "ISP".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class InternationalWorkshopAgreement < Base
5
+
6
+ TYPE = "IWA".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+
13
+ def render_identifier(params, opts)
14
+ "%{typed_stage}%{stage}#{render_type_prefix(params)} %{number}%{part}%{iteration}%{year}%{amendments}%{corrigendums}%{addendum}%{edition}" % params
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class PubliclyAvailableSpecification < Base
5
+
6
+ TYPE = "PAS".freeze
7
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
8
+ # always need post publisher symbol, because we always have to add "TR"
9
+ false
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Recommendation < Base
5
+
6
+ TYPE = "R".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "R"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Supplement < Base
5
+ TYPE = "Suppl".freeze
6
+
7
+ # Render identifier
8
+ # @param with_edition [Boolean] include edition in output
9
+ # @see Pubid::Core::Renderer::Base for another options
10
+ def render(with_edition: true, with_language_code: :iso, with_date: true, **args)
11
+ @params[:base].to_s(lang: args[:language], with_edition: with_edition) +
12
+ super(
13
+ with_edition: with_edition, with_language_code: with_language_code, with_date: with_date,
14
+ base_type: @params[:base].type[:key],
15
+ **args
16
+ ) +
17
+ if @params[:base].language
18
+ render_language(@params[:base].language,
19
+ { with_language_code: with_language_code }, nil).to_s
20
+ else
21
+ ""
22
+ end
23
+ end
24
+
25
+ def render_identifier(params, opts)
26
+ type_prefix = params[:typed_stage].nil? || params[:typed_stage].empty? ? self.class::TYPE : ""
27
+
28
+ if params[:stage].is_a?(Pubid::Core::Stage) && !params[:stage].empty_abbr?
29
+ type_prefix = " #{type_prefix}"
30
+ end
31
+
32
+ if self.class == Supplement
33
+ if opts[:base_type] == :dir
34
+ "%{typed_stage}%{stage}%{publisher} SUP%{number}%{part}%{iteration}%{year}%{edition}" % params
35
+ else
36
+ # type_prefix = "/#{type_prefix}" unless type_prefix.empty?
37
+ "/%{typed_stage}%{stage}#{type_prefix}%{number}%{part}%{iteration}%{year}%{edition}" % params
38
+ end
39
+ else
40
+ "/%{typed_stage}%{stage}#{type_prefix}%{number}%{part}%{iteration}%{year}%{edition}" % params
41
+ end
42
+ end
43
+
44
+ def render_number(number, opts, _params)
45
+ space = opts[:language] == :french ? "." : " "
46
+
47
+ "#{space}#{number}"
48
+ end
49
+
50
+ def render_stage(stage, opts, params)
51
+ # do not render stage when already has typed stage
52
+ stage unless params[:typed_stage]
53
+ end
54
+
55
+ def render_publisher(publisher, opts, params)
56
+ " #{publisher}" unless publisher.empty?
57
+ end
58
+
59
+ def render_edition(edition, opts, _params)
60
+ " Edition #{edition}" if opts[:with_edition]
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalCommittee < Base
5
+
6
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
7
+ # always need post publisher symbol, because we always have to add "TR"
8
+ false
9
+ end
10
+
11
+ def render_identifier(params, opts)
12
+ if params[:wgnumber] && !params[:wgnumber].empty?
13
+ "%{publisher}%{tctype}%{stage} %{tcnumber}%{sctype}%{scnumber}%{wgtype}%{wgnumber} %{number}" % params
14
+ else
15
+ "%{publisher}%{tctype}%{stage} %{tcnumber}%{sctype}%{wgtype}%{scnumber} %{number}" % params
16
+ end
17
+ end
18
+
19
+ def render_tctype(tctype, _params, _opts)
20
+ if tctype.is_a?(Array)
21
+ tctype.join("/")
22
+ else
23
+ tctype
24
+ end
25
+ end
26
+
27
+ def render_number(number, _params, _opts)
28
+ "N#{number}"
29
+ end
30
+
31
+ def render_sctype(sctype, _params, _opts)
32
+ "/#{sctype}"
33
+ end
34
+
35
+ def render_wgtype(wgtype, _params, _opts)
36
+ "/#{wgtype}"
37
+ end
38
+
39
+ def render_wgnumber(wgnumber, _params, _opts)
40
+ " #{wgnumber}"
41
+ end
42
+
43
+ def render_scnumber(scnumber, _params, _opts)
44
+ " #{scnumber}"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalReport < Base
5
+
6
+ TYPE = "TR".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnicalSpecification < Base
5
+
6
+ TYPE = "TS".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class TechnologyTrendsAssessments < Base
5
+
6
+ TYPE = "TTA".freeze
7
+
8
+ def omit_post_publisher_symbol?(_typed_stage, _stage, _opts)
9
+ # always need post publisher symbol, because we always have to add "TR"
10
+ false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "urn-supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnAmendment < UrnSupplement
5
+ TYPE = "amd".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:amd%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require_relative "urn-supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnCorrigendum < UrnSupplement
5
+ TYPE = "cor".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:cor%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "urn"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class UrnDir < Urn
3
5
 
@@ -5,9 +7,15 @@ module Pubid::Iso::Renderer
5
7
  res = ("urn:iso:doc:%{publisher}%{copublisher}:dir%{dirtype}%{number}%{year}%{supplement}" % params)
6
8
 
7
9
  if params.key?(:joint_document)
8
- joint_params = prerender_params(params[:joint_document].get_params, {})
9
- joint_params.default = ""
10
- res += (":%{publisher}%{copublisher}%{dirtype}%{number}%{supplement}" % joint_params)
10
+ if params[:joint_document].is_a?(Pubid::Iso::Identifier::Supplement)
11
+ joint_params = params[:joint_document].get_params
12
+ res += ":#{joint_params[:base].publisher.downcase}:sup:%{year}" % joint_params
13
+ else
14
+ joint_params = prerender_params(params[:joint_document].get_params, {})
15
+ joint_params.default = ""
16
+ res += (":%{publisher}%{copublisher}%{dirtype}%{number}%{supplement}" % joint_params)
17
+ end
18
+
11
19
  end
12
20
 
13
21
  res
@@ -0,0 +1,31 @@
1
+ require_relative "urn"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class UrnSupplement < Urn
5
+ TYPE = "sup".freeze
6
+
7
+ def render_identifier(params)
8
+ "%{base}%{stage}:#{self.class::TYPE}%{publisher}%{year}%{number}%{edition}" \
9
+ "#{@params[:base].language ? (':' + @params[:base].language) : ''}" % params
10
+ end
11
+
12
+ def render_base(base, _opts, _params)
13
+ return base.urn if base.base || base.is_a?(Pubid::Iso::Identifier::Directives)
14
+
15
+ # to avoid rendering language as part of base
16
+ Urn.new(base.get_params).render
17
+ end
18
+
19
+ def render_number(number, _opts, params)
20
+ if params[:year]
21
+ ":v#{number}"
22
+ else
23
+ ":#{number}:v1"
24
+ end
25
+ end
26
+
27
+ def render_publisher(publisher, _opts, _params)
28
+ ":#{publisher.downcase}" unless publisher.empty?
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "urn"
2
+
1
3
  module Pubid::Iso::Renderer
2
4
  class UrnTc < Urn
3
5