discuss: Thread: Man pages converted to HTML


[<<] [<] Page 1 of 2 [>] [>>]
Subject: Man pages converted to HTML
From: Sam Varshavchik ####@####.####
Date: 22 May 2007 23:15:33 -0000
Message-Id: <cone.1179875732.707399.31598.500@commodore.email-scan.com>

When, the other day, I went looking for HTML-formatted Linux man pages, all 
that I found were a couple of sites that offered mildly dressed-up nroff 
output. The result looked somewhat bland to me, and a bit hard on the eyes. 
I didn't look extensively, but I couldn't find any obvious links to download 
the HTML-formatted collections for offline browsing.

That seemed to me like a rather sad state of affairs, so I'm happy to report 
a modest accomplishment. Converting ancient troff to modern, readable HTML, 
is certainly not easy, but it turned out to be generally doable. On 
http://manpages.courier-mta.org you'll find the latest version of LDP's core 
man page set, as browsable HTML or a downloadable tarball (please use a 
torrent).

Instead of LDP's stock section 1 collection, I've replaced it with man pages 
from the most recent version of util-linux and GNU coreutils, to get a 
better match for what you'd find in most distros.  I'll try to convert other 
sets of man pages, as time permits.  I've temporarily omitted 3p, since 
Posix's copyright file seems to require inclusion of the original 'roff 
source in any derivative work.  I'll need to figure out how to square away 
that requirement, in my build scripts, first.


--> -->
 
 
<type 'exceptions.IOError'>
Python 2.5.2: /usr/bin/python
Fri Jul 5 16:33:16 2024

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

 /opt/ezmlm-browse-0.20/<string> in ()
 /opt/ezmlm-browse-0.20/main.py in main()
  424 
  425         if path is not None:
  426                 main_path(path)
  427         else:
  428                 main_form()
global main_form = <function main_form at 0x8e3fc6c>
 /opt/ezmlm-browse-0.20/main.py in main_form()
  378         except ImportError:
  379                 die(ctxt, "Invalid command")
  380         module.do(ctxt)
  381 
  382 def main():
