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.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/data/parg/adobe.json +1 -0
  3. data/data/parg/aiee.parg +37 -0
  4. data/data/parg/amca.json +1 -0
  5. data/data/parg/ansi.json +1 -0
  6. data/data/parg/api.json +1 -0
  7. data/data/parg/ashrae.json +1 -0
  8. data/data/parg/asme.json +1 -0
  9. data/data/parg/astm.json +1 -0
  10. data/data/parg/bipm.json +1 -0
  11. data/data/parg/bsi.json +1 -0
  12. data/data/parg/calconnect.json +1 -0
  13. data/data/parg/ccsds.json +1 -0
  14. data/data/parg/cen_cenelec.json +1 -0
  15. data/data/parg/cen_cenelec.parg +42 -0
  16. data/data/parg/cie.json +1 -0
  17. data/data/parg/csa.json +1 -0
  18. data/data/parg/doi.json +1 -0
  19. data/data/parg/easc.json +1 -0
  20. data/data/parg/ecma.json +1 -0
  21. data/data/parg/etsi.json +1 -0
  22. data/data/parg/evs.json +1 -0
  23. data/data/parg/gb.json +1 -0
  24. data/data/parg/gost.json +1 -0
  25. data/data/parg/iala.json +1 -0
  26. data/data/parg/iana.json +1 -0
  27. data/data/parg/idf.parg +39 -0
  28. data/data/parg/iec.json +1 -0
  29. data/data/parg/ieee.json +1 -0
  30. data/data/parg/ietf.json +1 -0
  31. data/data/parg/ire.parg +39 -0
  32. data/data/parg/isbn.json +1 -0
  33. data/data/parg/iso.json +1 -0
  34. data/data/parg/itu.json +1 -0
  35. data/data/parg/jcgm.json +1 -0
  36. data/data/parg/jis.json +1 -0
  37. data/data/parg/nesc.parg +38 -0
  38. data/data/parg/nist.json +1 -0
  39. data/data/parg/oasis.json +1 -0
  40. data/data/parg/ogc.json +1 -0
  41. data/data/parg/oiml.json +1 -0
  42. data/data/parg/omg.json +1 -0
  43. data/data/parg/plateau.json +1 -0
  44. data/data/parg/sae.json +1 -0
  45. data/data/parg/tables/bipm_groups.yaml +14 -0
  46. data/data/parg/tables/bipm_type_codes.yaml +5 -0
  47. data/data/parg/tables/bipm_type_names_en.yaml +6 -0
  48. data/data/parg/tables/bipm_type_names_fr.yaml +6 -0
  49. data/data/parg/tables/directives_supplements_typed_stages.yaml +3 -0
  50. data/data/parg/tables/directives_typed_stages.yaml +5 -0
  51. data/data/parg/tables/idf_typed_stages.yaml +27 -0
  52. data/data/parg/tables/idf_typed_stages_supplements.yaml +2 -0
  53. data/data/parg/tables/iec_typed_stages.yaml +130 -0
  54. data/data/parg/tables/iso_publishers.yaml +4 -0
  55. data/data/parg/tables/organizations.yaml +12 -0
  56. data/data/parg/tables/tc_types.yaml +42 -0
  57. data/data/parg/tables/typed_stages.yaml +114 -0
  58. data/data/parg/tables/typed_stages_supplements.yaml +64 -0
  59. data/data/parg/tables/wg_types.yaml +21 -0
  60. data/data/parg/tgpp.json +1 -0
  61. data/data/parg/un.json +1 -0
  62. data/data/parg/w3c.json +1 -0
  63. data/data/parg/xsf.json +1 -0
  64. data/lib/pubid/adobe/identifier.rb +11 -1
  65. data/lib/pubid/amca/identifiers/base.rb +1 -1
  66. data/lib/pubid/ansi/identifier.rb +1 -1
  67. data/lib/pubid/api/identifier.rb +1 -1
  68. data/lib/pubid/api/parser.rb +8 -4
  69. data/lib/pubid/ashrae/identifiers/base.rb +10 -1
  70. data/lib/pubid/ashrae/parser.rb +18 -11
  71. data/lib/pubid/asme/identifier.rb +1 -1
  72. data/lib/pubid/astm/identifier.rb +1 -1
  73. data/lib/pubid/bipm/identifier.rb +1 -1
  74. data/lib/pubid/bsi/single_identifier.rb +1 -3
  75. data/lib/pubid/calconnect/identifier.rb +1 -1
  76. data/lib/pubid/ccsds/identifier.rb +1 -1
  77. data/lib/pubid/cen_cenelec/identifier.rb +2 -1
  78. data/lib/pubid/cen_cenelec/parser.rb +9 -2
  79. data/lib/pubid/cie/identifier.rb +1 -1
  80. data/lib/pubid/cie/parser.rb +9 -2
  81. data/lib/pubid/conformance/checks.rb +1 -1
  82. data/lib/pubid/csa/identifier.rb +6 -2
  83. data/lib/pubid/csa/parser.rb +25 -8
  84. data/lib/pubid/doi/identifier.rb +1 -1
  85. data/lib/pubid/easc/identifier.rb +10 -1
  86. data/lib/pubid/ecma/identifier.rb +1 -1
  87. data/lib/pubid/etsi/identifiers/base.rb +1 -1
  88. data/lib/pubid/evs.rb +1 -1
  89. data/lib/pubid/gb/identifier.rb +1 -1
  90. data/lib/pubid/gost/identifier.rb +11 -1
  91. data/lib/pubid/gost/parser.rb +8 -1
  92. data/lib/pubid/iala/identifier.rb +10 -1
  93. data/lib/pubid/iana/identifier.rb +1 -1
  94. data/lib/pubid/idf/builder.rb +5 -0
  95. data/lib/pubid/iec/identifier.rb +1 -1
  96. data/lib/pubid/iec/parser.rb +9 -4
  97. data/lib/pubid/ieee/builder.rb +61 -23
  98. data/lib/pubid/ieee/identifiers/base.rb +1 -1
  99. data/lib/pubid/ieee/identifiers/joint_development.rb +55 -19
  100. data/lib/pubid/ieee/parser.rb +25 -11
  101. data/lib/pubid/ieee/renderer.rb +5 -3
  102. data/lib/pubid/ietf/identifiers/base.rb +1 -1
  103. data/lib/pubid/isbn/identifier.rb +1 -1
  104. data/lib/pubid/iso/identifier.rb +4 -1
  105. data/lib/pubid/iso/normalizer.rb +4 -1
  106. data/lib/pubid/itu/CLAUDE.md +46 -0
  107. data/lib/pubid/itu/builder.rb +24 -4
  108. data/lib/pubid/itu/identifiers/base.rb +11 -18
  109. data/lib/pubid/itu/identifiers/radio_regulations.rb +27 -0
  110. data/lib/pubid/itu/identifiers/special_publication.rb +48 -14
  111. data/lib/pubid/itu/identifiers/standard_serialization.rb +2 -0
  112. data/lib/pubid/itu/identifiers.rb +1 -0
  113. data/lib/pubid/itu/parser.rb +108 -22
  114. data/lib/pubid/itu/urn_generator.rb +9 -2
  115. data/lib/pubid/jcgm.rb +1 -1
  116. data/lib/pubid/jis/identifier.rb +1 -1
  117. data/lib/pubid/nist/builder.rb +1 -0
  118. data/lib/pubid/nist/identifiers/base.rb +15 -4
  119. data/lib/pubid/nist/parser.rb +9 -0
  120. data/lib/pubid/nist/urn_parser.rb +10 -1
  121. data/lib/pubid/oasis/identifier.rb +1 -1
  122. data/lib/pubid/ogc/identifier.rb +1 -1
  123. data/lib/pubid/oiml.rb +1 -1
  124. data/lib/pubid/omg/identifier.rb +1 -1
  125. data/lib/pubid/parg/artifact.rb +46 -0
  126. data/lib/pubid/parg/backend.rb +92 -0
  127. data/lib/pubid/parg.rb +8 -0
  128. data/lib/pubid/pg.rb +8 -0
  129. data/lib/pubid/plateau.rb +1 -2
  130. data/lib/pubid/sae/identifiers/base.rb +1 -1
  131. data/lib/pubid/tgpp/identifier.rb +1 -1
  132. data/lib/pubid/un/identifier.rb +1 -1
  133. data/lib/pubid/version.rb +1 -1
  134. data/lib/pubid/w3c/identifier.rb +1 -1
  135. data/lib/pubid/xsf/identifier.rb +1 -1
  136. data/lib/pubid.rb +1 -0
  137. metadata +83 -2
