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)