mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-23 09:53:45 +03:00
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
|
from docutils import nodes, utils
|
||
|
from docutils.parsers.rst.roles import set_classes
|
||
|
|
||
|
|
||
|
def make_link_node(rawtext, app, name, options):
|
||
|
"""
|
||
|
Create a link to the TL reference.
|
||
|
|
||
|
:param rawtext: Text being replaced with link node.
|
||
|
:param app: Sphinx application context
|
||
|
:param name: Name of the object to link to
|
||
|
:param options: Options dictionary passed to role func.
|
||
|
"""
|
||
|
try:
|
||
|
base = app.config.tl_ref_url
|
||
|
if not base:
|
||
|
raise AttributeError
|
||
|
except AttributeError as e:
|
||
|
raise ValueError('tl_ref_url config value is not set') from e
|
||
|
|
||
|
if base[-1] != '/':
|
||
|
base += '/'
|
||
|
|
||
|
set_classes(options)
|
||
|
node = nodes.reference(rawtext, utils.unescape(name),
|
||
|
refuri='{}?q={}'.format(base, name),
|
||
|
**options)
|
||
|
return node
|
||
|
|
||
|
|
||
|
def tl_role(name, rawtext, text, lineno, inliner, options=None, content=None):
|
||
|
"""
|
||
|
Link to the TL reference.
|
||
|
|
||
|
Returns 2 part tuple containing list of nodes to insert into the
|
||
|
document and a list of system messages. Both are allowed to be empty.
|
||
|
|
||
|
:param name: The role name used in the document.
|
||
|
:param rawtext: The entire markup snippet, with role.
|
||
|
:param text: The text marked with the role.
|
||
|
:param lineno: The line number where rawtext appears in the input.
|
||
|
:param inliner: The inliner instance that called us.
|
||
|
:param options: Directive options for customization.
|
||
|
:param content: The directive content for customization.
|
||
|
"""
|
||
|
if options is None:
|
||
|
options = {}
|
||
|
if content is None:
|
||
|
content = []
|
||
|
|
||
|
# TODO Report error on type not found?
|
||
|
# Usage:
|
||
|
# msg = inliner.reporter.error(..., line=lineno)
|
||
|
# return [inliner.problematic(rawtext, rawtext, msg)], [msg]
|
||
|
app = inliner.document.settings.env.app
|
||
|
node = make_link_node(rawtext, app, text, options)
|
||
|
return [node], []
|
||
|
|
||
|
|
||
|
def setup(app):
|
||
|
"""
|
||
|
Install the plugin.
|
||
|
|
||
|
:param app: Sphinx application context.
|
||
|
"""
|
||
|
app.info('Initializing TL reference plugin')
|
||
|
app.add_role('tl', tl_role)
|
||
|
app.add_config_value('tl_ref_url', None, 'env')
|
||
|
return
|