Adding functionality to publish linked documents. link xlink:href and imagedata fileref.
authorFredrik Unger <fred@tree.se>
Mon, 21 Mar 2011 23:04:41 +0000 (00:04 +0100)
committerFredrik Unger <fred@tree.se>
Mon, 21 Mar 2011 23:04:41 +0000 (00:04 +0100)
src/tree-cutter.py

index 696c00aefe2d9caf7c2574b086d1cb822ee4be45..37ee80134b4a90f6a2ca3646479eff84e2faf170 100755 (executable)
@@ -8,6 +8,7 @@ import tempfile
 import errno
 import time
 import argparse
+import shutil
 from amara import bindery
 from amara.xslt import transform
 from Cheetah.Template import Template
@@ -56,10 +57,13 @@ def generateSitemap():
         xfile = os.path.join(dirname,filename)
         doc = bindery.parse(xfile,
                             prefixes={u'db': u'http://docbook.org/ns/docbook',
-                                      u'xi': u'http://www.w3.org/2001/XInclude'})
+                                      u'xi': u'http://www.w3.org/2001/XInclude',
+                                      u'xl': u'http://www.w3.org/1999/xlink'})
         title = doc.xml_select(u'/db:article/db:info/db:title')
         menu  = doc.xml_select(u'/db:article/db:info/db:titleabbrev')
         code  = doc.xml_select(u"//xi:include[@parse='text']")
+        resource = doc.xml_select(u"//db:link[@xl:href]")
+        image = doc.xml_select(u"//db:imagedata[@fileref]")
         exe = 0
         for c in code:
           (p, ext) = os.path.splitext(c.href)
@@ -71,12 +75,22 @@ def generateSitemap():
           base = xfile.split('.')[1]
           link = base.replace('index','')
           level = len(filter(None,re.split(r'(/\w*/)',link)))
+          res = []
+          for r in resource:
+              rf = os.path.join(dirname,r.href)
+              if os.path.isfile(rf):
+                  res.append(rf)
+          for i in image:
+              im = os.path.join(dirname,i.fileref)
+              if os.path.isfile(im):
+                  res.append(im)
           page = dict(title=unicode(doc.article.info.title),
                       menu=unicode(doc.article.info.titleabbrev),
                       output=os.path.join(dirname,
                                           filename.replace('xml','html')),
                       exe=exe,
                       file=xfile,
+                      res=res,
                       level=level)
           for l in sitemap:
             if l['link'] == link:
@@ -187,7 +201,9 @@ def writeToTemplate(page,doc,sitemap):
   out = open(outfile, 'w')
   out.write(str(template))
   out.close()
-
+  for r in page['res']:
+      mkdir_p(os.path.dirname(tmptarget+r))
+      shutil.copyfile(r, tmptarget+r)
 sitemap = generateSitemap()
 tmptarget = tempfile.mkdtemp()+'/'
 for page in sitemap: