diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee8bd59..85da125 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,30 +63,3 @@ jobs: fail: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist/ - retention-days: 14 - - deploy: - name: Deploy to GitHub Pages - needs: build - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - permissions: - pages: write - id-token: write - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - uses: actions/download-artifact@v4 - with: - name: dist - path: dist - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 98dab51..81a1f31 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ _archive-vitepress/.jekyll-cache/ TODO* !TODO.astro/ !TODO.improve-website/ +src/content/library/api-reference-ruby.md diff --git a/package-lock.json b/package-lock.json index 160f6b1..6675098 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "pubid-astro", "version": "0.1.0", "dependencies": { + "@asciidoctor/core": "^2.2.8", "@astrojs/mdx": "^7.0.2", "@astrojs/rss": "^4.0.19", "@astrojs/sitemap": "^3.7.3", @@ -38,6 +39,21 @@ "vitest": "^4.1.10" } }, + "node_modules/@asciidoctor/core": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.8.tgz", + "integrity": "sha512-oozXk7ZO1RAd/KLFLkKOhqTcG4GO3CV44WwOFg2gMcCsqCUTarvMT7xERIoWW2WurKbB0/ce+98r01p8xPOlBw==", + "license": "MIT", + "dependencies": { + "asciidoctor-opal-runtime": "0.3.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0", + "yarn": ">=1.1.0" + } + }, "node_modules/@astrojs/check": { "version": "0.9.9", "dev": true, @@ -3715,6 +3731,59 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/asciidoctor-opal-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz", + "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==", + "license": "MIT", + "dependencies": { + "glob": "7.1.3", + "unxhr": "1.0.1" + }, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/asciidoctor-opal-runtime/node_modules/brace-expansion": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/asciidoctor-opal-runtime/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/asciidoctor-opal-runtime/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "dev": true, @@ -3864,7 +3933,6 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, "license": "MIT" }, "node_modules/baseline-browser-mapping": { @@ -4234,6 +4302,12 @@ "node": ">= 18" } }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "dev": true, @@ -5124,6 +5198,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "license": "MIT", @@ -5771,6 +5851,23 @@ } } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, "node_modules/ini": { "version": "1.3.8", "dev": true, @@ -7790,6 +7887,15 @@ "version": "2.0.11", "license": "MIT" }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/oniguruma-parser": { "version": "0.12.2", "license": "MIT" @@ -7948,6 +8054,15 @@ "node": ">=14.0.0" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "dev": true, @@ -9491,6 +9606,15 @@ "node": "20 || >=22" } }, + "node_modules/unxhr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz", + "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==", + "license": "MIT", + "engines": { + "node": ">=8.11" + } + }, "node_modules/update-browserslist-db": { "version": "1.2.3", "funding": [ @@ -10338,6 +10462,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/ws": { "version": "8.21.0", "dev": true, diff --git a/package.json b/package.json index dba57d4..49201e4 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "fetch:api": "node scripts/fetch-api-reference.mjs" }, "dependencies": { + "@asciidoctor/core": "^2.2.8", "@astrojs/mdx": "^7.0.2", "@astrojs/rss": "^4.0.19", "@astrojs/sitemap": "^3.7.3", @@ -48,4 +49,4 @@ "typescript": "^6.0.3", "vitest": "^4.1.10" } -} \ No newline at end of file +} diff --git a/src/content.config.ts b/src/content.config.ts index 4360829..6454750 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -38,6 +38,8 @@ const specs = defineCollection({ loader: glob({ pattern: '**/*.md', base: './src/content/specs' }), schema: baseSchema.extend({ ord: z.number().default(0), + // the sibling .adoc the entry renders (converted at build time) + adoc: z.string().optional(), }), }) diff --git a/src/content/specs/iec-urn-specification.adoc b/src/content/specs/iec-urn-specification.adoc index 3218279..34c7351 100644 --- a/src/content/specs/iec-urn-specification.adoc +++ b/src/content/specs/iec-urn-specification.adoc @@ -549,7 +549,6 @@ Global. == References -[bibliography] === Normative References * [[[ISODIR1,IEC/ISO Directives Part 1]]] -- Procedures for the @@ -560,7 +559,6 @@ Global. * [[[RFC5234,RFC 5234]]] -- Crocker, D., Overell, P., "Augmented BNF for Syntax Specifications: ABNF", January 2008. -[bibliography] === Informative References * IEC URI Model, version 2019-12-10 (internal IEC document). diff --git a/src/content/specs/iec-urn.md b/src/content/specs/iec-urn.md index 09f0a9e..3b1d1f8 100644 --- a/src/content/specs/iec-urn.md +++ b/src/content/specs/iec-urn.md @@ -1,9 +1,4 @@ --- prev: /specs/iso-urn ---- - - - -
+adoc: iec-urn-specification.adoc +--- \ No newline at end of file diff --git a/src/content/specs/iso-urn-specification.adoc b/src/content/specs/iso-urn-specification.adoc index 7d59ad5..ae8dc15 100644 --- a/src/content/specs/iso-urn-specification.adoc +++ b/src/content/specs/iso-urn-specification.adoc @@ -25,10 +25,27 @@ following gaps identified in practice: * **Extended document types** -- Additional deliverable types beyond those in RFC 5141, including Directives (`dir`), Directive Supplements (`dir-sup`), and IWA Supplements (`iwa-sup`). -* **Typed stage abbreviations** -- RFC 5141 uses only harmonized stage - codes (`stage-XX.XX`). This specification also supports short stage - abbreviations (`WD`, `CD`, `DIS`, `FDIS`, `PDAM`, `DAM`, `FDAM`, - `DCOR`, `FDCOR`, `CDTS`, `DTS`, `FDTS`, `WDS`). +* **Supplement year** -- RFC 5141's `supplement` rule has no slot for + the supplement's own publication year (`Amd 1:2007`). This + specification adds `supplyear` between the number and the version. +* **Supplement version** -- RFC 5141 defines `` (the + corrected version of a published supplement) but no ISO identifier + surface carries it. This specification stores it on the supplement + and emits it in the `vN` slot. +* **Per-supplement stage** -- RFC 5141's single `status` slot sits in + `docidentifier` and describes the whole resource, so a draft + amendment on a published base cannot state both stages. This + specification allows a `stage` element immediately before its + supplement's type token. +* **Legacy stage abbreviations (ingestion only)** -- Datasets carry + URNs with typed stage abbreviations (`WD`, `CD`, `DIS`, `FDIS`, + `DAM`, ...). These are NOT part of the NSS grammar: they are + accepted on parse as a deprecated input alias and re-canonicalized + to their harmonized stage codes on render. One abbreviation never + maps to one code by itself -- the label is a function of the + deliverable type and the stage code (50.00 is FDIS for an IS + project, FDAM for an amendment project, FDTS for a TS project), so + only the harmonized code round-trips losslessly. * **Supplement chains** -- Nested supplements (e.g., a Corrigendum to an Amendment) with explicit ordering semantics. * **Explicit language specification** -- Language codes are always @@ -88,13 +105,11 @@ partnumber = "-" 1*( DIGIT / ALPHA / "-" ) status = ( "draft" / "cancelled" ) / stage +; Identical to RFC 5141 -- the stage is the harmonized code only. The +; typed abbreviations (WD, CD, DIS, FDIS, DAM, ...) are human-face +; labels for (deliverable type, stage code); they are accepted on +; INGESTION as a deprecated alias and never emitted. stage = "stage-" stagecode ["." iteration] - / stage-abbr ["." iteration] - -stage-abbr = "WD" / "WDS" / "CD" / "CDV" / "DIS" / "FDIS" - / "PDAM" / "DAM" / "FDAM" / "DCOR" / "FDCOR" - / "CDTS" / "DTS" / "FDTS" / "PRF" - / "PWI" / "NP" / "AWI" / "NWIP" stagecode = DIGIT DIGIT "." DIGIT DIGIT @@ -116,13 +131,18 @@ language = lang-code *("," lang-code) lang-code = 1*2(ALPHA) -supplement = ":" suppltype ":" supplnumber - [":" supplversion] [":" language] +; Additive extension of the RFC 5141 supplement rule -- the RFC form +; ":" suppltype ":" supplnumber [":" supplversion] [":" language] +; remains valid; supplyear and a leading per-supplement stage are new. +supplement = [":" stage] ":" suppltype ":" supplnumber + [":" supplyear] [":" supplversion] [":" language] suppltype = "amd" / "cor" / "sup" / "add" supplnumber = DIGITS +supplyear = 4DIGIT + supplversion = "v" DIGITS addition = techdefined / isodefined @@ -201,8 +221,17 @@ Omitting `partnumber` designates a multipart document in its entirety. Indicates the publication status of the document. When the `status` element is not present, the NSS refers to a published document. -RFC 5141-bis extends RFC 5141 by supporting *typed stage abbreviations* -in addition to harmonized stage codes: +The stage is carried as the harmonized stage code only -- identical to +RFC 5141. Earlier drafts of this specification admitted typed stage +abbreviations (`WD`, `CD`, `DIS`, `FDIS`, `DAM`, ...) as an alternative +`stage` production; that extension was withdrawn because it redefines a +rule RFC 5141 already fixes rather than extending it, and because the +abbreviation is not a function of the code alone: it is a function of +the deliverable type and the stage code (50.00 is FDIS for an IS +project, FDAM for an amendment project, FDTS for a TS project, and the +PRF variants share codes with the F variants). The harmonized code plus +the identifier's own deliverable type reconstructs the label +deterministically, so only the code round-trips losslessly. Harmonized stage code notation:: @@ -214,32 +243,18 @@ project iteration. stage-00.00:: Preliminary work item stage-20.00:: New work item proposal stage-30.00:: Committee draft -stage-40.00:: Draft International Standard -stage-50.00:: Final Draft International Standard +stage-40.00:: Draft (enquiry) -- DIS for an IS project, DAM for an +amendment project, DTS for a TS project, ... +stage-50.00:: Final draft -- FDIS for an IS project, FDAM for an +amendment project, FDTS for a TS project, ... stage-60.00:: Published (not emitted for published documents) -Typed stage abbreviations (RFC 5141-bis):: - -[horizontal] -PWI:: Preliminary Work Item -NP:: New Proposal / New Work Item Proposal -AWI:: Approved Work Item -NWIP:: New Work Item Proposal -WD:: Working Draft -WDS:: Working Draft Study -CD:: Committee Draft -CDV:: Committee Draft for Vote -DIS:: Draft International Standard -FDIS:: Final Draft International Standard -PDAM:: Proposed Draft Amendment -DAM:: Draft Amendment -FDAM:: Final Draft Amendment -DCOR:: Draft Corrigendum -FDCOR:: Final Draft Corrigendum -CDTS:: Committee Draft Technical Specification -DTS:: Draft Technical Specification -FDTS:: Final Draft Technical Specification -PRF:: Proof +[NOTE] +==== +Legacy abbreviation forms are accepted on parse (deprecated ingestion +alias; see the gap list above) and are re-canonicalized to their +harmonized stage codes on render. They are never emitted. +==== ==== edition @@ -279,6 +294,20 @@ cor:: Technical Corrigendum -- corrects technical error or ambiguity; not ballot sup:: Supplement -- generic supplement type add:: Addendum -- (document type no longer published) +The slots after the type token, in order: + +[horizontal] +supplnumber:: the supplement's own number (`Amd 1` carries 1) +supplyear:: the supplement's own publication year (`Amd 1:2007`) -- +added by this specification; RFC 5141 has no slot for it +supplversion:: the corrected version of the published supplement +(`v2` = version corrected once); omitted when not stated, where the +reference is to the highest version per RFC 5141 +stage:: optionally, the supplement's own stage immediately BEFORE the +type token (`stage-40.00:amd:1`) -- added by this specification; RFC +5141's single `status` slot cannot separate a draft amendment from its +published base + ==== addition An optional element that identifies a representation, extract, or @@ -319,8 +348,11 @@ urn:iso:std:iso-iec:9075:-3:stage-95.99:ed-2:en urn:iso:std:iso-iec:9075:-3:stage-30.60:ed-4:en // Draft 4th edition of ISO/IEC 9075-3 -urn:iso:std:iso-iec:9075:-3:DIS:ed-4:en -// Same as above, using RFC 5141-bis typed stage abbreviation +The canonical form carries the harmonized code only +(`stage-30.60:ed-4:en`). Datasets also carry the legacy abbreviation +spelling (`DIS:ed-4:en`); it parses as a deprecated ingestion alias +and re-canonicalizes to the harmonized form on render -- see +<>. .... ==== Language handling @@ -348,9 +380,12 @@ urn:iso:std:iso:9999:-1:ed-2:en:amd:1:v2 urn:iso:std:iso:9999:-1:ed-2:en:amd:1:cor:1 // Corrigendum 1 to Amendment 1 -urn:iso:std:iso-iec:13818:-1:amd:2016:v3:cor:2017:v1 +urn:iso:std:iso-iec:13818:-1:amd:3:2016:v1:cor:1:2017:v1 // Amendment 3 (2016) with Corrigendum 1 (2017) to -// ISO/IEC 13818-1 +// ISO/IEC 13818-1 -- number, year, then version per the +// supplement slots; the legacy wire put the year in the +// number slot ("amd:2016:v3") and is re-canonicalized on +// ingestion .... ==== Extended types (RFC 5141-bis) @@ -372,7 +407,9 @@ documents. RFC 5141-bis supplements this by requiring that: -* Typed stage abbreviations map unambiguously to harmonized stage codes. +* Stages are carried as harmonized stage codes only; the typed + abbreviations are human-face labels for (deliverable type, stage + code) and never appear in the NSS. * Supplement chains have a defined ordering (outer supplement last in the NSS). * Language codes are always explicit, avoiding ambiguity from implicit @@ -496,19 +533,24 @@ date to distinguish when a stage was introduced. === Overlapping Harmonized Codes Some stages share harmonized stage codes. For example, both WD and WDS use -code `20.20`. When parsing a URN that contains `stage-20.20`, implementations -SHOULD resolve to the more general stage (WD) unless the typed abbreviation -(`WDS`) is explicitly present in the URN. +code `20.20`. The harmonized code alone cannot distinguish them -- the +abbreviation is a function of the deliverable type and the stage code, and +the distinction is carried by the HUMAN face, never by the NSS. A URN with +`stage-20.20` resolves to the more general stage (WD); a legacy URN spelling +the abbreviation (`WDS`) resolves to it during ingestion only, as a +deprecated alias, and re-canonicalizes to the harmonized code on render. === Parsing Disambiguation Rules When a harmonized stage code maps to multiple typed stages, the following rules apply: -. If the URN contains a typed stage abbreviation (`stage-abbr`), use the - stage identified by that abbreviation directly. -. If the URN contains a harmonized code (`stage-XX.XX`), prefer the stage - with the broader scope (more harmonized codes) over a specialized subset. +. A legacy typed stage abbreviation is accepted on parse only; it + selects the stage identified by that abbreviation directly and is + re-canonicalized to its harmonized code on render. +. A harmonized code (`stage-XX.XX`) resolves through the identifier's + own deliverable type: prefer the stage of that type with the broader + scope (more harmonized codes) over a specialized subset. . Published stage codes (`60.00`, `60.60`) resolve to "Proof" (PRF) or "Published" depending on context. Non-published stages take precedence over the published default for shared codes like `60.00`. @@ -531,12 +573,26 @@ This specification extends RFC 5141 in the following ways: | Stage notation | Harmonized stage codes only (`stage-XX.XX`) -| Harmonized codes *and* typed stage abbreviations (`WD`, `CD`, `DIS`, etc.) +| *Unchanged* -- harmonized codes only. Legacy abbreviation URNs are +accepted on parse as a deprecated alias and re-canonicalized on render. | Supplement chains | Single level (`amd`/`cor`/`add`) | Multi-level nesting (Corrigendum to Amendment) +| Supplement year +| No slot; the year cannot be carried (`Amd 1:2007` is inexpressible) +| `supplyear = 4DIGIT` between the number and the version + +| Supplement version +| Defined but unsurfaced (no ISO identifier carries it) +| Stored on the supplement; emitted in the `vN` slot + +| Per-supplement stage +| One `status` slot for the whole resource; a draft amendment on a +published base is inexpressible +| `stage` immediately before the supplement's type token + | Language | May be omitted (English assumed) | Always explicit @@ -577,18 +633,19 @@ and adds `sup` as a generic supplement type. | 4 | Resolved | **Missing ability to state stage of base identifier in supplements.** -RFC 5141 provides no mechanism to include the base document's stage -in a supplement URN. RFC 5141-bis supports typed stage abbreviations -(see <>) and harmonized stage codes on the base document, -preserving the stage information in supplement URNs. +RFC 5141's single `status` slot sits in `docidentifier` and describes +the whole resource, so a draft amendment on a published base cannot +state both stages. RFC 5141-bis allows a `stage` element immediately +before the supplement's type token (see <>); the base +stage stays in the RFC slot. The stage is the harmonized code only. | 5 | Resolved -| **Missing support for new stage types (WDS, CDTS).** RFC 5141 uses -only harmonized stage codes. RFC 5141-bis adds typed stage -abbreviations (see <>) including `WDS` (Working Draft -Study, introduced 2025-06) and `CDTS` (Committee Draft Technical -Specification), with dated stage code tracking (see <>). +| **Missing support for new stage types (WDS, CDTS).** The harmonized +stage code system already covers every stage, including `WDS` +(Working Draft Study, introduced 2025-06) and `CDTS` (Committee Draft +Technical Specification) -- these are new labels for existing codes, +resolved through the deliverable type. No NSS change is required; +the abbreviations live in the human face. | 6 | Resolved | **Missing support for new document types (IWA).** RFC 5141 lists @@ -599,15 +656,16 @@ RFC 5141-bis extends this with `dir`, `dir-sup`, and `iwa-sup` [NOTE] ==== -All six identified gaps have been resolved in the RFC 5141-bis -specification and implemented in the PubID software library with full -test coverage. The implementation is available as open-source software -to facilitate adoption by ISO Central Secretariat. +The identified gaps are resolved in the RFC 5141-bis specification and +implemented in the PubID software library with full test coverage. The +extensions are strictly additive: every RFC 5141 URN remains valid and +parses to the same identifier, and no RFC 5141 production is redefined. +The implementation is available as open-source software to facilitate +adoption by ISO Central Secretariat. ==== == References -[bibliography] === Normative References * [[[ISODIR1,ISO/IEC Directives Part 1]]] -- International Organization @@ -621,7 +679,6 @@ to facilitate adoption by ISO Central Secretariat. * [[[RFC5234,RFC 5234]]] -- Crocker, D., Overell, P., "Augmented BNF for Syntax Specifications: ABNF", January 2008. -[bibliography] === Informative References * [[[ISOGUIDE69,ISO Guide 69:1999]]] -- "Harmonized Stage Code system diff --git a/src/content/specs/iso-urn.md b/src/content/specs/iso-urn.md index f13939a..db87843 100644 --- a/src/content/specs/iso-urn.md +++ b/src/content/specs/iso-urn.md @@ -1,10 +1,5 @@ --- prev: /specs/ next: /specs/iec-urn ---- - - - -
+adoc: iso-urn-specification.adoc +--- \ No newline at end of file diff --git a/src/pages/specs/[...slug].astro b/src/pages/specs/[...slug].astro index f1b24d7..38bd702 100644 --- a/src/pages/specs/[...slug].astro +++ b/src/pages/specs/[...slug].astro @@ -1,6 +1,26 @@ --- +import fs from 'node:fs' +import path from 'node:path' import BaseLayout from '~/layouts/BaseLayout.astro' import { getCollection, render } from 'astro:content' +import Asciidoctor from '@asciidoctor/core' + +const adoc = Asciidoctor() + +function renderAdoc(dir: string | undefined, file: string): string { + if (!dir) return '' + return adoc.convert(fs.readFileSync(path.join(dir, file), 'utf-8'), { + standalone: false, + safe: 'unsafe', + attributes: { + showtitle: true, + toc: 'macro', + sectanchors: true, + 'source-highlighter': 'highlight.js', + icons: 'font', + }, + }) as string +} export async function getStaticPaths() { const items = (await getCollection('specs')) @@ -13,13 +33,19 @@ export async function getStaticPaths() { interface Props { item: any } const { item } = Astro.props -const { Content } = await render(item) const title = item.data.title || 'Specification' +// A spec entry renders its sibling .adoc converted at build time; the +// VitePress-era wrapper bodies (a Vue script-setup import) never worked +// under Astro and rendered as raw text. +const html = item.data.adoc + ? renderAdoc(path.dirname(item.filePath ?? ''), item.data.adoc) + : undefined +const { Content } = await render(item) ---

Specification

- + {html ?
: }