1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
#! /usr/bin/env python
# Originally by Dave Goodger, from the docutils, distribution.
#
# Modified for Bazaar to accommodate options containing dots
#
# This file is in the public domain.
"""A minimal front end to the Docutils Publisher, producing HTML."""
try:
import locale
locale.setlocale(locale.LC_ALL, "")
except BaseException:
pass
from docutils.core import default_description, publish_cmdline
if True: # this is still required in the distutils trunk as-at June 2008.
from docutils.parsers.rst.states import Body
# we have some option names that contain dot; which is not allowed by
# python-docutils 0.4-4 -- so monkeypatch in a better pattern
#
# This is a bit gross to patch because all this is built up at load time.
Body.pats["optname"] = r"[a-zA-Z0-9][a-zA-Z0-9._-]*"
Body.pats["longopt"] = r"(--|/){optname}([ =]{optarg})?".format(**Body.pats)
Body.pats["option"] = r"({shortopt}|{longopt})".format(**Body.pats)
Body.patterns["option_marker"] = r"{option}(, {option})*( +| ?$)".format(
**Body.pats
)
description = (
"Generates (X)HTML documents from standalone reStructuredText "
"sources. " + default_description
)
# workaround for bug with <xxx id="tags" name="tags"> in IE
from docutils.writers import html4css1
class IESafeHtmlTranslator(html4css1.HTMLTranslator):
def starttag(self, node, tagname, suffix="\n", empty=0, **attributes):
x = html4css1.HTMLTranslator.starttag(
self, node, tagname, suffix, empty, **attributes
)
y = x.replace('id="tags"', 'id="tags_"')
y = y.replace('name="tags"', 'name="tags_"')
y = y.replace('href="#tags"', 'href="#tags_"')
return y
mywriter = html4css1.Writer()
mywriter.translator_class = IESafeHtmlTranslator
publish_cmdline(writer=mywriter, description=description)
|