import pathlib import re import jinja2 from markdown.core import Markdown from markdown.extensions import Extension from markdown.preprocessors import Preprocessor from obsidian_parser import Vault root_dir = pathlib.Path(__file__).parent vault = Vault(root_dir.parent / "content") note = vault.get_note("Biokemi/Cellulära processer/Transport över cellmembran/Anteckningar.md") loader = jinja2.FileSystemLoader(root_dir / "templates") env = jinja2.Environment(loader=loader) class ObsidianImage(Preprocessor): def run(self, lines): new_lines = [] for line in lines: m = re.search(r"!\[\[(.*)\]\]", line) if m: if "|" in m.group(1): img, width = m.group(1).split("|") new_lines.append("") else: new_lines.append("") else: new_lines.append(line) return new_lines class ObsidianImageExtension(Extension): def extendMarkdown(self, md): md.preprocessors.register(ObsidianImage(md), 'obsidianimage', 175) m = Markdown( extensions=[ "mdx_math", "nl2br", ObsidianImageExtension(), ], extension_configs={ "mdx_math": { "enable_dollar_delimiter": True } }, tab_length=2, ) env.filters["markdown"] = m.convert output = root_dir / "test.html" template = env.get_template("base.html") def out_content(self): content = note.content if content.startswith("---\n"): content = content.split("---\n", 2)[2] return content note.__class__.our_content = property(out_content) with output.open("w", encoding="utf-8") as f: data = template.render(note=note, vault=vault) f.write(data) import webbrowser webbrowser.open(output.as_uri()) print(f"Written to {output}")