diff options
Diffstat (limited to 'builder/parser.py')
| -rw-r--r-- | builder/parser.py | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/builder/parser.py b/builder/parser.py deleted file mode 100644 index dd3643bf..00000000 --- a/builder/parser.py +++ /dev/null @@ -1,172 +0,0 @@ -import os -import re -import glob -import mistune - -import s3 -from paths import * - -renderer = mistune.Renderer(escape=False) -markdown = mistune.Markdown(renderer=renderer) - -def fix_images(lines, s3_path): - real_lines = [] - block = "\n\n".join(lines) - for line in block.split("\n"): - if " - url, tail = tail.split(')', 1) - if ':' in alt_text: - tail, alt_text = alt_text.split(':', 1) - img_tag = "<img src='{}' alt='{}'>".format(s3_path + url, alt_text.replace("'", "")) - if len(alt_text): - line = "<div class='image'>{}<div class='caption'>{}</div></div>".format(img_tag, alt_text) - else: - line = "<div class='image'>{}</div>".format(img_tag, alt_text) - real_lines.append(line) - return "\n".join(real_lines) - -def format_section(lines, s3_path, type=''): - if len(lines): - lines = fix_images(lines, s3_path) - if type: - return "<section class='{}'>{}</section>".format(type, markdown(lines)) - else: - return "<section>" + markdown(lines) + "</section>" - return "" - -def format_metadata(section): - meta = [] - for line in section.split('\n'): - key, value = line[2:].split(': ', 1) - meta.append("<div><div class='gray'>{}</div><div>{}</div></div>".format(key, value)) - return "<section><div class='meta'>{}</div></section>".format(''.join(meta)) - -def parse_markdown(sections, s3_path, skip_h1=False): - groups = [] - current_group = [] - for section in sections: - if skip_h1 and section.startswith('# '): - continue - elif section.startswith('+ '): - groups.append(format_section(current_group, s3_path)) - groups.append(format_metadata(section)) - current_group = [] - elif '![wide:' in section: - groups.append(format_section(current_group, s3_path)) - groups.append(format_section([section], s3_path, type='wide')) - current_group = [] - elif '![' in section: - groups.append(format_section(current_group, s3_path)) - groups.append(format_section([section], s3_path, type='images')) - current_group = [] - else: - current_group.append(section) - groups.append(format_section(current_group, s3_path)) - content = "".join(groups) - return content - -def parse_research_index(research_posts): - content = "<div class='research_index'>" - for post in research_posts: - s3_path = s3.make_s3_path(s3_site_path, post['path']) - if 'image' in post: - post_image = s3_path + post['image'] - else: - post_image = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' - row = "<a href='{}'><section class='wide'><img src='{}' alt='Research post' /><section><h1>{}</h1><h2>{}</h2></section></section></a>".format( - post['path'], - post_image, - post['title'], - post['tagline']) - content += row - content += '</div>' - return content - -def read_metadata(fn): - with open(fn, "r") as file: - data = file.read() - data = data.replace("\n ", "\n") - if "\n" in data: - data = data.replace("\r", "") - else: - data = data.replace("\r", "\n") - sections = data.split("\n\n") - return parse_metadata(fn, sections) - -default_metadata = { - 'status': 'published', - 'title': 'Untitled Page', - 'desc': '', - 'slug': '', - 'published': '2018-12-31', - 'updated': '2018-12-31', - 'authors': 'Adam Harvey', - 'sync': 'true', - 'tagline': '', -} - -def parse_metadata_section(metadata, section): - for line in section.split("\n"): - if ': ' not in line: - continue - key, value = line.split(': ', 1) - metadata[key.lower()] = value - -def parse_metadata(fn, sections): - found_meta = False - metadata = {} - valid_sections = [] - for section in sections: - if not found_meta and ': ' in section: - found_meta = True - parse_metadata_section(metadata, section) - continue - if '-----' in section: - continue - if found_meta: - valid_sections.append(section) - - if 'title' not in metadata: - print('warning: {} has no title'.format(fn)) - for key in default_metadata: - if key not in metadata: - metadata[key] = default_metadata[key] - - basedir = os.path.dirname(fn.replace(content_path, '')) - basename = os.path.basename(fn) - if basedir == '/': - metadata['path'] = '/' - metadata['url'] = '/' - elif basename == 'index.md': - metadata['path'] = basedir + '/' - metadata['url'] = metadata['path'] - else: - metadata['path'] = basedir + '/' - metadata['url'] = metadata['path'] + basename.replace('.md', '') + '/' - - if metadata['status'] == 'published|draft|private': - metadata['status'] = 'published' - - metadata['sync'] = metadata['sync'] != 'false' - - metadata['author_html'] = '<br>'.join(metadata['authors'].split(',')) - return metadata, valid_sections - -def read_research_post_index(): - posts = [] - for fn in sorted(glob.glob('../site/content/research/*/index.md')): - metadata, valid_sections = read_metadata(fn) - if metadata is None or metadata['status'] == 'private' or metadata['status'] == 'draft': - continue - posts.append(metadata) - if not len(posts): - posts.append({ - 'title': 'Placeholder', - 'slug': 'placeholder', - 'date': 'Placeholder', - 'url': '/', - }) - return posts - |
