Example #1
0
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()
Example #2
0
                        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('&lt;<ref ref="section:tagref:element:%s">%s</ref>&gt;' % (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: