diff env/lib/python3.7/site-packages/docutils/parsers/rst/roles.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/docutils/parsers/rst/roles.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,399 +0,0 @@
-# $Id: roles.py 8347 2019-08-26 12:12:02Z milde $
-# Author: Edward Loper <edloper@gradient.cis.upenn.edu>
-# Copyright: This module has been placed in the public domain.
-
-"""
-This module defines standard interpreted text role functions, a registry for
-interpreted text roles, and an API for adding to and retrieving from the
-registry.
-
-The interface for interpreted role functions is as follows::
-
-    def role_fn(name, rawtext, text, lineno, inliner,
-                options={}, content=[]):
-        code...
-
-    # Set function attributes for customization:
-    role_fn.options = ...
-    role_fn.content = ...
-
-Parameters:
-
-- ``name`` is the local name of the interpreted text role, the role name
-  actually used in the document.
-
-- ``rawtext`` is a string containing the entire interpreted text construct.
-  Return it as a ``problematic`` node linked to a system message if there is a
-  problem.
-
-- ``text`` is the interpreted text content, with backslash escapes converted
-  to nulls (``\x00``).
-
-- ``lineno`` is the line number where the interpreted text beings.
-
-- ``inliner`` is the Inliner object that called the role function.
-  It defines the following useful attributes: ``reporter``,
-  ``problematic``, ``memo``, ``parent``, ``document``.
-
-- ``options``: A dictionary of directive options for customization, to be
-  interpreted by the role function.  Used for additional attributes for the
-  generated elements and other functionality.
-
-- ``content``: A list of strings, the directive content for customization
-  ("role" directive).  To be interpreted by the role function.
-
-Function attributes for customization, interpreted by the "role" directive:
-
-- ``options``: A dictionary, mapping known option names to conversion
-  functions such as `int` or `float`.  ``None`` or an empty dict implies no
-  options to parse.  Several directive option conversion functions are defined
-  in the `directives` module.
-
-  All role functions implicitly support the "class" option, unless disabled
-  with an explicit ``{'class': None}``.
-
-- ``content``: A boolean; true if content is allowed.  Client code must handle
-  the case where content is required but not supplied (an empty content list
-  will be supplied).
-
-Note that unlike directives, the "arguments" function attribute is not
-supported for role customization.  Directive arguments are handled by the
-"role" directive itself.
-
-Interpreted role functions return a tuple of two values:
-
-- A list of nodes which will be inserted into the document tree at the
-  point where the interpreted role was encountered (can be an empty
-  list).
-
-- A list of system messages, which will be inserted into the document tree
-  immediately after the end of the current inline block (can also be empty).
-"""
-
-__docformat__ = 'reStructuredText'
-
-from docutils import nodes, utils
-from docutils.parsers.rst import directives
-from docutils.parsers.rst.languages import en as _fallback_language_module
-from docutils.utils.code_analyzer import Lexer, LexerError
-
-DEFAULT_INTERPRETED_ROLE = 'title-reference'
-"""
-The canonical name of the default interpreted role.  This role is used
-when no role is specified for a piece of interpreted text.
-"""
-
-_role_registry = {}
-"""Mapping of canonical role names to role functions.  Language-dependent role
-names are defined in the ``language`` subpackage."""
-
-_roles = {}
-"""Mapping of local or language-dependent interpreted text role names to role
-functions."""
-
-def role(role_name, language_module, lineno, reporter):
-    """
-    Locate and return a role function from its language-dependent name, along
-    with a list of system messages.  If the role is not found in the current
-    language, check English.  Return a 2-tuple: role function (``None`` if the
-    named role cannot be found) and a list of system messages.
-    """
-    normname = role_name.lower()
-    messages = []
-    msg_text = []
-
-    if normname in _roles:
-        return _roles[normname], messages
-
-    if role_name:
-        canonicalname = None
-        try:
-            canonicalname = language_module.roles[normname]
-        except AttributeError as error:
-            msg_text.append('Problem retrieving role entry from language '
-                            'module %r: %s.' % (language_module, error))
-        except KeyError:
-            msg_text.append('No role entry for "%s" in module "%s".'
-                            % (role_name, language_module.__name__))
-    else:
-        canonicalname = DEFAULT_INTERPRETED_ROLE
-
-    # If we didn't find it, try English as a fallback.
-    if not canonicalname:
-        try:
-            canonicalname = _fallback_language_module.roles[normname]
-            msg_text.append('Using English fallback for role "%s".'
-                            % role_name)
-        except KeyError:
-            msg_text.append('Trying "%s" as canonical role name.'
-                            % role_name)
-            # The canonical name should be an English name, but just in case:
-            canonicalname = normname
-
-    # Collect any messages that we generated.
-    if msg_text:
-        message = reporter.info('\n'.join(msg_text), line=lineno)
-        messages.append(message)
-
-    # Look the role up in the registry, and return it.
-    if canonicalname in _role_registry:
-        role_fn = _role_registry[canonicalname]
-        register_local_role(normname, role_fn)
-        return role_fn, messages
-    else:
-        return None, messages # Error message will be generated by caller.
-
-def register_canonical_role(name, role_fn):
-    """
-    Register an interpreted text role by its canonical name.
-
-    :Parameters:
-      - `name`: The canonical name of the interpreted role.
-      - `role_fn`: The role function.  See the module docstring.
-    """
-    set_implicit_options(role_fn)
-    _role_registry[name] = role_fn
-
-def register_local_role(name, role_fn):
-    """
-    Register an interpreted text role by its local or language-dependent name.
-
-    :Parameters:
-      - `name`: The local or language-dependent name of the interpreted role.
-      - `role_fn`: The role function.  See the module docstring.
-    """
-    set_implicit_options(role_fn)
-    _roles[name] = role_fn
-
-def set_implicit_options(role_fn):
-    """
-    Add customization options to role functions, unless explicitly set or
-    disabled.
-    """
-    if not hasattr(role_fn, 'options') or role_fn.options is None:
-        role_fn.options = {'class': directives.class_option}
-    elif 'class' not in role_fn.options:
-        role_fn.options['class'] = directives.class_option
-
-def register_generic_role(canonical_name, node_class):
-    """For roles which simply wrap a given `node_class` around the text."""
-    role = GenericRole(canonical_name, node_class)
-    register_canonical_role(canonical_name, role)
-
-
-class GenericRole(object):
-
-    """
-    Generic interpreted text role, where the interpreted text is simply
-    wrapped with the provided node class.
-    """
-
-    def __init__(self, role_name, node_class):
-        self.name = role_name
-        self.node_class = node_class
-
-    def __call__(self, role, rawtext, text, lineno, inliner,
-                 options={}, content=[]):
-        set_classes(options)
-        return [self.node_class(rawtext, text, **options)], []
-
-
-class CustomRole(object):
-
-    """
-    Wrapper for custom interpreted text roles.
-    """
-
-    def __init__(self, role_name, base_role, options={}, content=[]):
-        self.name = role_name
-        self.base_role = base_role
-        self.options = None
-        if hasattr(base_role, 'options'):
-            self.options = base_role.options
-        self.content = None
-        if hasattr(base_role, 'content'):
-            self.content = base_role.content
-        self.supplied_options = options
-        self.supplied_content = content
-
-    def __call__(self, role, rawtext, text, lineno, inliner,
-                 options={}, content=[]):
-        opts = self.supplied_options.copy()
-        opts.update(options)
-        cont = list(self.supplied_content)
-        if cont and content:
-            cont += '\n'
-        cont.extend(content)
-        return self.base_role(role, rawtext, text, lineno, inliner,
-                              options=opts, content=cont)
-
-
-def generic_custom_role(role, rawtext, text, lineno, inliner,
-                        options={}, content=[]):
-    """"""
-    # Once nested inline markup is implemented, this and other methods should
-    # recursively call inliner.nested_parse().
-    set_classes(options)
-    return [nodes.inline(rawtext, text, **options)], []
-
-generic_custom_role.options = {'class': directives.class_option}
-
-
-######################################################################
-# Define and register the standard roles:
-######################################################################
-
-register_generic_role('abbreviation', nodes.abbreviation)
-register_generic_role('acronym', nodes.acronym)
-register_generic_role('emphasis', nodes.emphasis)
-register_generic_role('literal', nodes.literal)
-register_generic_role('strong', nodes.strong)
-register_generic_role('subscript', nodes.subscript)
-register_generic_role('superscript', nodes.superscript)
-register_generic_role('title-reference', nodes.title_reference)
-
-def pep_reference_role(role, rawtext, text, lineno, inliner,
-                       options={}, content=[]):
-    try:
-        pepnum = int(utils.unescape(text))
-        if pepnum < 0 or pepnum > 9999:
-            raise ValueError
-    except ValueError:
-        msg = inliner.reporter.error(
-            'PEP number must be a number from 0 to 9999; "%s" is invalid.'
-            % text, line=lineno)
-        prb = inliner.problematic(rawtext, rawtext, msg)
-        return [prb], [msg]
-    # Base URL mainly used by inliner.pep_reference; so this is correct:
-    ref = (inliner.document.settings.pep_base_url
-           + inliner.document.settings.pep_file_url_template % pepnum)
-    set_classes(options)
-    return [nodes.reference(rawtext, 'PEP ' + text, refuri=ref,
-                            **options)], []
-
-register_canonical_role('pep-reference', pep_reference_role)
-
-def rfc_reference_role(role, rawtext, text, lineno, inliner,
-                       options={}, content=[]):
-    try:
-        if "#" in text:
-            rfcnum, section = utils.unescape(text).split("#", 1)
-        else:
-            rfcnum, section  = utils.unescape(text), None
-        rfcnum = int(rfcnum)
-        if rfcnum < 1:
-            raise ValueError
-    except ValueError:
-        msg = inliner.reporter.error(
-            'RFC number must be a number greater than or equal to 1; '
-            '"%s" is invalid.' % text, line=lineno)
-        prb = inliner.problematic(rawtext, rawtext, msg)
-        return [prb], [msg]
-    # Base URL mainly used by inliner.rfc_reference, so this is correct:
-    ref = inliner.document.settings.rfc_base_url + inliner.rfc_url % rfcnum
-    if section is not None:
-        ref += "#"+section
-    set_classes(options)
-    node = nodes.reference(rawtext, 'RFC ' + str(rfcnum), refuri=ref,
-                           **options)
-    return [node], []
-
-register_canonical_role('rfc-reference', rfc_reference_role)
-
-def raw_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
-    if not inliner.document.settings.raw_enabled:
-        msg = inliner.reporter.warning('raw (and derived) roles disabled')
-        prb = inliner.problematic(rawtext, rawtext, msg)
-        return [prb], [msg]
-    if 'format' not in options:
-        msg = inliner.reporter.error(
-            'No format (Writer name) is associated with this role: "%s".\n'
-            'The "raw" role cannot be used directly.\n'
-            'Instead, use the "role" directive to create a new role with '
-            'an associated format.' % role, line=lineno)
-        prb = inliner.problematic(rawtext, rawtext, msg)
-        return [prb], [msg]
-    set_classes(options)
-    node = nodes.raw(rawtext, utils.unescape(text, True), **options)
-    node.source, node.line = inliner.reporter.get_source_and_line(lineno)
-    return [node], []
-
-raw_role.options = {'format': directives.unchanged}
-
-register_canonical_role('raw', raw_role)
-
-def code_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
-    set_classes(options)
-    language = options.get('language', '')
-    classes = ['code']
-    if 'classes' in options:
-        classes.extend(options['classes'])
-    if language and language not in classes:
-        classes.append(language)
-    try:
-        tokens = Lexer(utils.unescape(text, True), language,
-                       inliner.document.settings.syntax_highlight)
-    except LexerError as error:
-        msg = inliner.reporter.warning(error)
-        prb = inliner.problematic(rawtext, rawtext, msg)
-        return [prb], [msg]
-
-    node = nodes.literal(rawtext, '', classes=classes)
-
-    # analyse content and add nodes for every token
-    for classes, value in tokens:
-        if classes:
-            node += nodes.inline(value, value, classes=classes)
-        else:
-            # insert as Text to decrease the verbosity of the output
-            node += nodes.Text(value, value)
-
-    return [node], []
-
-code_role.options = {'class': directives.class_option,
-                     'language': directives.unchanged}
-
-register_canonical_role('code', code_role)
-
-def math_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
-    set_classes(options)
-    i = rawtext.find('`')
-    text = rawtext.split('`')[1]
-    node = nodes.math(rawtext, text, **options)
-    return [node], []
-
-register_canonical_role('math', math_role)
-
-######################################################################
-# Register roles that are currently unimplemented.
-######################################################################
-
-def unimplemented_role(role, rawtext, text, lineno, inliner, attributes={}):
-    msg = inliner.reporter.error(
-        'Interpreted text role "%s" not implemented.' % role, line=lineno)
-    prb = inliner.problematic(rawtext, rawtext, msg)
-    return [prb], [msg]
-
-register_canonical_role('index', unimplemented_role)
-register_canonical_role('named-reference', unimplemented_role)
-register_canonical_role('anonymous-reference', unimplemented_role)
-register_canonical_role('uri-reference', unimplemented_role)
-register_canonical_role('footnote-reference', unimplemented_role)
-register_canonical_role('citation-reference', unimplemented_role)
-register_canonical_role('substitution-reference', unimplemented_role)
-register_canonical_role('target', unimplemented_role)
-
-# This should remain unimplemented, for testing purposes:
-register_canonical_role('restructuredtext-unimplemented-role',
-                        unimplemented_role)
-
-
-def set_classes(options):
-    """
-    Auxiliary function to set options['classes'] and delete
-    options['class'].
-    """
-    if 'class' in options:
-        assert 'classes' not in options
-        options['classes'] = options['class']
-        del options['class']