add: ++кодировки и мнемоники
This commit is contained in:
84
README.md
84
README.md
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
# Типограф для Web
|
# Типограф для Web
|
||||||
|
|
||||||
Экранная типографика для веба -- способствует повышению читабельности текста в интернете,
|
Экранная типографика для веба — способствует повышению читабельности текста в интернете,
|
||||||
приближая его к печатной типографике.
|
приближая его к печатной типографике.
|
||||||
|
|
||||||
### Кодировки и html-мнемоники
|
### Кодировки и html-мнемоники
|
||||||
@@ -15,36 +15,36 @@
|
|||||||
html-мнемоники (например, `—` для длинного тире, `«` для открывающей кавычки-ёлочки и т.д.).
|
html-мнемоники (например, `—` для длинного тире, `«` для открывающей кавычки-ёлочки и т.д.).
|
||||||
|
|
||||||
tpgrf имеет три режима работы с кодировками:
|
tpgrf имеет три режима работы с кодировками:
|
||||||
- Режим `unicode` -- весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых
|
- Режим `unicode` — весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых
|
||||||
пробелов, мягких переносов и т.д. Это не всегда удобно зато типографированый текст (строки) будет максимально
|
пробелов, мягких переносов и т.д. Это не всегда удобно зато типографированый текст (строки) будет максимально
|
||||||
компактен и занимать меньше места в памяти. В этом режиме в html-мнемоники преобразуются только опасные символы:
|
компактен и занимать меньше места в памяти. В этом режиме в html-мнемоники преобразуются только опасные символы:
|
||||||
* `<` -- знак меньше `<`;
|
* `<` — знак меньше `<`;
|
||||||
* `>` -- знак больше `>`;
|
* `>` — знак больше `>`;
|
||||||
* `&` -- амперсанд `&`;
|
* `&` — амперсанд `&`;
|
||||||
* `"` -- двойные кавычки `"`;
|
* `"` — двойные кавычки `"`;
|
||||||
* `'` -- одинарные кавычки (апостроф) `'`.
|
* `'` — одинарные кавычки (апостроф) `'`.
|
||||||
- Режим `mixed` -- вывод осуществляется в кодировке UTF-8, но наиболее критичные символы заменяются на html-мнемоники.
|
- Режим `mixed` — вывод осуществляется в кодировке UTF-8, но наиболее критичные символы заменяются на html-мнемоники.
|
||||||
Они невидимы или неотличимы друг от друга на экране:
|
Они невидимы или неотличимы друг от друга на экране:
|
||||||
* `­` -- мягкий перенос (Soft Hyphen);
|
* `­` — мягкий перенос (Soft Hyphen);
|
||||||
* ` ` -- неразрывный пробел (Non-Breaking Space);
|
* ` ` — неразрывный пробел (Non-Breaking Space);
|
||||||
* ` ` -- полужирный пробел (En Space)
|
* ` ` — полужирный пробел (En Space)
|
||||||
* ` ` -- широкий пробел (Em Space)
|
* ` ` — широкий пробел (Em Space)
|
||||||
* ` ` -- цифровой пробел;
|
* ` ` — цифровой пробел;
|
||||||
* ` ` -- пунктуационный пробел;
|
* ` ` — пунктуационный пробел;
|
||||||
* ` ` -- межсимвольный пробел;
|
* ` ` — межсимвольный пробел;
|
||||||
* ` ` -- пробел "толщина волоса" (Hair Space);
|
* ` ` — пробел "толщина волоса" (Hair Space);
|
||||||
* `​` -- негативный пробел (Negative Space);
|
* `​` — негативный пробел (Negative Space);
|
||||||
* `‍` -- пробел нулевой ширины (без объединения) (Zero Width Non-Joiner);
|
* `‍` — пробел нулевой ширины (без объединения) (Zero Width Non-Joiner);
|
||||||
* `‌` -- нулевая ширина (с объединением) (Zero Width Joiner);
|
* `‌` — нулевая ширина (с объединением) (Zero Width Joiner);
|
||||||
* `‎` -- изменение направления текста на слева-направо (Left-to-Right Mark);
|
* `‎` — изменение направления текста на слева-направо (Left-to-Right Mark);
|
||||||
* `‏` -- изменение направления текста на направо-налево (Right-to-Left Mark);
|
* `‏` — изменение направления текста на направо-налево (Right-to-Left Mark);
|
||||||
* `‐` -- дефис (Hyphen);
|
* `‐` — дефис (Hyphen);
|
||||||
* ` ` -- средний пробел (Medium Mathematical Space);
|
* ` ` — средний пробел (Medium Mathematical Space);
|
||||||
* `⁠` -- неразрывный пробел (No-Break Space);
|
* `⁠` — неразрывный пробел (No-Break Space);
|
||||||
* `⁢` -- невидимый знак умножения (Invisible Times) для семантической разметки математических
|
* `⁢` — невидимый знак умножения (Invisible Times) для семантической разметки математических
|
||||||
выражений;
|
выражений;
|
||||||
* `⁣` -- невидимая запятая (Invisible Comma) для семантической разметки математических выражений.
|
* `⁣` — невидимая запятая (Invisible Comma) для семантической разметки математических выражений.
|
||||||
- Режим `mnemonic` -- применяются все возможные html-мнемоники (кроме русских букв) и символов первой половины ASCII
|
- Режим `mnemonic` — применяются все возможные html-мнемоники (кроме русских букв) и символов первой половины ASCII
|
||||||
(плюс, минус, знак равенства, знаки препинания и т.д.).
|
(плюс, минус, знак равенства, знаки препинания и т.д.).
|
||||||
|
|
||||||
Переключение режимов осуществляется с помощью параметра `mode` при конфигурировании типографа:
|
Переключение режимов осуществляется с помощью параметра `mode` при конфигурировании типографа:
|
||||||
@@ -55,10 +55,26 @@ typo_mixed_mode = etpgrf.Typographer(mode='mixed')
|
|||||||
result = typo_mixed_mode.process(text="Этот текст будет обработан в режиме mixed.")
|
result = typo_mixed_mode.process(text="Этот текст будет обработан в режиме mixed.")
|
||||||
```
|
```
|
||||||
|
|
||||||
**ВАЖНО!** _Некоторым символам соответствуют несколько html-мнемоник. Например, `→` (стрелочка влево) может кодироваться
|
### ВАЖНО:
|
||||||
как `→`, `→`, `&rightarrow`, `→` и `→`. Типограф будет использовать самое короткое
|
|
||||||
из них (для компактности), что может немного "испортить" код если мнемоники использовались, в том числе, и как
|
1. Если в тексте уже есть html-мнемоники, они будут преобразованы в unicode, и после обработки типографом
|
||||||
семантическая разметка._
|
будут заменены на html-мнемоники, соответствующие текущему режиму работы типографа.
|
||||||
|
2. Некоторым символам соответствуют несколько html-мнемоник. Например, `→` (стрелочка влево) может кодироваться
|
||||||
|
как `→`, `→`, `&rightarrow`, `→` и `→`. Типограф будет использовать самое
|
||||||
|
короткое из них (для компактности), а значит:
|
||||||
|
* если в исходном тексте были html-мнемоники, то они будут заменены на более короткие;
|
||||||
|
* если html-мнемоники использовались как элементы семантической разметки (например, для математических выражений),
|
||||||
|
то после замены на более короткие html-мнемоники, текст может потерять такую семантику. Например _F = A ⋂ B_:
|
||||||
|
`F = A ⋂ B` будет преобразовано в `F = A ⋂ B`;
|
||||||
|
3. Мнемоники для русских букв не используются в типографе. Все мнемоники русских букв будут преобразованы в русские
|
||||||
|
буквы и останутся в тексте в виде русских букв.
|
||||||
|
4. Все исходные html-мнемоники, которые превращаются в два unicode-символа будут превращены обратно в мнемоники каждый
|
||||||
|
как отдельный символ. Например, множество собственное другого подмножества `⊊︀` в unicode отображается
|
||||||
|
двумя символами `\u228a\ufe00` и превратится в `⊊\ufe00`. Символ `\ufe00` — это невидимый символ, cелектор
|
||||||
|
варианта начертания (Variant Selector), который изменяет начертание предыдущего символа и для него нет
|
||||||
|
html-мнемоники. К счастью, в стандарте таких мнемоник (превращающихся в два символа) исчезающе мало и они крайне
|
||||||
|
редко применяются в тексте, поэтому это не должно вызывать проблем.
|
||||||
|
|
||||||
|
|
||||||
### Переносы слов
|
### Переносы слов
|
||||||
|
|
||||||
@@ -98,3 +114,9 @@ result = typo_hyp.process(text="Электрофоретическое иссл
|
|||||||
|
|
||||||
### Кавычки
|
### Кавычки
|
||||||
|
|
||||||
|
|
||||||
|
Теперь хочу обсудить модуль работы с кавычками. Большинство изсестных мне типографов разибают праные кавчки и превращают их в спец-сиволы. Мне каежтся это неверно, ведь ковычки моут быть не парными и вложенность может быть произвольной. Мне кажется нужен другой подход. Обнаруживать только конструкции `"слово` или `слово"` и преобразовывать только их. Соответсвнно в елочки или лапки в зависимоати от языка. При этом если уже в тескте есть лапки, елочки или другие типы кавычек — ничего не менять (автор текстьа сам знает, какие кавычки лучшк). Кавычки окруженные пробелами или буквать с дрвух сторон превоащать в " ...
|
||||||
|
|
||||||
|
Как считаешь, это рабочий подход??
|
||||||
|
|
||||||
|
1.Надежность (Robustness): Вы правильно заметили, что символ " используется не только для кавычек. Это могут быть дюймы (17"), секунды (3' 25"), обозначения в коде (print("Hello")) и т.д. Ваш метод, который ищет кавычку рядом со словом ("слово или слово"), с гораздо меньшей вероятностью сломает такие конструкции.2.Уважение к авторскому замыслу: Правило "если уже есть ёлочки или лапки — ничего не менять" — это золотой стандарт. Типограф не должен "исправлять" то, что уже было отформатировано автором вручную. Это предотвращает двойное преобразование и сохраняет особые случаи, задуманные автором.3.Простота и производительность: Вместо сложного и медленного парсера, который отслеживает уровни вложенности (и часто ошибается), ваш подход можно реализовать с помощью нескольких быстрых регулярных выражений.4.Безопасность: Идея превращать оставшиеся "одинокие" кавычки в " — это отличный механизм защиты. Он гарантирует, что на выходе не останется "сырых" кавычек, которые могут сломать HTML-разметку.
|
||||||
|
Reference in New Issue
Block a user