Я написал расширение python для уценки на основе InlineProcessor
, которые правильно совпадают при появлении шаблона:
Пользовательское расширение:
from markdown.util import AtomicString, etree
from markdown.extensions import Extension
from markdown.inlinepatterns import InlineProcessor
RE = r'(#)(\S{3,})'
class MyPattern(InlineProcessor):
def handleMatch(self, m, data):
tag = m.group(2)
el = etree.Element("a")
el.set('href', f'/{tag}')
el.text = AtomicString(f'#{tag}')
return el, m.start(0), m.end(0)
class MyExtension(Extension):
def extendMarkdown(self, md, md_globals):
# If processed by attr_list extension, not by this one
md.inlinePatterns.register(MyPattern(RE, md), 'my_tag', 200)
def makeExtension(*args, **kwargs):
return MyExtension(*args, **kwargs)
IN: markdown('foo #bar')
OUT: <p>foo <a href="/bar">#bar</a></p>
Но мое расширение нарушает встроенную функцию под названием attr_list дополнительно python уценка.
IN: ### Title {style="color:#FF0000;"}
OUT: <h3>Title {style="color:<a href="/FF0000;"}">#FF0000;"}</a></h3>
I ' Я не уверен, что правильно понимаю, как Python -Markdown регистрирует / применяет шаблоны к тексту. Я пытаюсь зарегистрировать мой шаблон с большим номером, чтобы поместить его в конец процесса md.inlinePatterns.register(MyPattern(RE, md), 'my_tag', 200)
, но он не выполняет свою работу.
Я смотрю на исходный код расширения attr_list и они используют Treeprocessor
основанный класс. Мне нужно было иметь класс Treeprocessor
, а не InlineProcessor
для моего MyPattern ? Чтобы найти способ не применять мой тег к элементу, который уже сопоставлен с другим (там: attr_list
)?