51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
from ..util import escape_url, ESCAPE_TEXT
|
|
|
|
__all__ = ['plugin_url', 'plugin_strikethrough']
|
|
|
|
|
|
#: url link like: ``https://lepture.com/``
|
|
URL_LINK_PATTERN = r'''(https?:\/\/[^\s<]+[^<.,:;"')\]\s])'''
|
|
|
|
|
|
def parse_url_link(inline, m, state):
|
|
url = m.group(0)
|
|
if state.get('_in_link'):
|
|
return 'text', url
|
|
return 'link', escape_url(url)
|
|
|
|
|
|
def plugin_url(md):
|
|
md.inline.register_rule('url_link', URL_LINK_PATTERN, parse_url_link)
|
|
md.inline.rules.append('url_link')
|
|
|
|
|
|
#: strike through syntax looks like: ``~~word~~``
|
|
STRIKETHROUGH_PATTERN = (
|
|
r'~~(?=[^\s~])('
|
|
r'(?:\\~|[^~])*'
|
|
r'(?:' + ESCAPE_TEXT + r'|[^\s~]))~~'
|
|
)
|
|
|
|
|
|
def parse_strikethrough(inline, m, state):
|
|
text = m.group(1)
|
|
return 'strikethrough', inline.render(text, state)
|
|
|
|
|
|
def render_html_strikethrough(text):
|
|
return '<del>' + text + '</del>'
|
|
|
|
|
|
def plugin_strikethrough(md):
|
|
md.inline.register_rule(
|
|
'strikethrough', STRIKETHROUGH_PATTERN, parse_strikethrough)
|
|
|
|
index = md.inline.rules.index('codespan')
|
|
if index != -1:
|
|
md.inline.rules.insert(index + 1, 'strikethrough')
|
|
else: # pragma: no cover
|
|
md.inline.rules.append('strikethrough')
|
|
|
|
if md.renderer.NAME == 'html':
|
|
md.renderer.register('strikethrough', render_html_strikethrough)
|