@@ -0,0 +1,130 @@
1
+ - abbr: "TRF"
2
+ - abbr: "PWI Amd"
3
+ - abbr: "NP Amd"
4
+ - abbr: "ANW Amd"
5
+ - abbr: "WD Amd"
6
+ - abbr: "CDAM"
7
+ - abbr: "DAM"
8
+ - abbr: "FDAM"
9
+ - abbr: "PRF Amd"
10
+ - abbr: "Amd"
11
+ - abbr: "AMD"
12
+ - abbr: "PWI Cor"
13
+ - abbr: "NP Cor"
14
+ - abbr: "ANW Cor"
15
+ - abbr: "WDCor"
16
+ - abbr: "CDCor"
17
+ - abbr: "DCOR"
18
+ - abbr: "FDCOR"
19
+ - abbr: "PRF Cor"
20
+ - abbr: "Cor"
21
+ - abbr: "COR"
22
+ - abbr: "CS"
23
+ - abbr: "CA"
24
+ - abbr: "PWI Guide"
25
+ - abbr: "NP Guide"
26
+ - abbr: "ANW Guide"
27
+ - abbr: "WD Guide"
28
+ - abbr: "CD Guide"
29
+ - abbr: "DGuide"
30
+ - abbr: "FDGuide"
31
+ - abbr: "PRF Guide"
32
+ - abbr: "GUIDE"
33
+ - abbr: "Guide"
34
+ - abbr: "PWI"
35
+ - abbr: "NWIP"
36
+ - abbr: "BWG"
37
+ - abbr: "AWIN"
38
+ - abbr: "AMW"
39
+ - abbr: "NP"
40
+ - abbr: "PNW"
41
+ - abbr: "ANW"
42
+ - abbr: "WD"
43
+ - abbr: "CD"
44
+ - abbr: "2CD"
45
+ - abbr: "3CD"
46
+ - abbr: "4CD"
47
+ - abbr: "5CD"
48
+ - abbr: "6CD"
49
+ - abbr: "7CD"
50
+ - abbr: "8CD"
51
+ - abbr: "9CD"
52
+ - abbr: "ACD"
53
+ - abbr: "A2CD"
54
+ - abbr: "A3CD"
55
+ - abbr: "A4CD"
56
+ - abbr: "A5CD"
57
+ - abbr: "A6CD"
58
+ - abbr: "A7CD"
59
+ - abbr: "A8CD"
60
+ - abbr: "A9CD"
61
+ - abbr: "CDM"
62
+ - abbr: "CDV"
63
+ - abbr: "ACDV"
64
+ - abbr: "CCDV"
65
+ - abbr: "CDVM"
66
+ - abbr: "NCDV"
67
+ - abbr: "FDIS"
68
+ - abbr: "PRF"
69
+ - abbr: "NFDIS"
70
+ - abbr: "NADIS"
71
+ - abbr: "RDISH"
72
+ - abbr: "RFDIS"
73
+ - abbr: "CFDIS"
74
+ - abbr: "BPUB"
75
+ - abbr: "PPUB"
76
+ - abbr: "APUB"
77
+ - abbr: "WPUB"
78
+ - abbr: "DELPUB"
79
+ - abbr: "RR"
80
+ - abbr: "CAN"
81
+ - abbr: "PWI ISH"
82
+ - abbr: "NP ISH"
83
+ - abbr: "ANW ISH"
84
+ - abbr: "WD ISH"
85
+ - abbr: "CDISH"
86
+ - abbr: "DISH"
87
+ - abbr: "ISH"
88
+ - abbr: "OD"
89
+ - abbr: "PWI PAS"
90
+ - abbr: "NP PAS"
91
+ - abbr: "ANW PAS"
92
+ - abbr: "WD PAS"
93
+ - abbr: "CDPAS"
94
+ - abbr: "DPAS"
95
+ - abbr: "PAS"
96
+ - abbr: "Trend Report"
97
+ - abbr: "PWI TR"
98
+ - abbr: "NP TR"
99
+ - abbr: "ANW TR"
100
+ - abbr: "WD TR"
101
+ - abbr: "CD TR"
102
+ - abbr: "DTR"
103
+ - abbr: "ADTR"
104
+ - abbr: "CDTR"
105
+ - abbr: "DTRM"
106
+ - abbr: "NDTR"
107
+ - abbr: "DTSM"
108
+ - abbr: "TR"
109
+ - abbr: "SRD"
110
+ - abbr: "Technology Report"
111
+ - abbr: "PWI TS"
112
+ - abbr: "NP TS"
113
+ - abbr: "ANW TS"
114
+ - abbr: "WD TS"
115
+ - abbr: "CD TS"
116
+ - abbr: "DTS"
117
+ - abbr: "ADTS"
118
+ - abbr: "CDTS"
119
+ - abbr: "NDTS"
120
+ - abbr: "TS"
121
+ - abbr: "White Paper"
122
+ - abbr: "PWI Frag"
123
+ - abbr: "NP Frag"
124
+ - abbr: "ANW Frag"
125
+ - abbr: "WD Frag"
126
+ - abbr: "CDFRAG"
127
+ - abbr: "DFRAG"
128
+ - abbr: "FDFRAG"
129
+ - abbr: "PRF Frag"
130
+ - abbr: "FRAG"
@@ -0,0 +1,4 @@
1
+ - abbrev: "ISO"
2
+ name: "International Organization for Standardization"
3
+ - abbrev: "IEC"
4
+ name: "International Electrotechnical Commission"
@@ -0,0 +1,12 @@
1
+ - name: "ISO"
2
+ - name: "IEC"
3
+ - name: "IEEE"
4
+ - name: "CIW"
5
+ - name: "SAE"
6
+ - name: "CIE"
7
+ - name: "ASME"
8
+ - name: "ASTM"
9
+ - name: "OECD"
10
+ - name: "HL7"
11
+ - name: "CEI"
12
+ - name: "UNDP"
@@ -0,0 +1,42 @@
1
+ - name: "TC"
2
+ - name: "JTC"
3
+ - name: "PC"
4
+ - name: "IT"
5
+ - name: "CAB"
6
+ - name: "CASCO"
7
+ - name: "COPOLCO"
8
+ - name: "COUNCIL"
9
+ - name: "CPSG"
10
+ - name: "CS"
11
+ - name: "DEVCO"
12
+ - name: "GA"
13
+ - name: "GAAB"
14
+ - name: "INFCO"
15
+ - name: "ITN"
16
+ - name: "ISOlutions"
17
+ - name: "REMCO"
18
+ - name: "TMB"
19
+ - name: "TMBG"
20
+ - name: "WMO"
21
+ - name: "DMT"
22
+ - name: "JCG"
23
+ - name: "SGPM"
24
+ - name: "ATMG"
25
+ - name: "CCCC"
26
+ - name: "CCCC-TG"
27
+ - name: "JDMT"
28
+ - name: "JSAG"
29
+ - name: "JSCTF-TF"
30
+ - name: "JTCG"
31
+ - name: "JTCG-TF"
32
+ - name: "SAG_Acc"
33
+ - name: "SAG_CRMI"
34
+ - name: "SAG_CRMI_CG"
35
+ - name: "SAG_ESG"
36
+ - name: "SAG_ESG_CG"
37
+ - name: "SAG_MRS"
38
+ - name: "SAG_SF"
39
+ - name: "SAG_SF_CG"
40
+ - name: "SMCC"
41
+ - name: "STMG"
42
+ - name: "MENA_STAR"
@@ -0,0 +1,114 @@
1
+ - abbr: "PWI TS"
2
+ - abbr: "NP TS"
3
+ - abbr: "AWI TS"
4
+ - abbr: "WD TS"
5
+ - abbr: "CDTS"
6
+ - abbr: "CD TS"
7
+ - abbr: "PDTS"
8
+ - abbr: "DTS"
9
+ - abbr: "FDTS"
10
+ - abbr: "PRF TS"
11
+ - abbr: "TS"
12
+ - abbr: "PWI TTA"
13
+ - abbr: "NP TTA"
14
+ - abbr: "AWI TTA"
15
+ - abbr: "WD TTA"
16
+ - abbr: "CD TTA"
17
+ - abbr: "DTTA"
18
+ - abbr: "FDTTA"
19
+ - abbr: "PRF TTA"
20
+ - abbr: "TTA"
21
+ - abbr: "NP DATA"
22
+ - abbr: "AWI DATA"
23
+ - abbr: "WD DATA"
24
+ - abbr: "CD DATA"
25
+ - abbr: "D DATA"
26
+ - abbr: "PRF DATA"
27
+ - abbr: "DATA"
28
+ - abbr: "DIR"
29
+ - abbr: "Directives Part"
30
+ - abbr: "Directives, Part"
31
+ - abbr: "Directives,"
32
+ - abbr: "Directives"
33
+ - abbr: "DIR SUP"
34
+ - abbr: "SUP"
35
+ - abbr: "Supplement"
36
+ - abbr: "PWI Guide"
37
+ - abbr: "NP Guide"
38
+ - abbr: "NP GUIDE"
39
+ - abbr: "AWI Guide"
40
+ - abbr: "AWI GUIDE"
41
+ - abbr: "WD Guide"
42
+ - abbr: "WD GUIDE"
43
+ - abbr: "CD Guide"
44
+ - abbr: "CD GUIDE"
45
+ - abbr: "DGuide"
46
+ - abbr: "DGUIDE"
47
+ - abbr: "FDGuide"
48
+ - abbr: "FD Guide"
49
+ - abbr: "FD GUIDE"
50
+ - abbr: "PRF Guide"
51
+ - abbr: "PRF GUIDE"
52
+ - abbr: "Guide"
53
+ - abbr: "GUIDE"
54
+ - abbr: "DP"
55
+ - abbr: "PWI"
56
+ - abbr: "NP"
57
+ - abbr: "NWIP"
58
+ - abbr: "AWI"
59
+ - abbr: "WD"
60
+ - abbr: "WDS"
61
+ - abbr: "preCD"
62
+ - abbr: "PreCD"
63
+ - abbr: "CD"
64
+ - abbr: "DIS"
65
+ - abbr: "FPD"
66
+ - abbr: "FCD"
67
+ - abbr: "FDIS"
68
+ - abbr: "PRF"
69
+ - abbr: "Fpr"
70
+ - abbr: "IS"
71
+ - abbr: "WDR"
72
+ - abbr: "WDA"
73
+ - abbr: "WDAR"
74
+ - abbr: "PWI ISP"
75
+ - abbr: "NP ISP"
76
+ - abbr: "AWI ISP"
77
+ - abbr: "WD ISP"
78
+ - abbr: "CD ISP"
79
+ - abbr: "DISP"
80
+ - abbr: "DIS ISP"
81
+ - abbr: "FDISP"
82
+ - abbr: "FDIS ISP"
83
+ - abbr: "PRF ISP"
84
+ - abbr: "ISP"
85
+ - abbr: "PWI IWA"
86
+ - abbr: "NP IWA"
87
+ - abbr: "AWI IWA"
88
+ - abbr: "WD IWA"
89
+ - abbr: "CD IWA"
90
+ - abbr: "DIWA"
91
+ - abbr: "PRF IWA"
92
+ - abbr: "IWA"
93
+ - abbr: "PWI PAS"
94
+ - abbr: "NP PAS"
95
+ - abbr: "AWI PAS"
96
+ - abbr: "WD PAS"
97
+ - abbr: "CD PAS"
98
+ - abbr: "DPAS"
99
+ - abbr: "FDPAS"
100
+ - abbr: "PRF PAS"
101
+ - abbr: "PAS"
102
+ - abbr: "R"
103
+ - abbr: "PWI TR"
104
+ - abbr: "NP TR"
105
+ - abbr: "AWI TR"
106
+ - abbr: "WD TR"
107
+ - abbr: "CD TR"
108
+ - abbr: "PDTR"
109
+ - abbr: "DTR"
110
+ - abbr: "DIS TR"
111
+ - abbr: "FDTR"
112
+ - abbr: "FDIS TR"
113
+ - abbr: "PRF TR"
114
+ - abbr: "TR"
@@ -0,0 +1,64 @@
1
+ - abbr: "PWI Suppl"
2
+ - abbr: "NP Suppl"
3
+ - abbr: "AWI Suppl"
4
+ - abbr: "WD Suppl"
5
+ - abbr: "CD Suppl"
6
+ - abbr: "DSuppl"
7
+ - abbr: "DIS Suppl"
8
+ - abbr: "FDSuppl"
9
+ - abbr: "FDIS Suppl"
10
+ - abbr: "PRF Suppl"
11
+ - abbr: "Suppl"
12
+ - abbr: "Suppl."
13
+ - abbr: "PWI Add"
14
+ - abbr: "NP Add"
15
+ - abbr: "AWI Add"
16
+ - abbr: "WD Add"
17
+ - abbr: "CD Add"
18
+ - abbr: "DAD"
19
+ - abbr: "DAdd"
20
+ - abbr: "D ADD"
21
+ - abbr: "Dad"
22
+ - abbr: "DIS Add"
23
+ - abbr: "FDAD"
24
+ - abbr: "FDAdd"
25
+ - abbr: "FD ADD"
26
+ - abbr: "FDad"
27
+ - abbr: "FDIS Add"
28
+ - abbr: "Add"
29
+ - abbr: "ADD"
30
+ - abbr: "Add."
31
+ - abbr: "Addendum"
32
+ - abbr: "PWI Amd"
33
+ - abbr: "NP Amd"
34
+ - abbr: "AWI Amd"
35
+ - abbr: "WD Amd"
36
+ - abbr: "CD Amd"
37
+ - abbr: "PDAM"
38
+ - abbr: "DAM"
39
+ - abbr: "DAmd"
40
+ - abbr: "FDAM"
41
+ - abbr: "FDAmd"
42
+ - abbr: "FPDAM"
43
+ - abbr: "PRF Amd"
44
+ - abbr: "Amd"
45
+ - abbr: "AMD"
46
+ - abbr: "Amd."
47
+ - abbr: "PWI Cor"
48
+ - abbr: "NP Cor"
49
+ - abbr: "AWI Cor"
50
+ - abbr: "WD Cor"
51
+ - abbr: "CD Cor"
52
+ - abbr: "pDCOR"
53
+ - abbr: "DCor"
54
+ - abbr: "DCOR"
55
+ - abbr: "DIS Cor"
56
+ - abbr: "FDCor"
57
+ - abbr: "FDCOR"
58
+ - abbr: "FCOR"
59
+ - abbr: "FDIS Cor"
60
+ - abbr: "PRF Cor"
61
+ - abbr: "Cor"
62
+ - abbr: "COR"
63
+ - abbr: "Cor."
64
+ - abbr: "Ext"
@@ -0,0 +1,21 @@
1
+ - name: "AG"
2
+ - name: "AhG"
3
+ - name: "WG"
4
+ - name: "JWG"
5
+ - name: "QC"
6
+ - name: "TF"
7
+ - name: "PPC"
8
+ - name: "CAG"
9
+ - name: "CSC"
10
+ - name: "ITSAG"
11
+ - name: "CSC/FIN"
12
+ - name: "CSC/NOM"
13
+ - name: "CSC/OVE"
14
+ - name: "CSC/SP"
15
+ - name: "SF"
16
+ - name: "ITSG"
17
+ - name: "JAG"
18
+ - name: "JCTF"
19
+ - name: "JSG"
20
+ - name: "JTAG"
21
+ - name: "JTG"
@@ -0,0 +1 @@
1
+ {"version":"0.1.0","grammar":"PubidTgpp","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"3GPP "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":6}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[3,4]}},{"Named":{"name":"type","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Entity":{"atom":17}},{"Entity":{"atom":11}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":14,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[12,13,15]}},{"Named":{"name":"number","atom":16}},{"Entity":{"atom":24}},{"Entity":{"atom":22}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[20,21]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"suffix","atom":23}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":34}},{"Entity":{"atom":32}},{"Str":{"pattern":"-"}},{"Entity":{"atom":11}},{"Repetition":{"atom":29,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":30}},{"Sequence":{"atoms":[28,31]}},{"Repetition":{"atom":27,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":33}},{"Entity":{"atom":36}},{"Str":{"pattern":":"}},{"Entity":{"atom":60}},{"Entity":{"atom":47}},{"Entity":{"atom":11}},{"Repetition":{"atom":39,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":42,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[40,41,43,44,46]}},{"Entity":{"atom":49}},{"Re":{"pattern":"[\\x01-\\u{10ffff}]"}},{"Lookahead":{"atom":48,"positive":false}},{"Sequence":{"atoms":[38,50]}},{"Lookahead":{"atom":51,"positive":false}},{"Entity":{"atom":57}},{"Re":{"pattern":"[\\x01-\\x2e]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x3b-\\u{10ffff}]"}},{"Alternative":{"atoms":[54,55,56]}},{"Repetition":{"atom":53,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"release","atom":58}},{"Sequence":{"atoms":[52,59]}},{"Sequence":{"atoms":[35,37]}},{"Repetition":{"atom":61,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":64}},{"Str":{"pattern":"/"}},{"Entity":{"atom":67}},{"Entity":{"atom":47}},{"Named":{"name":"version","atom":66}},{"Sequence":{"atoms":[63,65]}},{"Repetition":{"atom":68,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[1,2,7,9,25,26,62,69]}}],"root":70},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule release_char: branches 1 and 3 are order-dependent (first set not statically known)","rule release_char: branches 2 and 3 are order-dependent (first set not statically known)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"3GPP TS 21.101","expect":{}},{"entry":"identifier","kind":"accept","input":"TS 25.999","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/tgpp/parser.rb:\n# [3GPP ]<TR|TS> <NN.NNN>[suffix][-part…][:<release>][/<version>]\n# The release excludes \"/\" and \":\" (match[\"^/:\"]), byte-wise here; the\n# mistyped-version guard (!version…!any) is ported literally.\n\ngrammar PubidTgpp version \"0.1.0\" {\n release_char = %x01-2E / %x30-39 / %x3B-10FFFF\n any_char = %x01-10FFFF\n type = (\"TR\" / \"TS\") as type\n number = (1*digit \".\" 1*digit) as number\n suffix = (1*letter) as suffix\n part = \"-\" (1*digit) as part\n parts = (*part) as parts\n version_core = 1*digit \".\" 1*digit \".\" 1*digit\n release = !(version_core !any_char) (1*release_char) as release\n version = version_core as version\n identifier = [\"3GPP \"] type space number [suffix] parts [(colon release)] [(slash version)]\n letter = %x41-5A / %x61-7A\n digit = %x30-39\n space = \" \"\n colon = \":\"\n slash = \"/\"\n entry identifier: identifier\n\n test {\n accept \"3GPP TS 21.101\"\n accept \"TS 25.999\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:6446a79c9b880d0cc0565fdd9bdb13a665b8d6b5bf5b91c055404ddab778c0c9"}
data/data/parg/un.json ADDED
@@ -0,0 +1 @@
1
+ {"version":"0.1.0","grammar":"PubidUn","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"UN "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":9}},{"Entity":{"atom":7}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[4,5,6]}},{"Repetition":{"atom":3,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"token","atom":8}},{"Entity":{"atom":11}},{"Str":{"pattern":"/"}},{"Entity":{"atom":9}},{"Sequence":{"atoms":[10,12]}},{"Repetition":{"atom":13,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[1,2,14]}}],"root":15},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"UN/CEFACT/TBG14","expect":{}},{"entry":"identifier","kind":"accept","input":"CEFACT/TBG14","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/un/parser.rb. `token` matches [A-Z0-9.] runs.\n\ngrammar PubidUn version \"0.1.0\" {\n token_char = %x41-5A / %x30-39 / %x2E\n token = (1*token_char) as token\n identifier = [\"UN \"] token 1*(slash token)\n slash = \"/\"\n entry identifier: identifier\n\n test {\n accept \"UN/CEFACT/TBG14\"\n accept \"CEFACT/TBG14\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:1ca1befe71541f581fe67befd3499e399c3a8463c17dcc641e00dba1858a4bbf"}
@@ -0,0 +1 @@
1
+ {"version":"0.1.0","grammar":"PubidW3c","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"W3C "}},{"Entity":{"atom":16}},{"Entity":{"atom":13}},{"Str":{"pattern":"DNOTE"}},{"Str":{"pattern":"NOTE"}},{"Str":{"pattern":"WD"}},{"Str":{"pattern":"CRD"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"REC"}},{"Str":{"pattern":"PER"}},{"Str":{"pattern":"PR"}},{"Str":{"pattern":"SPSD"}},{"Str":{"pattern":"OBSL"}},{"Alternative":{"atoms":[3,4,5,6,7,8,9,10,11,12]}},{"Named":{"name":"type","atom":2}},{"Str":{"pattern":"-"}},{"Sequence":{"atoms":[14,15]}},{"Repetition":{"atom":1,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":22}},{"Entity":{"atom":20}},{"Re":{"pattern":"[\\x01-\\u{10ffff}]"}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"rest","atom":21}},{"Sequence":{"atoms":[0,17,18]}}],"root":23},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule type_token: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule type_token: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"W3C REC-html40-19981224","expect":{}},{"entry":"identifier","kind":"accept","input":"W3C NOTE-datetime-19980827","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/w3c/parser.rb: split off the leading maturity token;\n# code/date boundary is builder-side by design. Token order matters for\n# shared prefixes (CRD before CR, PER before PR, DNOTE before NOTE).\n\ngrammar PubidW3c version \"0.1.0\" {\n any_char = %x01-10FFFF\n type_token = \"DNOTE\" / \"NOTE\" / \"WD\" / \"CRD\" / \"CR\" / \"REC\" / \"PER\" / \"PR\" / \"SPSD\" / \"OBSL\"\n type_part = type_token as type \"-\"\n rest = (1*any_char) as rest\n identifier = \"W3C \" [type_part] rest\n entry identifier: identifier\n\n test {\n accept \"W3C REC-html40-19981224\"\n accept \"W3C NOTE-datetime-19980827\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:1bd04533a9817c662357acb14e9aad070df46535c537ee95b67b0aa752016164"}
@@ -0,0 +1 @@
1
+ {"version":"0.1.0","grammar":"PubidXsf","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"XEP "}},{"Entity":{"atom":10}},{"Entity":{"atom":3}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":2,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":8}},{"Str":{"pattern":"README"}},{"Str":{"pattern":"xxxx"}},{"Alternative":{"atoms":[6,7]}},{"Alternative":{"atoms":[4,5]}},{"Named":{"name":"number","atom":9}},{"Sequence":{"atoms":[0,1]}}],"root":11},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"XEP 0001","expect":{}},{"entry":"identifier","kind":"accept","input":"XEP README","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/xsf/parser.rb: \"XEP NNNN\" plus the two named\n# documents (README, xxxx) in SPECIAL_NUMBERS.\n grammar PubidXsf version \"0.1.0\" {\n digit = %x30-39\n special_number = \"README\" / \"xxxx\"\n number = (1*digit / special_number) as number\n identifier = \"XEP \" number\n entry identifier: identifier\n\n test {\n accept \"XEP 0001\"\n accept \"XEP README\"\n reject \"nonsense\"\n }\n}\n","checksum":"sha256:f70d07de892c58f8386c80aae269fa29f30705100d2aee6266d1bf588f5eeeda"}
@@ -18,7 +18,17 @@ module Pubid
18
18
  # @return [Pubid::Adobe::Identifier]
