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

Re: KSI Linux



Ivan Pascal wrote:

>   Во-первых, я хотел попросить хозяина не гнать нас отсюда.
> Эта тема, хотя и косвенно, имеет отношение, если не к locale,
> то к "локализации" в широком смысле.

Спасибо Хозяину за гостеприимство.  Лично мне здесь очень хорошо :-)

>
>
> > >   А все ли toolkit'ы используют Xlib? Или кто-то сам переводит Cyrillic
> > > в подходящие коды?
> >
> > Именно так, я об этом писал в этот лист. Qt 2.0 делает это сам, так как хочет
>
>   Извините мою дремучесть. А что такое - Qt 2.0?
> Насколько я понял, последняя "фри" Qt - 1.42 (ну, может быть - 1.44).

Qt 2.0 - та, что будет Open Source - доступна через CVS. Она имеет статус беты.
Можно получить доступ к CVS, написав письмо, а можно зайти на ftp.troll.no и
выкачать достаточно свежий snapshot.
Интересна именно  Qt 2.0, так как ее можно будет модифицировать и, в частности,
добавить кодировки. Qt < 2.0 я не изучал, так что сказать ничего не могу.

>
>
>   И вот разглядывая 1.42, я обнаружил, что...
>
> > работать аж с X11R4. Он определяет charset по _имени_ переменной LANG. Если
> > кодировка в ней указана, то смотрит на LC_CTYPE. Если не указана и там, то
> > смотрит в свои таблицы, содранные с locale.alias. То есть locale.alias зашит в
> > коды Qt.
>
>   Она пытается "вытащить" charset из LANG, если он имеет вид
> lang.charset
>   Если в LANG нет точки, то, действительно, по своим таблицам ищет подходящий
> lang и подставляет свой encoding (для всяких ru, ru_RU, russian - это
> iso8859-5).
> (О LC_CTYPE я там упоминания не нашел.)

Недавно появилась в CVS .

>
>
>   НО! Все это делается для выбора "фонтов".
> На перекодировку вводимых символов из Cyrillic это влиять не должно.

См. Qt2.0, src/tools/qtextcodec.c и далее по ссылкам

>
>
>   Ввод она "пропускает" через Xlib.
> (Так что мой вопрос пока остается открытым - Есть ли такие toolkit'ы,
> которые не используют Xlib на вводе?)
>
>   Что касается "ввода через Xlib"...
>   Для перевода keysym в ascii есть две функции (две ли?)
> XLookupString и
> XmbLookupString (mb - это multi byte)
>
>   Так вот. Первая более "традиционная". Вторая использует "input context".
>   Причем, обе используют разные таблицы (таблицы, конечно, идентичные,
> но физически - это два разных массива) и разные методы определения charset.
>
>   Если приложение пользуется XLookupString (а таких все меньше),

именно

> то
> charset берется либо из "переменной среды" _XKB_CHARSET (я проверял,
> действительно - работает), либо из locale - encoding_name.
>   Чтобы работал второй способ (когда _XKB_CHARSET не определена),
> должна отработать "иксовая" setlocale (именно "иксовая", она описана
> в Xlocale.h).

Да!

>
>
>   А вот если приложение использует XmbLookupString (а именно ее норовят
> вставлять сейчас в приложения), то название charset'а ищется как-то
> по-другому. Похоже, что из той же loacle:encoding_name, но я не уверен.
>   Кроме того, для правильной работы XmbLookup* обычно вызывают не setlocale,
> а XSetLocaleModifiers. Чем это отличается от setlocale - я сейчас и пытаюсь
> понять.
>
>   Кстати, если вернуться к Qt (1.42), то она при инициализации приложения
> вызывает и setlocale, и XSetLocaleModifiers.
>   А для обработки ввода использует XLookup*, если "иксы" старее, чем 5,
> или если почему-либо "input context" не определен.
>   Если этот context определен (что и должно быть в нормальной ситуации),
> то используется XmbLookup*.

Все правильно, но я то собственно о добавлении новых кодировок. Вот добавил 1251.
Почти все работает (все, кроме xterm, разбираться с ним пока недосуг). А стоило ли
это делать? Меня сподвигла на это не только история с надругательством :-) над
KOI8-R, но и постоянный плач восточноевропейцев из mailing-list SuSE (закрытого, к
сожалению) о необходимости 1250. Мнения?

>
>
> --

Rgrds, AEN.