|
@@ -0,0 +1,69 @@
|
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
|
+"""
|
|
|
|
+Pelican Inline Markdown Extension
|
|
|
|
+==================================
|
|
|
|
+An extension for the Python Markdown module that enables
|
|
|
|
+the Pelican Python static site generator to add inline patterns.
|
|
|
|
+"""
|
|
|
|
+
|
|
|
|
+import markdown
|
|
|
|
+import re
|
|
|
|
+
|
|
|
|
+from markdown.util import etree
|
|
|
|
+from markdown.util import AtomicString
|
|
|
|
+
|
|
|
|
+class PelicanInlineMarkdownExtensionPattern(markdown.inlinepatterns.Pattern):
|
|
|
|
+ """Inline Markdown processing"""
|
|
|
|
+
|
|
|
|
+ def __init__(self, pelican_markdown_extension, tag, pattern):
|
|
|
|
+ super(PelicanInlineMarkdownExtensionPattern,self).__init__(pattern)
|
|
|
|
+ self.tag = tag
|
|
|
|
+ self.config = pelican_markdown_extension.getConfig('config')
|
|
|
|
+
|
|
|
|
+ def handleMatch(self, m):
|
|
|
|
+ node = markdown.util.etree.Element(self.tag)
|
|
|
|
+ tag_attributes = self.config.get(m.group('prefix'), ('', 'pelican-inline'))
|
|
|
|
+ tag_class = 'pelican-inline' # default class
|
|
|
|
+ tag_style = '' # default is for no styling
|
|
|
|
+
|
|
|
|
+ if isinstance(tag_attributes, tuple):
|
|
|
|
+ tag_style = tag_attributes[0]
|
|
|
|
+ tag_class = tag_attributes[1] if len(tag_attributes) > 1 else ''
|
|
|
|
+ elif isinstance(tag_attributes, basestring):
|
|
|
|
+ tag_class = tag_attributes
|
|
|
|
+
|
|
|
|
+ if tag_class != '':
|
|
|
|
+ node.set('class', tag_class)
|
|
|
|
+ if tag_style!= '':
|
|
|
|
+ node.set('style', tag_style)
|
|
|
|
+
|
|
|
|
+ node.text = markdown.util.AtomicString(m.group('text'))
|
|
|
|
+
|
|
|
|
+ return node
|
|
|
|
+
|
|
|
|
+class PelicanInlineMarkdownExtension(markdown.Extension):
|
|
|
|
+ """A Markdown extension enabling processing in Markdown for Pelican"""
|
|
|
|
+ def __init__(self, config):
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ # Needed for Markdown versions >= 2.5
|
|
|
|
+ self.config['config'] = ['{}', 'config for markdown extension']
|
|
|
|
+ super(PelicanInlineMarkdownExtension,self).__init__(**config)
|
|
|
|
+ except AttributeError:
|
|
|
|
+ # Markdown versions < 2.5
|
|
|
|
+ config['config'] = [config['config'], 'config for markdown extension']
|
|
|
|
+ super(PelicanInlineMarkdownExtension, self).__init__(config)
|
|
|
|
+
|
|
|
|
+ def extendMarkdown(self, md, md_globals):
|
|
|
|
+ # Regex to detect mathjax
|
|
|
|
+ config = self.getConfig('config')
|
|
|
|
+ patterns = []
|
|
|
|
+
|
|
|
|
+ # The following mathjax settings can be set via the settings dictionary
|
|
|
|
+ for key in config:
|
|
|
|
+ patterns.append(re.escape(key))
|
|
|
|
+
|
|
|
|
+ inline_regex = r'(?P<prefix>%s)(?P<text>.+?)\2' % ('|'.join(patterns))
|
|
|
|
+
|
|
|
|
+ # Process after escapes
|
|
|
|
+ md.inlinePatterns.add('texthighlight_inlined', PelicanInlineMarkdownExtensionPattern(self, 'span', inline_regex), '>escape')
|