Exemple #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()
Exemple #2
0
            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('+--------------------')