---

layout: post

lang: 'ru'
date: '2020-11-18'

year: '2020'
section: 'posts'

title: 'typographic linter'
description: 'Prettier для текста. Автоматизация рутинной типографики.'

---

# Типографика как code style

## Основы

Для того, чтобы тексты было удобно читать и&nbsp;неудобно писать, человечество придумало разные правила. С&nbsp;орфографией и&nbsp;пунктуацией всё понятно, но&nbsp;про типографические правила говорят редко.

Типографика&nbsp;— набор правил вёрстки текста, призванных повысить эстетику и&nbsp;читаемость. Именно в&nbsp;таком порядке, потому что люди сначала замечают текст и&nbsp;только потом начинают читать.

Про шрифты, отступы и&nbsp;прочие кернинги в&nbsp;этот раз говорить не&nbsp;будем, потому что мне понравилось крутить ползунки в&nbsp;[Typography.js](https://github.com/KyleAMathews/typography.js) и&nbsp;не&nbsp;переживать об&nbsp;эстетике.

Разговор пойдёт про висячие предлоги и&nbsp;прочие тире с&nbsp;кавычками.

## Проблематика

Сайты в&nbsp;интернете делятся на&nbsp;два типа: те, кто запаривается за&nbsp;подготовку текстов, и&nbsp;те, кто забивает. [Meduza.io](https://meduza.io/) расставляет неразрывные пробелы в&nbsp;текстах новостей, а&nbsp;[rbc.ru](https://www.rbc.ru/)&nbsp;— нет. Это не&nbsp;единственное отличие этих новостных порталов, но&nbsp;очень знаковое, как мне кажется.

### Нужно забить!

Я&nbsp;прекрасно понимаю тех, кто не&nbsp;запаривается. Часть не&nbsp;знает, часть забивает ([Вастрик](https://vas3k.ru/), например), а&nbsp;у&nbsp;остальных user-generated content, который довольно рискованно автоматически форматировать. Аргументы для каждой группы:

- И&nbsp;так всё понятно.
- Условный Markdown со&nbsp;спецсимволами теряет половину обаяния.
- Правильные автоматические кавычки-ёлочки не&nbsp;сделают из&nbsp;комментария в&nbsp;Facebook литературный памятник, зато случайный японский эмотикон может разрушить цивилизацию: <br>
`Прости ^_^" Забыл купить  "Доширак"` превращается в&nbsp;<br>
`Прости ^_^« Мы испортили »Твой текст«`.
- У&nbsp;студентов должен быть отдельный курс по&nbsp;расшифровке смайликов и&nbsp;компилированию C++ из&nbsp;чатов. Бонусный аргумент.

### Нужно запариться!

Википедия утверждает, что [типографика](https://ru.wikipedia.org/wiki/%D0%A2%D0%B8%D0%BF%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0)&nbsp;— это «свод строгих правил», но&nbsp;список не&nbsp;показывает и&nbsp;ссылок не&nbsp;даёт. Стандартом де-факто в&nbsp;рунете являются правила из&nbsp;[§&nbsp;62&nbsp;«Ководства»](https://www.artlebedev.ru/kovodstvo/sections/62/). С&nbsp;ними или соглашаются, или [громко спорят с&nbsp;некоторыми](https://medium.com/@kapanaga/62-6c664105dd30).

Пусть мне и&nbsp;не&nbsp;нравится полное отсутствие у&nbsp;Лебедева обоснований или ссылок на&nbsp;источники, но&nbsp;самому погружаться в&nbsp;историю вопроса и&nbsp;читать какой-нибудь авторитетный [«Справочник издателя и&nbsp;автора»](https://www.artlebedev.ru/izdal/spravochnik-izdatelya-i-avtora-2017/) страшно: в&nbsp;нём 1010&nbsp;страниц.

Авторы, которые хотят радовать читателей с&nbsp;помощью тире, обычно не&nbsp;пишут в&nbsp;блокноте (мне так кажется) или носят свои тексты из&nbsp;блокнота в&nbsp;[Типограф](https://www.artlebedev.ru/typograf/) от&nbsp;Артемия Лебедева, а&nbsp;потом назад. Про первых я&nbsp;ничего не&nbsp;знаю, а&nbsp;ко&nbsp;вторым сам отношусь, когда нужно причесать один или два текста.

У&nbsp;Типографа и&nbsp;аналогичных веб-сервисов есть фундаментальные проблемы:

- Копировать текст из&nbsp;редактора в&nbsp;браузер, а&nbsp;потом назад&nbsp;— неудобно.
- Сервис может быть офлайн в&nbsp;неподходящий момент, я&nbsp;тоже.
- Сервис может читать мои тексты до&nbsp;публикации.
- Некоторые тексты никому нельзя показывать (по&nbsp;разным причинам).

Признаюсь, что раньше я&nbsp;ни&nbsp;разу не&nbsp;думал об&nbsp;использовании типографа вне браузера, но&nbsp;как только образовалась перспектива заниматься этим на&nbsp;постоянной основе, стало понятно, что копировать текст из&nbsp;редактора в&nbsp;браузер и&nbsp;назад&nbsp;— не&nbsp;самое оптимальное решение и&nbsp;нужно что-то с&nbsp;этим делать.

## Решение

Очевидный вариант&nbsp;— научить текстовый редактор автоматически расставлять неразрывные пробелы, исправлять мелкие опечатки, приводить кавычки к&nbsp;правильному виду, заменять дефисы на&nbsp;тире в&nbsp;нужных местах и&nbsp;многое другое. <br>
Вот [плагин для VS&nbsp;Code](https://marketplace.visualstudio.com/items?itemName=rusnasonov.vscode-typograf).

Мне больше нравится другой подход. Мы&nbsp;уже давно используем линтеры для языков программирования, давайте использовать их&nbsp;и&nbsp;для контента.

Конечно, я&nbsp;не&nbsp;первый, кто так подумал. Плагин выше построен на&nbsp;основе замечательной библиотеки [typograf](https://github.com/typograf/typograf) и&nbsp;прямо в&nbsp;README.md файле этого проекта можно найти ссылки на&nbsp;плагины для Babel, Gulp и&nbsp;Grunt.

Библиотека очень гибко настраивается, содержит [сотню готовых правил](https://github.com/typograf/typograf/blob/dev/docs/RULES.ru.md) и&nbsp;позволяет легко добавлять кастомные.

В&nbsp;комплекте есть cli-утилита, которая умеет читать файлы, форматировать их&nbsp;и&nbsp;выводить результат в&nbsp;терминал, но&nbsp;почему-то не&nbsp;умеет файл перезаписывать. Поэтому для своих целей я&nbsp;написал небольшой скрипт, который, получив локаль и&nbsp;имя файла, изменяет его содержимое. С&nbsp;правилами тоже пришлось немного поиграть, потому что дефолтные принимают списки за&nbsp;диалоги и&nbsp;ломают markdown-разметку.

Теперь для расстановки всех хитрых значков не&nbsp;нужно ходить в&nbsp;браузер, достаточно просто запустить скрипт, посмотреть с&nbsp;помощью `git diff` на&nbsp;результат и&nbsp;закоммитить нужные изменения.

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