Second version of patch #108.
[docutils.git] / docutils / docutils / parsers / rst / directives / admonitions.py
blobfade06b79e2f9d5d544df8e2c04a1d3886ffd3ef
1 # $Id$
2 # Author: David Goodger <goodger@python.org>
3 # Copyright: This module has been placed in the public domain.
5 """
6 Admonition directives.
7 """
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}
23 has_content = True
25 node_class = None
26 """Subclasses must set this to the appropriate admonition node class."""
28 def run(self):
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,
37 self.lineno)
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,
47 admonition_node)
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