Skip to content
Snippets Groups Projects
Commit d3b22561 authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

[ui] Prepare for better rst parsing and displaying

parent c664977a
No related branches found
No related tags found
1 merge request!168Issue 416
Pipeline #
...@@ -95,6 +95,64 @@ def markdown(value, arg=''): ...@@ -95,6 +95,64 @@ def markdown(value, arg=''):
)) ))
def get_rst_errors(s, config):
"""Catch errors and syntax warnings and returns them
"""
import docutils.utils
import docutils.parsers
import docutils.frontend
class SilentReporter(docutils.utils.Reporter):
"""
Silent reporter
All warnings and errors will be stored and can be used subsequently
through the reporter instance
"""
def __init__(self, *args, **kwargs):
self.messages = []
docutils.utils.Reporter.__init__(self, *args, **kwargs)
def system_message(self, level, message, *children, **kwargs):
self.messages.append((level, message, children, kwargs))
parser = docutils.parsers.rst.Parser()
defaults = docutils.frontend.OptionParser().get_default_values()
for key, val in config.items(): setattr(defaults, key, val)
defaults.tab_width = 4
defaults.pep_references = None
defaults.rfc_references = None
defaults.report_level = 1 #info
defaults.halt_level = 4 #severe
defaults.debug = 0 #don't debug
reporter = SilentReporter(
None,
defaults.report_level, #info
defaults.halt_level, #severe
stream=defaults.warning_stream,
debug=defaults.debug, #no debug
encoding=defaults.error_encoding,
error_handler=defaults.error_encoding_error_handler,
)
document = docutils.utils.new_document(None, defaults)
document.reporter = reporter
try:
parser.parse(s, document)
except AttributeError:
pass
except TypeError:
# Catch ``TypeError`` to avoid problems with local roles
# NOTE: Is this still necessary ?
pass
return reporter.messages
@register.filter(is_safe=True) @register.filter(is_safe=True)
@stringfilter @stringfilter
def restructuredtext(value, full=False): def restructuredtext(value, full=False):
...@@ -107,6 +165,7 @@ def restructuredtext(value, full=False): ...@@ -107,6 +165,7 @@ def restructuredtext(value, full=False):
else: else:
docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {}) docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
parts = publish_parts(source=force_bytes(value), writer_name="html4css1", settings_overrides=docutils_settings) parts = publish_parts(source=force_bytes(value), writer_name="html4css1", settings_overrides=docutils_settings)
#errors = get_rst_errors(value, docutils_settings)
if full: if full:
return mark_safe(force_text(parts["html_body"])) #with h1 title return mark_safe(force_text(parts["html_body"])) #with h1 title
else: else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment