release: 2026-04-23-191549

This commit is contained in:
He4eT 2026-04-23 19:15:50 +02:00
commit 461c2a920b
80 changed files with 6968 additions and 0 deletions

View file

@ -0,0 +1,109 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta
name="viewport"
content="width=device-width, initial-scale=1.0">
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<title>
typographic linter | oddsquat
</title>
<meta name="description" content="Prettier для текста. Автоматизация рутинной типографики.">
<link rel="preload" href="/fonts/open_sans_condensed-32.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/open_sans_condensed-27.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/open_sans-25.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/open_sans-24.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/open_sans-17.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" type="text/css" href="/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/css/typography.css">
<link rel="stylesheet" type="text/css" href="/css/main.css">
</head>
<body>
<div class="stripesContainer">
<div class="stripes">
</div>
</div>
<header>
<nav>
<ul>
<li><a href="/">oddsquat</a></li>
<li><a href="/posts/">
posts</a></li>
<li><a href="/posts/#2020">
2020</a></li>
<li>typographic linter</li>
</ul>
</nav>
</header>
<main>
<article>
<h1 id="-code-style">Типографика как code style</h1>
<h2 id="-">Основы</h2>
<p>Для того, чтобы тексты было удобно читать и&nbsp;неудобно писать, человечество придумало разные правила. С&nbsp;орфографией и&nbsp;пунктуацией всё понятно, но&nbsp;про типографические правила говорят редко.</p>
<p>Типографика&nbsp;— набор правил вёрстки текста, призванных повысить эстетику и&nbsp;читаемость. Именно в&nbsp;таком порядке, потому что люди сначала замечают текст и&nbsp;только потом начинают читать.</p>
<p>Про шрифты, отступы и&nbsp;прочие кернинги в&nbsp;этот раз говорить не&nbsp;будем, потому что мне понравилось крутить ползунки в&nbsp;<a href="https://github.com/KyleAMathews/typography.js">Typography.js</a> и&nbsp;не&nbsp;переживать об&nbsp;эстетике.</p>
<p>Разговор пойдёт про висячие предлоги и&nbsp;прочие тире с&nbsp;кавычками.</p>
<h2 id="-">Проблематика</h2>
<p>Сайты в&nbsp;интернете делятся на&nbsp;два типа: те, кто запаривается за&nbsp;подготовку текстов, и&nbsp;те, кто забивает. <a href="https://meduza.io/">Meduza.io</a> расставляет неразрывные пробелы в&nbsp;текстах новостей, а&nbsp;<a href="https://www.rbc.ru/">rbc.ru</a>&nbsp;— нет. Это не&nbsp;единственное отличие этих новостных порталов, но&nbsp;очень знаковое, как мне кажется.</p>
<h3 id="-">Нужно забить!</h3>
<p>Я&nbsp;прекрасно понимаю тех, кто не&nbsp;запаривается. Часть не&nbsp;знает, часть забивает (<a href="https://vas3k.ru/">Вастрик</a>, например), а&nbsp;у&nbsp;остальных user-generated content, который довольно рискованно автоматически форматировать. Аргументы для каждой группы:</p>
<ul>
<li>И&nbsp;так всё понятно.</li>
<li>Условный Markdown со&nbsp;спецсимволами теряет половину обаяния.</li>
<li>Правильные автоматические кавычки-ёлочки не&nbsp;сделают из&nbsp;комментария в&nbsp;Facebook литературный памятник, зато случайный японский эмотикон может разрушить цивилизацию: <br>
<code>Прости ^_^&quot; Забыл купить &quot;Доширак&quot;</code> превращается в&nbsp;<br>
<code>Прости ^_^« Мы испортили »Твой текст«</code>.</li>
<li>У&nbsp;студентов должен быть отдельный курс по&nbsp;расшифровке смайликов и&nbsp;компилированию C++ из&nbsp;чатов. Бонусный аргумент.</li>
</ul>
<h3 id="-">Нужно запариться!</h3>
<p>Википедия утверждает, что <a href="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">типографика</a>&nbsp;— это «свод строгих правил», но&nbsp;список не&nbsp;показывает и&nbsp;ссылок не&nbsp;даёт. Стандартом де-факто в&nbsp;рунете являются правила из&nbsp;<a href="https://www.artlebedev.ru/kovodstvo/sections/62/">§&nbsp;62&nbsp;«Ководства»</a>. С&nbsp;ними или соглашаются, или <a href="https://medium.com/@kapanaga/62-6c664105dd30">громко спорят с&nbsp;некоторыми</a>.</p>
<p>Пусть мне и&nbsp;не&nbsp;нравится полное отсутствие у&nbsp;Лебедева обоснований или ссылок на&nbsp;источники, но&nbsp;самому погружаться в&nbsp;историю вопроса и&nbsp;читать какой-нибудь авторитетный <a href="https://www.artlebedev.ru/izdal/spravochnik-izdatelya-i-avtora-2017/">«Справочник издателя и&nbsp;автора»</a> страшно: в&nbsp;нём 1010&nbsp;страниц.</p>
<p>Авторы, которые хотят радовать читателей с&nbsp;помощью тире, обычно не&nbsp;пишут в&nbsp;блокноте (мне так кажется) или носят свои тексты из&nbsp;блокнота в&nbsp;<a href="https://www.artlebedev.ru/typograf/">Типограф</a> от&nbsp;Артемия Лебедева, а&nbsp;потом назад. Про первых я&nbsp;ничего не&nbsp;знаю, а&nbsp;ко&nbsp;вторым сам отношусь, когда нужно причесать один или два текста.</p>
<p>У&nbsp;Типографа и&nbsp;аналогичных веб-сервисов есть фундаментальные проблемы:</p>
<ul>
<li>Копировать текст из&nbsp;редактора в&nbsp;браузер, а&nbsp;потом назад&nbsp;— неудобно.</li>
<li>Сервис может быть офлайн в&nbsp;неподходящий момент, я&nbsp;тоже.</li>
<li>Сервис может читать мои тексты до&nbsp;публикации.</li>
<li>Некоторые тексты никому нельзя показывать (по&nbsp;разным причинам).</li>
</ul>
<p>Признаюсь, что раньше я&nbsp;ни&nbsp;разу не&nbsp;думал об&nbsp;использовании типографа вне браузера, но&nbsp;как только образовалась перспектива заниматься этим на&nbsp;постоянной основе, стало понятно, что копировать текст из&nbsp;редактора в&nbsp;браузер и&nbsp;назад&nbsp;— не&nbsp;самое оптимальное решение и&nbsp;нужно что-то с&nbsp;этим делать.</p>
<h2 id="-">Решение</h2>
<p>Очевидный вариант&nbsp;— научить текстовый редактор автоматически расставлять неразрывные пробелы, исправлять мелкие опечатки, приводить кавычки к&nbsp;правильному виду, заменять дефисы на&nbsp;тире в&nbsp;нужных местах и&nbsp;многое другое. <br>
Вот <a href="https://marketplace.visualstudio.com/items?itemName=rusnasonov.vscode-typograf">плагин для VS&nbsp;Code</a>.</p>
<p>Мне больше нравится другой подход. Мы&nbsp;уже давно используем линтеры для языков программирования, давайте использовать их&nbsp;и&nbsp;для контента.</p>
<p>Конечно, я&nbsp;не&nbsp;первый, кто так подумал. Плагин выше построен на&nbsp;основе замечательной библиотеки <a href="https://github.com/typograf/typograf">typograf</a> и&nbsp;прямо в&nbsp;README.md файле этого проекта можно найти ссылки на&nbsp;плагины для Babel, Gulp и&nbsp;Grunt.</p>
<p>Библиотека очень гибко настраивается, содержит <a href="https://github.com/typograf/typograf/blob/dev/docs/RULES.ru.md">сотню готовых правил</a> и&nbsp;позволяет легко добавлять кастомные.</p>
<p>В&nbsp;комплекте есть cli-утилита, которая умеет читать файлы, форматировать их&nbsp;и&nbsp;выводить результат в&nbsp;терминал, но&nbsp;почему-то не&nbsp;умеет файл перезаписывать. Поэтому для своих целей я&nbsp;написал небольшой скрипт, который, получив локаль и&nbsp;имя файла, изменяет его содержимое. С&nbsp;правилами тоже пришлось немного поиграть, потому что дефолтные принимают списки за&nbsp;диалоги и&nbsp;ломают markdown-разметку.</p>
<p>Теперь для расстановки всех хитрых значков не&nbsp;нужно ходить в&nbsp;браузер, достаточно просто запустить скрипт, посмотреть с&nbsp;помощью <code>git diff</code> на&nbsp;результат и&nbsp;закоммитить нужные изменения.</p>
<p>Красивые тексты лучше некрасивых.</p>
</article>
</main>
<footer>
2020-11-18
</footer>
<script async
data-goatcounter="https://he4et.goatcounter.com/count"
src="https://gc.zgo.at/count.js"></script>
</body>
</html>