def makemacroref(outfile,docRoot,title): msg('Writing Macro reference to "%s"' % outfile) f = open(outfile,'wt') f.write('<?xml version="1.0" encoding="utf-8" ?>\n') f.write('<!DOCTYPE section>\n') f.write('<section id="chapter:macro-reference">') #f.write(' <head><title>Global macro reference</title></head>\n') f.write(' <head><title>%s</title></head>\n' % title) defitems = docRoot.documentElement.getMacroDefs() defs = [ d for k,d in defitems if isinstance(d,Nodes.DefNode) ] envs = [ d for k,d in defitems if isinstance(d,Nodes.DefEnvNode) ] defs.sort(lambda lhs,rhs: cmp(lhs.getAttr('m'),rhs.getAttr('m'))) envs.sort(lambda lhs,rhs: cmp(lhs.getAttr('m'),rhs.getAttr('m'))) defs = zip(defs,range(len(defs))) envs = zip(envs,range(len(envs))) if defs: deftabw = min(len(defs),8) f.write('<center>\n') f.write(' <table class="macro-ref-overview" cellhalign="%s">\n' % ' '.join(['left'] * deftabw)) collen = int(math.ceil(float(len(defs)) / deftabw)) cols = [ defs[i*collen:(i+1)*collen] for i in range(deftabw) ] if len(cols[-1]) < len(cols[0]): cols[-1] = cols[-1] + [None] * (len(cols[0]) - len(cols[-1])) for ds in zip(*cols): f.write(' <tr>') for d in ds: if d is not None: f.write('<td><ref ref="macro-ref:%d"><nx>\\%s</nx></ref></td>' % (d[1],d[0].macroName())) else: f.write('<td/>') f.write('</tr>\n') f.write(' </table>\n') f.write('</center>\n') if envs: deftabw = min(len(envs),8) f.write('<center>\n') f.write(' <table class="macro-ref-overview" cellhalign="%s">\n' % ' '.join(['left'] * deftabw)) collen = len(envs) / deftabw cols = [ envs[i*collen:(i+1)*collen] for i in range(deftabw) ] if len(cols[-1]) < len(cols[0]): cols[-1] = cols[-1] + [None] * (len(cols[0]) - len(cols[-1])) for ds in zip(*cols): f.write(' <tr>') for d in ds: if d is not None: f.write('<td><ref ref="macro-ref:%d"><nx>%s</nx></ref></td>' % (d[1],d[0].macroName())) else: f.write('<td/>') f.write('</tr>\n') f.write(' </table>\n') f.write('</center>\n') if defs: f.write(' <section id="section:macro-defs">\n') f.write(' <head><title>Macros</title></head>') f.write(' <dlist class="macro-ref-list">\n') for d,idx in defs: desc = d.getDescr() f.write('<dt class="macro-def-label" id="macro-ref:%d"><nx>\\%s</nx></dt>\n\n' % (idx,d.macroName())) f.write('<dd>\n') f.write(' <dlist class="macro-def-entry">\n') if desc: f.write(' <dt>Description:</dt><dd><nx>%s</nx> </dd>\n' % desc) filename,line = d.pos.filename,d.pos.line filename = os.path.basename(filename) f.write(' <dt>Defined at:</dt><dd>%s:%d</dd>\n' % (filename,line)) f.write(' <dt>Number of arguments:</dt> <dd>%d</dd>\n' % d.nArgs()) f.write(' <dt>Expands to:</dt><dd><pre>') f.write(xescape(d.docExpandMacro())) f.write('</pre></dd>') f.write(' </dlist>\n') f.write('</dd>\n') f.write(' </dlist>\n') f.write(' </section>\n') if envs: f.write(' <section id="section:macro-envs">\n') f.write(' <head><title>Macro Environments</title></head>') f.write(' <dlist class="macro-env-ref-list">\n') for d,idx in envs: desc = d.getDescr() f.write('<dt class="macro-def-label" id="env-ref:%d"><nx>\\begin{%s} ... \\end{%s}</nx></dt>\n\n' % (idx,d.macroName(),d.macroName()) ) f.write('<dd>\n') f.write(' <dlist class="macro-env-entry">\n') if desc: f.write(' <dt>Description:</dt><dd><nx> %s </nx></dd>\n' % desc) filename,line = d.pos.filename,d.pos.line filename = os.path.basename(filename) f.write(' <dt> Defined at:</dt><dd>%s:%d</dd>\n' % (filename,line)) f.write(' <dt> Number of arguments:</dt><dd> %d</dd>\n' % d.nArgs()) f.write(' <dt> Expands to:</dt><dd><pre>\n') f.write(escape(d.docExpandMacro())) f.write('</pre></dd>') f.write(' </dlist>\n') f.write('</dd>\n') f.write(' </dlist>\n') f.write(' </section>\n') f.write('</section>') f.close()
conf.update('macroref',args.pop(0)) elif arg == '-error:refs': conf.update('error:refs',args.pop(0)) elif arg == '-macroreftitle': conf.update('macroreftitle','"%s"' % args.pop(0)) elif arg == '-noerroronmissingrefs': conf.update('erroronmissingrefs',False) #elif arg == '-nodefaultinc': # conf.update('nodefaultinc',args.pop(0)) else: conf.update('infile',arg) outputfile = conf['outfile'] inputfile = conf['infile'] msg('Configuration:') msg('+--------------------') msg('| Output file: %s' % outputfile) msg('| Input file: %s' % inputfile) msg('| Reference doc file: %s' % conf['makedoc']) msg('| Macro reference file: %s' % conf['macroref']) msg('| Show error trace: %s' % conf['trace']) msg('| Include paths:') for p in conf['incpath']: msg('|\t%s' % p) msg('| Conditions:') for k,v in conf['define'].items(): msg('|\t%s = %s' % (k,v)) msg('+--------------------')