nanogui: Thread: FLNX BIG5/GB patch.


[<<] [<] 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 [>] [>>]


Powered by ezmlm-browse 0.20.