2 # Author: David Goodger <goodger@python.org>
3 # Copyright: This module has been placed in the public domain.
9 __docformat__
= 'reStructuredText'
12 from docutils
.parsers
.rst
import Directive
13 from docutils
.parsers
.rst
import states
, directives
14 from docutils
.parsers
.rst
.roles
import set_classes
15 from docutils
import nodes
18 class BaseAdmonition(Directive
):
20 final_argument_whitespace
= True
21 option_spec
= {'class': directives
.class_option
,
22 'name': directives
.unchanged
}
26 """Subclasses must set this to the appropriate admonition node class."""
29 set_classes(self
.options
)
30 self
.assert_has_content()
31 text
= '\n'.join(self
.content
)
32 admonition_node
= self
.node_class(text
, **self
.options
)
33 self
.add_name(admonition_node
)
34 if self
.node_class
is nodes
.admonition
:
35 title_text
= self
.arguments
[0]
36 textnodes
, messages
= self
.state
.inline_text(title_text
,
38 title
= nodes
.title(title_text
, '', *textnodes
)
39 title
.source
, title
.line
= (
40 self
.state_machine
.get_source_and_line(self
.lineno
))
41 admonition_node
+= title
42 admonition_node
+= messages
43 if not 'classes' in self
.options
:
44 admonition_node
['classes'] += ['admonition-' +
45 nodes
.make_id(title_text
)]
46 self
.state
.nested_parse(self
.content
, self
.content_offset
,
48 return [admonition_node
]
51 class Admonition(BaseAdmonition
):
53 required_arguments
= 1
54 node_class
= nodes
.admonition
57 class Attention(BaseAdmonition
):
59 node_class
= nodes
.attention
62 class Caution(BaseAdmonition
):
64 node_class
= nodes
.caution
67 class Danger(BaseAdmonition
):
69 node_class
= nodes
.danger
72 class Error(BaseAdmonition
):
74 node_class
= nodes
.error
77 class Hint(BaseAdmonition
):
79 node_class
= nodes
.hint
82 class Important(BaseAdmonition
):
84 node_class
= nodes
.important
87 class Note(BaseAdmonition
):
89 node_class
= nodes
.note
92 class Tip(BaseAdmonition
):
94 node_class
= nodes
.tip
97 class Warning(BaseAdmonition
):
99 node_class
= nodes
.warning