blob: 55d659b4e6c4394245b7af228e0d19ef43818401 [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 Ronacher1560b622007-03-22 14:36:38 +010016
Armin Ronacher9356b7b2007-03-13 22:29:01 +010017_data_re = re.compile(
18 r'<!-- TITLE -->(?P<page_title>.*?)<!-- ENDTITLE -->.*?'
19 r'<!-- TOC -->(?P<page_toc>.*?)<!-- ENDTOC -->.*?'
20 r'<!-- BODY -->(?P<page_body>.*?)<!-- ENDBODY -->(?sm)'
21)
Armin Ronacher0a1742e2007-03-03 21:58:44 +010022
23formatter = HtmlFormatter(cssclass='syntax', encoding=None, style='pastie')
24
Armin Ronacher34a18bf2007-03-11 15:09:44 +010025env = Environment('<%', '%>', '<%=', '%>', loader=FileSystemLoader('.',
26 cache_folder='/tmp'), trim_blocks=True)
Armin Ronacher0a1742e2007-03-03 21:58:44 +010027env.filters['pygmentize'] = stringfilter(lambda v, l:
28 highlight(v.strip(), get_lexer_by_name(l), formatter))
29
30
31def get_files(folder):
32 for fn in os.listdir(folder):
33 fn = os.path.join(folder, fn)
34 if os.path.isdir(fn):
35 for item in get_files(fn):
36 yield item
37 elif fn.endswith('.tmpl'):
38 yield fn
39
40
Armin Ronacher9356b7b2007-03-13 22:29:01 +010041# generate static stuff
Armin Ronacher0a1742e2007-03-03 21:58:44 +010042for filename in get_files('.'):
43 root = './' + ''.join(['../' for _ in os.path.dirname(filename).
44 split(os.path.sep)[1:]])
45
46 t = env.get_template(filename)
47 f = open(filename[:-5] + '.html', 'w', 'utf-8')
48 f.write(t.render(
Armin Ronacher0a1742e2007-03-03 21:58:44 +010049 root=root
50 ))
51 f.close()
Armin Ronacher9356b7b2007-03-13 22:29:01 +010052 print filename
Armin Ronacher0a1742e2007-03-03 21:58:44 +010053
Armin Ronacher9356b7b2007-03-13 22:29:01 +010054# generate pygments stylesheet
Armin Ronacher0a1742e2007-03-03 21:58:44 +010055f = file('static/pygments.css', 'w')
56f.write(formatter.get_style_defs('.syntax'))
57f.close()
Armin Ronacher9356b7b2007-03-13 22:29:01 +010058
59# generate documentation
60os.system(sys.executable + ' ../docs/generate.py documentation true')
61
62# render documentation with documentation template
63tmpl = env.get_template('documentation/item.tmpl')
64
65for filename in os.listdir('documentation'):
66 if not filename.endswith('.html'):
67 continue
68 filename = 'documentation/' + filename
69 f = open(filename, 'r', 'utf-8')
70 try:
71 data = f.read()
72 finally:
73 f.close()
74 match = _data_re.search(data)
75 if match is None:
76 continue
77 data = match.groupdict()
78 data['page_toc'] = data['page_toc'].strip()
79 if data['page_toc'].count('</li') < 2:
80 data['page_toc'] = ''
81 f = open(filename, 'w', 'utf-8')
82 f.write(tmpl.render(
83 root='./../',
84 **data
85 ))
86 f.close()
87 print 'postprocessed', filename