diff --git a/pelican/readers.py b/pelican/readers.py index 61255dee..6bd2822d 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -133,16 +133,27 @@ class MarkdownReader(Reader): file_extensions = ['md', 'markdown', 'mkd'] extensions = ['codehilite', 'extra'] + def _parse_metadata(self, meta): + """Return the dict containing document metadata""" + md = Markdown(extensions=set(self.extensions + ['meta'])) + output = {} + for name, value in meta.items(): + name = name.lower() + if name == "summary": + summary_values = "\n".join(str(item) for item in value) + summary = md.convert(summary_values) + output[name] = self.process_metadata(name, summary) + else: + output[name] = self.process_metadata(name, value[0]) + return output + def read(self, filename): """Parse content and metadata of markdown files""" text = pelican_open(filename) md = Markdown(extensions=set(self.extensions + ['meta'])) content = md.convert(text) - metadata = {} - for name, value in md.Meta.items(): - name = name.lower() - metadata[name] = self.process_metadata(name, value[0]) + metadata = self._parse_metadata(md.Meta) return content, metadata diff --git a/tests/content/article_with_markdown_and_summary_metadata_multi.md b/tests/content/article_with_markdown_and_summary_metadata_multi.md new file mode 100644 index 00000000..b6ef666c --- /dev/null +++ b/tests/content/article_with_markdown_and_summary_metadata_multi.md @@ -0,0 +1,7 @@ +Title: Article with markdown and summary metadata multi +Date: 2012-10-31 +Summary: + A multi-line summary should be supported + as well as **inline markup**. + +This is some content. diff --git a/tests/content/article_with_markdown_and_summary_metadata_single.md b/tests/content/article_with_markdown_and_summary_metadata_single.md new file mode 100644 index 00000000..a7d6f09b --- /dev/null +++ b/tests/content/article_with_markdown_and_summary_metadata_single.md @@ -0,0 +1,5 @@ +Title: Article with markdown and summary metadata single +Date: 2012-10-30 +Summary: A single-line summary should be supported as well as **inline markup**. + +This is some content. diff --git a/tests/test_generators.py b/tests/test_generators.py index 90b19227..fb1dbe9c 100644 --- a/tests/test_generators.py +++ b/tests/test_generators.py @@ -71,6 +71,8 @@ class TestArticlesGenerator(unittest.TestCase): articles = self.distill_articles(generator.articles) articles_expected = [ [u'Article title', 'published', 'Default', 'article'], + [u'Article with markdown and summary metadata single', 'published', u'Default', 'article'], + [u'Article with markdown and summary metadata multi', 'published', u'Default', 'article'], [u'Article with template', 'published', 'Default', 'custom'], [u'Test md File', 'published', 'test', 'article'], [u'Rst with filename metadata', 'published', u'yeah', 'article'], diff --git a/tests/test_readers.py b/tests/test_readers.py index 937a98e3..ae325d62 100644 --- a/tests/test_readers.py +++ b/tests/test_readers.py @@ -203,6 +203,20 @@ class MdReaderTest(unittest.TestCase): for key, value in expected.items(): self.assertEquals(value, metadata[key], key) + @unittest.skipUnless(readers.Markdown, "markdown isn't installed") + def test_article_with_summary_metadata(self): + reader = readers.MarkdownReader({}) + content, metadata = reader.read( + _filename('article_with_markdown_and_summary_metadata_single.md')) + expected_summary = u'
A single-line summary should be supported'\ + u' as well as inline markup.
' + self.assertEquals(expected_summary, metadata['summary'], 'summary') + content, metadata = reader.read( + _filename('article_with_markdown_and_summary_metadata_multi.md')) + expected_summary = u'A multi-line summary should be supported'\ + u'\nas well as inline markup.
' + self.assertEquals(expected_summary, metadata['summary'], 'summary') + class AdReaderTest(unittest.TestCase): @unittest.skipUnless(readers.asciidoc, "asciidoc isn't installed")