@antora/assembler
Version:
A JavaScript library that merges AsciiDoc content from multiple pages in an Antora site into assembly files and delegates to an exporter to convert those files to another format, such as PDF.
26 lines (22 loc) • 1.09 kB
JavaScript
const HTML_RESERVED_ID_NAMES = 'content header footnotes footer footer-text premable toc toctitle'.split(' ')
function generateScopedId (componentSrc, componentVersion, separators, filetype, asXrefTarget) {
let { component, module: mod, relative } = componentSrc
let id = relative.replace(/\.adoc$/, '').replace(/[/.]/g, '-')
let { coordinate: coordinateSeparator, prefix: prefixSeparator } = separators
if (component !== componentVersion.name) {
id = [component, mod === 'ROOT' ? '' : mod, id].join(coordinateSeparator)
} else if (mod !== 'ROOT') {
if (asXrefTarget && coordinateSeparator === ':' && /(?:pass|stem)$/.test(mod) && /^[a-z]+(?:,[a-z-]+)*$/.test(id)) {
prefixSeparator = ''
mod = mod.replace(/(?:pass|stem)$/, '\\$&')
}
id = mod + coordinateSeparator + id
} else if (filetype === 'html' && HTML_RESERVED_ID_NAMES.includes(id)) {
id = prefixSeparator + id
prefixSeparator = ''
}
if (prefixSeparator && !/^[\p{Alpha}_:]/u.test(id)) id = prefixSeparator + id
return id
}
module.exports = generateScopedId