diff options
Diffstat (limited to 'main.py')
| -rwxr-xr-x | main.py | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/main.py b/main.py deleted file mode 100755 index 1bd3fc9..0000000 --- a/main.py +++ /dev/null @@ -1,171 +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_overview(): - src_file = "content/thoughts.md" - template_file = "thoughts.html.j2" - dst_file = "thoughts.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 = "my thoughts", - content = parse_text(f.read())[0] - ) - html_file.write(html) - - -def thoughts(): - src_path = "content/thoughts" - template_file = "thought.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 = file.replace("-", " ").replace(".md", ""), - content = parse_text(f.read())[0] - ) - html_file.write(html) - -def about(): - src_file = "content/about.md" - template_file = "about.html.j2" - dst_file = "about.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 = "about me", - 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") - shutil.copy("content/robots.txt", "static") - - index() - about() - thoughts_overview() - thoughts() - -if __name__ == '__main__': - main() |
