def role_or_generic(role_name, language_module, lineno, reporter): base_role, message = role(role_name, language_module, lineno, reporter) if base_role is None: roles.register_generic_role(role_name, DummyNodeClass) base_role, message = role(role_name, language_module, lineno, reporter) return base_role, message
def setup(app): """Install the plugin. :param app: Sphinx application context. """ app.add_node(checkbox, html=(visit_input_html, depart_input_html)) register_generic_role('checkbox', checkbox)
def restructuredtext(value): try: from docutils.core import publish_parts from docutils import nodes from docutils.parsers.rst import roles except ImportError: if settings.DEBUG: raise template.TemplateSyntaxError("Error in {% restructuredtext %} filter: The Python docutils library isn't installed.") return force_unicode(value) else: roles.register_generic_role('file', nodes.literal) roles.register_generic_role('func', nodes.literal) docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {}) parts = publish_parts(source=smart_str(value), writer_name="html4css1", settings_overrides=docutils_settings) return mark_safe(force_unicode(parts["fragment"]))
def __init__(self, tokens=None, minimum_tokens=None): """Initialize the parser with expected tokens and the minimum set.""" if tokens is None: self.tokens = DEFAULT_TOKENS else: self.tokens = tokens if minimum_tokens is None: self.minimum_tokens = DEFAULT_MINIMUM_TOKENS else: self.minimum_tokens = minimum_tokens self.minimum_tokens = set(self.minimum_tokens) self.tokens = set(self.tokens) if not self.minimum_tokens.issubset(self.tokens): raise ValueError('tokens should contain minimum_tokens') for role in ('data', 'exc', 'func', 'class', 'const', 'attr', 'meth', 'mod', 'obj'): roles.register_generic_role(role, nodes.raw) roles.register_generic_role('py:' + role, nodes.raw)
def __init__(self, tokens=None, minimum_tokens=None): """Initialize the parser with expected tokens and the minimum set.""" if tokens is None: self.tokens = DEFAULT_TOKENS else: self.tokens = tokens if minimum_tokens is None: self.minimum_tokens = DEFAULT_MINIMUM_TOKENS else: self.minimum_tokens = minimum_tokens self.minimum_tokens = set(self.minimum_tokens) self.tokens = set(self.tokens) if not self.minimum_tokens.issubset(self.tokens): raise ValueError('tokens should contain minimum_tokens') for role in ( 'data', 'exc', 'func', 'class', 'const', 'attr', 'meth', 'mod', 'obj' ): roles.register_generic_role(role, nodes.raw) roles.register_generic_role('py:' + role, nodes.raw)
def parse_rst(text: str, names: List[str] = None, extra_roles: List[str] = []) -> OrderedDict: snippets = OrderedDict() from docutils.core import publish_doctree # Sphinx roles from docutils.parsers.rst import roles from docutils import nodes roles.register_generic_role('kbd', nodes.emphasis) roles.register_generic_role('ref', nodes.emphasis) # Sphinx-tabs extension directives from docutils.parsers.rst import directives from docutils.parsers.rst.directives.body import Compound directives.register_directive('tabs', Compound) directives.register_directive('group-tab', Compound) # Sphinx jinja extension directives from docutils.parsers.rst.directives.body import LineBlock jinja = LineBlock jinja.option_spec = {'file': str} directives.register_directive('jinja', jinja) # custom roles e.g. extlinks for role in extra_roles: roles.register_generic_role(role, nodes.emphasis) doctree = publish_doctree(text) def is_literal_block(node): return (node.tagname == 'literal_block') # TODO: getting lang is tricky, as it's just one of the classes at this point. Another one is 'code', but there can also be user-set classes. Perhaps we should just match against a language array, but this is not optimal. Otherwise we have to do full RST parsing... literal_blocks = doctree.traverse(condition=is_literal_block) for idx, block in enumerate(literal_blocks): snippet = Snippet(block.astext()) name = '' name = ' '.join(block['names']) if name != '': snippet.meta['name'] = name snippets[snippet.meta['name']] = snippet else: if names and idx < len(names): name = names[idx] snippet.meta['name'] = name else: name = 'unnamed'+str(idx) snippets[name] = snippet return snippets
def setup(app): """Install the plugin. :param app: Sphinx application context. """ app.add_role('nml_g', nml_group_role) roles.register_generic_role('nml_n', nodes.literal) roles.register_generic_role('nml_v', nodes.literal) roles.register_generic_role('nml_nv', nodes.literal) return
generic_docroles = { 'command': nodes.strong, 'dfn': nodes.emphasis, 'guilabel': nodes.strong, 'kbd': nodes.literal, 'mailheader': addnodes.literal_emphasis, 'makevar': nodes.Text, 'manpage': addnodes.literal_emphasis, 'mimetype': addnodes.literal_emphasis, 'newsgroup': addnodes.literal_emphasis, 'program': nodes.strong, 'regexp': nodes.literal, } for rolename, nodeclass in generic_docroles.iteritems(): roles.register_generic_role(rolename, nodeclass) def indexmarkup_role(typ, rawtext, etext, lineno, inliner, options={}, content=[]): env = inliner.document.settings.env if not typ: typ = env.config.default_role text = utils.unescape(etext) targetid = 'index-%s' % env.index_num env.index_num += 1
generic_docroles = { 'command' : nodes.strong, 'dfn' : nodes.emphasis, 'guilabel' : nodes.strong, 'kbd' : nodes.literal, 'mailheader' : addnodes.literal_emphasis, 'makevar' : nodes.Text, 'manpage' : addnodes.literal_emphasis, 'mimetype' : addnodes.literal_emphasis, 'newsgroup' : addnodes.literal_emphasis, 'program' : nodes.strong, 'regexp' : nodes.literal, } for rolename, nodeclass in generic_docroles.iteritems(): roles.register_generic_role(rolename, nodeclass) def indexmarkup_role(typ, rawtext, etext, lineno, inliner, options={}, content=[]): env = inliner.document.settings.env if not typ: typ = env.config.default_role else: typ = typ.lower() text = utils.unescape(etext) targetid = 'index-%s' % env.index_num env.index_num += 1 indexnode = addnodes.index() targetnode = nodes.target('', '', ids=[targetid]) inliner.document.note_explicit_target(targetnode) if typ == 'envvar':
import sys, os, subprocess, codecs, re import docutils.core from docutils import nodes from docutils.parsers.rst.roles import register_generic_role from docutils.writers import html4css1 ### Docutils # inline directive :concept:`Subject/Topic/Concept` # - takes an ID and generates the apropriate link. class concept(nodes.TextElement): pass class math(nodes.TextElement): pass register_generic_role('concept', concept) register_generic_role('math', math) ## Highlighting in docutils (using pygments) class HTMLTranslator(html4css1.HTMLTranslator): def __init__(self, document): html4css1.HTMLTranslator.__init__(self, document) # hack to be able to select tables in CSS (1) def visit_table(self, node): self.body.append('<div class="table">') html4css1.HTMLTranslator.visit_table(self, node) # hack to be able to select tables in CSS (2) def depart_table(self, node):
# Set master doc master_doc = 'index' # Set logo html_logo = 'gyre-logo-200.png' # Set up Extlinks extlinks = { 'ads': ('https://ui.adsabs.harvard.edu/abs/%s/abstract', ''), 'repo': ('https://github.com/rhdtownsend/gyre/blob/release-5.2/%s', '%s') } # Set up additional roles from docutils.parsers.rst import roles, nodes roles.register_generic_role('nml_o', nodes.literal) roles.register_generic_role('nml_l', nodes.literal) # Set substitutions for sphinx_substitution_extensions substitutions = [('|release|', release)] # Set site-wide targets targets = { 'github-tarball': 'https:///github.com/rhdtownsend/gyre/archive/{0:s}.tar.gz'.format( release), 'mesa-sdk': 'http://www.astro.wisc.edu/~townsend/static.php?ref=mesasdk' } rst_prolog = '\n'.join(
class label_success(nodes.Inline, nodes.TextElement): pass class label_info(nodes.Inline, nodes.TextElement): pass class label_warning(nodes.Inline, nodes.TextElement): pass class label_danger(nodes.Inline, nodes.TextElement): pass roles.register_generic_role('h1', h1) roles.register_generic_role('h2', h2) roles.register_generic_role('h3', h3) roles.register_generic_role('h4', h4) roles.register_generic_role('h5', h5) roles.register_generic_role('h6', h6) roles.register_generic_role('label-default', label_default) roles.register_generic_role('label-muted', label_muted) roles.register_generic_role('label-primary', label_primary) roles.register_generic_role('label-success', label_success) roles.register_generic_role('label-info', label_info) roles.register_generic_role('label-warning', label_warning) roles.register_generic_role('label-danger', label_danger)
return [] module_directive.arguments = (1, 0, False) module_directive.content = False module_directive.options = {'synopsis': directives.unchanged} register_directive('module', module_directive) register_directive('currentmodule', module_directive) #------------------------------------------------------------------------------ # Dummy-rendered roles #------------------------------------------------------------------------------ # XXX: some of these should be reference-generating register_generic_role('envvar', nodes.literal) register_generic_role('token', nodes.literal) register_generic_role('keyword', nodes.strong) register_generic_role('option', nodes.literal) register_generic_role('term', nodes.emphasis) register_generic_role('command', nodes.literal) register_generic_role('dfn', nodes.emphasis) register_generic_role('file', nodes.literal) register_generic_role('guilabel', nodes.emphasis) register_generic_role('kbd', nodes.literal) register_generic_role('mailheader', nodes.literal) register_generic_role('makevar', nodes.literal) register_generic_role('manpage', nodes.emphasis) register_generic_role('menuselection', nodes.emphasis) register_generic_role('mimetype', nodes.emphasis) register_generic_role('newsgroup', nodes.emphasis)
from ll import url from ll.xist import xsc, sims from ll.xist.ns import doc try: from docutils import core, nodes, utils, parsers, frontend from docutils.parsers.rst import roles from docutils.parsers.rst.languages import en except ImportError: pass else: class mod(nodes.literal): pass roles.register_generic_role("mod", mod) en.roles["mod"] = "mod" class class_(nodes.literal): pass roles.register_generic_role("class", class_) en.roles["class"] = "class" class func(nodes.literal): pass roles.register_generic_role("func", func) en.roles["func"] = "func" class meth(nodes.literal):
if count > 1: parent = '.'.join(parent.split('.')[:1 - count]) if parent: parent += '.' spec = parent + spec symbol = resolve(spec) return symbol() if callable(symbol) else str(symbol) #------------------------------------------------------------------------------ # TODO: provide a better implementation here... # todo: or move to using inline-style declaration? (that way it does not # polute *everything* in the application): # .. role:: class(literal) # .. role:: meth(literal) # .. role:: func(literal) roles.register_generic_role('class', nodes.literal) roles.register_generic_role('meth', nodes.literal) roles.register_generic_role('func', nodes.literal) # /TODO #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ def undecorate(path): # this is very dim-witted implementation, but it works... # todo: is there a way to get rid of the need for this?... # perhaps by using entry.path instead of entry.dpath... for char in '{}<>': path = path.replace(char, '') return path #------------------------------------------------------------------------------
def _register_roles(): """Register Python roles that Sphinx supports.""" for role in ('data', 'exc', 'func', 'class', 'const', 'attr', 'meth', 'mod', 'obj'): roles.register_generic_role(role, nodes.raw) roles.register_generic_role('py:' + role, nodes.raw)
class label_success(nodes.Inline, nodes.TextElement): pass class label_info(nodes.Inline, nodes.TextElement): pass class label_warning(nodes.Inline, nodes.TextElement): pass class label_danger(nodes.Inline, nodes.TextElement): pass roles.register_generic_role("h1", h1) roles.register_generic_role("h2", h2) roles.register_generic_role("h3", h3) roles.register_generic_role("h4", h4) roles.register_generic_role("h5", h5) roles.register_generic_role("h6", h6) roles.register_generic_role("label-default", label_default) roles.register_generic_role("label-muted", label_muted) roles.register_generic_role("label-primary", label_primary) roles.register_generic_role("label-success", label_success) roles.register_generic_role("label-info", label_info) roles.register_generic_role("label-warning", label_warning) roles.register_generic_role("label-danger", label_danger)