##// END OF EJS Templates
Fix magic directive and role....
Fix magic directive and role. We were directly modifying state instead of using blessed API (also some api will change so be future proof with sphinx master). This should restore some ability of the :magic: and :cellmagic: directive to both support link to magics name when the text in the directive contains (or not) leading % and %%, it will also automatically prepend the right number of % for magics and cell magics. A couple of other related fixes.

File last commit:

r24579:ce22f499
r24579:ce22f499
Show More
magics.py
46 lines | 1.5 KiB | text/x-python | PythonLexer
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184 import re
from sphinx import addnodes
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 from sphinx.domains.std import StandardDomain
from sphinx.roles import XRefRole
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 name_re = re.compile(r"[\w_]+")
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184
def parse_magic(env, sig, signode):
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 m = name_re.match(sig)
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184 if not m:
raise Exception("Invalid magic command: %s" % sig)
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 name = "%" + sig
signode += addnodes.desc_name(name, name)
return m.group(0)
class LineMagicRole(XRefRole):
"""Cross reference role displayed with a % prefix"""
prefix = "%"
def process_link(self, env, refnode, has_explicit_title, title, target):
if not has_explicit_title:
title = self.prefix + title.lstrip("%")
target = target.lstrip("%")
return title, target
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184
def parse_cell_magic(env, sig, signode):
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 m = name_re.match(sig)
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184 if not m:
raise ValueError("Invalid cell magic: %s" % sig)
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 name = "%%" + sig
signode += addnodes.desc_name(name, name)
return m.group(0)
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 class CellMagicRole(LineMagicRole):
"""Cross reference role displayed with a %% prefix"""
prefix = "%%"
Thomas Kluyver
Add Sphinx extension to document line & cell magics
r18184
Thomas Kluyver
Various improvements to docs infrastructure for magics
r18296 def setup(app):
Thomas Kluyver
Generate documentation of line & cell magics
r18294 app.add_object_type('magic', 'magic', 'pair: %s; magic command', parse_magic)
Matthias Bussonnier
Fix magic directive and role....
r24579 app.add_role_to_domain('std', 'magic', LineMagicRole(), override=True)
Thomas Kluyver
Generate documentation of line & cell magics
r18294 app.add_object_type('cellmagic', 'cellmagic', 'pair: %s; cell magic', parse_cell_magic)
Matthias Bussonnier
Fix magic directive and role....
r24579 app.add_role_to_domain('std', 'cellmagic', CellMagicRole(), override=True)
Michael Droettboom
Support parallel sphinx building
r21874
metadata = {'parallel_read_safe': True, 'parallel_write_safe': True}
return metadata