Было время, когда каждый веб-разработчик писал свой типограф или думал о нём. Я не стал исключением и написал типограф на PHP. Но как сделать типограф без нормальной поддержки UTF-8, в то время я не представлял, в итоге забросил идею.
Прошло время, но идея создания типографа не оставляла, и я решил написать его уже на JavaScript.
Начал с основных требований:
Я быстро пришёл к модульности правил в типографе, одно правило — одна функция — один файл, все правила распределены по группам.
Добавить своё правило очень просто:
Ядро типографа всего лишь запускает правила-функции, передавая обработанный текст от правила к правилу.
Есть очереди, т. к. некоторые правила необходимо запускать в самом начале обработки текста, какие-то в конце.
Есть индексы у правил, в каком порядке в очереди запустить правило, это позволяет уменьшить сложность регулярных выражений.
Правила можно включать и отключать. Некоторые правила выключены по умолчанию, например, висячая пунктуация.
Устанавливаем:
Типографируем текст по русским правилам:
Варианты использования типографа:
В каждом типографе есть ошибки после типографирования. Чем больше тестов-текстов и пользователей, тем качественнее типограф, а это значит приветствуются замечания и пулл-реквесты на Github.
Прошло время, но идея создания типографа не оставляла, и я решил написать его уже на JavaScript.
Начал с основных требований:
- только UTF-8;
- гибкость и расширяемость;
- работа на клиенте и сервере, там, где есть JavaScript;
- поддержка (X|HT)ML;
- по умолчанию, HTML-cущности переводятся в чистые UTF-8 символы;
- не типографировать стили и скрипты;
- CLI-утилита.
Я быстро пришёл к модульности правил в типографе, одно правило — одна функция — один файл, все правила распределены по группам.
Добавить своё правило очень просто:
Typograf.rule({
name: 'common/other/emoji',
handler: function (text) {
return text.replace(/:-\)/g, '\uD83D\uDE0A');
}
});
Ядро типографа всего лишь запускает правила-функции, передавая обработанный текст от правила к правилу.
Есть очереди, т. к. некоторые правила необходимо запускать в самом начале обработки текста, какие-то в конце.
Есть индексы у правил, в каком порядке в очереди запустить правило, это позволяет уменьшить сложность регулярных выражений.
Правила можно включать и отключать. Некоторые правила выключены по умолчанию, например, висячая пунктуация.
Быстрый старт
В браузере
npm i typograf
<script src="./node_modules/dist/typograf.min.js"></script>
<script>
var tp = new Typograf({lang: 'ru'});
alert(tp.execute(' Мир - мой мир!! '));
</script>
В Node.js
npm i typograf
var Typograf = require('typograf'),
tp = new Typograf({lang: 'ru'});
tp.enable('ru/optalign/*'); // Включить висячую пунктуацию
console.log(tp.execute(' Мир - мой мир!! '));
CLI
Устанавливаем:
npm i typograf -g
Типографируем текст по русским правилам:
typograf -l ru my_file.txt > my_new_file.txt
Варианты использования типографа:
- Typograf
- Веб-интерфейс для десктопа или мобильника
- Типографирование на лету c jQuery или без, пример
- Typograf в npm
- gulp-typograf и grunt-typograf
- Букмарклет для «отчаявшихся»
- TODO: Плагины для браузеров
В каждом типографе есть ошибки после типографирования. Чем больше тестов-текстов и пользователей, тем качественнее типограф, а это значит приветствуются замечания и пулл-реквесты на Github.
Комментарии (12)
PerlPower
10.09.2015 15:15+2Что делает типограф?
hcodes
10.09.2015 15:30+2Типограф — это удобное средство онлайн подготовки текста к веб-изданию. Он помогает избежать монотонной корректировки, расстановки кавычек, неразрывных пробелов, специальных символов, исправляет некоторые ошибки ввода (опечатки) и так далее.
SamDark
10.09.2015 16:40+2Можете мой тестовый набор взять. Составлялся пару лет точно: github.com/samdark/Typograph/tree/master/tests
Maccimo
10.09.2015 23:12>> по умолчанию, HTML-cущности переводятся в чистые UTF-8 символы;
В этом действительно есть смысл?
По наблюдениям, HTML entities используют как раз для тех символов, с которыми обычным способом работать неудобно.hcodes
11.09.2015 14:12Это нужно для:
- типографирования на лету;
- меньший размер в байтах;
- независимость от формата.
hcodes
12.09.2015 11:16Проголосуйте, пожалуйста, за баг.
Firefox при копировании текста заменяет неразрывный пробел на обычный.
bugzilla.mozilla.org/show_bug.cgi?id=359303
Rastishka