diff src/event-xlike-inc.c @ 5118:e0db3c197671 ben-lisp-object

merge up to latest default branch, doesn't compile yet
author Ben Wing <ben@xemacs.org>
date Sat, 26 Dec 2009 21:18:49 -0600
parents 63c25d1cbecf
children b3ce27ca7647
line wrap: on
line diff
--- a/src/event-xlike-inc.c	Sat Dec 26 00:20:27 2009 -0600
+++ b/src/event-xlike-inc.c	Sat Dec 26 21:18:49 2009 -0600
@@ -27,8 +27,6 @@
    included here, not in event-xlike.c.  However, event-xlike.c is always
    X-specific, whereas the following code isn't, in the GTK case. */
 
-EXFUN (Funicode_to_char, 2);  /* In unicode.c.  */
-
 static int
 #ifdef THIS_IS_GTK
 emacs_gtk_event_pending_p (int how_many)
@@ -354,9 +352,9 @@
     0x0,	/* #x0AB9 */
     0x0,	/* #x0ABA */
     0x2012,	/* #x0ABB FIGURE DASH	Publish */
-    0x0,	/* #x0ABC LEFT ANGLE BRACKET	Publish */
-    0x0,	/* #x0ABD DECIMAL POINT	Publish */
-    0x0,	/* #x0ABE RIGHT ANGLE BRACKET	Publish */
+    0x3008,	/* #x0ABC LEFT ANGLE BRACKET	Publish */
+    0x002E,	/* #x0ABD DECIMAL POINT	Publish */
+    0x3009,	/* #x0ABE RIGHT ANGLE BRACKET	Publish */
     0x0,	/* #x0ABF MARKER	Publish */
     0x0,	/* #x0AC0 */
     0x0,	/* #x0AC1 */
@@ -461,6 +459,106 @@
     0x22A3,	/* #x0BFC RIGHT TACK	APL */
   };
 
