diff options
| author | goodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2002-06-01 01:40:18 +0000 |
|---|---|---|
| committer | goodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2002-06-01 01:40:18 +0000 |
| commit | 8f2f1d9958c71eecc024167722971ada5158f99d (patch) | |
| tree | a5c12dd7b22820dd15a0b6cef1fd5c612ffbba74 /docutils/transforms/universal.py | |
| parent | 8610e9c1dfa7383679ef821aac3e95185feadae4 (diff) | |
| download | docutils-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.py | 58 |
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,) |
