doc/ext/local.py (19 lines of code) (raw):

from docutils import nodes from docutils.parsers import rst from sphinx.domains import Domain import os.path # This is a place to hang git file references. class SWOCDomain(Domain): """ Solid Wall Of Code. """ name = 'swoc' label = 'SWOC' data_version = 1 def make_github_link(name, rawtext, text, lineno, inliner, options={}, content=[]): """ This docutils role lets us link to source code via the handy :swoc:git: markup. """ url = 'https://github.com/SolidWallOfCode/libswoc/blob/{}/{}' ref = 'master' node = nodes.reference(rawtext, os.path.basename(text), refuri=url.format(ref, text), **options) return [node], [] def setup(app): rst.roles.register_generic_role('arg', nodes.emphasis) rst.roles.register_generic_role('const', nodes.literal) rst.roles.register_generic_role('pack', nodes.strong) app.add_domain(SWOCDomain) # this lets us do :swoc:git:`<file_path>` and link to the file on github app.add_role_to_domain('swoc', 'git', make_github_link)