smart_strong.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # markdown is released under the BSD license
  2. # Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
  3. # Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
  4. # Copyright 2004 Manfred Stienstra (the original version)
  5. #
  6. # All rights reserved.
  7. #
  8. # Redistribution and use in source and binary forms, with or without
  9. # modification, are permitted provided that the following conditions are met:
  10. #
  11. # * Redistributions of source code must retain the above copyright
  12. # notice, this list of conditions and the following disclaimer.
  13. # * Redistributions in binary form must reproduce the above copyright
  14. # notice, this list of conditions and the following disclaimer in the
  15. # documentation and/or other materials provided with the distribution.
  16. # * Neither the name of the <organization> nor the
  17. # names of its contributors may be used to endorse or promote products
  18. # derived from this software without specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
  21. # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  22. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  23. # DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
  24. # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27. # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28. # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29. # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30. # POSSIBILITY OF SUCH DAMAGE.
  31. '''
  32. Smart_Strong Extension for Python-Markdown
  33. ==========================================
  34. This extention adds smarter handling of double underscores within words.
  35. Simple Usage:
  36. >>> import markdown
  37. >>> print markdown.markdown('Text with double__underscore__words.',
  38. ... extensions=['smart_strong'])
  39. <p>Text with double__underscore__words.</p>
  40. >>> print markdown.markdown('__Strong__ still works.',
  41. ... extensions=['smart_strong'])
  42. <p><strong>Strong</strong> still works.</p>
  43. >>> print markdown.markdown('__this__works__too__.',
  44. ... extensions=['smart_strong'])
  45. <p><strong>this__works__too</strong>.</p>
  46. Copyright 2011
  47. [Waylan Limberg](http://achinghead.com)
  48. '''
  49. from __future__ import absolute_import
  50. from __future__ import unicode_literals
  51. from . import Extension
  52. from ..inlinepatterns import SimpleTagPattern
  53. SMART_STRONG_RE = r'(?<!\w)(_{2})(?!_)(.+?)(?<!_)\2(?!\w)'
  54. STRONG_RE = r'(\*{2})(.+?)\2'
  55. class SmartEmphasisExtension(Extension):
  56. """ Add smart_emphasis extension to Markdown class."""
  57. def extendMarkdown(self, md, md_globals):
  58. """ Modify inline patterns. """
  59. md.inlinePatterns['strong'] = SimpleTagPattern(STRONG_RE, 'strong')
  60. md.inlinePatterns.add('strong2', SimpleTagPattern(SMART_STRONG_RE, 'strong'), '>emphasis2')
  61. def makeExtension(configs={}):
  62. return SmartEmphasisExtension(configs=dict(configs))