pubid 2.0.0.pre.alpha.13 → 2.0.0.pre.alpha.15
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.
- checksums.yaml +4 -4
- data/data/parg/adobe.json +1 -0
- data/data/parg/aiee.parg +37 -0
- data/data/parg/amca.json +1 -0
- data/data/parg/ansi.json +1 -0
- data/data/parg/api.json +1 -0
- data/data/parg/ashrae.json +1 -0
- data/data/parg/asme.json +1 -0
- data/data/parg/astm.json +1 -0
- data/data/parg/bipm.json +1 -0
- data/data/parg/bsi.json +1 -0
- data/data/parg/calconnect.json +1 -0
- data/data/parg/ccsds.json +1 -0
- data/data/parg/cen_cenelec.json +1 -0
- data/data/parg/cen_cenelec.parg +42 -0
- data/data/parg/cie.json +1 -0
- data/data/parg/csa.json +1 -0
- data/data/parg/doi.json +1 -0
- data/data/parg/easc.json +1 -0
- data/data/parg/ecma.json +1 -0
- data/data/parg/etsi.json +1 -0
- data/data/parg/evs.json +1 -0
- data/data/parg/gb.json +1 -0
- data/data/parg/gost.json +1 -0
- data/data/parg/iala.json +1 -0
- data/data/parg/iana.json +1 -0
- data/data/parg/idf.parg +39 -0
- data/data/parg/iec.json +1 -0
- data/data/parg/ieee.json +1 -0
- data/data/parg/ietf.json +1 -0
- data/data/parg/ire.parg +39 -0
- data/data/parg/isbn.json +1 -0
- data/data/parg/iso.json +1 -0
- data/data/parg/itu.json +1 -0
- data/data/parg/jcgm.json +1 -0
- data/data/parg/jis.json +1 -0
- data/data/parg/nesc.parg +38 -0
- data/data/parg/nist.json +1 -0
- data/data/parg/oasis.json +1 -0
- data/data/parg/ogc.json +1 -0
- data/data/parg/oiml.json +1 -0
- data/data/parg/omg.json +1 -0
- data/data/parg/plateau.json +1 -0
- data/data/parg/sae.json +1 -0
- data/data/parg/tables/bipm_groups.yaml +14 -0
- data/data/parg/tables/bipm_type_codes.yaml +5 -0
- data/data/parg/tables/bipm_type_names_en.yaml +6 -0
- data/data/parg/tables/bipm_type_names_fr.yaml +6 -0
- data/data/parg/tables/directives_supplements_typed_stages.yaml +3 -0
- data/data/parg/tables/directives_typed_stages.yaml +5 -0
- data/data/parg/tables/idf_typed_stages.yaml +27 -0
- data/data/parg/tables/idf_typed_stages_supplements.yaml +2 -0
- data/data/parg/tables/iec_typed_stages.yaml +130 -0
- data/data/parg/tables/iso_publishers.yaml +4 -0
- data/data/parg/tables/organizations.yaml +12 -0
- data/data/parg/tables/tc_types.yaml +42 -0
- data/data/parg/tables/typed_stages.yaml +114 -0
- data/data/parg/tables/typed_stages_supplements.yaml +64 -0
- data/data/parg/tables/wg_types.yaml +21 -0
- data/data/parg/tgpp.json +1 -0
- data/data/parg/un.json +1 -0
- data/data/parg/w3c.json +1 -0
- data/data/parg/xsf.json +1 -0
- data/lib/pubid/adobe/identifier.rb +11 -1
- data/lib/pubid/amca/identifiers/base.rb +1 -1
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/api/identifier.rb +1 -1
- data/lib/pubid/api/parser.rb +8 -4
- data/lib/pubid/ashrae/identifiers/base.rb +10 -1
- data/lib/pubid/ashrae/parser.rb +18 -11
- data/lib/pubid/asme/identifier.rb +1 -1
- data/lib/pubid/astm/identifier.rb +1 -1
- data/lib/pubid/bipm/identifier.rb +1 -1
- data/lib/pubid/bsi/single_identifier.rb +1 -3
- data/lib/pubid/calconnect/identifier.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +1 -1
- data/lib/pubid/cen_cenelec/identifier.rb +2 -1
- data/lib/pubid/cen_cenelec/parser.rb +9 -2
- data/lib/pubid/cie/identifier.rb +1 -1
- data/lib/pubid/cie/parser.rb +9 -2
- data/lib/pubid/conformance/checks.rb +1 -1
- data/lib/pubid/csa/identifier.rb +6 -2
- data/lib/pubid/csa/parser.rb +25 -8
- data/lib/pubid/doi/identifier.rb +1 -1
- data/lib/pubid/easc/identifier.rb +10 -1
- data/lib/pubid/ecma/identifier.rb +1 -1
- data/lib/pubid/etsi/identifiers/base.rb +1 -1
- data/lib/pubid/evs.rb +1 -1
- data/lib/pubid/gb/identifier.rb +1 -1
- data/lib/pubid/gost/identifier.rb +11 -1
- data/lib/pubid/gost/parser.rb +8 -1
- data/lib/pubid/iala/identifier.rb +10 -1
- data/lib/pubid/iana/identifier.rb +1 -1
- data/lib/pubid/idf/builder.rb +5 -0
- data/lib/pubid/iec/identifier.rb +1 -1
- data/lib/pubid/iec/parser.rb +9 -4
- data/lib/pubid/ieee/builder.rb +61 -23
- data/lib/pubid/ieee/identifiers/base.rb +1 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +55 -19
- data/lib/pubid/ieee/parser.rb +25 -11
- data/lib/pubid/ieee/renderer.rb +5 -3
- data/lib/pubid/ietf/identifiers/base.rb +1 -1
- data/lib/pubid/isbn/identifier.rb +1 -1
- data/lib/pubid/iso/identifier.rb +4 -1
- data/lib/pubid/iso/normalizer.rb +4 -1
- data/lib/pubid/itu/CLAUDE.md +46 -0
- data/lib/pubid/itu/builder.rb +24 -4
- data/lib/pubid/itu/identifiers/base.rb +11 -18
- data/lib/pubid/itu/identifiers/radio_regulations.rb +27 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +48 -14
- data/lib/pubid/itu/identifiers/standard_serialization.rb +2 -0
- data/lib/pubid/itu/identifiers.rb +1 -0
- data/lib/pubid/itu/parser.rb +108 -22
- data/lib/pubid/itu/urn_generator.rb +9 -2
- data/lib/pubid/jcgm.rb +1 -1
- data/lib/pubid/jis/identifier.rb +1 -1
- data/lib/pubid/nist/builder.rb +1 -0
- data/lib/pubid/nist/identifiers/base.rb +15 -4
- data/lib/pubid/nist/parser.rb +9 -0
- data/lib/pubid/nist/urn_parser.rb +10 -1
- data/lib/pubid/oasis/identifier.rb +1 -1
- data/lib/pubid/ogc/identifier.rb +1 -1
- data/lib/pubid/oiml.rb +1 -1
- data/lib/pubid/omg/identifier.rb +1 -1
- data/lib/pubid/parg/artifact.rb +46 -0
- data/lib/pubid/parg/backend.rb +92 -0
- data/lib/pubid/parg.rb +8 -0
- data/lib/pubid/pg.rb +8 -0
- data/lib/pubid/plateau.rb +1 -2
- data/lib/pubid/sae/identifiers/base.rb +1 -1
- data/lib/pubid/tgpp/identifier.rb +1 -1
- data/lib/pubid/un/identifier.rb +1 -1
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/identifier.rb +1 -1
- data/lib/pubid/xsf/identifier.rb +1 -1
- data/lib/pubid.rb +1 -0
- metadata +83 -2
|
@@ -16,7 +16,10 @@ module Pubid
|
|
|
16
16
|
def generate_base_urn
|
|
17
17
|
parts = ["urn", "itu"]
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
# An Operational Bulletin is cross-bureau: its sector is a spelling,
|
|
20
|
+
# not identity (see SpecialPublication#==), so it stays out of the URN.
|
|
21
|
+
if identifier.sector &&
|
|
22
|
+
!identifier.is_a?(Identifiers::SpecialPublication)
|
|
20
23
|
sector = identifier.sector.to_s
|
|
21
24
|
parts << sector.to_s.downcase
|
|
22
25
|
else
|
|
@@ -56,7 +59,11 @@ module Pubid
|
|
|
56
59
|
|
|
57
60
|
if identifier.date
|
|
58
61
|
date = identifier.date
|
|
59
|
-
|
|
62
|
+
# Only an Operational Bulletin's printed date carries a day
|
|
63
|
+
# ("15.III.2016"); it is in `==`, so it must reach the URN too.
|
|
64
|
+
if date&.year && date.month && date.day
|
|
65
|
+
parts << "#{date.day}/#{date.month}/#{date.year}"
|
|
66
|
+
elsif date&.year && date.month
|
|
60
67
|
parts << "#{date.month}/#{date.year}"
|
|
61
68
|
elsif date&.year
|
|
62
69
|
parts << date.year.to_s
|
data/lib/pubid/jcgm.rb
CHANGED
data/lib/pubid/jis/identifier.rb
CHANGED
data/lib/pubid/nist/builder.rb
CHANGED
|
@@ -87,6 +87,7 @@ module Pubid
|
|
|
87
87
|
# Note: :base_portion is lost during parser merge, so check for supplement indicators
|
|
88
88
|
if parsed_hash[:supplement_date_range] || parsed_hash[:supplement_slash_year] ||
|
|
89
89
|
parsed_hash[:supplement_month_year] || parsed_hash[:supplement_year] ||
|
|
90
|
+
parsed_hash[:supplement_empty] ||
|
|
90
91
|
parsed_hash[:supplement] || parsed_hash[:base_portion]
|
|
91
92
|
return build_circular_supplement(parsed_hash)
|
|
92
93
|
end
|
|
@@ -696,14 +696,25 @@ module Pubid
|
|
|
696
696
|
result += "#{vol_str}n#{issue_number.number}"
|
|
697
697
|
end
|
|
698
698
|
|
|
699
|
-
#
|
|
700
|
-
|
|
699
|
+
# With a number, the edition glues to it per the NIST spec
|
|
700
|
+
# ("800-53r5"); series-only editions take a dot separator
|
|
701
|
+
# ("NBS.CIRC.e2" — the attested raw spelling; testsuite#5 C4/C5).
|
|
702
|
+
result += if edition
|
|
703
|
+
number ? edition.to_s : ".#{edition}"
|
|
704
|
+
else
|
|
705
|
+
""
|
|
706
|
+
end
|
|
701
707
|
|
|
702
708
|
# Use version_component
|
|
703
709
|
result += version_component.to_s(:mr) if version_component
|
|
704
710
|
|
|
705
|
-
# Supplement (e.g. ".9981sup7") - keep distinct documents distinct
|
|
706
|
-
|
|
711
|
+
# Supplement (e.g. ".9981sup7") - keep distinct documents distinct;
|
|
712
|
+
# a series-only supplement ("NBS.CIRC.sup") takes the dot itself.
|
|
713
|
+
result += if supplement
|
|
714
|
+
number ? supplement_short : ".#{supplement_short}"
|
|
715
|
+
else
|
|
716
|
+
""
|
|
717
|
+
end
|
|
707
718
|
|
|
708
719
|
# Use update_component
|
|
709
720
|
result += update_component.to_s(:mr) if update_component
|
data/lib/pubid/nist/parser.rb
CHANGED
|
@@ -726,6 +726,15 @@ module Pubid
|
|
|
726
726
|
# 4-digit years so it can't swallow "sup3/1926" or a base number.
|
|
727
727
|
((str("supp") | str("sup")) >> match("[0-9]").repeat(4, 4).as(:supp_year_start) >>
|
|
728
728
|
dash >> match("[0-9]").repeat(4, 4).as(:supp_year_end)).as(:supplement_date_range) |
|
|
729
|
+
# Bare supplement marker to the whole series, no base number
|
|
730
|
+
# ("NBS.CIRC.sup" — testsuite#5 C4): the marker alone is the
|
|
731
|
+
# supplement.
|
|
732
|
+
((str("supp") | str("sup")) >>
|
|
733
|
+
(
|
|
734
|
+
(month_abbrev >> digits).as(:supplement_month_year) |
|
|
735
|
+
(digits.as(:supp_number) >> slash >> digits.as(:supp_year)).as(:supplement_slash_year) |
|
|
736
|
+
str("").as(:supplement_empty)
|
|
737
|
+
).maybe) |
|
|
729
738
|
# With base identifier + supplement
|
|
730
739
|
(
|
|
731
740
|
# Capture base portion (everything before "supp" or "sup" or slash+year)
|
|
@@ -42,13 +42,22 @@ module Pubid
|
|
|
42
42
|
type_token, payload = parts
|
|
43
43
|
code, revision = parse_payload(payload)
|
|
44
44
|
|
|
45
|
-
text = "
|
|
45
|
+
text = "#{publisher_for(type_token)} #{type_label(type_token)} #{code}"
|
|
46
46
|
text += revision if revision
|
|
47
47
|
flavor_parse(text)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
private
|
|
51
51
|
|
|
52
|
+
# The NBS-era series carry the NBS imprint in their canonical form
|
|
53
|
+
# ("NBS CSM 1") — the rebuild must name the publisher the document
|
|
54
|
+
# carries, or the flavor parse rejects its own URN's rebuild.
|
|
55
|
+
NBS_SERIES = ["csm"].freeze
|
|
56
|
+
|
|
57
|
+
def publisher_for(type_token)
|
|
58
|
+
NBS_SERIES.include?(type_token.downcase) ? "NBS" : "NIST"
|
|
59
|
+
end
|
|
60
|
+
|
|
52
61
|
def parse_payload(payload)
|
|
53
62
|
# Strip the trailing ".supp" supplement marker.
|
|
54
63
|
stripped = payload.sub(/\.supp\z/, "")
|
data/lib/pubid/ogc/identifier.rb
CHANGED
data/lib/pubid/oiml.rb
CHANGED
data/lib/pubid/omg/identifier.rb
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parsanol"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Parg
|
|
7
|
+
# A baked, checksum-verified PG artifact for one flavor. The artifact
|
|
8
|
+
# is the parser of record for the flavor: its grammar, tests, entries,
|
|
9
|
+
# and embedded tables travel together and are verified on load.
|
|
10
|
+
class Artifact
|
|
11
|
+
DATA_DIR = File.expand_path("../../../data/parg", __dir__)
|
|
12
|
+
# The deferred entity atoms resolve from_table references at parse
|
|
13
|
+
# time from this dir, so the table YAMLs vendor alongside the
|
|
14
|
+
# baked artifacts.
|
|
15
|
+
TABLES_DIR = File.join(DATA_DIR, "tables")
|
|
16
|
+
|
|
17
|
+
@artifacts = {}
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
# Load and memoize the artifact for a flavor (e.g. :iso).
|
|
21
|
+
def for(flavor)
|
|
22
|
+
@artifacts[flavor] ||=
|
|
23
|
+
begin
|
|
24
|
+
path = File.join(DATA_DIR, "#{flavor}.json")
|
|
25
|
+
new(Parsanol::PARG::Artifact.load(path, tables_dir: TABLES_DIR))
|
|
26
|
+
rescue Parsanol::PARG::Error => e
|
|
27
|
+
raise Pubid::Errors::ParseError,
|
|
28
|
+
"PG artifact #{path} rejected: #{e.message}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def initialize(artifact)
|
|
34
|
+
@artifact = artifact
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def parse(entry, input)
|
|
38
|
+
@artifact.parse(entry, input)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def checksum
|
|
42
|
+
@artifact.envelope["checksum"]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Parg
|
|
5
|
+
# The PG-artifact parse backend: runs the flavor's baked artifact on
|
|
6
|
+
# an input and returns the builder-ready attribute hash the flavor's
|
|
7
|
+
# Builder expects — the same hash its parslet parser produced.
|
|
8
|
+
module Backend
|
|
9
|
+
LEAF_KEYS = %i[value line column offset length].freeze
|
|
10
|
+
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
ALL_PARTS_SUFFIX = "(all parts)"
|
|
14
|
+
|
|
15
|
+
def parse(flavor, input, entry: "identifier", merge_top_sequence: true)
|
|
16
|
+
# The parslet grammar base strips the "(all parts)" suffix before
|
|
17
|
+
# parsing and marks the tree (Grammar#parse / #mark_all_parts);
|
|
18
|
+
# the artifact backend carries the same contract so every flavor
|
|
19
|
+
# whose grammar does not itself consume the suffix keeps working.
|
|
20
|
+
if input.end_with?(ALL_PARTS_SUFFIX)
|
|
21
|
+
base = input.sub(/\s*\(all parts\)\s*\z/, "")
|
|
22
|
+
tree = to_builder_hash(Artifact.for(flavor).parse(entry, base), merge: merge_top_sequence)
|
|
23
|
+
return mark_all_parts(tree)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
to_builder_hash(Artifact.for(flavor).parse(entry, input), merge: merge_top_sequence)
|
|
27
|
+
rescue Parsanol::ParseFailed => e
|
|
28
|
+
raise Pubid::Errors::ParseError.new(e.message, nil,
|
|
29
|
+
input: input,
|
|
30
|
+
flavor: registered_name(flavor))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# The registered flavor name (Registry-resolvable; "3gpp" for
|
|
34
|
+
# Pubid::Tgpp), falling back to the internal symbol when the
|
|
35
|
+
# flavor is not registered.
|
|
36
|
+
def registered_name(flavor)
|
|
37
|
+
mod = Pubid.const_get(flavor.to_s.split("_").map(&:capitalize).join)
|
|
38
|
+
names = Pubid::Registry.flavor_names.select { |name| Pubid::Registry.get(name) == mod }
|
|
39
|
+
# A module may register under several names; the longest is the
|
|
40
|
+
# canonical one ("cen_cenelec", not the "cen" alias).
|
|
41
|
+
names.max_by(&:length)
|
|
42
|
+
rescue NameError
|
|
43
|
+
nil
|
|
44
|
+
end || flavor.to_s
|
|
45
|
+
|
|
46
|
+
def mark_all_parts(tree)
|
|
47
|
+
case tree
|
|
48
|
+
when Hash then tree.merge(all_parts: true)
|
|
49
|
+
when Array then tree.map { |t| t.merge(all_parts: true) }
|
|
50
|
+
else tree
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# The artifact emits the parsanol-tree wire shape: capture leaves
|
|
55
|
+
# ({value, line, column, offset, length}) carry their text, and the
|
|
56
|
+
# top-level sequence is a list of capture hashes. The builder-ready
|
|
57
|
+
# form scalarizes leaves and folds that top-level list into one
|
|
58
|
+
# attribute hash (last key wins) — parslet's sequence fold.
|
|
59
|
+
def to_builder_hash(shape, merge: true)
|
|
60
|
+
normalized = normalize(shape)
|
|
61
|
+
return normalized.reduce(:merge) if merge && mergeable_sequence?(normalized)
|
|
62
|
+
|
|
63
|
+
normalized
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def normalize(node)
|
|
67
|
+
case node
|
|
68
|
+
when Parsanol::Slice then node.content
|
|
69
|
+
when Hash then normalize_hash(node)
|
|
70
|
+
when Array then node.map { |item| normalize(item) }
|
|
71
|
+
else node
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def normalize_hash(node)
|
|
76
|
+
return node[:value] if wire_leaf?(node)
|
|
77
|
+
|
|
78
|
+
node.transform_values { |value| normalize(value) }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def mergeable_sequence?(value)
|
|
82
|
+
value.is_a?(Array) && value.all?(Hash)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def wire_leaf?(node)
|
|
86
|
+
return false unless node.size == LEAF_KEYS.size
|
|
87
|
+
|
|
88
|
+
LEAF_KEYS.all? { |key| node.key?(key) }
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
data/lib/pubid/parg.rb
ADDED
data/lib/pubid/pg.rb
ADDED
data/lib/pubid/plateau.rb
CHANGED
|
@@ -31,8 +31,7 @@ module Pubid
|
|
|
31
31
|
|
|
32
32
|
# Apply legacy update_codes normalization first
|
|
33
33
|
normalized = Core::UpdateCodes.apply(input, :plateau)
|
|
34
|
-
|
|
35
|
-
parsed = parser.parse(normalized)
|
|
34
|
+
parsed = Pubid::Parg::Backend.parse(:plateau, normalized)
|
|
36
35
|
Builder.build(parsed)
|
|
37
36
|
end
|
|
38
37
|
|
data/lib/pubid/un/identifier.rb
CHANGED
data/lib/pubid/version.rb
CHANGED
data/lib/pubid/w3c/identifier.rb
CHANGED
data/lib/pubid/xsf/identifier.rb
CHANGED
data/lib/pubid.rb
CHANGED
|
@@ -17,6 +17,7 @@ require "pubid/prefixes_support"
|
|
|
17
17
|
module Pubid
|
|
18
18
|
autoload :Schema, "pubid/schema"
|
|
19
19
|
autoload :Conformance, "pubid/conformance"
|
|
20
|
+
autoload :Parg, "pubid/parg"
|
|
20
21
|
# Upper bound on the length of an identifier string accepted by any +parse+
|
|
21
22
|
# entry point. Real-world standards identifiers are well under 200 characters;
|
|
22
23
|
# this limit exists purely to keep pathological, attacker-controlled inputs
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pubid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.0.pre.alpha.
|
|
4
|
+
version: 2.0.0.pre.alpha.15
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-10-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: lutaml-model
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: parsanol
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 1.3.57
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 1.3.57
|
|
41
55
|
description: PubID is a Ruby library for parsing and generating international publication
|
|
42
56
|
identifiers (PubIDs). It provides a simple and flexible API for working with PubIDs,
|
|
43
57
|
allowing developers to easily create, manipulate, and validate PubIDs in their applications.
|
|
@@ -60,6 +74,68 @@ files:
|
|
|
60
74
|
- data/nist/series.yaml
|
|
61
75
|
- data/nist/stages.yaml
|
|
62
76
|
- data/nist/update_codes.yaml
|
|
77
|
+
- data/parg/adobe.json
|
|
78
|
+
- data/parg/aiee.parg
|
|
79
|
+
- data/parg/amca.json
|
|
80
|
+
- data/parg/ansi.json
|
|
81
|
+
- data/parg/api.json
|
|
82
|
+
- data/parg/ashrae.json
|
|
83
|
+
- data/parg/asme.json
|
|
84
|
+
- data/parg/astm.json
|
|
85
|
+
- data/parg/bipm.json
|
|
86
|
+
- data/parg/bsi.json
|
|
87
|
+
- data/parg/calconnect.json
|
|
88
|
+
- data/parg/ccsds.json
|
|
89
|
+
- data/parg/cen_cenelec.json
|
|
90
|
+
- data/parg/cen_cenelec.parg
|
|
91
|
+
- data/parg/cie.json
|
|
92
|
+
- data/parg/csa.json
|
|
93
|
+
- data/parg/doi.json
|
|
94
|
+
- data/parg/easc.json
|
|
95
|
+
- data/parg/ecma.json
|
|
96
|
+
- data/parg/etsi.json
|
|
97
|
+
- data/parg/evs.json
|
|
98
|
+
- data/parg/gb.json
|
|
99
|
+
- data/parg/gost.json
|
|
100
|
+
- data/parg/iala.json
|
|
101
|
+
- data/parg/iana.json
|
|
102
|
+
- data/parg/idf.parg
|
|
103
|
+
- data/parg/iec.json
|
|
104
|
+
- data/parg/ieee.json
|
|
105
|
+
- data/parg/ietf.json
|
|
106
|
+
- data/parg/ire.parg
|
|
107
|
+
- data/parg/isbn.json
|
|
108
|
+
- data/parg/iso.json
|
|
109
|
+
- data/parg/itu.json
|
|
110
|
+
- data/parg/jcgm.json
|
|
111
|
+
- data/parg/jis.json
|
|
112
|
+
- data/parg/nesc.parg
|
|
113
|
+
- data/parg/nist.json
|
|
114
|
+
- data/parg/oasis.json
|
|
115
|
+
- data/parg/ogc.json
|
|
116
|
+
- data/parg/oiml.json
|
|
117
|
+
- data/parg/omg.json
|
|
118
|
+
- data/parg/plateau.json
|
|
119
|
+
- data/parg/sae.json
|
|
120
|
+
- data/parg/tables/bipm_groups.yaml
|
|
121
|
+
- data/parg/tables/bipm_type_codes.yaml
|
|
122
|
+
- data/parg/tables/bipm_type_names_en.yaml
|
|
123
|
+
- data/parg/tables/bipm_type_names_fr.yaml
|
|
124
|
+
- data/parg/tables/directives_supplements_typed_stages.yaml
|
|
125
|
+
- data/parg/tables/directives_typed_stages.yaml
|
|
126
|
+
- data/parg/tables/idf_typed_stages.yaml
|
|
127
|
+
- data/parg/tables/idf_typed_stages_supplements.yaml
|
|
128
|
+
- data/parg/tables/iec_typed_stages.yaml
|
|
129
|
+
- data/parg/tables/iso_publishers.yaml
|
|
130
|
+
- data/parg/tables/organizations.yaml
|
|
131
|
+
- data/parg/tables/tc_types.yaml
|
|
132
|
+
- data/parg/tables/typed_stages.yaml
|
|
133
|
+
- data/parg/tables/typed_stages_supplements.yaml
|
|
134
|
+
- data/parg/tables/wg_types.yaml
|
|
135
|
+
- data/parg/tgpp.json
|
|
136
|
+
- data/parg/un.json
|
|
137
|
+
- data/parg/w3c.json
|
|
138
|
+
- data/parg/xsf.json
|
|
63
139
|
- data/plateau/update_codes.yaml
|
|
64
140
|
- lib/pubid.rb
|
|
65
141
|
- lib/pubid/adobe.rb
|
|
@@ -686,6 +762,7 @@ files:
|
|
|
686
762
|
- lib/pubid/itu/identifiers/errata.rb
|
|
687
763
|
- lib/pubid/itu/identifiers/handbook.rb
|
|
688
764
|
- lib/pubid/itu/identifiers/question.rb
|
|
765
|
+
- lib/pubid/itu/identifiers/radio_regulations.rb
|
|
689
766
|
- lib/pubid/itu/identifiers/recommendation.rb
|
|
690
767
|
- lib/pubid/itu/identifiers/report.rb
|
|
691
768
|
- lib/pubid/itu/identifiers/special_publication.rb
|
|
@@ -843,12 +920,16 @@ files:
|
|
|
843
920
|
- lib/pubid/omg/identifiers/specification.rb
|
|
844
921
|
- lib/pubid/omg/parser.rb
|
|
845
922
|
- lib/pubid/omg/renderer.rb
|
|
923
|
+
- lib/pubid/parg.rb
|
|
924
|
+
- lib/pubid/parg/artifact.rb
|
|
925
|
+
- lib/pubid/parg/backend.rb
|
|
846
926
|
- lib/pubid/parser.rb
|
|
847
927
|
- lib/pubid/parser/common_parse_methods.rb
|
|
848
928
|
- lib/pubid/parser/common_parse_rules.rb
|
|
849
929
|
- lib/pubid/parser/grammar.rb
|
|
850
930
|
- lib/pubid/parsers/base.rb
|
|
851
931
|
- lib/pubid/parsers/mr_string.rb
|
|
932
|
+
- lib/pubid/pg.rb
|
|
852
933
|
- lib/pubid/plateau.rb
|
|
853
934
|
- lib/pubid/plateau/builder.rb
|
|
854
935
|
- lib/pubid/plateau/identifier.rb
|