53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# Legacy Em Extension for Python-Markdown
|
|
# =======================================
|
|
|
|
# This extension provides legacy behavior for _connected_words_.
|
|
|
|
# Copyright 2015-2018 The Python Markdown Project
|
|
|
|
# License: [BSD](https://opensource.org/licenses/bsd-license.php)
|
|
|
|
"""
|
|
This extension provides legacy behavior for _connected_words_.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from . import Extension
|
|
from ..inlinepatterns import UnderscoreProcessor, EmStrongItem, EM_STRONG2_RE, STRONG_EM2_RE
|
|
import re
|
|
|
|
# _emphasis_
|
|
EMPHASIS_RE = r'(_)([^_]+)\1'
|
|
|
|
# __strong__
|
|
STRONG_RE = r'(_{2})(.+?)\1'
|
|
|
|
# __strong_em___
|
|
STRONG_EM_RE = r'(_)\1(?!\1)([^_]+?)\1(?!\1)(.+?)\1{3}'
|
|
|
|
|
|
class LegacyUnderscoreProcessor(UnderscoreProcessor):
|
|
"""Emphasis processor for handling strong and em matches inside underscores."""
|
|
|
|
PATTERNS = [
|
|
EmStrongItem(re.compile(EM_STRONG2_RE, re.DOTALL | re.UNICODE), 'double', 'strong,em'),
|
|
EmStrongItem(re.compile(STRONG_EM2_RE, re.DOTALL | re.UNICODE), 'double', 'em,strong'),
|
|
EmStrongItem(re.compile(STRONG_EM_RE, re.DOTALL | re.UNICODE), 'double2', 'strong,em'),
|
|
EmStrongItem(re.compile(STRONG_RE, re.DOTALL | re.UNICODE), 'single', 'strong'),
|
|
EmStrongItem(re.compile(EMPHASIS_RE, re.DOTALL | re.UNICODE), 'single', 'em')
|
|
]
|
|
|
|
|
|
class LegacyEmExtension(Extension):
|
|
""" Add legacy_em extension to Markdown class."""
|
|
|
|
def extendMarkdown(self, md):
|
|
""" Modify inline patterns. """
|
|
md.inlinePatterns.register(LegacyUnderscoreProcessor(r'_'), 'em_strong2', 50)
|
|
|
|
|
|
def makeExtension(**kwargs): # pragma: no cover
|
|
""" Return an instance of the `LegacyEmExtension` """
|
|
return LegacyEmExtension(**kwargs)
|