diff options
| author | yuzu-eva <stevenhu@web.de> | 2024-10-25 21:46:28 +0200 |
|---|---|---|
| committer | yuzu-eva <stevenhu@web.de> | 2024-10-25 21:46:28 +0200 |
| commit | 15fc4c739ae07421c0ce1bed9fc05403312a2e86 (patch) | |
| tree | 57654afde34a3974288d7e5a10f9e2a18d6f4d2d /generate.py | |
| parent | c06148152be80a6536cfe59f7ffe7356bdf75f3c (diff) | |
added about page, changed css, added navbar
Diffstat (limited to 'generate.py')
| -rwxr-xr-x | generate.py | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/generate.py b/generate.py deleted file mode 100755 index 65e6ef6..0000000 --- a/generate.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 - -from pygments import highlight -from pygments.lexers import get_lexer_by_name -from pygments.formatters import HtmlFormatter -from urllib.parse import urlparse - -import urllib.parse -import lxml.html -import mistune -import houdini -import jinja2 -import shutil -import os - -ENV = jinja2.Environment(loader=jinja2.FileSystemLoader('templates')) - -class MyRenderer(mistune.HTMLRenderer): - def block_code(self, code, info=None): - if not info: - return '\n<pre><code>{}</code></pre>\n'.format(houdini.escape_html(code.strip())) - lexer = get_lexer_by_name(info, stripall=True) - formatter = HtmlFormatter() - return highlight(code, lexer, formatter) - - def block_quote(self, content): - content = content[3:-5] - out = '\n<blockquote>' - for line in houdini.escape_html(content.strip()).split("\n"): - out += '\n<span class="quote">{}</span><br>'.format(line) - return out + '\n</blockquote>' - - def image(self, link, text, title): - return "<a href='%s' target='_blank'><img alt='%s' src='%s'></a>" % ( - urlparse(link)._replace(query='').geturl(), text, link - ) - - def heading(self, text, level): - hash_ = urllib.parse.quote_plus(text) - return "<h%d id='%s'>%s <a class='header_linker' href='#%s'>[#]</a></h%d>\n" % ( - level, hash_, text, hash_, level - ) - -def parse_file(path): - with open(path, "r") as f: - unformatted = f.read() - - return parse_text(unformatted)[0] - -def parse_text(unformatted): - md = mistune.create_markdown( - renderer = MyRenderer(), - plugins = ["strikethrough", "table", "url", "task_lists", "def_list"] - ) - html = md(unformatted) - if html == "": - return "", "" - - return html, get_headers(html) - -def get_headers(html): - root = lxml.html.fromstring(html) - - headers = [] - thesmallestlevel = 7 - for node in root.xpath('//h1|//h2|//h3|//h4|//h5//h6'): - level = int(node.tag[-1]) - if level < thesmallestlevel: - thesmallestlevel = level - headers.append(( - urllib.parse.unquote_plus(node.attrib["id"]), - level, - "#%s" % node.attrib["id"]) - ) - - headers = [(i[0], i[1] - thesmallestlevel, i[2]) for i in headers] - md_template = jinja2.Template(""" -{% for text, depth, link in contents -%} - {{ " " * depth }} - [{{ text }}]({{ link }}) -{% endfor %} - """) - - return mistune.html(md_template.render(contents = headers)) - -def index(): - src_file = "content/index.md" - template_file = "index.html.j2" - dst_file = "index.html" - - template = ENV.get_template(template_file) - - with open(os.path.join('static/%s' % dst_file), 'w') as html_file: - with open(src_file, "r") as f: - html = template.render( - prefix = "./", - title = "eva's site", - content = parse_text(f.read())[0] - ) - html_file.write(html) - -def thoughts(): - src_path = "content/thoughts" - template_file = "thoughts.html.j2" - dst_path = "static/thoughts" - - template = ENV.get_template(template_file) - - if not os.path.isdir(dst_path): - os.mkdir(dst_path) - - for file in os.listdir(src_path): - dst_file = file.replace(".md", ".html") - with open(os.path.join(dst_path, dst_file), 'w') as html_file: - with open(os.path.join(src_path, file), 'r') as f: - html = template.render( - prefix = "../", - title = "eva's site :: thoughts", - content = parse_text(f.read())[0] - ) - html_file.write(html) - -def main(): - if os.path.isdir("static"): - shutil.rmtree("static") - os.mkdir("static") - - shutil.copytree("content/styles", "static/styles") - shutil.copytree("content/images", "static/images") - - index() - thoughts() - -if __name__ == '__main__': - main() |
