Skip to content

Commit

Permalink
Enumerate ToC sidebar in HTML version, closes #55
Browse files Browse the repository at this point in the history
  • Loading branch information
timvink committed Mar 2, 2022
1 parent 11faed7 commit 58b4b76
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 4 deletions.
58 changes: 55 additions & 3 deletions mkdocs_print_site_plugin/renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,26 +202,78 @@ def get_toc_sidebar(self) -> TableOfContents:
"""
toc = []

if self.plugin_config.get("enumerate_headings"):
chapter_number = 0
section_number = 0

for item in self._get_items():
if item.is_page:
page_key = get_page_key(item.url)
# navigate to top of page if page is homepage
if page_key == "index":
page_key = ""
toc.append(AnchorLink(title=item.title, id=f"{page_key}", level=0))

if self.plugin_config.get("enumerate_headings"):
chapter_number += 1
title = f"{chapter_number}. {item.title}"
else:
title = item.title
toc.append(AnchorLink(title=title, id=f"{page_key}", level=0))

if item.is_section:

if self.plugin_config.get("enumerate_headings"):
section_number += 1
title = f"{int_to_roman(section_number)}. {item.title}"
else:
title = item.title

section_link = AnchorLink(
title=item.title, id=f"section-{to_snake_case(item.title)}", level=0
title=title, id=f"section-{to_snake_case(item.title)}", level=0
)

subpages = [p for p in item.children if p.is_page]
for page in subpages:
if self.plugin_config.get("enumerate_headings"):
chapter_number += 1
title = f"{chapter_number}. {page.title}"
else:
title = page.title

page_key = get_page_key(page.url)
section_link.children.append(
AnchorLink(title=page.title, id=f"{page_key}", level=1)
AnchorLink(title=title, id=f"{page_key}", level=1)
)

toc.append(section_link)

return TableOfContents(toc)



def int_to_roman(num):
"""
Integer to roman number.
Copied from https://www.w3resource.com/python-exercises/class-exercises/python-class-exercise-1.php
"""
lookup = [
(1000, 'M'),
(900, 'CM'),
(500, 'D'),
(400, 'CD'),
(100, 'C'),
(90, 'XC'),
(50, 'L'),
(40, 'XL'),
(10, 'X'),
(9, 'IX'),
(5, 'V'),
(4, 'IV'),
(1, 'I'),
]
res = ''
for (n, roman) in lookup:
(d, num) = divmod(num, n)
res += roman * d
return res
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

setup(
name="mkdocs-print-site-plugin",
version="2.3.1",
version="2.3.2",
description="MkDocs plugin that combines all pages into one, allowing for easy export to PDF and standalone HTML.",
long_description=long_description,
long_description_content_type="text/markdown",
Expand Down

0 comments on commit 58b4b76

Please sign in to comment.