module = <module 'commands.showthread' from '/opt/ezmlm-browse-0.20/commands/showthread.pyc'>, module.do = <function do at 0x8e42fb4>, global ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}
 /opt/ezmlm-browse-0.20/commands/showthread.py in do(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'})
    9         ctxt.update(ezmlm.thread(ctxt[THREADID]))
   10         header(ctxt, 'Thread: ' + ctxt[SUBJECT], 'showthread')
   11         do_list(ctxt, 'msgs', ctxt[MSGSPERPAGE], ctxt[MESSAGES],
   12                         lambda:sub_showmsg(ctxt, ctxt[MSGNUM]))
   13         footer(ctxt)
global sub_showmsg = <function sub_showmsg at 0x8e3f1ec>, ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, global MSGNUM = 'msgnum'
 /opt/ezmlm-browse-0.20/globalfns.py in do_list(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, name='msgs', perpage=10, values=[{'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '22 May 2007 23:15:33 -0000', 'month': 200705, 'msgnum': 10353, 'subject': u'Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1179875733.0}, {'author': u'David Lawyer', 'authorid': 'claiepedajakajhoajgg', 'date': '28 May 2007 07:56:18 -0000', 'month': 200705, 'msgnum': 10355, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1180338978.0}, {'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '28 May 2007 13:28:27 -0000', 'month': 200705, 'msgnum': 10356, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1180358907.0}, {'author': u'David Lawyer', 'authorid': 'claiepedajakajhoajgg', 'date': '28 May 2007 23:03:10 -0000', 'month': 200705, 'msgnum': 10357, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1180393390.0}, {'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '29 May 2007 11:04:53 -0000', 'month': 200705, 'msgnum': 10358, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1180436693.0}, {'author': u'David Lawyer', 'authorid': 'claiepedajakajhoajgg', 'date': '30 May 2007 22:05:32 -0000', 'month': 200705, 'msgnum': 10359, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1180562732.0}, {'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '12 Jun 2007 00:54:30 -0000', 'month': 200706, 'msgnum': 10363, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1181609670.0}, {'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '12 Jun 2007 22:30:16 -0000', 'month': 200706, 'msgnum': 10364, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1181687416.0}, {'author': u'Sam Varshavchik', 'authorid': 'efnhgfakkkdlpfbcfkgp', 'date': '14 Jun 2007 01:46:20 -0000', 'month': 200706, 'msgnum': 10365, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1181785580.0}, {'author': u'Sergiusz Pawlowicz', 'authorid': 'lapblejjgaalkeidnfij', 'date': '14 Jun 2007 09:22:08 -0000', 'month': 200706, 'msgnum': 10366, 'subject': u'Re: Man pages converted to HTML', 'threadid': 'lefcifndijdjoepemjjb', 'timestamp': 1181812928.0}], peritem=<function <lambda> at 0x8e490d4>)
  128                 write(template % ctxt)
  129                 if peritem:
  130                         peritem()
  131                 ctxt[ROW] += 1
  132 
peritem = <function <lambda> at 0x8e490d4>
 /opt/ezmlm-browse-0.20/commands/showthread.py in ()
    9         ctxt.update(ezmlm.thread(ctxt[THREADID]))
   10         header(ctxt, 'Thread: ' + ctxt[SUBJECT], 'showthread')
   11         do_list(ctxt, 'msgs', ctxt[MSGSPERPAGE], ctxt[MESSAGES],
   12                         lambda:sub_showmsg(ctxt, ctxt[MSGNUM]))
   13         footer(ctxt)
global sub_showmsg = <function sub_showmsg at 0x8e3f1ec>, ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, global MSGNUM = 'msgnum'
 /opt/ezmlm-browse-0.20/globalfns.py in sub_showmsg(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, msgnum=10353)
  229         format_timestamp(ctxt, ctxt)
  230         write(html('msg-header') % ctxt)
  231         rec_showpart(ctxt, msg, 0)
  232         write(html('msg-footer') % ctxt)
  233         ctxt.pop()
global rec_showpart = <function rec_showpart at 0x8e3f1b4>, ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, msg = <email.message.Message instance at 0x8e9de4c>
 /opt/ezmlm-browse-0.20/globalfns.py in rec_showpart(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, part=<email.message.Message instance at 0x8e9de4c>, partnum=1)
  205                 else:
  206                         for p in part.get_payload():
  207                                 partnum = rec_showpart(ctxt, p, partnum+1)
  208         else:
  209                 write(html('msg-sep') % ctxt)
partnum = 1, global rec_showpart = <function rec_showpart at 0x8e3f1b4>, ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, p = <email.message.Message instance at 0x8ea490c>
 /opt/ezmlm-browse-0.20/globalfns.py in rec_showpart(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, part=<email.message.Message instance at 0x8ea490c>, partnum=2)
  208         else:
  209                 write(html('msg-sep') % ctxt)
  210                 sub_showpart(ctxt, part)
  211         return partnum
  212 
global sub_showpart = <function sub_showpart at 0x8e3f144>, ctxt = {'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, part = <email.message.Message instance at 0x8ea490c>
 /opt/ezmlm-browse-0.20/globalfns.py in sub_showpart(ctxt={'row': 0, 'cmd': 'showthread', 'charset': 'utf-...HTTP_ACCEPT_ENCODING': 'gzip, br, zstd, deflate'}, part=<email.message.Message instance at 0x8ea490c>)
  164         type = ctxt[TYPE] = part.get_content_type()
  165         ctxt[FILENAME] = part.get_filename()
  166         template = html('msg-' + type.replace('/', '-'))
  167         if not template:
  168                 template = html('msg-' + type[:type.find('/')])
global template = <function template at 0x8e37e9c>, global html = <function html at 0x8e37ed4>, type = 'application/pgp-signature', type.replace = <built-in method replace of str object at 0x8ea2d78>
 /opt/ezmlm-browse-0.20/globalfns.py in html(name='msg-application-pgp-signature')
   40 
   41 def html(name):
   42         return template(name + '.html')
   43 
   44 def xml(name):
global template = <function template at 0x8e37e9c>, name = 'msg-application-pgp-signature'
 /opt/ezmlm-browse-0.20/globalfns.py in template(filename='msg-application-pgp-signature.html')
   31         except IOError:
   32                 if not _template_zipfile:
   33                         _template_zipfile = zipfile.ZipFile(sys.argv[0])
   34                 try:
   35                         f = _template_zipfile.open(n).read()
global _template_zipfile = None, global zipfile = <module 'zipfile' from '/usr/lib/python2.5/zipfile.pyc'>, zipfile.ZipFile = <class zipfile.ZipFile at 0x8dd0a7c>, global sys = <module 'sys' (built-in)>, sys.argv = ['-c', '/opt/ezmlm-browse-0.20']
 /usr/lib/python2.5/zipfile.py in __init__(self=<zipfile.ZipFile instance at 0x8e9deac>, file='-c', mode='r', compression=0, allowZip64=False)
  337             self.filename = file
  338             modeDict = {'r' : 'rb', 'w': 'wb', 'a' : 'r+b'}
  339             self.fp = open(file, modeDict[mode])
  340         else:
  341             self._filePassed = 1
self = <zipfile.ZipFile instance at 0x8e9deac>, self.fp = None, builtin open = <built-in function open>, file = '-c', modeDict = {'a': 'r+b', 'r': 'rb', 'w': 'wb'}, mode = 'r'

<type 'exceptions.IOError'>: [Errno 2] No such file or directory: '-c'
      args = (2, 'No such file or directory')
      errno = 2
      filename = '-c'
      message = ''
      strerror = 'No such file or directory'