Пометка с разбивкой по блокам <section> и <div>?

Я заметил, что элементы уровня блока не очень дружелюбны. Представьте себе следующий сегмент (да, я собираюсь вывести для twitter bootstrap):

<section id="loremipsum">
    <div class="page-header">
    # Heading 1 #
    </div>

    Lorem ipsum, blah blah blah, yada yada yada.
</section>

Ожидаемый результат должен быть:

<section id="loremipsum">
    <div class="page-header">
    <h1>Heading 1</h1>
    </div>
    <p>Lorem ipsum, blah blah blah, yada yada yada.</p>
</section>

Вместо этого полученный результат близок к:

<p><section id="loremipsum"></p>
<div class="page-header">
# Heading 1 #
</div>
<p>Lorem ipsum, blah blah blah, yada yada yada.</section></p>

Здесь есть две проблемы:

  • Согласно предложенному Daring Fireball, Markdown должен быть достаточно умным, чтобы не помещать ненужные теги

    вокруг элементов уровня блока, таких как тег раздела.

  • Заголовок 1 не анализируется как заголовок, но вместо этого остается нераспакованным.

Обе эти проблемы на самом деле происходят и в официальном парсере Dingus, так что я думаю, что это один из тех, кто "работает по назначению". Тем не менее, есть ли там уцензурные гуру, которые знают, как обойти эти проблемы?

Ответы

Ответ 1

Да, это по дизайну. Согласно Gruber:

Обратите внимание, что синтаксис форматирования Markdown не обрабатывается в блочных HTML-тегах. Например, вы не можете использовать Markdown-style * emphasis * внутри блока HTML.

Я не знаю об этом обходном пути, но я бы не поставил себя на уровень гуру, когда дело доходит до Markdown.

Изменить. Возможно, вы захотите проверить PHP Markdown Extra, если вы работаете с PHP.

Ответ 2

Вы можете использовать Pandoc markdown, который по умолчанию интерпретирует код между тегами <div> как текст разметки.

$ pandoc input.md -o output.html

(Подробнее см. в разделе markdown_in_html_blocks Doc.)

Ответ 3

Немного поздно в игре, но обновленный ответ (по состоянию на лето 2015 года).

Вопрос зависит от того, какую реализацию вы используете, но хорошая ссылка на уценку CommonMark. В соответствии с спецификацией HTML-блоков вы можете получить желаемый результат с этой уценкой:

<section id="loremipsum">
  <div class="page-header">

  # Heading 1 #

  </div>

  Lorem ipsum, blah blah blah, yada yada yada.

</section>

Обратите внимание на пустые строки, которые являются конечными условиями для HTML-блоков. Также обратите внимание:

Блок начинается с строки, которая соответствует условию начала (после до трех пробелов дополнительного отступа).

Значение должно быть осторожным с отступом начала HTML-блоков.

markdown-it реализует commonmark 100% в js, perl-commonmark дает привязки к библиотеке CommonMark C, и я предполагаю, что вы найдете реализации CommonMark на большинстве языков программирования.

Ответ 4

Некоторые реализации могут быть чувствительны к регистру.

Оказывается, что markdownsharp будет использовать реальный div, если вы используете тэг <DIV>, но не используете <DIV>.

Так что это может дать вам то, что вы хотите

<DIV class="video-panel">
   ![Review][1]
   ![Review][2]
</DIV>

Даже разметка stackoverflow по-прежнему отличает их, хотя и вытесняет сам DIV. Для общедоступного веб-сайта это, вероятно, хорошая вещь!

это будет выделено жирным шрифтом

** это не будет выделено жирным шрифтом **