aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2019-09-05 22:22:07 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2019-09-05 22:37:13 -0700
commit345b33762eb4cc6d57d74c76c4757a6166ee5c13 (patch)
tree78fc9d1448645c40bf2328e30e5fa91cd8d24377
parent0534258780d495971bdae995c60002e231fe112a (diff)
downloadpandoc-345b33762eb4cc6d57d74c76c4757a6166ee5c13.tar.gz
Shared.hierarchicalize: improve handling of div and section structure.
Previously Divs were opaque to hierarchicalize, so headings inside divs didn't get into the table of contents, for example (#3057). Now hierarchicalize treats Divs as sections when appropriate. For example, these structures both yield a section and a subsection: ``` html <div> <h1>one</h1> <div> <h2>two</h2> </div> </div> ``` ``` html <div> <h1>one</h1> <div> <h1>two</h1> </div> </div> ``` Note that ``` html <h1>one</h1> <div> <h2>two</h2> </div> <h1>three</h1> ``` gets parsed as the structure one two three which may not always be desirable. Closes #3057.
-rw-r--r--src/Text/Pandoc/Shared.hs19
-rw-r--r--test/command/3057.md54
2 files changed, 69 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index 7c3546f44..949f53a3a 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -523,10 +523,21 @@ hierarchicalizeWithIds (Header level attr@(_,classes,_) title':xs) = do
sectionContents' <- hierarchicalizeWithIds sectionContents
rest' <- hierarchicalizeWithIds rest
return $ Sec level newnum attr title' sectionContents' : rest'
-hierarchicalizeWithIds (Div ("refs",classes',kvs')
- (Header level (ident,classes,kvs) title' : xs):ys) =
- hierarchicalizeWithIds (Header level (ident,"references":classes,kvs)
- title' : Div ("refs",classes',kvs') xs : ys)
+hierarchicalizeWithIds (Div attr@(_,classes',_)
+ (Header level (_,classes,_) title' : xs):ys)
+ | not ("columns" `elem` classes')
+ , not ("column" `elem` classes') = do
+ lastnum <- S.get
+ let lastnum' = take level lastnum
+ let newnum = case length lastnum' of
+ x | "unnumbered" `elem` classes -> []
+ | x >= level -> init lastnum' ++ [last lastnum' + 1]
+ | otherwise -> lastnum ++
+ replicate (level - length lastnum - 1) 0 ++ [1]
+ unless (null newnum) $ S.put newnum
+ sectionContents' <- hierarchicalizeWithIds xs
+ rest' <- hierarchicalizeWithIds ys
+ return $ Sec level newnum attr title' sectionContents' : rest'
hierarchicalizeWithIds (x:rest) = do
rest' <- hierarchicalizeWithIds rest
return $ Blk x : rest'
diff --git a/test/command/3057.md b/test/command/3057.md
new file mode 100644
index 000000000..b1f3a8c2e
--- /dev/null
+++ b/test/command/3057.md
@@ -0,0 +1,54 @@
+```
+% pandoc -f markdown -t docbook
+<div>
+# one
+<div>
+## two
+</div>
+</div>
+^D
+<section>
+ <title>one</title>
+ <section>
+ <title>two</title>
+ <para>
+ </para>
+ </section>
+</section>
+```
+
+```
+% pandoc -f markdown -t docbook
+<div>
+# one
+<div>
+# two
+</div>
+</div>
+^D
+<section>
+ <title>one</title>
+ <section>
+ <title>two</title>
+ <para>
+ </para>
+ </section>
+</section>
+```
+
+```
+% pandoc -f markdown -t docbook
+# one
+<div>
+# two
+</div>
+^D
+<section xml:id="one">
+ <title>one</title>
+ <section>
+ <title>two</title>
+ <para>
+ </para>
+ </section>
+</section>
+```