diff options
| -rw-r--r-- | docutils/HISTORY.txt | 8 | ||||
| -rw-r--r-- | docutils/docs/ref/transforms.txt | 3 | ||||
| -rw-r--r-- | docutils/docs/user/config.txt | 5 | ||||
| -rw-r--r-- | docutils/docutils/frontend.py | 3 | ||||
| -rw-r--r-- | docutils/docutils/transforms/html.py | 30 | ||||
| -rw-r--r-- | docutils/docutils/writers/html4css1.py | 27 | ||||
| -rw-r--r-- | docutils/test/DocutilsTestSupport.py | 1 | ||||
| -rw-r--r-- | docutils/test/functional/tests/_default.py | 1 | ||||
| -rwxr-xr-x | docutils/test/test_dependencies.py | 1 | ||||
| -rwxr-xr-x | docutils/test/test_writers/test_html4css1_misc.py | 3 |
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) |
