import os
import subprocess
import tempfile
+import re
from amara import bindery
from amara.xslt import transform
from Cheetah.Template import Template
-import treecutter.const as const
+from pkg_resources import resource_filename, resource_listdir
+from time import time
+import treecutter.constants as const
from treecutter.tools import mkdir_p
class Page():
self._rendered_article = art
def prepare(self):
- self._doc = bindery.parse(self._file, prefixes=PREFIXES)
+ self._doc = bindery.parse(self._file, prefixes=const.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)
+ cwd = os.getcwd()
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:
+ if ext in const.valid_scripts:
exe = []
- exe.append(os.path.join(os.path.abspath(dirname)+'/'+c.href))
+ script = os.path.join(os.path.abspath(dirname)+'/'+c.href)
+ if os.path.isfile(script):
+ exe.append(script)
+ else:
+ if c.href in resource_listdir('xinclude', ''):
+ script = resource_filename('xinclude', c.href)
+ exe.append(script)
+ else:
+ print "Script "+c.href+" in "+self._file+" missing"
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)
+ print " executing %15s" % (c.href),
+ ts = time()
+ os.chdir(dirname)
xml = subprocess.Popen(exe,stdout=subprocess.PIPE)
- xstr = bindery.parse(str(xml.stdout.read()))
+ os.chdir(cwd)
+ xmlblock = str(xml.stdout.read())
+ te = time()
+ print " [%5.2f s] (%s)" % (round(te-ts,2),c.xpointer)
+ xstr = bindery.parse(xmlblock)
idp = c.xml_index_on_parent
for x in xstr.xml_children:
c.xml_parent.xml_insert(idp,x)
if os.path.isfile(im):
self._resources.append(im)
- def render(self):
+ def render(self, style):
# amara can not handle the docbook stylesheets
# xmlarticle = transform(doc,style_xslt)
cwd = os.getcwd()
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]
+ cmd = ["xsltproc","--xinclude","--output",outfile,style+"docbook.xsl",infile]
retcode = subprocess.call(cmd)
if retcode:
print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']'
os.remove(outfile)
os.chdir(cwd)
- def template(self,sitemap):
+ def template(self,sitemap,style,tdir):
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',
+ template = Template(file=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))
+ outfile = tdir+'html'.join(self._file.rsplit('xml',1))
mkdir_p(os.path.dirname(outfile))
out = open(outfile, 'w')
out.write(str(template))