#!/usr/bin/env python import os import shutil import subprocess import glob import re import datetime import xml.dom.minidom import xml.dom out_base = os.path.join('build', 'ns') try: shutil.rmtree(out_base) except: pass os.makedirs(out_base) URIPREFIX = 'http://lv2plug.in/ns/' DOXPREFIX = 'http://lv2plug.in/ns/doc/html/' SPECGENDIR = './specgen' STYLEURI = os.path.join('aux', 'style.css') release_dir = os.path.join('build', 'spec') try: os.mkdir(release_dir) except: pass devnull = open(os.devnull, 'w') # Generate code (headers) documentation print "** Generating header documentation" #shutil.copy('Doxyfile', os.path.join('upload', 'Doxyfile')) print ' * Calling doxygen in ' + os.getcwd() subprocess.call('doxygen', stdout=devnull) # Rescue Doxygen tag file from XML hell # Return the content of the first child node with a certain tag name def getChildText(elt, tagname): elements = elt.getElementsByTagName(tagname) text = '' for e in elements: if e.parentNode == elt: text = e.firstChild.nodeValue return text return text tagdoc = xml.dom.minidom.parse('c_tags') root = tagdoc.documentElement bettertags = open('c_bettertags', 'w') for cn in root.childNodes: if cn.nodeType == xml.dom.Node.ELEMENT_NODE and cn.tagName == 'compound': if cn.getAttribute('kind') == 'page': continue name = getChildText(cn, 'name') filename = getChildText(cn, 'filename') bettertags.write('%s %s%s.html\n' % (name, DOXPREFIX, filename)) if cn.getAttribute('kind') == 'file': prefix = '' else: prefix = name + '::' members = cn.getElementsByTagName('member') for m in members: mname = prefix + getChildText(m, 'name') mafile = getChildText(m, 'anchorfile') manchor = getChildText(m, 'anchor') bettertags.write('%s %s%s#%s\n' % (mname, DOXPREFIX, \ mafile, manchor)) bettertags.close() print '** Generating core documentation' lv2_outdir = os.path.join(out_base, 'lv2core') os.mkdir(lv2_outdir) shutil.copy('core.lv2/lv2.h', lv2_outdir) shutil.copy('core.lv2/lv2.ttl', lv2_outdir) shutil.copy('core.lv2/manifest.ttl', lv2_outdir) shutil.copy('doc/index.php', lv2_outdir) def gendoc(specgen_dir, bundle_dir, ttl_filename, html_filename): subprocess.call([os.path.join(specgen_dir, 'lv2specgen.py'), os.path.join(bundle_dir, ttl_filename), os.path.join(specgen_dir, 'template.html'), STYLEURI, os.path.join(out_base, html_filename), os.path.join('..', '..'), '-i']) gendoc('./lv2specgen', 'core.lv2', 'lv2.ttl', 'lv2core/lv2core.html') footer = open('./lv2specgen/footer.html', 'r') # Generate main (ontology) documentation and indices for dir in ['ext', 'extensions']: print "** Generating %s%s documentation" % (URIPREFIX, dir) outdir = os.path.join(out_base, dir) shutil.copytree(dir, outdir, ignore = lambda src, names: '.svn') index_html = """ LV2 Extensions

LV2 Extensions

""" + URIPREFIX + dir + "/

\n
\n' index_html += '' index_html += '\n' index_file = open(os.path.join(outdir, 'index.html'), 'w') print >>index_file, index_html index_file.close() # Copy stylesheet try: os.mkdir(os.path.join('build', 'aux')) except: pass shutil.copy('lv2specgen/style.css', os.path.join('build', STYLEURI)) devnull.close() footer.close()