diff --git a/docs/settings.rst b/docs/settings.rst index 69e2adc8..6780c6ae 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -69,6 +69,11 @@ Setting name (default value) What does it do? `TIMEZONE` The timezone used in the date information, to generate Atom and RSS feeds. See the "timezone" section below for more info. +`TYPOGRIFY` (``False``) If set to true, some + additional transformations will be done on the + generated HTML, using the `Typogrify + `_ + library ================================================ ===================================================== .. [#] Default is the system locale. diff --git a/pelican/readers.py b/pelican/readers.py index 5bbbfb30..a581e458 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -143,12 +143,24 @@ def read_file(filename, fmt=None, settings=None): """Return a reader object using the given format.""" if not fmt: fmt = filename.split('.')[-1] + if fmt not in _EXTENSIONS.keys(): raise TypeError('Pelican does not know how to parse %s' % filename) + reader = _EXTENSIONS[fmt](settings) settings_key = '%s_EXTENSIONS' % fmt.upper() + if settings and settings_key in settings: reader.extensions = settings[settings_key] + if not reader.enabled: raise ValueError("Missing dependencies for %s" % fmt) - return reader.read(filename) + + content, metadata = reader.read(filename) + + # eventually filter the content with typogrify if asked so + if settings and settings['TYPOGRIFY']: + from typogrify import Typogrify + content = Typogrify.typogrify(content) + + return content, metadata diff --git a/pelican/settings.py b/pelican/settings.py index bfc8e940..8cb06e90 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -57,7 +57,8 @@ _DEFAULT_CONFIG = {'PATH': None, 'DEFAULT_METADATA': (), 'FILES_TO_COPY': (), 'DEFAULT_STATUS': 'published', - 'ARTICLE_PERMALINK_STRUCTURE': '' + 'ARTICLE_PERMALINK_STRUCTURE': '', + 'TYPOGRIFY': False, } diff --git a/tests/content/article.rst b/tests/content/article.rst new file mode 100644 index 00000000..1707ab03 --- /dev/null +++ b/tests/content/article.rst @@ -0,0 +1,4 @@ +Article title +############# + +This is some content. With some stuff to "typogrify". diff --git a/tests/test_readers.py b/tests/test_readers.py index 2d023462..d4f0aecf 100644 --- a/tests/test_readers.py +++ b/tests/test_readers.py @@ -33,3 +33,20 @@ class RstReaderTest(unittest.TestCase): for key, value in expected.items(): self.assertEquals(value, metadata[key], key) + + def test_typogrify(self): + # if nothing is specified in the settings, the content should be + # unmodified + content, _ = readers.read_file(_filename('article.rst')) + expected = "

This is some content. With some stuff to "\ + ""typogrify".

\n" + + self.assertEqual(content, expected) + + # otherwise, typogrify should be applied + content, _ = readers.read_file(_filename('article.rst'), + settings={'TYPOGRIFY': True}) + expected = "

This is some content. With some stuff to "\ + "“typogrify”.

\n" + + self.assertEqual(content, expected)