pubid-iso 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +14 -5
- data/lib/pubid/iso/identifier/addendum.rb +24 -0
- data/lib/pubid/iso/identifier/base.rb +7 -0
- data/lib/pubid/iso/identifier/extract.rb +19 -0
- data/lib/pubid/iso/identifier/international_standard.rb +5 -0
- data/lib/pubid/iso/parser.rb +30 -11
- data/lib/pubid/iso/renderer/addendum.rb +7 -0
- data/lib/pubid/iso/renderer/base.rb +1 -3
- data/lib/pubid/iso/renderer/extract.rb +9 -0
- data/lib/pubid/iso/transformer.rb +11 -32
- data/lib/pubid/iso/version.rb +1 -1
- data/lib/pubid/iso.rb +5 -1
- data/stages.yaml +2 -0
- metadata +8 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11124938cd55ceae313c720ac11b3c19c475e1398bb7e0eed93ac07ebbbe9eb4
|
4
|
+
data.tar.gz: 72de1b3ce2af85a21b888e2180410d5efbe57f6ea297ff7b412a9758e024d1e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd4d5c372306186736e8c44c446e445758c8b7d871d73454096c739ed1e5e7fcc7890b8ea0189c44f5418150d54f6802d325687ab77dcf71984277ec244f303a
|
7
|
+
data.tar.gz: f93770f6fb62a8401e99a59d1e47c99eb6f97c5be34385acb9f01187bb8eab504ccff0dc8ae50162037ef3f5080a0e0f2a8add11a2f789ef67cf153128c339eb
|
data/README.adoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= ISO publication identifiers ("ISO PubID")
|
2
2
|
|
3
|
+
image:https://badge.fury.io/rb/pubid-iso.svg["Gem Version", link="https://badge.fury.io/rb/pubid-iso"]
|
4
|
+
|
3
5
|
== Purpose
|
4
6
|
|
5
7
|
This gem implements a mechanism to parse and utilize ISO publication
|
@@ -349,12 +351,19 @@ final draft International Standards (FDIS) and International Standards`",
|
|
349
351
|
distinguished by a numerical suffix (.2, .3, etc.).
|
350
352
|
____
|
351
353
|
|
352
|
-
|
353
|
-
|
354
|
+
[example]
|
355
|
+
====
|
356
|
+
ISO/CD TR 10064-2.2
|
357
|
+
ISO/IEC CD 23264-2.4
|
358
|
+
ISO/DIS 80369-3.2
|
359
|
+
====
|
360
|
+
|
361
|
+
In an ISO PubID, the stage iteration number is applied to the standard
|
362
|
+
number, patterned as:
|
354
363
|
|
355
|
-
* `{document stage}` (
|
356
|
-
* `{document stage}.{iteration number}`
|
357
|
-
(
|
364
|
+
* `{document stage} {document number}` (if iteration is 1); or
|
365
|
+
* `{document stage} {document number}.{iteration number}`
|
366
|
+
(if iteration is larger than 1).
|
358
367
|
|
359
368
|
Once the document is published (stage 60 substage 60), no status abbreviation is
|
360
369
|
given.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative "../renderer/addendum"
|
2
|
+
|
3
|
+
module Pubid::Iso
|
4
|
+
module Identifier
|
5
|
+
class Addendum < Supplement
|
6
|
+
def_delegators 'Pubid::Iso::Identifier::Addendum', :type
|
7
|
+
|
8
|
+
TYPED_STAGES = {
|
9
|
+
dad: {
|
10
|
+
abbr: "DAD",
|
11
|
+
name: "Draft Addendum",
|
12
|
+
harmonized_stages: %w[],
|
13
|
+
},
|
14
|
+
}.freeze
|
15
|
+
def self.type
|
16
|
+
{ key: :add, title: "Addendum" }
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.get_renderer_class
|
20
|
+
Renderer::Addendum
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -186,6 +186,13 @@ module Pubid::Iso
|
|
186
186
|
)
|
187
187
|
end
|
188
188
|
|
189
|
+
if identifier_params[:extract]
|
190
|
+
base_parameters = params.reject { |k, _| k == :extract }
|
191
|
+
|
192
|
+
return Identifier.create(base: Identifier.create(**base_parameters),
|
193
|
+
type: :ext, **identifier_params[:extract])
|
194
|
+
end
|
195
|
+
|
189
196
|
Identifier.create(**identifier_params)
|
190
197
|
end
|
191
198
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "../renderer/extract"
|
2
|
+
|
3
|
+
module Pubid::Iso
|
4
|
+
module Identifier
|
5
|
+
class Extract < Base
|
6
|
+
def_delegators 'Pubid::Iso::Identifier::Extract', :type
|
7
|
+
|
8
|
+
TYPED_STAGES = {}.freeze
|
9
|
+
|
10
|
+
def self.type
|
11
|
+
{ key: :ext, title: "Extract" }
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get_renderer_class
|
15
|
+
Renderer::Extract
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/pubid/iso/parser.rb
CHANGED
@@ -3,7 +3,7 @@ require_relative "renderer/base"
|
|
3
3
|
|
4
4
|
module Pubid::Iso
|
5
5
|
class Parser < Pubid::Core::Parser
|
6
|
-
STAGES = %w[NP NWIP WD CD PRF AWI PWI FPD].freeze
|
6
|
+
STAGES = %w[NP NWIP WD CD FCD PRF AWI PWI FPD].freeze
|
7
7
|
TYPES = %w[DATA ISP IWA R TTA TS TR IS PAS Guide GUIDE DIR].freeze
|
8
8
|
# TYPED_STAGES = %w[DIS FDIS DPAS FDTR FDTS DTS DTR PDTR PDTS].freeze
|
9
9
|
SUPPLEMENTS = %w[Amd Cor AMD COR Suppl].freeze
|
@@ -18,13 +18,17 @@ module Pubid::Iso
|
|
18
18
|
end.flatten +
|
19
19
|
%w[pDCOR PDAM]
|
20
20
|
|
21
|
+
STAGED_ADDENDA = Pubid::Iso::Identifier::Addendum::TYPED_STAGES.map do |_, v|
|
22
|
+
v[:abbr]
|
23
|
+
end
|
24
|
+
|
21
25
|
DIR_SUPPLEMENTS = %w[Supplement SUP].freeze
|
22
26
|
|
23
|
-
TYPED_STAGES = Identifier.config.types.map do |type|
|
27
|
+
TYPED_STAGES = (Identifier.config.types.map do |type|
|
24
28
|
type::TYPED_STAGES.map do |_, v|
|
25
29
|
v.key?(:legacy_abbr) ? (v[:legacy_abbr] + [v[:abbr]]) : v[:abbr]
|
26
30
|
end
|
27
|
-
end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]
|
31
|
+
end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]).sort_by(&:length).reverse
|
28
32
|
|
29
33
|
TCTYPES = ["TC", "JTC", "PC", "IT", "CAB", "CASCO", "COPOLCO",
|
30
34
|
"COUNCIL", "CPSG", "CS", "DEVCO", "GA", "GAAB", "INFCO",
|
@@ -40,6 +44,10 @@ module Pubid::Iso
|
|
40
44
|
"CSC/SP", "CSC/FIN", "JAG"].freeze
|
41
45
|
|
42
46
|
ORGANIZATIONS = %w[IEC IEEE CIW SAE CIE ASME ASTM OECD ISO HL7 CEI].freeze
|
47
|
+
rule(:dash) do
|
48
|
+
str("-") | str("‑") | str("‐")
|
49
|
+
end
|
50
|
+
|
43
51
|
rule(:stage) do
|
44
52
|
array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].values) | array_to_str(STAGES)
|
45
53
|
end
|
@@ -60,6 +68,10 @@ module Pubid::Iso
|
|
60
68
|
(array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:type].values) | array_to_str(TYPES)).as(:type)
|
61
69
|
end
|
62
70
|
|
71
|
+
rule(:staged_addenda) do
|
72
|
+
array_to_str(STAGED_ADDENDA)
|
73
|
+
end
|
74
|
+
|
63
75
|
rule(:tctype) do
|
64
76
|
# tc-types
|
65
77
|
array_to_str(TCTYPES)
|
@@ -79,14 +91,14 @@ module Pubid::Iso
|
|
79
91
|
|
80
92
|
rule(:year_digits) { (str("19") | str("20")) >> match('\d').repeat(2, 2) >> digits.absent? }
|
81
93
|
|
82
|
-
|
83
94
|
rule(:part_matcher) do
|
84
95
|
year_digits.absent? >>
|
85
|
-
|
96
|
+
supplements.absent? >>
|
97
|
+
staged_addenda.absent? >> ((roman_numerals >> digits.absent?) | match['[\dA-Z]'].repeat(1)).as(:part)
|
86
98
|
end
|
87
99
|
|
88
100
|
rule(:part) do
|
89
|
-
(str("/") |
|
101
|
+
(str("/") | dash) >> space? >> part_matcher >> (dash >> part_matcher).repeat
|
90
102
|
end
|
91
103
|
|
92
104
|
rule(:organization) do
|
@@ -109,13 +121,19 @@ module Pubid::Iso
|
|
109
121
|
(space | str(".")).repeat(1).maybe >>
|
110
122
|
digits.as(:number).maybe >>
|
111
123
|
(str(".") >> digits.as(:iteration)).maybe >>
|
112
|
-
((str(":") |
|
124
|
+
((str(":") | dash) >> digits.as(:year)).maybe).repeat(1).as(:supplements)
|
113
125
|
end
|
114
126
|
|
115
127
|
rule(:addendum) do
|
116
128
|
(
|
117
|
-
((str("/") >> (str("Add") | str("ADD"))) | (str(" —
|
118
|
-
|
129
|
+
(((str("/") >> (str("Add") | str("ADD")).as(:type)) | (str(" — ") >> str("Addendum").as(:type))) |
|
130
|
+
(str("/") >> staged_addenda.as(:typed_stage))) >>
|
131
|
+
space >> digits.as(:number) >> ((str(":")) >> digits.as(:year)).maybe
|
132
|
+
).repeat(1).as(:supplements)
|
133
|
+
end
|
134
|
+
|
135
|
+
rule(:extract) do
|
136
|
+
str("/") >> str("Ext") >> space >> (digits.as(:number) >> str(":") >> digits.as(:year)).as(:extract)
|
119
137
|
end
|
120
138
|
|
121
139
|
rule(:language) do
|
@@ -157,15 +175,16 @@ module Pubid::Iso
|
|
157
175
|
end
|
158
176
|
|
159
177
|
rule(:std_document_body) do
|
160
|
-
(type | stage.as(:stage)).maybe >>
|
178
|
+
(type | (stage.as(:stage) >> digits.as(:iteration).maybe)).maybe >>
|
161
179
|
# for ISO/IEC WD TS 25025
|
162
180
|
space? >> ((stage.as(:stage) | typed_stage.as(:stage) | type) >> space).maybe >>
|
163
181
|
digits.as(:number) >>
|
164
182
|
# for identifiers like ISO 5537/IDF 26
|
165
183
|
(str("|") >> (str("IDF").as(:publisher) >> space >> digits.as(:number)).as(:joint_document)).maybe >>
|
166
184
|
part.maybe >> iteration.maybe >>
|
167
|
-
(space? >> (str(":") |
|
185
|
+
(space? >> (str(":") | dash) >> year).maybe >>
|
168
186
|
supplement.maybe >>
|
187
|
+
extract.maybe >>
|
169
188
|
addendum.maybe >>
|
170
189
|
edition.maybe >>
|
171
190
|
language.maybe
|
@@ -64,7 +64,7 @@ module Pubid::Iso::Renderer
|
|
64
64
|
end
|
65
65
|
[publisher, copublishers].join("/")
|
66
66
|
when Array
|
67
|
-
([publisher] + copublishers.map(&:to_s)
|
67
|
+
([publisher] + copublishers.map(&:to_s)).map do |pub|
|
68
68
|
if opts[:language]
|
69
69
|
(TRANSLATION[opts[:language]][:publisher][pub] || pub).gsub('-', '/')
|
70
70
|
else
|
@@ -156,8 +156,6 @@ module Pubid::Iso::Renderer
|
|
156
156
|
end
|
157
157
|
|
158
158
|
def render_part(part, opts, _params)
|
159
|
-
return "-#{part.reverse.join('-')}" if part.is_a?(Array)
|
160
|
-
|
161
159
|
"-#{part}"
|
162
160
|
end
|
163
161
|
|
@@ -2,7 +2,7 @@ require_relative "identifier/base"
|
|
2
2
|
require_relative "renderer/base"
|
3
3
|
|
4
4
|
module Pubid::Iso
|
5
|
-
class Transformer <
|
5
|
+
class Transformer < Pubid::Core::Transformer
|
6
6
|
rule(edition: "Ed") do
|
7
7
|
{ edition: "1" }
|
8
8
|
end
|
@@ -29,7 +29,12 @@ module Pubid::Iso
|
|
29
29
|
end
|
30
30
|
)
|
31
31
|
else
|
32
|
-
supplement
|
32
|
+
case supplement[:type]
|
33
|
+
when "Addendum"
|
34
|
+
supplement.merge({ type: "Add" })
|
35
|
+
else
|
36
|
+
supplement
|
37
|
+
end
|
33
38
|
end
|
34
39
|
end
|
35
40
|
context
|
@@ -91,6 +96,10 @@ module Pubid::Iso
|
|
91
96
|
{ publisher: russian_publisher&.to_s || publisher }
|
92
97
|
end
|
93
98
|
|
99
|
+
rule(part: sequence(:part)) do
|
100
|
+
{ part: part.map(&:to_s).join("-") }
|
101
|
+
end
|
102
|
+
|
94
103
|
rule(joint_document: subtree(:joint_document)) do |context|
|
95
104
|
context[:joint_document] =
|
96
105
|
Identifier.create(**context[:joint_document])
|
@@ -103,36 +112,6 @@ module Pubid::Iso
|
|
103
112
|
context.select { |k, v| k != :dir_joint_document }
|
104
113
|
end
|
105
114
|
|
106
|
-
|
107
|
-
rule(roman_numerals: simple(:roman_numerals)) do |context|
|
108
|
-
roman_to_int(context[:roman_numerals])
|
109
|
-
# case roman_numerals
|
110
|
-
# when "III"
|
111
|
-
# 3
|
112
|
-
# else
|
113
|
-
# nil
|
114
|
-
# end
|
115
|
-
end
|
116
|
-
|
117
|
-
ROMAN_TO_INT = {
|
118
|
-
"I" => 1,
|
119
|
-
"V" => 5,
|
120
|
-
"X" => 10,
|
121
|
-
"L" => 50,
|
122
|
-
"C" => 100,
|
123
|
-
"D" => 500,
|
124
|
-
"M" => 1000,
|
125
|
-
}
|
126
|
-
|
127
|
-
def self.roman_to_int(roman)
|
128
|
-
sum = ROMAN_TO_INT[roman.to_s[0]]
|
129
|
-
roman.to_s.chars.each_cons(2) do |c1, c2|
|
130
|
-
sum += ROMAN_TO_INT[c2]
|
131
|
-
sum -= ROMAN_TO_INT[c1] * 2 if ROMAN_TO_INT[c1] < ROMAN_TO_INT[c2]
|
132
|
-
end
|
133
|
-
sum
|
134
|
-
end
|
135
|
-
|
136
115
|
def self.convert_stage(code)
|
137
116
|
russian_code = Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].key(code.to_s)
|
138
117
|
return { stage: russian_code } if russian_code
|
data/lib/pubid/iso/version.rb
CHANGED
data/lib/pubid/iso.rb
CHANGED
@@ -28,6 +28,8 @@ require_relative "iso/identifier/guide"
|
|
28
28
|
require_relative "iso/identifier/recommendation"
|
29
29
|
require_relative "iso/identifier/technology_trends_assessments"
|
30
30
|
require_relative "iso/identifier/international_workshop_agreement"
|
31
|
+
require_relative "iso/identifier/extract"
|
32
|
+
require_relative "iso/identifier/addendum"
|
31
33
|
|
32
34
|
config = Pubid::Core::Configuration.new
|
33
35
|
config.stages = YAML.load_file(File.join(File.dirname(__FILE__), "../../stages.yaml"))
|
@@ -46,7 +48,9 @@ config.types = [Pubid::Iso::Identifier::InternationalStandard,
|
|
46
48
|
Pubid::Iso::Identifier::TechnicalReport,
|
47
49
|
Pubid::Iso::Identifier::TechnicalSpecification,
|
48
50
|
Pubid::Iso::Identifier::TechnologyTrendsAssessments,
|
49
|
-
Pubid::Iso::Identifier::Guide
|
51
|
+
Pubid::Iso::Identifier::Guide,
|
52
|
+
Pubid::Iso::Identifier::Extract,
|
53
|
+
Pubid::Iso::Identifier::Addendum]
|
50
54
|
config.type_names = { tr: {
|
51
55
|
long: "Technical Report",
|
52
56
|
short: "TR",
|
data/stages.yaml
CHANGED
@@ -4,6 +4,7 @@ abbreviations:
|
|
4
4
|
AWI: ["20.00", "10.99"]
|
5
5
|
WD: ["20.20", "20.60", "20.98", "20.99"]
|
6
6
|
CD: ["30.00", "30.20", "30.60", "30.92", "30.98", "30.99"]
|
7
|
+
FCD: ["40.00", "40.20", "40.60", "40.92", "40.98", "40.99"]
|
7
8
|
PRF: ["50.00", "50.20", "50.60", "50.92", "50.98", "50.99"]
|
8
9
|
|
9
10
|
names:
|
@@ -11,6 +12,7 @@ names:
|
|
11
12
|
PWI: Preliminary Work Item
|
12
13
|
NP: New Proposal
|
13
14
|
CD: Committee Draft
|
15
|
+
FCD: Final Committee Draft
|
14
16
|
PRF: Proof of a new
|
15
17
|
|
16
18
|
codes_description:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubid-iso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,48 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: nokogiri
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: thor
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: lightly
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
41
|
- !ruby/object:Gem::Dependency
|
84
42
|
name: parslet
|
85
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +58,14 @@ dependencies:
|
|
100
58
|
requirements:
|
101
59
|
- - "~>"
|
102
60
|
- !ruby/object:Gem::Version
|
103
|
-
version: 1.8.
|
61
|
+
version: 1.8.6
|
104
62
|
type: :runtime
|
105
63
|
prerelease: false
|
106
64
|
version_requirements: !ruby/object:Gem::Requirement
|
107
65
|
requirements:
|
108
66
|
- - "~>"
|
109
67
|
- !ruby/object:Gem::Version
|
110
|
-
version: 1.8.
|
68
|
+
version: 1.8.6
|
111
69
|
description: Library to generate, parse and manipulate ISO PubID.
|
112
70
|
email:
|
113
71
|
- open.source@ribose.com
|
@@ -123,10 +81,12 @@ files:
|
|
123
81
|
- lib/pubid/iso.rb
|
124
82
|
- lib/pubid/iso/errors.rb
|
125
83
|
- lib/pubid/iso/identifier.rb
|
84
|
+
- lib/pubid/iso/identifier/addendum.rb
|
126
85
|
- lib/pubid/iso/identifier/amendment.rb
|
127
86
|
- lib/pubid/iso/identifier/base.rb
|
128
87
|
- lib/pubid/iso/identifier/corrigendum.rb
|
129
88
|
- lib/pubid/iso/identifier/directives.rb
|
89
|
+
- lib/pubid/iso/identifier/extract.rb
|
130
90
|
- lib/pubid/iso/identifier/guide.rb
|
131
91
|
- lib/pubid/iso/identifier/international_standard.rb
|
132
92
|
- lib/pubid/iso/identifier/international_standardized_profile.rb
|
@@ -139,10 +99,12 @@ files:
|
|
139
99
|
- lib/pubid/iso/identifier/technical_specification.rb
|
140
100
|
- lib/pubid/iso/identifier/technology_trends_assessments.rb
|
141
101
|
- lib/pubid/iso/parser.rb
|
102
|
+
- lib/pubid/iso/renderer/addendum.rb
|
142
103
|
- lib/pubid/iso/renderer/amendment.rb
|
143
104
|
- lib/pubid/iso/renderer/base.rb
|
144
105
|
- lib/pubid/iso/renderer/corrigendum.rb
|
145
106
|
- lib/pubid/iso/renderer/dir.rb
|
107
|
+
- lib/pubid/iso/renderer/extract.rb
|
146
108
|
- lib/pubid/iso/renderer/guide.rb
|
147
109
|
- lib/pubid/iso/renderer/international_standard.rb
|
148
110
|
- lib/pubid/iso/renderer/international_standardized_profile.rb
|