Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
args.append((get_last_block(last_text + text),
parse_docutils_deflist(child)))
elif child.__class__ == docutils.nodes.table:
tables.append((get_last_block(last_text + text),) + \
parse_docutils_table(child))
elif isinstance(child, docutils.nodes.Inline):
(ntext, nargs, ntables, ncall_sigs) = \
parse_docutils_elt(child, last_text + text)
text += ntext
args += nargs
tables += ntables
call_signatures += ncall_sigs
else:
(ntext, nargs, ntables, ncall_sigs) = \
parse_docutils_elt(child, last_text + text)
if child.__class__ == docutils.nodes.literal_block:
check_str = (last_text + text).lower().strip()
if check_str.endswith("\ncall signature:") or \
check_str.endswith("\ncall signatures:"):
call_signatures.append(ntext)
text += ntext.strip() + "\n\n"
args += nargs
tables += ntables
call_signatures += ncall_sigs
return (text.rstrip(), args, tables, call_signatures)
def run(self):
env = self.state.document.settings.env
show_code = 'hide-code' not in self.options
code_below = 'code-below' in self.options
setupcode = '\n'.join(
item['code']
for item in getattr(env, 'ipywidgets_setup', [])
if item['docname'] == env.docname
)
code = '\n'.join(self.content)
if show_code:
source_literal = nodes.literal_block(code, code)
source_literal['language'] = 'python'
# get the name of the source file we are currently processing
rst_source = self.state_machine.document['source']
rst_dir = os.path.dirname(rst_source)
# use the source file name to construct a friendly target_id
serialno = env.new_serialno('jupyter-widget')
target_id = "jupyter-widget-%d" % serialno
target_node = nodes.target('', '', ids=[target_id])
# create the node in which the widget will appear;
# this will be processed by html_visit_widget
widget_node = widget()
widget_node['code'] = code
widget_node['setupcode'] = setupcode
def code_block(name, arguments, options, content, lineno,
content_offset, block_text, state, state_machine):
language = arguments[0].lower()
try:
lexer = pygments.lexers.get_lexer_by_name(language)
except ValueError:
# no lexer found - use the text one instead of an exception
error = state_machine.reporter.error(
"No pygments lexer found for language '%s'." % language,
docutils.nodes.literal_block(block_text, block_text), line=lineno)
return [error]
parsed = pygments.highlight(
u'\n'.join(content),
lexer,
html_formatter)
return [docutils.nodes.raw('', parsed, format='html')]
elif source_highlighter == 'silvercity':
def get_csv_data(self):
"""
Get CSV data from the directive content, from an external
file, or from a URL reference.
"""
encoding = self.options.get(
'encoding', self.state.document.settings.input_encoding)
if self.content:
# CSV data is from directive content.
if 'file' in self.options or 'url' in self.options:
error = self.state_machine.reporter.error(
'"%s" directive may not both specify an external file and'
' have content.' % self.name, nodes.literal_block(
self.block_text, self.block_text), line=self.lineno)
raise SystemMessagePropagation(error)
source = self.content.source(0)
csv_data = self.content
elif 'file' in self.options:
# CSV data is from an external file.
if 'url' in self.options:
error = self.state_machine.reporter.error(
'The "file" and "url" options may not be simultaneously'
' specified for the "%s" directive.' % self.name,
nodes.literal_block(self.block_text, self.block_text),
line=self.lineno)
raise SystemMessagePropagation(error)
source_dir = os.path.dirname(
os.path.abspath(self.state.document.current_source))
source = os.path.normpath(os.path.join(source_dir,
def make_admonition(node_class, name, arguments, options, content, lineno,
content_offset, block_text, state, state_machine):
if not content:
error = state_machine.reporter.error(
'The "%s" admonition is empty; content required.' % (name),
nodes.literal_block(block_text, block_text), line=lineno)
return [error]
text = '\n'.join(content)
admonition_node = node_class(text)
if arguments:
title_text = arguments[0]
textnodes, messages = state.inline_text(title_text, lineno)
admonition_node += nodes.title(title_text, '', *textnodes)
admonition_node += messages
if options.has_key('class'):
classes = options['class']
else:
classes = ['admonition-' + nodes.make_id(title_text)]
admonition_node['classes'] += classes
state.nested_parse(content, content_offset, admonition_node)
return [admonition_node]
ret = ret + messages
env.note_versionchange(node['type'], node['version'], node, self.lineno)
return ret
class SuppressBlockquotes(transforms.Transform):
"""
Remove the default blockquotes that encase indented list, tables, etc.
"""
default_priority = 300
suppress_blockquote_child_nodes = (
nodes.bullet_list,
nodes.enumerated_list,
nodes.definition_list,
nodes.literal_block,
nodes.doctest_block,
nodes.line_block,
nodes.table
)
def apply(self):
for node in self.document.traverse(nodes.block_quote):
if len(node.children) == 1 and isinstance(node.children[0], self.suppress_blockquote_child_nodes):
node.replace_self(node.children[0])
class DjangoHTMLTranslator(SmartyPantsHTMLTranslator):
"""
Django-specific reST to HTML tweaks.
"""
# Don't use border=1, which docutils does by default.
'contain a second-level bullet list.'
% (self.name, item_index + 1), nodes.literal_block(
self.block_text, self.block_text), line=self.lineno)
raise SystemMessagePropagation(error)
elif item_index:
# ATTN pychecker users: num_cols is guaranteed to be set in the
# "else" clause below for item_index==0, before this branch is
# triggered.
if len(item[0]) != num_cols:
error = self.state_machine.reporter.error(
'Error parsing content block for the "%s" directive: '
'uniform two-level bullet list expected, but row %s '
'does not contain the same number of items as row 1 '
'(%s vs %s).'
% (self.name, item_index + 1, len(item[0]), num_cols),
nodes.literal_block(self.block_text, self.block_text),
line=self.lineno)
raise SystemMessagePropagation(error)
else:
num_cols = len(item[0])
col_widths = self.get_column_widths(num_cols)
return num_cols, col_widths
def errMsg(self, msg):
msg = six.text_type(msg)
error = self.state_machine.reporter.error(
msg
, nodes.literal_block(self.block_text, self.block_text)
, line = self.lineno )
# raise exception on error?
if self.env.config.kernel_doc_raise_error:
raise SystemMessage(error, 4)
# insert oops/todo admonition, this is the replacement of the escape
# sequences "!C " formerly used in the DocBook-SGML template
# files.
todo = ("\n\n.. todo::"
"\n\n Oops: Document generation inconsistency."
"\n\n The template for this document tried to insert"
" structured comment at this point, but an error occoured."
" This dummy section is inserted to allow generation to continue.::"
"\n\n")
use = False
break
elif use:
if not line.startswith("//!"):
res.append(line)
lines = res
if prepend:
lines.insert(0, prepend + '\n')
if append:
lines.append(append + '\n')
text = ''.join(lines)
if self.options.get('tab-width'):
text = text.expandtabs(self.options['tab-width'])
retnode = nodes.literal_block(text, text, source=fn)
retnode.line = 1
retnode.attributes['line_number'] = self.lineno
if self.options.get('language', ''):
retnode['language'] = self.options['language']
if 'linenos' in self.options:
retnode['linenos'] = True
document.settings.env.note_dependency(rel_fn)
return [retnode]
# check for align_v values only
if isinstance(state, states.SubstitutionDef):
if options['align'] not in align_v_values:
error = state_machine.reporter.error(
'Error in "%s" directive: "%s" is not a valid value for '
'the "align" option within a substitution definition. '
'Valid values for "align" are: "%s".'
% (name, options['align'], '", "'.join(align_v_values)),
nodes.literal_block(block_text, block_text), line=lineno)
return [error]
elif options['align'] not in align_h_values:
error = state_machine.reporter.error(
'Error in "%s" directive: "%s" is not a valid value for '
'the "align" option. Valid values for "align" are: "%s".'
% (name, options['align'], '", "'.join(align_h_values)),
nodes.literal_block(block_text, block_text), line=lineno)
return [error]
messages = []
reference = directives.uri(arguments[0])
options['uri'] = reference
reference_node = None
if options.has_key('target'):
block = states.escape2null(options['target']).splitlines()
block = [line for line in block]
target_type, data = state.parse_target(block, block_text, lineno)
if target_type == 'refuri':
reference_node = nodes.reference(refuri=data)
elif target_type == 'refname':
reference_node = nodes.reference(refname=data,
name=fully_normalize_name(options['target']))
state.document.note_refname(reference_node)
else: # malformed target