def html()

in lib/ramble/spack/cmd/list.py [0:0]


def html(pkg_names, out):
    """Print out information on all packages in Sphinx HTML.

    This is intended to be inlined directly into Sphinx documentation.
    We write HTML instead of RST for speed; generating RST from *all*
    packages causes the Sphinx build to take forever. Including this as
    raw HTML is much faster.
    """

    # Read in all packages
    pkgs = [spack.repo.get(name) for name in pkg_names]

    # Start at 2 because the title of the page from Sphinx is id1.
    span_id = 2

    # HTML header with an increasing id span
    def head(n, span_id, title, anchor=None):
        if anchor is None:
            anchor = title
        out.write(('<span id="id%d"></span>'
                   '<h1>%s<a class="headerlink" href="#%s" '
                   'title="Permalink to this headline">&para;</a>'
                   '</h1>\n') % (span_id, title, anchor))

    # Start with the number of packages, skipping the title and intro
    # blurb, which we maintain in the RST file.
    out.write('<p>\n')
    out.write('Spack currently has %d mainline packages:\n' % len(pkgs))
    out.write('</p>\n')

    # Table of links to all packages
    out.write('<table border="1" class="docutils">\n')
    out.write('<tbody valign="top">\n')
    for i, row in enumerate(rows_for_ncols(pkg_names, 3)):
        out.write('<tr class="row-odd">\n' if i % 2 == 0 else
                  '<tr class="row-even">\n')
        for name in row:
            out.write('<td>\n')
            out.write('<a class="reference internal" href="#%s">%s</a></td>\n'
                      % (name, name))
            out.write('</td>\n')
        out.write('</tr>\n')
    out.write('</tbody>\n')
    out.write('</table>\n')
    out.write('<hr class="docutils"/>\n')

    # Output some text for each package.
    for pkg in pkgs:
        out.write('<div class="section" id="%s">\n' % pkg.name)
        head(2, span_id, pkg.name)
        span_id += 1

        out.write('<dl class="docutils">\n')

        out.write('<dt>Homepage:</dt>\n')
        out.write('<dd><ul class="first last simple">\n')

        if pkg.homepage:
            out.write(('<li>'
                       '<a class="reference external" href="%s">%s</a>'
                       '</li>\n') % (pkg.homepage, escape(pkg.homepage, True)))
        else:
            out.write('No homepage\n')
        out.write('</ul></dd>\n')

        out.write('<dt>Spack package:</dt>\n')
        out.write('<dd><ul class="first last simple">\n')
        out.write(('<li>'
                   '<a class="reference external" href="%s">%s/package.py</a>'
                   '</li>\n') % (github_url(pkg), pkg.name))
        out.write('</ul></dd>\n')

        if pkg.versions:
            out.write('<dt>Versions:</dt>\n')
            out.write('<dd>\n')
            out.write(', '.join(
                str(v) for v in reversed(sorted(pkg.versions))))
            out.write('\n')
            out.write('</dd>\n')

        for deptype in spack.dependency.all_deptypes:
            deps = pkg.dependencies_of_type(deptype)
            if deps:
                out.write('<dt>%s Dependencies:</dt>\n' % deptype.capitalize())
                out.write('<dd>\n')
                out.write(', '.join(
                    d if d not in pkg_names else
                    '<a class="reference internal" href="#%s">%s</a>' % (d, d)
                    for d in deps))
                out.write('\n')
                out.write('</dd>\n')

        out.write('<dt>Description:</dt>\n')
        out.write('<dd>\n')
        out.write(escape(pkg.format_doc(indent=2), True))
        out.write('\n')
        out.write('</dd>\n')
        out.write('</dl>\n')

        out.write('<hr class="docutils"/>\n')
        out.write('</div>\n')