diff options
| author | wiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2006-08-16 23:01:34 +0000 |
|---|---|---|
| committer | wiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2006-08-16 23:01:34 +0000 |
| commit | b0d47ee51542a4dc174f456abcddb1ff69397563 (patch) | |
| tree | 7af2d59cba724a056a3f453074a0fafa9c327f34 | |
| parent | 25813dbf29c75667b8623798b095a662c4389015 (diff) | |
| download | docutils-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.txt | 6 | ||||
| -rw-r--r-- | docutils/docs/ref/transforms.txt | 7 | ||||
| -rw-r--r-- | docutils/docutils/transforms/writer_aux.py | 42 | ||||
| -rw-r--r-- | docutils/docutils/writers/html4css1/__init__.py | 59 | ||||
| -rw-r--r-- | docutils/docutils/writers/newlatex2e/__init__.py | 3 | ||||
| -rw-r--r-- | docutils/docutils/writers/newlatex2e/base.tex | 6 | ||||
| -rwxr-xr-x | docutils/test/test_transforms/test_writer_aux.py | 33 |
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 |