19
19
  # @raise [Pubid::Errors::ParseError] If parsing fails
20
20
  def self.parse(identifier)
21
- parsed = Parser.parse(identifier)
21
+ unless identifier.is_a?(String)
22
+ raise Pubid::Errors::InvalidInputError,
23
+ Pubid::INPUT_NOT_A_STRING_MESSAGE
24
+ end
25
+
26
+ if identifier.length > Pubid::MAX_INPUT_LENGTH
27
+ raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
28
+ end
29
+
30
+ # R1 parser swap: the baked PG artifact is the parser of record.
31
+ parsed = Pubid::Parg::Backend.parse(:adobe, identifier.strip)
22
32
  Builder.build(parsed)
23
33
  end
24
34
 
@@ -17,7 +17,7 @@ module Pubid
17
17
  raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
18
18
  end
19
19
 
20
- parsed = Parser.parse(identifier)
20
+ parsed = Pubid::Parg::Backend.parse(:amca, identifier)
21
21
  Builder.build(parsed)
22
22
  end
23
23
 
@@ -23,7 +23,7 @@ module Pubid
23
23
  raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
24
24
  end
25
25
 
26
- parsed = Pubid::Ansi::Parser.new.parse(string)
26
+ parsed = Pubid::Parg::Backend.parse(:ansi, string)
27
27
  Pubid::Ansi::Builder.new.build(parsed)
