import tempfile
import errno
import time
+import argparse
from amara import bindery
from amara.xslt import transform
from Cheetah.Template import Template
-dist = "."
-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
pass
else: raise
+def publish(src,target):
+ cmd = ["rsync","-a",src,target]
+ retcode = subprocess.call(cmd)
+ if retcode:
+ print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']'
+
def generateSitemap():
sitemap = []
try:
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)))
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,
level=level)
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')
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:
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 = '<ul>\n'
for p in sm:
if slevel > p['level'] or elevel < p['level']:
(menu,menuname) = genMenu(page,sitemap,1,MAXLEVEL)
(levelmenu,levelname) = genMenu(page,sitemap,page['level'],page['level'])
template = Template(file=style_tmpl,
- searchList=[{'menu':menu},
+ searchList=[{'title':page['title']},
+ {'menu':menu},
{'article':doc},
{'levelmenu':levelmenu},
{'levelname':levelname}])
- outfile = outputdir+page['output']
- d = os.path.split(outfile)[0]
- if d != '':
- mkdir_p(d)
- out = open(outfile, 'w')
+ outfile = args.output+page['output']
+ out = open('result', 'w')
out.write(str(template))
+ out.close()
+ publish('result',outfile)
+ os.remove('result')
sitemap = generateSitemap()
for page in sitemap:
t1 = time.time()
- print "Page : "+page['link'],
+ print "Page : %-30s %30s" % (page['link'],
+ time.ctime(os.stat(page['file']).st_mtime)),
doc = expandXincludeTxt(page)
pubdoc = xsltConvert(doc)
writeToTemplate(page,pubdoc,sitemap)
-# publishResources()
+ publish(args.style+"css", args.output)
+ publish(args.style+"images",args.output)
t2 = time.time()
- print "["+str(round(t2-t1,2))+"] done."
-
-
+ print "[%5.2f s]" % (round(t2-t1,2))