pubid 2.0.0 → 2.0.2
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 -1
- data/data/parg/aiee.json +1 -1
- data/data/parg/amca.json +1 -1
- data/data/parg/ansi.json +1 -1
- data/data/parg/api.json +1 -1
- data/data/parg/ashrae.json +1 -1
- data/data/parg/asme.json +1 -1
- data/data/parg/astm.json +1 -1
- data/data/parg/bipm.json +1 -1
- data/data/parg/bsi.json +1 -1
- data/data/parg/calconnect.json +1 -1
- data/data/parg/ccsds.json +1 -1
- data/data/parg/cen_cenelec.json +1 -1
- data/data/parg/cie.json +1 -1
- data/data/parg/csa.json +1 -1
- data/data/parg/doi.json +1 -1
- data/data/parg/easc.json +1 -1
- data/data/parg/ecma.json +1 -1
- data/data/parg/etsi.json +1 -1
- data/data/parg/evs.json +1 -1
- data/data/parg/gb.json +1 -1
- data/data/parg/gost.json +1 -1
- data/data/parg/iala.json +1 -1
- data/data/parg/iana.json +1 -1
- data/data/parg/idf.json +1 -1
- data/data/parg/iec.json +1 -1
- data/data/parg/ieee.json +1 -29571
- data/data/parg/ietf.json +1 -1
- data/data/parg/iho.json +1 -0
- data/data/parg/ire.json +1 -1
- data/data/parg/isbn.json +1 -1
- data/data/parg/iso.json +1 -8510
- data/data/parg/itu.json +1 -1
- data/data/parg/jcgm.json +1 -1
- data/data/parg/jis.json +1 -1
- data/data/parg/nesc.json +1 -1
- data/data/parg/nist.json +1 -9588
- data/data/parg/oasis.json +1 -1
- data/data/parg/ogc.json +1 -1
- data/data/parg/oiml.json +1 -1
- data/data/parg/omg.json +1 -1
- data/data/parg/parg.json +1 -1
- data/data/parg/plateau.json +1 -1
- data/data/parg/sae.json +1 -1
- data/data/parg/tables/typed_stages.yaml +1 -0
- data/data/parg/tgpp.json +1 -1
- data/data/parg/un.json +1 -1
- data/data/parg/w3c.json +1 -1
- data/data/parg/xsf.json +1 -1
- data/lib/pubid/adobe/identifier.rb +1 -1
- data/lib/pubid/adobe/parser.rb +2 -113
- data/lib/pubid/amca/identifiers/base.rb +1 -1
- data/lib/pubid/amca/parser.rb +1 -145
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/parser.rb +1 -82
- data/lib/pubid/api/builder.rb +32 -1
- data/lib/pubid/api/identifier.rb +1 -1
- data/lib/pubid/api/parser.rb +1 -131
- data/lib/pubid/ashrae/identifiers/base.rb +1 -1
- data/lib/pubid/ashrae/parser.rb +3 -710
- data/lib/pubid/asme/builder.rb +6 -4
- data/lib/pubid/asme/identifier.rb +1 -2
- data/lib/pubid/asme/parser.rb +1 -328
- data/lib/pubid/astm/builder.rb +12 -3
- data/lib/pubid/astm/identifier.rb +1 -2
- data/lib/pubid/astm/parser.rb +1 -227
- data/lib/pubid/bipm/identifier.rb +8 -1
- data/lib/pubid/bipm/parser.rb +2 -224
- data/lib/pubid/bsi/builder.rb +2 -4
- data/lib/pubid/bsi/parser.rb +1 -666
- data/lib/pubid/bsi/single_identifier.rb +38 -1
- data/lib/pubid/calconnect/identifier.rb +1 -1
- data/lib/pubid/calconnect/parser.rb +2 -40
- data/lib/pubid/ccsds/identifier.rb +1 -1
- data/lib/pubid/ccsds/parser.rb +1 -66
- data/lib/pubid/cen_cenelec/identifier.rb +16 -1
- data/lib/pubid/cen_cenelec/parser.rb +3 -136
- data/lib/pubid/cie/identifier.rb +1 -1
- data/lib/pubid/cie/parser.rb +3 -378
- data/lib/pubid/conformance.rb +1 -1
- data/lib/pubid/csa/builder.rb +41 -18
- data/lib/pubid/csa/identifier.rb +12 -4
- data/lib/pubid/csa/identifiers/amendment.rb +28 -0
- data/lib/pubid/csa/identifiers.rb +1 -0
- data/lib/pubid/csa/parser.rb +16 -397
- data/lib/pubid/doi/identifier.rb +1 -1
- data/lib/pubid/doi/parser.rb +2 -37
- data/lib/pubid/easc/builder.rb +1 -1
- data/lib/pubid/easc/identifier.rb +1 -1
- data/lib/pubid/easc/parser.rb +2 -70
- data/lib/pubid/ecma/CLAUDE.md +8 -1
- data/lib/pubid/ecma/identifier.rb +13 -8
- data/lib/pubid/ecma/parser.rb +2 -54
- data/lib/pubid/ecma/renderer.rb +3 -7
- data/lib/pubid/errors.rb +18 -13
- data/lib/pubid/etsi/builder.rb +8 -5
- data/lib/pubid/etsi/identifiers/base.rb +1 -1
- data/lib/pubid/etsi/parser.rb +1 -132
- data/lib/pubid/evs/identifier.rb +7 -0
- data/lib/pubid/evs/parser.rb +1 -8
- data/lib/pubid/evs.rb +1 -1
- data/lib/pubid/gb/identifier.rb +7 -1
- data/lib/pubid/gb/parser.rb +2 -51
- data/lib/pubid/gost/identifier.rb +9 -1
- data/lib/pubid/gost/parser.rb +4 -81
- data/lib/pubid/iala/parser.rb +2 -121
- data/lib/pubid/iana/identifier.rb +1 -1
- data/lib/pubid/iana/parser.rb +2 -24
- data/lib/pubid/identifier.rb +78 -1
- data/lib/pubid/idf/builder.rb +42 -0
- data/lib/pubid/idf/identifier.rb +1 -1
- data/lib/pubid/idf/parser.rb +1 -137
- data/lib/pubid/idf.rb +1 -2
- data/lib/pubid/iec/builder.rb +158 -50
- data/lib/pubid/iec/identifier.rb +1 -1
- data/lib/pubid/iec/parser.rb +3 -430
- data/lib/pubid/ieee/aiee/identifier.rb +2 -1
- data/lib/pubid/ieee/aiee.rb +0 -1
- data/lib/pubid/ieee/builder.rb +2 -2
- data/lib/pubid/ieee/identifiers/base.rb +1 -1
- data/lib/pubid/ieee/ire/identifier.rb +2 -1
- data/lib/pubid/ieee/ire.rb +0 -1
- data/lib/pubid/ieee/nesc.rb +0 -1
- data/lib/pubid/ieee/parser.rb +1 -1257
- data/lib/pubid/ietf/identifiers/base.rb +17 -1
- data/lib/pubid/ietf/parser.rb +2 -47
- data/lib/pubid/ietf/renderer.rb +17 -2
- data/lib/pubid/iho/CLAUDE.md +89 -0
- data/lib/pubid/iho/builder.rb +4 -1
- data/lib/pubid/iho/identifiers/base.rb +28 -2
- data/lib/pubid/iho/renderer.rb +8 -0
- data/lib/pubid/iho/urn_generator.rb +11 -1
- data/lib/pubid/iho/urn_parser.rb +21 -11
- data/lib/pubid/iho.rb +0 -1
- data/lib/pubid/isbn/identifier.rb +1 -1
- data/lib/pubid/isbn/parser.rb +2 -31
- data/lib/pubid/iso/builder.rb +1 -1
- data/lib/pubid/iso/identifiers/directives.rb +6 -3
- data/lib/pubid/iso/identifiers/guide.rb +6 -3
- data/lib/pubid/iso/identifiers/international_standard.rb +3 -1
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +6 -3
- data/lib/pubid/iso/normalizer.rb +1 -1
- data/lib/pubid/iso/parser.rb +1 -539
- data/lib/pubid/iso/supplement_identifier.rb +6 -3
- data/lib/pubid/iso/utilities.rb +4 -5
- data/lib/pubid/iso.rb +1 -19
- data/lib/pubid/itu/builder.rb +36 -20
- data/lib/pubid/itu/identifiers/base.rb +15 -2
- data/lib/pubid/itu/parser.rb +1 -775
- data/lib/pubid/jcgm/builder.rb +35 -0
- data/lib/pubid/jcgm/parser.rb +1 -151
- data/lib/pubid/jcgm.rb +1 -2
- data/lib/pubid/jis/builder.rb +18 -29
- data/lib/pubid/jis/identifier.rb +1 -1
- data/lib/pubid/jis/parser.rb +1 -128
- data/lib/pubid/nist/builder.rb +5 -1
- data/lib/pubid/nist/caster.rb +13 -3
- data/lib/pubid/nist/identifiers/base.rb +37 -2
- data/lib/pubid/nist/identifiers/circular.rb +2 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -2
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +2 -2
- data/lib/pubid/nist/identifiers/crpl_report.rb +2 -2
- data/lib/pubid/nist/identifiers/handbook.rb +2 -2
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -2
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +2 -2
- data/lib/pubid/nist/identifiers/monograph.rb +2 -2
- data/lib/pubid/nist/identifiers/report.rb +2 -2
- data/lib/pubid/nist/parser.rb +19 -775
- data/lib/pubid/nist/router.rb +4 -1
- data/lib/pubid/nist/supplement_identifier.rb +2 -2
- data/lib/pubid/oasis/identifier.rb +1 -1
- data/lib/pubid/oasis/parser.rb +2 -16
- data/lib/pubid/ogc/identifier.rb +1 -1
- data/lib/pubid/ogc/parser.rb +2 -26
- data/lib/pubid/oiml/identifiers/certification_system.rb +7 -0
- data/lib/pubid/oiml/identifiers/dual_published.rb +2 -2
- data/lib/pubid/oiml/parser.rb +1 -303
- data/lib/pubid/oiml.rb +1 -2
- data/lib/pubid/omg/identifier.rb +6 -1
- data/lib/pubid/omg/parser.rb +2 -76
- data/lib/pubid/parg/artifact.rb +22 -3
- data/lib/pubid/parg/model.rb +98 -0
- data/lib/pubid/parg.rb +1 -0
- data/lib/pubid/parser.rb +5 -4
- data/lib/pubid/parsers/mr_string.rb +1 -1
- data/lib/pubid/plateau/parser.rb +1 -66
- data/lib/pubid/plateau.rb +1 -2
- data/lib/pubid/renderers/directives_renderer.rb +1 -1
- data/lib/pubid/renderers/iwa_renderer.rb +1 -1
- data/lib/pubid/renderers/publisher_stripper.rb +82 -0
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/renderers.rb +1 -0
- data/lib/pubid/sae/identifiers/base.rb +1 -1
- data/lib/pubid/sae/parser.rb +1 -48
- data/lib/pubid/tgpp/identifier.rb +1 -1
- data/lib/pubid/tgpp/parser.rb +2 -59
- data/lib/pubid/un/identifier.rb +1 -1
- data/lib/pubid/un/parser.rb +1 -18
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/identifier.rb +1 -1
- data/lib/pubid/w3c/parser.rb +2 -27
- data/lib/pubid/xsf/identifier.rb +11 -7
- data/lib/pubid/xsf/parser.rb +3 -31
- data/lib/pubid/xsf/renderer.rb +2 -4
- data/lib/pubid.rb +8 -9
- metadata +15 -25
- data/lib/pubid/ieee/aiee/parser.rb +0 -130
- data/lib/pubid/ieee/ire/parser.rb +0 -109
- data/lib/pubid/ieee/nesc/parser.rb +0 -155
- data/lib/pubid/iho/parser.rb +0 -68
- data/lib/pubid/parser/common_parse_methods.rb +0 -13
- data/lib/pubid/parser/common_parse_rules.rb +0 -56
- data/lib/pubid/parser/grammar.rb +0 -96
data/lib/pubid/api/parser.rb
CHANGED
|
@@ -1,144 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "parslet"
|
|
4
|
-
|
|
5
3
|
module Pubid
|
|
6
4
|
module Api
|
|
7
|
-
class Parser
|
|
8
|
-
# Basic building blocks
|
|
9
|
-
rule(:space) { str(" ") }
|
|
10
|
-
rule(:dash) { str("-") }
|
|
11
|
-
rule(:slash) { str("/") }
|
|
12
|
-
rule(:colon) { str(":") }
|
|
13
|
-
rule(:dot) { str(".") }
|
|
14
|
-
rule(:digit) { match("[0-9]") }
|
|
15
|
-
rule(:digits) { digit.repeat(1) }
|
|
16
|
-
rule(:letter) { match("[A-Z]") }
|
|
17
|
-
rule(:letters) { letter.repeat(1) }
|
|
18
|
-
|
|
19
|
-
# Publisher
|
|
20
|
-
rule(:publisher) { str("API") >> space }
|
|
21
|
-
|
|
22
|
-
# Document types (longest first for proper matching)
|
|
23
|
-
rule(:doc_type) do
|
|
24
|
-
(
|
|
25
|
-
str("MPMS") |
|
|
26
|
-
str("BULL") |
|
|
27
|
-
str("SPEC") |
|
|
28
|
-
str("STD") |
|
|
29
|
-
str("RP") |
|
|
30
|
-
str("TR") |
|
|
31
|
-
str("COS") |
|
|
32
|
-
str("PUBL")
|
|
33
|
-
).as(:type)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Chapter notation for MPMS (e.g., "CH 10")
|
|
37
|
-
rule(:chapter_notation) do
|
|
38
|
-
space >> str("CH") >> space >> digits.as(:chapter)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Number with optional part (e.g., "579-2", "1104", "6D", "D16", "17TR7")
|
|
42
|
-
# Allow any mix of digits and letters
|
|
43
|
-
rule(:number_with_part) do
|
|
44
|
-
match("[0-9A-Z]").repeat(1).as(:number) >>
|
|
45
|
-
(dash >> match("[0-9A-Z]").repeat(1).as(:part)).maybe
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# Digits with optional letter suffix (for MPMS sections: 6.4A, 3.1A)
|
|
49
|
-
rule(:digits_with_letter) do
|
|
50
|
-
digits >> letter.maybe
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Year (4-digit)
|
|
54
|
-
rule(:year) { digit.repeat(4, 4).as(:year) }
|
|
55
|
-
|
|
56
|
-
# Date with dash (e.g., "-2023")
|
|
57
|
-
rule(:date_dash) { dash >> year }
|
|
58
|
-
|
|
59
|
-
# Date with colon (e.g., ":2023")
|
|
60
|
-
rule(:date_colon) { colon >> year }
|
|
61
|
-
|
|
62
|
-
# Reaffirmation notation (e.g., "(R2020)")
|
|
63
|
-
rule(:reaffirmation) do
|
|
64
|
-
space >> str("(R") >> year >> str(")")
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Part notation (e.g., ", Part 2")
|
|
68
|
-
rule(:part_notation) do
|
|
69
|
-
str(", Part ") >> digits.as(:part_number)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Edition notation (e.g., ", 4th edition")
|
|
73
|
-
rule(:edition_notation) do
|
|
74
|
-
str(", ") >>
|
|
75
|
-
digits.as(:edition_number) >>
|
|
76
|
-
(str("st") | str("nd") | str("rd") | str("th")) >>
|
|
77
|
-
str(" edition")
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# MPMS identifier (special format with CH)
|
|
81
|
-
rule(:mpms_identifier) do
|
|
82
|
-
publisher >>
|
|
83
|
-
str("MPMS").as(:type) >>
|
|
84
|
-
chapter_notation >>
|
|
85
|
-
(dot >> digits_with_letter.as(:section)).maybe >>
|
|
86
|
-
(dot >> digits_with_letter.as(:subsection)).maybe >>
|
|
87
|
-
(date_dash | date_colon).maybe
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Standard identifier with type
|
|
91
|
-
rule(:typed_identifier) do
|
|
92
|
-
publisher >>
|
|
93
|
-
doc_type >> space >>
|
|
94
|
-
number_with_part >>
|
|
95
|
-
part_notation.maybe >>
|
|
96
|
-
(date_dash | date_colon).maybe >>
|
|
97
|
-
reaffirmation.maybe
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Typeless identifier (just API + number)
|
|
101
|
-
rule(:typeless_identifier) do
|
|
102
|
-
publisher >>
|
|
103
|
-
number_with_part >>
|
|
104
|
-
part_notation.maybe >>
|
|
105
|
-
(date_dash | date_colon).maybe >>
|
|
106
|
-
reaffirmation.maybe
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Second identifier in combined (no API prefix, just type + number)
|
|
110
|
-
rule(:second_identifier) do
|
|
111
|
-
doc_type >> space >>
|
|
112
|
-
number_with_part >>
|
|
113
|
-
part_notation.maybe >>
|
|
114
|
-
(date_dash | date_colon).maybe
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Combined identifier (two identifiers separated by slash)
|
|
118
|
-
rule(:combined_identifier) do
|
|
119
|
-
(mpms_identifier | typed_identifier | typeless_identifier).as(:first) >>
|
|
120
|
-
slash >>
|
|
121
|
-
second_identifier.as(:second) >>
|
|
122
|
-
edition_notation.maybe
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Main identifier (try combined first, then MPMS, then typed, then typeless)
|
|
126
|
-
rule(:identifier) do
|
|
127
|
-
combined_identifier | mpms_identifier | typed_identifier | typeless_identifier
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
root(:identifier)
|
|
131
|
-
|
|
5
|
+
class Parser
|
|
132
6
|
# Pre-parse ingestion normalization (R2): every parse path feeds
|
|
133
7
|
# the grammar the same normalized string.
|
|
134
8
|
def self.normalize_input(input)
|
|
135
9
|
# Normalize MPMP typo to MPMS
|
|
136
10
|
input.gsub("API MPMP", "API MPMS")
|
|
137
11
|
end
|
|
138
|
-
|
|
139
|
-
def parse(input)
|
|
140
|
-
super(self.class.normalize_input(input))
|
|
141
|
-
end
|
|
142
12
|
end
|
|
143
13
|
end
|
|
144
14
|
end
|
|
@@ -19,7 +19,7 @@ module Pubid
|
|
|
19
19
|
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
parsed = Pubid::Parg::
|
|
22
|
+
parsed = Pubid::Parg::Model.bound(:ashrae, Parser.normalize_input(identifier))
|
|
23
23
|
Builder.build(parsed)
|
|
24
24
|
end
|
|
25
25
|
|