[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