В библиотеке Marked для JavaScript цитаты
обрабатываются по стандарту Markdown. Цитата обозначается символом
> в начале строки. Все строки, начинающиеся с этого
символа, интерпретируются как часть блока цитаты.
Пример синтаксиса:
> Это пример простой цитаты.
> Она может занимать несколько строк.
При обработке с помощью Marked этот Markdown преобразуется в HTML:
<blockquote>
<p>Это пример простой цитаты.
Она может занимать несколько строк.</p>
</blockquote>
Ключевые моменты:
> считается частью цитаты.> создают вложенные цитаты.Для создания вложенных цитат используется несколько символов
>:
> Внешняя цитата
> > Вложенная цитата
Marked рендерит это в соответствующие вложенные HTML-блоки:
<blockquote>
<p>Внешняя цитата</p>
<blockquote>
<p>Вложенная цитата</p>
</blockquote>
</blockquote>
Особенности:
Marked позволяет кастомизировать процесс рендеринга через объект
Renderer. Для цитат используется метод
blockquote:
import { marked } from 'marked';
const renderer = new marked.Renderer();
renderer.blockquote = (quote) => {
return `<blockquote class="custom-quote">${quote}</blockquote>`;
};
const markdown = `> Цитата с кастомным оформлением`;
const html = marked(markdown, { renderer });
console.log(html);
В результате получится:
<blockquote class="custom-quote">
<p>Цитата с кастомным оформлением</p>
</blockquote>
Особенности кастомизации:
Marked корректно обрабатывает многострочные цитаты. Любая
последовательность строк, начинающихся с >, объединяется
в один блок <blockquote>:
> Первая строка цитаты.
> Вторая строка цитаты.
> Третья строка цитаты.
Сгенерированный HTML:
<blockquote>
<p>Первая строка цитаты.
Вторая строка цитаты.
Третья строка цитаты.</p>
</blockquote>
Чтобы разделить абзацы внутри цитаты, нужно вставить пустую строку
между строками с >:
> Первый абзац цитаты.
>
> Второй абзац цитаты.
Результат:
<blockquote>
<p>Первый абзац цитаты.</p>
<p>Второй абзац цитаты.</p>
</blockquote>
Цитаты в Marked могут содержать заголовки, списки и кодовые блоки:
> ## Заголовок внутри цитаты
> - Пункт списка
> - Еще один пункт
>
> ```javascript
> console.log('Код внутри цитаты');
> ```
HTML, полученный через Marked:
<blockquote>
<h2>Заголовок внутри цитаты</h2>
<ul>
<li>Пункт списка</li>
<li>Еще один пункт</li>
</ul>
<pre><code class="language-javascript">console.log('Код внутри цитаты');
</code></pre>
</blockquote>
Особенности:
Marked предоставляет глобальные опции, которые влияют на рендеринг блоков цитат:
gfm: true — включает расширенный синтаксис GitHub
Flavored Markdown, включая поддержку вложенных цитат.breaks: true — сохраняет разрывы строк внутри
цитат.sanitize: false — позволяет использовать HTML внутри
цитат.Пример с опциями:
const markdown = `> Цитата с разрывами
> и переносами строк`;
const html = marked(markdown, { gfm: true, breaks: true });
Сгенерированный HTML будет учитывать переносы строк внутри
<blockquote>.
> в начале строки для
обозначения цитаты.>.Renderer позволяет добавлять классы,
стили или дополнительные контейнеры, что удобно для интеграции в сложные
фронтенд-приложения.> для правильного
рендеринга.Marked обеспечивает полную совместимость с синтаксисом Markdown, позволяя создавать гибкие и структурированные цитаты с минимальными усилиями.