Hi,All

I am porting Tiny-X to XScale platform, 
When I want to display chinese, I meet some problem.

The following is my porting procedure.

I compile locale data using localedef(arm), put the locale data to 
/usr/lib/locale/zh_CN
I put gconv.modules ,EUC-CN.so , libGB.so to /usr/lib/gconv
I edit locale.dir and locale.alias , add zh_CN.GB2312 support to these files
I put chinese font to /usr/X11R6/lib/X11/fonts/misc, and edit fonts.dir , fonts.alias
I export LC_ALL variable to zh_CN.GB2312 ,

Library I use is:
   glibc-2.2.3.so
   XFree86-4.20

 BUT it can not display chinese,

following is my test program 

setlocale(LC_ALL,"") is  OK
XSupportsLocale() is OK
XSetLocaleModifiers(NULL) is OK
num = mbstowcs(wcstr,string,strlen(string)) is OK
XCreateFontSet(...) is OK


   XmbDrawString(display,win,fontset,gc,50,100,string,strlen(string)); //display error 
text(english is right, chinese is wrong)
   XwcDrawString(display,win,fontset,gc,50,140,(wchar_t *)wcstr,num); //display error 
text(english is right, chinese is wrong)


I wonder if XServer is wrong. Does Xserver need to set some options about locale when 
It is compiled.
I wonder if xfs must run .
I am not sure whether It is locale problem or font problem.
Please help me to analyse this problem , What problem I could meet?


Thank you very much.


following is my test program

/* File: i18n-output.c */ 
#include <X11/Xlib.h> 
#include <X11/Xutil.h>
#include <X11/Xos.h> 
#include <X11/Xatom.h> 
#include <stdio.h> 
#include <locale.h> 

int main(int argc, char **argv) 
{ 

char *string = "这是中文和English的混和字符串!"; //chinese & english compound string
Display *display; 
int screen_num; 
Window win;
unsigned int width, height;
unsigned int border_width= 4;
unsigned int display_width, display_height;
int count; 
XEvent report; 
GC gc; 
unsigned long valuemask = 0; 
XGCValues values; 
char *display_name = NULL; 
//
XFontSet fontset; char **missing_charsets; 
int num_missing_charsets; 
char *default_string;
wchar_t wcstr[80]; 
//
int num; 
//
if((setlocale(LC_ALL, "")) == NULL)
{ 
  printf("cannot set  locale\n");
  return 1;
  exit(1); 
} 
//
if(!XSupportsLocale())
{
  printf("X does not support current locale\n"); 
  exit(1); 
} //设置locale修饰 
if(XSetLocaleModifiers(NULL))
{ 
 printf("Cannot set locale  modifiers\n"); 
 exit(1); 
} 

//
if ((display=XOpenDisplay(display_name)) == NULL ) 
{ 
 printf("Cannot connect to X server %s\n", XDisplayName(display_name)); 
 exit(-1); 
} 
//
screen_num = DefaultScreen(display); 
//
display_width = DisplayWidth(display, screen_num); 
display_height = DisplayHeight(display, screen_num); 
//
width = display_width/3; 
height = display_height/4; 
//
win = XCreateSimpleWindow(display, //display 
RootWindow(display,screen_num),//父窗口 
0, 0, width, height, //位置和大小 
border_width, //边界宽度
BlackPixel(display,screen_num), //前景色
WhitePixel(display,screen_num));//背景色 
//选择窗口感兴趣的事件掩码
XSelectInput(display, win, ExposureMask | KeyPressMask | ButtonPressMask | 
StructureNotifyMask); 
//建立GC 
gc = XCreateGC(display, win, valuemask,&values); 
//建立字体集 
fontset = XCreateFontSet(display,
//"8x16,-misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0"
"8x16,-isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0",
//"8x16,-*-song-medium-r-normal--16-*-*-*-*-*-gb2312.1980-0",
&missing_charsets, &num_missing_charsets, 
&default_string);
if(num_missing_charsets > 0)
{ 
 int i; 
 printf("Following charsets are missing:\n"); 
 for(i=0;  i<num_missing_charsets; i++)
 {
  printf("Missing %d: %s\n",i,missing_charsets[i]);
 }
 
 printf("\ndefault string:%s\n",default_string);
 
 //XFreeSringList(missing_charsets);
}

num = mbstowcs(wcstr,string,strlen(string));

XMapWindow(display,win);

while(1)
{
 XNextEvent(display,&report);
 switch (report.type)
 {
  case Expose:
   if(report.xexpose.count != 0) 
    break;
   XmbDrawString(display,win,fontset,gc,50,100,string,strlen(string));
   XwcDrawString(display,win,fontset,gc,50,140,(wchar_t *)wcstr,num);
   break;
  case ButtonPress:
  case KeyPress:
   XFreeFontSet(display,fontset);
   XFreeGC(display,gc);
   exit(1);
  default:
   break;
 }
}
}



licz



_______________________________________________
I18n mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/i18n

Reply via email to