diff options
author | Waylan Limberg <waylan.limberg@icloud.com> | 2015-03-29 23:00:30 -0400 |
---|---|---|
committer | Waylan Limberg <waylan.limberg@icloud.com> | 2018-07-24 11:40:13 -0400 |
commit | ee54678185234f01d3de6a6334f30c9bb3417783 (patch) | |
tree | d72e6bde812a59b6615b1b33ef878263ed6f5cc7 /markdown/extensions/legacy_attrs.py | |
parent | 727adc8a053402d3e9a38424ff67bde697674156 (diff) | |
download | markdown-ee54678185234f01d3de6a6334f30c9bb3417783.tar.gz markdown-ee54678185234f01d3de6a6334f30c9bb3417783.tar.bz2 markdown-ee54678185234f01d3de6a6334f30c9bb3417783.zip |
Moved enable_attributes keyword to extension: legacy_attrs.
If you have existing documents that use the legacy attributes format,
then you should enable the legacy_attrs extension for those documents.
Everyone is encouraged to use the attr_list extension going forward.
Closes #643. Work adapted from 0005d7a of the md3 branch.
Diffstat (limited to 'markdown/extensions/legacy_attrs.py')
-rw-r--r-- | markdown/extensions/legacy_attrs.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/markdown/extensions/legacy_attrs.py b/markdown/extensions/legacy_attrs.py new file mode 100644 index 0000000..280be07 --- /dev/null +++ b/markdown/extensions/legacy_attrs.py @@ -0,0 +1,49 @@ +""" +Legacy Attributes Extension +=========================== + +An extension to Python Markdown which implements legacy attributes. + +Prior to Python-Markdown version 3.0, the Markdown class had an `enable_attributes` +keyword which was on by default and provided for attributes to be defined for elements +using the format `{@key=value}`. This extension is provided as a replacement for +backward compatability. New documents should be authored using attr_lists. However, +numerious documents exist which have been using the old attribute format for many +years. This extension can be used to continue to render those documents correctly. +""" + +import re +from markdown.treeprocessors import Treeprocessor, isString +from markdown.extensions import Extension + + +ATTR_RE = re.compile("\{@([^\}]*)=([^\}]*)}") # {@id=123} + + +class LegacyAttrs(Treeprocessor): + def run(self, doc): + """Find and set values of attributes ({@key=value}). """ + for el in doc.iter(): + alt = el.get('alt', None) + if alt is not None: + el.set('alt', self.handleAttributes(el, alt)) + if el.text and isString(el.text): + el.text = self.handleAttributes(el, el.text) + if el.tail and isString(el.tail): + el.tail = self.handleAttributes(el, el.tail) + + def handleAttributes(self, el, txt): + """ Set attributes and return text without definitions. """ + def attributeCallback(match): + el.set(match.group(1), match.group(2).replace('\n', ' ')) + return ATTR_RE.sub(attributeCallback, txt) + + +class LegacyAttrExtension(Extension): + def extendMarkdown(self, md, md_globals): + la = LegacyAttrs(md) + md.treeprocessors.add('legacyattrs', la, '>inline') + + +def makeExtension(**kwargs): # pragma: no cover + return LegacyAttrExtension(**kwargs) |