blob: 6edd973ba38add65e3fab85991f580e6025e8150 [file] [log] [blame]
Armin Ronacher0a1742e2007-03-03 21:58:44 +01001#!/usr/bin/env python
2"""
3 jinja webpage generator
4 ~~~~~~~~~~~~~~~~~~~~~~~
5"""
6import os
Armin Ronacher9356b7b2007-03-13 22:29:01 +01007import sys
8import re
Armin Ronacher0a1742e2007-03-03 21:58:44 +01009from codecs import open
10from jinja import Environment, FileSystemLoader
11from jinja.filters import stringfilter
12from pygments import highlight
13from pygments.lexers import get_lexer_by_name
14from pygments.formatters import HtmlFormatter
15
Armin Ronacher9356b7b2007-03-13 22:29:01 +010016_data_re = re.compile(
17 r'<!-- TITLE -->(?P<page_title>.*?)<!-- ENDTITLE -->.*?'
18 r'<!-- TOC -->(?P<page_toc>.*?)<!-- ENDTOC -->.*?'
19 r'<!-- BODY -->(?P<page_body>.*?)<!-- ENDBODY -->(?sm)'
20)
Armin Ronacher0a1742e2007-03-03 21:58:44 +010021
22formatter = HtmlFormatter(cssclass='syntax', encoding=None, style='pastie')
23
Armin Ronacher34a18bf2007-03-11 15:09:44 +010024env = Environment('<%', '%>', '<%=', '%>', loader=FileSystemLoader('.',
25 cache_folder='/tmp'), trim_blocks=True)
Armin Ronacher0a1742e2007-03-03 21:58:44 +010026env.filters['pygmentize'] = stringfilter(lambda v, l:
27 highlight(v.strip(), get_lexer_by_name(l), formatter))
28
29
30def get_files(folder):
31 for fn in os.listdir(folder):
32 fn = os.path.join(folder, fn)
33 if os.path.isdir(fn):
34 for item in get_files(fn):
35 yield item
36 elif fn.endswith('.tmpl'):
37 yield fn
38
39
Armin Ronacher9356b7b2007-03-13 22:29:01 +010040# generate static stuff
Armin Ronacher0a1742e2007-03-03 21:58:44 +010041for filename in get_files('.'):
42 root = './' + ''.join(['../' for _ in os.path.dirname(filename).
43 split(os.path.sep)[1:]])
44
45 t = env.get_template(filename)
46 f = open(filename[:-5] + '.html', 'w', 'utf-8')
47 f.write(t.render(
Armin Ronacher0a1742e2007-03-03 21:58:44 +010048 root=root
49 ))
50 f.close()
Armin Ronacher9356b7b2007-03-13 22:29:01 +010051 print filename
Armin Ronacher0a1742e2007-03-03 21:58:44 +010052
Armin Ronacher9356b7b2007-03-13 22:29:01 +010053# generate pygments stylesheet
Armin Ronacher0a1742e2007-03-03 21:58:44 +010054f = file('static/pygments.css', 'w')
55f.write(formatter.get_style_defs('.syntax'))
56f.close()
Armin Ronacher9356b7b2007-03-13 22:29:01 +010057
58# generate documentation
59os.system(sys.executable + ' ../docs/generate.py documentation true')
60
61# render documentation with documentation template
62tmpl = env.get_template('documentation/item.tmpl')
63
64for filename in os.listdir('documentation'):
65 if not filename.endswith('.html'):
66 continue
67 filename = 'documentation/' + filename
68 f = open(filename, 'r', 'utf-8')
69 try:
70 data = f.read()
71 finally:
72 f.close()
73 match = _data_re.search(data)
74 if match is None:
75 continue
76 data = match.groupdict()
77 data['page_toc'] = data['page_toc'].strip()
78 if data['page_toc'].count('</li') < 2:
79 data['page_toc'] = ''
80 f = open(filename, 'w', 'utf-8')
81 f.write(tmpl.render(
82 root='./../',
83 **data
84 ))
85 f.close()
86 print 'postprocessed', filename