|
From: Karl T. K. <ka...@us...> - 2001-03-05 01:58:29
|
Update of /cvsroot/linuxdc/docs/tools/ht2html
In directory usw-pr-cvs1:/tmp/cvs-serv4909/ht2html
Added Files:
ht2html.py
Log Message:
Added the ht2html. Will add a generator once it's started
--- NEW FILE ---
#! /usr/bin/env python
"""Generate a .html file from a .ht template.
Usage: %(program)s [options] file1 [file2 [...]]
Where options are:
--rootdir <directory>
-r <directory>
specify the root of the Web page hierarchy. otherwise the current
directory is used.
--style <classmod>
-s <classmod>
specifies the generator `style'. classmod is both a module name and a
class name. The module is imported (so it must be findable on your
sys.path) and the class is dug out of that module (so they must have
the same name). This class is instantiated by passing the following
arguments:
file -- the .ht file to be parsed
rootdir -- as specified above
relthis -- the directory path to get from rootdir to the current
directory. Note that rootdir must be a direct parent
of the current directory.
file should be passed to HTParser to create an instance of the file
parser. Your class should also create a LinkFixer using (the .html
version of) file, rootdir, and relthis.
--backup
-b
Make a backup of any existing .html if it would get overwritten.
--backupext <ext>
-x <ext>
Specify the extension for backup files. Otherwise .bak is used
--force
-f
Force overwritting of .html file even if the generated file is the
same. Otherwise only overwrite .html file if the new one is
different.
--version
-v
Print the version number of this tool and exit.
--quiet
-q
Be quiet.
--help
-h
print this message and exit.
"""
__version__ = '1.1'
import sys
import os
import getopt
import errno
program = sys.argv[0]
sys.path.insert(0, os.getcwd())
try:
abspath = os.path.abspath
except AttributeError:
# not Python 1.5.2
def abspath(path):
return os.path.normpath(os.path.join(os.getcwd(), path))
def usage(code, msg=''):
print __doc__ % globals()
if msg:
print msg
sys.exit(code)
def main():
try:
opts, args = getopt.getopt(
sys.argv[1:],
'hr:s:bx:fqv',
['help', 'rootdir=', 'style=', 'backup', 'backupext=',
'force', 'quiet', 'version'])
except getopt.error, msg:
usage(1, msg)
rootdir = '.'
classmod = 'StandardGenerator'
backup = 0
backupext = '.bak'
force = 0
quiet = 0
for opt, arg in opts:
if opt in ('-h', '--help'):
usage(0)
elif opt in ('-v', '--version'):
print 'ht2html version', __version__
sys.exit(0)
elif opt in ('-r', '--rootdir'):
## rootdir = os.path.expanduser(arg)
## if rootdir[0] <> '/':
## rootdir = os.path.join(os.getcwd(), rootdir)
## rootdir = os.path.normpath(rootdir)
rootdir = arg
elif opt in ('-s', '--style'):
classmod = arg
elif opt in ('-b', '--backup'):
backup = 1
elif opt in ('-x', '--backupext'):
backupext = arg
elif opt in ('-f', '--force'):
force = 1
elif opt in ('-q', '--quiet'):
quiet = 1
# find current dir relative to rootdir
absroot = abspath(rootdir)
curdir = abspath('.')
prefix = os.path.commonprefix([absroot, curdir])
if prefix <> absroot:
usage(1, 'Root directory must be relative to current directory')
relthis = curdir[len(prefix)+1:]
if not relthis:
relthis = '.'
# get the generator class
m = __import__(classmod)
GenClass = getattr(m, classmod)
# process all the files on the command line
for file in args:
if not quiet:
print 'Processing %s...' % file
# get the target filename
root, ext = os.path.splitext(file)
htmlfile = root + '.html'
g = GenClass(file, rootdir, relthis)
# deal with backups, first load the original file
try:
fp = open(htmlfile)
data = fp.read()
fp.close()
origfound = 1
except IOError:
origfound = 0
newtext = g.makepage()
if origfound and newtext == data:
# the file hasn't changed. only write it if forced to
if not force:
continue
try:
omask = os.umask(002)
if origfound and backup:
fp = open(htmlfile + '.generated', 'w')
fp.write(newtext)
fp.close()
os.rename(htmlfile, htmlfile + backupext)
os.rename(htmlfile + '.generated', htmlfile)
else:
fp = open(htmlfile, 'w')
fp.write(newtext)
fp.close()
except IOError, e:
if e.errno == errno.EACCES:
print e
else:
raise
if __name__ == '__main__':
main()
|