#! /usr/bin/python # -*- encoding: UTF-8 -*- ########################################################################### # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # ########################################################################### # # latex2html.py # # (c) copyright by Eckhart Arnold, Free Software under the GPL 2 License # www.eckhartarnold.de # # This script converts LaTeX documents into HTML documents. # Call latex2html.py without any paramters to see a list of options # # Version: 0.16 (15.8.2010) # # WARNING: This program has hardly been tested and will most probably # not work as expected! # # TODO: Support for mathematical formulars and MathML # import sys import os import time import string import re # Globals and predefined constants PROJECT_TITLE = "title ?" TOC_TITLE = "Table of Contents" BIBLIOGRAPHY_TITLE = "Bibliography" AUTHOR_STR = "Author" DATE_STR = "Date" AUTHOR = "author ?" REFERENCE = "reference to author ?" # don't edit! this is being used later PDFURL = "" # url of a PDF version of the document SLIDESURL = "" # url of a presentation related to the document DESCRIPTION = "description ?" KEYWORDS = "keywords ?" DATE = time.strftime("%Y-%m-%dT%H:%M:%S+01:00", time.localtime(time.time())) LANG = "en" INDEX_FILE = "" CHAPTERNUMBERING_DEPTH = 3 # Tiefe bis zu der die Kapitelnummerierung angezeigt wird DESTINATION_NAME = "destination ?" ENDING = ".html" CONVERTEPS = True # convert postscript images to bitmap images images = { "next.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x19\x00\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x06\x03\x05\x07\xff\xc4\x00\x18\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x03\x04\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xb6\xed\xeaU*\xbc\xfd\xed\x15/|s\x84\xc0?\xff\xc4\x00\x1c\x10\x00\x03\x00\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x05\x01\x00\x06\x10\x13\x14\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xbd]\x89\x8f\xa1]V\xb1\xad\xf6\xe0|\xf2eSs*\x0b\xa1b\xa8\xa9O\xc7\xff\xc4\x00\x17\x11\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01 "\xff\xda\x00\x08\x01\x03\x01\x01?\x01U\xc5\xce?\xff\xc4\x00\x1b\x11\x00\x01\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x01\x11!\x02\x101\xff\xda\x00\x08\x01\x02\x01\x01?\x01\x10\x81\x90$\xb4\x9f\xb4\xa7_\xff\xc4\x00&\x10\x00\x01\x02\x03\x08\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x03\x00\x11\x12\x04\x10\x13\x14!1AQ"BRS\x81\xff\xda\x00\x08\x01\x01\x00\x06?\x02dp\xc7.\xe0\xe8R\xf6\xea\x13\xcb\x0c\xba]\xae\x0b\x01J\xb2Z\xe7\xf1\x846C.\xd7\xd8\xe7?\x90\xdb5\xa9\xd0\x92\x9a\xf3\x02\xfb\xb6v\xcd\xc1\xd8\x94uK\xff\x00\xff\xc4\x00\x1d\x10\x01\x00\x01\x04\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00\x10!A1Qaq\xff\xda\x00\x08\x01\x01\x00\x01?!i\xb6A)\x0eWX\x8a\x08J\xed\xcb\xe3`\x88\xc0\xd7 \xe2=i\\.\x88\x87\x9bR\xa0\x81\xda\xa1\xa8\xf89\x0b\xff\x00\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10s\xdf\xbc\xff\xc4\x00\x1c\x11\x00\x01\x03\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x10\x11!1AQ\x91\xff\xda\x00\x08\x01\x03\x01\x01?\x10\xce{\x06\xddBb\xaa\x1b\xff\xc4\x00\x1c\x11\x01\x00\x01\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x10\x111q!A\xc1\xff\xda\x00\x08\x01\x02\x01\x01?\x10\xce\x9fI\x97g\xad\xb7\x08!\\\x8axZ\x7f\xff\xc4\x00\x1f\x10\x01\x00\x01\x04\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!1AQ\x81\x10aq\xa1\xff\xda\x00\x08\x01\x01\x00\x01?\x10rG\x96\x08H\x13`\xce[5\x1f\xcd\x00\xa9\xc6\x1e\x98}QrJ\xc9\xeb]4[\xc9%\xb4<\xd4\x1dm]\xfa>\xf0R>\xcaP\x81\x98\xd7\xcd\x15\x7f\xbd\xf6\x89\x81NU\xa0\x82\x0cx\xff\xd9', "prev.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x19\x00\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x07\x02\x06\xff\xc4\x00\x17\x01\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x05\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xd7<\x0c\xb9\xd6\xbc\xdb\xfb\xb6M\x12\xd4\x13\xb0\x03\xff\xc4\x00\x1b\x10\x00\x03\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x05\x06\x00\x01\x11\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xa6\x84\xce\x17\xec\x9e\x14\xdd\xb0\xa7\xd9\xf0\xd6X\xe8XPd\x92\xc1j\xb9L\xd3\xd4\x00"\x01\xff\xc4\x00\x19\x11\x00\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x03\x10q\xff\xda\x00\x08\x01\x03\x01\x01?\x01\xb5\x9cr\r\xff\xc4\x00\x1d\x11\x00\x00\x05\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x041\x03\x10!"a\xff\xda\x00\x08\x01\x02\x01\x01?\x01cM\xa9\x96\xd9W`*o\xff\xc4\x00$\x10\x00\x02\x01\x04\x00\x05\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x00\x04\x11\x12\x10\x14!1a2Qq\x81\xd1\xff\xda\x00\x08\x01\x01\x00\x06?\x02\xdei\x15\x07\x9a\xd2\xd2?\xb6\xfc\xa8\xdaa\x89\n\x8d\x87\x9a\xe6\xac\xe7\x04\x85\xc1\x89\xbb\x1f\x8aA{nb\x91[!d\xa5\x91=,28iq\nJ\xbe\xcc3A\x10\x05Q\xd0\x01_\xff\xc4\x00\x1d\x10\x01\x00\x02\x02\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11Aq!1Q\x10a\xff\xda\x00\x08\x01\x01\x00\x01?!\xd9\xf9w\xa30yw5U\xae\xa0@\xb0\x0cS\x98\x18\x05n\xa8\xf5\x86\x19\xdb\x01B\x9e=;\x885\x8d\xbf\x1f\x99\x8f\x94\xe9\x05H\xd0P\x13\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10g\xff\x00\xbe\xff\xc4\x00\x19\x11\x00\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001\x00\x01\x10!Q\xff\xda\x00\x08\x01\x03\x01\x01?\x10\x15Zb\x82\x7f\xff\xc4\x00\x1c\x11\x00\x02\x02\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!Qa1A\x81\xff\xda\x00\x08\x01\x02\x01\x01?\x10z\xd4\x14n\x86\xf1g\xc8\xce\xc2\xbe1\x01 \xb1\tvg\xff\xc4\x00\x1f\x10\x01\x00\x02\x02\x01\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11!\x001Q\x10Aaq\x81\xb1\xff\xda\x00\x08\x01\x01\x00\x01?\x10F\'\xa6\xc5\xc6\xc5\xe00\xcc\x9aF\xeb\x8a\x1a\xfa\xcf\x8c\xd5\xe7n`\x8f\x8eA\xfa\xcbD\xb3\xdd&\xc6\x9erg\x10\x85\x9e\x91\xec*a\xca?\xe1l$\xfd\xe8t\x1d\x80E\xc9%>\xb0\xa0\x8e\x18D\x00\x1a\x03?\xff\xd9', "up.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x19\x00\x01\x01\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x06\x05\x07\x08\xff\xc4\x00\x18\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x03\x04\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xed\xbc\xaf\x01\x8b\xab\xcf\xe8t\x12\xf7\x95\x00\xa8O\xff\xc4\x00\x1b\x10\x00\x03\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x00\x05\x01\x06\x11\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xb1\xe1,\xda\r\xc1^y\xde/\xf3\x99\x99V\xb6\xb9\xda/A\xcb9\xd1B\x13B\xd6\x02\xb0\xff\xc4\x00\x18\x11\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03 !\xff\xda\x00\x08\x01\x03\x01\x01?\x01\x91\xd8\x1c\xa7\xff\xc4\x00\x1d\x11\x01\x00\x01\x03\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00\x03\x04\x02\x10\x12!1\xff\xda\x00\x08\x01\x02\x01\x01?\x01\xc5\xc6\xb5\xaa\xd3\xcd\xed\xf2\x92\x18j]\xbf\xff\xc4\x00$\x10\x00\x02\x01\x04\x00\x05\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x00\x04\x11!\x05\x10\x12"12AQa\xb1\xff\xda\x00\x08\x01\x01\x00\x06?\x02\x92\xe2OJ\x0c\xd1I\x82\xab\x1d\xae?9E\xc3\xd4\xf9\xef\x7f\xbf\x81Q=\xc4\x12[\xf5m\x0b\x8d\x1aI\x97\xc3\x8c\xd0\xb8h#3(\xc0r\xbb\x14c\x9e$\x91\x0f\xb3\x0c\xd0DP\xaa4\x00\xaf\xff\xc4\x00\x1e\x10\x01\x00\x02\x02\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x111\xf0a\x10Qq\xb1\xc1\xff\xda\x00\x08\x01\x01\x00\x01?!Zi\xef\x9e%\xf7@\x05j\xbe\xf4\x05k\xa1\x19\xd1\xea\\f\x94M;LF\xd3(\xbc\x84%\xe6d(\x87\x10/\x1d\x15\x01?\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10+\x1fB\xff\xc4\x00\x19\x11\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x10!1\xff\xda\x00\x08\x01\x03\x01\x01?\x10"\x9d\x1d\x82%\x92\x8c\x7f\xff\xc4\x00\x1b\x11\x01\x00\x02\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x001\x11A!q\xb1\xff\xda\x00\x08\x01\x02\x01\x01?\x10\x0e#{I]g\xc8\xeda(\xe6\xa2\xab\x96\x7f\xff\xc4\x00\x1d\x10\x01\x01\x00\x02\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!1Aa\x10\x81\x91\xff\xda\x00\x08\x01\x01\x00\x01?\x10\xe43\'phz\xb0=p\xdf\xe2TM\xaa\xadtG\xcf\x84\x88\x9d\x9c*\x10m\xa8\xb3\xcc\x1au0@\xd2\xbc\x0fJ\xe9s\x8c\x02\x1e\xa9g\xd7\x19\xb2^\x08\x0b\x04S\x97\xf77ve\x0b\xd3\x1e\xfd\xc0\x11\xb1A\x10\x00\xe0\xcf\xff\xd9', "nextgrey.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x19\x00\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x06\x03\x05\x07\xff\xc4\x00\x16\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xb4m\xaa\x95]9\xfb\xa232\x8cs@\x0f\xff\xc4\x00\x1b\x10\x00\x03\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x05\x00\x01\x06\x10\x13\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xb9X\xf3^F\xaa\xac\xeb9\xc3a\xd2\xf2\xa5\xd2ok\x0b\xc5r\xaa\xb1M\xd7\xff\xc4\x00\x18\x11\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x12 "\xff\xda\x00\x08\x01\x03\x01\x01?\x01b\xf2\xcd?\xff\xc4\x00\x1a\x11\x01\x00\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x01\x02\x10\x11!\xff\xda\x00\x08\x01\x02\x01\x01?\x01"\x1b\x87k\xc9\\\xff\x00\xff\xc4\x00\'\x10\x00\x01\x02\x04\x02\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x03\x00\x10\x11\x12AQ\x04\x13\x14!"12BRS\x81\xff\xda\x00\x08\x01\x01\x00\x06?\x02dU\xb1\xd48=T\xee\xca\x13\x8a\xc2\xc9d\x1a\tR\xf2[\xeb\xe3\x08m\x0e\xce\xd7\xb1\xcc~@5r\x9d\xa9J\xae0/8\xc3f\xe0\xf2%\x1d\xe9?\xff\xc4\x00\x1c\x10\x01\x00\x01\x05\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00\x10!Aa1q\xff\xda\x00\x08\x01\x01\x00\x01?!h,E,\x1c\xf1\x88\xa0h\xbe\xdc?\x1b\x05\x8cMz\x0f#\xad/\xb5\xd1\x10\xe6\xd4\xcd\xb0\xf6\xa8=\xee\x0eB\xff\x00\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10\xf4 \x80\xff\xc4\x00\x1a\x11\x01\x00\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x101AQ\x91\xff\xda\x00\x08\x01\x03\x01\x01?\x106}\x8d\xbb\n\xff\x00\xff\xc4\x00\x1b\x11\x01\x00\x02\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x10!1Aq\xff\xda\x00\x08\x01\x02\x01\x01?\x10\xbf\xd7\xe99} \x07QW\x1f\xff\xc4\x00\x1f\x10\x01\x00\x01\x04\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!1A\x10Qqa\x81\xa1\xff\xda\x00\x08\x01\x01\x00\x01?\x10a\x8f\x9e\x92$D\xd8\x1b\xe5\xb3Vp\x90\x0c\xdda|a\xf8\xe3( T\xd1o$\x96\xd0\xf7P%\x95W\xe8\xfe\xf0S\x19\x9aQ\x01\x98\xd7\x9a\xab\xe7\x93\xa4L\nZ\xec\xf3\xff\xd9', "prevgrey.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x19\x00\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x07\x02\x04\x06\xff\xc4\x00\x18\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x03\x04\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xb58Yk\xea\xbc\xf7\xc3$\xbd\xe5\xd5\x13\x9c\x07\xff\xc4\x00\x1a\x10\x00\x03\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x01\x05\x06\x00\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xa1\xea\x9c.\xf4Y\x85>\x9e\xa3\xd2r,\xb1\xb0\xb0\xa0\xe9(\xc5\x8b\xfa\x99\xd1H\x00\x88\x0f\xff\xc4\x00\x18\x11\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03 \x81\xff\xda\x00\x08\x01\x03\x01\x01?\x01\x94\xbeS\xff\xc4\x00\x1c\x11\x00\x01\x03\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x04\x03\x10!"1\xff\xda\x00\x08\x01\x02\x01\x01?\x01\x85N1\x1be\xc8\xf6\xff\x00\xff\xc4\x00!\x10\x00\x02\x01\x04\x02\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x00\x04\x11\x12!a\x101Qq\xd1\xff\xda\x00\x08\x01\x01\x00\x06?\x02\xdei\x02\x0e\xebKX\xf3\xdb~R\x19F\x1c\xa8\xd8wB\xe6\xd2q\xb0\\\x18\x9b\xd1\xfa\xa4\x17\x96\xe6)\x14\xe4\x07\xa5\x919V\x19\x1e4\xb8\x85%_\x86\x19\xa0\xaa\x00Q\xc0\x02\xbf\xff\xc4\x00\x1d\x10\x01\x00\x02\x02\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11Aq!1Q\x10a\xff\xda\x00\x08\x01\x01\x00\x01?!\xd9Ew\xafg)\xcb\xaa\xadu\x01\xb5\xc0b\x9c\x91\xdb\x00\xddP\xe5\x86\x00\xe8\x87B\x9e=;\x8a\xe5\x13~?2\xd9)\xd2\x01u\xa0\xa0\'\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10d\xd0\x00\xff\xc4\x00\x19\x11\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01!1\x00\x10Q\xff\xda\x00\x08\x01\x03\x01\x01?\x10\x13\x11\xd1xV\xff\x00\xff\xc4\x00\x1c\x11\x00\x01\x04\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11!Q\x101a\xf0\xff\xda\x00\x08\x01\x02\x01\x01?\x103\'@0\x1e\xbb\xe8[\xa1\x90-\x8f\xff\xc4\x00\x1f\x10\x01\x00\x01\x04\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!1aAQ\x10q\x81\xa1\xff\xda\x00\x08\x01\x01\x00\x01?\x10xo\x86\xe2\xe8eh\xa2KB2\x0cXm\xf5\x9dV\x1f\xeds\x07\xe0\xc9Q\x02ZQ\x19\xe5&\xe3g\xba\x98\x8d\xe7g\xa4x\x16\x98ksQ \x91\xfd\xf1\x02\x15\x80\xc5\xd9%\x9d\x94\'\x93\x08"\x00\x0c\x01_\xff\xd9', "upgrey.jpg": '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x1fCreated by Ecki with The GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\t\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18!\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17"$"\x1e$\x1c\x1e\x1f\x1e\xff\xdb\x00C\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xc2\x00\x11\x08\x00\x14\x00\x14\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1a\x00\x01\x00\x02\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x06\x02\x05\x07\x08\xff\xc4\x00\x18\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x03\x04\xff\xda\x00\x0c\x03\x01\x00\x02\x10\x03\x10\x00\x00\x01\xeau\x8d\x156\xaf?\xa0\x10%\xef\x1e`H\x13\xff\xc4\x00\x1b\x10\x00\x03\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x00\x05\x01\x06\x11\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\xa9\xe14\xda\x1d\xb9^y\xddn\xf3\x99\x99N\xb6\xb40\\\x92\x9ar\xa1\xe9S\xd6\x02 \x1f\xff\xc4\x00\x18\x11\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03 !\xff\xda\x00\x08\x01\x03\x01\x01?\x01\x91\xd8\x1c\xa7\xff\xc4\x00\x1d\x11\x01\x00\x01\x03\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00\x03\x04\x02\x10\x12!1\xff\xda\x00\x08\x01\x02\x01\x01?\x01\xc5\xc6\xb5\xaa\xd3\xcd\xed\xf2\x92\x18j]\xbf\xff\xc4\x00"\x10\x00\x02\x01\x04\x01\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x00\x04\x11!1\x10\x12"2AQa\xff\xda\x00\x08\x01\x01\x00\x06?\x02\x92y=Pd\xd1IUU\xb9\\t\x8a\xc1O>o\xfb\xf4*\'\xb8\x82K~\xed\xa1q\xa3I*\xf0\xc34.\x1a\x18\xcc\xaa0\x1c\xae\xc5\x18\xe6\x8ddC\xf0\xc34\x11\x14*\x8d\x00+\xff\xc4\x00!\x10\x01\x00\x02\x00\x04\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x101\xb1\xf0!Qa\x81\x91\xc1\xd1\xff\xda\x00\x08\x01\x01\x00\x01?!h\xe9\xff\x00(\x82\x95\x86\x8f\x1e\xf0\x0e"T\x0c\xf64\x97Q%\x13g)\x96_=\xe5JX\x84\xba3;\xbe\x1cCP4\x14\x04\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10X\x1f~\xff\xc4\x00\x19\x11\x01\x00\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11\x10!1\xff\xda\x00\x08\x01\x03\x01\x01?\x10\x02\x9d\x1d\x82%\x92\x8c\x7f\xff\xc4\x00\x1b\x11\x01\x00\x01\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x11!1Aq\xb1\xff\xda\x00\x08\x01\x02\x01\x01?\x10\x06#{I\x8eW\xc8\xcc\x17&\x0b\xc5V\xac\xff\xc4\x00\x1c\x10\x01\x01\x00\x03\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x00!1aA\x10\x91\xff\xda\x00\x08\x01\x01\x00\x01?\x10\xec\x86F\xd8hz\xb0=p\x06H\x14\x93k\xab]\x11\xd7?\x0e\x9e;XT \xdbQg\x989R\x00\x81\xa5x?\x15\xb8\xb9w#/@X\xfas6\n\x01\x01b\x14\xda\xff\x00s\xa8*\xc2\xfcbK\xee\x0ck\x8c\x08\x80\x07\x0c\xff\xd9'} CSSStylesheet = ''' a,p,h1,h2,h3,h4,h5,ul,ol,li,div,td,th,address,blockquote,nobr,b,i { font-family:Verdana,sans-serif; } p { font-size:12px; line-height:20px; } p.footnote { font-size:10px; line-height:14px; } p.figure { font-size:12px; line-height:16px; text-align:center; } div.caption { font-size:10px; line-height:14px; text-align:center; } li { font-size:12px; line-height:20px; } td { font-size:12px; } td.title { background-color:#F4F4F4; } td.toplink { background-color:#F4F4F4; } td.bottomlink { background-color:#FFFFFF; } td.toc { background-color:#F4F4F4; } td.tochilit { background-color:#E7E6E7; } a.internal:link { color:blue; text-decoration:none; } a.internal:visited { color:blue; text-decoration:none; } a.internal:hover { color:red; text-decoration:underline; } a.internal:active { color:blue; text-decoration:none; } h1 { font-size:18px; } h2 { font-size:16px; } h3 { font-size:14px; } h4 { font-size:12px; font-weight:bold; } h5 { font-size:12px; font-weight:bold; } ''' HTMLPageHead = '''
| ' + REFERENCE + ' | \12') if self.contents <> None: self.toplink.append('' + TOC_TITLE + ' | \12') if self.index <> None: self.toplink.append('Index | \12') if self.home <> None: self.toplink.append('Home | \12') self.toplink.append("
| '] self.end = [" | \12
| ' t1xs = ' |
| ' t2s = " |
\12"+pretext) pretext = "" self.leadIn = 0 else: ptag = 1 sequence = sequence + self.sequenceOfWords() if self.token == "\\footnote{": self.footnoteNr = self.footnoteNr + 1 fnr = 'FN'+str(self.footnoteNr) refnr = 'REF'+str(self.footnoteNr) sequence.append('['+str(self.footnoteNr)+'] ') self.token = self.getToken() self.currPage.foot = self.currPage.foot + self.sequenceOfParagraphs(' class="footnote"', "", '['+str(self.footnoteNr)+'] ') self.currPage.foot.append("\12
\12") self.leadIn = len(sequence[-2]) + len(sequence[-1]) self.token = " " ptag = 0 elif self.token in ["\\begin{quote}", "\\begin{quotation}"]: sequence.append("\12") elif self.token in ["\\end{quote}", "\\end{quotation}"]: sequence.append("\12") elif self.token == "\\begin{enumerate}": if sequence[-1][0:2] == "
\12") ptag = 0 elif self.token == "\\end{enumerate}": while (sequence[-1][1:4] == "
\12\12") elif self.token == "\\begin{itemize}": if sequence[-1][0:2] == "\12") ptag = 0 elif self.token == "\\end{itemize}": while (sequence[-1][1:4] == "
\12\12") elif self.token == "\\begin{thebibliography}": if sequence[-1][0:2] == "\12") ptag = 0 elif self.token == "\\begin{figure}": if sequence[-1][0:2] == "
\n") self.figureFlag = False elif self.token == "\\begin{verbatim}": sequence.append("\n
\n")
while 1:
line = self.scanner.getRawLine()
if line.find("\\end{verbatim}") >= 0: break
else: sequence.append(line)
sequence.append("\n\n")
elif self.token == "\\begin{abstract}":
if LANG=="de": sequence.append("\n\12") if not (self.token in (TermPSequence+["}"])): self.token = self.getToken() while self.token == " ": self.token = self.getToken() return sequence def mainContent(self): sequence = self.sequenceOfParagraphs() if len(sequence) > 0 and sequence[-1][0:2] == "
0) or (self.token == "\\chapter{")) and (depth < self.mindepth):
self.mindepth = depth
self.chapter[depth] = self.chapter[depth] + 1
self.chapter = self.chapter[0:depth+1]
for i in range(depth, 5) : self.chapter.append(0)
cn = ""
if depth <= CHAPTERNUMBERING_DEPTH:
flag = 0
for i in range(0, depth+1):
if flag or (self.chapter[i] > 0):
cn = cn + repr(self.chapter[i]) + "."
flag = 1
if len(cn) > 0: cn = cn[:-1] # chop
self.chapterName = cn
self.token = self.getToken()
if cn <> "": s = cn + " " #+ self.token
else: s = "" #+self.token
s += "".join(self.sequenceOfWords())
# self.token = self.getToken()
# while self.token <> "}":
# s = s + self.token
# self.token = self.getToken()
self.depth = depth # depth zurückgeben
return s
def Parse(self):
global PROJECT_TITLE, AUTHOR, REFERENCE, DATE
self.token = self.getToken()
while self.token <> "\\begin{document}":
self.token = self.getToken()
while 1:
if self.token == "\\end{document}": break
elif self.token == "\\begin{titlepage}":
self.token = self.getToken()
self.currPage = HTMLPage(DESTINATION_NAME + ENDING,
PROJECT_TITLE, "TitlePage")
self.mainContent()
if self.token <> "\\end{titlepage}":
raise ParserError, "\\end{titlepage} expected"
self.pageList.append(self.currPage)
self.pageList.append(HTMLPage("toc"+ENDING, TOC_TITLE,
"TableOfContents"))
self.token = self.getToken()
elif self.token == "\\maketitle":
self.currPage = HTMLPage(DESTINATION_NAME + ENDING,
PROJECT_TITLE, "TitlePage")
self.currPage.body.append('
'+\ PROJECT_TITLE+'
'+AUTHOR_STR+": "+AUTHOR+'
\n') self.currPage.body.append(''+DATE_STR+": "+DATE+'
') self.token = self.getToken(); self.mainContent() self.pageList.append(self.currPage) self.pageList.append(HTMLPage("toc"+ENDING, TOC_TITLE, "TableOfContents")) elif self.token in SECTIONS: s = self.ParseHeading() self.nodeCount = self.nodeCount + 1 self.currPage = HTMLPage("node"+repr(self.nodeCount)+ENDING, \ s, "NormalPage", self.chapter) while 1: self.currPage.body.append(HeadT[self.depth] + s + HeadTE[self.depth]+"\12\12") self.token = self.getToken() self.mainContent() if self.token in SECTIONS: t = self.currPage.body[-1] while (len(t) > 0) and (t[-1:] <= " "): t = t[:-1] t = t[-5:] if (t in HeadTE): s = self.ParseHeading() else: break else: break self.pageList.append(self.currPage) elif self.token == "\\begin{thebibliography}": self.nodeCount = self.nodeCount + 1 self.chapter = [0, 0, 0, 0, 0, 0] self.chapter[self.mindepth] = 1 self.currPage = HTMLPage("node"+repr(self.nodeCount)+ENDING, \ BIBLIOGRAPHY_TITLE, "NormalPage", self.chapter) self.mainContent() self.pageList.append(self.currPage) else: if self.token[1:6] == "title": # PROJECT_TITLE = self.readStr() self.token = self.getToken() PROJECT_TITLE = "".join(self.sequenceOfWords()) elif self.token[1:7] == "author": AUTHOR = self.readStr() if REFERENCE == "reference to author ?": REFERENCE = AUTHOR elif self.token[1:5] == "date": DATE = self.readStr() self.token = self.getToken() while not self.scanner.eof: s = self.scanner.getLine() self.flushPageList() self.writeImages() texFileName = "" i = 1 while i < len(sys.argv): if sys.argv[i][0:1] == "-": if sys.argv[i][0:2] == "-t": i += 1 PROJECT_TITLE = sys.argv[i] elif sys.argv[i][0:2] == "-a": i += 1 AUTHOR = sys.argv[i] if REFERENCE == "reference to author ?": REFERENCE = AUTHOR elif sys.argv[i][0:2] == "-r": i += 1 REFERENCE = sys.argv[i] elif sys.argv[i][0:2] == "-p": i += 1 PDFURL = sys.argv[i] elif sys.argv[i][0:2] == "-e": i+= 1 SLIDESURL = sys.argv[i] elif sys.argv[i][0:2] == "-c": i += 1 TOC_TITLE = sys.argv[i] elif sys.argv[i][0:2] == "-b": i += 1 BIBLIOGRAPHY_TITLE = sys.argv[i] elif sys.argv[i][0:2] == "-d": i += 1 DESCRIPTION = sys.argv[i] elif sys.argv[i][0:2] == "-k": i += 1 KEYWORDS = sys.argv[i] elif sys.argv[i][0:2] == "-s": i += 1 DESTINATION_NAME = sys.argv[i] elif sys.argv[i][0:2] == "-l": i += 1 LANG = sys.argv[i] elif sys.argv[i][0:2] == "-x": HTMLPageHead = '' + HTMLPageHead ENDING = ".xhtml" elif sys.argv[i][0:2] == "-i": INDEX_FILE = "toc.html" else: texFileName = sys.argv[i] i += 1 # debugging: texFileName = "Kritik.tex" if texFileName == "": print ''' Usage: latex2html.py [OPTION] texfile Options: -t name : project title -a name : author -r name : reference to the author (may include HTML-tags) -p url : valid url of a PDF Version of the document -e url : valid url of a related beamer presentation -c name : TOC title (default: "Table of Contents") -b name : bibliography title (default: "Bibliography") -d name : short description -k name : list of keywords -s name : name of destination directory (default: texfile) -l name : language (e.g. "en-US") -x : create xhtml instead of html pages -i : duplicate table of contents as "index.html" file ''' else: if DESTINATION_NAME == "destination ?": if texFileName[-4:] == ".tex": DESTINATION_NAME = texFileName[:-4] else: DESTINATION_NAME = texFileName + "www" if LANG == "de": TOC_TITLE = "Inhaltsverzeichnis" BIBLIOGRAPHY_TITLE = "Literaturverzeichnis" AUTHOR_STR = "Autor" DATE_STR = "Datum" scanner=TexScanner(texFileName) parser=TexParser(scanner) parser.Parse() #while not scanner.eof: # print parser.getToken()