From b418d3d8821ebf457a962dc356749278c5a99cc6 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sat, 25 Oct 2025 00:54:05 -0600 Subject: [PATCH] resolves #131 escape module name in xref if it ends with pass or stem --- CHANGELOG.adoc | 1 + packages/assembler/lib/produce-assembly-file.js | 15 ++++++++++++--- .../test/scenarios/rewrite-page-links/data.yml | 8 ++++++++ .../rewrite-page-links/expects/index.adoc | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 3bdd1cb..a29fa52 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -13,6 +13,7 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi === Fixed * integrate Asciidoctor log messages properly when jsonl formatter is not enabled (#133) +* escape module name in xref if it ends with pass or stem (#131) == 1.0.0-beta.10 (2025-10-17) diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index 650afec..5f1b6f4 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -406,7 +406,6 @@ function mergeAsciiDoc ( return m } if (fragment === resource.asciidoc.id) fragment = '' - const refid = generateId(resource.src, componentVersion, idCoordinateSeparator, idScopeSeparator, fragment).id if ( text && (assemblyModel.dropExplicitXrefText === 'always' || @@ -414,6 +413,14 @@ function mergeAsciiDoc ( ) { text = '' } + const refid = generateId( + resource.src, + componentVersion, + idCoordinateSeparator, + idScopeSeparator, + text.length > 0, + fragment + ).id return `xref:${refid}[${text}]` }) } @@ -566,7 +573,7 @@ function mergeAsciiDoc ( const resource = files.find((it) => it.pub.url === url) if (resource) { if (resource.src.family === 'page' && pagesInOutline.has(resource.pub.url)) { - const refid = generateId(resource.src, componentVersion, idCoordinateSeparator, idScopeSeparator).id + const refid = generateId(resource.src, componentVersion, idCoordinateSeparator, idScopeSeparator, true).id sectionTitle = `xref:${refid}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` } else if (siteRoot) { sectionTitle = `${resolveLinkTarget(resource, siteRoot, pubRoot, linkRefStyle)}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` @@ -807,11 +814,13 @@ function createResourceKey ({ component, version, module: mod, family, relative return `${version}@${component}:${mod === 'ROOT' ? '' : mod}:${family === 'page' ? '' : family + '$'}${relative}` } -function generateId ({ component, module: mod, relative }, componentVersion, coordinateSep, scopeSep, fragment) { +function generateId (componentSrc, componentVersion, coordinateSep, scopeSep, escapePass, fragment) { + let { component, module: mod, relative } = componentSrc let id = relative.replace(/\.adoc$/, '').replace(/[/.]/g, '-') if (component !== componentVersion.name) { id = [component, mod === 'ROOT' ? '' : mod, id].join(coordinateSep) } else if (mod !== 'ROOT') { + if (escapePass && coordinateSep === ':' && /(?:pass|stem)$/.test(mod)) mod = mod.replace(/(?:pass|stem)$/, '\\$&') id = mod + coordinateSep + id } else if (ReservedIdNames.includes(id)) { id += scopeSep diff --git a/packages/assembler/test/scenarios/rewrite-page-links/data.yml b/packages/assembler/test/scenarios/rewrite-page-links/data.yml index 555a652..696eba5 100644 --- a/packages/assembler/test/scenarios/rewrite-page-links/data.yml +++ b/packages/assembler/test/scenarios/rewrite-page-links/data.yml @@ -6,6 +6,7 @@ navigation: - content: xref:header.adoc[] - content: xref:the-page.adoc[] - content: xref:other-module:the-page.adoc[] + - content: xref:stem:index.adoc[] files: - relative: header.adoc contents: |- @@ -26,6 +27,7 @@ files: This page follows the xref:header.adoc[Header], which provides some xref:header.adoc#background[background]. Also see xref:other-module:the-page.adoc#top[]. + Or you can learn all about xref:stem:index.adoc[STEM]. Go back to the site to see xref:other-component::index.adoc[] and xref:imported-component::index.adoc[Imported Page]. @@ -39,6 +41,12 @@ files: = The Other Page content +- relative: index.adoc + module: stem + contents: |- + = STEM + + Learn all about it. - component: other-component relative: index.adoc contents: |- diff --git a/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc b/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc index 786991f..cad0ebb 100644 --- a/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc +++ b/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc @@ -42,6 +42,7 @@ You are on xref:the-page[this page]. This page follows the xref:header:::[Header], which provides some xref:header:::background[background]. Also see xref:other-module:the-page[]. +Or you can learn all about xref:\stem:index[STEM]. Go back to the site to see https://preview-docs.example.org/other-component/index.html[Another Page] and https://docs.example.org/imported-component/index.html[Imported Page]. @@ -61,3 +62,16 @@ You have reached the end of xref:the-page[xrefstyle=full]. == The Other Page content + +:docname: index +:page-module: stem +:page-relative-src-path: index.adoc +:page-origin-url: https://github.com/acme/the-component +:page-origin-start-path: +:page-origin-refname: v1.0 +:page-origin-reftype: branch +:page-origin-refhash: a00000000000000000000000000000000000000z +[#stem:index] +== STEM + +Learn all about it. -- GitLab