101 lines
8.2 KiB
Markdown
101 lines
8.2 KiB
Markdown
| 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` при конфигурировании типографа:
|
||
```python
|
||
# Задаем конфигурацию типографа
|
||
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 символ
|
||
|
||
Управление этими параметрами осуществляется через переопределение. Например:
|
||
```python
|
||
# Меняем настройки по умолчанию для переносов
|
||
etpgrf.defaults.etpgrf_settings.hyphenation.MAX_UNHYPHENATED_LEN = 8
|
||
etpgrf.defaults.etpgrf_settings.hyphenation.MIN_TAIL_LEN = 4
|
||
```
|
||
Или через параметры конфигурации переносов типографа:
|
||
```python
|
||
# Определяем пользовательские правила переносов
|
||
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="Электрофоретическое исследование характеризуется квинтэссенциальной значимостью!")
|
||
```
|
||
|
||
Результат обработки текста с переносами будет выглядеть так:
|
||
```html
|
||
Электрофо­ретическое исследование характе­ризуется квинтэс­сенциальной значимостью!
|
||
```
|
||
|
||
### Предлоги, союзы и частицы
|
||
|
||
### Кавычки
|
||
|