diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-09-05 22:22:07 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-09-05 22:37:13 -0700 |
commit | 345b33762eb4cc6d57d74c76c4757a6166ee5c13 (patch) | |
tree | 78fc9d1448645c40bf2328e30e5fa91cd8d24377 /src/Text/Pandoc | |
parent | 0534258780d495971bdae995c60002e231fe112a (diff) | |
download | pandoc-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.
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r-- | src/Text/Pandoc/Shared.hs | 19 |
1 files changed, 15 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' |