nanogui: FLNX BIG5/GB patch.
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