I ? Unicode ?)

«Запрещенные» символы Юникода

Заскринил я, но тег [моё] не ставлю, т.к. не автор. Источник: Хабр

Энциклопедия символов «Юникодия» v1.1: я это сделал!

Напоминаю: я пишу программу под Windows — энциклопедию символов и замену стандартной Таблице символов. Качать тут.


Я дошёл уже до версии 1.1, и вот что вышло. Пишу крупные изменения и 1.0, и 1.1.

Поддержка ВСЕГО Юникода 14


Вы правильно прочитали, не осталось ни одного тофу. Под Windows 10/11, разумеется — пользователям 7-ки больших обещаний не делаю. На картинке сверху — моя интерпретация кипро-минойской письменности, добавленной этой осенью. Да, сам рисовал шрифт, и вот откуда эта интерпретация взялась.


1. Реальный памятник, найденный где-то на Турецком Кипре.

2. Его факсимиле.

3. Прорисовка Майкла Эверсона (2020).

Египетские и анатолийские иероглифы


Вообще-то в коллекции Noto для них есть отличные шрифты. Анатолийские выше всяких похвал, а у египетских один недостаток: как отрендерить в маленькую клеточку Юникодии? Ларчик просто открывался: OTF, который я кое за какие технические подробности недолюбливал. Но тут сильно другой рендерер конкретно для этого шрифта сработал на все 146%.

Впоследствии выяснилась запара: символы счётных палочек иногда «проваливаются между пикселей». Нарисованы девять палочек, а видны только три! Их я просто скопировал в свой резервный TTF и прохинтовал, но тут случилось забавное: под Windows 7 я никак не мог прописать в заголовках резервного шрифта, что иероглифы поддерживаются. Я на подобный глючок натыкался и раньше, и под Windows 10 тоже — решилось просто, в Qt есть стандартный обход QRawFont.


А анатолийские — просто за компашку получили OTF-шрифт. Попробовал также заменить OTF’ом пахау хмонг, чей рендеринг мне тоже не нравился — не получилось.


Китайский, корейский, японский

ККЯ-символов всего 115 тысяч, или 79% всего Юникода. Из них 94 тысячи иероглифов, остальное — корейский, тангутский, спецсимволы, японский, киданьский, нюй-шу, примерно в таком порядке. И где достать шрифты, которые поддержат такую громадину?


Оказалось, есть сайт GlyphWiki, оперативно реагирующий на изменения в Юникоде, но тамошние SVG — а значит, все шрифты, сделанные из них — технически страшны. И есть типограф Эндрю Уэст, который потихоньку клепает шрифт Babelstone Han. Собственно, задача — собрать из того и другого подходящую коллекцию. Шрифт с GlyphWiki я заменил другим, и целую ночь торчал в FontForge, исправляя хоть самые страшные глюки. Заодно ушло 10 мегабайт архива. Но это значит, что для пользователей Windows 7 ушли несколько древних письменностей, в частности готский — были за компашку в одном шрифте и исчезли в другом. Простите уж, я и не обещал пользователям 7-ки полную поддержку всего.


Декапитализация


К сожалению, в стандартах Юникода символы называются большими буквами: CANADIAN SYLLABICS WOODS-CREE FINAL TH. Но у меня с самого начала всё няшно и цивильно, и за это отвечает декапитализация — система из 700 правил и 250 исключений. Это немало, но строк-то в Юникоде 45 тысяч — даже такая недоавтоматика лучше ручной работы.

«Canadian» — название письменности, сделать с большой буквы и включить следующий механизм.

«syllabics» — ключевое слово. Оставить с маленькой, но после сделать большую букву.

«Woods-Cree» и «final» — прилагательные. Если есть большая буква, она проталкивается по прилагательным дальше до Th. Так что получилось бы «Woods-cree final Th», но лесные кри — индейское племя и в английском с больших букв.


Уже четыре правила.


Не буду всё перечислять, но новых правил декапитализации я добавил очень много. Самое чувствительное — отыскал и отметил альтернативные написания имени Аллах. А также вручную перебрал все названия с «ligature» — никакая автоматика не расставит правильно большие буквы в каком-нибудь «Hebrew ligature Yiddish Yod Yod Patah».


Поиск


Уже следующей осенью моя программа устареет — появится Юникод 15, в котором будут веер, афро-гребень и WiFi. К тому же некоторые программы (и моя Юникодия тоже!) вовсю пользуются личными символами. Так что поиск по несуществующим символам стал более подробным. Вот, например, что увидим, когда поищем «590».

При том, что ближайший символ к 590 — это U+0591, какой-то еврейский умляут, я не стал его выводить, а коряво воспроизвёл иконку.


Видим ещё одну фишку — поиск не только по шестнадцатеричному коду, но и по десятичному. Нашло не только U+0590, но и 590₁₀=24E. Поиск по названиям существовал и ранее, причём достаточно адекватный.


Собственные изображения спецсимволов


Некоторым символам — форматирующим или с особой функциональностью — в общем, забранным в пунктир — приходится делать своё изображение. Эти изображения хранятся в моём резервном шрифте в пользовательских позициях (E001 и далее), налажен механизм отрисовки. Вот несколько штук.

Описания


Постарался проверить всё. Например, индийские письменности слоговые — как в каждой из них работает запись сложных слогов? Условный «стол» даже в родственных письменностях может писаться совершенно по-разному.


• са то ла  (то, что я обозначил чертой, называется «вирама» или «халанта» и стирает букву «а» из слога) — исходная письменность брахми, а также некоторые малоразвитые письменности Юго-Восточной Азии

• сᵊ то лᵊ — гласная по умолчанию «а» стала немой или почти немой — пенджабский с письменностью гурмукхи

• сᵀо ла — во втором слоге знакомая нам вирама, а в первом «с» и «т» склеились в лигатуру — так работает хинди с письменностью деванагари

• с то л — лаосский в XX веке отказался от гласной по умолчанию


А правда ли, что юникодными знаками европейских нот можно записать «Кузнечика»? Оказалось, нет. Даже несмотря на то, что играется на одной гитарной струне.

В левосторонних письменностях кхароштхи и ханифи перед текстами-образцами для правильного рендеринга добавил знак RLM.

Теперь слог «дхик» закодирован именно так, как в описании, только перед ним RLM = right-to-left mark. Копируй, вставляй, разбирай на символы — всё честно, как и подобает энциклопедии Юникода. (Раньше было ка+вирама+дха+и — и неловкое объяснение: простите, по-другому не рендерит.)


Недоработал: когда писалась статья, уже нашёл пару незначительных ошибок в описаниях. Ничего критичного, исправлю в следующей версии. (А ещё в версии 1.1 допустил неудачный рендеринг десятка латинских умляутов — это уже критично, быстренько перевыпустил.)


Так что спасибо за внимание!

Fastler - информационно-развлекательное сообщество которое объединяет людей с различными интересами. Пользователи выкладывают свои посты и лучшие из них попадают в горячее.

Контакты

© Fastler v 2.0.2, 2024


Мы в социальных сетях: