summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docutils/HISTORY.txt8
-rw-r--r--docutils/docs/ref/transforms.txt3
-rw-r--r--docutils/docs/user/config.txt5
-rw-r--r--docutils/docutils/frontend.py3
-rw-r--r--docutils/docutils/transforms/html.py30
-rw-r--r--docutils/docutils/writers/html4css1.py27
-rw-r--r--docutils/test/DocutilsTestSupport.py1
-rw-r--r--docutils/test/functional/tests/_default.py1
-rwxr-xr-xdocutils/test/test_dependencies.py1
-rwxr-xr-xdocutils/test/test_writers/test_html4css1_misc.py3
10 files changed, 64 insertions, 18 deletions
diff --git a/docutils/HISTORY.txt b/docutils/HISTORY.txt
index e5030a2b0..453736e92 100644
--- a/docutils/HISTORY.txt
+++ b/docutils/HISTORY.txt
@@ -22,6 +22,10 @@ Changes Since 0.3.9
- Added ``__version_details__`` attribute to describe code source
(repository/snapshot/release).
+* docutils/frontend.py:
+
+ - Added ``_stylesheet_required`` internal setting.
+
* docutils/parsers/rst/__init__.py:
- Added validator to tab_width setting, with test. Closes SF bug
@@ -44,6 +48,9 @@ Changes Since 0.3.9
standard data files for the "include" directive. Initial contents:
character entity substitution definition sets.
+* docutils/transforms/html.py: Added to project; transforms specific
+ to the html4css1 Writer.
+
* docutils/writers/html4css1.py:
- Added support for image width and height units.
@@ -53,6 +60,7 @@ Changes Since 0.3.9
``--stylesheet-path`` is specified.
- Made ``--embed-stylesheet`` the default rather than
``--link-stylesheet``.
+ - Added writer-specific transform to check the stylesheet setting.
* docutils/writers/docutils_xml.py:
diff --git a/docutils/docs/ref/transforms.txt b/docutils/docs/ref/transforms.txt
index 079bedaaa..7bdcee1de 100644
--- a/docutils/docs/ref/transforms.txt
+++ b/docutils/docs/ref/transforms.txt
@@ -40,6 +40,8 @@ peps.Headers pep (r) 360
peps.Contents pep (r) 380
+html.StylesheetCheck html4css1 (w) 420
+
references.AnonymousHyperlinks standalone (r), pep (r) 440
references.IndirectHyperlinks standalone (r), pep (r) 460
@@ -83,6 +85,7 @@ misc.CallBack n/a 990
Key:
* (r): Reader
+* (w): Writer
* (d): Directive
* (t): Transform
* (/p): Via a "pending" node
diff --git a/docutils/docs/user/config.txt b/docutils/docs/user/config.txt
index d7b08bf48..3b7e8c2d0 100644
--- a/docutils/docs/user/config.txt
+++ b/docutils/docs/user/config.txt
@@ -911,6 +911,11 @@ _`_source`
Default: stdin (None). No command-line options.
+_`_stylesheet_required`
+ Used to disable stylesheet checking in writers that use
+ stylesheets. For programmatic use only.
+
+ Default: required (1). No command-line options.
.. _ISO 639: http://www.loc.gov/standards/iso639-2/englangn.html
diff --git a/docutils/docutils/frontend.py b/docutils/docutils/frontend.py
index 8f357ae4b..62037b5f7 100644
--- a/docutils/docutils/frontend.py
+++ b/docutils/docutils/frontend.py
@@ -461,7 +461,8 @@ class OptionParser(optparse.OptionParser, docutils.SettingsSpec):
settings_defaults = {'_disable_config': None,
'_source': None,
- '_destination': None}
+ '_destination': None,
+ '_stylesheet_required': 1,}
"""Defaults for settings that don't have command-line option equivalents."""
relative_path_settings = ('warning_stream',)
diff --git a/docutils/docutils/transforms/html.py b/docutils/docutils/transforms/html.py
new file mode 100644
index 000000000..202fab37d
--- /dev/null
+++ b/docutils/docutils/transforms/html.py
@@ -0,0 +1,30 @@
+# Author: David Goodger
+# Contact: goodger@python.org
+# Revision: $Revision$
+# Date: $Date$
+# Copyright: This module has been placed in the public domain.
+
+"""
+Transforms specific to the HTML writer.
+"""
+
+__docformat__ = 'reStructuredText'
+
+from docutils import nodes, utils
+from docutils.transforms import Transform, TransformError
+
+
+class StylesheetCheck(Transform):
+
+ """Check for a proper stylesheet setting."""
+
+ default_priority = 420
+
+ def apply(self):
+ if ( self.document.settings._stylesheet_required
+ and not utils.get_stylesheet_reference(self.document.settings)):
+ self.document.reporter.warning(
+ 'No stylesheet path or URI given. Use the --stylesheet '
+ 'or --stylesheet-path option to specify the location of '
+ 'default.css (in the tools/stylesheets/ directory of the '
+ 'Docutils distribution).')
diff --git a/docutils/docutils/writers/html4css1.py b/docutils/docutils/writers/html4css1.py
index ac095859a..749982a14 100644
--- a/docutils/docutils/writers/html4css1.py
+++ b/docutils/docutils/writers/html4css1.py
@@ -28,6 +28,7 @@ except ImportError:
Image = None
import docutils
from docutils import frontend, nodes, utils, writers, languages
+from docutils.transforms import html
class Writer(writers.Writer):
@@ -116,6 +117,8 @@ class Writer(writers.Writer):
config_section = 'html4css1 writer'
config_section_dependencies = ('writers',)
+ default_transforms = (html.StylesheetCheck,)
+
def __init__(self):
writers.Writer.__init__(self)
self.translator_class = HTMLTranslator
@@ -217,22 +220,14 @@ class HTMLTranslator(nodes.NodeVisitor):
self.head = self.meta[:]
stylesheet = utils.get_stylesheet_reference(settings)
self.stylesheet = []
- if stylesheet is None:
- # Creating a warning is a bad idea as long as it breaks
- # existing scripts which use Docutils programmatically.
- #self.document.reporter.warning(
- # 'No stylesheet path or URI given.\nUse the --stylesheet '
- # 'or --stylesheet-path option to specify the location of\n'
- # 'default.css (in the tools/stylesheets/ directory '
- # 'of the Docutils distribution).\n')
- pass
- elif settings.embed_stylesheet and stylesheet:
- stylesheet = utils.get_stylesheet_reference(settings,
- os.path.join(os.getcwd(), 'dummy'))
- settings.record_dependencies.add(stylesheet)
- stylesheet_text = open(stylesheet).read()
- self.stylesheet = [self.embedded_stylesheet % stylesheet_text]
- elif stylesheet:
+ if stylesheet:
+ if settings.embed_stylesheet:
+ stylesheet = utils.get_stylesheet_reference(
+ settings, os.path.join(os.getcwd(), 'dummy'))
+ settings.record_dependencies.add(stylesheet)
+ stylesheet_text = open(stylesheet).read()
+ self.stylesheet = [self.embedded_stylesheet % stylesheet_text]
+ else:
self.stylesheet = [self.stylesheet_link
% self.encode(stylesheet)]
self.body_prefix = ['</head>\n<body>\n']
diff --git a/docutils/test/DocutilsTestSupport.py b/docutils/test/DocutilsTestSupport.py
index 32c263982..72d5cdbc2 100644
--- a/docutils/test/DocutilsTestSupport.py
+++ b/docutils/test/DocutilsTestSupport.py
@@ -632,6 +632,7 @@ class WriterPublishTestCase(CustomTestCase, docutils.SettingsSpec):
"""
settings_default_overrides = {'_disable_config': 1,
+ '_stylesheet_required': 0,
'strict_visitor': 1}
writer_name = '' # set in subclasses or constructor
diff --git a/docutils/test/functional/tests/_default.py b/docutils/test/functional/tests/_default.py
index 2835c5b2e..4c72c04c8 100644
--- a/docutils/test/functional/tests/_default.py
+++ b/docutils/test/functional/tests/_default.py
@@ -5,3 +5,4 @@ settings_overrides['halt_level'] = 5
settings_overrides['warning_stream'] = ''
settings_overrides['input_encoding'] = 'utf-8'
settings_overrides['embed_stylesheet'] = 0
+settings_overrides['_stylesheet_required'] = 0
diff --git a/docutils/test/test_dependencies.py b/docutils/test/test_dependencies.py
index c9f00518d..e1ccc24ef 100755
--- a/docutils/test/test_dependencies.py
+++ b/docutils/test/test_dependencies.py
@@ -30,6 +30,7 @@ class RecordDependenciesTests(unittest.TestCase):
settings.setdefault('settings_overrides', {})
settings['settings_overrides'] = settings['settings_overrides'].copy()
settings['settings_overrides']['_disable_config'] = 1
+ settings['settings_overrides']['_stylesheet_required'] = 0
if not settings['settings_overrides'].has_key('record_dependencies'):
settings['settings_overrides']['record_dependencies'] = \
docutils.utils.DependencyList(recordfile)
diff --git a/docutils/test/test_writers/test_html4css1_misc.py b/docutils/test/test_writers/test_html4css1_misc.py
index df07a7bd5..940f99482 100755
--- a/docutils/test/test_writers/test_html4css1_misc.py
+++ b/docutils/test/test_writers/test_html4css1_misc.py
@@ -23,7 +23,8 @@ class EncodingTestCase(DocutilsTestSupport.StandardTestCase):
settings_overrides={
'output_encoding': 'latin1',
'stylesheet': '',
- '_disable_config': 1}
+ '_disable_config': 1,
+ '_stylesheet_required': 0,}
result = core.publish_string(
'äöü€', writer_name='html4css1',
settings_overrides=settings_overrides)