Помеченный возвращает неправильный HTML для элемента списка с вложенным списком и абзацем

При попытке конвертировать эту простую уценку в html:

* section one
    * item one
    * item two

    This is the first section

* section two
    * item one
    * item two

    This is the second section

HTML я получаю обратно:

<ul>
    <li>
        <p>section one</p>
        <ul>
            <li>item one</li>
            <li>
                <p>item two</p>
                <p>This is the first section</p>
            </li>
        </ul>
    </li>
    <li>
        <p>section two</p>
        <ul>
            <li>item one</li>
            <li>
                <p>item two</p>
                <p>This is the second section</p>
            </li>
        </ul>
    </li>
</ul>

Абзацы внутри списка первого уровня являются частью второго элемента списка вложенного списка.
Я ожидаю, что этот абзац будет родным из вложенного списка, я даже протестировал его в разных онлайн-редакторах, и они отображают его так, как я ожидал, и не понравились результаты marked,

Я делаю что-то не так или это ошибка в marked?
Я пытался поиграться с вариантами, но ничего не помогло.

Вот код:

const marked = require("marked");
let str = "* section one\n\t* item one\n\t* item two\n\n\tThis is the first section";
str += "\n\n* section two\n\t* item one\n\t* item two\n\n\tThis is the second section";

marked(str)

1 ответ

Это определенно ошибка. Как вы заметили, другие реализации отображаются так, как вы ожидали.

Однако можно утверждать, что в вашем документе есть небольшая ошибка. Вы должны добавить строку между первой строкой вашего (внешнего) элемента списка и вложенным списком.

Предположим, вы создавали документ, который содержал только содержимое первого (внешнего) элемента списка. Поскольку у вас есть форматированный список, это будет выглядеть так:

section one
* item one
* item two

This is the first section

Какие большинство реализаций Markdown интерпретируют в одном из:

<p>section one * item one * item two</p>
<p>This is the first section</p>

или же

<p>section one <em> item one </em> item two</p>
<p>This is the first section</p>

Конечно, вам нужна пустая строка между первой строкой и списком. Как это:

section one

* item one
* item two

This is the first section

Который последовательно отображает как:

<p>section one</p>
<ul>
    <li>item one</li>
    <li>item two</li>
</ul>
<p>This is the first section</p>

Примените это к вашему полному документу, вот так:

* section one

    * item one
    * item two

    This is the first section

* section two

    * item one
    * item two

    This is the second section

и вы получите хорошие, последовательные результаты:

Хм, ну, оказывается, Маркед тоже ошибается. Определенно ошибка.

Другие вопросы по тегам