You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
9 years ago
|
import sys
|
||
|
from docutils.core import publish_parts
|
||
|
from optparse import OptionParser
|
||
|
from docutils.frontend import OptionParser as DocutilsOptionParser
|
||
|
from docutils.parsers.rst import Parser
|
||
|
|
||
|
def transform(writer=None, part=None):
|
||
|
p = OptionParser(add_help_option=False)
|
||
|
|
||
|
# Collect all the command line options
|
||
|
docutils_parser = DocutilsOptionParser(components=(writer, Parser()))
|
||
|
for group in docutils_parser.option_groups:
|
||
|
p.add_option_group(group.title, None).add_options(group.option_list)
|
||
|
|
||
|
p.add_option('--part', default=part)
|
||
|
|
||
|
opts, args = p.parse_args()
|
||
|
|
||
|
settings = dict({
|
||
|
'file_insertion_enabled': False,
|
||
|
'raw_enabled': False,
|
||
|
'doctitle_xform': False,
|
||
|
})
|
||
|
|
||
|
if len(args) == 1:
|
||
|
try:
|
||
|
content = open(args[0], 'r').read()
|
||
|
except IOError:
|
||
|
content = args[0]
|
||
|
else:
|
||
|
content = sys.stdin.read()
|
||
|
|
||
|
parts = publish_parts(
|
||
|
source=content,
|
||
|
writer=writer,
|
||
|
settings_overrides=settings
|
||
|
)
|
||
|
if 'html_body' in parts:
|
||
|
return parts['html_body']
|
||
|
if opts.part in parts:
|
||
|
return parts[opts.part]
|
||
|
return ''
|