Парсер Markdown сделан правильно. Быстро и легко расширяется.
Живая демонстрация
Соответствует спецификации CommonMark + добавляет синтаксические расширения и сахар (автоматическое связывание URL-адресов, типограф).
Настраиваемый синтаксис! Вы можете добавлять новые правила и даже заменять существующие.
Высокоскоростной.
Безопасно по умолчанию.
Плагины и другие пакеты, написанные сообществом, на npm.
Содержание
Установить
Примеры использования
Простой
Инициализация с пресетами и опциями
Загрузка плагинов
Подсветка синтаксиса
Связать
API
Расширения синтаксиса
Управление правилами
Контрольный показатель
уценка-это для предприятия
Авторы
Рекомендации / Спасибо
узел.js :
npm установить уценку-it
браузер (CDN):
jsДоставка CDN
cdnjs.com CDN
См. также:
Документация API — для получения дополнительной информации и примеров.
Информация о разработке - для авторов плагинов.
// node.js// может использовать `require('markdown-it')` для CJSimport markdownit из 'markdown-it'const md = markdownit()const result = md.render('# markdown-it rulezz!') ;// браузер со сборкой UMD, добавляемый в "окно" при загрузке скрипта // Обратите внимание: в "markdownit" нет тире.const md = window.markdownit();const result = md.render('# markdown-it rulezz!');
Отрисовка одной строки без переноса абзацев:
импортировать markdownit из 'markdown-it'const md = markdownit()const result = md.renderInline('__markdown-it__ rulezz!');
(*) пресеты определяют комбинации активных правил и опций. Может быть "commonmark"
, "zero"
или "default"
(если пропущен). Дополнительную информацию см. в документации API.
импортировать markdownit из 'markdown-it'// commonmark modeconst md = markdownit('commonmark')// modeconst по умолчанию md = markdownit()// включить Everythingconst md = markdownit({ html: правда, ссылка: правда, типограф: true})// полный список опций (по умолчанию)const md = markdownit({ // Включаем HTML-теги в исходном коде HTML: ложь, // Используйте '/' для закрытия отдельных тегов (<br />). // Это только для полной совместимости с CommonMark. xhtmlOut: ложь, // Преобразуем 'n' в абзацах в <br> перерывы: ложь, // Префикс языка CSS для изолированных блоков. Может быть // полезно для внешних маркеров. langPrefix: 'язык-', // Автоконвертируем URL-подобный текст в ссылки связать: ложь, // Включить независимую от языка замену + украшение кавычек // Полный список замен см. https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs типограф: ложь, // Пары замены двойных + одинарных кавычек, если типограф включен, // и смарт-кавычки включены. Это может быть либо строка, либо массив. // // Например, вы можете использовать '«»„»' для русского языка, '„“‚'' для немецкого языка, // и ['«xA0', 'xA0»', '‹xA0', 'xA0›'] для французского языка (включая nbsp). кавычки: '""''', // Функция выделения. Должен возвращать экранированный HTML, // или '', если исходная строка не изменена и должна быть экранирована извне. // Если результат начинается с <pre... внутренняя оболочка пропускается. выделение: функция (/*str, lang*/) { return ''; }});
импортировать markdownit из 'markdown-it'const md = markdownit .use(плагин1) .use(plugin2, opts, ...) .use(плагин3);
Примените подсветку синтаксиса к изолированным блокам кода с помощью опции highlight
:
импортировать markdownit из «markdown-it» импортировать hljs из «highlight.js» // https://highlightjs.org// Фактические значения по умолчаниюconst md = markdownit({ подсветка: функция (str, lang) {if (lang && hljs.getLanguage(lang)) { try {return hljs.highlight(str, {language: lang }).value; } catch (__) {}}return ''; // используем внешнее экранирование по умолчанию }});
Или с полным переопределением оболочки (если вам нужно назначить класс <pre>
или <code>
):
импортировать markdownit из «markdown-it» импортировать hljs из «highlight.js» // https://highlightjs.org// Фактические значения по умолчаниюconst md = markdownit({ подсветка: function (str, lang) {if (lang && hljs.getLanguage(lang)) { try {return '<pre><code class="hljs">' + hljs.highlight(str, { язык: lang, ignoreIllegals : true }).value + '</code></pre>'; } catch (__) {}}return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>'; }});
linkify: true
использует linkify-it. Чтобы настроить linkify-it, получите доступ к экземпляру linkify через md.linkify
:
md.linkify.set({fuzzyEmail: false}); // отключает преобразование письма в ссылку
Документация по API
Если вы собираетесь писать плагины, пожалуйста, ознакомьтесь с информацией для разработки.
Встроенное (включено по умолчанию):
Таблицы (GFM)
Зачеркивание (GFM)
Через плагины:
нижний индекс
надстрочный индекс
сноска
список определений
аббревиатура
смайлик
индивидуальный контейнер
вставлять
отметка
... и другие
По умолчанию все правила включены, но их можно ограничить с помощью параметров. При загрузке плагина все его правила включаются автоматически.
импортировать markdownit из 'markdown-it'// Активировать/деактивировать правила с помощью curryingconst md = markdownit() .disable(['ссылка', 'изображение']) .enable(['ссылка']) .enable('image');// Включаем Everythingconst md = markdownit({ html: правда, ссылка: правда, типограф: правда,});
Все правила вы можете найти в источниках:
parser_core.mjs
parser_block.mjs
parser_inline.mjs
Вот результат разбора readme на MB Pro Retina 2013 (2,4 ГГц):
npm запустить тестовые данные readme/benchmark.mjs Избранные примеры: (1 из 28) > README Пример: README.md (7774 байта) > commonmark-reference x 1222 операций в секунду ±0,96% (97 выборок запусков) > current x 743 операций в секунду ±0,84% (97 выборок) > current-commonmark x 1568 операций в секунду ±0,84% (выбрано 98 запусков) > отмечено x 1587 операций в секунду ±4,31% (выбрано 93 прогона)
Примечание. Версия CommonMark работает с упрощенными нормализаторами ссылок для более «честного» сравнения. Разница составляет ≈1,5×.
Как видите, markdown-it
не платит скоростью за гибкость. Замедление работы «полной» версии вызвано дополнительными функциями, недоступными в других реализациях.
Доступно как часть подписки Tidelift.
Разработчики markdown-it
и тысяч других пакетов сотрудничают с Tidelift, чтобы обеспечить коммерческую поддержку и обслуживание зависимостей с открытым исходным кодом, которые вы используете для создания своих приложений. Экономьте время, снижайте риски и улучшайте работоспособность кода, платя при этом специалистам по сопровождению именно тех зависимостей, которые вы используете. Узнать больше.
Алекс Кочарин github/rlidwka
Виталий Пузрин github/puzrin
markdown — это результат решения авторов, внесших 99% кода Remarkable , перейти в проект с тем же авторством, но новым руководством (Виталием и Алексом). Это не вилка.
Большое спасибо Джону Макфарлейну за его работу над спецификацией CommonMark и эталонными реализациями. Его работа сэкономила нам много времени во время разработки этого проекта.
Ссылки по теме:
https://github.com/jgm/CommonMark — справочник по реализациям CommonMark на C и JS, а также содержит новейшие спецификации и онлайн-демонстрацию.
http://talk.commonmark.org — форум CommonMark, хорошее место для совместной работы разработчиков.
Порты
движение-уценка-это - Ruby/RubyMotion
уценка-это-py- Python