Mercurial > hg > Members > taiki > slides
comparison seminar/io2012slides/scripts/md/render.py @ 3:fea44bb81877 default tip
many change
author | taiki |
---|---|
date | Tue, 10 Dec 2013 15:31:33 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:7f4128b2369a | 3:fea44bb81877 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 import codecs | |
4 import re | |
5 import jinja2 | |
6 import markdown | |
7 | |
8 def process_slides(): | |
9 with codecs.open('../../presentation-output.html', 'w', encoding='utf8') as outfile: | |
10 md = codecs.open('slides.md', encoding='utf8').read() | |
11 md_slides = md.split('\n---\n') | |
12 print 'Compiled %s slides.' % len(md_slides) | |
13 | |
14 slides = [] | |
15 # Process each slide separately. | |
16 for md_slide in md_slides: | |
17 slide = {} | |
18 sections = md_slide.split('\n\n') | |
19 # Extract metadata at the beginning of the slide (look for key: value) | |
20 # pairs. | |
21 metadata_section = sections[0] | |
22 metadata = parse_metadata(metadata_section) | |
23 slide.update(metadata) | |
24 remainder_index = metadata and 1 or 0 | |
25 # Get the content from the rest of the slide. | |
26 content_section = '\n\n'.join(sections[remainder_index:]) | |
27 html = markdown.markdown(content_section) | |
28 slide['content'] = postprocess_html(html, metadata) | |
29 | |
30 slides.append(slide) | |
31 | |
32 template = jinja2.Template(open('base.html').read()) | |
33 | |
34 outfile.write(template.render(locals())) | |
35 | |
36 def parse_metadata(section): | |
37 """Given the first part of a slide, returns metadata associated with it.""" | |
38 metadata = {} | |
39 metadata_lines = section.split('\n') | |
40 for line in metadata_lines: | |
41 colon_index = line.find(':') | |
42 if colon_index != -1: | |
43 key = line[:colon_index].strip() | |
44 val = line[colon_index + 1:].strip() | |
45 metadata[key] = val | |
46 | |
47 return metadata | |
48 | |
49 def postprocess_html(html, metadata): | |
50 """Returns processed HTML to fit into the slide template format.""" | |
51 if metadata.get('build_lists') and metadata['build_lists'] == 'true': | |
52 html = html.replace('<ul>', '<ul class="build">') | |
53 html = html.replace('<ol>', '<ol class="build">') | |
54 return html | |
55 | |
56 if __name__ == '__main__': | |
57 process_slides() |