[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fw: X11 keysym to Unicode mapping



> From: Ivan Pascal <pascal@info.tsu.ru>
> >  Вот это - очень мило. Вместо того, чтобы "добить" Xlib (а там utf8
> > с таблицами уже есть), будут добавлять "hardwired" поддержку в отдельные
> > приложения.
> 
> 
>  Я кстати заинтересовался этой таблицей и решил ее поискать.
  Я, кстати, говорил о той, что "зашита" в Xlib :-)

>  Поскольку Qt 2.0 от Troll Tech многоплатформенная (X11/Win32)
> вся внутренняя обработка текста у нее происходит в UNICODE.
> Под это дело у них сделан специальный класс QString -
> UNICODE-овая строка. Сверху все красиво. Поэтому было
> весьма интересно посмотреть, как оно там взаимодействует с X11.
  Точно. Внутри она все старается хранить в UNICODE.

>  Вот, выкачал ftp://ftp.troll.no/qt/snapshots/qt-2.00beta-DATE.tar.gz
> Смотрю, и постепенно прихожу в ужас. Таблицы я не нашел.
> Может я неправ, кто копал Qt 2.0, покажите место.
  Вытащу - покажу :).
(Тот "снапшот", что был у меня  я выкинул. Но, кажется, я там находил.)

>  Поэтому Qt совершенно через через зад пытается
> определить текущий Charset : разбором имени locale
> вручную, всякими загадочными эвристиками и т.д.

  Вот тут есть один интересный момент (я об этом писал Алексею Новодворскому).

  Дело в том, что Xlib "не хочет делиться" информацией о своей locale.
Она ведь, по setlocale находит нужный файл (через свои locale.dir,
locale.alias), "парсит" его и запоминает все, что там есть в своих
"структурках".
  Все функции ввода/вывода текста (символов) активно пользуются этими
данными. Но...
  Из приложения никакими стандартными вызовами "добыть" эти сведения нельзя
(и сами структурки и функции, работающие с ними - "приватные").
  Есть несколько "ублюдочных" вызовов типа - "дай locale input метода",
"дай locale output метода" и т.п. Но они возвращают просто то же значение,
что Xlib вначале получила от setlocale.
  А вот в какой файл XLC_LOCALE она его превратила и, тем более - какие
там значения установлены - узнать нельзя !
(Теоретически, я могу не только locale.alias подправить, а вообще свой
XLC_LOCALE сочинить с нужными параметрами. Xlib то будет работать в
соответствии с ним, а вот приложения...)

  Вот и приходится "тулкитам" (если они хотят узнать что-то типа
encoding_name) или проходить весь путь самостоятельно (читать locale.dir,
locale.alias, сопоставлять, находить файл, "парсить" его)
или "городить" что-то свое. Что и сделано в Qt.

  Самое интересное в том, что куча функций, дающих нужную информацию,
в Xlib есть. Пример тому - моя testXlc (но, как не трудно заметить,
она использует пару "приватных" "хидеров" из Xlib).
  Надо только сделать их "публичными" (или добавить "враперы" к ним).

  А вот кто это может решить?
 
>  И это практически при том, что есть готовое 16-bit
> значение XKB, которое преобразуется в UNICODE
> как 1:1 .
  Угу. И процедура преобразования в Xlib есть. Но, опять же - приватная.
А вот как заставить "публичные" (типа X[mb|wc|]LookupString) вызвать
именно ее (и потом еще не "испаганить" ее выдачу) - я так и не понял.

P.S. Александр. Я тебе отправлял письмо с просьбой о помощи.
Ты его читал? Или как?
(Я спрашивал - может ли команда locale и процедурка setlocale показывать
разные значения? И если да, то - почему?)
-- 
 Ivan U. Pascal         |   e-mail: pascal@tsu.ru
   Administrator of     |   Tomsk State University
     University Network |       Tomsk, Russia