Вход:  Пароль:  
FreeSource: ТЗ/XorgUnicode ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия ТЗ/XorgUnicode за 2007-01-10 23:27:37..

О Xorg и Unicode


Основные проблемы при работе с иксами:
1. Получение символов в нужной кодировке из буфера обмена.
2. Получение скан-кода (KeySym хотя бы) из кода символа.


К сожалению, тайна преобразования keysym в ucs (utf8) и обратно пока осталась нераскрытой.
Существует некий код под названием keysym2ucs для этих целей.
Стоит рассмотреть вопрос о наличии стандартной функции с такой возможностью.


Согласно описанию, XLookupKeysym работает только с Latin-1,
и нужно пользоваться Xmb Lookup String? или XwcLookupString для получения символов в wchar и Xutf8LoookupString для получения в utf8. Последние функции используют XIC (контекст ввода) и могут работать одновременно только с одним языком ввода (русский/греческий и пр.).


Резюме (по мотивам статьи Ивана Паскаля:
Среди Иксовых функций нет тех, которые предоставляют возможность преобразовать keysym в unicode и обратно, поэтому каждое приложение (которому нужна многоязычность)
должно делать это самостоятельно, с помощью функции
keysym2ucs.


Страница автора Markus Günther Kuhn: http://www.cl.cam.ac.uk/~mgk25/, каталог с разработками: http://www.cl.cam.ac.uk/~mgk25/ucs/


Проекты, использующие этот код:
* xterm
* at-spi (gtk) (здесь есть ошибка с реализацией keysym2cs – не всегда сработает бинарный поиск);
* Mozilla
* python-virtkey
* darwin/quartz
* Plan9
* DOMC
* GraphApp
* SDL


Вот попытки внести эту функцию в Иксы:
* http://mail.gnome.org/archives/gtk-i18n-list/2003-October/msg00047.html


И вот вроде как мы видим вариант реализации этого преобразования в Иксах, который вроде как
внесён туда Иваном Паскалем...
Его же видим в fltk.


Также в libqt есть функция keysymToUnicode, в файле src/gui/kernel/qkeymapper_x11.cpp (определяется кстати только если не определён QT_NO_XIM)


В итоге эта функция описана в файле src/xlibi18n/Ximint.h
unsigned int Key Sym To Ucs 4? (

Key Sym? keysym

);
и не имеет объявления во внешнем заголовочном файле.
Впрочем, объявив её самостоятельно, мы всё же сможем её использовать:
$ objdump -T /usr/lib/libX11.so.6.2.0 | grep Key Sym To Ucs 4?
00049b68 g DF .text 00000213 Base Key Sym To Ucs 4?


А всё использование ведёт в файл imLcIc.c,
где определены функции для XIC:
Private XICMethodsRec Local_ic_methods = {

_XimLocalDestroyIC, /* destroy */
_XimLocalSetFocus, /* set_focus */
_XimLocalUnSetFocus, /* unset_focus */
_XimLocalSetICValues, /* set_values */
_XimLocalGetICValues, /* get_values */
_XimLocalMbReset, /* mb_reset */
_XimLocalWcReset, /* wc_reset */
_XimLocalMbLookupString, /* mb_lookup_string */
_XimLocalWcLookupString, /* wc_lookup_string */

};
Теперь интересно возможно ли всё это хозяйство использовать, или всё действительно так плохо как объяснил Иван.


Основные функции:
* XLookupString
* Xutf8LookupString
* XLookupKeySym
* XStringToKeysym
* XKeycodeToKeysym
* XLookupString


Данная ссылка должна ответить на все вопросы о возможностях использования Utf 8:
http://www.koders.com/cpp/fid41BEE22CE4ADB913863C05F9FBC375DDB2B0F577.aspx

Ссылки


Ссылок на эту страницу нет


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]