commit
fbe572c5f4
|
@ -37,6 +37,35 @@ def depth_from(root: str, path: str) -> int:
|
|||
first = os.path.split(first)[0]
|
||||
return depth
|
||||
|
||||
def generate_toc(header_content, articles):
|
||||
"""given header_content and a list of dicts with keys title, href, and path this function
|
||||
generates the toc page's content"""
|
||||
|
||||
toc_content = '{}\n'.format(update_title(header_content, 'table of contents'))
|
||||
|
||||
toplevel_articles = [a for a in articles if a['path'] == '']
|
||||
articles = [a for a in articles if a['path'] != '']
|
||||
sorted(articles, key=lambda a: a['path'])
|
||||
toc_content += '<h1>Table of Contents</h1>\n'
|
||||
toc_content += '<h2>unsorted articles</h2>\n<ul>\n'
|
||||
for a in toplevel_articles:
|
||||
toc_content += '<li><a href="{}">{}</a></li>\n'.format(a['href'], a['title'])
|
||||
|
||||
seen = set()
|
||||
for article in articles:
|
||||
if article['path'] not in seen:
|
||||
path = article['path']
|
||||
components = path.split('/')
|
||||
hlvl = len(components) + 1
|
||||
toc_content += '</ul>'
|
||||
toc_content += f'<h{hlvl}>' + path.split('/')[-1] + f'</h{hlvl}>'
|
||||
toc_content += '<ul>'
|
||||
seen.add(path)
|
||||
toc_content += '<li><a href="{href}">{title}</a></li>'.format(**article)
|
||||
|
||||
toc_content += '</ul>'
|
||||
return toc_content
|
||||
|
||||
def compile_wiki(source_path: str,
|
||||
dest_path: str,
|
||||
on_create: Callable[[str], None]=DEFAULT_ON_CREATE) -> None:
|
||||
|
@ -60,7 +89,7 @@ def compile_wiki(source_path: str,
|
|||
|
||||
articles_root = os.path.join(source_path, 'src/articles')
|
||||
|
||||
toc_content = '{}\n<ul>'.format(update_title(header_content, 'table of contents'))
|
||||
articles = []
|
||||
|
||||
copy(logo_path, dest_path)
|
||||
copy(css_path, dest_path)
|
||||
|
@ -88,16 +117,17 @@ def compile_wiki(source_path: str,
|
|||
footer_content)
|
||||
output = relativize_links(output, depth)
|
||||
dest_filename = source_filename.split('.')[0] + '.html'
|
||||
toc_content += '<li><a href="{}">{}</a></li>\n'.format(
|
||||
os.path.join(current_suffix, dest_filename),
|
||||
os.path.join(current_suffix,dest_filename.split('.')[0]))
|
||||
articles.append({
|
||||
'title': dest_filename.split('.')[0],
|
||||
'href': os.path.join(current_suffix, dest_filename),
|
||||
'path': current_suffix})
|
||||
final_path = os.path.join(dest_root, dest_filename)
|
||||
with open(final_path, 'w') as f:
|
||||
f.write(output)
|
||||
on_create(final_path)
|
||||
|
||||
|
||||
toc_content += '\n</ul>'
|
||||
toc_content = generate_toc(header_content, articles)
|
||||
toc_path = os.path.join(dest_path, 'toc.html')
|
||||
with open(toc_path, 'w') as f:
|
||||
f.write(relativize_links(toc_content, 1))
|
||||
|
|
Loading…
Reference in New Issue