28
28
  end
29
29
  end
@@ -34,7 +34,7 @@ module Pubid
34
34
  # this was the one public parse in the gem that could return nil, which
35
35
  # a caller reading `id.to_s` sees as a NoMethodError far from the cause.
36
36
  # Both API fixture loaders already drop `#` lines themselves.
37
- tree = Parser.new.parse(input)
37
+ tree = Pubid::Parg::Backend.parse(:api, Api::Parser.normalize_input(input))
38
38
  Builder.new.build(tree)
39
39
  end
40
40
  end
@@ -129,11 +129,15 @@ module Pubid
129
129
 
130
130
  root(:identifier)
131
131
 
132
- # Preprocessing to normalize common typos
133
- def parse(input)
132
+ # Pre-parse ingestion normalization (R2): every parse path feeds
133
+ # the grammar the same normalized string.
134
+ def self.normalize_input(input)
134
135
  # Normalize MPMP typo to MPMS
135
- normalized = input.gsub("API MPMP", "API MPMS")
136
- super(normalized)
136
+ input.gsub("API MPMP", "API MPMS")
137
+ end
138
+
139
+ def parse(input)
140
+ super(self.class.normalize_input(input))
137
141
  end
138
142
  end
139
143
  end
@@ -10,7 +10,16 @@ module Pubid
10
10
  # @return [Pubid::Ashrae::Identifier] The appropriate identifier object
