""" # YAML Meta Data Extension for [Python-Markdown](https://github.com/waylan/Python-Markdown) This extension adds YAML meta data handling to markdown. As in the original, meta data is parsed but not used in processing. (YAML meta data is used e.g. by [pandoc](http://johnmacfarlane.net/pandoc/)) Dependencies: [PyYAML](http://pyyaml.org/) Basic Usage: >>> import markdown >>> text = '''--- ... Title: Test Doc. ... Author: Waylan Limberg ... Blank_Data: ... ... ... ... The body. This is paragraph one. ... ''' >>> md = markdown.Markdown(['meta_yaml']) >>> print(md.convert(text))

The body. This is paragraph one.

>>> print(md.Meta) # doctest: +SKIP {'blank_data': [''], 'author': ['Waylan Limberg'], 'title': ['Test Doc.']} Make sure text without Meta Data still works (markdown < 1.6b returns a

). >>> text = ' Some Code - not extra lines of meta data.' >>> md = markdown.Markdown(['meta_yaml']) >>> print(md.convert(text))

Some Code - not extra lines of meta data.
    
>>> md.Meta {} Copyright 2014 Bernhard Fisseni Based on the meta data extension included with Python-Markdown, Copyright 2007-2008 [Waylan Limberg](http://achinghead.com). License: BSD (see LICENSE.md for details) """ from __future__ import absolute_import from __future__ import unicode_literals from markdown import Extension from markdown.preprocessors import Preprocessor import yaml try: from yaml import CBaseLoader as Loader except ImportError: from yaml import BaseLoader as Loader # Override the default string handling function to always return unicode objects def construct_yaml_str(self, node): return self.construct_scalar(node) Loader.add_constructor(u'tag:yaml.org,2002:str', construct_yaml_str) class MetaYamlExtension(Extension): """Extension for parsing YAML-Metadata with Python-Markdown.""" def extendMarkdown(self, md, md_globals): """Add MetaYamlPreprocessor to Markdown instance.""" md.preprocessors.add("meta_yaml", MetaYamlPreprocessor(md), "