+static UINT_16_BIT const CYRILLIC[] =
+  {
+    0x0452,	/* #x06A1 CYRILLIC SMALL LETTER DJE  */
+#define FIRST_KNOWN_CYRILLIC 0x6A1
+    0x0453,	/* #x06A2 CYRILLIC SMALL LETTER GJE  */
+    0x0451,	/* #x06A3 CYRILLIC SMALL LETTER IO */
+    0x0454,	/* #x06A4 CYRILLIC SMALL LETTER UKRAINIAN IE */
+    0x0455,	/* #x06A5 CYRILLIC SMALL LETTER DZE */
+    0x0456,	/* #x06A6 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
+    0x0457,	/* #x06A7 CYRILLIC SMALL LETTER YI */
+    0x0458,	/* #x06A8 CYRILLIC SMALL LETTER JE */
+    0x0459,	/* #x06A9 CYRILLIC SMALL LETTER LJE */
+    0x045A,	/* #x06AA CYRILLIC SMALL LETTER NJE */
+    0x045B,	/* #x06AB CYRILLIC SMALL LETTER TSHE */
+    0x045C,	/* #x06AC CYRILLIC SMALL LETTER KJE */
+    0x0491,	/* #x06AD CYRILLIC SMALL LETTER GHE WITH UPTURN */
+    0x045E,	/* #x06AE CYRILLIC SMALL LETTER SHORT U */
+    0x045F,	/* #x06AF CYRILLIC SMALL LETTER DZHE */
+    0x2116,	/* #x06B0 NUMERO SIGN */
+    0x0402,	/* #x06B1 CYRILLIC CAPITAL LETTER DJE */
+    0x0403,	/* #x06B2 CYRILLIC CAPITAL LETTER GJE */
+    0x0401,	/* #x06B3 CYRILLIC CAPITAL LETTER IO */
+    0x0404,	/* #x06B4 CYRILLIC CAPITAL LETTER UKRAINIAN IE */
+    0x0405,	/* #x06B5 CYRILLIC CAPITAL LETTER DZE */
+    0x0406,	/* #x06B6 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
+    0x0407,	/* #x06B7 CYRILLIC CAPITAL LETTER YI */
+    0x0408,	/* #x06B8 CYRILLIC CAPITAL LETTER JE */
+    0x0409,	/* #x06B9 CYRILLIC CAPITAL LETTER LJE */
+    0x040A,	/* #x06BA CYRILLIC CAPITAL LETTER NJE */
+    0x040B,	/* #x06BB CYRILLIC CAPITAL LETTER TSHE */
+    0x040C,	/* #x06BC CYRILLIC CAPITAL LETTER KJE */
+    0x0490,	/* #x06BD CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
+    0x040E,	/* #x06BE CYRILLIC CAPITAL LETTER SHORT U */
+    0x040F,	/* #x06BF CYRILLIC CAPITAL LETTER DZHE */
+    0x044E,	/* #x06C0 CYRILLIC SMALL LETTER YU */
+    0x0430,	/* #x06C1 CYRILLIC SMALL LETTER A */
+    0x0431,	/* #x06C2 CYRILLIC SMALL LETTER BE */
+    0x0446,	/* #x06C3 CYRILLIC SMALL LETTER TSE */
+    0x0434,	/* #x06C4 CYRILLIC SMALL LETTER DE */
+    0x0435,	/* #x06C5 CYRILLIC SMALL LETTER IE */
+    0x0444,	/* #x06C6 CYRILLIC SMALL LETTER EF */
+    0x0433,	/* #x06C7 CYRILLIC SMALL LETTER GHE */
+    0x0445,	/* #x06C8 CYRILLIC SMALL LETTER HA */
+    0x0438,	/* #x06C9 CYRILLIC SMALL LETTER I */
+    0x0439,	/* #x06CA CYRILLIC SMALL LETTER SHORT I */
+    0x043A,	/* #x06CB CYRILLIC SMALL LETTER KA */
+    0x043B,	/* #x06CC CYRILLIC SMALL LETTER EL */
+    0x043C,	/* #x06CD CYRILLIC SMALL LETTER EM */
+    0x043D,	/* #x06CE CYRILLIC SMALL LETTER EN */
+    0x043E,	/* #x06CF CYRILLIC SMALL LETTER O */
+    0x043F,	/* #x06D0 CYRILLIC SMALL LETTER PE */
+    0x044F,	/* #x06D1 CYRILLIC SMALL LETTER YA */
+    0x0440,	/* #x06D2 CYRILLIC SMALL LETTER ER */
+    0x0441,	/* #x06D3 CYRILLIC SMALL LETTER ES */
+    0x0442,	/* #x06D4 CYRILLIC SMALL LETTER TE */
+    0x0443,	/* #x06D5 CYRILLIC SMALL LETTER U */
+    0x0436,	/* #x06D6 CYRILLIC SMALL LETTER ZHE */
+    0x0432,	/* #x06D7 CYRILLIC SMALL LETTER VE */
+    0x044C,	/* #x06D8 CYRILLIC SMALL LETTER SOFT SIGN */
+    0x044B,	/* #x06D9 CYRILLIC SMALL LETTER YERU */
+    0x0437,	/* #x06DA CYRILLIC SMALL LETTER ZE */
+    0x0448,	/* #x06DB CYRILLIC SMALL LETTER SHA */
+    0x044D,	/* #x06DC CYRILLIC SMALL LETTER E */
+    0x0449,	/* #x06DD CYRILLIC SMALL LETTER SHCHA */
+    0x0447,	/* #x06DE CYRILLIC SMALL LETTER CHE */
+    0x044A,	/* #x06DF CYRILLIC SMALL LETTER HARD SIGN */
+    0x042E,	/* #x06E0 CYRILLIC CAPITAL LETTER YU */
+    0x0410,	/* #x06E1 CYRILLIC CAPITAL LETTER A */
+    0x0411,	/* #x06E2 CYRILLIC CAPITAL LETTER BE */
+    0x0426,	/* #x06E3 CYRILLIC CAPITAL LETTER TSE */
+    0x0414,	/* #x06E4 CYRILLIC CAPITAL LETTER DE */
+    0x0415,	/* #x06E5 CYRILLIC CAPITAL LETTER IE */
+    0x0424,	/* #x06E6 CYRILLIC CAPITAL LETTER EF */
+    0x0413,	/* #x06E7 CYRILLIC CAPITAL LETTER GHE */
+    0x0425,	/* #x06E8 CYRILLIC CAPITAL LETTER HA */
+    0x0418,	/* #x06E9 CYRILLIC CAPITAL LETTER I */
+    0x0419,	/* #x06EA CYRILLIC CAPITAL LETTER SHORT I */
+    0x041A,	/* #x06EB CYRILLIC CAPITAL LETTER KA */
+    0x041B,	/* #x06EC CYRILLIC CAPITAL LETTER EL */
+    0x041C,	/* #x06ED CYRILLIC CAPITAL LETTER EM */
+    0x041D,	/* #x06EE CYRILLIC CAPITAL LETTER EN */
+    0x041E,	/* #x06EF CYRILLIC CAPITAL LETTER O */
+    0x041F,	/* #x06F0 CYRILLIC CAPITAL LETTER PE */
+    0x042F,	/* #x06F1 CYRILLIC CAPITAL LETTER YA */
+    0x0420,	/* #x06F2 CYRILLIC CAPITAL LETTER ER */
+    0x0421,	/* #x06F3 CYRILLIC CAPITAL LETTER ES */
+    0x0422,	/* #x06F4 CYRILLIC CAPITAL LETTER TE */
+    0x0423,	/* #x06F5 CYRILLIC CAPITAL LETTER U */
+    0x0416,	/* #x06F6 CYRILLIC CAPITAL LETTER ZHE */
+    0x0412,	/* #x06F7 CYRILLIC CAPITAL LETTER VE */
+    0x042C,	/* #x06F8 CYRILLIC CAPITAL LETTER SOFT SIGN */
+    0x042B,	/* #x06F9 CYRILLIC CAPITAL LETTER YERU */
+    0x0417,	/* #x06FA CYRILLIC CAPITAL LETTER ZE */
+    0x0428,	/* #x06FB CYRILLIC CAPITAL LETTER SHA */
+    0x042D,	/* #x06FC CYRILLIC CAPITAL LETTER E */
+    0x0429,	/* #x06FD CYRILLIC CAPITAL LETTER SHCHA */
+    0x0427,	/* #x06FE CYRILLIC CAPITAL LETTER CHE */
+    0x042A,	/* #x06FF CYRILLIC CAPITAL LETTER HARD SIGN */
+  };
+
 /* For every key on the keyboard that has a known character correspondence,
    we define the character-of-keysym property of its XEmacs keysym, and make
    the default binding for the key be self-insert-command.
@@ -503,9 +601,9 @@
      and only those should correspond directly to Unicode code points, in
      the range #x100-#x10FFFF; actual implementations can have the Latin 1
      code points do the same thing with keysyms
-     #x010000A0-#x01000100. */
+     #x01000000-#x01000100. */
 
