Было время, когда каждый веб-разработчик писал свой типограф или думал о нём. Я не стал исключением и написал типограф на PHP. Но как сделать типограф без нормальной поддержки UTF-8, в то время я не представлял, в итоге забросил идею.

Прошло время, но идея создания типографа не оставляла, и я решил написать его уже на 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


Варианты использования типографа:

В каждом типографе есть ошибки после типографирования. Чем больше тестов-текстов и пользователей, тем качественнее типограф, а это значит приветствуются замечания и пулл-реквесты на Github.

Комментарии (12)


  1. Rastishka
    10.09.2015 15:05
    +1

    только UTF-8;
    Это шикарно, спасибо!


  1. PerlPower
    10.09.2015 15:15
    +2

    Что делает типограф?


    1. hcodes
      10.09.2015 15:30
      +2

      Типограф — это удобное средство онлайн подготовки текста к веб-изданию. Он помогает избежать монотонной корректировки, расстановки кавычек, неразрывных пробелов, специальных символов, исправляет некоторые ошибки ввода (опечатки) и так далее.


  1. SamDark
    10.09.2015 16:40
    +2

    Можете мой тестовый набор взять. Составлялся пару лет точно: github.com/samdark/Typograph/tree/master/tests


    1. hcodes
      10.09.2015 17:20
      +1

      Отлично, завёл задачу.


  1. UksusoFF
    10.09.2015 22:07
    +1

    Как плагин для CKEditor популярных визуальных редакторов планируется?


    1. hcodes
      11.09.2015 00:27
      +1

      Пока в планах нет, но встроить его не сложно.


    1. bashkos
      11.09.2015 04:30

      Вот пример написания плагина TinyMCE habrahabr.ru/post/266337/#typograf


  1. Maccimo
    10.09.2015 23:12

    >> по умолчанию, HTML-cущности переводятся в чистые UTF-8 символы;

    В этом действительно есть смысл?
    По наблюдениям, HTML entities используют как раз для тех символов, с которыми обычным способом работать неудобно.


    1. hcodes
      11.09.2015 14:12

      Это нужно для:

      • типографирования на лету;
      • меньший размер в байтах;
      • независимость от формата.


  1. hcodes
    12.09.2015 11:16

    Проголосуйте, пожалуйста, за баг.
    Firefox при копировании текста заменяет неразрывный пробел на обычный.
    bugzilla.mozilla.org/show_bug.cgi?id=359303


  1. asheee
    23.09.2015 16:38

    Но… Я же… Уже… Но… Почему… github.com/shuvalov-anton/textr