diff options
author | Tim Peters <tim.peters@gmail.com> | 2002-04-19 16:09:26 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2002-04-19 16:09:26 (GMT) |
commit | 52cfa33e6ee826fcc65e97bb56baf18699996612 (patch) | |
tree | 8bcbb4e969c98b934d634e15e4d6d5ce6b456835 /Doc/tools | |
parent | 7d4ed0db95dc6280f627739f03e426344734f917 (diff) | |
download | cpython-52cfa33e6ee826fcc65e97bb56baf18699996612.zip cpython-52cfa33e6ee826fcc65e97bb56baf18699996612.tar.gz cpython-52cfa33e6ee826fcc65e97bb56baf18699996612.tar.bz2 |
Generates inputs to the Microsoft Help Compiler, which creates compiled
HTML help files (.chm). Obtained from Robin Dunn's packaging of the
2.2 docs at <http://alldunn.com/python/>, obtained in turn from
Hernán Martínez Foffani's original work at
<http://www.orgmf.com.ar/condor/pytstuff.html>.
Diffstat (limited to 'Doc/tools')
-rw-r--r-- | Doc/tools/prechm.py | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/Doc/tools/prechm.py b/Doc/tools/prechm.py new file mode 100644 index 0000000..a196e79 --- /dev/null +++ b/Doc/tools/prechm.py @@ -0,0 +1,362 @@ +''' + Makes the necesary files to convert from plain html of + Python 1.5 and 1.5.x Documentation to + Microsoft HTML Help format version 1.1 + Doesn't change the html's docs. + + by hernan.foffani@iname.com + no copyright and no responsabilities. + + modified by Dale Nagata for Python 1.5.2 + + Renamed from make_chm.py to prechm.py, and checked into the Python + project, 19-Apr-2002 by Tim Peters. Assorted modifications by Tim + and Fred Drake. Obtained from Robin Dunn's .chm packaging of the + Python 2.2 docs, at <http://alldunn.com/python/>. +''' + +import sys +import os +import formatter +import htmllib +import string +import getopt + + + +# moved all the triple_quote up here because my syntax-coloring editor +# sucks a little bit. +usage_mode = ''' +Usage: make_chm.py [-c] [-k] [-p] [-v 1.5[.x]] filename + -c: does not build filename.hhc (Table of Contents) + -k: does not build filename.hhk (Index) + -p: does not build filename.hhp (Project File) + -v 1.5[.x]: makes help for the python 1.5[.x] docs + (default is python 1.5.2 docs) +''' + +# project file (*.hhp) template. there are seven %s +project_template = ''' +[OPTIONS] +Compatibility=1.1 +Compiled file=%s.chm +Contents file=%s.hhc +Default Window=%s +Default topic=index.html +Display compile progress=No +Full-text search=Yes +Index file=%s.hhk +Language=0x409 +Title=Python %s Documentation + +[WINDOWS] +%s="Python %s Documentation","%s.hhc","%s.hhk","index.html","index.html",\ +,,,,0x2520,220,0x384e,,,,,0,,, + +[FILES] +''' + +contents_header = ''' +<OBJECT type="text/site properties"> + <param name="Window Styles" value="0x801227"> +</OBJECT> +<UL> +<LI> <OBJECT type="text/sitemap"> + <param name="Name" value="Python %s Docs"> + <param name="Local" value="./index.html"> + </OBJECT> +<UL> +''' + +contents_footer = ''' +</UL></UL> +''' + +object_sitemap = ''' + <LI> <OBJECT type="text/sitemap"> + <param name="Local" value="%s"> + <param name="Name" value="%s"> + </OBJECT> +''' + +# Library Doc list of tuples: +# each 'book' : ( Dir, Title, First page, Content page, Index page) +# +supported_libraries = { + '2.2': ### Beta!!! fix for actual release + [ + ('.', 'Global Module Index', 'modindex.html', None, None), + ('tut','Tutorial','tut.html','node2.html',None), + ('lib','Library Reference','lib.html','contents.html','genindex.html'), + ('ref','Language Reference','ref.html','contents.html','genindex.html'), + ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'), + ('ext','Extending and Embedding','ext.html','contents.html',None), + ('api','Python/C API','api.html','contents.html','genindex.html'), + ('doc','Documenting Python','doc.html','contents.html',None), + ('inst','Installing Python Modules', 'inst.html', 'index.html', None), + ('dist','Distributing Python Modules', 'dist.html', 'index.html', None), + ], + + '2.1.1': + [ + ('.', 'Global Module Index', 'modindex.html', None, None), + ('tut','Tutorial','tut.html','node2.html',None), + ('lib','Library Reference','lib.html','contents.html','genindex.html'), + ('ref','Language Reference','ref.html','contents.html','genindex.html'), + ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'), + ('ext','Extending and Embedding','ext.html','contents.html',None), + ('api','Python/C API','api.html','contents.html','genindex.html'), + ('doc','Documenting Python','doc.html','contents.html',None), + ('inst','Installing Python Modules', 'inst.html', 'index.html', None), + ('dist','Distributing Python Modules', 'dist.html', 'index.html', None), + ], + + '2.0.0': + [ + ('.', 'Global Module Index', 'modindex.html', None, None), + ('tut','Tutorial','tut.html','node2.html',None), + ('lib','Library Reference','lib.html','contents.html','genindex.html'), + ('ref','Language Reference','ref.html','contents.html','genindex.html'), + ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'), + ('ext','Extending and Embedding','ext.html','contents.html',None), + ('api','Python/C API','api.html','contents.html','genindex.html'), + ('doc','Documenting Python','doc.html','contents.html',None), + ('inst','Installing Python Modules', 'inst.html', 'contents.html', None), + ('dist','Distributing Python Modules', 'dist.html', 'contents.html', None), + ], + + # <dnagata@creo.com> Apr 17/99: library for 1.5.2 version: + # <hernan.foffani@iname.com> May 01/99: library for 1.5.2 (04/30/99): + '1.5.2': + [ + ('tut','Tutorial','tut.html','node2.html',None), + ('lib','Library Reference','lib.html','contents.html','genindex.html'), + ('ref','Language Reference','ref.html','contents.html','genindex.html'), + ('mac','Macintosh Reference','mac.html','contents.html','genindex.html'), + ('ext','Extending and Embedding','ext.html','contents.html',None), + ('api','Python/C API','api.html','contents.html','genindex.html'), + ('doc','Documenting Python','doc.html','contents.html',None) + ], + + # library for 1.5.1 version: + '1.5.1': + [ + ('tut','Tutorial','tut.html','contents.html',None), + ('lib','Library Reference','lib.html','contents.html','genindex.html'), + ('ref','Language Reference','ref-1.html','ref-2.html','ref-11.html'), + ('ext','Extending and Embedding','ext.html','contents.html',None), + ('api','Python/C API','api.html','contents.html','genindex.html') + ], + + # library for 1.5 version: + '1.5': + [ + ('tut','Tutorial','tut.html','node1.html',None), + ('lib','Library Reference','lib.html','node1.html','node268.html'), + ('ref','Language Reference','ref-1.html','ref-2.html','ref-11.html'), + ('ext','Extending and Embedding','ext.html','node1.html',None), + ('api','Python/C API','api.html','node1.html','node48.html') + ] +} + +class AlmostNullWriter(formatter.NullWriter) : + savedliteral = '' + + def send_flowing_data(self, data) : + # need the text tag for later + datastriped = string.strip(data) + if self.savedliteral == '': + self.savedliteral = datastriped + else: + self.savedliteral = string.strip(self.savedliteral + + ' ' + datastriped) + + +class HelpHtmlParser(htmllib.HTMLParser) : + indent = 0 # number of tabs for pritty printing of files + ft = None # output file + path = None # relative path + proc = 0 # if true I process, if false I skip + # (some headers, footers, etc.) + + def begin_group(self) : + if not self.proc : + # first level, start processing + self.proc = 1 + self.indent = self.indent + 1 + + def finnish_group(self) : + self.indent = self.indent - 1 + if self.proc and self.indent == 0 : + # if processing and back to root, then stop + self.proc = 0 + + def anchor_bgn(self, href, name, type) : + if self.proc : + self.formatter.writer.savedliteral = '' + self.ft.write('<OBJECT type="text/sitemap">\n') + self.ft.write('\t' * self.indent + \ + '\t<param name="Local" value="' + self.path + \ + '/' + href + '">\n') + + def anchor_end(self) : + if self.proc : + self.ft.write('\t' * self.indent + \ + '\t<param name="Name" value="' + \ + self.formatter.writer.savedliteral + '">\n') + self.ft.write('\t' * self.indent + '\t</OBJECT>\n' ) + + def start_dl(self, atr_val) : + self.begin_group() + + def end_dl(self) : + self.finnish_group() + + def do_dt(self, atr_val) : + # no trailing newline on pourpose! + self.ft.write("\t" * self.indent + "<LI>") + + +class IdxHlpHtmlParser(HelpHtmlParser) : + # nothing special here, seems enough with parent class + pass + +class TocHlpHtmlParser(HelpHtmlParser) : + + def start_dl(self, atr_val) : + self.begin_group() + self.ft.write('\t' * self.indent + '<UL>\n') + + def end_dl(self) : + self.finnish_group() + self.ft.write('</UL>\n') + + def start_ul(self, atr_val) : + self.begin_group() + self.ft.write('\t' * self.indent + '<UL>\n') + + def end_ul(self) : + self.finnish_group() + self.ft.write('</UL>\n') + + def do_li(self, atr_val) : + # no trailing newline on pourpose! + self.ft.write("\t" * self.indent + "<LI>") + + +def index(path, archivo, output) : + f = formatter.AbstractFormatter(AlmostNullWriter()) + parser = IdxHlpHtmlParser(f) + parser.path = path + parser.ft = output + fil = path + '/' + archivo + parser.feed(open(fil).read()) + parser.close() + + +def content(path, archivo, output) : + f = formatter.AbstractFormatter(AlmostNullWriter()) + parser = TocHlpHtmlParser(f) + parser.path = path + parser.ft = output + fil = path + '/' + archivo + parser.feed(open(fil).read()) + parser.close() + + +def do_index(library, output) : + output.write('<UL>\n') + for book in library : + print '\t', book[2] + if book[4] : + index(book[0], book[4], output) + output.write('</UL>\n') + + +def do_content(library, version, output) : + output.write(contents_header % version) + for book in library : + print '\t', book[2] + output.write(object_sitemap % (book[0]+"/"+book[2], book[1])) + if book[3] : + content(book[0], book[3], output) + output.write(contents_footer) + + +def do_project( library, output, arch, version) : + output.write( project_template % \ + (arch, arch, arch, arch, version, arch, version, arch, arch) ) + for book in library : + for page in os.listdir(book[0]) : + if page[string.rfind(page, '.'):] == '.html' or \ + page[string.rfind(page, '.'):] == '.css': + output.write(book[0]+ '\\' + page + '\n') + + +def openfile(file) : + try : + p = open(file, "w") + except IOError, msg : + print file, ":", msg + sys.exit(1) + return p + +def usage() : + print usage_mode + sys.exit(0) + + + +def do_it(args = None) : + if not args : + args = sys.argv[1:] + + if not args : + usage() + + try : + optlist, args = getopt.getopt(args, 'ckpv:') + except getopt.error, msg : + print msg + usage() + + if not args or len(args) > 1 : + usage() + arch = args[0] + + version = None + for opt in optlist: + if opt[0] == '-v': + version = opt[1] + break + if not version: + usage() + + library = supported_libraries[ version ] + + if not (('-p','') in optlist) : + f = openfile(arch + '.hhp') + print "Building Project..." + do_project(library, f, arch, version) + if version == '2.0.0': + for image in os.listdir('icons'): + f.write('icons'+ '\\' + image + '\n') + + f.close() + + if not (('-c','') in optlist) : + f = openfile(arch + '.hhc') + print "Building Table of Content..." + do_content(library, version, f) + f.close() + + if not (('-k','') in optlist) : + f = openfile(arch + '.hhk') + print "Building Index..." + do_index(library, f) + f.close() + +if __name__ == '__main__' : + do_it() + + |