diff options
| author | Dan Allen <dan.j.allen@gmail.com> | 2023-05-10 23:33:28 -0600 |
|---|---|---|
| committer | Dan Allen <dan.j.allen@gmail.com> | 2023-05-11 00:33:44 -0600 |
| commit | ab28cbe5f3ce21aae64831c5f7d335e559c98b57 (patch) | |
| tree | 340767cc316cebe117b02c5518b5695885b0d5e6 | |
| parent | b566ced6fc487956e1f33f17f41bdbd67a3a4695 (diff) | |
backport fix for #4452 enclose reftext tag in article tag in DocBook output for man page
| -rw-r--r-- | CHANGELOG.adoc | 1 | ||||
| -rw-r--r-- | lib/asciidoctor/converter/docbook5.rb | 30 | ||||
| -rw-r--r-- | test/document_test.rb | 47 |
3 files changed, 41 insertions, 37 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index cfaf17c7..6af41692 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -47,6 +47,7 @@ Bug Fixes:: * Don't swallow square brackets when processing escaped URL macro * Treat `uri:classloader:` as an absolute path prefix when running on JRuby (#3929) * Apply reftext substitutions to value of `mantitle` attribute in DocBook output (#4448) + * Enclose `<reftext>` tag in `<article>` tag in DocBook output for man page (#4452) == 2.0.18 (2022-10-15) - @mojavelinux diff --git a/lib/asciidoctor/converter/docbook5.rb b/lib/asciidoctor/converter/docbook5.rb index 1111f0c7..bde2ff06 100644 --- a/lib/asciidoctor/converter/docbook5.rb +++ b/lib/asciidoctor/converter/docbook5.rb @@ -39,11 +39,25 @@ class Converter::DocBook5Converter < Converter::Base result << ((node.attr? 'sectnumlevels') ? %(<?asciidoc-numbered maxdepth="#{node.attr 'sectnumlevels'}"?>) : '<?asciidoc-numbered?>') if node.attr? 'sectnums' lang_attribute = (node.attr? 'nolang') ? '' : %( xml:lang="#{node.attr 'lang', 'en'}") if (root_tag_name = node.doctype) == 'manpage' - root_tag_name = 'refentry' + manpage = true + root_tag_name = 'article' end root_tag_idx = result.size id = node.id result << (document_info_tag node) unless node.noheader + if manpage + result << '<refentry>' + result << '<refmeta>' + result << %(<refentrytitle>#{node.apply_reftext_subs node.attr 'mantitle'}</refentrytitle>) if node.attr? 'mantitle' + result << %(<manvolnum>#{node.attr 'manvolnum'}</manvolnum>) if node.attr? 'manvolnum' + result << %(<refmiscinfo class="source">#{node.attr 'mansource', ' '}</refmiscinfo>) + result << %(<refmiscinfo class="manual">#{node.attr 'manmanual', ' '}</refmiscinfo>) + result << '</refmeta>' + result << '<refnamediv>' + result += (node.attr 'mannames').map {|n| %(<refname>#{n}</refname>) } if node.attr? 'mannames' + result << %(<refpurpose>#{node.attr 'manpurpose'}</refpurpose>) if node.attr? 'manpurpose' + result << '</refnamediv>' + end unless (docinfo_content = node.docinfo :header).empty? result << docinfo_content end @@ -51,6 +65,7 @@ class Converter::DocBook5Converter < Converter::Base unless (docinfo_content = node.docinfo :footer).empty? result << docinfo_content end + result << '</refentry>' if manpage id, node.id = node.id, nil unless id # defer adding root tag in case document ID is auto-generated on demand result.insert root_tag_idx, %(<#{root_tag_name} xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0"#{lang_attribute}#{common_attributes id}>) @@ -702,19 +717,6 @@ class Converter::DocBook5Converter < Converter::Base end result << '</info>' - if doc.doctype == 'manpage' - result << '<refmeta>' - result << %(<refentrytitle>#{doc.apply_reftext_subs doc.attr 'mantitle'}</refentrytitle>) if doc.attr? 'mantitle' - result << %(<manvolnum>#{doc.attr 'manvolnum'}</manvolnum>) if doc.attr? 'manvolnum' - result << %(<refmiscinfo class="source">#{doc.attr 'mansource', ' '}</refmiscinfo>) - result << %(<refmiscinfo class="manual">#{doc.attr 'manmanual', ' '}</refmiscinfo>) - result << '</refmeta>' - result << '<refnamediv>' - result += (doc.attr 'mannames').map {|n| %(<refname>#{n}</refname>) } if doc.attr? 'mannames' - result << %(<refpurpose>#{doc.attr 'manpurpose'}</refpurpose>) if doc.attr? 'manpurpose' - result << '</refnamediv>' - end - result.join LF end diff --git a/test/document_test.rb b/test/document_test.rb index 64410b35..380b3744 100644 --- a/test/document_test.rb +++ b/test/document_test.rb @@ -1771,23 +1771,24 @@ context 'Document' do section body EOS - result = convert_string(input, keep_namespaces: true, attributes: { 'backend' => 'docbook5', 'doctype' => 'manpage' }) - assert_xpath '/xmlns:refentry', result, 1 - doc = xmlnodes_at_xpath('/xmlns:refentry', result, 1) + result = convert_string input, keep_namespaces: true, attributes: { 'backend' => 'docbook5', 'doctype' => 'manpage' } + assert_xpath '/xmlns:article', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry', result, 1 + doc = xmlnodes_at_xpath '/xmlns:article', result, 1 assert_equal 'http://docbook.org/ns/docbook', doc.namespaces['xmlns'] assert_equal 'http://www.w3.org/1999/xlink', doc.namespaces['xmlns:xl'] - assert_xpath '/xmlns:refentry[@version="5.0"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:info/xmlns:title[text()="asciidoctor(1)"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refmeta/xmlns:refentrytitle[text()="asciidoctor"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refmeta/xmlns:manvolnum[text()="1"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="source"][text()="Asciidoctor"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="manual"][text()="Asciidoctor Manual"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refnamediv/xmlns:refname[text()="asciidoctor"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refnamediv/xmlns:refpurpose[text()="Process text"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refsynopsisdiv', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refsynopsisdiv/xmlns:simpara[text()="some text"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refsection', result, 1 - assert_css 'refentry:root > refsection[xml|id="_first_section"]', result, 1 + assert_equal '5.0', (doc.attr 'version') + assert_xpath '/xmlns:article/xmlns:info/xmlns:title[text()="asciidoctor(1)"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refentrytitle[text()="asciidoctor"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:manvolnum[text()="1"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="source"][text()="Asciidoctor"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="manual"][text()="Asciidoctor Manual"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refnamediv/xmlns:refname[text()="asciidoctor"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refnamediv/xmlns:refpurpose[text()="Process text"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refsynopsisdiv', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refsynopsisdiv/xmlns:simpara[text()="some text"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refsection', result, 1 + assert_css 'article:root > refentry > refsection[xml|id="_first_section"]', result, 1 end test 'should output non-breaking space for source and manual in docbook manpage output if absent from source' do @@ -1802,9 +1803,9 @@ context 'Document' do some text EOS - result = convert_string(input, keep_namespaces: true, attributes: { 'backend' => 'docbook5', 'doctype' => 'manpage' }) - assert_xpath %(/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="source"][text()="#{decode_char 160}"]), result, 1 - assert_xpath %(/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="manual"][text()="#{decode_char 160}"]), result, 1 + result = convert_string input, keep_namespaces: true, attributes: { 'backend' => 'docbook5', 'doctype' => 'manpage' } + assert_xpath %(/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="source"][text()="#{decode_char 160}"]), result, 1 + assert_xpath %(/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refmiscinfo[@class="manual"][text()="#{decode_char 160}"]), result, 1 end test 'should apply replacements substitution to value of mantitle attribute used in DocBook output' do @@ -1823,8 +1824,8 @@ context 'Document' do doc = Asciidoctor.load input, backend: :docbook, standalone: true assert_equal 'foo\\--bar', (doc.attr 'mantitle') result = doc.convert - assert_xpath '/xmlns:refentry/xmlns:info/xmlns:title[text()="foo--bar(1)"]', result, 1 - assert_xpath '/xmlns:refentry/xmlns:refmeta/xmlns:refentrytitle[text()="foo--bar"]', result, 1 + assert_xpath '/xmlns:article/xmlns:info/xmlns:title[text()="foo--bar(1)"]', result, 1 + assert_xpath '/xmlns:article/xmlns:refentry/xmlns:refmeta/xmlns:refentrytitle[text()="foo--bar"]', result, 1 end test 'should be able to set doctype to book when converting to DocBook' do @@ -1877,9 +1878,9 @@ context 'Document' do EOS result = convert_string input, backend: 'docbook5' - assert_xpath '/refentry/refnamediv/refname', result, 2 - assert_xpath '(/refentry/refnamediv/refname)[1][text()="eve"]', result, 1 - assert_xpath '(/refentry/refnamediv/refname)[2][text()="islifeform"]', result, 1 + assert_xpath '/article/refentry/refnamediv/refname', result, 2 + assert_xpath '(/article/refentry/refnamediv/refname)[1][text()="eve"]', result, 1 + assert_xpath '(/article/refentry/refnamediv/refname)[2][text()="islifeform"]', result, 1 end test 'adds a front and back cover image to DocBook 5 when doctype is book' do |