11
11
  # @raise [Pubid::Errors::ParseError] If parsing fails
12
12
  def self.parse(identifier)
13
- parsed = Parser.parse(identifier)
13
+ unless identifier.is_a?(String)
14
+ raise Pubid::Errors::InvalidInputError,
15
+ Pubid::INPUT_NOT_A_STRING_MESSAGE
16
+ end
17
+
18
+ if identifier.length > Pubid::MAX_INPUT_LENGTH
19
+ raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
20
+ end
21
+
22
+ parsed = Pubid::Parg::Backend.parse(:ashrae, Parser.normalize_input(identifier))
14
23
  Builder.build(parsed)
15
24
  end
16
25
 
@@ -698,16 +698,10 @@ module Pubid
698
698
 
699
699
  root(:identifier)
700
700
 
701
- def self.parse(string)
702
- unless string.is_a?(String)
703
- raise Pubid::Errors::InvalidInputError,
704
- Pubid::INPUT_NOT_A_STRING_MESSAGE
705
- end
706
-
707
- if string.length > Pubid::MAX_INPUT_LENGTH
708
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
709
- end
710
-
701
+ # Pre-parse ingestion normalizations (R2): every parse path —
702
+ # parslet and PG artifact alike — feeds the grammar the same
703
+ # normalized string.
704
+ def self.normalize_input(string)
711
705
  # Strip leading/trailing whitespace
