Руководство
Длинные тире в Markdown: сохраните ASCII в исходнике
Сделайте Markdown предсказуемым, когда редактор, расширение или генератор превращает последовательности ASCII в U+2013 или U+2014.
Автор: Kris Vinters · Опубликовано · 4 мин чтения
Найдите слой, который преобразует тире
Сам Markdown не требует такого преобразования. Отдельный типографический проход может превратить -- в U+2013, а --- в U+2014. Python-Markdown называет расширение SmartyPants, у других редакторов и генераторов есть похожие параметры.
Преобразование может происходить при наборе, при создании HTML или в позднем фильтре шаблона. Редактор меняет исходный файл, а движок рендеринга может оставить ASCII в исходнике и записать Unicode только в результат.
Расширения, которые понимают Markdown, обычно исключают код. Но автозамена редактора и порядок этапов могут сработать до парсера. Front matter часто обрабатывается отдельно, однако форматировщик всего файла может переписать и его. Проверяйте именно свою цепочку.
Пишите и сохраняйте исходник только в ASCII
Отключите умную пунктуацию в редакторе, который сохраняет файл. Если готовый HTML тоже должен быть ASCII, отключите замену в расширении или генераторе. Ищите smart punctuation, SmartyPants, smart dashes или typographic symbols.
Оставляйте -- и --- последовательностями ASCII, если таково правило проекта. В блоках кода, front matter, примерах shell и идентификаторах используйте точный синтаксис целевого языка. Проверяйте diff исходника и результат сборки отдельно.
Если форматировщик должен остаться, ограничьте его прозой или исключите код, front matter, сгенерированные файлы и тестовые данные. Проверка на не-ASCII должна разрешать нужные языки и образцы.
Если в тексте уже есть тире Unicode, вставьте в Ghostchars только прозу, откройте Дополнительно и выберите «Простая пунктуация». Параметр превращает U+2013 и U+2014 в дефисы ASCII, но меняет и другую типографскую пунктуацию. Проверьте находки перед обработкой всего исходника.
Это нормализация символов, а не определение авторства. Очистка меняет выбранную пунктуацию. Отчёт о стиле выдаёт измерения, а не вердикт.
Стабилизируйте код, front matter и diff
Добавьте тестовый пример с --, ---, встроенным кодом, ограждённым блоком и значением front matter. Соберите его производственной командой и сравните источник с результатом.
Если исходник остался ASCII, типографику создал рендерер. Если Unicode уже записан в файл, проверьте автозамену, форматирование при сохранении, преобразования вставки и форматировщики перед commit.
Вопросы о тире в Markdown
Преобразует ли Markdown два или три дефиса сам?
Универсального правила нет. Преобразование может добавить расширение, редактор, тема или генератор. Проверьте реализацию и настройки.
Меняет ли умная пунктуация блоки кода?
Расширения Markdown обычно исключают их, но редактор или форматировщик всего файла может сработать до парсера. Проверьте цепочку на тестовой сборке.
Может ли опубликованная страница содержать U+2014 при ASCII-исходнике?
Да. Рендерер может оставить --- в исходнике и вывести U+2014 только в HTML. Если ASCII нужен и там, отключите этот этап рендеринга.
Другие практические объяснения собраны в разделе всех руководств о скрытых символах и границах очистки.