docbook: expand image objects per page
[treecutter.git] / treecutter / page.py
1 #!/usr/bin/python
2 import os
3 import subprocess
4 import tempfile
5 import re
6 import getpass
7 import gnupg
8 import codecs
9 from lxml import etree
10 from lxml.builder import ElementMaker
11 #from jinja2 import Template
12 import jinja2
13 from time import time
14 import treecutter.constants as const
15 from treecutter.docbook import Docbook
16 from treecutter.tools import mkdir_p
17
18 class Page():
19     """Class representing a version of a webpage"""
20     def __init__(self,link,page):
21         self._link = link
22         self._file = page[1]
23         self._lang = page[0]
24         self._doc = None
25         self._resources = []
26         self._title = None
27         self._menu = None
28         self._rendered_article = None
29
30     def language(self):
31         return self._lang
32
33     def resources(self):
34         return set(self._resources)
35
36     def menu(self):
37         return self._menu
38
39     def set_article(self,art):
40         self._rendered_article = art
41
42     def prepare(self):
43         self._doc = Docbook(self._file)
44         (self._title, self._menu) = self._doc.title()
45         self._doc.expand_imageobjects()
46         self._doc.parse_xincludes()
47         doc = self._doc.collect_links()
48         img = self._doc.collect_images()
49         form= self._doc.collect_forms()
50         self._resources = doc + img + form
51
52     def render(self, transform):
53         self._rendered_article = self._doc.xslt(transform['xhtml5'])
54
55     def template(self,sitemap,style,tdir,subdir):
56         htmlmenu =  sitemap.gen_menu(self._lang,None,"menu")
57         levelmenu = sitemap.gen_menu(self._lang,self,"tree")
58         langmenu = sitemap.lang_menu(self._lang,self._link)
59         article = self._rendered_article
60         templateLoader = jinja2.FileSystemLoader( searchpath="/" )
61         templateEnv = jinja2.Environment( loader=templateLoader )
62
63         templateVars = {'title':self._title,
64                         'menu':htmlmenu,
65                         'article':article,
66                         'levelmenu':levelmenu,
67                         'langmen':langmenu,
68                         'subdir':subdir}
69
70         s = unicode(style, "utf-8")
71         t = s+'index.'+self._lang+'.xhtml.tmpl'
72         template = templateEnv.get_template( t )
73         templateout = template.render( templateVars )
74
75         outfile = tdir+'xhtml'.join(self._file.rsplit('xml',1))
76         mkdir_p(os.path.dirname(outfile))
77         out = codecs.open(outfile, 'w', 'utf-8')
78         out.write(templateout)
79         out.close()