Преобразование уценки в HTML с помощью JavaScript - ограничение синтаксиса sppported - PullRequest
0 голосов
/ 19 ноября 2018

Я использую mark.js в настоящее время для преобразования markdown в HTML, чтобы пользователи моего Web-приложения могли создавать структурированный контент. Мне интересно, есть ли способ ограничить поддерживаемый синтаксис tu только подмножеством, например

заголовки

курсив

жирный шрифт

  • списки только с 1 глубиной отступа

цитаты

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

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

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Другой возможностью было бы использовать Commonmark.js , проанализировать входной муравей, затем пройтись по проанализированному дереву и удалить все узлы с / без определенного типа. См. этот пример , он работал нормально для изображений, но не работал для блоков кода.

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

0 голосов
/ 19 ноября 2018

У вас есть несколько вариантов различий:

Marked.js использует многошаговый метод для анализа Markdown. Он использует лексер, который разбивает документ на токены, анализатор для преобразования этих токенов в абстрактное синтаксическое дерево (AST) и средство визуализации для преобразования AST в HTML. Вы можете переопределить любую из этих частей, чтобы изменить обработку различных частей синтаксиса.

Например, если вы просто хотели игнорировать списки и не включать их в отображаемый HTML-код, замените функцию list из средства визуализации на функцию, которая возвращает пустую строку.

Или, если вы хотите, чтобы синтаксический анализатор действовал так, как будто списки не являются даже поддерживаемой функцией Markdown, вы можете удалить методы list и listitem из синтаксического анализатора. В этом случае список останется в выводе, но будет рассматриваться как параграф.

Или, если вы хотите поддерживать один уровень списков, но не вложенные списки, вы можете заменить методы list и / или listitem в анализаторе своей собственной реализацией, которая анализирует списки по вашему желанию.

Обратите внимание, что есть также число расширенных опций , которые используют вышеуказанные методы для изменения синтаксического анализатора и / или рендеринга различными способами. По большей части эти опции не будут предоставлять запрашиваемые вами функции, но просмотр исходного кода может дать вам некоторые идеи о том, как реализовать ваши собственные модификации.

Однако есть опция sanitize, которая принимает функцию sanitizer. Вы могли бы предоставить собственное дезинфицирующее средство, которое удаляло все нежелательные элементы из вывода HTML. Это приведет к тому же конечному результату, что и переопределение рендера, но будет реализовано иначе. В зависимости от того, чего вы хотите достичь, один или другой может быть более эффективным.

...