X-Git-Url: https://source.tree.se/git?a=blobdiff_plain;f=src%2Ftree-cutter.py;h=2a8e6106dc930b2eabf3a635e1ad65216385a339;hb=f59a147d8afc13c8f44eed10861837bd0a1fb208;hp=db93a6d0d0ef978392573e577bf5b5e8e6f1b037;hpb=96fb39acd9a96bdfdd046aa30fb71925da11f9d8;p=treecutter.git diff --git a/src/tree-cutter.py b/src/tree-cutter.py index db93a6d..2a8e610 100755 --- a/src/tree-cutter.py +++ b/src/tree-cutter.py @@ -7,15 +7,22 @@ import re import tempfile import errno import time +import argparse +import shutil from amara import bindery from amara.xslt import transform from Cheetah.Template import Template -dist = os.path.dirname(os.getcwd()) -style = "default" -style_xslt = dist+"/style/"+style+"/docbook.xsl" -style_tmpl = dist+"/style/"+style+"/index.html.tmpl" -outputdir = dist+"/htdocs/" +parser = argparse.ArgumentParser(description='Process docbook article tree.') +parser.add_argument('--style', nargs='?', + default=os.path.dirname(os.getcwd())+'/style/default/') +parser.add_argument('--output', nargs='?', + default=os.path.dirname(os.getcwd())+'/htdocs/') +args = parser.parse_args() + +style_xslt = args.style+"docbook.xsl" +style_tmpl = args.style+"index.en.html.tmpl" +outputdir = args.output valid_scripts = ['.py','.pl'] MAXLEVEL = 10000 @@ -28,6 +35,12 @@ def mkdir_p(path): pass else: raise +def publish(src,target): + cmd = ["rsync","-a","--delete",src,target] + retcode = subprocess.call(cmd) + if retcode: + print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']' + def generateSitemap(): sitemap = [] try: @@ -38,16 +51,20 @@ def generateSitemap(): sitemap.append(dict(link=f)) except IOError, what_error: print 'Sitemap missing - generating one.' + for dirname, dirnames, filenames in os.walk('.'): for filename in filenames: if fnmatch.fnmatch(filename, '*.xml'): 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) @@ -56,14 +73,25 @@ def generateSitemap(): if title and menu: found = 0 - base = os.path.splitext(xfile)[0] - link = base.translate(None,'.').replace('index','') + 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')), + 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: @@ -71,7 +99,7 @@ def generateSitemap(): l.update(page) if not found: print "adding "+link+" to sitemap" - dd = dict(link=link) + dd = dict(link=link) dd.update(page) sitemap.append(dd) sfile = open('sitemap.txt','w') @@ -81,8 +109,9 @@ def generateSitemap(): return sitemap def expandXincludeTxt(page): - doc = bindery.parse(page['file'],prefixes={u'db': u'http://docbook.org/ns/docbook', - u'xi': u'http://www.w3.org/2001/XInclude'}) + doc = bindery.parse(page['file'], + prefixes={u'db': u'http://docbook.org/ns/docbook', + u'xi': u'http://www.w3.org/2001/XInclude'}) if page['exe']: code = doc.xml_select(u"//xi:include[@parse='text']") for c in code: @@ -125,18 +154,17 @@ def genMenu(page,sitemap,slevel,elevel): title = None sm = [] if elevel == MAXLEVEL or elevel == 1: - sm = sitemap + sm = sitemap else: idx = sitemap.index(page) while (sitemap[idx]['level'] == page['level']): idx = idx-1 title = sitemap[idx]['menu'] idx = idx+1 - while (sitemap[idx]['level'] == page['level']): + while (idx < len(sitemap) and sitemap[idx]['level'] == page['level']): sm.append(sitemap[idx]) idx = idx+1 oldlevel = slevel - html = '