SOURCES (LINUX_2_6): linux-2.6-extended-utf8.patch (NEW) - this pa...

pluto pluto at pld-linux.org
Mon Sep 19 03:10:18 CEST 2005


Author: pluto                        Date: Mon Sep 19 01:10:18 2005 GMT
Module: SOURCES                       Tag: LINUX_2_6
---- Log message:
- this patch allows you to enter any Unicode value using
  the Alt-nnnn mechanism. previously, it was restricted to the BMP,
  i.e. the first 65536 Unicode characters.

---- Files affected:
SOURCES:
   linux-2.6-extended-utf8.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/linux-2.6-extended-utf8.patch
diff -u /dev/null SOURCES/linux-2.6-extended-utf8.patch:1.1.2.1
--- /dev/null	Mon Sep 19 03:10:18 2005
+++ SOURCES/linux-2.6-extended-utf8.patch	Mon Sep 19 03:10:13 2005
@@ -0,0 +1,51 @@
+This patch allows you to enter any Unicode value using
+the Alt-nnnn mechanism. Previously, it was restricted to the BMP,
+i.e. the first 65536 Unicode characters.
+
+--- a/drivers/char/keyboard.c	2005-09-19 02:26:04.000000000 +0200
++++ b/drivers/char/keyboard.c	2005-09-19 03:08:39.000000000 +0200
+@@ -330,10 +330,9 @@
+  * Many other routines do put_queue, but I think either
+  * they produce ASCII, or they produce some user-assigned
+  * string, and in both cases we might assume that it is
+- * in utf-8 already. UTF-8 is defined for words of up to 31 bits,
+- * but we need only 16 bits here
++ * in utf-8 already.
+  */
+-static void to_utf8(struct vc_data *vc, ushort c)
++static void to_utf8(struct vc_data *vc, uint c)
+ {
+ 	if (c < 0x80)
+ 		/*  0******* */
+@@ -342,11 +341,21 @@
+ 		/* 110***** 10****** */
+ 		put_queue(vc, 0xc0 | (c >> 6)); 
+ 		put_queue(vc, 0x80 | (c & 0x3f));
+-    	} else {
++    	} else if (c < 0x10000) {
++	       	if (c >= 0xD800 && c < 0xE000)
++			return;
++		if (c == 0xFFFF)
++			return;
+ 		/* 1110**** 10****** 10****** */
+ 		put_queue(vc, 0xe0 | (c >> 12));
+ 		put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
+ 		put_queue(vc, 0x80 | (c & 0x3f));
++    	} else if (c < 0x110000) {
++		/* 11110*** 10****** 10****** 10****** */
++		put_queue(vc, 0xf0 | (c >> 18));
++		put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
++		put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
++		put_queue(vc, 0x80 | (c & 0x3f));
+     	}
+ }
+ 
+@@ -775,7 +784,7 @@
+ 	/* kludge */
+ 	if (up_flag && shift_state != old_state && npadch != -1) {
+ 		if (kbd->kbdmode == VC_UNICODE)
+-			to_utf8(vc, npadch & 0xffff);
++			to_utf8(vc, npadch);
+ 		else
+ 			put_queue(vc, npadch & 0xff);
+ 		npadch = -1;
================================================================



More information about the pld-cvs-commit mailing list