summaryrefslogtreecommitdiff
path: root/docutils/transforms/universal.py
diff options
context:
space:
mode:
authorgoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-06-01 01:40:18 +0000
committergoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2002-06-01 01:40:18 +0000
commit8f2f1d9958c71eecc024167722971ada5158f99d (patch)
treea5c12dd7b22820dd15a0b6cef1fd5c612ffbba74 /docutils/transforms/universal.py
parent8610e9c1dfa7383679ef821aac3e95185feadae4 (diff)
downloaddocutils-8f2f1d9958c71eecc024167722971ada5158f99d.tar.gz
- Added ``Decorations`` transform (support for "--generator",
"--date", "--time", "--source-link" options). git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@169 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/transforms/universal.py')
-rw-r--r--docutils/transforms/universal.py58
1 files changed, 57 insertions, 1 deletions
diff --git a/docutils/transforms/universal.py b/docutils/transforms/universal.py
index 175faf637..782d930c5 100644
--- a/docutils/transforms/universal.py
+++ b/docutils/transforms/universal.py
@@ -8,6 +8,7 @@
Transforms needed by most or all documents:
+- `Decorations`: Generate a document's header & footer.
- `Messages`: Placement of system messages stored in
`nodes.document.messages`.
- `TestMessages`: Like `Messages`, used on test runs.
@@ -21,10 +22,65 @@ __docformat__ = 'reStructuredText'
import re
import sys
+import time
from docutils import nodes, utils
from docutils.transforms import TransformError, Transform
+class Decorations(Transform):
+
+ """
+ Populate a document's decoration element (header, footer).
+ """
+
+ def transform(self):
+ header = self.generate_header()
+ footer = self.generate_footer()
+ if header or footer:
+ decoration = nodes.decoration()
+ decoration += header
+ decoration += footer
+ document = self.document
+ index = document.first_child_not_matching_class(
+ nodes.PreDecorative)
+ if index is None:
+ document += decoration
+ else:
+ document[index:index] = [decoration]
+
+ def generate_header(self):
+ return None
+
+ def generate_footer(self):
+ # @@@ Text is hard-coded for now.
+ # Should be made dynamic (language-dependent).
+ options = self.document.options
+ if options.generator or options.datestamp or options.source_link:
+ text = []
+ if options.generator:
+ text.extend([
+ nodes.Text('Generated by '),
+ nodes.reference('', 'Docutils', refuri=
+ 'http://docutils.sourceforge.net/'),
+ nodes.Text(' from '),
+ nodes.reference('', 'reStructuredText', refuri='http://'
+ 'docutils.sourceforge.net/rst.html'),
+ nodes.Text(' source. ')])
+ if options.source_link:
+ text.extend([
+ nodes.reference('', 'View document source',
+ refuri=self.document['source']),
+ nodes.Text('. ')])
+ if options.datestamp:
+ datestamp = time.strftime(options.datestamp, time.gmtime())
+ text.append(nodes.Text('Date: ' + datestamp + '. '))
+ footer = nodes.footer()
+ footer += nodes.paragraph('', '', *text)
+ return footer
+ else:
+ return None
+
+
class Messages(Transform):
"""
@@ -149,7 +205,7 @@ test_transforms = (TestMessages,)
first_reader_transforms = (FirstReaderPending,)
"""Universal transforms to apply before any other Reader transforms."""
-last_reader_transforms = (LastReaderPending,)
+last_reader_transforms = (LastReaderPending, Decorations)
"""Universal transforms to apply after all other Reader transforms."""
first_writer_transforms = (FirstWriterPending,)