diff options
| author | 2021-02-03 19:17:50 -0500 | |
|---|---|---|
| committer | 2021-02-03 19:17:50 -0500 | |
| commit | 475d074fd74425efbe783fad08f97f2df0c4909f (patch) | |
| tree | 2acdae53999b3c74b716efa4edb5b40311fa356a /scripts/jinjify.py | |
| parent | cd502d52787f666fff3254d7d7e7578930c813c2 (diff) | |
| parent | 3a0d66f07b112b6d2bdc2b57bbf717a89a351ce6 (diff) | |
Update upstream source from tag 'upstream/8.1.2'
Update to upstream version '8.1.2'
with Debian dir e5e966a9e6010ef70618dc9a61558fa4db35aceb
Diffstat (limited to 'scripts/jinjify.py')
| -rwxr-xr-x | scripts/jinjify.py | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/scripts/jinjify.py b/scripts/jinjify.py index 8f14323..629ffb1 100755 --- a/scripts/jinjify.py +++ b/scripts/jinjify.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +"""Script to convert templates from Mako to Jinja2.""" + import io import glob import sys @@ -8,11 +10,10 @@ import json import shutil import tempfile -import colorama import jinja2 dumb_replacements = [ - ["{% if any(post.is_mathjax for post in posts) %}", '{% if posts|selectattr("is_mathjax")|list %}'], + ["{% if any(post.has_math for post in posts) %}", '{% if posts|selectattr("has_math")|list %}'], ["json.dumps(title)", "title|tojson"], ["{{ parent.extra_head() }}", "{{ super() }}"], ["{{ parent.content() }}", "{{ super() }}"], @@ -22,6 +23,10 @@ dumb_replacements = [ ["fb: http://ogp.me/ns/fb# \\", "fb: http://ogp.me/ns/fb#"], ['dir="rtl" \\', 'dir="rtl"'], ['sorted(translations)', 'translations|sort'], + ['abs(i - current_page)', '(i - current_page)|abs'], + ['loop.index', 'loop.index0'], + ['is None', 'is none'], + ['is not None', 'is not none'], ] dumber_replacements = [ @@ -39,11 +44,11 @@ def jinjify(in_theme, out_theme): out_templates_path = os.path.join(out_theme, "templates") try: os.makedirs(out_templates_path) - except: + except Exception: pass lookup = jinja2.Environment() lookup.filters['tojson'] = json.dumps - lookup.loader = jinja2.FileSystemLoader([out_templates_path], encoding='utf-8') + lookup.loader = jinja2.FileSystemLoader([out_templates_path], encoding='utf-8-sig') for template in glob.glob(os.path.join(in_templates_path, "*.tmpl")): out_template = os.path.join(out_templates_path, os.path.basename(template)) with io.open(template, "r", encoding="utf-8") as inf: @@ -73,21 +78,17 @@ def jinjify(in_theme, out_theme): child = os.path.basename(out_theme.rstrip('/')) mappings = { 'base-jinja': 'base', - 'bootstrap3-jinja': 'base-jinja', + 'bootstrap4-jinja': 'base-jinja', } if child in mappings: parent = mappings[child] - with io.open(os.path.join(out_theme, "parent"), "w+", encoding='utf-8') as outf: - outf.write(u'{0}\n'.format(parent)) - - with io.open(os.path.join(out_theme, "engine"), "w+", encoding='utf-8') as outf: - outf.write(u"jinja\n") - - # Copy assets in bootstrap/bootstrap3 - if child == 'bootstrap3-jinja': - shutil.rmtree(os.path.join(out_theme, "assets")) + # Copy assets in bootstrap/bootstrap4 + if child == 'bootstrap4-jinja': + assets_dir = os.path.join(out_theme, "assets") + if os.path.exists(assets_dir): + shutil.rmtree(assets_dir) shutil.copytree( os.path.join(in_theme, "assets"), os.path.join(out_theme, "assets"), symlinks=True) @@ -101,7 +102,7 @@ def jinjify(in_theme, out_theme): def error(msg): - print(colorama.Fore.RED + "ERROR:" + msg) + print("\033[1;31mERROR: {0}\033[0m".format(msg)) def mako2jinja(input_file): @@ -110,7 +111,7 @@ def mako2jinja(input_file): # TODO: OMG, this code is so horrible. Look at it; just look at it: - macro_start = re.compile(r'(.*)<%.*def name="(.*?)".*>(.*)', re.IGNORECASE) + macro_start = re.compile(r'(.*)<%\s*def name="([^"]*?)"\s*>(.*)', re.IGNORECASE) macro_end = re.compile(r'(.*)</%def>(.*)', re.IGNORECASE) if_start = re.compile(r'(.*)% *if (.*):(.*)', re.IGNORECASE) @@ -160,6 +161,14 @@ def mako2jinja(input_file): if m_func_len: line = func_len.sub(r'\1|length', line) + # Macro start/end + m_macro_start = macro_start.search(line) + if m_macro_start: + line = m_macro_start.expand(r'\1{% macro \2 %}\3') + '\n' + m_macro_end = macro_end.search(line) + if m_macro_end: + line = m_macro_end.expand(r'\1{% endmacro %}\2') + '\n' + # Process line for single 'whole line' replacements m_macro_start = macro_start.search(line) m_macro_end = macro_end.search(line) @@ -180,11 +189,6 @@ def mako2jinja(input_file): if m_comment_single_line: output += m_comment_single_line.expand(r'{# \1 #}') + '\n' - elif m_macro_start: - output += m_macro_start.expand(r'\1{% macro \2 %}\3') + '\n' - elif m_macro_end: - output += m_macro_end.expand(r'\1{% endmacro %}\1') + '\n' - elif m_if_start: output += m_if_start.expand(r'\1{% if \2 %}\3') + '\n' elif m_if_else: @@ -228,7 +232,7 @@ def jinjify_shortcodes(in_dir, out_dir): data = mako2jinja(inf) with open(out_file, 'w') as outf: outf.write(data) - + def usage(): print("Usage: python {} [in-dir] [out-dir]".format(sys.argv[0])) @@ -240,7 +244,8 @@ if __name__ == "__main__": print('Performing standard conversions:') for m, j in ( ('nikola/data/themes/base', 'nikola/data/themes/base-jinja'), - ('nikola/data/themes/bootstrap3', 'nikola/data/themes/bootstrap3-jinja') + ('nikola/data/themes/bootstrap4', 'nikola/data/themes/bootstrap4-jinja'), + ('nikola/data/themes/bootblog4', 'nikola/data/themes/bootblog4-jinja'), ): print(' {0} -> {1}'.format(m, j)) jinjify(m, j) |
