summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2023-05-10 23:33:28 -0600
committerDan Allen <dan.j.allen@gmail.com>2023-05-11 00:33:44 -0600
commitab28cbe5f3ce21aae64831c5f7d335e559c98b57 (patch)
tree340767cc316cebe117b02c5518b5695885b0d5e6
parentb566ced6fc487956e1f33f17f41bdbd67a3a4695 (diff)
backport fix for #4452 enclose reftext tag in article tag in DocBook output for man page
-rw-r--r--CHANGELOG.adoc1
-rw-r--r--lib/asciidoctor/converter/docbook5.rb30
-rw-r--r--test/document_test.rb47
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', '&#160;'}</refmiscinfo>)
+ result << %(<refmiscinfo class="manual">#{node.attr 'manmanual', '&#160;'}</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', '&#160;'}</refmiscinfo>)
- result << %(<refmiscinfo class="manual">#{doc.attr 'manmanual', '&#160;'}</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