[<<] [<] Page 1 of 1 [>] [>>] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
FLNX BIG5/GB patch.
From: "=?big5?B?c2Vfbno=?=" ####@####.#### Date: 27 Jun 2001 08:40:08 -0000 Message-Id: <20010627164311.10061.qmail@hk.sina.com.hk> Dear ALL, I have made the patch for the FLNX-0.16 to make it works better in BIG5/GB environment. Please test it! see whether there are any problems. Regards, Eric ================================================================== 新浪免費電子信箱 http://sinamail.sina.com.hk Common subdirectories: /root/hda/flnx-0.16/src/CVS and src/CVS Only in src: Fl.o Only in src: Fl_Adjuster.o Only in src: Fl_Animator.o Only in src: Fl_Bitmap.o Only in src: Fl_Box.o Only in src: Fl_Browser.o Only in src: Fl_Browser_.o Only in src: Fl_Browser_load.o Only in src: Fl_Button.o Only in src: Fl_Chart.o Only in src: Fl_Check_Button.o Only in src: Fl_Choice.o Only in src: Fl_Clock.o Only in src: Fl_Color_Chooser.o Only in src: Fl_Counter.o Only in src: Fl_Dial.o Only in src: Fl_Double_Window.o Only in src: Fl_Gl_Choice.o Only in src: Fl_Gl_Overlay.o Only in src: Fl_Gl_Window.o Only in src: Fl_Group.o Only in src: Fl_Image.o Only in src: Fl_Input.o diff -u /root/hda/flnx-0.16/src/Fl_Input_.cxx src/Fl_Input_.cxx --- /root/hda/flnx-0.16/src/Fl_Input_.cxx Sat Nov 18 08:05:44 2000 +++ src/Fl_Input_.cxx Wed Jun 27 16:33:44 2001 @@ -34,6 +34,7 @@ #include <math.h> #include <string.h> #include <stdlib.h> +#include <stdio.h> #include <ctype.h> #define MAXBUF 1024 @@ -407,6 +408,63 @@ if (m>size()) m = size(); if (p == position_ && m == mark_) return 0; //if (Fl::selection_owner() == this) Fl::selection_owner(0); +#if HAVE_BIG5_SUPPORT + unsigned char* value = (unsigned char*)value_; + if (p < size() && p != 0){ + for (int i=0;i<p;i++) + if ( *(value+i) >= 0xA1 && *(value+i) <= 0xF9 && + ((*(value+i+1)>= 0x40 && *(value+i+1) <=0x7E) || + (*(value+i+1)>= 0xA1 && *(value+i+1) <=0xFE)) ) { + i++; + if (i == p ){ + if (position_ < p ) + p++; + else + p--; + } + } + + } + if (m < size() && m != 0){ + for (int j=0;j<m;j++) + if ( *(value+j) >= 0xA1 && *(value+j) <= 0xF9 && + ((*(value+j+1)>= 0x40 && *(value+j+1) <=0x7E) || + (*(value+j+1)>= 0xA1 && *(value+j+1) <=0xFE)) ) { + j++; + if (j==m){ + if (mark_ < m ) + m++; + else + m--; + } + } + } + +#endif +#if HAVE_GB2312_SUPPORT + unsigned char* value = (unsigned char*)value_; + if (p < size() && p != 0){ + if ( *(value+p-1) >= 0xA1 && *(value+p-1) <= 0xF8 && + *(value+p)>= 0xA1 && *(value+p) <=0xFF) ) { + if (position_ < p ) + p++; + else + p--; + } + } + if (m < size() && m != 0){ + if ( *(value+m-1) >= 0xA1 && *(value+m-1) <= 0xF8 && + *(value+m)>= 0xA1 && *(value+m) <=0xFF) ) { + if (mark_ < m ) + m++; + else + m--; + } + } + +#endif + //fprintf(stderr,"POS: %d MARK: %d %s\n",p,m,value_); + if (p != m) { if (p != position_) minimal_update(position_, p); if (m != mark_) minimal_update(mark_, m); @@ -421,6 +479,8 @@ minimal_update(position_, mark_); } } + + position_ = p; mark_ = m; return 1; @@ -494,6 +554,53 @@ } put_in_buffer(size_+ilen); + //fprintf(stderr,"LENI: %d\n",ilen); + //for (int i=0;i<ilen;i++) +// fprintf(stderr,"key: %x\n",text[i]); + +#if HAVE_BIG5_SUPPORT + unsigned char* cbuf=(unsigned char*)buffer; + if (ilen==0){ + for (int i=0;i<b;i++) + if ( *(cbuf+i) >= 0xA1 && *(cbuf+i) <= 0xF9 && + ((*(cbuf+i+1)>= 0x40 && *(cbuf+i+1) <=0x7E) || + (*(cbuf+i+1)>= 0xA1 && *(cbuf+i+1) <=0xFE)) ) { + i++; + if (i==b){ + b--; + break; + } + } + for (int j=0;j<e;j++) + if ( *(cbuf+j) >= 0xA1 && *(cbuf+j) <= 0xF9 && + ((*(cbuf+j+1)>= 0x40 && *(cbuf+j+1) <=0x7E) || + (*(cbuf+j+1)>= 0xA1 && *(cbuf+j+1) <=0xFE)) ) { + j++; + if (j==e){ + e++; + break; + } + } + } +#endif + +#if HAVE_GB2312_SUPPORT + unsigned char* cbuf=(unsigned char*)buffer; + if (ilen==0){ + if (b != 0){ + if ( *(cbuf+b-1) >= 0xA1 && *(cbuf+b-1) <= 0xF8 && + *(cbuf+b)>= 0xA1 && *(cbuf+b) <=0xFF) ) { + b--; + } + } + if (e != 0){ + if ( *(cbuf+e-1) >= 0xA1 && *(cbuf+e-1) <= 0xF8 && + *(cbuf+e)>= 0xA1 && *(cbuf+e) <=0xFF) ) { + e++; + } + } + } +#endif if (e>b) { if (undowidget == this && b == undoat) { Only in src: Fl_Input_.cxx.bak Only in src: Fl_Light_Button.o Only in src: Fl_Menu.o Only in src: Fl_Menu_.o Only in src: Fl_Menu_Bar.o Only in src: Fl_Menu_Button.o Only in src: Fl_Menu_Window.o Only in src: Fl_Menu_add.o Only in src: Fl_Menu_global.o Only in src: Fl_Multi_Label.o Only in src: Fl_Output.o Only in src: Fl_Overlay_Window.o Only in src: Fl_Pack.o Only in src: Fl_Pixmap.o Only in src: Fl_Positioner.o Only in src: Fl_Repeat_Button.o Only in src: Fl_Return_Button.o Only in src: Fl_Roller.o Only in src: Fl_Round_Button.o Only in src: Fl_Scroll.o Only in src: Fl_Scrollbar.o Only in src: Fl_Single_Window.o Only in src: Fl_Slider.o Only in src: Fl_Tabs.o Only in src: Fl_Tile.o Only in src: Fl_Valuator.o Only in src: Fl_Value_Input.o Only in src: Fl_Value_Output.o Only in src: Fl_Value_Slider.o Only in src: Fl_Widget.o Only in src: Fl_Window.o Only in src: Fl_Window_fullscreen.o Only in src: Fl_Window_hotspot.o Only in src: Fl_Window_iconize.o Only in src: Fl_abort.o Only in src: Fl_add_idle.o Only in src: Fl_arg.o Only in src: Fl_cutpaste.o Only in src: Fl_display.o Only in src: Fl_get_key.o Only in src: Fl_get_system_colors.o Only in src: Fl_grab.o Only in src: Fl_own_colormap.o Only in src: Fl_visual.o diff -u /root/hda/flnx-0.16/src/Fl_x.cxx src/Fl_x.cxx --- /root/hda/flnx-0.16/src/Fl_x.cxx Fri Dec 8 01:20:44 2000 +++ src/Fl_x.cxx Fri Jun 22 15:11:21 2001 @@ -641,11 +641,30 @@ case GR_EVENT_TYPE_KEY_DOWN: { unsigned short keycode = xevent.keystroke.ch; - static char buffer[21]; + static unsigned char buffer[21]; int len = 0; + buffer[len++] = keycode; - buffer[len] = 0; + buffer[len] = (keycode>>8)&0xff; + + #if HAVE_BIG5_SUPPORT + /* chinese big5 decoding*/ + if (buffer[0] >= 0xA1 && buffer[0] <= 0xF9 && + ( (buffer[1]>= 0x40 && buffer[1] <= 0x7E) || + (buffer[1] >= 0xA1 && buffer[1] <= 0xFE) ) ) { + len++; + } + #endif + #if HAVE_GB2312_SUPPORT + /* chinese GB decoding*/ + buffer[len] = (keycode>>8)&0xff; + if (buffer[0] >= 0xA1 && buffer[0] <= 0xF8 && + (buffer[1] >= 0xA1 && buffer[1] <= 0xFF) ) { + len++; + } + #endif + /* Modifiers, passed from Nano-X */ Only in src: Fl_x.o Only in src: filename_absolute.o Only in src: filename_expand.o Only in src: filename_ext.o Only in src: filename_isdir.o Only in src: filename_list.o Only in src: filename_match.o Only in src: filename_setext.o Only in src: fl_arc.o Only in src: fl_arci.o Only in src: fl_ask.o Only in src: fl_boxtype.o Only in src: fl_call_main.o Only in src: fl_color.o Only in src: fl_cursor.o Only in src: fl_curve.o Only in src: fl_diamond_box.o Only in src: fl_draw.o Only in src: fl_draw_image.o Only in src: fl_draw_pixmap.o Only in src: fl_engraved_label.o Only in src: fl_file_chooser.o diff -u /root/hda/flnx-0.16/src/fl_font.cxx src/fl_font.cxx --- /root/hda/flnx-0.16/src/fl_font.cxx Sat Nov 18 08:05:45 2000 +++ src/fl_font.cxx Fri Jun 22 12:55:27 2001 @@ -595,12 +595,14 @@ #endif //tanghao } -double fl_width(const char* c, int n) { +double fl_width(const char* ch, int n) { #ifdef NANO_X double w=0; GR_FONT_INFO fi; width_cache_struct *wc = width_cache.check_cache(fl_xfont); unsigned char *fwidths; + unsigned char *c = (unsigned char*)ch; + if (!wc) { @@ -614,9 +616,27 @@ fwidths = wc->widths; } - for(int i=0;i<n;i++) + for (int i=0;i<n;i++) { - w+=(double)(fwidths[*(c+i)]); +#if HAVE_BIG5_SUPPORT + if ( *(c+i) >= 0xA1 && *(c+i) <= 0xF9 && + ((*(c+i+1)>= 0x40 && *(c+i+1) <= 0x7E) || + (*(c+i+1)>= 0xA1 && *(c+i+1) <= 0xFE)) ) { + w+=(double)12; + i++; + } + else +#endif +#if HAVE_GB2312_SUPPORT + if ( *(c+i) >= 0xA1 && *(c+i) <= 0xF8 && + (*(c+i+1)>= 0xA1 && *(c+i+1) <= 0xFF) ) { + w+=(double)12; + i++; + } + else +#endif + + w+=(double)(fwidths[*(c+i)]); } return w; Only in src: fl_font.o Only in src: fl_labeltype.o Only in src: fl_oval_box.o Only in src: fl_overlay.o Only in src: fl_overlay_visual.o Only in src: fl_rect.o Only in src: fl_round_box.o Only in src: fl_rounded_box.o Only in src: fl_scroll_area.o Only in src: fl_set_font.o Only in src: fl_set_fonts.o Only in src: fl_shadow_box.o Only in src: fl_shortcut.o Only in src: fl_show_colormap.o Only in src: fl_symbols.o Only in src: fl_vertex.o Only in src: forms_bitmap.o Only in src: forms_compatability.o Only in src: forms_free.o Only in src: forms_fselect.o Only in src: forms_pixmap.o Only in src: forms_timer.o Only in src: gl_draw.o Only in src: gl_start.o Only in src: glut_compatability.o Only in src: glut_font.o Only in src: makedepend Only in src: numericsort.o Only in src: scandir.o Only in src: vsnprintf.o | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[<<] [<] Page 1 of 1 [>] [>>] |