From bae270eb71648936b5272502e61cb9ddd6890bf2 Mon Sep 17 00:00:00 2001 From: Jotham Apaloo Date: Mon, 26 Jan 2015 22:33:28 -0500 Subject: [PATCH] Add support for org via pypandoc to markdown. --- pelican/pandoc_templates/md_org_template.markdown | 12 ++++++++++++ pelican/readers.py | 15 +++++++++++++++ pelican/settings.py | 1 + 3 files changed, 28 insertions(+) create mode 100644 pelican/pandoc_templates/md_org_template.markdown diff --git a/pelican/pandoc_templates/md_org_template.markdown b/pelican/pandoc_templates/md_org_template.markdown new file mode 100644 index 00000000..b8946f5d --- /dev/null +++ b/pelican/pandoc_templates/md_org_template.markdown @@ -0,0 +1,12 @@ +$if(title)$Title: $title$$endif$ +$for(author)$Author: $author$$endfor$ +$if(date)$Date: $date$$endif$ +$if(category)$Category: $category$$endif$ +$if(modified)$Modified: $modified$$endif$ +$if(slug)$Slug: $slug$$endif$ +$if(summary)$Summary: $summary$$endif$ +$if(modified)$Modified: $modified$$endif$ +$for(tags)$Tags: $tags$$endfor$ +$if(toc)$ $toc$$endif$ +$body$ +$for(include-after)$$include-after$$endfor$ diff --git a/pelican/readers.py b/pelican/readers.py index 85147e3e..8a019164 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals, print_function import logging import os import re +import pkg_resources import docutils import docutils.core @@ -21,6 +22,10 @@ try: from html import escape except ImportError: from cgi import escape +try: + import pypandoc +except ImportError: + pandoc = False # NOQA from six.moves.html_parser import HTMLParser from pelican import signals @@ -195,6 +200,10 @@ class MarkdownReader(BaseReader): enabled = bool(Markdown) file_extensions = ['md', 'markdown', 'mkd', 'mdown'] + enable_pypandoc = bool(pypandoc) + if enable_pypandoc is True: + file_extensions.append('org') + logger.info('Using pandoc to convert org to markdown') def __init__(self, *args, **kwargs): super(MarkdownReader, self).__init__(*args, **kwargs) @@ -235,6 +244,12 @@ class MarkdownReader(BaseReader): self._source_path = source_path self._md = Markdown(extensions=self.extensions) with pelican_open(source_path) as text: + if self._source_path[-4:] == '.org' and \ + self.enable_pypandoc is True: + pandoc_data_dir = '='.join(['--data-dir', pkg_resources.resource_filename('pelican', 'pandoc_templates')]) + text = pypandoc.convert(text, 'markdown', \ + format='org',\ + extra_args=['--template=md_org_template.markdown', pandoc_data_dir]) content = self._md.convert(text) metadata = self._parse_metadata(self._md.Meta) diff --git a/pelican/settings.py b/pelican/settings.py index 794733d7..2dfb438f 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -135,6 +135,7 @@ DEFAULT_CONFIG = { 'LOAD_CONTENT_CACHE': True, 'AUTORELOAD_IGNORE_CACHE': False, 'WRITE_SELECTED': [], + 'PANDOC_TEMPLATES_PATH': ['pandoc_templates'], } PYGMENTS_RST_OPTIONS = None