@pubid/pubid 0.1.3 → 0.1.4

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 (183) hide show
  1. package/artifact/corpus.json.gz +0 -0
  2. package/dist/conformance/cli.js +5 -1
  3. package/dist/flavors/amca/grammar.d.ts +4 -0
  4. package/dist/flavors/amca/grammar.js +87 -0
  5. package/dist/flavors/amca/index.d.ts +4 -0
  6. package/dist/flavors/amca/index.js +76 -0
  7. package/dist/flavors/amca/model.d.ts +29 -0
  8. package/dist/flavors/amca/model.js +146 -0
  9. package/dist/flavors/ansi/index.d.ts +24 -0
  10. package/dist/flavors/ansi/index.js +147 -0
  11. package/dist/flavors/api/grammar.d.ts +4 -0
  12. package/dist/flavors/api/grammar.js +79 -0
  13. package/dist/flavors/api/index.d.ts +4 -0
  14. package/dist/flavors/api/index.js +71 -0
  15. package/dist/flavors/api/model.d.ts +27 -0
  16. package/dist/flavors/api/model.js +114 -0
  17. package/dist/flavors/ashrae/grammar.d.ts +2 -0
  18. package/dist/flavors/ashrae/grammar.js +667 -0
  19. package/dist/flavors/ashrae/index.d.ts +4 -0
  20. package/dist/flavors/ashrae/index.js +306 -0
  21. package/dist/flavors/ashrae/model.d.ts +87 -0
  22. package/dist/flavors/ashrae/model.js +335 -0
  23. package/dist/flavors/ashrae/preprocessor.d.ts +7 -0
  24. package/dist/flavors/ashrae/preprocessor.js +44 -0
  25. package/dist/flavors/asme/grammar.d.ts +2 -0
  26. package/dist/flavors/asme/grammar.js +200 -0
  27. package/dist/flavors/asme/index.d.ts +4 -0
  28. package/dist/flavors/asme/index.js +138 -0
  29. package/dist/flavors/asme/model.d.ts +34 -0
  30. package/dist/flavors/asme/model.js +123 -0
  31. package/dist/flavors/astm/grammar.d.ts +2 -0
  32. package/dist/flavors/astm/grammar.js +110 -0
  33. package/dist/flavors/astm/index.d.ts +2 -0
  34. package/dist/flavors/astm/index.js +127 -0
  35. package/dist/flavors/astm/model.d.ts +42 -0
  36. package/dist/flavors/astm/model.js +263 -0
  37. package/dist/flavors/bipm/index.d.ts +30 -0
  38. package/dist/flavors/bipm/index.js +434 -0
  39. package/dist/flavors/bsi/grammar.d.ts +4 -0
  40. package/dist/flavors/bsi/grammar.js +535 -0
  41. package/dist/flavors/bsi/index.d.ts +4 -0
  42. package/dist/flavors/bsi/index.js +941 -0
  43. package/dist/flavors/bsi/model.d.ts +127 -0
  44. package/dist/flavors/bsi/model.js +863 -0
  45. package/dist/flavors/calconnect/index.d.ts +21 -0
  46. package/dist/flavors/calconnect/index.js +113 -0
  47. package/dist/flavors/cen_cenelec/grammar.d.ts +4 -0
  48. package/dist/flavors/cen_cenelec/grammar.js +107 -0
  49. package/dist/flavors/cen_cenelec/index.d.ts +5 -0
  50. package/dist/flavors/cen_cenelec/index.js +263 -0
  51. package/dist/flavors/cen_cenelec/model.d.ts +45 -0
  52. package/dist/flavors/cen_cenelec/model.js +490 -0
  53. package/dist/flavors/cie/grammar.d.ts +5 -0
  54. package/dist/flavors/cie/grammar.js +127 -0
  55. package/dist/flavors/cie/index.d.ts +2 -0
  56. package/dist/flavors/cie/index.js +311 -0
  57. package/dist/flavors/cie/model.d.ts +122 -0
  58. package/dist/flavors/cie/model.js +464 -0
  59. package/dist/flavors/csa/grammar.d.ts +6 -0
  60. package/dist/flavors/csa/grammar.js +239 -0
  61. package/dist/flavors/csa/index.d.ts +2 -0
  62. package/dist/flavors/csa/index.js +634 -0
  63. package/dist/flavors/csa/model.d.ts +33 -0
  64. package/dist/flavors/csa/model.js +505 -0
  65. package/dist/flavors/doi/index.d.ts +13 -0
  66. package/dist/flavors/doi/index.js +65 -0
  67. package/dist/flavors/easc/index.d.ts +4 -0
  68. package/dist/flavors/easc/index.js +107 -0
  69. package/dist/flavors/ecma/index.d.ts +4 -0
  70. package/dist/flavors/ecma/index.js +117 -0
  71. package/dist/flavors/etsi/index.d.ts +14 -0
  72. package/dist/flavors/etsi/index.js +307 -0
  73. package/dist/flavors/evs/grammar.d.ts +2 -0
  74. package/dist/flavors/evs/grammar.js +22 -0
  75. package/dist/flavors/evs/index.d.ts +2 -0
  76. package/dist/flavors/evs/index.js +24 -0
  77. package/dist/flavors/evs/model.d.ts +19 -0
  78. package/dist/flavors/evs/model.js +36 -0
  79. package/dist/flavors/gb/index.d.ts +24 -0
  80. package/dist/flavors/gb/index.js +111 -0
  81. package/dist/flavors/gost/grammar.d.ts +2 -0
  82. package/dist/flavors/gost/grammar.js +46 -0
  83. package/dist/flavors/gost/index.d.ts +2 -0
  84. package/dist/flavors/gost/index.js +165 -0
  85. package/dist/flavors/gost/model.d.ts +61 -0
  86. package/dist/flavors/gost/model.js +147 -0
  87. package/dist/flavors/gost/prefix_routes.d.ts +15 -0
  88. package/dist/flavors/gost/prefix_routes.js +192 -0
  89. package/dist/flavors/iala/index.d.ts +32 -0
  90. package/dist/flavors/iala/index.js +300 -0
  91. package/dist/flavors/iana/index.d.ts +19 -0
  92. package/dist/flavors/iana/index.js +71 -0
  93. package/dist/flavors/idf/grammar.d.ts +2 -0
  94. package/dist/flavors/idf/grammar.js +71 -0
  95. package/dist/flavors/idf/index.d.ts +2 -0
  96. package/dist/flavors/idf/index.js +100 -0
  97. package/dist/flavors/idf/model.d.ts +54 -0
  98. package/dist/flavors/idf/model.js +359 -0
  99. package/dist/flavors/iec/grammar.d.ts +3 -0
  100. package/dist/flavors/iec/grammar.js +187 -0
  101. package/dist/flavors/iec/index.d.ts +4 -0
  102. package/dist/flavors/iec/index.js +507 -0
  103. package/dist/flavors/iec/model.d.ts +54 -0
  104. package/dist/flavors/iec/model.js +437 -0
  105. package/dist/flavors/ieee/grammar.d.ts +2 -0
  106. package/dist/flavors/ieee/grammar.js +626 -0
  107. package/dist/flavors/ieee/index.d.ts +3 -0
  108. package/dist/flavors/ieee/index.js +1186 -0
  109. package/dist/flavors/ieee/model.d.ts +142 -0
  110. package/dist/flavors/ieee/model.js +1148 -0
  111. package/dist/flavors/ieee/preprocessor.d.ts +8 -0
  112. package/dist/flavors/ieee/preprocessor.js +410 -0
  113. package/dist/flavors/ieee/update_codes.d.ts +8 -0
  114. package/dist/flavors/ieee/update_codes.js +191 -0
  115. package/dist/flavors/ietf/index.d.ts +30 -0
  116. package/dist/flavors/ietf/index.js +151 -0
  117. package/dist/flavors/iho/index.d.ts +4 -0
  118. package/dist/flavors/iho/index.js +126 -0
  119. package/dist/flavors/index.d.ts +9 -0
  120. package/dist/flavors/index.js +136 -0
  121. package/dist/flavors/isbn/index.d.ts +13 -0
  122. package/dist/flavors/isbn/index.js +97 -0
  123. package/dist/flavors/iso/grammar.d.ts +2 -0
  124. package/dist/flavors/iso/grammar.js +207 -0
  125. package/dist/flavors/iso/index.d.ts +2 -0
  126. package/dist/flavors/iso/index.js +343 -0
  127. package/dist/flavors/iso/model.d.ts +159 -0
  128. package/dist/flavors/iso/model.js +802 -0
  129. package/dist/flavors/iso/stages.generated.d.ts +13 -0
  130. package/dist/flavors/iso/stages.generated.js +391 -0
  131. package/dist/flavors/itu/grammar.d.ts +4 -0
  132. package/dist/flavors/itu/grammar.js +205 -0
  133. package/dist/flavors/itu/index.d.ts +2 -0
  134. package/dist/flavors/itu/index.js +224 -0
  135. package/dist/flavors/itu/model.d.ts +184 -0
  136. package/dist/flavors/itu/model.js +599 -0
  137. package/dist/flavors/jcgm/index.d.ts +7 -0
  138. package/dist/flavors/jcgm/index.js +300 -0
  139. package/dist/flavors/jis/index.d.ts +4 -0
  140. package/dist/flavors/jis/index.js +267 -0
  141. package/dist/flavors/nist/grammar.d.ts +2 -0
  142. package/dist/flavors/nist/grammar.js +287 -0
  143. package/dist/flavors/nist/index.d.ts +2 -0
  144. package/dist/flavors/nist/index.js +1244 -0
  145. package/dist/flavors/nist/model.d.ts +155 -0
  146. package/dist/flavors/nist/model.js +823 -0
  147. package/dist/flavors/nist/preprocessor.d.ts +11 -0
  148. package/dist/flavors/nist/preprocessor.js +281 -0
  149. package/dist/flavors/oasis/index.d.ts +23 -0
  150. package/dist/flavors/oasis/index.js +110 -0
  151. package/dist/flavors/ogc/index.d.ts +20 -0
  152. package/dist/flavors/ogc/index.js +75 -0
  153. package/dist/flavors/oiml/grammar.d.ts +2 -0
  154. package/dist/flavors/oiml/grammar.js +180 -0
  155. package/dist/flavors/oiml/implementation.d.ts +9 -0
  156. package/dist/flavors/oiml/implementation.js +16 -0
  157. package/dist/flavors/oiml/model.d.ts +4 -0
  158. package/dist/flavors/oiml/model.js +462 -0
  159. package/dist/flavors/omg/index.d.ts +14 -0
  160. package/dist/flavors/omg/index.js +73 -0
  161. package/dist/flavors/plateau/index.d.ts +4 -0
  162. package/dist/flavors/plateau/index.js +97 -0
  163. package/dist/flavors/tgpp/index.d.ts +4 -0
  164. package/dist/flavors/tgpp/index.js +122 -0
  165. package/dist/flavors/un/index.d.ts +13 -0
  166. package/dist/flavors/un/index.js +90 -0
  167. package/dist/flavors/w3c/index.d.ts +14 -0
  168. package/dist/flavors/w3c/index.js +148 -0
  169. package/dist/flavors/xsf/index.d.ts +18 -0
  170. package/dist/flavors/xsf/index.js +65 -0
  171. package/dist/grammar/engine.d.ts +78 -0
  172. package/dist/grammar/engine.js +351 -0
  173. package/dist/model/attribute.d.ts +54 -0
  174. package/dist/model/attribute.js +53 -0
  175. package/dist/model/builder.d.ts +39 -0
  176. package/dist/model/builder.js +124 -0
  177. package/dist/model/component.d.ts +70 -0
  178. package/dist/model/component.js +170 -0
  179. package/dist/model/identifier.d.ts +83 -0
  180. package/dist/model/identifier.js +270 -0
  181. package/dist/model/urn-generator.d.ts +27 -0
  182. package/dist/model/urn-generator.js +91 -0
  183. package/package.json +1 -1
