diff options
author | Florian Klink <flokli@flokli.de> | 2019-10-30 16:51:33 +0100 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-10-30 08:51:33 -0700 |
commit | c6e936dec2fc0f0e4d15b7c6f7c4ed6934dd233a (patch) | |
tree | 859287bf1c5e4e0e9d46e4ccc4941c6016b4da5b | |
parent | 080a3cdaebe074f588b9f6266d09e745f430487c (diff) | |
download | pandoc-c6e936dec2fc0f0e4d15b7c6f7c4ed6934dd233a.tar.gz |
docbook reader: fix nesting of chapters and sections (#5864)
* Set dbBook to true when traversing a chapter too.
Currently, a `<title/>` in a chapter and in a `<section/>` below that
chapter have the same level if they're not inside a `<book/>`.
This can happen in a multi-file book project. Also see the example at
https://tdg.docbook.org/tdg/4.5/chapter.html
Co-authored-by: Félix Baylac-Jacqué <felix@alternativebit.fr>
* Add docbook-chapter test
This tests nested `<section/>` and makes sure `<title/>` in the first
`<section/>` below `<chapter/>` is one level deeper than the `<chapter/>`'s
`<title/>`, also when not inside a `<book/>`.
Co-authored-by: Félix Baylac-Jacqué <felix@alternativebit.fr>
-rw-r--r-- | pandoc.cabal | 1 | ||||
-rw-r--r-- | src/Text/Pandoc/Readers/DocBook.hs | 2 | ||||
-rw-r--r-- | test/Tests/Old.hs | 2 | ||||
-rw-r--r-- | test/docbook-chapter.docbook | 30 | ||||
-rw-r--r-- | test/docbook-chapter.native | 17 |
5 files changed, 51 insertions, 1 deletions
diff --git a/pandoc.cabal b/pandoc.cabal index 4871aa91f..27d2840b1 100644 --- a/pandoc.cabal +++ b/pandoc.cabal @@ -215,6 +215,7 @@ extra-source-files: test/command/3510-export.latex test/command/3510-src.hs test/command/3971b.tex + test/docbook-chapter.docbook test/docbook-reader.docbook test/docbook-xref.docbook test/html-reader.html diff --git a/src/Text/Pandoc/Readers/DocBook.hs b/src/Text/Pandoc/Readers/DocBook.hs index 80b7798a0..4ea5f6657 100644 --- a/src/Text/Pandoc/Readers/DocBook.hs +++ b/src/Text/Pandoc/Readers/DocBook.hs @@ -726,7 +726,7 @@ parseBlock (Elem e) = mapM parseGlossEntry (filterChildren (named "glossentry") e) "glosslist" -> definitionList <$> mapM parseGlossEntry (filterChildren (named "glossentry") e) - "chapter" -> sect 0 + "chapter" -> modify (\st -> st{ dbBook = True}) >> sect 0 "appendix" -> sect 0 "preface" -> sect 0 "bridgehead" -> para . strong <$> getInlines e diff --git a/test/Tests/Old.hs b/test/Tests/Old.hs index d0a1e0e4f..45e40a830 100644 --- a/test/Tests/Old.hs +++ b/test/Tests/Old.hs @@ -86,6 +86,8 @@ tests pandocPath = , test' "reader" ["-r", "docbook", "-w", "native", "-s"] "docbook-reader.docbook" "docbook-reader.native" , test' "reader" ["-r", "docbook", "-w", "native", "-s"] + "docbook-chapter.docbook" "docbook-chapter.native" + , test' "reader" ["-r", "docbook", "-w", "native", "-s"] "docbook-xref.docbook" "docbook-xref.native" ] , testGroup "docbook5" diff --git a/test/docbook-chapter.docbook b/test/docbook-chapter.docbook new file mode 100644 index 000000000..68bb60e02 --- /dev/null +++ b/test/docbook-chapter.docbook @@ -0,0 +1,30 @@ +<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" + "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> +<!-- This matches the example from +https://tdg.docbook.org/tdg/4.5/section.html, sans sectioninfo and subtitle, as +they're currently not supported --> +<chapter><title>Test Chapter</title> +<para>This chapter uses recursive sections.</para> +<section> +<title>Like a Sect1</title> +<para>This section is like a Sect1.</para> +<section><title>Like a Sect2</title> +<para>This section is like a Sect2.</para> +<section><title>Like a Sect3</title> +<para>This section is like a Sect3.</para> +<section><title>Like a Sect4</title> +<para>This section is like a Sect4.</para> +<section><title>Like a Sect5</title> +<para>This section is like a Sect5.</para> +<section><title>Would be like a Sect6</title> +<para>This section would be like a Sect6, if there was one.</para> +<section><title>Would be like a Sect7</title> +<para>This section would be like a Sect7, if there was one.</para> +</section> +</section> +</section> +</section> +</section> +</section> +</section> +</chapter> diff --git a/test/docbook-chapter.native b/test/docbook-chapter.native new file mode 100644 index 000000000..396b6a21a --- /dev/null +++ b/test/docbook-chapter.native @@ -0,0 +1,17 @@ +Pandoc (Meta {unMeta = fromList []}) +[Header 1 ("",[],[]) [Str "Test",Space,Str "Chapter"] +,Para [Str "This",Space,Str "chapter",Space,Str "uses",Space,Str "recursive",Space,Str "sections."] +,Header 2 ("",[],[]) [Str "Like",Space,Str "a",Space,Str "Sect1"] +,Para [Str "This",Space,Str "section",Space,Str "is",Space,Str "like",Space,Str "a",Space,Str "Sect1."] +,Header 3 ("",[],[]) [Str "Like",Space,Str "a",Space,Str "Sect2"] +,Para [Str "This",Space,Str "section",Space,Str "is",Space,Str "like",Space,Str "a",Space,Str "Sect2."] +,Header 4 ("",[],[]) [Str "Like",Space,Str "a",Space,Str "Sect3"] +,Para [Str "This",Space,Str "section",Space,Str "is",Space,Str "like",Space,Str "a",Space,Str "Sect3."] +,Header 5 ("",[],[]) [Str "Like",Space,Str "a",Space,Str "Sect4"] +,Para [Str "This",Space,Str "section",Space,Str "is",Space,Str "like",Space,Str "a",Space,Str "Sect4."] +,Header 6 ("",[],[]) [Str "Like",Space,Str "a",Space,Str "Sect5"] +,Para [Str "This",Space,Str "section",Space,Str "is",Space,Str "like",Space,Str "a",Space,Str "Sect5."] +,Header 7 ("",[],[]) [Str "Would",Space,Str "be",Space,Str "like",Space,Str "a",Space,Str "Sect6"] +,Para [Str "This",Space,Str "section",Space,Str "would",Space,Str "be",Space,Str "like",Space,Str "a",Space,Str "Sect6,",Space,Str "if",Space,Str "there",Space,Str "was",Space,Str "one."] +,Header 8 ("",[],[]) [Str "Would",Space,Str "be",Space,Str "like",Space,Str "a",Space,Str "Sect7"] +,Para [Str "This",Space,Str "section",Space,Str "would",Space,Str "be",Space,Str "like",Space,Str "a",Space,Str "Sect7,",Space,Str "if",Space,Str "there",Space,Str "was",Space,Str "one."]] |