Files
2025-etpgrf/README.md

8.2 KiB
Raw Blame History

in progress // в процессе разработки
-------->

Типограф для Web

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

Кодировки и html-мнемоники

Внутри типографа используется кодировка UTF-8. Но при использовании может быть другие кодировки (например, для русскоязычных текстов все ещё могут использовать Windows-1251). При таких кодировках, для отображения в браузерах некоторых специфических символов (например, кавычек, тире, стрелочек, математических символов) используют html-мнемоники (например, — для длинного тире, « для открывающей кавычки-ёлочки и т.д.).

tpgrf имеет три режима работы с кодировками:

  • Режим unicode -- весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых пробелов, мягких переносов и т.д. Это не всегда удобно зато типографированый текст (строки) будет максимально компактен и занимать меньше места в памяти. В этом режиме в html-мнемоники преобразуются только опасные символы:
    • &lt; -- знак меньше <;
    • &gt; -- знак больше >;
    • &amp; -- амперсанд &;
    • &quot; -- двойные кавычки ";
    • &apos; -- одинарные кавычки (апостроф) '.
  • Режим mixed -- вывод осуществляется в кодировке UTF-8, но наиболее критичные символы заменяются на html-мнемоники. Они невидимы или неотличимы друг от друга на экране:
    • &shy; -- мягкий перенос (Soft Hyphen);
    • &nbsp; -- неразрывный пробел (Non-Breaking Space);
    • &ensp; -- полужирный пробел (En Space)
    • &emsp; -- широкий пробел (Em Space)
    • &numsp; -- цифровой пробел;
    • &puncsp; -- пунктуационный пробел;
    • &thinsp; -- межсимвольный пробел;
    • &hairsp; -- пробел "толщина волоса" (Hair Space);
    • &NegativeThinSpace; -- негативный пробел (Negative Space);
    • &zwj; -- пробел нулевой ширины (без объединения) (Zero Width Non-Joiner);
    • &zwnj; -- нулевая ширина (с объединением) (Zero Width Joiner);
    • &lrm; -- изменение направления текста на слева-направо (Left-to-Right Mark);
    • &rlm; -- изменение направления текста на направо-налево (Right-to-Left Mark);
    • &dash; -- дефис (Hyphen);
    • &MediumSpace; -- средний пробел (Medium Mathematical Space);
    • &NoBreak; -- неразрывный пробел (No-Break Space);
    • &InvisibleTimes; -- невидимый знак умножения (Invisible Times) для семантической разметки математических выражений;
    • &InvisibleComma; -- невидимая запятая (Invisible Comma) для семантической разметки математических выражений.
  • Режим mnemonic -- применяются все возможные html-мнемоники (кроме русских букв) и символов первой половины ASCII (плюс, минус, знак равенства, знаки препинания и т.д.).

Переключение режимов осуществляется с помощью параметра mode при конфигурировании типографа:

# Задаем конфигурацию типографа
typo_mixed_mode = etpgrf.Typographer(mode='mixed')
# Обработка текста 
result = typo_mixed_mode.process(text="Этот текст будет обработан в режиме mixed.")

ВАЖНО! Некоторым символам соответствуют несколько html-мнемоник. Например, (стрелочка влево) может кодироваться как &rarr;, &srarr;, &rightarrow, &RightArrow; и &ShortRightArrow;. Типограф будет использовать самое короткое из них (для компактности), что может немного "испортить" код если мнемоники использовались, в том числе, и как семантическая разметка.

Переносы слов

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

Настройки по умолчанию для переноса слов (в etpgrf.defaults):

  • Длина слова которое не подлежит переносам (MAX_UNHYPHENATED_LEN) — 12 символов.
  • Длина части слова, которое недопустимо переносить или оставлять на строке ("хвост", "сироты") (MIN_TAIL_LEN) — 7 символ

Управление этими параметрами осуществляется через переопределение. Например:

# Меняем настройки по умолчанию для переносов
etpgrf.defaults.etpgrf_settings.hyphenation.MAX_UNHYPHENATED_LEN = 8
etpgrf.defaults.etpgrf_settings.hyphenation.MIN_TAIL_LEN = 4

Или через параметры конфигурации переносов типографа:

# Определяем пользовательские правила переносов
hyphen_settings = etpgrf.Hyphenator(langs='ru', max_unhyphenated_len=8)
# Передаем их в типограф
typo_hyp = etpgrf.Typographer(langs='ru', mode='mnemonic', hyphenation=hyphen_settings)
# Обработка текста с переносами
result = typo_hyp.process(text="Электрофоретическое исследование характеризуется квинтэссенциальной значимостью!")

Результат обработки текста с переносами будет выглядеть так:

Электрофо&shy;ретическое исследование характе&shy;ризуется квинтэс&shy;сенциальной значимостью!

Предлоги, союзы и частицы

Кавычки