| # -*- coding: utf-8 -*- |
| """ |
| Markdown Inline Extension For Pelican |
| ===================================== |
| Extends Pelican's Markdown module |
| and allows for customized inline HTML |
| """ |
| |
| import os |
| import sys |
| |
| from pelican import signals |
| |
| try: |
| from . pelican_inline_markdown_extension import PelicanInlineMarkdownExtension |
| except ImportError as e: |
| PelicanInlineMarkdownExtension = None |
| print("\nMarkdown is not installed - inline Markdown extension disabled\n") |
| |
| def process_settings(pelicanobj): |
| """Sets user specified settings (see README for more details)""" |
| |
| # Default settings |
| inline_settings = {} |
| inline_settings['config'] = {'[]':('', 'pelican-inline')} |
| |
| # Get the user specified settings |
| try: |
| settings = pelicanobj.settings['MD_INLINE'] |
| except Exception: # TODO: narrow further to expected Exceptions |
| settings = None |
| |
| # If settings have been specified, add them to the config |
| if isinstance(settings, dict): |
| inline_settings['config'].update(settings) |
| |
| return inline_settings |
| |
| def inline_markdown_extension(pelicanobj, config): |
| """Instantiates a customized Markdown extension""" |
| |
| # Instantiate Markdown extension and append it to the current extensions |
| try: |
| if isinstance(pelicanobj.settings.get('MD_EXTENSIONS'), list): # pelican 3.6.3 and earlier |
| pelicanobj.settings['MD_EXTENSIONS'].append(PelicanInlineMarkdownExtension(config)) |
| else: |
| pelicanobj.settings['MARKDOWN'].setdefault('extensions', []).append(PelicanInlineMarkdownExtension(config)) |
| except Exception: # TODO: narrow further to expected Exceptions |
| sys.excepthook(*sys.exc_info()) |
| sys.stderr.write("\nError - the pelican Markdown extension failed to configure. Inline Markdown extension is non-functional.\n") |
| sys.stderr.flush() |
| |
| def pelican_init(pelicanobj): |
| """Loads settings and instantiates the Python Markdown extension""" |
| |
| # If there was an error loading Markdown, then do not process any further |
| if not PelicanInlineMarkdownExtension: |
| return |
| |
| # Process settings |
| config = process_settings(pelicanobj) |
| |
| # Configure Markdown Extension |
| inline_markdown_extension(pelicanobj, config) |
| |
| def register(): |
| """Plugin registration""" |
| signals.initialized.connect(pelican_init) |