[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fw: X11 keysym to Unicode mapping
> Hi!
>
> В продолжение дискусии.
>
> To: Ivan Pascal. См. комментарии. Это как-нибудь с XLOCALE
> будет пересекаться ?
А какие комментарии?
Кстати, Александр, ты UCS одну страничку посвятить не хочешь?
А что касается unicode в Xlib ...
Как я уже говорил, в Xlib (по крайней мере в 3.3.3.1) таблицы
и процедуры перкодировки есть, но..
Есть там такая внутрення процедурка - _GetCharCode.
Аргументы у которой - keysymbol (тот, что выдает клавиатурный модуль)
и некий внутренний идентификатор, определяющий - в какую кодировку
надо преобразовать keysymbol.
Это очень "умная" процедурка. Она может преобразовать символ во что угодно -
koi8, iso8859-5, greek, arabic и т.п.
Она же преобразует symbol в UTF8, если "идентификато кодировки" -
sUTF8 = 0x02000000L
Но на этом все и заканчивается. Снаружи эта функция недоступна
("приватная"). А "публичные" X[mb|wc|]LookupString, которые ей пользуются
(и только они) в таком качестве ее не "юзают".
XLookupString вообще ни при каких условиях не вызывает ее с sUTF8.
А XmbLookup* может вызвать ее с таким идентификатором, если в описании
locale (XLC_LOCALE) encoding_name будет "utf8" (а такого XLC_LOCALE нету).
Но даже в этом случае она из "выдачи" GetCharCode берет только
первый байт (автор - балбес. Хотя GetCharCode честно сообщает - во сколько
байт она преобразовала keysymbol, вызывающая XmbLookup даже не смотрит
на эту цифру, а считает, что может быть только один байт).
Ну, а потом этот байт - "кусок от unicod'а" прогоняется через несколько
"конвертеров", которые от него вообще ничего не оставляют.
Так что прикладная программа ничего не получит.
Кстати, этот UTF в разных частях Xlib именуется по-разному.
Упомянутая XmbLookup ожидет, что в encoding_name будет написано "utf8".
В "локалях" есть одна (en_US.utf) которая содержит encoding_name - "UTF"
(естественно, Xlib такую просто не знает). И есть еще "набор конвертеров",
который должен подключаться, если codeset - "utf". Но этот "набор" вообще
"закомментарен" в исходниках.
P.S. Ну, а возвращаясь к исходному письму, опять скажу -
Надо доделывать Xlib. А не "пихать" перекодировку в каждое приложение.
P.P.S. А может быть уже доделали? :) Просто у меня "исходники" старые.
--
Ivan U. Pascal | e-mail: pascal@tsu.ru
Administrator of | Tomsk State University
University Network | Tomsk, Russia