Типографика как code style
Основы
Для того, чтобы тексты было удобно читать и неудобно писать, человечество придумало разные правила. С орфографией и пунктуацией всё понятно, но про типографические правила говорят редко.
Типографика — набор правил вёрстки текста, призванных повысить эстетику и читаемость. Именно в таком порядке, потому что люди сначала замечают текст и только потом начинают читать.
Про шрифты, отступы и прочие кернинги в этот раз говорить не будем, потому что мне понравилось крутить ползунки в Typography.js и не переживать об эстетике.
Разговор пойдёт про висячие предлоги и прочие тире с кавычками.
Проблематика
Сайты в интернете делятся на два типа: те, кто запаривается за подготовку текстов, и те, кто забивает. Meduza.io расставляет неразрывные пробелы в текстах новостей, а rbc.ru — нет. Это не единственное отличие этих новостных порталов, но очень знаковое, как мне кажется.
Нужно забить!
Я прекрасно понимаю тех, кто не запаривается. Часть не знает, часть забивает (Вастрик, например), а у остальных user-generated content, который довольно рискованно автоматически форматировать. Аргументы для каждой группы:
- И так всё понятно.
- Условный Markdown со спецсимволами теряет половину обаяния.
- Правильные автоматические кавычки-ёлочки не сделают из комментария в Facebook литературный памятник, зато случайный японский эмотикон может разрушить цивилизацию:
Прости ^_^" Забыл купить "Доширак"
превращается в
Прости ^_^« Мы испортили »Твой текст«
. - У студентов должен быть отдельный курс по расшифровке смайликов и компилированию C++ из чатов. Бонусный аргумент.
Нужно запариться!
Википедия утверждает, что типографика — это «свод строгих правил», но список не показывает и ссылок не даёт. Стандартом де-факто в рунете являются правила из § 62 «Ководства». С ними или соглашаются, или громко спорят с некоторыми.
Пусть мне и не нравится полное отсутствие у Лебедева обоснований или ссылок на источники, но самому погружаться в историю вопроса и читать какой-нибудь авторитетный «Справочник издателя и автора» страшно: в нём 1010 страниц.
Авторы, которые хотят радовать читателей с помощью тире, обычно не пишут в блокноте (мне так кажется) или носят свои тексты из блокнота в Типограф от Артемия Лебедева, а потом назад. Про первых я ничего не знаю, а ко вторым сам отношусь, когда нужно причесать один или два текста.
У Типографа и аналогичных веб-сервисов есть фундаментальные проблемы:
- Копировать текст из редактора в браузер, а потом назад — неудобно.
- Сервис может быть офлайн в неподходящий момент, я тоже.
- Сервис может читать мои тексты до публикации.
- Некоторые тексты никому нельзя показывать (по разным причинам).
Признаюсь, что раньше я ни разу не думал об использовании типографа вне браузера, но как только образовалась перспектива заниматься этим на постоянной основе, стало понятно, что копировать текст из редактора в браузер и назад — не самое оптимальное решение и нужно что-то с этим делать.
Решение
Очевидный вариант — научить текстовый редактор автоматически расставлять неразрывные пробелы, исправлять мелкие опечатки, приводить кавычки к правильному виду, заменять дефисы на тире в нужных местах и многое другое.
Вот плагин для VS Code.
Мне больше нравится другой подход. Мы уже давно используем линтеры для языков программирования, давайте использовать их и для контента.
Конечно, я не первый, кто так подумал. Плагин выше построен на основе замечательной библиотеки typograf и прямо в README.md файле этого проекта можно найти ссылки на плагины для Babel, Gulp и Grunt.
Библиотека очень гибко настраивается, содержит сотню готовых правил и позволяет легко добавлять кастомные.
В комплекте есть cli-утилита, которая умеет читать файлы, форматировать их и выводить результат в терминал, но почему-то не умеет файл перезаписывать. Поэтому для своих целей я написал небольшой скрипт, который, получив локаль и имя файла, изменяет его содержимое. С правилами тоже пришлось немного поиграть, потому что дефолтные принимают списки за диалоги и ломают markdown-разметку.
Теперь для расстановки всех хитрых значков не нужно ходить в браузер, достаточно просто запустить скрипт, посмотреть с помощью git diff
на результат и закоммитить нужные изменения.
Красивые тексты лучше некрасивых.