712
706
  cleaned = string.strip
713
707
 
@@ -775,7 +769,20 @@ module Pubid
775
769
  "Addenda \\1, ")
776
770
  end
777
771
 
778
- new.parse(cleaned)
772
+ cleaned
773
+ end
774
+
775
+ def self.parse(string)
776
+ unless string.is_a?(String)
777
+ raise Pubid::Errors::InvalidInputError,
778
+ Pubid::INPUT_NOT_A_STRING_MESSAGE
779
+ end
780
+
781
+ if string.length > Pubid::MAX_INPUT_LENGTH
782
+ raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
783
+ end
784
+
785
+ new.parse(normalize_input(string))
779
786
  end
780
787
  end
781
788
  end
@@ -16,7 +16,7 @@ module Pubid
16
16
  parser = Parser.new
17
17
  builder = Builder.new
18
18
 
19
- parsed = parser.parse(str)
19
+ parsed = Pubid::Parg::Backend.parse(:asme, str)
20
20
  builder.build(parsed)
21
21
  end
22
22
  end
@@ -16,7 +16,7 @@ module Pubid
16
16
  parser = Parser.new
17
17
  builder = Builder.new
18
18
 
19
- parsed = parser.parse(str)
19
+ parsed = Pubid::Parg::Backend.parse(:astm, str)
20
20
  builder.build(parsed)
