From 32e4b852a15ed09560b52c86afac65d5582e6852 Mon Sep 17 00:00:00 2001 From: erjemin Date: Tue, 12 Aug 2025 15:35:22 +0300 Subject: [PATCH] =?UTF-8?q?add:=20++=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20=D0=B8=20=D0=BC=D0=BD=D0=B5=D0=BC=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 84 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 334bd32..01d1bff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Типограф для Web -Экранная типографика для веба -- способствует повышению читабельности текста в интернете, +Экранная типографика для веба — способствует повышению читабельности текста в интернете, приближая его к печатной типографике. ### Кодировки и html-мнемоники @@ -15,36 +15,36 @@ html-мнемоники (например, `—` для длинного тире, `«` для открывающей кавычки-ёлочки и т.д.). tpgrf имеет три режима работы с кодировками: -- Режим `unicode` -- весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых +- Режим `unicode` — весь вывод осуществляется в кодировке UTF-8. ВЕСЬ! Включая невидимые символы, типа неразрывных и нулевых пробелов, мягких переносов и т.д. Это не всегда удобно зато типографированый текст (строки) будет максимально компактен и занимать меньше места в памяти. В этом режиме в html-мнемоники преобразуются только опасные символы: - * `<` -- знак меньше `<`; - * `>` -- знак больше `>`; - * `&` -- амперсанд `&`; - * `"` -- двойные кавычки `"`; - * `'` -- одинарные кавычки (апостроф) `'`. -- Режим `mixed` -- вывод осуществляется в кодировке 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) для семантической разметки математических + * `­` — мягкий перенос (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 + * `⁣` — невидимая запятая (Invisible Comma) для семантической разметки математических выражений. +- Режим `mnemonic` — применяются все возможные html-мнемоники (кроме русских букв) и символов первой половины ASCII (плюс, минус, знак равенства, знаки препинания и т.д.). Переключение режимов осуществляется с помощью параметра `mode` при конфигурировании типографа: @@ -55,10 +55,26 @@ typo_mixed_mode = etpgrf.Typographer(mode='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-разметку.