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()
syntax = [] for o in re.finditer(r'([^<]+)|<([a-z]*)>',n.contIter.strip()): if o.group(1): syntax.append(o.group(1)) else: elm = o.group(2) syntax.append('<<ref ref="section:tagref:element:%s">%s</ref>>' % (elm,elm)) else: syntax = [ 'EMPTY' ] r.append(' <dd><tt>%s</tt></dd>' % ''.join(syntax)) for desc,e in n.examples: r.append(' <dt>Example:</dt>\n') r.append(' <dd>%s\n<pre>' % desc) r.append(escape(e)) r.append('</pre> </dd>') r.append(' </dlist>') r.append('</section>') r.append('</section>') P.setEntityResolver(manager.getEntityResolver()) P.setDTDHandler(dtdhandler()) msg('Writing MoTeX reference to "%s"' % makedoc) try: os.makedirs(os.path.dirname(makedoc)) except OSError: