Умная пунктуация без символов IP

Возможно ли настроить текущие параметры конфигурации для Markdown-типографа (также известного как «умная пунктуация»), чтобы включить символы Unicode-пунктуации, такие как кавычки и тире, но отключить (c), ™ и, возможно, другие специализированные глифы подобного рода?

Я юрист. Я постоянно консультирую по вопросам товарных знаков и авторского права, в том числе на форумах Discourse. Мне ещё ни разу не пришлось советовать кому-либо редактировать пост, чтобы добавить символ авторского права или товарного знака, а неюристы, как правило, сильно переоценивают частоту их полезности или необходимости. С другой стороны, я редактировал больше постов, чем могу сосчитать, пытаясь заставить рендерер Markdown не отображать символ ©.

Это особенно часто возникает в нумерованных списках. Например:

(a) яблоко
(b) банан
(c) авторское право?
(d) дата

Такой стиль нумерации очень распространён в законах, договорах, политиках и других формальных текстах, написанных в юридическом стиле. Это также очень распространённый стиль планов. Он входил в «стандартный» стиль планов, которому меня учили в начальной школе в США.

Я вижу, что текущие настройки предлагают определённую гибкость в отношении пунктуации, но, насколько я могу судить, нет способа включить умную пунктуацию, не включая при этом умные символы.

9 лайков

У меня нет сильных чувств по этому поводу. Мне кажется, что «необходимость» вводить символ авторского права настолько редка, что эту комбинацию можно убрать. Баланс между крайне редкой полезностью и довольно распространённым (но некрасивым) форматом списка (a) (b) (c)… Я не против полностью удалить эту конкретную комбинацию @sam.

6 лайков

Я бы также поддержал просто полное удаление (c).

Ведь нетрудно найти «символ копирайта», скопировать и вставить. Гики могут ввести ©.

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

5 лайков

Хорошо, в данном случае выгода (чуть-чуть) перевешивает риск (довольно значительно!).

5 лайков

Это выглядит не очень настраиваемым. Нам потребуется исправить markdown.it, чтобы поддержать такую гибкость, или просто написать свой собственный преттификатор на основе markdown.it.

Единственное тривиальное решение — просто отключить всю эту функцию.

5 лайков

Хм, странно, что это вообще нельзя настроить. Это досадно. Так что

(c) (tm) (r) (p) → (c) ™ (r) (p)

3 лайка

Плюс в том, что движок довольно гибко настраивается: можно отключить правила в markdown.it, скопировать код и реализовать свои собственные замены, как это сделал @Roman.

Несколько дней работы инженеров по приведению этого в порядок — это тоже было бы жалко, к тому же нежелательно отправлять один и тот же код дважды, но при форке это неизбежно.

3 лайка

По состоянию на коммит 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d в ветке master проекта markdown-it соответствующий исходный файл — lib/rules_core/replacements.js, а тестовый пример — test/fixtures/markdown-it/typographer.txt.

Все замены жестко закодированы. Они включают (c) → (c), (tm) → ™, (r) → (r) и (p) → (p), которые сгруппированы как «обозначения с областью действия».

Кстати, у меня не получается получить (p) для §. Это почти наверняка должно быть ℗, символ фонограммы.

Я немного покопаюсь в этом и посмотрю, не смогу ли я предложить патч, который сделает функцию «типограф» более настраиваемой.

7 лайков

Это меня тоже бесит. Я сталкиваюсь с этим как минимум раз в неделю.

9 лайков

Сначала вспомогательный PR, исправляющий интерпретацию (p) и (P): Fix typographer interpretation of `(p)` by kemitchell · Pull Request #761 · markdown-it/markdown-it · GitHub

7 лайков

PR по отключению групп замен: Configurable typographer by kemitchell · Pull Request #762 · markdown-it/markdown-it · GitHub

3 лайка

Мейнтейнер очень отзывчивый. Он закрывает мои PR за считанные минуты :stuck_out_tongue_winking_eye:

Из того, что я читаю, следует, что он крайне неохотно вносит какие-либо breaking changes, даже в новых мажорных версиях, даже для таких вещей, как рендеринг (P) как §. Также он категорически против поддержки опций в стиле typographer: {A: true, B: false}, даже когда typographer: true продолжает работать, из-за воспринимаемой сложности.

Читаю между строк: он русский, пишет по-английски. Но у меня сложилось ощущение, что он считает markdown-it завершённым продуктом.

С всей благодарностью, возможно, стоит сделать форк реализации, переписать её на ES Modules и выкинуть весь функционал, похожий на плагины, который сейчас встроен: как линтификацию, так и замены, включая пунктуационные замены типографа.

3 лайка

Майнтейнер не заинтересован в обсуждении дублирования кода в сборках без номеров версий. Также его не интересуют даже не ломающие изменения в API, которые не «требуются 100% пользователей» или не блокируют реализацию плагинов. Это создаёт определённую дилемму, поскольку он выпускает два очень похожих на плагины подмодуля — для автоматического создания ссылок и умных кавычек, которые, согласно этой философии, должны быть вынесены в отдельные небольшие npm-пакеты. Такое случается.

Для контекста: в недавнем прошлом в markdown-it были выпущены значительные обновления. В частности, в ноябре прошлого года Алекс Кохарин внёс улучшения производительности.

Чтобы исправить (c), обработать (p) и сделать всё остальное, что мы хотим, с символами стрелок и подобными, лучшим решением, вероятно, будет создать патч, удаляющий подмодули для создания ссылок и умных кавычек из ядра и загружающий их вместо этого как плагины в Discourse. Использовать GitHub Action или планировщик задач (cron job) для отслеживания ветки master в markdown-it и попыток автоматического перебазирования. Если майнтейнер останется столь же консервативным в отношении изменений, этот патч будет применяться без конфликтов довольно долгое время. Если только они не сделают крупный шаг, например, не перепишут проект на ES Modules вместо CommonJS.

6 лайков

Мы обсудили это внутренне и решили сделать форк typographer.

Мы фактически отключим typographer в markdown.it и реализуем его копию в Discourse. markdown.it невероятно расширяем, поэтому это в основном «копирование и вставка».

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

9 лайков

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

Спасибо!

2 лайка

Это настройка сайта, просто отключите типографа

2 лайка

Ну, я уже пробовал это сделать, но, похоже, это не работает. Неважно, включён или выключен типограф, подстановки всё равно выполняются (кстати, (c) вроде бы не работает)

2 лайка

Вам нужно отключить, а затем пересобрать HTML для нужных вам постов.

5 лайков

Теперь это полностью завершено :confetti_ball:

2 лайка