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.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/data/parg/adobe.json +1 -1
  3. data/data/parg/aiee.json +1 -1
  4. data/data/parg/amca.json +1 -1
  5. data/data/parg/ansi.json +1 -1
  6. data/data/parg/api.json +1 -1
  7. data/data/parg/ashrae.json +1 -1
  8. data/data/parg/asme.json +1 -1
  9. data/data/parg/astm.json +1 -1
  10. data/data/parg/bipm.json +1 -1
  11. data/data/parg/bsi.json +1 -1
  12. data/data/parg/calconnect.json +1 -1
  13. data/data/parg/ccsds.json +1 -1
  14. data/data/parg/cen_cenelec.json +1 -1
  15. data/data/parg/cie.json +1 -1
  16. data/data/parg/csa.json +1 -1
  17. data/data/parg/doi.json +1 -1
  18. data/data/parg/easc.json +1 -1
  19. data/data/parg/ecma.json +1 -1
  20. data/data/parg/etsi.json +1 -1
  21. data/data/parg/evs.json +1 -1
  22. data/data/parg/gb.json +1 -1
  23. data/data/parg/gost.json +1 -1
  24. data/data/parg/iala.json +1 -1
  25. data/data/parg/iana.json +1 -1
  26. data/data/parg/idf.json +1 -1
  27. data/data/parg/iec.json +1 -1
  28. data/data/parg/ieee.json +1 -29571
  29. data/data/parg/ietf.json +1 -1
  30. data/data/parg/iho.json +1 -0
  31. data/data/parg/ire.json +1 -1
  32. data/data/parg/isbn.json +1 -1
  33. data/data/parg/iso.json +1 -8510
  34. data/data/parg/itu.json +1 -1
  35. data/data/parg/jcgm.json +1 -1
  36. data/data/parg/jis.json +1 -1
  37. data/data/parg/nesc.json +1 -1
  38. data/data/parg/nist.json +1 -9588
  39. data/data/parg/oasis.json +1 -1
  40. data/data/parg/ogc.json +1 -1
  41. data/data/parg/oiml.json +1 -1
  42. data/data/parg/omg.json +1 -1
  43. data/data/parg/parg.json +1 -1
  44. data/data/parg/plateau.json +1 -1
  45. data/data/parg/sae.json +1 -1
  46. data/data/parg/tables/typed_stages.yaml +1 -0
  47. data/data/parg/tgpp.json +1 -1
  48. data/data/parg/un.json +1 -1
  49. data/data/parg/w3c.json +1 -1
  50. data/data/parg/xsf.json +1 -1
  51. data/lib/pubid/adobe/identifier.rb +1 -1
  52. data/lib/pubid/adobe/parser.rb +2 -113
  53. data/lib/pubid/amca/identifiers/base.rb +1 -1
  54. data/lib/pubid/amca/parser.rb +1 -145
  55. data/lib/pubid/ansi/identifier.rb +1 -1
  56. data/lib/pubid/ansi/parser.rb +1 -82
  57. data/lib/pubid/api/builder.rb +32 -1
  58. data/lib/pubid/api/identifier.rb +1 -1
  59. data/lib/pubid/api/parser.rb +1 -131
  60. data/lib/pubid/ashrae/identifiers/base.rb +1 -1
  61. data/lib/pubid/ashrae/parser.rb +3 -710
  62. data/lib/pubid/asme/builder.rb +6 -4
  63. data/lib/pubid/asme/identifier.rb +1 -2
  64. data/lib/pubid/asme/parser.rb +1 -328
  65. data/lib/pubid/astm/builder.rb +12 -3
  66. data/lib/pubid/astm/identifier.rb +1 -2
  67. data/lib/pubid/astm/parser.rb +1 -227
  68. data/lib/pubid/bipm/identifier.rb +8 -1
  69. data/lib/pubid/bipm/parser.rb +2 -224
  70. data/lib/pubid/bsi/builder.rb +2 -4
  71. data/lib/pubid/bsi/parser.rb +1 -666
  72. data/lib/pubid/bsi/single_identifier.rb +38 -1
  73. data/lib/pubid/calconnect/identifier.rb +1 -1
  74. data/lib/pubid/calconnect/parser.rb +2 -40
  75. data/lib/pubid/ccsds/identifier.rb +1 -1
  76. data/lib/pubid/ccsds/parser.rb +1 -66
  77. data/lib/pubid/cen_cenelec/identifier.rb +16 -1
  78. data/lib/pubid/cen_cenelec/parser.rb +3 -136
  79. data/lib/pubid/cie/identifier.rb +1 -1
  80. data/lib/pubid/cie/parser.rb +3 -378
  81. data/lib/pubid/conformance.rb +1 -1
  82. data/lib/pubid/csa/builder.rb +41 -18
  83. data/lib/pubid/csa/identifier.rb +12 -4
  84. data/lib/pubid/csa/identifiers/amendment.rb +28 -0
  85. data/lib/pubid/csa/identifiers.rb +1 -0
  86. data/lib/pubid/csa/parser.rb +16 -397
  87. data/lib/pubid/doi/identifier.rb +1 -1
  88. data/lib/pubid/doi/parser.rb +2 -37
  89. data/lib/pubid/easc/builder.rb +1 -1
  90. data/lib/pubid/easc/identifier.rb +1 -1
  91. data/lib/pubid/easc/parser.rb +2 -70
  92. data/lib/pubid/ecma/CLAUDE.md +8 -1
  93. data/lib/pubid/ecma/identifier.rb +13 -8
  94. data/lib/pubid/ecma/parser.rb +2 -54
  95. data/lib/pubid/ecma/renderer.rb +3 -7
  96. data/lib/pubid/errors.rb +18 -13
  97. data/lib/pubid/etsi/builder.rb +8 -5
  98. data/lib/pubid/etsi/identifiers/base.rb +1 -1
  99. data/lib/pubid/etsi/parser.rb +1 -132
  100. data/lib/pubid/evs/identifier.rb +7 -0
  101. data/lib/pubid/evs/parser.rb +1 -8
  102. data/lib/pubid/evs.rb +1 -1
  103. data/lib/pubid/gb/identifier.rb +7 -1
  104. data/lib/pubid/gb/parser.rb +2 -51
  105. data/lib/pubid/gost/identifier.rb +9 -1
  106. data/lib/pubid/gost/parser.rb +4 -81
  107. data/lib/pubid/iala/parser.rb +2 -121
  108. data/lib/pubid/iana/identifier.rb +1 -1
  109. data/lib/pubid/iana/parser.rb +2 -24
  110. data/lib/pubid/identifier.rb +78 -1
  111. data/lib/pubid/idf/builder.rb +42 -0
  112. data/lib/pubid/idf/identifier.rb +1 -1
  113. data/lib/pubid/idf/parser.rb +1 -137
  114. data/lib/pubid/idf.rb +1 -2
  115. data/lib/pubid/iec/builder.rb +158 -50
  116. data/lib/pubid/iec/identifier.rb +1 -1
  117. data/lib/pubid/iec/parser.rb +3 -430
  118. data/lib/pubid/ieee/aiee/identifier.rb +2 -1
  119. data/lib/pubid/ieee/aiee.rb +0 -1
  120. data/lib/pubid/ieee/builder.rb +2 -2
  121. data/lib/pubid/ieee/identifiers/base.rb +1 -1
  122. data/lib/pubid/ieee/ire/identifier.rb +2 -1
  123. data/lib/pubid/ieee/ire.rb +0 -1
  124. data/lib/pubid/ieee/nesc.rb +0 -1
  125. data/lib/pubid/ieee/parser.rb +1 -1257
  126. data/lib/pubid/ietf/identifiers/base.rb +17 -1
  127. data/lib/pubid/ietf/parser.rb +2 -47
  128. data/lib/pubid/ietf/renderer.rb +17 -2
  129. data/lib/pubid/iho/CLAUDE.md +89 -0
  130. data/lib/pubid/iho/builder.rb +4 -1
  131. data/lib/pubid/iho/identifiers/base.rb +28 -2
  132. data/lib/pubid/iho/renderer.rb +8 -0
  133. data/lib/pubid/iho/urn_generator.rb +11 -1
  134. data/lib/pubid/iho/urn_parser.rb +21 -11
  135. data/lib/pubid/iho.rb +0 -1
  136. data/lib/pubid/isbn/identifier.rb +1 -1
  137. data/lib/pubid/isbn/parser.rb +2 -31
  138. data/lib/pubid/iso/builder.rb +1 -1
  139. data/lib/pubid/iso/identifiers/directives.rb +6 -3
  140. data/lib/pubid/iso/identifiers/guide.rb +6 -3
  141. data/lib/pubid/iso/identifiers/international_standard.rb +3 -1
  142. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +6 -3
  143. data/lib/pubid/iso/normalizer.rb +1 -1
  144. data/lib/pubid/iso/parser.rb +1 -539
  145. data/lib/pubid/iso/supplement_identifier.rb +6 -3
  146. data/lib/pubid/iso/utilities.rb +4 -5
  147. data/lib/pubid/iso.rb +1 -19
  148. data/lib/pubid/itu/builder.rb +36 -20
  149. data/lib/pubid/itu/identifiers/base.rb +15 -2
  150. data/lib/pubid/itu/parser.rb +1 -775
  151. data/lib/pubid/jcgm/builder.rb +35 -0
  152. data/lib/pubid/jcgm/parser.rb +1 -151
  153. data/lib/pubid/jcgm.rb +1 -2
  154. data/lib/pubid/jis/builder.rb +18 -29
  155. data/lib/pubid/jis/identifier.rb +1 -1
  156. data/lib/pubid/jis/parser.rb +1 -128
  157. data/lib/pubid/nist/builder.rb +5 -1
  158. data/lib/pubid/nist/caster.rb +13 -3
  159. data/lib/pubid/nist/identifiers/base.rb +37 -2
  160. data/lib/pubid/nist/identifiers/circular.rb +2 -2
  161. data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -2
  162. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +2 -2
  163. data/lib/pubid/nist/identifiers/crpl_report.rb +2 -2
  164. data/lib/pubid/nist/identifiers/handbook.rb +2 -2
  165. data/lib/pubid/nist/identifiers/internal_report.rb +2 -2
  166. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +2 -2
  167. data/lib/pubid/nist/identifiers/monograph.rb +2 -2
  168. data/lib/pubid/nist/identifiers/report.rb +2 -2
  169. data/lib/pubid/nist/parser.rb +19 -775
  170. data/lib/pubid/nist/router.rb +4 -1
  171. data/lib/pubid/nist/supplement_identifier.rb +2 -2
  172. data/lib/pubid/oasis/identifier.rb +1 -1
  173. data/lib/pubid/oasis/parser.rb +2 -16
  174. data/lib/pubid/ogc/identifier.rb +1 -1
  175. data/lib/pubid/ogc/parser.rb +2 -26
  176. data/lib/pubid/oiml/identifiers/certification_system.rb +7 -0
  177. data/lib/pubid/oiml/identifiers/dual_published.rb +2 -2
  178. data/lib/pubid/oiml/parser.rb +1 -303
  179. data/lib/pubid/oiml.rb +1 -2
  180. data/lib/pubid/omg/identifier.rb +6 -1
  181. data/lib/pubid/omg/parser.rb +2 -76
  182. data/lib/pubid/parg/artifact.rb +22 -3
  183. data/lib/pubid/parg/model.rb +98 -0
  184. data/lib/pubid/parg.rb +1 -0
  185. data/lib/pubid/parser.rb +5 -4
  186. data/lib/pubid/parsers/mr_string.rb +1 -1
  187. data/lib/pubid/plateau/parser.rb +1 -66
  188. data/lib/pubid/plateau.rb +1 -2
  189. data/lib/pubid/renderers/directives_renderer.rb +1 -1
  190. data/lib/pubid/renderers/iwa_renderer.rb +1 -1
  191. data/lib/pubid/renderers/publisher_stripper.rb +82 -0
  192. data/lib/pubid/renderers/supplement_renderer.rb +1 -1
  193. data/lib/pubid/renderers.rb +1 -0
  194. data/lib/pubid/sae/identifiers/base.rb +1 -1
  195. data/lib/pubid/sae/parser.rb +1 -48
  196. data/lib/pubid/tgpp/identifier.rb +1 -1
  197. data/lib/pubid/tgpp/parser.rb +2 -59
  198. data/lib/pubid/un/identifier.rb +1 -1
  199. data/lib/pubid/un/parser.rb +1 -18
  200. data/lib/pubid/version.rb +1 -1
  201. data/lib/pubid/w3c/identifier.rb +1 -1
  202. data/lib/pubid/w3c/parser.rb +2 -27
  203. data/lib/pubid/xsf/identifier.rb +11 -7
  204. data/lib/pubid/xsf/parser.rb +3 -31
  205. data/lib/pubid/xsf/renderer.rb +2 -4
  206. data/lib/pubid.rb +8 -9
  207. metadata +15 -25
  208. data/lib/pubid/ieee/aiee/parser.rb +0 -130
  209. data/lib/pubid/ieee/ire/parser.rb +0 -109
  210. data/lib/pubid/ieee/nesc/parser.rb +0 -155
  211. data/lib/pubid/iho/parser.rb +0 -68
  212. data/lib/pubid/parser/common_parse_methods.rb +0 -13
  213. data/lib/pubid/parser/common_parse_rules.rb +0 -56
  214. data/lib/pubid/parser/grammar.rb +0 -96
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Parser
5
- module CommonParseMethods
6
- def array_to_str(array)
7
- array.reduce(str(array.first)) do |acc, value|
8
- acc | str(value)
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Parser
5
- module CommonParseRules
6
- def self.included(base)
7
- base.class_eval do
8
- rule(:space) { str(" ") }
9
- rule(:space?) { space.maybe }
10
-
11
- rule(:digits) do
12
- match('\d').repeat(1)
13
- end
14
-
15
- rule(:year) do
16
- match('\d').repeat(4, 4).as(:year)
17
- end
18
-
19
- rule(:comma) { str(", ") }
20
- rule(:comma?) { comma.maybe }
21
- rule(:comma_space) { comma | space }
22
- rule(:dash) { str("-") }
23
- rule(:dot) { str(".") }
24
- rule(:words_digits) { match('[\dA-Za-z]').repeat(1) }
25
- rule(:words) { match("[A-Za-z]").repeat(1) }
26
- rule(:words?) { words.maybe }
27
- rule(:year_digits) do
28
- (str("19") | str("20")) >> match('\d').repeat(2,
29
- 2) >> digits.absent?
30
- end
31
-
32
- rule(:month_digits) do
33
- match('\d').repeat(2, 2)
34
- end
35
-
36
- rule(:day_digits) do
37
- match('\d').repeat(2, 2)
38
- end
39
-
40
- rule(:originator) do
41
- organization.as(:publisher) >>
42
- (space? >> str("/") >> organization.as(:copublisher)).repeat
43
- end
44
-
45
- rule(:comma_month_year) do
46
- comma >> words.as(:month) >> space >> year_digits.as(:year)
47
- end
48
-
49
- rule(:year_month) do
50
- year_digits >> dash >> month_digits
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parslet"
4
-
5
- module Pubid
6
- module Parser
7
- # The superclass of every flavor grammar.
8
- #
9
- # Its only job is to keep parslet out of pubid's public contract. Every
10
- # grammar failure originates in `Parslet::Atoms::Base#parse`, which
11
- # `Parslet::Parser` does not override, so one override here covers all 46
12
- # grammars, both public entry points of every flavor, and the cross-flavor
13
- # delegation routes (`Pubid::Iso.parse("ITU-T G.711")` runs ITU's grammar)
14
- # — without touching the 131 `parse` methods.
15
- #
16
- # The name is `Grammar`, not `Base`, because {Pubid::Parsers::Base} already
17
- # exists and means something unrelated (the MR-string parser).
18
- #
19
- # Known limit: a rule atom parsed directly, `Parser.new.<rule>.parse(str)`,
20
- # bypasses this and raises a bare `Parslet::ParseFailed`. Nothing in the
21
- # gem does that.
22
- class Grammar < ::Parslet::Parser
23
- # A trailing "(all parts)" marks the reference as the whole document.
24
- # The flavor grammars that carry their own rule consume it inside
25
- # parslet; this shared strip gives every other flavor the same read:
26
- # the suffix never reaches the flavor grammar, and the parsed tree
27
- # carries :all_parts for the builder to wrap (see Builder::Base).
28
- ALL_PARTS_SUFFIX = "(all parts)".freeze
29
-
30
- # @param io [String, IO]
31
- # @param options [Hash] passed through to parslet
32
- # @raise [Pubid::Errors::ParseError]
33
- def parse(io, options = {})
34
- if io.is_a?(String) && io.end_with?(ALL_PARTS_SUFFIX)
35
- base = io.sub(/\s*\(all parts\)\s*\z/, "")
36
- return mark_all_parts(super(base, options))
37
- end
38
-
39
- super
40
- rescue ::Pubid::Errors::ParseError
41
- # A nested grammar already wrapped it. Keep the inner flavor and input.
42
- raise
43
- rescue ::Parslet::ParseFailed => e
44
- raise wrap_parse_failure(e, io)
45
- end
46
-
47
- private
48
-
49
- # Carry the stripped suffix into the tree. Parslet tops are a Hash or
50
- # an Array of Hashes; the marker joins either shape, and every builder
51
- # (Builder::Base and the standalone ones) routes it to #to_all_parts.
52
- def mark_all_parts(tree)
53
- case tree
54
- when Hash then tree.merge(all_parts: true)
55
- when Array then tree.map { |t| t.merge(all_parts: true) }
56
- else tree
57
- end
58
- end
59
-
60
- # @param error [Parslet::ParseFailed]
61
- # @param io [String, IO] what was handed to {#parse}
62
- # @return [Pubid::Errors::ParseError]
63
- def wrap_parse_failure(error, io)
64
- ::Pubid::Errors::ParseError.new(
65
- error.message,
66
- error.parse_failure_cause,
67
- input: io.is_a?(String) ? io : nil,
68
- flavor: pubid_flavor_name,
69
- )
70
- end
71
-
72
- # "Pubid::Iso::Parser" -> "iso"; "Pubid::Ieee::Aiee::Parser" -> "ieee".
73
- #
74
- # Resolved through {Pubid::Registry} rather than taken from the module
75
- # name, because the two disagree: `Pubid::Tgpp` registers as `"3gpp"`,
76
- # and `Pubid::CenCenelec` registers twice (`"cen_cenelec"` first, then
77
- # the `"cen"` alias). Reporting the registered name is what lets a caller
78
- # feed `error.flavor` straight back to `Pubid::Registry.get`.
79
- # @return [String, nil]
80
- def pubid_flavor_name
81
- parts = self.class.name.to_s.split("::")
82
- return nil unless parts[0] == "Pubid" && parts.length > 1
83
-
84
- registered_flavor_name(parts[1]) || parts[1].downcase
85
- end
86
-
87
- # @param module_name [String] e.g. "Tgpp"
88
- # @return [String, nil] the registered name, nil if not registered
89
- def registered_flavor_name(module_name)
90
- ::Pubid::Registry.canonical_name(::Pubid.const_get(module_name))
91
- rescue ::NameError
92
- nil
93
- end
94
- end
95
- end
96
- end