stempl

Simple template language written in python

git clone git://git.janzachar.dev/stempl.git


0from pathlib import Path
1import yaml
2import re
3
4from interpreter import Interpreter
5from parser import Parser
6from context import Context
7import lexer
8
9RE_FRONT_MATTER = re.compile(r"^---\s*\n(.*?)\n---\s*\n", re.DOTALL)
10
11class Page:
12    def __init__(self, path: Path, ctx: Context = None):
13        self.path = path
14        self.ctx = Context(ctx)
15
16        with open(self.path) as fp:
17            self.text = fp.read()
18
19        m = RE_FRONT_MATTER.match(self.text)
20
21        if not m:
22            return
23
24        fm_text = m.group(1)
25        self.ctx.data.update(yaml.safe_load(fm_text) or {})
26        self.text = self.text[m.end():]
27
28    def run(self):
29        lex = lexer.lex(self.text)
30        ast = Parser(lex).parse()
31        inter = Interpreter(ast, self.ctx)
32
33        return inter.interpret()
34
35