summaryrefslogtreecommitdiff
path: root/builder/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'builder/parser.py')
-rw-r--r--builder/parser.py46
1 files changed, 41 insertions, 5 deletions
diff --git a/builder/parser.py b/builder/parser.py
index 529d21fa..da3044a0 100644
--- a/builder/parser.py
+++ b/builder/parser.py
@@ -2,6 +2,8 @@ import os
import re
import glob
import mistune
+
+import s3
from paths import *
renderer = mistune.Renderer(escape=False)
@@ -12,7 +14,6 @@ def fix_images(lines, s3_path):
block = "\n\n".join(lines)
for line in block.split("\n"):
if "![" in line:
- print(line)
line = line.replace('![', '')
alt_text, tail = line.split('](', 1)
url, tail = tail.split(')', 1)
@@ -35,13 +36,26 @@ def format_section(lines, s3_path, type=''):
return "<section>" + markdown(lines) + "</section>"
return ""
-def parse_markdown(sections, s3_path):
+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 = []
+ seen_metadata = False
for section in sections:
- if section.startswith('# '):
+ if skip_h1 and section.startswith('# '):
continue
- if '![wide:' in section:
+ elif section.startswith('+ ') and not seen_metadata:
+ groups.append(format_section(current_group, s3_path))
+ groups.append(format_metadata(section))
+ current_group = []
+ seen_metadata = True
+ elif '![wide:' in section:
groups.append(format_section(current_group, s3_path))
groups.append(format_section([section], s3_path, type='wide'))
current_group = []
@@ -55,6 +69,23 @@ def parse_markdown(sections, 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()
@@ -74,6 +105,8 @@ default_metadata = {
'published': '2018-12-31',
'updated': '2018-12-31',
'authors': 'Adam Harvey',
+ 'sync': 'true',
+ 'tagline': '',
}
def parse_metadata_section(metadata, section):
@@ -117,12 +150,15 @@ def parse_metadata(fn, sections):
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(os.path.join(content_path, 'research/**/index.md'), recursive=True)):
+ 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