From 733e41a6a7a976c29a1f580dc064e599677da54f Mon Sep 17 00:00:00 2001 From: Michael Reneer Date: Tue, 11 Dec 2012 00:34:15 -0500 Subject: [PATCH 1/3] Updated markdown reader to parse summary metadata as markup. --- pelican/readers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pelican/readers.py b/pelican/readers.py index 61255dee..4164847d 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -142,7 +142,12 @@ class MarkdownReader(Reader): metadata = {} for name, value in md.Meta.items(): name = name.lower() - metadata[name] = self.process_metadata(name, value[0]) + if name == "summary": + summary_values = "\n".join(str(item) for item in value) + summary = md.convert(summary_values) + metadata[name] = self.process_metadata(name, summary) + else: + metadata[name] = self.process_metadata(name, value[0]) return content, metadata From f66c16bd52ff3e9fe0a9c0833e22f53ede89b531 Mon Sep 17 00:00:00 2001 From: Michael Reneer Date: Tue, 11 Dec 2012 00:37:06 -0500 Subject: [PATCH 2/3] Updated unit tests to test markdown summary metadata. --- ...cle_with_markdown_and_summary_metadata_multi.md | 7 +++++++ ...le_with_markdown_and_summary_metadata_single.md | 5 +++++ tests/test_generators.py | 2 ++ tests/test_readers.py | 14 ++++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 tests/content/article_with_markdown_and_summary_metadata_multi.md create mode 100644 tests/content/article_with_markdown_and_summary_metadata_single.md 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") From b35947f7a65c2991cb5ea20d5d16dd094c0d43e2 Mon Sep 17 00:00:00 2001 From: Michael Reneer Date: Tue, 11 Dec 2012 00:48:47 -0500 Subject: [PATCH 3/3] Cleaned up markdown read. --- pelican/readers.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/pelican/readers.py b/pelican/readers.py index 4164847d..6bd2822d 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -133,21 +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() - if name == "summary": - summary_values = "\n".join(str(item) for item in value) - summary = md.convert(summary_values) - metadata[name] = self.process_metadata(name, summary) - else: - metadata[name] = self.process_metadata(name, value[0]) + metadata = self._parse_metadata(md.Meta) return content, metadata