Refactorization
This commit is contained in:
parent
60761df504
commit
a1dfccddfc
|
@ -101,36 +101,11 @@ def namespace_from(extension: type) -> dict:
|
|||
namespace[i] = extension[i]
|
||||
return namespace
|
||||
|
||||
def evaluate_content(match: re.Match, item: Item) -> str:
|
||||
global config
|
||||
|
||||
def evaluate_this(content: str, global_ns: dict) -> str:
|
||||
return re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}', partial(evaluate, global_ns=global_ns), content)
|
||||
|
||||
def evaluate(match: re.Match, global_ns: dict) -> str:
|
||||
match = match.group(1)
|
||||
|
||||
# prepare globals
|
||||
global_ns = namespace_from(apis.Content)
|
||||
|
||||
global_ns.update(config['variables'])
|
||||
global_ns['path'] = item.path
|
||||
global_ns.update(item.frontmatter_data)
|
||||
|
||||
return evaluate2(match, global_ns)
|
||||
|
||||
def evaluate_template(match: re.Match, item: Item, content: str) -> str:
|
||||
global config
|
||||
|
||||
match = match.group(1)
|
||||
|
||||
# prepare globals
|
||||
global_ns = namespace_from(apis.Content)
|
||||
|
||||
global_ns.update(config['variables'])
|
||||
global_ns['path'] = item.path
|
||||
global_ns.update(item.frontmatter_data)
|
||||
global_ns['content'] = content
|
||||
|
||||
return evaluate2(match, global_ns)
|
||||
|
||||
def evaluate2(match, global_ns):
|
||||
# this trick let the functions in apis.py access our environment
|
||||
apis.environment = global_ns
|
||||
# now let's execute the command!
|
||||
|
@ -184,10 +159,11 @@ if __name__ == '__main__':
|
|||
|
||||
item = Item(path)
|
||||
|
||||
# evaluate {python code} in braces in content files, pass frontmatter_data to the function
|
||||
content = re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}',
|
||||
partial(evaluate_content, item=item),
|
||||
item.content)
|
||||
namespace = namespace_from(apis.Content)
|
||||
namespace.update(config['variables'])
|
||||
namespace['path'] = item.path
|
||||
namespace.update(item.frontmatter_data)
|
||||
content = evaluate_this(item.content, namespace)
|
||||
|
||||
# load template
|
||||
if template := template_for(path):
|
||||
|
@ -196,10 +172,12 @@ if __name__ == '__main__':
|
|||
template_cache[template] = fp.read()
|
||||
template_data = template_cache[template]
|
||||
|
||||
# evaluate and apply template
|
||||
content = re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}',
|
||||
partial(evaluate_template, item=item, content=content),
|
||||
template_data)
|
||||
namespace = namespace_from(apis.Content)
|
||||
namespace.update(config['variables'])
|
||||
namespace['path'] = item.path
|
||||
namespace.update(item.frontmatter_data)
|
||||
namespace['content'] = content
|
||||
content = evaluate_this(template_data, namespace)
|
||||
|
||||
# TODO: do redirections
|
||||
# TODO: produce HTML version
|
||||
|
|
Reference in New Issue