Я столкнулся с различиями между уценка питона и отмеченные js, когда переключился с рендеринга на стороне клиента на рендеринг на стороне сервера.
Рассмотрим следующую уценку:
**bold text**
* list item 1
* list item 2
* list item 3
markjs изящно создаст html-список неупорядоченного списка из этого:
<p>
<strong>bold text</strong>
</p>
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
в то время как python-markdown создает:
<p>
<strong>bold text</strong>
<em> item1</em> item2
* item3
</p>
Проблема здесь заключается в том, что python-markdown (после markdown.pl) не принимает отсутствующую пустую строку и учитывает первый элемент списка с помощью жирных тегов...
Есть ли способ настроить уценку python для изящной обработки этого случая, то есть таким образом, чтобы пользователь не был удивлен странным выводом html?
Заранее спасибо!
🤔 А знаете ли вы, что...
Python используется в разработке игр с помощью библиотеки Pygame.
Is there any way to configure python markdown to handle that case gracefully
Вы можете написать расширение. API расширения Python-Markdown предоставляет доступ ко всему синтаксическому анализатору, так что вы можете переопределить любую его часть. Поэтому, если вы хотите изменить поведение таким образом, чтобы для начала списка не требовалась пустая строка, вы можете заменить соответствующий blockprocessors
своим собственным.
Обратите внимание, что разработчики Python-Markdown прямо указали заявил, что они не заинтересованы в поддержке Commonmark. Следовательно, любая работа по приведению Python-Markdown в соответствие с Commonmark должна выполняться в виде сторонних расширений.
Что касается элементов списка, распознаваемых как выделение, то это ошибка, о которой я только что сообщил как о проблеме #783. Спасибо, что обратили на это наше внимание.
Полное раскрытие: я ведущий разработчик Python-Markdown.
Поведение Python-Markdown в этом случае относится к оригиналу от Джона Грубера (вы можете протестировать его на Сайт уцененных проектов). Вероятно, вы можете написать расширение для Python-Markdown, чтобы изменить поведение.
Вы также можете взглянуть на python-markdown2, у них есть возможность изменить поведение парсера, чтобы он принимал список без новой строки (объятые списки):
import markdown2
md_text = "**bold text**
* list item 1
* list item 2
* list item 3"
md = markdown2.markdown(md_text, extras=['cuddled-lists'])
print(md)
Это приводит к:
bold text
- list item 1
- list item 2
- list item 3