-  if (keysym >= 0x010000A0 && keysym <= 0x0110FFFF)
+  if (keysym >= 0x01000000 && keysym <= 0x0110FFFF)
     return Funicode_to_char (make_int(keysym & 0xffffff), Qnil);
 
   if ((keysym & 0xff) < 0xa0)
@@ -544,21 +642,7 @@
       break;
     case 6: /* Cyrillic */
       {
-	static UExtbyte const cyrillic[] = /* 0x20 - 0x7f */
-	{0x00, 0x72, 0x73, 0x71, 0x74, 0x75, 0x76, 0x77,
-	 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x00, 0x7e, 0x7f,
-	 0x70, 0x22, 0x23, 0x21, 0x24, 0x25, 0x26, 0x27,
-	 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x00, 0x2e, 0x2f,
-	 0x6e, 0x50, 0x51, 0x66, 0x54, 0x55, 0x64, 0x53,
-	 0x65, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
-	 0x5f, 0x6f, 0x60, 0x61, 0x62, 0x63, 0x56, 0x52,
-	 0x6c, 0x6b, 0x57, 0x68, 0x6d, 0x69, 0x67, 0x6a,
-	 0x4e, 0x30, 0x31, 0x46, 0x34, 0x35, 0x44, 0x33,
-	 0x45, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e,
-	 0x3f, 0x4f, 0x40, 0x41, 0x42, 0x43, 0x36, 0x32,
-	 0x4c, 0x4b, 0x37, 0x48, 0x4d, 0x49, 0x47, 0x4a};
-	USE_CHARSET (charset, CYRILLIC_ISO8859_5);
-	code = cyrillic[(keysym & 0x7f) - 0x20];
+	USE_UNICODE_MAP(keysym, CYRILLIC);
 	break;
       }
     case 7: /* Greek */
@@ -624,7 +708,15 @@
     return Qnil;
 
 #ifdef MULE
-  return make_char (make_ichar (charset, code, 0));
+  {
+    Lisp_Object unified = Funicode_to_char
+      (Fchar_to_unicode (make_char (make_ichar (charset, code, 0))), Qnil);
+    if (!NILP (unified))
+      {
+        return unified;
+      }
+    return make_char (make_ichar (charset, code, 0));
+  }
 #else
   return make_char (code + 0x80);
 #endif