From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 12 Mar 2001 20:31:06 +0300 From: Sergey Vlasov To: sisyphus@linuxteam.iplabs.ru Subject: Re: [devel] Re: [sisyphus] I gtk+-1.2.9 In-Reply-To: <20010311233705.A25690@avilink.net> References: <3AA141C7.976F227F@logic.ru> <20010311171049.39928f29.vsu@mivlgu.murom.ru> <20010311204318.52dc0fad.vsu@mivlgu.murom.ru> <20010311205349.G1408@avilink.net> <20010311222136.1e3ca241.vsu@mivlgu.murom.ru> <20010311212849.I1408@avilink.net> <20010311230854.126edbac.vsu@mivlgu.murom.ru> <20010311233705.A25690@avilink.net> X-Mailer: Sylpheed version 0.4.62cvs4 (GTK+ 1.2.8; i586-mandrake-linux) Mime-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit Message-Id: <20010312173107.B817E83530@mail.mivlgu.murom.ru> Sender: sisyphus-admin@linuxteam.iplabs.ru Errors-To: sisyphus-admin@linuxteam.iplabs.ru X-BeenThere: sisyphus@linuxteam.iplabs.ru X-Mailman-Version: 2.0 Precedence: bulk Reply-To: sisyphus@linuxteam.iplabs.ru List-Help: List-Post: List-Subscribe: , List-Id: List-Unsubscribe: , List-Archive: Archived-At: List-Archive: List-Post: On Sun, 11 Mar 2001 23:37:05 +0200 Alexander Bokovoy wrote: > В XFree86 используется 16-битные последовательности для символов, но при > этом происходит конверсия (xc/lib/X11/lcUTF8.c): > /* Part I: Conversion routines CompoundText/CharSet <--> Unicode/UTF-8. > * > * Note that this code works in any locale. We store Unicode values in > * `ucs4_t' variables, but don't pass them to the user. > * > * This code has to support all character sets that are used for CompoundText, > * nothing more, nothing less. See the table in lcCT.c. > * Since the conversion _to_ CompoundText is likely to need the tables for all > * character sets at once, we don't use dynamic loading (of tables or shared > * libraries through iconv()). Use a fixed set of tables instead. > * > * We use statically computed tables, not dynamically allocated arrays, > * because it's more memory efficient: Different processes using the same > * libX11 shared library share the "text" and read-only "data" sections. > */ > typedef unsigned int ucs4_t; Все, глюк пойман. xc/lib/X11/lcUTF8.c в 3.3.6 отсутствует, но не в этом дело. В xc/lib/X11/lcGenConv.c и lcGeneric.c в структуре XLCdGenericPart есть такое интересное поле - use_stdc_env. Если там стоит True - используются функции из libc (из семейства mbtowc), False - собственная кодировка. А поле устанавливается по содержимому /usr/X11R6/lib/X11/locale/koi8-r/XLC_LOCALE (или другого, в зависимости от LC_CTYPE). Так вот, в XFree 4.0.2 в этом файле стоит строка: use_stdc_env True А в 3.3.6 ее нет, поэтому используется wc_encoding_mask, wc_shift_bits и другие странные способы кодирования (честно говоря, я в них не разбирался, но достаточно того, что не юникод). Сейчас попробовал на 3.3.6 запустить testgtk из 1.2.9 - GtkEntry не работает, как я и писал, выводит вместо русских букв младший байт юникода. Добавил в /usr/X11R6/lib/X11/locale/koi8-r/XLC_LOCALE строчку "use_stdc_env True" - русские буквы появились. Вывод - для перехода на gtk-1.2.9 требуется одно из двух: 1) Отказаться от --with-native-locale (в этом случае gdk_mbstowcs будет использовать XmbTextListToTextProperty и XwcTextPropertyToTextList, и результат этого в любом случае будет пригоден для XwcDrawString). 2) Патчить XFree 3.3.6 на предмет внесения во все файлы XLC_LOCALE строки "use_stdc_env True" по образцу XFree 4. К каким глюкам это может привести - неизвестно. Понятно, что вариант "выбросить XFree 3.3.6 вообще" не пройдет - в XFree 4.0.2 есть не все драйверы. Я так понимаю, что у всех тестирующих уже стоит XFree 4.0.2, вот этого фокуса никто и не замечал. Или в Sisyphus 3.3.6 все-таки уже попатчен таким образом?