11
9
__docformat__ = 'reStructuredText'
12
from docutils.parsers.rst import Directive
14
13
from docutils.parsers.rst import states, directives
15
14
from docutils import nodes
18
def make_admonition(node_class, name, arguments, options, content, lineno,
19
content_offset, block_text, state, state_machine):
21
error = state_machine.reporter.error(
22
'The "%s" admonition is empty; content required.' % (name),
23
nodes.literal_block(block_text, block_text), line=lineno)
25
text = '\n'.join(content)
26
admonition_node = node_class(text)
28
title_text = arguments[0]
29
textnodes, messages = state.inline_text(title_text, lineno)
30
admonition_node += nodes.title(title_text, '', *textnodes)
31
admonition_node += messages
32
if options.has_key('class'):
33
classes = options['class']
35
classes = ['admonition-' + nodes.make_id(title_text)]
36
admonition_node['classes'] += classes
37
state.nested_parse(content, content_offset, admonition_node)
38
return [admonition_node]
40
def admonition(*args):
41
return make_admonition(nodes.admonition, *args)
43
admonition.arguments = (1, 0, 1)
44
admonition.options = {'class': directives.class_option}
45
admonition.content = 1
48
return make_admonition(nodes.attention, *args)
53
return make_admonition(nodes.caution, *args)
58
return make_admonition(nodes.danger, *args)
63
return make_admonition(nodes.error, *args)
68
return make_admonition(nodes.hint, *args)
73
return make_admonition(nodes.important, *args)
78
return make_admonition(nodes.note, *args)
83
return make_admonition(nodes.tip, *args)
88
return make_admonition(nodes.warning, *args)
17
class BaseAdmonition(Directive):
19
required_arguments = 0
20
optional_arguments = 0
21
final_argument_whitespace = True
26
"""Subclasses must set this to the appropriate admonition node class."""
29
self.assert_has_content()
30
text = '\n'.join(self.content)
31
admonition_node = self.node_class(text)
33
title_text = self.arguments[0]
34
textnodes, messages = self.state.inline_text(title_text,
36
admonition_node += nodes.title(title_text, '', *textnodes)
37
admonition_node += messages
38
if self.options.has_key('class'):
39
classes = self.options['class']
41
classes = ['admonition-' + nodes.make_id(title_text)]
42
admonition_node['classes'] += classes
43
self.state.nested_parse(self.content, self.content_offset,
45
return [admonition_node]
48
class Admonition(BaseAdmonition):
50
required_arguments = 1
51
option_spec = {'class': directives.class_option}
52
node_class = nodes.admonition
55
class Attention(BaseAdmonition):
57
node_class = nodes.attention
60
class Caution(BaseAdmonition):
62
node_class = nodes.caution
65
class Danger(BaseAdmonition):
67
node_class = nodes.danger
70
class Error(BaseAdmonition):
72
node_class = nodes.error
75
class Hint(BaseAdmonition):
77
node_class = nodes.hint
80
class Important(BaseAdmonition):
82
node_class = nodes.important
85
class Note(BaseAdmonition):
87
node_class = nodes.note
90
class Tip(BaseAdmonition):
92
node_class = nodes.tip
95
class Warning(BaseAdmonition):
97
node_class = nodes.warning