Shared: Improve makeSections.

Previously it would sometimes create doubled section divs.
By leaving the inner heading's id on the heading itself, and
then consolidating the inner and outer section divs, we can
avoid this undesirable result.

Closes #11745.
This commit is contained in:
John MacFarlane
2026-07-07 20:58:33 +02:00
parent db7efddf74
commit f6edf03303
2 changed files with 41 additions and 6 deletions
+15 -6
View File
@@ -569,16 +569,25 @@ makeSectionsWithOffsets numoffsets numbering mbBaseLevel bs =
| all (\case
Header level' _ _ -> level' > level
_ -> True) ys
, "column" `notElem` dclasses
, "columns" `notElem` dclasses
, "fragment" `notElem` dclasses = do
, "section" `elem` dclasses
|| ("column" `notElem` dclasses &&
"columns" `notElem` dclasses &&
"fragment" `notElem` dclasses &&
"cell" `notElem` dclasses) = do
inner <- go (Header level hattr title':ys)
rest <- go xs
return $
case inner of
[Div divattr'@(dident',_,_) zs]
| T.null dident || T.null dident' || dident == dident'
-> Div (combineAttr divattr' divattr) zs : rest
[Div divattr'@(dident',_,_) zs@(Header level' hattr' title'' : zs')]
| dident == dident'
-> Div (combineAttr divattr' divattr) zs : rest
| (_,dclasses',dkvs) <- combineAttr divattr' divattr
, ("",hclasses,hkvs) <- hattr'
-> if T.null dident
then Div (dident',dclasses',dkvs) zs : rest
else Div (dident,dclasses',dkvs)
(Header level' (dident',hclasses,hkvs) title''
: zs') : rest
_ -> Div divattr inner : rest
go (Div attr xs : rest) = do
xs' <- go xs
+26
View File
@@ -0,0 +1,26 @@
```
% pandoc --section-divs
# Book Title
::: {#ch1 .section}
## Chapter 1
Hello world.
:::
::: {#ch2 .section}
## Chapter 2
Goodbye world.
:::
^D
<section id="book-title" class="level1">
<h1>Book Title</h1>
<section id="ch1" class="level2">
<h2 id="chapter-1">Chapter 1</h2>
<p>Hello world.</p>
</section>
<section id="ch2" class="level2">
<h2 id="chapter-2">Chapter 2</h2>
<p>Goodbye world.</p>
</section>
</section>
```