hpastetwo
recent
new
New Revision
#!/usr/bin/env python # Horribly hacked-together script to generate an HTML index page for # Haddock-generated Haskell package docs. Note that the docs # directory is hard-coded, below: see the comments there. import os import re import StringIO # This is the path to the docs. Any subdirectory which contains an # 'html/index.html' will get an entry in the index (all the other are # listed separately at the end). # The index is written to 'index.html' at this path. PATH = "/usr/local/share/doc" class Package: def __init__(self, name, path): self.name = name self.path = path self.title = self._seekTitle() def __cmp__(self, other): return cmp(self.name.lower(), other.name.lower()) def index(self): return os.path.join(self.path, 'html', 'index.html') titleRE = r'>.*: (.*)</TITLE' def _seekTitle(self): f = open(self.index()) d = f.read() f.close() m = re.search(self.titleRE, d) if not m: raise ValueError, "Can't extract title from %s" % self.index() return m.group(1) class Builder: def __init__(self, path): self.path = path libs = [l for l in os.listdir(self.path) if os.path.isdir(os.path.join(path, l))] self.has_html = [] self.no_html = [] for lib in libs: full = os.path.join(path, lib) if self.seek_html(full): self.has_html.append(Package(lib, full)) else: self.no_html.append((lib, full)) self.has_html.sort() p = os.path.join(path, 'index.html') o = open(p, 'w') o.write(self.html()) o.close() def html(self): s = StringIO.StringIO() s.write('<html>\n') s.write('<head>\n') s.write('<title>Local Haskell package docs (from Haddock)</title>\n') s.write(('<link rel="stylesheet" type="text/css" ' 'href="http://hackage.haskell.org/packages/hackage.css"/>\n')) s.write('</head>\n') s.write('<body>\n') s.write('<h2>Local packages with docs</h2>\n') split = self.splitAlpha() keys = split.keys() keys.sort() s.write('<p class="toc">\n') links = ['<a href="#%s">%s</a>' % (start, start) for start in keys] s.write(' • '.join(links)) s.write('</p>\n') for start in keys: packages = split[start] s.write('<h3 class="category"><a name="%s">%s</a></h3>\n' % (start, start)) s.write(' <ul class="packages">\n') for package in packages: s.write(' <li>') s.write('<a href="file://%s">' % package.path) s.write(package.name) s.write('</a>: %s</li>\n' % package.title) s.write(' </ul>\n') s.write('<hr />') s.write('<h2>Directories without HTML docs</h2>\n') s.write('<ul>\n') for (name, path) in self.no_html: s.write(' <li><a href="file://%s">%s</li>\n' % (path, name)) s.write('</ul>\n') s.write('</body>\n') s.write('</html>\n') h = s.getvalue() return h def splitAlpha(self): al = {} for package in self.has_html: start = package.name[0].upper() try: al[start].append(package) except KeyError: al[start] = [package] return al def seek_html(self, path): items = os.listdir(path) if 'html' not in items: return False html = os.path.join(path, 'html') if not os.path.isdir(html): return False return 'index.html' in os.listdir(html) if __name__ == '__main__': builder = Builder(PATH)
author
title
language
ActionScript
ActionScript 3
ApacheConf
AppleScript
BBCode
Bash
Batchfile
Befunge
Boo
Brainfuck
C
C#
C++
CSS
CSS+Django/Jinja
CSS+Genshi Text
CSS+Mako
CSS+Myghty
CSS+PHP
CSS+Ruby
CSS+Smarty
Cheetah
Clojure
Common Lisp
D
Darcs Patch
Debian Control file
Debian Sourcelist
Delphi
Diff
Django/Jinja
Dylan
ERB
Erlang
Fortran
GAS
Genshi
Genshi Text
Gettext Catalog
Gnuplot
Groff
HTML
HTML+Cheetah
HTML+Django/Jinja
HTML+Genshi
HTML+Mako
HTML+Myghty
HTML+PHP
HTML+Smarty
Haskell
INI
IRC logs
Io
Java
Java Server Page
JavaScript
JavaScript+Cheetah
JavaScript+Django/Jinja
JavaScript+Genshi Text
JavaScript+Mako
JavaScript+Myghty
JavaScript+PHP
JavaScript+Ruby
JavaScript+Smarty
LLVM
Lighttpd configuration file
Literate Haskell
Logtalk
Lua
MOOCode
Makefile
Makefile
Mako
Matlab
Matlab session
MiniD
MoinMoin/Trac Wiki markup
MuPAD
MySQL
Myghty
NASM
Nginx configuration file
NumPy
OCaml
Objective-C
PHP
POVRay
Perl
Python
Python 3
Python 3.0 Traceback
Python Traceback
Python console session
RHTML
Raw token data
Redcode
Ruby
Ruby irb session
S
SQL
Scala
Scheme
Smalltalk
Smarty
SquidConf
Tcl
Tcsh
TeX
Text only
VB.net
VimL
XML
XML+Cheetah
XML+Django/Jinja
XML+Mako
XML+Myghty
XML+PHP
XML+Ruby
XML+Smarty
XSLT
YAML
c-objdump
cpp-objdump
d-objdump
objdump
reStructuredText
sqlite3con
channel
none