| Index: third_party/pexpect/doc/sphinxext/github.py
|
| diff --git a/third_party/pexpect/doc/sphinxext/github.py b/third_party/pexpect/doc/sphinxext/github.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..519e146d198f4540d01fed481acad594d54955d9
|
| --- /dev/null
|
| +++ b/third_party/pexpect/doc/sphinxext/github.py
|
| @@ -0,0 +1,155 @@
|
| +"""Define text roles for GitHub
|
| +
|
| +* ghissue - Issue
|
| +* ghpull - Pull Request
|
| +* ghuser - User
|
| +
|
| +Adapted from bitbucket example here:
|
| +https://bitbucket.org/birkenfeld/sphinx-contrib/src/tip/bitbucket/sphinxcontrib/bitbucket.py
|
| +
|
| +Authors
|
| +-------
|
| +
|
| +* Doug Hellmann
|
| +* Min RK
|
| +"""
|
| +#
|
| +# Original Copyright (c) 2010 Doug Hellmann. All rights reserved.
|
| +#
|
| +
|
| +from docutils import nodes, utils
|
| +from docutils.parsers.rst.roles import set_classes
|
| +
|
| +def make_link_node(rawtext, app, type, slug, options):
|
| + """Create a link to a github resource.
|
| +
|
| + :param rawtext: Text being replaced with link node.
|
| + :param app: Sphinx application context
|
| + :param type: Link type (issues, changeset, etc.)
|
| + :param slug: ID of the thing to link to
|
| + :param options: Options dictionary passed to role func.
|
| + """
|
| +
|
| + try:
|
| + base = app.config.github_project_url
|
| + if not base:
|
| + raise AttributeError
|
| + if not base.endswith('/'):
|
| + base += '/'
|
| + except AttributeError as err:
|
| + raise ValueError('github_project_url configuration value is not set (%s)' % str(err))
|
| +
|
| + ref = base + type + '/' + slug + '/'
|
| + set_classes(options)
|
| + prefix = "#"
|
| + if type == 'pull':
|
| + prefix = "PR " + prefix
|
| + node = nodes.reference(rawtext, prefix + utils.unescape(slug), refuri=ref,
|
| + **options)
|
| + return node
|
| +
|
| +def ghissue_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
| + """Link to a GitHub issue.
|
| +
|
| + 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.
|
| + """
|
| +
|
| + try:
|
| + issue_num = int(text)
|
| + if issue_num <= 0:
|
| + raise ValueError
|
| + except ValueError:
|
| + msg = inliner.reporter.error(
|
| + 'GitHub issue 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]
|
| + app = inliner.document.settings.env.app
|
| + #app.info('issue %r' % text)
|
| + if 'pull' in name.lower():
|
| + category = 'pull'
|
| + elif 'issue' in name.lower():
|
| + category = 'issues'
|
| + else:
|
| + msg = inliner.reporter.error(
|
| + 'GitHub roles include "ghpull" and "ghissue", '
|
| + '"%s" is invalid.' % name, line=lineno)
|
| + prb = inliner.problematic(rawtext, rawtext, msg)
|
| + return [prb], [msg]
|
| + node = make_link_node(rawtext, app, category, str(issue_num), options)
|
| + return [node], []
|
| +
|
| +def ghuser_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
| + """Link to a GitHub user.
|
| +
|
| + 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.
|
| + """
|
| + app = inliner.document.settings.env.app
|
| + #app.info('user link %r' % text)
|
| + ref = 'https://www.github.com/' + text
|
| + node = nodes.reference(rawtext, text, refuri=ref, **options)
|
| + return [node], []
|
| +
|
| +def ghcommit_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
| + """Link to a GitHub commit.
|
| +
|
| + 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.
|
| + """
|
| + app = inliner.document.settings.env.app
|
| + #app.info('user link %r' % text)
|
| + try:
|
| + base = app.config.github_project_url
|
| + if not base:
|
| + raise AttributeError
|
| + if not base.endswith('/'):
|
| + base += '/'
|
| + except AttributeError as err:
|
| + raise ValueError('github_project_url configuration value is not set (%s)' % str(err))
|
| +
|
| + ref = base + text
|
| + node = nodes.reference(rawtext, text[:6], refuri=ref, **options)
|
| + return [node], []
|
| +
|
| +
|
| +def setup(app):
|
| + """Install the plugin.
|
| +
|
| + :param app: Sphinx application context.
|
| + """
|
| + app.info('Initializing GitHub plugin')
|
| + app.add_role('ghissue', ghissue_role)
|
| + app.add_role('ghpull', ghissue_role)
|
| + app.add_role('ghuser', ghuser_role)
|
| + app.add_role('ghcommit', ghcommit_role)
|
| + app.add_config_value('github_project_url', None, 'env')
|
| + return
|
|
|