@@ -0,0 +1,311 @@
1
+ import { ParseFailed, parseGrammar } from "../../grammar/engine.js";
2
+ import { cieGrammar, preprocessCie } from "./grammar.js";
3
+ import { CieBundle, CieConference, CieCorrigendum, CieDualPublished, CieIdentical, CieJointPublished, CieLanguage, CieProceedings, CieStandard, CieSupplement, CieTutorialBundle, } from "./model.js";
4
+ /**
5
+ * Port of lib/pubid/cie/builder.rb — class dispatch, attribute
6
+ * extraction with era/style derivation, and the bundle/corrigendum/
7
+ * supplement wrappers.
8
+ */
9
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
10
+ const s = (v) => {
11
+ if (v === undefined || v === null)
12
+ return undefined;
13
+ const str = Array.isArray(v) ? v.join("") : String(v);
14
+ const trimmed = str.trim();
15
+ return trimmed.length > 0 ? trimmed : undefined;
16
+ };
17
+ function flatten(data) {
18
+ return Array.isArray(data) ? Object.assign({}, ...data) : data;
19
+ }
20
+ function langFromGroup(group) {
21
+ const parenYear = group["language_paren_year"];
22
+ if (isObj(parenYear)) {
23
+ const d = flatten(parenYear);
24
+ return new CieLanguage({
25
+ code: s(d["lang_code"]),
26
+ format: "paren_year",
27
+ ...(s(d["trans_year"]) !== undefined ? { translation_year: s(d["trans_year"]) } : {}),
28
+ });
29
+ }
30
+ const paren = group["language_paren"];
31
+ if (isObj(paren)) {
32
+ const d = flatten(paren);
33
+ return new CieLanguage({ code: s(d["lang_code"]), format: "paren" });
34
+ }
35
+ const slashLang = group["language_slash"];
36
+ if (isObj(slashLang)) {
37
+ const d = flatten(slashLang);
38
+ return new CieLanguage({ code: s(d["lang_code"]), format: "slash" });
39
+ }
40
+ return undefined;
41
+ }
42
+ function detectStyleFallback(tree) {
43
+ const yearDirect = s(tree["year"]);
44
+ if (yearDirect !== undefined)
45
+ return Number(yearDirect) <= 2001 ? "legacy" : "current";
46
+ for (const key of ["current_date", "legacy_date"]) {
47
+ if (isObj(tree[key])) {
48
+ const year = s(flatten(tree[key])["year"]);
49
+ if (year !== undefined)
50
+ return Number(year) <= 2001 ? "legacy" : "current";
51
+ }
52
+ }
53
+ return "current";
54
+ }
55
+ /** Builder#extract_attributes — one hash for every type, filtered later. */
56
+ function extractAttributes(tree) {
57
+ const attributes = {};
58
+ let yearValue;
59
+ let dateSep;
60
+ if (tree["date_then_lang"] !== undefined && isObj(tree["date_then_lang"])) {
61
+ const dateData = flatten(tree["date_then_lang"]);
62
+ if (isObj(dateData["current_date"])) {
63
+ yearValue = s(flatten(dateData["current_date"])["year"]);
64
+ dateSep = "colon";
65
+ }
66
+ else if (isObj(dateData["legacy_date"])) {
67
+ yearValue = s(flatten(dateData["legacy_date"])["year"]);
68
+ dateSep = "dash";
69
+ }
70
+ const lang = langFromGroup(dateData);
71
+ if (lang !== undefined)
72
+ attributes["language"] = lang;
73
+ }
74
+ else if (tree["lang_before"] !== undefined && isObj(tree["lang_before"])) {
75
+ const langData = flatten(tree["lang_before"]);
76
+ const lang = langFromGroup(langData);
77
+ if (lang !== undefined)
78
+ attributes["language"] = lang;
79
+ if (isObj(langData["current_date"])) {
80
+ yearValue = s(flatten(langData["current_date"])["year"]);
81
+ dateSep = "colon";
82
+ }
83
+ else if (isObj(langData["legacy_date"])) {
84
+ yearValue = s(flatten(langData["legacy_date"])["year"]);
85
+ dateSep = "dash";
86
+ }
87
+ }
88
+ else if (isObj(tree["current_date"])) {
89
+ yearValue = s(flatten(tree["current_date"])["year"]);
90
+ dateSep = "colon";
91
+ }
92
+ else if (isObj(tree["legacy_date"])) {
93
+ yearValue = s(flatten(tree["legacy_date"])["year"]);
94
+ dateSep = "dash";
95
+ }
96
+ else if (tree["year"] !== undefined) {
97
+ yearValue = s(tree["year"]);
98
+ if (tree["copublisher"] !== undefined) {
99
+ // IEC joins the year with a dash, ISO with a colon.
100
+ dateSep = s(tree["copublisher"]) === "IEC" ? "dash" : "colon";
101
+ }
102
+ else if (tree["trailing_lang"] !== undefined) {
103
+ dateSep = "dash";
104
+ }
105
+ else {
106
+ dateSep = Number(yearValue) <= 2001 ? "dash" : "colon";
107
+ }
108
+ }
109
+ else if (tree["slash_year"] !== undefined) {
110
+ yearValue = s(tree["slash_year"]);
111
+ dateSep = "slash";
112
+ }
113
+ attributes["style"] =
114
+ dateSep === "colon" ? "current" : dateSep === "dash" ? "legacy" : dateSep === "slash" ? "slash" : detectStyleFallback(tree);
115
+ if (yearValue !== undefined)
116
+ attributes["year"] = yearValue;
117
+ if (tree["number"] !== undefined) {
118
+ attributes["number"] = s(tree["number"]);
119
+ if (tree["part"] !== undefined)
120
+ attributes["part"] = s(tree["part"]);
121
+ if (tree["iteration"] !== undefined)
122
+ attributes["iteration"] = s(tree["iteration"]);
123
+ if (tree["slash_sep"] !== undefined)
124
+ attributes["part_separator"] = "slash";
125
+ else if (tree["dash_sep"] !== undefined)
126
+ attributes["part_separator"] = "dash";
127
+ }
128
+ if (tree["conf_number"] !== undefined)
129
+ attributes["number"] = s(tree["conf_number"]);
130
+ // The paper itself is the document: its identity is the flat number.
131
+ if (tree["paper_code"] !== undefined) {
132
+ attributes["number"] = `${s(tree["paper_code"]) ?? ""}${s(tree["paper_number"]) ?? ""}`;
133
+ if (tree["conf_number"] !== undefined)
134
+ attributes["conference"] = s(tree["conf_number"]);
135
+ }
136
+ if (tree["page_range"] !== undefined)
137
+ attributes["page"] = s(tree["page_range"]);
138
+ if (tree["variant"] !== undefined)
139
+ attributes["variant"] = s(tree["variant"]);
140
+ if (tree["d_prefix"] !== undefined)
141
+ attributes["d_prefix"] = true;
142
+ const directLang = langFromGroup(tree);
143
+ if (directLang !== undefined) {
144
+ attributes["language"] = directLang;
145
+ }
146
+ else if (tree["lang_code"] !== undefined) {
147
+ // Direct /E:YYYY (or preprocessed /EYYYY) form.
148
+ attributes["language"] = new CieLanguage({
149
+ code: s(tree["lang_code"]),
150
+ format: tree["lang_colon"] !== undefined ? "slash_colon" : "slash",
151
+ });
152
+ }
153
+ attributes["s_prefix"] = tree["s_prefix"] !== undefined && tree["s_prefix"] !== null;
154
+ if (tree["stage"] !== undefined)
155
+ attributes["stage"] = s(tree["stage"]);
156
+ if (tree["doc_type"] !== undefined)
157
+ attributes["doc_type"] = s(tree["doc_type"]);
158
+ if (tree["copublisher"] !== undefined)
159
+ attributes["copublisher"] = s(tree["copublisher"]);
160
+ if (tree["iso_reference"] !== undefined)
161
+ attributes["iso_reference"] = s(tree["iso_reference"]);
162
+ if (tree["iec_identifier"] !== undefined)
163
+ attributes["iec_identifier"] = s(tree["iec_identifier"]);
164
+ if (tree["supplement_number"] !== undefined) {
165
+ attributes["supplement_number"] = s(tree["supplement_number"]);
166
+ if (tree["supplement_part"] !== undefined)
167
+ attributes["supplement_part"] = s(tree["supplement_part"]);
168
+ if (tree["base_number"] !== undefined)
169
+ attributes["base_number"] = s(tree["base_number"]);
170
+ }
171
+ if (tree["cor_number"] !== undefined) {
172
+ attributes["cor_number"] = s(tree["cor_number"]);
173
+ attributes["cor_year"] = s(tree["cor_year"]);
174
+ attributes["base_number"] = s(tree["base_number"]);
175
+ attributes["base_year"] = s(tree["base_year"]);
176
+ if (tree["base_supplement"] !== undefined)
177
+ attributes["base_supplement"] = s(tree["base_supplement"]);
178
+ if (tree["base_supplement_part"] !== undefined) {
179
+ attributes["base_supplement_part"] = s(tree["base_supplement_part"]);
180
+ }
181
+ }
182
+ if (tree["amd_number"] !== undefined)
183
+ attributes["amendment_number"] = s(tree["amd_number"]);
184
+ if (tree["bundle_number"] !== undefined)
185
+ attributes["number"] = s(tree["bundle_number"]);
186
+ // The trailing "(RU-2021)" of the legacy code-with-year form.
187
+ if (isObj(tree["trailing_lang"])) {
188
+ const lang = langFromGroup(flatten(tree["trailing_lang"]));
189
+ if (lang !== undefined)
190
+ attributes["language"] = lang;
191
+ }
192
+ return attributes;
193
+ }
194
+ class CieBuilder {
195
+ parse(input) {
196
+ const tree = parseGrammar(cieGrammar, preprocessCie(input));
197
+ if (typeof tree !== "object" || tree === null) {
198
+ throw new ParseFailed("CIE: unexpected parse tree", 0);
199
+ }
200
+ return this.build(tree, input);
201
+ }
202
+ build(data, originalString) {
203
+ const tree = flatten(data);
204
+ if (isObj(tree["trailing_lang"]) === false && tree["trailing_lang"] === "") {
205
+ // trailing_lang "" is the no-language marker; nothing to do here.
206
+ }
207
+ // Corrigendum and Supplement wrap a nested base.
208
+ if (tree["cor_number"] !== undefined)
209
+ return this.buildCorrigendum(tree);
210
+ if (tree["supplement_number"] !== undefined)
211
+ return this.buildSupplement(tree);
212
+ const attributes = extractAttributes(tree);
213
+ let klass;
214
+ if (tree["bundle_number"] !== undefined && tree["first_number"] === undefined) {
215
+ klass = CieTutorialBundle;
216
+ }
217
+ else if (tree["bundle_items"] !== undefined) {
218
+ klass = CieBundle;
219
+ Object.assign(attributes, this.buildBundle(originalString));
220
+ }
221
+ else if (tree["paper_code"] !== undefined) {
222
+ klass = CieProceedings;
223
+ }
224
+ else if (tree["conference"] !== undefined) {
225
+ klass = CieConference;
226
+ }
227
+ else if (tree["iec_identifier"] !== undefined) {
228
+ klass = CieDualPublished;
229
+ }
230
+ else if (tree["iso_reference"] !== undefined) {
231
+ klass = CieIdentical;
232
+ }
233
+ else if (tree["copublisher"] !== undefined) {
234
+ klass = CieJointPublished;
235
+ }
236
+ else {
237
+ klass = CieStandard;
238
+ }
239
+ // One attribute hash serves every type; keep only the keys the
240
+ // chosen class declares (the constructor-refusal mirror).
241
+ const declared = klass.attributes;
242
+ const filtered = {};
243
+ for (const [key, value] of Object.entries(attributes)) {
244
+ if (key in declared)
245
+ filtered[key] = value;
246
+ }
247
+ return new klass(filtered);
248
+ }
249
+ /** Parse each comma member, hoist the shared base onto the bundle. */
250
+ buildBundle(originalString) {
251
+ const members = originalString
252
+ .split(",")
253
+ .map((item, i) => this.parse(i === 0 ? item.trim() : `CIE ${item.trim()}`));
254
+ const bases = members.map((m) => m.base);
255
+ if (bases.some((b) => b === undefined))
256
+ return { ids: members };
257
+ const first = JSON.stringify(bases[0].toHash());
258
+ const shared = bases.every((b) => JSON.stringify(b.toHash()) === first) ? bases[0] : undefined;
259
+ if (shared === undefined)
260
+ return { ids: members };
261
+ return {
262
+ base: shared,
263
+ ids: members.map((m) => new CieSupplement({ number: m.number, part: m.part })),
264
+ };
265
+ }
266
+ buildSupplement(tree) {
267
+ const a = extractAttributes(tree);
268
+ const base = new CieStandard({
269
+ number: a["base_number"],
270
+ stage: a["stage"],
271
+ s_prefix: a["s_prefix"] ?? false,
272
+ language: a["language"],
273
+ year: a["year"],
274
+ // Supplements always use the colon style.
275
+ style: "current",
276
+ });
277
+ return new CieSupplement({
278
+ base,
279
+ number: a["supplement_number"],
280
+ part: a["supplement_part"],
281
+ });
282
+ }
283
+ buildCorrigendum(tree) {
284
+ const a = extractAttributes(tree);
285
+ const baseStd = new CieStandard({
286
+ number: a["base_number"],
287
+ year: a["base_year"],
288
+ style: "current",
289
+ });
290
+ const base = a["base_supplement"] !== undefined
291
+ ? new CieSupplement({
292
+ base: baseStd,
293
+ number: a["base_supplement"],
294
+ part: a["base_supplement_part"],
295
+ })
296
+ : baseStd;
297
+ return new CieCorrigendum({
298
+ base,
299
+ number: a["cor_number"],
300
+ year: a["cor_year"],
301
+ });
302
+ }
303
+ }
304
+ export function cieGrammarImplementation() {
305
+ const builder = new CieBuilder();
306
+ return {
307
+ parse(input) {
308
+ return builder.parse(input);
309
+ },
310
+ };
311
+ }
@@ -0,0 +1,122 @@
1
+ import { BaseIdentifier } from "../../model/identifier.js";
2
+ import { Component } from "../../model/component.js";
3
+ import { BaseUrnGenerator } from "../../model/urn-generator.js";
4
+ /**
5
+ * Port of lib/pubid/cie/identifiers/* + components/language.rb.
6
+ * The wire hash is the raw attribute table (CIE declares no key_value
7
+ * block): number/part/iteration/part_separator flat, `language` a
8
+ * nested {code, format[, translation_year]} hash, publisher ("CIE")
9
+ * and style ("current") dropped as defaults.
10
+ */
11
+ /** The CIE Language component: four printed formats. */
12
+ export declare class CieLanguage extends Component {
13
+ readonly code?: string | undefined;
14
+ readonly format?: string | undefined;
15
+ readonly translation_year?: string | undefined;
16
+ constructor(attrs: Record<string, unknown>);
17
+ render(): string;
18
+ toWire(): Record<string, unknown>;
19
+ }
20
+ export declare abstract class CieIdentifier extends BaseIdentifier {
21
+ static attributes: import("../../model/attribute.js").AttributeTable;
22
+ readonly style: string | undefined;
23
+ constructor(attrs?: Record<string, unknown>);
24
+ dateSepChar(): string;
25
+ codeString(): string | undefined;
26
+ }
27
+ export declare abstract class CieSingleIdentifier extends CieIdentifier {
28
+ static attributes: import("../../model/attribute.js").AttributeTable;
29
+ readonly year: string | undefined;
30
+ }
31
+ export declare class CieUrnGenerator extends BaseUrnGenerator<CieIdentifier> {
32
+ generate(): string;
33
+ /** Base#maybe: reads a DECLARED attribute only. */
34
+ private maybeAttr;
35
+ private specialIdentifierTypeComponent;
36
+ private publisherComponent;
37
+ }
38
+ export declare class CieStandard extends CieSingleIdentifier {
39
+ static polymorphicName: string;
40
+ static attributes: import("../../model/attribute.js").AttributeTable;
41
+ readonly s_prefix: boolean | undefined;
42
+ readonly d_prefix: boolean | undefined;
43
+ readonly language: CieLanguage | undefined;
44
+ readonly stage: string | undefined;
45
+ readonly number: string | undefined;
46
+ render(): string;
47
+ }
48
+ export declare class CieJointPublished extends CieSingleIdentifier {
49
+ static polymorphicName: string;
50
+ static attributes: import("../../model/attribute.js").AttributeTable;
51
+ readonly copublisher: string | undefined;
52
+ readonly language: CieLanguage | undefined;
53
+ readonly doc_type: string | undefined;
54
+ readonly stage: string | undefined;
55
+ readonly number: string | undefined;
56
+ readonly part: string | undefined;
57
+ render(): string;
58
+ }
59
+ export declare class CieDualPublished extends CieSingleIdentifier {
60
+ static polymorphicName: string;
61
+ static attributes: import("../../model/attribute.js").AttributeTable;
62
+ readonly s_prefix: boolean | undefined;
63
+ readonly iec_identifier: string | undefined;
64
+ readonly number: string | undefined;
65
+ render(): string;
66
+ }
67
+ export declare class CieIdentical extends CieSingleIdentifier {
68
+ static polymorphicName: string;
69
+ static attributes: import("../../model/attribute.js").AttributeTable;
70
+ readonly s_prefix: boolean | undefined;
71
+ readonly language: CieLanguage | undefined;
72
+ readonly iso_reference: string | undefined;
73
+ readonly number: string | undefined;
74
+ render(): string;
75
+ }
76
+ export declare class CieConference extends CieSingleIdentifier {
77
+ static polymorphicName: string;
78
+ static attributes: import("../../model/attribute.js").AttributeTable;
79
+ readonly number: string | undefined;
80
+ readonly amendment_number: string | undefined;
81
+ readonly variant: string | undefined;
82
+ render(): string;
83
+ }
84
+ export declare class CieProceedings extends CieSingleIdentifier {
85
+ static polymorphicName: string;
86
+ static attributes: import("../../model/attribute.js").AttributeTable;
87
+ readonly number: string | undefined;
88
+ readonly conference: string | undefined;
89
+ readonly page: string | undefined;
90
+ render(): string;
91
+ }
92
+ export declare class CieTutorialBundle extends CieSingleIdentifier {
93
+ static polymorphicName: string;
94
+ static attributes: import("../../model/attribute.js").AttributeTable;
95
+ readonly number: string | undefined;
96
+ render(): string;
97
+ }
98
+ export declare abstract class CieSupplementIdentifier extends CieIdentifier {
99
+ static attributes: import("../../model/attribute.js").AttributeTable;
100
+ readonly base: CieIdentifier | undefined;
101
+ readonly number: string | undefined;
102
+ }
103
+ export declare class CieSupplement extends CieSupplementIdentifier {
104
+ static polymorphicName: string;
105
+ static attributes: import("../../model/attribute.js").AttributeTable;
106
+ readonly part: string | undefined;
107
+ render(): string;
108
+ }
109
+ export declare class CieCorrigendum extends CieSupplementIdentifier {
110
+ static polymorphicName: string;
111
+ static attributes: import("../../model/attribute.js").AttributeTable;
112
+ readonly year: string | undefined;
113
+ render(): string;
114
+ }
115
+ export declare class CieBundle extends CieSingleIdentifier {
116
+ static polymorphicName: string;
117
+ static attributes: import("../../model/attribute.js").AttributeTable;
118
+ readonly base: CieIdentifier | undefined;
119
+ readonly ids: CieIdentifier[];
120
+ render(): string;
121
+ private rebased;
122
+ }