""" Meta Data Extension for Python-Markdown ======================================= This extension adds Meta Data handling to markdown. See <https://pythonhosted.org/Markdown/extensions/meta_data.html> for documentation. Original code Copyright 2007-2008 [Waylan Limberg](http://achinghead.com). All changes Copyright 2008-2014 The Python Markdown Project License: [BSD](http://www.opensource.org/licenses/bsd-license.php) """ from __future__ import absolute_import from __future__ import unicode_literals from . import Extension from ..preprocessors import Preprocessor import re import logging log = logging.getLogger('MARKDOWN') # Global Vars META_RE = re.compile(r'^[ ]{0,3}(?P<key>[A-Za-z0-9_-]+):\s*(?P<value>.*)') META_MORE_RE = re.compile(r'^[ ]{4,}(?P<value>.*)') BEGIN_RE = re.compile(r'^-{3}(\s.*)?') END_RE = re.compile(r'^(-{3}|\.{3})(\s.*)?') class MetaExtension (Extension): """ Meta-Data extension for Python-Markdown. """ def extendMarkdown(self, md, md_globals): """ Add MetaPreprocessor to Markdown instance. """ md.preprocessors.add("meta", MetaPreprocessor(md), ">normalize_whitespace") class MetaPreprocessor(Preprocessor): """ Get Meta-Data. """ def run(self, lines): """ Parse Meta-Data and store in Markdown.Meta. """ meta = {} key = None if lines and BEGIN_RE.match(lines[0]): lines.pop(0) while lines: line = lines.pop(0) m1 = META_RE.match(line) if line.strip() == '' or END_RE.match(line): break # blank line or end of YAML header - done if m1: key = m1.group('key').lower().strip() value = m1.group('value').strip() try: meta[key].append(value) except KeyError: meta[key] = [value] else: m2 = META_MORE_RE.match(line) if m2 and key: # Add another line to existing key meta[key].append(m2.group('value').strip()) else: lines.insert(0, line) break # no meta data - done self.markdown.Meta = meta return lines def makeExtension(*args, **kwargs): return MetaExtension(*args, **kwargs)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__init__.py | File | 3.76 KB | 0644 |
|
__init__.pyc | File | 4 KB | 0644 |
|
abbr.py | File | 2.67 KB | 0644 |
|
abbr.pyc | File | 4.14 KB | 0644 |
|
admonition.py | File | 3.09 KB | 0644 |
|
admonition.pyc | File | 3.66 KB | 0644 |
|
attr_list.py | File | 6.12 KB | 0644 |
|
attr_list.pyc | File | 6.21 KB | 0644 |
|
codehilite.py | File | 9.54 KB | 0644 |
|
codehilite.pyc | File | 9.3 KB | 0644 |
|
def_list.py | File | 3.66 KB | 0644 |
|
def_list.pyc | File | 4.31 KB | 0644 |
|
extra.py | File | 5.42 KB | 0644 |
|
extra.pyc | File | 5.57 KB | 0644 |
|
fenced_code.py | File | 4.01 KB | 0644 |
|
fenced_code.pyc | File | 4.45 KB | 0644 |
|
footnotes.py | File | 14.57 KB | 0644 |
|
footnotes.pyc | File | 14.79 KB | 0644 |
|
headerid.py | File | 3.24 KB | 0644 |
|
headerid.pyc | File | 4.23 KB | 0644 |
|
meta.py | File | 2.34 KB | 0644 |
|
meta.pyc | File | 2.95 KB | 0644 |
|
nl2br.py | File | 859 B | 0644 |
|
nl2br.pyc | File | 1.54 KB | 0644 |
|
sane_lists.py | File | 1.56 KB | 0644 |
|
sane_lists.pyc | File | 2.73 KB | 0644 |
|
smart_strong.py | File | 1.17 KB | 0644 |
|
smart_strong.pyc | File | 1.81 KB | 0644 |
|
smarty.py | File | 10.12 KB | 0644 |
|
smarty.pyc | File | 10.23 KB | 0644 |
|
tables.py | File | 7.67 KB | 0644 |
|
tables.pyc | File | 6.79 KB | 0644 |
|
toc.py | File | 10.79 KB | 0644 |
|
toc.pyc | File | 10.53 KB | 0644 |
|
wikilinks.py | File | 2.8 KB | 0644 |
|
wikilinks.pyc | File | 4.02 KB | 0644 |
|