# Типографика как 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` на результат и закоммитить нужные изменения.

Красивые тексты лучше некрасивых.