init
This commit is contained in:
parent
c86c37fedf
commit
f5602fe508
2 changed files with 69 additions and 1 deletions
16
README.md
16
README.md
|
|
@ -1,2 +1,16 @@
|
||||||
# underlined
|
# underlined
|
||||||
Simple Mistune plug-in that turns `_` tags into `<ul>` instead of `<em>`
|
Simple Mistune plug-in that turns `_` Markdown tags into `<ul>` instead of `<em>` HTML tags
|
||||||
|
|
||||||
|
## Use
|
||||||
|
|
||||||
|
```Python
|
||||||
|
from mistune import Markdown
|
||||||
|
from underlined import underlined
|
||||||
|
|
||||||
|
md = 'this _text_ is underlined'
|
||||||
|
parser = Markdown()
|
||||||
|
underlined(parser)
|
||||||
|
html = parser(md)
|
||||||
|
```
|
||||||
|
|
||||||
|
> `this <ul>text</ul> is underlined`
|
||||||
54
underlined.py
Normal file
54
underlined.py
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
__all__ = ['underlined']
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
UNDERLINED = r'\b_{1,3}(?=[^\s_])'
|
||||||
|
UNDERLINED_END_RE = {
|
||||||
|
'_': re.compile(r'(?:(?<!\\)(?:\\\\)*\\_|[^\s_])_(?!_)\b'),
|
||||||
|
'__': re.compile(r'(?:(?<!\\)(?:\\\\)*\\_|[^\s_])__(?!_)\b'),
|
||||||
|
'___': re.compile(r'(?:(?<!\\)(?:\\\\)*\\_|[^\s_])___(?!_)\b'),
|
||||||
|
}
|
||||||
|
|
||||||
|
def parse_underlined(self, m, state) -> int:
|
||||||
|
pos = m.end()
|
||||||
|
marker = m.group(0)
|
||||||
|
mlen = len(marker)
|
||||||
|
_end_re = UNDERLINED_END_RE[marker]
|
||||||
|
m1 = _end_re.search(state.src, pos)
|
||||||
|
if not m1:
|
||||||
|
state.append_token({'type': 'text', 'raw': marker})
|
||||||
|
return pos
|
||||||
|
end_pos = m1.end()
|
||||||
|
text = state.src[pos:end_pos-mlen]
|
||||||
|
prec_pos = self.precedence_scan(m, state, end_pos)
|
||||||
|
if prec_pos:
|
||||||
|
return prec_pos
|
||||||
|
new_state = state.copy()
|
||||||
|
new_state.src = text
|
||||||
|
new_state.in_underlined = True
|
||||||
|
state.append_token({
|
||||||
|
'type': 'underlined',
|
||||||
|
'children': self.render(new_state),
|
||||||
|
})
|
||||||
|
return end_pos
|
||||||
|
|
||||||
|
def render_underlined_mu(self, token, state) -> str:
|
||||||
|
return '`_' + self.render_children(token, state) + '`_'
|
||||||
|
|
||||||
|
def render_underlined_html(self, token, state) -> str:
|
||||||
|
return '<u>' + self.render_children(token, state) + '</u>'
|
||||||
|
|
||||||
|
def underlined(md):
|
||||||
|
"""A mistune plugin to render underlined tags.
|
||||||
|
Most Markdown parsers render it as emphasis tag.
|
||||||
|
|
||||||
|
Underlined text is surrounded by `_`, `__`, or `___`
|
||||||
|
|
||||||
|
:param md: Markdown instance
|
||||||
|
"""
|
||||||
|
md.inline.register('underlined', UNDERLINED, parse_underlined, before='emphasis')
|
||||||
|
if md.renderer:
|
||||||
|
if md.renderer.NAME == 'html':
|
||||||
|
md.renderer.register('underlined', render_underlined_html)
|
||||||
|
elif md.renderer.NAME == 'micron':
|
||||||
|
md.renderer.register('underlined', render_underlined_mu)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue