Нет, вы не можете "занести в белый список" теги, но вы можете использовать Extension API для изменения различных частей синтаксического анализатора.Тем не менее, вы, вероятно, в действительности не хотите этого.
Например, если вы не хотите анализировать заголовки и блоки кода, вы можете удалить эти процессоры:
from markdown.extensions import Extension
class MyExtension(Extension):
def extendMarkdown(self, md):
md.parser.blockprocessors.deregister('hashheader')
md.parser.blockprocessors.deregister('setextheader')
md.parser.blockprocessors.deregister('code')
Однако это не даст вам желаемого результата, так как анализатор вернется к обертыванию этого текста в тег <p>
.Фактически это присуще синтаксису Markdown.Все, что не распознается как что-то еще, считается абзацем.
Следовательно, ваш ввод может привести к следующему выводу:
<p>### Header</p>
<p>This is a paragraph.</p>
<p> # Code snippet
def spam():
pass</p>
<ol>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ol>
Еще одним осложнением является обработка HTML "незначительные пробелы. "В частности, за исключением тех случаев, когда прямо указывается не делать этого (например, в блоке кода), все пустые места уплотняются в одно пространство при рендеринге HTML в браузере.Следовательно, ваш абзац, содержащий блок непарсированного кода, будет нечитаемым:
# Фрагмент кода def spam (): pass
Если это не то, что вам нужно,тогда вам, вероятно, придется заменить существующие процессоры собственными процессорами, которые распознают блоки кода и заголовки, но возвращают что-то отличное от HTML по умолчанию, чтобы избежать их оборачивания в теги <p>
.Тем не менее, это будет включать в себя замену большей части синтаксического анализатора.
Кроме того, не будучи обернутым в какие-либо теги, простой текст будет сведен в один абзац.Например, этот ввод:
# Header 1
# code snippet
def spam():
pass
## Header 2
будет отображаться так:
# Заголовок 1 # фрагмент кода def spam (): pass ## Заголовок 2
Что, вероятно, не то, что вы хотите.Заключение текста в теги <p>
на самом деле является более желательным результатом, так как это, по крайней мере, выдает:
# Заголовок 1
# Фрагмент кода def spam (): pass
## Header 2
Кстати, именно поэтому анализаторы Markdown не предоставляют опцию «белого списка».Результаты не соответствуют ожиданиям тех, кто хочет получить эту опцию.
Полное раскрытие: я ведущий разработчик проекта Python-Markdown.