Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
class Generator:
def __init__(self, config, context):
self.config = config
self.context = context
def generate_context(self, pages, static_files):
# static_files
self.context['static_files'] = static_files
published_pages = []
for page in pages:
if page.status == "published":
published_pages.append(page)
# pages
all_pages = {}
for page in published_pages:
if page.lang not in all_pages:
all_pages[page.lang] = {}
if page.slug in all_pages[page.lang]:
raise Exception("duplicate language (",lang,") for slug '", slug ,"'")
all_pages[page.lang][page.slug] = page
self.context['pages'] = all_pages
# pages_modified
pages_modified = {}
for lang in self.config['lang']['supported']:
lang_pages = []
for page in published_pages:
if page.lang == lang:
lang_pages.append(page)
lang_pages.sort()
pages_modified[lang] = lang_pages
self.context['pages_modified'] = pages_modified
# TODO hidden pages
# TODO draft pages
# TODO authors
# categories
categories = {}
for page in published_pages:
if page.category not in categories:
categories[page.category] = {}
if page.lang not in categories[page.category]:
categories[page.category][page.lang] = []
categories[page.category][page.lang].append(page)
self.context['categories'] = categories
# tags
tags = {}
for page in published_pages:
for tag in page.tags:
if tag not in tags:
tags[tag] = {}
if page.lang not in tags[tag]:
tags[tag][page.lang] = []
tags[tag][page.lang].append(page)
self.context['tags'] = tags
def generate_homepage(self, writer, lang, path):
page = self.context['pages'][lang][self.config['theme']['homepage_slug']]
writer.write_template(page.template, path , lang, {'page': page})
def generate_output(self, writer):
for sf, raw in self.context['static_files'].items():
print ("writing binary file: ", sf)
writer.write_file(sf, raw, mode="wb")
for lang in self.config['lang']['supported']:
# all pages
for page in self.context['pages'][lang].values():
writer.write_template(page.template, page.url, lang, {'page': page})
# homepages for languages
self.generate_homepage(writer, lang, lang + "/index.html")
# homepage
self.generate_homepage(writer, self.config['lang']['default'], "index.html")