from Products.PortalTransforms.interfaces import itransform
from reStructuredText import HTML
import sys
class rest:
r"""Converts from reST to HTML.
>>> transform = rest()
>>> class D:
... def setData(self, data):
... self.value = data
>>> data = transform.convert('*hello world*', D())
>>> print data.value
hello world
We want the 'raw' and 'include' directives to be disabled by
default:
>>> try:
... transform.convert('.. raw:: html\n :file: ', D())
... except NotImplementedError:
... print 'Good'
... else:
... print 'Failure'
Good
>>> try:
... transform.convert('.. include:: ', D())
... except NotImplementedError:
... print 'Good'
... else:
... print 'Failure'
Good
"""
__implements__ = itransform
__name__ = "rest_to_html"
inputs = ("text/x-rst", "text/restructured",)
output = "text/html"
def __init__(self, name=None, **kwargs):
if name:
self.__name__ = name
self.config = {
'inputs': self.inputs,
'output': self.output,
'report_level': 2,
'initial_header_level': 2,
}
self.config_metadata = {
'inputs' :
('list', 'Inputs', 'Input(s) MIME type. Change with care.'),
'initial_header_level' :
('int', 'Initial Header Level',
'Level of first header tag. Setting it to "2" will make '
'the first header be "".'),
'report_level' :
('int', 'Report Level',
'Level of error reporting. Set to "1" will display all '
'messages. Setting it to "5" will display no messages.'),
}
self.config.update(kwargs)
def name(self):
return self.__name__
def convert(self, orig, data, **kwargs):
# do the format
encoding = kwargs.get('encoding', 'utf-8')
input_encoding = kwargs.get('input_encoding', encoding)
output_encoding = kwargs.get('output_encoding', encoding)
language = kwargs.get('language', 'en')
warnings = kwargs.get('warnings', None)
initial_header_level = int(self.config.get('initial_header_level', 2))
report_level = int(self.config.get('report_level', 2))
settings = {'documentclass': '',
'traceback': 1,
}
html = HTML(orig,
input_encoding=input_encoding,
output_encoding=output_encoding,
language_code=language,
initial_header_level=initial_header_level,
report_level=report_level,
warnings=warnings,
settings=settings)
html = html.replace(' class="document"', '', 1)
data.setData(html)
return data
def register():
return rest()