summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2006-08-16 23:01:34 +0000
committerwiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2006-08-16 23:01:34 +0000
commitb0d47ee51542a4dc174f456abcddb1ff69397563 (patch)
tree7af2d59cba724a056a3f453074a0fafa9c327f34
parent25813dbf29c75667b8623798b095a662c4389015 (diff)
downloaddocutils-b0d47ee51542a4dc174f456abcddb1ff69397563.tar.gz
added writer_aux.Admonitions transform;
use it in html4css1 and newlatex2e; changed priority of writer_aux.Compound transform from 810 to 910; added (basic) admonition support to newlatex2e writer git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@4687 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
-rw-r--r--docutils/HISTORY.txt6
-rw-r--r--docutils/docs/ref/transforms.txt7
-rw-r--r--docutils/docutils/transforms/writer_aux.py42
-rw-r--r--docutils/docutils/writers/html4css1/__init__.py59
-rw-r--r--docutils/docutils/writers/newlatex2e/__init__.py3
-rw-r--r--docutils/docutils/writers/newlatex2e/base.tex6
-rwxr-xr-xdocutils/test/test_transforms/test_writer_aux.py33
7 files changed, 98 insertions, 58 deletions
diff --git a/docutils/HISTORY.txt b/docutils/HISTORY.txt
index 3cb41d1b1..ab3b7eb92 100644
--- a/docutils/HISTORY.txt
+++ b/docutils/HISTORY.txt
@@ -56,6 +56,12 @@ Changes Since 0.4
object-oriented directive interface. Errors are now (mostly)
thrown using the new ``DirectiveError`` class.
+* docutils/transforms/writer_aux/:
+
+ - Added ``Admonitions`` transform to transform specific admonitions
+ (like ``note``, ``warning``, etc.) into generic admonitions with a
+ localized title.
+
* docutils/writers/html4css1/__init__.py:
- Moved template functionality from the PEP/HTML writer here.
diff --git a/docutils/docs/ref/transforms.txt b/docutils/docs/ref/transforms.txt
index 7503174ec..6ce9bae8f 100644
--- a/docutils/docs/ref/transforms.txt
+++ b/docutils/docs/ref/transforms.txt
@@ -69,8 +69,6 @@ peps.PEPZero peps.Headers (t/p) 760
components.Filter "meta" (d/p) 780
-writer_aux.Compound newlatex2e (w) 810
-
universal.Decorations Reader (r) 820
misc.Transitions standalone (r), pep (r) 830
@@ -85,6 +83,11 @@ universal.FilterMessages Writer (w) 870
universal.TestMessages DocutilsTestSupport 880
+writer_aux.Compound newlatex2e (w) 910
+
+writer_aux.Admonitions html4css1 (w), 920
+ newlatex2e (w)
+
misc.CallBack n/a 990
============================== ============================ ========
diff --git a/docutils/docutils/transforms/writer_aux.py b/docutils/docutils/transforms/writer_aux.py
index 7a93f578c..13f06dada 100644
--- a/docutils/docutils/transforms/writer_aux.py
+++ b/docutils/docutils/transforms/writer_aux.py
@@ -14,7 +14,7 @@ conflicting imports like this one::
__docformat__ = 'reStructuredText'
-from docutils import nodes, utils
+from docutils import nodes, utils, languages
from docutils.transforms import Transform
@@ -35,7 +35,7 @@ class Compound(Transform):
<paragraph classes="continued">
"""
- default_priority = 810
+ default_priority = 910
def apply(self):
for compound in self.document.traverse(nodes.compound):
@@ -48,3 +48,41 @@ class Compound(Transform):
child['classes'].append('continued')
# Substitute children for compound.
compound.replace_self(compound[:])
+
+
+class Admonitions(Transform):
+
+ """
+ Transform specific admonitions, like this:
+
+ <note>
+ <paragraph>
+ Note contents ...
+
+ into a generic admonition, like this::
+
+ <admonition classes="note">
+ <title>
+ Note
+ <paragraph>
+ Note contents...
+
+ The admonition title is localized.
+ """
+
+ default_priority = 920
+
+ def apply(self):
+ lcode = self.document.settings.language_code
+ language = languages.get_language(lcode)
+ for node in self.document.traverse(nodes.Admonition):
+ node_name = node.__class__.__name__
+ # Set class, so that we know what node this admonition came from.
+ node['classes'].append(node_name)
+ if not isinstance(node, nodes.admonition):
+ # Specific admonition. Transform into a generic admonition.
+ admonition = nodes.admonition(node.rawsource, *node.children,
+ **node.attributes)
+ title = nodes.title('', language.labels[node_name])
+ admonition.insert(0, title)
+ node.replace_self(admonition)
diff --git a/docutils/docutils/writers/html4css1/__init__.py b/docutils/docutils/writers/html4css1/__init__.py
index 10370b581..a74a8d1f7 100644
--- a/docutils/docutils/writers/html4css1/__init__.py
+++ b/docutils/docutils/writers/html4css1/__init__.py
@@ -27,6 +27,7 @@ except ImportError:
Image = None
import docutils
from docutils import frontend, nodes, utils, writers, languages
+from docutils.transforms import writer_aux
class Writer(writers.Writer):
@@ -144,6 +145,9 @@ class Writer(writers.Writer):
'html_prolog', 'html_head', 'html_title', 'html_subtitle',
'html_body')
+ def get_transforms(self):
+ return writers.Writer.get_transforms(self) + [writer_aux.Admonitions]
+
def __init__(self):
writers.Writer.__init__(self)
self.translator_class = HTMLTranslator
@@ -458,11 +462,8 @@ class HTMLTranslator(nodes.NodeVisitor):
self.body.append('\n</pre>\n')
self.depart_docinfo_item()
- def visit_admonition(self, node, name=''):
- self.body.append(self.start_tag_with_title(
- node, 'div', CLASS=(name or 'admonition')))
- if name:
- node.insert(0, nodes.title(name, self.language.labels[name]))
+ def visit_admonition(self, node):
+ self.body.append(self.start_tag_with_title(node, 'div'))
self.set_first_last(node)
def depart_admonition(self, node=None):
@@ -553,12 +554,6 @@ class HTMLTranslator(nodes.NodeVisitor):
def depart_caption(self, node):
self.body.append('</p>\n')
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
def visit_citation(self, node):
self.body.append(self.starttag(node, 'table',
CLASS='docutils citation',
@@ -641,12 +636,6 @@ class HTMLTranslator(nodes.NodeVisitor):
def depart_copyright(self, node):
self.depart_docinfo_item()
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
def visit_date(self, node):
self.visit_docinfo_item(node, 'date')
@@ -799,12 +788,6 @@ class HTMLTranslator(nodes.NodeVisitor):
self.compact_simple, self.compact_p = self.context.pop()
self.body.append('</ol>\n')
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
def visit_field(self, node):
self.body.append(self.starttag(node, 'tr', '', CLASS='field'))
@@ -973,12 +956,6 @@ class HTMLTranslator(nodes.NodeVisitor):
self.header.extend(header)
del self.body[start:]
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
def visit_image(self, node):
atts = {}
atts['src'] = node['uri']
@@ -1043,12 +1020,6 @@ class HTMLTranslator(nodes.NodeVisitor):
def depart_image(self, node):
self.body.append(self.context.pop())
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
def visit_inline(self, node):
self.body.append(self.starttag(node, 'span', ''))
@@ -1127,12 +1098,6 @@ class HTMLTranslator(nodes.NodeVisitor):
self.meta.append(tag)
self.head.append(tag)
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
def visit_option(self, node):
if self.context[-1]:
self.body.append(', ')
@@ -1471,12 +1436,6 @@ class HTMLTranslator(nodes.NodeVisitor):
def depart_thead(self, node):
self.body.append('</thead>\n')
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
def visit_title(self, node, move_ids=1):
"""Only 6 section levels are supported by HTML."""
check_id = 0
@@ -1569,12 +1528,6 @@ class HTMLTranslator(nodes.NodeVisitor):
def depart_version(self, node):
self.depart_docinfo_item()
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
def unimplemented_visit(self, node):
raise NotImplementedError('visiting unimplemented node type: %s'
% node.__class__.__name__)
diff --git a/docutils/docutils/writers/newlatex2e/__init__.py b/docutils/docutils/writers/newlatex2e/__init__.py
index fe9dc6142..096676edf 100644
--- a/docutils/docutils/writers/newlatex2e/__init__.py
+++ b/docutils/docutils/writers/newlatex2e/__init__.py
@@ -83,7 +83,8 @@ class Writer(writers.Writer):
"""Final translated form of `document`."""
def get_transforms(self):
- return writers.Writer.get_transforms(self) + [writer_aux.Compound]
+ return writers.Writer.get_transforms(self) + [
+ writer_aux.Compound, writer_aux.Admonitions]
def __init__(self):
writers.Writer.__init__(self)
diff --git a/docutils/docutils/writers/newlatex2e/base.tex b/docutils/docutils/writers/newlatex2e/base.tex
index f9aab97e9..24decd952 100644
--- a/docutils/docutils/writers/newlatex2e/base.tex
+++ b/docutils/docutils/writers/newlatex2e/base.tex
@@ -339,6 +339,9 @@
\ifthenelse{\equal{\DEVhassubtitle}{false}}{\vspace{1em}}{\vspace{0.5em}}%
\par%
}
+\providecommand{\Dadmonitiontitle}[1]{%
+ \Dtopictitle{#1}%
+}
\providecommand{\Dtopicsubtitle}[1]{%
\noindent\Dformatboxsubtitle{#1}%
\vspace{1em}%
@@ -437,6 +440,9 @@
\Dmakebox{#1}%
}%
}
+\providecommand{\DNadmonition}[1]{%
+ \DNtopic{#1}%
+}
\providecommand{\Dformatrubric}[1]{\textbf{#1}}
\Dprovidelength{\Dprerubricspace}{0.3em}
\providecommand{\DNrubric}[1]{%
diff --git a/docutils/test/test_transforms/test_writer_aux.py b/docutils/test/test_transforms/test_writer_aux.py
index f4c0b418a..b058dcfc8 100755
--- a/docutils/test/test_transforms/test_writer_aux.py
+++ b/docutils/test/test_transforms/test_writer_aux.py
@@ -49,6 +49,39 @@ totest['compound'] = ((writer_aux.Compound,), [
"""],
])
+totest['admonitions'] = ((writer_aux.Admonitions,), [
+["""\
+.. note::
+
+ These are the note contents.
+
+ Another paragraph.
+""",
+"""\
+<document source="test data">
+ <admonition classes="note">
+ <title>
+ Note
+ <paragraph>
+ These are the note contents.
+ <paragraph>
+ Another paragraph.
+"""],
+["""\
+.. admonition:: Generic
+
+ Admonitions contents...
+""",
+"""\
+<document source="test data">
+ <admonition classes="admonition-generic admonition">
+ <title>
+ Generic
+ <paragraph>
+ Admonitions contents...
+"""],
+])
+
if __name__ == '__main__':
import unittest