From a5f47cfae9766b8fabc9cd21b17c14b92a34e730 Mon Sep 17 00:00:00 2001 From: Borgar Date: Wed, 15 Jun 2011 23:48:54 +0000 Subject: [PATCH] Allow overriding reader extensions. This adds an extensions setting all readers in the style of [ext]_EXTENSIONS. So for the MarkdownReader, who's extension is "md", the setting read is MD_EXTENSIONS. The settings allow overriding the default options passed through the readers. In the case of Markdown the default values are ['codehilite','extra'], but user may change this through the setting: MD_EXTENSIONS = ['footnotes','abbr','codehilite'] --- docs/settings.rst | 4 ++++ pelican/generators.py | 2 +- pelican/readers.py | 10 +++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index e4e2feaf..d6b05cab 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -46,6 +46,10 @@ Setting name (default value) what does it do? `MARKUP` (``('rst', 'md')``) A list of available markup languages you want to use. For the moment, only available values are `rst` and `md`. +`MD_EXTENSIONS` (``('codehilite','extra')``) A list of the extensions that the markdown processor + will use. Refer to the extensions chapter in the + Python-Markdown documentation for a complete list of + supported extensions. `OUTPUT_PATH` (``'output/'``) Where to output the generated files. `PATH` (``None``) path to look at for input files. `PDF_GENERATOR` (``False``) Set to True if you want to have PDF versions diff --git a/pelican/generators.py b/pelican/generators.py index f6ac35a0..2862ec6d 100755 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -211,7 +211,7 @@ class ArticlesGenerator(Generator): files = self.get_files(self.path, exclude=['pages',]) all_articles = [] for f in files: - content, metadata = read_file(f) + content, metadata = read_file(f, settings=self.settings) # if no category is set, use the name of the path as a category if 'category' not in metadata.keys(): diff --git a/pelican/readers.py b/pelican/readers.py index 4c8acd2a..418753fa 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -32,7 +32,7 @@ def _process_metadata(name, value): class Reader(object): enabled = True - + extensions = None class _FieldBodyTranslator(HTMLTranslator): @@ -99,11 +99,12 @@ class RstReader(Reader): class MarkdownReader(Reader): enabled = bool(Markdown) extension = "md" + extensions = ['codehilite', 'extra'] def read(self, filename): """Parse content and metadata of markdown files""" text = open(filename) - md = Markdown(extensions = ['meta', 'codehilite', 'extra']) + md = Markdown(extensions=set(self.extensions+['meta'])) content = md.convert(text) metadata = {} @@ -133,13 +134,16 @@ class HtmlReader(Reader): _EXTENSIONS = dict((cls.extension, cls) for cls in Reader.__subclasses__()) -def read_file(filename, fmt=None): +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_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)