Closed PhilippMDoerner closed 1 year ago
Thanks a lot for reporting and for the reproducible example. Definitely a bug, will look into it and let you know!
Btw this is the code that needs to be looked at: https://github.com/pietroppeter/nimibook/blob/main/src/nimibook/renders.nim
Note to self when fixing:
reproducing the bug using doc render, will keep debugging later:
import nimibook / [tocs, renders]
let myToc = initToc:
entry("Should Be 1.", "book/bla.nim")
section("Should be 2", "book/internals.nim"):
section("Should be 2.1", "internals/adders.nim"):
entry("Should be 2.1.1", "adders/one_adder.nim")
entry("Should be 3.", "CONTRIBUTING.md")
echo myToc.render
#[
<ol class="chapter">
<li class="chapter-item expanded ">
<a href="{{path_to_root}}book/bla.html" tabindex="0"><strong aria-hidden="true">1.</strong> Should Be 1.</a>
</li>
<li class="chapter-item expanded ">
<a href="{{path_to_root}}book/internals.html" tabindex="0"><strong aria-hidden="true">2.</strong> Should be 2</a>
</li>
<li>
<ol class="section">
<li class="chapter-item expanded ">
<a href="{{path_to_root}}book/internals/adders.html" tabindex="0"><strong aria-hidden="true">2.1.</strong> Should be 2.1</a>
</li>
<li>
<ol class="section">
<li class="chapter-item expanded ">
<a href="{{path_to_root}}book/internals/adders/one_adder.html" tabindex="0"><strong aria-hidden="true">2.1.1.</strong> Should be 2.1.1</a>
</li>
</ol>
</li>
<li class="chapter-item expanded ">
<a href="{{path_to_root}}CONTRIBUTING.html" tabindex="0"><strong aria-hidden="true">3.</strong> Should be 3.</a>
</li>
</ol>
these two are missing from the output:
</li>
</ol>
]#
Yeah looks like it doesn't check at the end of a section block if it's about to end multiple section blocks at once and instead interprets the ending of two blocks ( the one for "Should be 2" and "Should be 2.1") as one block ending.
I played around with the setup a bit and if I write it like this for example it works (I didn't write this exact command, I wrote one for the owlkettle docs as that was faster to play around with, but this should do as well):
import nimibook
var book = initBookWithToc:
entry("Should Be 1.", "book/bla.nim")
section("Should be 2", "book/internals.nim"):
section("Should be 2.1", "internals/adders.nim"):
entry("Should be 2.1.1", "adders/one_adder.nim") # Block 1 ends with this
entry("Should be 2.2 and fix things", "book/bla2.nim") # Block 2 ends with this
entry("Should be 3.", "CONTRIBUTING.md")
nimibookCli(book)
indeed inside this else
section I think we should iterate over level differences to close the correct number of sections: https://github.com/pietroppeter/nimibook/blob/main/src/nimibook/renders.nim#LL57
will test a fix
Given this nbook:
Running these commands:
Generates this Sidebar:
The numbering is correct, but the indentation isn't. The indentation implies that "Should be 3" is a sub-entry of the section "Should be 3" instead of a sibling entry.
I assume the logic that generates HTML only goes back one indentation level instead of determining the correct indentation level.