diff options
Diffstat (limited to 'blog')
| -rw-r--r-- | blog/blog.py | 3 | ||||
| -rw-r--r-- | blog/highlight.py | 23 | ||||
| -rw-r--r-- | blog/render.py | 14 |
3 files changed, 38 insertions, 2 deletions
diff --git a/blog/blog.py b/blog/blog.py index 4b9a345..8528b82 100644 --- a/blog/blog.py +++ b/blog/blog.py @@ -11,6 +11,7 @@ from jinja2 import Template, Environment, FileSystemLoader, select_autoescape from post import Post from feed import Feed from atom import Atom +from highlight import Highlight def recreate_workdir(basedir: str) -> None: @@ -44,6 +45,8 @@ def generate_blog() -> None: workdir = "remote" recreate_workdir(workdir) + Highlight.generate(workdir) + for post in posts: post.generate(workdir) diff --git a/blog/highlight.py b/blog/highlight.py new file mode 100644 index 0000000..e4d7b92 --- /dev/null +++ b/blog/highlight.py @@ -0,0 +1,23 @@ +import os +from typing import cast, Callable + +from pygments.formatters import HtmlFormatter + + +def get_style_defs() -> str: + # Workaround to avoid mypy to complain about untyped + # get_style_defs() call. + formatter = HtmlFormatter(style="bw") + selector = ".highlight" + f = cast(Callable[[str], str], formatter.get_style_defs) + return f(selector) + + +class Highlight(object): + @staticmethod + def generate(basedir: str) -> None: + highligh = os.path.join(basedir, "highlight.css") + + with open(highligh, mode='w') as f: + style = get_style_defs() + f.write(style) diff --git a/blog/render.py b/blog/render.py index ad06602..9cda36a 100644 --- a/blog/render.py +++ b/blog/render.py @@ -15,5 +15,15 @@ def write_file_content(filename: str, data: str) -> None: def to_html(filename: str) -> str: text = read_file_content(filename) - return markdown.markdown(text, extensions=["fenced_code", "footnotes", - TocExtension(anchorlink=True)]) + return markdown.markdown( + text, + extensions=[ + "fenced_code", + "footnotes", + "codehilite", + TocExtension(anchorlink=True) + ], + extension_configs={ + "codehilite": {"css_class": "highlight"} + }, + ) |