diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 64b1e7ffac9e6ab810c4a7d0b68cc7520fbd2ddd..c5d84d39443a0557101405aa43175c8180b24155 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -31,6 +31,7 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi * fully process document header so that implicit metadata lines are not left behind (#90) * copy image resources referenced by -image attributes to build directory (#89) +* process name section when doctype of page is manpage (#95) * remove lines the precede doctitle when adding page to assembly * only suppress page title matching component version title if its the first section in the document diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index 82ff24c5b04a87d3de5016a6efb773c4115c3cf7..6087c478e6b22df048cc2102c20d074fa0c384af 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -282,6 +282,24 @@ function mergeAsciiDoc ( ? it.getDocument().isNested() : !(it.getContext() === 'table_cell' && it.getStyle() === 'asciidoc') ) + if (doc.getDoctype() === 'manpage') { + const firstSectionIdx = doc.hasSections() ? doc.getSections()[0].getLineNumber() - 1 : lines.length + for (let idx = 0; idx < firstSectionIdx; idx++) { + if (~ignoreLines.indexOf(idx)) continue + const line = lines[idx] + if (line.startsWith('== ') && line.length > 3) { + allBlocks.unshift({ + getContext: () => 'section', + getDocument: () => doc, + getId: () => doc.getAttribute('manname-id'), + getLineNumber: () => idx + 1, + getSectionName: () => undefined, + level: 1, + }) + break + } + } + } const refs = doc.getCatalog().refs allBlocks.forEach((block) => { const contentModel = block.content_model @@ -310,7 +328,7 @@ function mergeAsciiDoc ( } }) let skipping - for (let idx = 0, len = lines.length; idx < len; idx++) { + for (let idx = 0, lastIdx = lines.length - 1; idx <= lastIdx; idx++) { if (~ignoreLines.indexOf(idx)) continue let line = lines[idx] if (line.startsWith('//')) { diff --git a/packages/assembler/test/produce-assembly-files-test.js b/packages/assembler/test/produce-assembly-files-test.js index e2035686c78361d7cc11b216acab8c4144176557..65ab06fe2fe03caaa632d56e95238ebf82f8c016 100644 --- a/packages/assembler/test/produce-assembly-files-test.js +++ b/packages/assembler/test/produce-assembly-files-test.js @@ -205,6 +205,10 @@ describe('produceAssemblyFiles()', () => { assert.equal(assemblyFiles[0].asciidoc.attributes.doctype, 'article') }) + it('should process name section of manpage', async () => { + await runScenario('with-manpage', __dirname) + }) + it('should shift levels of multipart page not at nav root', async () => { await runScenario('multipart-page', __dirname) }) diff --git a/packages/assembler/test/scenarios/with-manpage/data.yml b/packages/assembler/test/scenarios/with-manpage/data.yml new file mode 100644 index 0000000000000000000000000000000000000000..a75e93d43f56db8c5c085677fb69c848d9077ed1 --- /dev/null +++ b/packages/assembler/test/scenarios/with-manpage/data.yml @@ -0,0 +1,33 @@ +name: the-component +version: '1.0' +title: The Component +navigation: + items: + - content: xref:cli.adoc[] + items: + - content: xref:manpage.adoc[] +files: +- relative: cli.adoc + contents: |- + = CLI + + contents +- relative: manpage.adoc + contents: |- + = program(1) + Author Name + :doctype: manpage + :man manual: Program Manual + :man source: Program 2.0 + + == Name + + program - does stuff + + == Synopsis + + *program* [_OPTION_]... + + == Description + + The program(1) does stuff. diff --git a/packages/assembler/test/scenarios/with-manpage/expects/index.adoc b/packages/assembler/test/scenarios/with-manpage/expects/index.adoc new file mode 100644 index 0000000000000000000000000000000000000000..1ae927c4ed506b2a1a76330dc1039b764052cf05 --- /dev/null +++ b/packages/assembler/test/scenarios/with-manpage/expects/index.adoc @@ -0,0 +1,53 @@ += The Component +:revnumber: 1.0 +:doctype: book +:underscore: _ +:page-component-name: the-component +:page-component-version: 1.0 +:page-version: {page-component-version} +:page-component-display-version: 1.0 +:page-component-title: The Component + +:docname: cli +:page-module: ROOT +:page-relative-src-path: cli.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 +[#cli] +== CLI + +contents + +:docname: manpage +:page-module: ROOT +:page-relative-src-path: manpage.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 +:man manual: Program Manual +:man source: Program 2.0 +[#manpage] +=== program(1) + +[discrete#manpage:::_name] +==== Name + +program - does stuff + +[discrete#manpage:::_synopsis] +==== Synopsis + +*program* [_OPTION_]... + +[discrete#manpage:::_description] +==== Description + +The program(1) does stuff. + +:!manmanual: +:!mansource: