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