legacy_em.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. '''
  2. Legacy Em Extension for Python-Markdown
  3. =======================================
  4. This extention provides legacy behavior for _connected_words_.
  5. Copyright 2015-2018 The Python Markdown Project
  6. License: [BSD](https://opensource.org/licenses/bsd-license.php)
  7. '''
  8. from . import Extension
  9. from ..inlinepatterns import UnderscoreProcessor, EmStrongItem, EM_STRONG2_RE, STRONG_EM2_RE
  10. import re
  11. # _emphasis_
  12. EMPHASIS_RE = r'(_)([^_]+)\1'
  13. # __strong__
  14. STRONG_RE = r'(_{2})(.+?)\1'
  15. # __strong_em___
  16. STRONG_EM_RE = r'(_)\1(?!\1)(.+?)\1(?!\1)(.+?)\1{3}'
  17. class LegacyUnderscoreProcessor(UnderscoreProcessor):
  18. """Emphasis processor for handling strong and em matches inside underscores."""
  19. PATTERNS = [
  20. EmStrongItem(re.compile(EM_STRONG2_RE, re.DOTALL | re.UNICODE), 'double', 'strong,em'),
  21. EmStrongItem(re.compile(STRONG_EM2_RE, re.DOTALL | re.UNICODE), 'double', 'em,strong'),
  22. EmStrongItem(re.compile(STRONG_EM_RE, re.DOTALL | re.UNICODE), 'double2', 'strong,em'),
  23. EmStrongItem(re.compile(STRONG_RE, re.DOTALL | re.UNICODE), 'single', 'strong'),
  24. EmStrongItem(re.compile(EMPHASIS_RE, re.DOTALL | re.UNICODE), 'single', 'em')
  25. ]
  26. class LegacyEmExtension(Extension):
  27. """ Add legacy_em extension to Markdown class."""
  28. def extendMarkdown(self, md):
  29. """ Modify inline patterns. """
  30. md.inlinePatterns.register(LegacyUnderscoreProcessor(r'_'), 'em_strong2', 50)
  31. def makeExtension(**kwargs): # pragma: no cover
  32. """ Return an instance of the LegacyEmExtension """
  33. return LegacyEmExtension(**kwargs)