Подтвердить что ты не робот

Как я могу поместить мою уценку в HTML-div?

Я использую MarkEd, который реализует уценку GitHub.

У меня есть рабочая уценка:

## Test heading
a paragraph.
## second heading
another paragraph

Что создает:

<h2 id="test-heading">Test heading</h2>
<p>a paragraph.</p>
<h2 id="second-heading">second heading</h2>
<p>another paragraph</p>

Я хотел бы обернуть эту секцию уценки в div, например:

<div class="blog-post">
## Test heading
a paragraph.
## second heading
another paragraph
</div>

Однако это возвращает следующий HTML:

<div class="blog-post">
## Test heading
a paragraph.
## second heading
another paragraph
</div>

Например, в HTML отсутствует метка, буквально '## Test heading'.

Как я могу правильно обернуть мою уценку в div?

Я нашел следующее обходное решение, однако оно является уродливым, а не фактическим исправлением:

<div class="blog-post">
<div></div>

## Test heading
a paragraph.
## second heading
another paragraph

</div>
4b9b3361

Ответ 1

Markdown

Для Markdown, это по дизайну. Из раздела Inline HTML ссылки Markdown:

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

Но он явно разрешен для тегов на уровне уровня:

В отличие от HTML-тегов на уровне блоков, синтаксис Markdown обрабатывается в тегах на уровне диапазона.

Итак, в зависимости от вашего прецедента, вы можете избежать использования span вместо div.

CommonMark

Если библиотека, которую вы используете, реализует CommonMark, вам повезло. Пример 108 и 109 спецификации что если вы сохраняете пустую строку между блоком HTML и кодом уценки, содержимое будет анализироваться как Markdown:

<div>

*Emphasized* text.

</div>

должен работать, а следующее не должно:

<div>
*Emphasized* text.
</div>

И снова, в соответствии с тем же разделом в ссылке, некоторые реализации распознают дополнительный атрибут markdown=1 в теге HTML, чтобы включить синтаксический анализ Markdown внутри него.

Хотя он пока не работает в StackOverflow:

Тестирование ** Markdown ** внутри красно-фонового div.

Ответ 2

Markdown Extra необходим для работы форматирования Markdown внутри блоков HTML, пожалуйста, проверьте приведенную здесь документацию → https://michelf.ca/projects/php-markdown/extra/

Markdown Extra дает вам возможность поместить текст в формате Markdown внутри любой тег уровня блока. Вы делаете это, добавляя атрибут уценки к тег со значением 1 - который дает markdown = "1"

Ответ 3

GitHub Pages поддерживает атрибут markdown="1" для анализа уценки внутри элементов HTML, например

<div class="tip" markdown="1">Have **fun!**</div>

Примечание. По состоянию на 2019/03 год это не работает на github.com, только на страницах GitHub.

Примечание. Кавычки, как в markdown="1", не требуются в HTML5, но если вы не используете кавычки (markdown=1), GitHub не распознает его как HTML. Кроме того, поддержка глючит прямо сейчас. Скорее всего, вы получите неправильный вывод, если ваш HTML-элемент больше одного абзаца. Например, из-за ошибок я не смог встроить список Markdown в div.

Если вы оказались в среде, в которой markdown="1" не работает, но span работает, другой вариант - использовать <span style="display:block"> чтобы классы уровня блока были совместимы с ним, например,

<span style="display:block" class="note">It **works!**</span>

Совет: <span class="note"></span> короче, чем <div class="note" markdown="1"></div>, поэтому, если вы управляете CSS, вы можете использовать <span> и добавить display: block; на ваш CSS.

Ответ 4

Последний вариант:

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

Попробуйте <DIV> вместо <div> и посмотрите, что произойдет.

У Markdownsharp есть эта особенность - хотя в StackOverflow они все равно удаляют все DIV, так что не ожидайте, что это сработает здесь.

Ответ 5

Изучив документы " Расширение помеченных" и изменив метод рендеринга html, вы можете сделать что-то вроде этого, чтобы заменить части между тегами разобранной уценкой. Я не проводил обширных испытаний, но это сработало с моими первыми несколькими попытками.

const marked = require('marked');
const renderer = new marked.Renderer();
renderer.html = (mixedContent) => mixedContent.replace(/[^<>]+?(?=<)/g, (match) => {
    const tokens = marked.lexer(match);
    return marked.parser(tokens);
});

редактировать

это новое регулярное выражение будет гарантировать, что будет проанализирована только уценка со строками между ним и тегами html.

const marked = require('marked');
const renderer = new marked.Renderer();
renderer.html = (mixedContent) => mixedContent.replace(/\n\n[^<>]+?\n\n(?=<)/g, (match) => {
    const tokens = marked.lexer(match);
    return marked.parser(tokens);
});