@antora/assembler 1.0.0-beta.2 → 1.0.0-beta.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.
@@ -113,7 +113,7 @@ function createResolveAssemblyModel (context, contentCatalog, shared, intrinsicA
113
113
  return (componentVersion) => {
114
114
  const componentVersionProfiles = assemblerProfiles.get(componentVersion.version + '@' + componentVersion.name)
115
115
  const overrides =
116
- componentVersionProfiles?.get(intrinsicAttributes['assembler-profile']) ?? componentVersionProfiles?.get()
116
+ componentVersionProfiles?.get(intrinsicAttributes['assembler-profile']) ?? componentVersionProfiles?.get() ?? {}
117
117
  const { navFiles, messages } = overrides
118
118
  const model = Object.assign({}, shared, overrides)
119
119
  delete model.navFiles
@@ -371,57 +371,70 @@ function mergeAsciiDoc (
371
371
  if (~line.indexOf('xref:')) {
372
372
  // Q: should we allow : as first character of target?
373
373
  line = line.replace(/(?<![\\+])xref:((?:\.\/)?[\p{Alpha}0-9_/.{#].*?)\[(|.*?[^\\])\]/gu, (m, target, text) => {
374
- let pagePart, fragment, targetPage
374
+ let relativePart, fragment, targetResource, isPage
375
375
  const hashIdx = target.indexOf('#')
376
+ const dollarIdx = target.indexOf('$')
376
377
  if (~hashIdx) {
377
- pagePart = target.slice(0, hashIdx)
378
+ relativePart = target.slice(0, hashIdx)
378
379
  fragment = target.slice(hashIdx + 1)
379
- // TODO: for now, assume .adoc; in the future, consider other file extensions
380
- if (pagePart && !pagePart.endsWith('.adoc')) pagePart += '.adoc'
381
- } else if (target.endsWith('.adoc')) {
382
- pagePart = target
380
+ } else if (~dollarIdx || target.endsWith('.adoc')) {
381
+ relativePart = target
383
382
  fragment = ''
384
383
  } else {
385
384
  fragment = target
386
385
  }
387
- if (!pagePart) {
386
+ if (!relativePart) {
388
387
  // Q: should we validate the internal ID here?
389
388
  return text && ~text.indexOf('=')
390
389
  ? `xref:${idPrefix}${fragment}[${text}]`
391
390
  : `<<${idPrefix}${fragment}${text ? ',' + text.replace(/\\]/g, ']') : ''}>>`
392
391
  }
393
- if (~pagePart.indexOf('@') || /:.*:/.test(pagePart)) {
394
- if (siteUrl && (targetPage = contentCatalog.resolvePage(pagePart, page.src)) && targetPage.out) {
395
- text ||= targetPage.asciidoc?.xreftext || target
396
- return `${siteUrl}${targetPage.pub.url}${fragment && '#' + fragment}[${text}]`
392
+ if (~dollarIdx) {
393
+ if (relativePart.slice(dollarIdx).startsWith('$./')) {
394
+ relativePart = relativePart.slice(0, dollarIdx + 1) + topicPrefix + relativePart.slice(dollarIdx + 3)
397
395
  }
398
- // TODO: handle unresolved page better
396
+ if ((isPage = /\bpage\$/.test(relativePart))) relativePart = relativePart.replace('page$', '')
397
+ } else {
398
+ isPage = true
399
+ if (relativePart.startsWith('./')) relativePart = topicPrefix + relativePart.slice(2)
400
+ if (~hashIdx && !relativePart.endsWith('.adoc')) relativePart += '.adoc'
401
+ }
402
+ if (!isPage || ~relativePart.indexOf('@') || /:.*:/.test(relativePart)) {
403
+ if (siteUrl && (targetResource = contentCatalog.resolveResource(relativePart, page.src, 'page'))?.out) {
404
+ text ||= targetResource.asciidoc?.xreftext || target
405
+ return `${siteUrl}${targetResource.pub.url}${fragment && '#' + fragment}[${text}]`
406
+ }
407
+ // TODO: handle unresolved resource better
399
408
  return m
400
409
  }
401
410
  let targetModule
402
- const colonIdx = pagePart.indexOf(':')
411
+ const colonIdx = relativePart.indexOf(':')
403
412
  if (~colonIdx) {
404
- targetModule = pagePart.slice(0, colonIdx)
405
- pagePart = pagePart.slice(colonIdx + 1)
413
+ targetModule = relativePart.slice(0, colonIdx)
414
+ relativePart = relativePart.slice(colonIdx + 1)
415
+ if (relativePart.startsWith('./')) relativePart = topicPrefix + relativePart.slice(2)
406
416
  } else {
407
417
  targetModule = module_
408
418
  }
409
- if (pagePart.startsWith('./')) pagePart = topicPrefix + pagePart.slice(2)
410
- const pageResourceRef = targetModule === 'ROOT' ? pagePart : `${targetModule}:${pagePart}`
411
- if (!(targetPage = pagesInOutline.get(pageResourceRef))) {
412
- if (siteUrl && (targetPage = contentCatalog.resolvePage(pageResourceRef, page.src)) && targetPage.out) {
413
- text ||= targetPage.asciidoc?.xreftext || target
414
- return `${siteUrl}${targetPage.pub.url}${fragment && '#' + fragment}[${text}]`
419
+ const pageResourceRef = targetModule === 'ROOT' ? relativePart : `${targetModule}:${relativePart}`
420
+ if (!(targetResource = pagesInOutline.get(pageResourceRef))) {
421
+ if (
422
+ siteUrl &&
423
+ (targetResource = contentCatalog.resolvePage(pageResourceRef, page.src)) &&
424
+ targetResource.out
425
+ ) {
426
+ text ||= targetResource.asciidoc?.xreftext || target
427
+ return `${siteUrl}${targetResource.pub.url}${fragment && '#' + fragment}[${text}]`
415
428
  }
416
429
  // TODO: handle unresolved page better
417
430
  return m
418
431
  }
419
- if (targetModule !== 'ROOT') pagePart = `${targetModule}${idCoordinateSeparator}${pagePart}`
420
- pagePart = pagePart.replace(/\.adoc$/, '').replace(/[/.]/g, '-')
432
+ if (targetModule !== 'ROOT') relativePart = `${targetModule}${idCoordinateSeparator}${relativePart}`
433
+ relativePart = relativePart.replace(/\.adoc$/, '').replace(/[/.]/g, '-')
421
434
  const refid = fragment
422
- ? `${pagePart}${idScopeSeparator}${fragment}`
423
- : pagePart + (ReservedIdNames.includes(pagePart) ? idScopeSeparator : '')
424
- return `<<${refid}${text && text !== targetPage.title ? ',' + text.replace(/\\]/g, ']') : ''}>>`
435
+ ? `${relativePart}${idScopeSeparator}${fragment}`
436
+ : relativePart + (ReservedIdNames.includes(relativePart) ? idScopeSeparator : '')
437
+ return `<<${refid}${text && text !== targetResource.title ? ',' + text.replace(/\\]/g, ']') : ''}>>`
425
438
  })
426
439
  }
427
440
  if (~line.indexOf('link:{attachmentsdir}/')) {
@@ -87,7 +87,6 @@ function produceAssemblyFiles (loadAsciiDoc, contentCatalog, assemblerConfig, re
87
87
  accum.push(assemblyFile)
88
88
  return true
89
89
  }, false)
90
- mergedAsciiDocAttributes.doctype = assemblyModel.doctype
91
90
  sourceHighlighter
92
91
  ? (mergedAsciiDocAttributes['source-highlighter'] = sourceHighlighter)
93
92
  : delete mergedAsciiDocAttributes['source-highlighter']
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antora/assembler",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.0-beta.4",
4
4
  "description": "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.",
5
5
  "license": "MPL-2.0",
6
6
  "author": "OpenDevise Inc. (https://opendevise.com)",