21
21
  end
22
22
  end
@@ -277,7 +277,7 @@ module Pubid
277
277
  # Normalize legacy/docnumber-style spellings before parsing
278
278
  # (data/bipm/update_codes.yaml), mirroring Pubid::Ccsds / Pubid::Plateau.
279
279
  normalized = Core::UpdateCodes.apply(identifier, :bipm)
280
- parsed = Parser.parse(normalized)
280
+ parsed = Pubid::Parg::Backend.parse(:bipm, normalized)
281
281
  Builder.build(parsed)
282
282
  end
283
283
  end
@@ -28,9 +28,7 @@ module Pubid
28
28
  return Pubid::Iec.parse(string)
29
29
  end
30
30
 
31
- parser = Parser.new
32
-
33
- parsed = parser.parse(string)
31
+ parsed = Pubid::Parg::Backend.parse(:bsi, string)
34
32
  Builder.build(parsed)
35
33
  end
36
34
 
@@ -118,7 +118,7 @@ module Pubid
118
118
  raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
119
119
  end
120
120
 
121
- Builder.build(Parser.parse(identifier))
121
+ Builder.build(Pubid::Parg::Backend.parse(:calconnect, identifier))
122
122
  end
123
123
  end
124
124
  end
@@ -77,7 +77,7 @@ module Pubid
77
77
 
