X-Git-Url: https://source.tree.se/git?a=blobdiff_plain;f=treecutter%2Fpage.py;h=8843df975a45bf45204f5db7c1a3fe08b698341a;hb=b011c30d2ca867e3e68451c7a3bfced704216fc1;hp=a6c55025a59ac4b0fe223d0c05625065411bc300;hpb=cbc71d935810a88200aeeff34d0d7aaa56c81a71;p=treecutter.git diff --git a/treecutter/page.py b/treecutter/page.py old mode 100755 new mode 100644 index a6c5502..8843df9 --- a/treecutter/page.py +++ b/treecutter/page.py @@ -1,21 +1,19 @@ #!/usr/bin/python import os -import fnmatch import subprocess -import amara -import re import tempfile -import errno -import time -import argparse -import shutil -import pygraphviz as pgv -import glob -import gettext -import shutil -from amara import bindery -from amara.xslt import transform -from Cheetah.Template import Template +import re +import getpass +import gnupg +import codecs +from lxml import etree +from lxml.builder import ElementMaker +#from jinja2 import Template +import jinja2 +from time import time +import treecutter.constants as const +from treecutter.docbook import Docbook +from treecutter.tools import mkdir_p class Page(): """Class representing a version of a webpage""" @@ -42,81 +40,40 @@ class Page(): self._rendered_article = art def prepare(self): - self._doc = bindery.parse(self._file, prefixes=PREFIXES) - if self._doc.xml_select(u'/db:article/db:info/db:title'): - self._title = unicode(self._doc.article.info.title) - if self._doc.xml_select(u'/db:article/db:info/db:titleabbrev'): - self._menu = unicode(self._doc.article.info.titleabbrev) - - dirname = os.path.dirname(self._file) - code = self._doc.xml_select(u"//xi:include[@parse='text']") - if code: - for c in code: - (p, ext) = os.path.splitext(c.href) - if ext in valid_scripts: - exe = [] - exe.append(os.path.join(os.path.abspath(dirname)+'/'+c.href)) - if c.xml_select(u"//xi:include[@accept-language]"): - alang = c.xml_attributes[None, "accept-language"] - exe.append("lang="+alang) - if c.xml_select(u"//xi:include[@xpointer]"): - exe.append("xptr="+c.xpointer) - xml = subprocess.Popen(exe,stdout=subprocess.PIPE) - xstr = bindery.parse(str(xml.stdout.read())) - idp = c.xml_index_on_parent - for x in xstr.xml_children: - c.xml_parent.xml_insert(idp,x) - c.xml_parent.xml_remove(c) - - for r in self._doc.xml_select(u"//db:link[@xl:href]"): - rf = os.path.join(dirname,r.href) - if os.path.isfile(rf): - self._resources.append(rf) - for i in self._doc.xml_select(u"//db:imagedata[@fileref]"): - im = os.path.join(dirname,i.fileref) - if os.path.isfile(im): - self._resources.append(im) - for i in self._doc.xml_select(u"//html:form[@action]"): - pyscript = re.split('\.py',i.action,1)[0]+'.py' - im = os.path.join(dirname,pyscript) - if os.path.isfile(im): - self._resources.append(im) + self._doc = Docbook(self._file) + (self._title, self._menu) = self._doc.title() +# self._doc.expand_imageobjects() + self._doc.parse_xincludes() + doc = self._doc.collect_links() + img = self._doc.collect_images() + form= self._doc.collect_forms() + self._resources = doc + img + form - def render(self): - # amara can not handle the docbook stylesheets - # xmlarticle = transform(doc,style_xslt) - cwd = os.getcwd() - dirname = os.path.dirname(self._file) - os.chdir(dirname) - infile = os.path.basename(tempfile.mktemp()) - outfile = tempfile.mktemp() - tfi = open(infile,'w') - tfi.write(self._doc.xml_encode(omit_xml_declaration=True)) - tfi.close() -# cmd = ["saxon-xslt-xinclude","-o",outfile,infile,style_xslt] - cmd = ["xsltproc","--xinclude","--output",outfile,style_xslt,infile] - retcode = subprocess.call(cmd) - if retcode: - print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']' - tfo = open(outfile,'r') - self._rendered_article = tfo.read() - tfo.close() - os.remove(infile) - os.remove(outfile) - os.chdir(cwd) + def render(self, transform): + self._rendered_article = self._doc.xslt(transform['xhtml5']) - def template(self,sitemap): + def template(self,sitemap,style,tdir,subdir): htmlmenu = sitemap.gen_menu(self._lang,None,"menu") levelmenu = sitemap.gen_menu(self._lang,self,"tree") langmenu = sitemap.lang_menu(self._lang,self._link) - template = Template(file=args.style+'index.'+self._lang+'.html.tmpl', - searchList=[{'title':self._title}, - {'menu':htmlmenu}, - {'article':self._rendered_article}, - {'levelmenu':levelmenu}, - {'langmenu':langmenu}]) - outfile = tmptarget+'html'.join(self._file.rsplit('xml',1)) + article = self._rendered_article + templateLoader = jinja2.FileSystemLoader( searchpath="/" ) + templateEnv = jinja2.Environment( loader=templateLoader ) + + templateVars = {'title':self._title, + 'menu':htmlmenu, + 'article':article, + 'levelmenu':levelmenu, + 'langmen':langmenu, + 'subdir':subdir} + + s = unicode(style, "utf-8") + t = s+'index.'+self._lang+'.xhtml.tmpl' + template = templateEnv.get_template( t ) + templateout = template.render( templateVars ) + + outfile = tdir+'xhtml'.join(self._file.rsplit('xml',1)) mkdir_p(os.path.dirname(outfile)) - out = open(outfile, 'w') - out.write(str(template)) + out = codecs.open(outfile, 'w', 'utf-8') + out.write(templateout) out.close()