in progress // в процессе разработки |
---|
--------> |
Типограф для Web
Экранная типографика для веба -- способствует повышению читабельности текста в интернете, приближая его к печатной типографике.
Кодировки и html-мнемоники
Внутри типографа используется кодировка UTF-8. Но при использовании может быть другие кодировки (например,
для русскоязычных текстов все ещё могут использовать Windows-1251). При таких кодировках, для отображения в браузерах
некоторых специфических символов (например, кавычек, тире, стрелочек, математических символов) используют
html-мнемоники (например, —
для длинного тире, «
для открывающей кавычки-ёлочки и т.д.).
tpgrf имеет три режима работы с кодировками:
- Режим
unicode
-- весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых пробелов, мягких переносов и т.д. Это не всегда удобно зато типографированый текст (строки) будет максимально компактен и занимать меньше места в памяти. В этом режиме в html-мнемоники преобразуются только опасные символы:<
-- знак меньше<
;>
-- знак больше>
;&
-- амперсанд&
;"
-- двойные кавычки"
;'
-- одинарные кавычки (апостроф)'
.
- Режим
mixed
-- вывод осуществляется в кодировке UTF-8, но наиболее критичные символы заменяются на html-мнемоники. Они невидимы или неотличимы друг от друга на экране:­
-- мягкий перенос (Soft Hyphen);
-- неразрывный пробел (Non-Breaking Space); 
-- полужирный пробел (En Space) 
-- широкий пробел (Em Space) 
-- цифровой пробел; 
-- пунктуационный пробел; 
-- межсимвольный пробел; 
-- пробел "толщина волоса" (Hair Space);​
-- негативный пробел (Negative Space);‍
-- пробел нулевой ширины (без объединения) (Zero Width Non-Joiner);‌
-- нулевая ширина (с объединением) (Zero Width Joiner);‎
-- изменение направления текста на слева-направо (Left-to-Right Mark);‏
-- изменение направления текста на направо-налево (Right-to-Left Mark);‐
-- дефис (Hyphen); 
-- средний пробел (Medium Mathematical Space);⁠
-- неразрывный пробел (No-Break Space);⁢
-- невидимый знак умножения (Invisible Times) для семантической разметки математических выражений;⁣
-- невидимая запятая (Invisible Comma) для семантической разметки математических выражений.
- Режим
mnemonic
-- применяются все возможные html-мнемоники (кроме русских букв) и символов первой половины ASCII (плюс, минус, знак равенства, знаки препинания и т.д.).
Переключение режимов осуществляется с помощью параметра mode
при конфигурировании типографа:
# Задаем конфигурацию типографа
typo_mixed_mode = etpgrf.Typographer(mode='mixed')
# Обработка текста
result = typo_mixed_mode.process(text="Этот текст будет обработан в режиме mixed.")
ВАЖНО! Некоторым символам соответствуют несколько html-мнемоник. Например, →
(стрелочка влево) может кодироваться
как →
, →
, &rightarrow
, →
и →
. Типограф будет использовать самое короткое
из них (для компактности), что может немного "испортить" код если мнемоники использовались, в том числе, и как
семантическая разметка.
Переносы слов
Обычно в основе переносов слов лежит фонетический принцип — деление по слогам и морфемный принцип — деление по морфемам (приставки, корни, суффиксы, окончания). В типографе 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(hyphenation=hyphen_settings)
# Обработка текста с переносами
result = typo_hyp.process(text="Электрофоретическое исследование характеризуется квинтэссенциальной значимостью")