78
78
  # Apply legacy update_codes normalization first
79
79
  normalized = Core::UpdateCodes.apply(identifier, :ccsds)
80
- parsed = Pubid::Ccsds::Parser.parse(normalized)
80
+ parsed = Pubid::Parg::Backend.parse(:ccsds, normalized)
81
81
  Pubid::Ccsds::Builder.build(parsed)
82
82
  end
83
83
 
@@ -102,7 +102,8 @@ module Pubid
102
102
  raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
103
103
  end
104
104
 
105
- parsed = Parser.parse(identifier)
105
+ normalized = Parser.normalize_input(identifier)
106
+ parsed = Pubid::Parg::Backend.parse(:cen_cenelec, normalized)
106
107
  Builder.new.build(parsed)
107
108
  end
108
109
 
@@ -131,7 +131,10 @@ module Pubid
131
131
 
132
132
  rule(:root) { identifier }
133
133
 
134
- def self.parse(input)
134
+ # Pre-parse ingestion normalizations (R2): every parse path —
135
+ # parslet and PG artifact alike — feeds the grammar the same
136
+ # normalized string.
137
+ def self.normalize_input(input)
135
138
  # Normalize special dash characters
136
139
  normalized = input.gsub(/[\u2011\u00AD]/, "-")
137
140
 
@@ -145,7 +148,11 @@ module Pubid
145
148
  normalized = normalized.gsub("CEN-CLC", "CEN/CLC")
146
149
  .gsub("CLC-CEN", "CLC/CEN")
147
150
  .gsub("GUIDE", "Guide")
148
- new.parse(normalized)
151
+ normalized
152
+ end
153
+
154
+ def self.parse(input)
155
+ new.parse(normalize_input(input))
149
156
  end
150
157
  end
151
158
  end