From: Jean-Philippe Bruyère Date: Wed, 21 Nov 2018 17:48:52 +0000 (+0100) Subject: xcb backend X-Git-Tag: v0.8.7~29^2~11 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=ee6ac9a46a225c7466cf675438f1f547229219ed;p=jp%2Fcrow.git xcb backend --- diff --git a/Crow.csproj b/Crow.csproj index 76650bd1..25ca07a2 100644 --- a/Crow.csproj +++ b/Crow.csproj @@ -227,12 +227,12 @@ - - - - - + + + + + @@ -262,8 +262,8 @@ - + diff --git a/CrowIDE/src/DesignInterface.cs b/CrowIDE/src/DesignInterface.cs index ff4944e8..d5ac7664 100644 --- a/CrowIDE/src/DesignInterface.cs +++ b/CrowIDE/src/DesignInterface.cs @@ -60,7 +60,7 @@ namespace Crow.Coding public ProjectFile ProjFile; - protected override void initX () + protected override void InitBackend () { surf = CrowIDE.MainIFace.surf.CreateSimilar (Cairo.Content.ColorAlpha, 100, 100); //base.initX (); diff --git a/Tests/BasicTests.cs b/Tests/BasicTests.cs index c13dd53d..02b6742d 100644 --- a/Tests/BasicTests.cs +++ b/Tests/BasicTests.cs @@ -16,9 +16,9 @@ namespace tests app.KeyboardKeyDown += App_KeyboardKeyDown; - //app.AddWidget (@"Interfaces/Divers/0.crow").DataSource = app; + app.AddWidget (@"Interfaces/Divers/0.crow").DataSource = app; //app.AddWidget (@"Interfaces/Splitter/1.crow").DataSource = app; - app.AddWidget (@"Interfaces/Container/0.crow").DataSource = app; + //app.AddWidget (@"Interfaces/Container/0.crow").DataSource = app; //app.AddWidget (@"Interfaces/Divers/colorPicker.crow").DataSource = app; //app.AddWidget ("Interfaces/Divers/perfMeasures.crow").DataSource = app; diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 7366607f..973930e7 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -101,7 +101,6 @@ - diff --git a/Tests/keysyms.cs b/Tests/keysyms.cs index 430954fe..e33add92 100644 --- a/Tests/keysyms.cs +++ b/Tests/keysyms.cs @@ -33,16 +33,18 @@ namespace Tests public static void Main(string[] args) { using (StreamWriter sw = new StreamWriter ("test.cs")) { - using (StreamReader r = new StreamReader ("/usr/include/X11/keysymdef.h")) { + using (StreamReader r = new StreamReader ("/usr/include/xkbcommon/xkbcommon-keysyms.h")) { bool skip = false; int maxChar = 0; sw.WriteLine ("/* autogenerated */"); sw.WriteLine ("using System;\n"); - sw.WriteLine ("namespace XLib"); + sw.WriteLine ("namespace Crow.XCB"); sw.WriteLine ("{"); sw.WriteLine ("\t[Flags]"); sw.WriteLine ("\tpublic enum KeySym"); sw.WriteLine ("\t{"); + r.ReadLine (); + r.ReadLine (); while (!r.EndOfStream) { string s = r.ReadLine ().Trim(); if (skip) { @@ -59,13 +61,17 @@ namespace Tests continue; string[] tmp = s.Split (new char[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries); - if (tmp [1].Length > maxChar) - maxChar = tmp [1].Length; + string keyName = tmp [1].Substring (8); + if (char.IsDigit (keyName [0])) + keyName = "key_" + keyName; - int nbTab = tmp [1].Length / 4; + if (keyName.Length > maxChar) + maxChar = keyName.Length; + + int nbTab = keyName.Length / 4; nbTab = 8 - nbTab; - sw.WriteLine ("\t\t{0}{1}= {2},", tmp[1],new String('\t',nbTab), tmp[2]); + sw.WriteLine ("\t\t{0}{1}= {2},", keyName, new String('\t',nbTab), tmp[2]); } sw.WriteLine ("\t}"); sw.WriteLine ("}"); diff --git a/Tests/testCairoXLib.cs b/Tests/testCairoXLib.cs index 7d62a288..cb18d654 100644 --- a/Tests/testCairoXLib.cs +++ b/Tests/testCairoXLib.cs @@ -12,7 +12,7 @@ namespace testsCairoXLib static internal IntPtr xHandle, xwinHnd; static internal Int32 xScreen; static IntPtr xLastEvent; - static XLib.XErrorHandler errorHnd; + static XErrorHandler errorHnd; static Pollfd[] pollfds; diff --git a/src/GraphicObjects/PrivateContainer.cs b/src/GraphicObjects/PrivateContainer.cs index d1b687ce..41918bc8 100644 --- a/src/GraphicObjects/PrivateContainer.cs +++ b/src/GraphicObjects/PrivateContainer.cs @@ -55,7 +55,7 @@ namespace Crow } #endif protected GraphicObject child; - #if DEBUG_LAYOUTING + #if DEBUG_LOG internal GraphicObject getTemplateRoot { get { return child; } } diff --git a/src/IBackend.cs b/src/IBackend.cs new file mode 100644 index 00000000..2555d566 --- /dev/null +++ b/src/IBackend.cs @@ -0,0 +1,38 @@ +// +// IBackend.cs +// +// Author: +// Jean-Philippe Bruyère +// +// Copyright (c) 2013-2017 Jean-Philippe Bruyère +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; + +namespace Crow +{ + public interface IBackend + { + void Init(Interface iFace); + void CleanUp(); + void Flush(); + void ProcessEvents(); + } +} + diff --git a/src/Interface.cs b/src/Interface.cs index ba8a523e..c83da3c9 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -77,10 +77,7 @@ namespace Crow } #endregion - internal IntPtr xDisp, xwinHnd, xDefaultRootWin, xDefaultVisual; - internal UInt32 xDefaultDepth; - internal Int32 xScreen; - XLib.XErrorHandler errorHnd; + internal IBackend backend; #region CTOR static Interface(){ @@ -118,78 +115,25 @@ namespace Crow Init (); - initX (); - } - private int HandleError (IntPtr display, ref XLib.XErrorEvent error_event) - { - /*if (ErrorExceptions) - throw new X11Exception (error_event.display, error_event.resourceid, - error_event.serial, error_event.error_code, - error_event.request_code, error_event.minor_code); - else - Console.WriteLine ("X11 Error encountered: {0}{1}\n", - X11Exception.GetMessage(error_event.display, error_event.resourceid, - error_event.serial, error_event.error_code, - error_event.request_code, error_event.minor_code), - WhereString());*/ - Debug.WriteLine ("XERROR {0}", error_event.error_code); - return 0; + InitBackend (); } #endregion + protected virtual void InitBackend () { + backend = new Crow.XCB.XCBBackend (); + backend.Init (this); + + Thread t = new Thread (interfaceThread); + t.IsBackground = true; + t.Start (); + } + void interfaceThread() { while (true) { Update (); - if (XLib.NativeMethods.XPending (xDisp) > 0) { - XLib.XEvent xevent = new XLib.XEvent (); - XLib.NativeMethods.XNextEvent (xDisp, ref xevent); - - switch (xevent.type) { - case XLib.XEventName.Expose: - ProcessResize (new Rectangle (0, 0, xevent.ExposeEvent.width, xevent.ExposeEvent.height)); - break; - case XLib.XEventName.KeyPress: - ProcessKeyDown (xevent.KeyEvent.keycode); - - /*int min_keycode, max_keycode, keysyms_per_keycode; - XLib.NativeMethods.XDisplayKeycodes (xDisp, out min_keycode, out max_keycode); - - IntPtr ksp = XLib.NativeMethods.XGetKeyboardMapping (xDisp, (byte)min_keycode, - max_keycode + 1 - min_keycode, out keysyms_per_keycode); - XLib.NativeMethods.XFree (ksp);*/ - - uint keySym; - keySym = XLib.NativeMethods.XKeycodeToKeysym (xDisp, xevent.KeyEvent.keycode, 0); - char c = (char)keySym; - - Debug.WriteLine ("keycode:{0}; keysym:{1}; char:{2}", xevent.KeyEvent.keycode, keySym, c); - break; - case XLib.XEventName.KeyRelease: - ProcessKeyUp (xevent.KeyEvent.keycode); - //Debug.WriteLine ("keypress: {0}", xevent.KeyEvent.keycode); - break; - case XLib.XEventName.MotionNotify: - //Debug.WriteLine ("motion: ({0},{1})", xevent.MotionEvent.x, xevent.MotionEvent.y); - ProcessMouseMove (xevent.MotionEvent.x, xevent.MotionEvent.y); - break; - case XLib.XEventName.ButtonPress: - //Debug.WriteLine ("button press: {0}", xevent.ButtonEvent.button); - if (xevent.ButtonEvent.button == 4) - ProcessMouseWheelChanged (WheelIncrement); - else if(xevent.ButtonEvent.button == 5) - ProcessMouseWheelChanged (-WheelIncrement); - else - ProcessMouseButtonDown (xevent.ButtonEvent.button - 1); - break; - case XLib.XEventName.ButtonRelease: - //Debug.WriteLine ("button release: {0}", xevent.ButtonEvent.button); - ProcessMouseButtonUp (xevent.ButtonEvent.button - 1); - break; - - } - } + backend.ProcessEvents (); } } @@ -205,8 +149,8 @@ namespace Crow // TODO: dispose managed state (managed objects). } - //Marshal.FreeHGlobal (lastEvent); - XLib.NativeMethods.XCloseDisplay (xDisp); + backend.CleanUp (); + disposedValue = true; } @@ -244,60 +188,6 @@ namespace Crow #endif } - protected virtual void initX() { - XLib.NativeMethods.XInitThreads (); - xDisp = XLib.NativeMethods.XOpenDisplay(IntPtr.Zero); - if (xDisp == IntPtr.Zero) - throw new NotSupportedException("[XLib] Failed to open display."); - - xScreen = XLib.NativeMethods.XDefaultScreen(xDisp); - - xDefaultRootWin = XLib.NativeMethods.XDefaultRootWindow (xDisp); - xDefaultVisual = XLib.NativeMethods.XDefaultVisual (xDisp, xScreen); - xDefaultDepth = XLib.NativeMethods.XDefaultDepth (xDisp, xScreen); - - xwinHnd = XLib.NativeMethods.XCreateSimpleWindow (xDisp, xDefaultRootWin, - 0, 0, (uint)clientRectangle.Width, (uint)clientRectangle.Height, 0, IntPtr.Zero, IntPtr.Zero); - if (xwinHnd == IntPtr.Zero) - throw new NotSupportedException("[XLib] Failed to create window."); - - XLib.NativeMethods.XSelectInput (xDisp, xwinHnd, XLib.EventMask.ExposureMask | - XLib.EventMask.KeyPressMask | XLib.EventMask.KeyReleaseMask | - XLib.EventMask.PointerMotionMask | XLib.EventMask.ButtonPressMask | XLib.EventMask.ButtonReleaseMask); - - XLib.NativeMethods.XMapWindow (xDisp, xwinHnd); - - surf = new Cairo.XlibSurface (xDisp, xwinHnd, xDefaultVisual, clientRectangle.Width, clientRectangle.Height); - - errorHnd = new XLib.XErrorHandler (HandleError); - XLib.NativeMethods.XSetErrorHandler (errorHnd); - - int min_keycode, max_keycode, keysyms_per_keycode; - - XLib.NativeMethods.XDisplayKeycodes (xDisp, out min_keycode, out max_keycode); - IntPtr ksp = XLib.NativeMethods.XGetKeyboardMapping (xDisp, (byte) min_keycode, - max_keycode + 1 - min_keycode, out keysyms_per_keycode); - XLib.NativeMethods.XFree (ksp); - - unsafe { - byte* modmap_unmanaged = XLib.NativeMethods.XGetModifierMapping (xDisp); - int nummodmap = 0; - int* ptr = (int*)modmap_unmanaged; - nummodmap = ptr [0]; - - for (int i = 0; i< nummodmap; i++) { - Console.WriteLine(modmap_unmanaged[i+4]); - } - XLib.NativeMethods.XFree ((IntPtr)modmap_unmanaged); - } - - - Thread t = new Thread (interfaceThread); - t.IsBackground = true; - t.Start (); - - } - #region Static and constants /// /// Crow configuration root path @@ -886,7 +776,7 @@ namespace Crow //} //surf.WriteToPng (@"/mnt/data/test.png"); - //XLib.NativeMethods.XSync (xHandle, 0); + backend?.Flush (); } } #if MEASURE_TIME @@ -1216,7 +1106,7 @@ namespace Crow /// return true, if interface handled the event, false otherwise. /// Button index public bool ProcessKeyDown(int Key){ - Keyboard.SetKeyState((Crow.Key)Key,true); + //Keyboard.SetKeyState((Crow.Key)Key,true); KeyboardKeyEventArgs e = lastKeyDownEvt = new KeyboardKeyEventArgs((Crow.Key)Key, false, Keyboard); lastKeyDownEvt.IsRepeat = true; @@ -1238,7 +1128,7 @@ namespace Crow /// return true, if interface handled the event, false otherwise. /// Button index public bool ProcessKeyUp(int Key){ - Keyboard.SetKeyState((Crow.Key)Key,false); + //Keyboard.SetKeyState((Crow.Key)Key,false); if (_focusedWidget == null) return false; KeyboardKeyEventArgs e = new KeyboardKeyEventArgs((Crow.Key)Key, false, Keyboard); diff --git a/src/XLib/Display.cs b/src/XLib/Display.cs deleted file mode 100644 index 7e973b88..00000000 --- a/src/XLib/Display.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace XLib -{ - public class Display : IDisposable - { - internal IntPtr handle; - internal Int32 screen; - IntPtr lastEvent; - - public Display() - { - handle = NativeMethods.XOpenDisplay(IntPtr.Zero); - if (handle == IntPtr.Zero) - throw new NotSupportedException("[XLib] Failed to open display."); - - screen = NativeMethods.XDefaultScreen(handle); - lastEvent = Marshal.AllocHGlobal(96); - } - - /*public IntPtr NextEvent { - get { - NativeMethods.XNextEvent(handle, lastEvent); - return lastEvent; - } - }*/ - - #region IDisposable Support - private bool disposedValue = false; // To detect redundant calls - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // TODO: dispose managed state (managed objects). - } - - //Marshal.FreeHGlobal (lastEvent); - NativeMethods.XCloseDisplay (handle); - - disposedValue = true; - } - } - - // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. - ~Display() { - // Do not change this code. Put cleanup code in Dispose(bool disposing) above. - Dispose(false); - } - - // This code added to correctly implement the disposable pattern. - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - #endregion - - - } -} diff --git a/src/XLib/NativeMethods.cs b/src/XLib/NativeMethods.cs deleted file mode 100644 index c5257be3..00000000 --- a/src/XLib/NativeMethods.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace XLib -{ - public static class NativeMethods - { - #region pinvoke - [DllImportAttribute("X11")] - public static extern int XInitThreads(); - [DllImportAttribute("X11")] - public static extern IntPtr XOpenDisplay(IntPtr displayName); - [DllImportAttribute("X11")] - public static extern IntPtr XCloseDisplay(IntPtr disp); - [DllImportAttribute("X11")] - public static extern Int32 XDefaultScreen(IntPtr disp); - [DllImportAttribute("X11")] - public static extern IntPtr XDefaultRootWindow(IntPtr disp); - [DllImportAttribute("X11")] - public static extern UInt32 XDefaultDepth (IntPtr disp, Int32 screen); - [DllImportAttribute("X11")] - public static extern IntPtr XDefaultVisual(IntPtr disp, Int32 screen); - [DllImportAttribute("X11")] - public static extern IntPtr XCreateSimpleWindow(IntPtr disp, IntPtr rootWindow, Int32 x, Int32 y, UInt32 width, UInt32 height, - UInt32 borderWidth, IntPtr border, IntPtr background); - [DllImportAttribute("X11")] - public static extern IntPtr XCreatePixmap(IntPtr disp, IntPtr rootWindow, UInt32 width, UInt32 height, UInt32 depth); - [DllImportAttribute("X11")] - public static extern IntPtr XFreePixmap(IntPtr disp, IntPtr pixmap); - [DllImportAttribute("X11")] - public static extern IntPtr XFree(IntPtr data); - [DllImportAttribute("X11")] - public static extern Int32 XSelectInput(IntPtr disp, IntPtr win, EventMask eventMask); - [DllImportAttribute("X11")] - public static extern Int32 XMapWindow(IntPtr disp, IntPtr win); - [DllImportAttribute("X11")] - public static extern int XPending (IntPtr disp); - [DllImportAttribute("X11")] - public static extern IntPtr XNextEvent(IntPtr disp, ref XEvent xevent); - [DllImportAttribute("X11")] - public static extern Int32 XSync(IntPtr disp, int discard); - [DllImportAttribute("X11")] - public static extern int XConnectionNumber(IntPtr disp); - [DllImportAttribute("X11")] - public static extern IntPtr XSetErrorHandler(XErrorHandler error_handler); - - [DllImport ("libX11")] - public static extern void XDisplayKeycodes (IntPtr disp, out int min, out int max); - [DllImport ("libX11")] - public static extern IntPtr XGetKeyboardMapping (IntPtr disp, byte first_keycode, int keycode_count, - out int keysyms_per_keycode_return); - [DllImport ("libX11")] - unsafe public extern static byte* XGetModifierMapping (IntPtr disp); - [DllImport ("libX11")] - public static extern uint XKeycodeToKeysym (IntPtr display, int keycode, int index); - #endregion - - - } -} diff --git a/src/XLib/Window.cs b/src/XLib/Window.cs deleted file mode 100644 index f74a5fdb..00000000 --- a/src/XLib/Window.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace XLib -{ - - public enum EventType { - KeyPress = 2, - KeyRelease, - ButtonPress, - ButtonRelease, - MotionNotify, - EnterNotify, - LeaveNotify, - FocusIn, - FocusOut, - KeymapNotify, - Expose, - GraphicsExpose, - NoExpose, - VisibilityNotify, - CreateNotify, - DestroyNotify, - UnmapNotify, - MapNotify, - MapRequest, - ReparentNotify, - ConfigureNotify, - ConfigureRequest, - GravityNotify, - ResizeRequest, - CirculateNotify, - CirculateRequest, - PropertyNotify, - SelectionClear, - SelectionRequest, - SelectionNotify, - ColormapNotify, - ClientMessage, - MappingNotify, - GenericEvent, - LASTEvent = 36 /* must be bigger than any event # */ - } - public class Window - { - IntPtr handle; - Display disp; - - public Window (Display display, UInt32 width = 800, UInt32 height = 600, Int32 x = 0, Int32 y = 0) { - disp = display; - handle = NativeMethods.XCreateSimpleWindow (disp.handle, NativeMethods.XDefaultRootWindow(disp.handle), x, y, width, height, - 0, IntPtr.Zero, IntPtr.Zero); - if (handle == IntPtr.Zero) - throw new NotSupportedException("[XLib] Failed to create window."); - - NativeMethods.XSelectInput (disp.handle, handle, EventMask.ExposureMask | EventMask.KeyPressMask); - - NativeMethods.XMapWindow (disp.handle, handle); - } - - } -} diff --git a/src/XLib/X11Structs.cs b/src/XLib/X11Structs.cs deleted file mode 100644 index 8cf70abc..00000000 --- a/src/XLib/X11Structs.cs +++ /dev/null @@ -1,1822 +0,0 @@ -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software",, to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (c) 2004 Novell, Inc. -// -// Authors: -// Peter Bartok pbartok@novell.com -// - - -// NOT COMPLETE - -using System; -using System.ComponentModel; -using System.Collections; -using System.Drawing; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Threading; - -/// X11 Version -namespace XLib { - // - // In the structures below, fields of type long are mapped to IntPtr. - // This will work on all platforms where sizeof(long)==sizeof(void*), which - // is almost all platforms except WIN64. - // - - [StructLayout(LayoutKind.Sequential)] - public struct XAnyEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XKeyEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr root; - public IntPtr subwindow; - public IntPtr time; - public int x; - public int y; - public int x_root; - public int y_root; - public int state; - public int keycode; - public bool same_screen; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XButtonEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr root; - public IntPtr subwindow; - public IntPtr time; - public int x; - public int y; - public int x_root; - public int y_root; - public int state; - public int button; - public bool same_screen; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XMotionEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr root; - public IntPtr subwindow; - public IntPtr time; - public int x; - public int y; - public int x_root; - public int y_root; - public int state; - public byte is_hint; - public bool same_screen; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XCrossingEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr root; - public IntPtr subwindow; - public IntPtr time; - public int x; - public int y; - public int x_root; - public int y_root; - public NotifyMode mode; - public NotifyDetail detail; - public bool same_screen; - public bool focus; - public int state; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XFocusChangeEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public int mode; - public NotifyDetail detail; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XKeymapEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public byte key_vector0; - public byte key_vector1; - public byte key_vector2; - public byte key_vector3; - public byte key_vector4; - public byte key_vector5; - public byte key_vector6; - public byte key_vector7; - public byte key_vector8; - public byte key_vector9; - public byte key_vector10; - public byte key_vector11; - public byte key_vector12; - public byte key_vector13; - public byte key_vector14; - public byte key_vector15; - public byte key_vector16; - public byte key_vector17; - public byte key_vector18; - public byte key_vector19; - public byte key_vector20; - public byte key_vector21; - public byte key_vector22; - public byte key_vector23; - public byte key_vector24; - public byte key_vector25; - public byte key_vector26; - public byte key_vector27; - public byte key_vector28; - public byte key_vector29; - public byte key_vector30; - public byte key_vector31; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XExposeEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public int x; - public int y; - public int width; - public int height; - public int count; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XGraphicsExposeEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr drawable; - public int x; - public int y; - public int width; - public int height; - public int count; - public int major_code; - public int minor_code; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XNoExposeEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr drawable; - public int major_code; - public int minor_code; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XVisibilityEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public int state; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XCreateWindowEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr parent; - public IntPtr window; - public int x; - public int y; - public int width; - public int height; - public int border_width; - public bool override_redirect; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XDestroyWindowEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XUnmapEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public bool from_configure; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XMapEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public bool override_redirect; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XMapRequestEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr parent; - public IntPtr window; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XReparentEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public IntPtr parent; - public int x; - public int y; - public bool override_redirect; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XConfigureEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public int x; - public int y; - public int width; - public int height; - public int border_width; - public IntPtr above; - public bool override_redirect; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XGravityEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public int x; - public int y; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XResizeRequestEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public int width; - public int height; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XConfigureRequestEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr parent; - public IntPtr window; - public int x; - public int y; - public int width; - public int height; - public int border_width; - public IntPtr above; - public int detail; - public IntPtr value_mask; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XCirculateEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr xevent; - public IntPtr window; - public int place; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XCirculateRequestEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr parent; - public IntPtr window; - public int place; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XPropertyEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr atom; - public IntPtr time; - public int state; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XSelectionClearEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr selection; - public IntPtr time; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XSelectionRequestEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr owner; - public IntPtr requestor; - public IntPtr selection; - public IntPtr target; - public IntPtr property; - public IntPtr time; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XSelectionEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr requestor; - public IntPtr selection; - public IntPtr target; - public IntPtr property; - public IntPtr time; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XColormapEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr colormap; - public bool c_new; - public int state; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XClientMessageEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public IntPtr message_type; - public int format; - public IntPtr ptr1; - public IntPtr ptr2; - public IntPtr ptr3; - public IntPtr ptr4; - public IntPtr ptr5; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XMappingEvent { - public XEventName type; - public IntPtr serial; - public bool send_event; - public IntPtr display; - public IntPtr window; - public int request; - public int first_keycode; - public int count; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XErrorEvent { - public XEventName type; - public IntPtr display; - public IntPtr resourceid; - public IntPtr serial; - public byte error_code; - public XRequest request_code; - public byte minor_code; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XEventPad { - public IntPtr pad0; - public IntPtr pad1; - public IntPtr pad2; - public IntPtr pad3; - public IntPtr pad4; - public IntPtr pad5; - public IntPtr pad6; - public IntPtr pad7; - public IntPtr pad8; - public IntPtr pad9; - public IntPtr pad10; - public IntPtr pad11; - public IntPtr pad12; - public IntPtr pad13; - public IntPtr pad14; - public IntPtr pad15; - public IntPtr pad16; - public IntPtr pad17; - public IntPtr pad18; - public IntPtr pad19; - public IntPtr pad20; - public IntPtr pad21; - public IntPtr pad22; - public IntPtr pad23; - } - - [StructLayout(LayoutKind.Explicit)] - public struct XEvent { - [ FieldOffset(0) ] public XEventName type; - [ FieldOffset(0) ] public XAnyEvent AnyEvent; - [ FieldOffset(0) ] public XKeyEvent KeyEvent; - [ FieldOffset(0) ] public XButtonEvent ButtonEvent; - [ FieldOffset(0) ] public XMotionEvent MotionEvent; - [ FieldOffset(0) ] public XCrossingEvent CrossingEvent; - [ FieldOffset(0) ] public XFocusChangeEvent FocusChangeEvent; - [ FieldOffset(0) ] public XExposeEvent ExposeEvent; - [ FieldOffset(0) ] public XGraphicsExposeEvent GraphicsExposeEvent; - [ FieldOffset(0) ] public XNoExposeEvent NoExposeEvent; - [ FieldOffset(0) ] public XVisibilityEvent VisibilityEvent; - [ FieldOffset(0) ] public XCreateWindowEvent CreateWindowEvent; - [ FieldOffset(0) ] public XDestroyWindowEvent DestroyWindowEvent; - [ FieldOffset(0) ] public XUnmapEvent UnmapEvent; - [ FieldOffset(0) ] public XMapEvent MapEvent; - [ FieldOffset(0) ] public XMapRequestEvent MapRequestEvent; - [ FieldOffset(0) ] public XReparentEvent ReparentEvent; - [ FieldOffset(0) ] public XConfigureEvent ConfigureEvent; - [ FieldOffset(0) ] public XGravityEvent GravityEvent; - [ FieldOffset(0) ] public XResizeRequestEvent ResizeRequestEvent; - [ FieldOffset(0) ] public XConfigureRequestEvent ConfigureRequestEvent; - [ FieldOffset(0) ] public XCirculateEvent CirculateEvent; - [ FieldOffset(0) ] public XCirculateRequestEvent CirculateRequestEvent; - [ FieldOffset(0) ] public XPropertyEvent PropertyEvent; - [ FieldOffset(0) ] public XSelectionClearEvent SelectionClearEvent; - [ FieldOffset(0) ] public XSelectionRequestEvent SelectionRequestEvent; - [ FieldOffset(0) ] public XSelectionEvent SelectionEvent; - [ FieldOffset(0) ] public XColormapEvent ColormapEvent; - [ FieldOffset(0) ] public XClientMessageEvent ClientMessageEvent; - [ FieldOffset(0) ] public XMappingEvent MappingEvent; - [ FieldOffset(0) ] public XErrorEvent ErrorEvent; - [ FieldOffset(0) ] public XKeymapEvent KeymapEvent; - - //[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=24)] - //[ FieldOffset(0) ] public int[] pad; - [ FieldOffset(0) ] public XEventPad Pad; - public override string ToString() { - switch (type) - { - case XEventName.ButtonPress: - case XEventName.ButtonRelease: - return ToString (ButtonEvent); - case XEventName.CirculateNotify: - case XEventName.CirculateRequest: - return ToString (CirculateEvent); - case XEventName.ClientMessage: - return ToString (ClientMessageEvent); - case XEventName.ColormapNotify: - return ToString (ColormapEvent); - case XEventName.ConfigureNotify: - return ToString (ConfigureEvent); - case XEventName.ConfigureRequest: - return ToString (ConfigureRequestEvent); - case XEventName.CreateNotify: - return ToString (CreateWindowEvent); - case XEventName.DestroyNotify: - return ToString (DestroyWindowEvent); - case XEventName.Expose: - return ToString (ExposeEvent); - case XEventName.FocusIn: - case XEventName.FocusOut: - return ToString (FocusChangeEvent); - case XEventName.GraphicsExpose: - return ToString (GraphicsExposeEvent); - case XEventName.GravityNotify: - return ToString (GravityEvent); - case XEventName.KeymapNotify: - return ToString (KeymapEvent); - case XEventName.MapNotify: - return ToString (MapEvent); - case XEventName.MappingNotify: - return ToString (MappingEvent); - case XEventName.MapRequest: - return ToString (MapRequestEvent); - case XEventName.MotionNotify: - return ToString (MotionEvent); - case XEventName.NoExpose: - return ToString (NoExposeEvent); - case XEventName.PropertyNotify: - return ToString (PropertyEvent); - case XEventName.ReparentNotify: - return ToString (ReparentEvent); - case XEventName.ResizeRequest: - return ToString (ResizeRequestEvent); - case XEventName.SelectionClear: - return ToString (SelectionClearEvent); - case XEventName.SelectionNotify: - return ToString (SelectionEvent); - case XEventName.SelectionRequest: - return ToString (SelectionRequestEvent); - case XEventName.UnmapNotify: - return ToString (UnmapEvent); - case XEventName.VisibilityNotify: - return ToString (VisibilityEvent); - case XEventName.EnterNotify: - case XEventName.LeaveNotify: - return ToString (CrossingEvent); - default: - return type.ToString (); - } - } - - public static string ToString (object ev) - { - string result = string.Empty; - Type type = ev.GetType (); - System.Reflection.FieldInfo [] fields = type.GetFields (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance); - for (int i = 0; i < fields.Length; i++) { - if (result != string.Empty) { - result += ", "; - } - object value = fields [i].GetValue (ev); - result += fields [i].Name + "=" + (value == null ? "" : value.ToString ()); - } - return type.Name + " (" + result + ")"; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct XSetWindowAttributes { - public IntPtr background_pixmap; - public IntPtr background_pixel; - public IntPtr border_pixmap; - public IntPtr border_pixel; - public Gravity bit_gravity; - public Gravity win_gravity; - public int backing_store; - public IntPtr backing_planes; - public IntPtr backing_pixel; - public bool save_under; - public IntPtr event_mask; - public IntPtr do_not_propagate_mask; - public bool override_redirect; - public IntPtr colormap; - public IntPtr cursor; - } - - [StructLayout(LayoutKind.Sequential)] - public struct XWindowAttributes { - public int x; - public int y; - public int width; - public int height; - public int border_width; - public int depth; - public IntPtr visual; - public IntPtr root; - public int c_class; - public Gravity bit_gravity; - public Gravity win_gravity; - public int backing_store; - public IntPtr backing_planes; - public IntPtr backing_pixel; - public bool save_under; - public IntPtr colormap; - public bool map_installed; - public MapState map_state; - public IntPtr all_event_masks; - public IntPtr your_event_mask; - public IntPtr do_not_propagate_mask; - public bool override_direct; - public IntPtr screen; - - public override string ToString () - { - return XEvent.ToString (this); - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct XTextProperty { - public string value; - public IntPtr encoding; - public int format; - public IntPtr nitems; - } - - public enum XWindowClass { - InputOutput = 1, - InputOnly = 2 - } - - public enum XEventName { - KeyPress = 2, - KeyRelease = 3, - ButtonPress = 4, - ButtonRelease = 5, - MotionNotify = 6, - EnterNotify = 7, - LeaveNotify = 8, - FocusIn = 9, - FocusOut = 10, - KeymapNotify = 11, - Expose = 12, - GraphicsExpose = 13, - NoExpose = 14, - VisibilityNotify = 15, - CreateNotify = 16, - DestroyNotify = 17, - UnmapNotify = 18, - MapNotify = 19, - MapRequest = 20, - ReparentNotify = 21, - ConfigureNotify = 22, - ConfigureRequest = 23, - GravityNotify = 24, - ResizeRequest = 25, - CirculateNotify = 26, - CirculateRequest = 27, - PropertyNotify = 28, - SelectionClear = 29, - SelectionRequest = 30, - SelectionNotify = 31, - ColormapNotify = 32, - ClientMessage = 33, - MappingNotify = 34, - - LASTEvent - } - - [Flags] - public enum SetWindowValuemask { - Nothing = 0, - BackPixmap = 1, - BackPixel = 2, - BorderPixmap = 4, - BorderPixel = 8, - BitGravity = 16, - WinGravity = 32, - BackingStore = 64, - BackingPlanes = 128, - BackingPixel = 256, - OverrideRedirect = 512, - SaveUnder = 1024, - EventMask = 2048, - DontPropagate = 4096, - ColorMap = 8192, - Cursor = 16384 - } - - public enum SendEventValues { - PointerWindow = 0, - InputFocus = 1 - } - - public enum CreateWindowArgs { - CopyFromParent = 0, - ParentRelative = 1, - InputOutput = 1, - InputOnly = 2 - } - - public enum Gravity { - ForgetGravity = 0, - NorthWestGravity= 1, - NorthGravity = 2, - NorthEastGravity= 3, - WestGravity = 4, - CenterGravity = 5, - EastGravity = 6, - SouthWestGravity= 7, - SouthGravity = 8, - SouthEastGravity= 9, - StaticGravity = 10 - } - - public enum XKeySym : uint { - XK_BackSpace = 0xFF08, - XK_Tab = 0xFF09, - XK_Clear = 0xFF0B, - XK_Return = 0xFF0D, - XK_Home = 0xFF50, - XK_Left = 0xFF51, - XK_Up = 0xFF52, - XK_Right = 0xFF53, - XK_Down = 0xFF54, - XK_Page_Up = 0xFF55, - XK_Page_Down = 0xFF56, - XK_End = 0xFF57, - XK_Begin = 0xFF58, - XK_Menu = 0xFF67, - XK_Shift_L = 0xFFE1, - XK_Shift_R = 0xFFE2, - XK_Control_L = 0xFFE3, - XK_Control_R = 0xFFE4, - XK_Caps_Lock = 0xFFE5, - XK_Shift_Lock = 0xFFE6, - XK_Meta_L = 0xFFE7, - XK_Meta_R = 0xFFE8, - XK_Alt_L = 0xFFE9, - XK_Alt_R = 0xFFEA, - XK_Super_L = 0xFFEB, - XK_Super_R = 0xFFEC, - XK_Hyper_L = 0xFFED, - XK_Hyper_R = 0xFFEE, - } - - [Flags] - public enum EventMask { - NoEventMask = 0, - KeyPressMask = 1<<0, - KeyReleaseMask = 1<<1, - ButtonPressMask = 1<<2, - ButtonReleaseMask = 1<<3, - EnterWindowMask = 1<<4, - LeaveWindowMask = 1<<5, - PointerMotionMask = 1<<6, - PointerMotionHintMask = 1<<7, - Button1MotionMask = 1<<8, - Button2MotionMask = 1<<9, - Button3MotionMask = 1<<10, - Button4MotionMask = 1<<11, - Button5MotionMask = 1<<12, - ButtonMotionMask = 1<<13, - KeymapStateMask = 1<<14, - ExposureMask = 1<<15, - VisibilityChangeMask = 1<<16, - StructureNotifyMask = 1<<17, - ResizeRedirectMask = 1<<18, - SubstructureNotifyMask = 1<<19, - SubstructureRedirectMask= 1<<20, - FocusChangeMask = 1<<21, - PropertyChangeMask = 1<<22, - ColormapChangeMask = 1<<23, - OwnerGrabButtonMask = 1<<24 - } - - public enum GrabMode { - GrabModeSync = 0, - GrabModeAsync = 1 - } - - [StructLayout(LayoutKind.Sequential)] - public struct XStandardColormap { - public IntPtr colormap; - public IntPtr red_max; - public IntPtr red_mult; - public IntPtr green_max; - public IntPtr green_mult; - public IntPtr blue_max; - public IntPtr blue_mult; - public IntPtr base_pixel; - public IntPtr visualid; - public IntPtr killid; - } - - [StructLayout(LayoutKind.Sequential, Pack=2)] - public struct XColor { - public IntPtr pixel; - public ushort red; - public ushort green; - public ushort blue; - public byte flags; - public byte pad; - } - - public enum Atom { - AnyPropertyType = 0, - XA_PRIMARY = 1, - XA_SECONDARY = 2, - XA_ARC = 3, - XA_ATOM = 4, - XA_BITMAP = 5, - XA_CARDINAL = 6, - XA_COLORMAP = 7, - XA_CURSOR = 8, - XA_CUT_BUFFER0 = 9, - XA_CUT_BUFFER1 = 10, - XA_CUT_BUFFER2 = 11, - XA_CUT_BUFFER3 = 12, - XA_CUT_BUFFER4 = 13, - XA_CUT_BUFFER5 = 14, - XA_CUT_BUFFER6 = 15, - XA_CUT_BUFFER7 = 16, - XA_DRAWABLE = 17, - XA_FONT = 18, - XA_INTEGER = 19, - XA_PIXMAP = 20, - XA_POINT = 21, - XA_RECTANGLE = 22, - XA_RESOURCE_MANAGER = 23, - XA_RGB_COLOR_MAP = 24, - XA_RGB_BEST_MAP = 25, - XA_RGB_BLUE_MAP = 26, - XA_RGB_DEFAULT_MAP = 27, - XA_RGB_GRAY_MAP = 28, - XA_RGB_GREEN_MAP = 29, - XA_RGB_RED_MAP = 30, - XA_STRING = 31, - XA_VISUALID = 32, - XA_WINDOW = 33, - XA_WM_COMMAND = 34, - XA_WM_HINTS = 35, - XA_WM_CLIENT_MACHINE = 36, - XA_WM_ICON_NAME = 37, - XA_WM_ICON_SIZE = 38, - XA_WM_NAME = 39, - XA_WM_NORMAL_HINTS = 40, - XA_WM_SIZE_HINTS = 41, - XA_WM_ZOOM_HINTS = 42, - XA_MIN_SPACE = 43, - XA_NORM_SPACE = 44, - XA_MAX_SPACE = 45, - XA_END_SPACE = 46, - XA_SUPERSCRIPT_X = 47, - XA_SUPERSCRIPT_Y = 48, - XA_SUBSCRIPT_X = 49, - XA_SUBSCRIPT_Y = 50, - XA_UNDERLINE_POSITION = 51, - XA_UNDERLINE_THICKNESS = 52, - XA_STRIKEOUT_ASCENT = 53, - XA_STRIKEOUT_DESCENT = 54, - XA_ITALIC_ANGLE = 55, - XA_X_HEIGHT = 56, - XA_QUAD_WIDTH = 57, - XA_WEIGHT = 58, - XA_POINT_SIZE = 59, - XA_RESOLUTION = 60, - XA_COPYRIGHT = 61, - XA_NOTICE = 62, - XA_FONT_NAME = 63, - XA_FAMILY_NAME = 64, - XA_FULL_NAME = 65, - XA_CAP_HEIGHT = 66, - XA_WM_CLASS = 67, - XA_WM_TRANSIENT_FOR = 68, - - XA_LAST_PREDEFINED = 68 - } - - [StructLayout(LayoutKind.Sequential)] - public struct XScreen { - public IntPtr ext_data; - public IntPtr display; - public IntPtr root; - public int width; - public int height; - public int mwidth; - public int mheight; - public int ndepths; - public IntPtr depths; - public int root_depth; - public IntPtr root_visual; - public IntPtr default_gc; - public IntPtr cmap; - public IntPtr white_pixel; - public IntPtr black_pixel; - public int max_maps; - public int min_maps; - public int backing_store; - public bool save_unders; - public IntPtr root_input_mask; - } - - [Flags] - public enum ChangeWindowFlags { - CWX = 1<<0, - CWY = 1<<1, - CWWidth = 1<<2, - CWHeight = 1<<3, - CWBorderWidth = 1<<4, - CWSibling = 1<<5, - CWStackMode = 1<<6 - } - - public enum StackMode { - Above = 0, - Below = 1, - TopIf = 2, - BottomIf = 3, - Opposite = 4 - } - - [StructLayout(LayoutKind.Sequential)] - public struct XWindowChanges { - public int x; - public int y; - public int width; - public int height; - public int border_width; - public IntPtr sibling; - public StackMode stack_mode; - } - - [Flags] - public enum ColorFlags { - DoRed = 1<<0, - DoGreen = 1<<1, - DoBlue = 1<<2 - } - - public enum NotifyMode { - NotifyNormal = 0, - NotifyGrab = 1, - NotifyUngrab = 2 - } - - public enum NotifyDetail { - NotifyAncestor = 0, - NotifyVirtual = 1, - NotifyInferior = 2, - NotifyNonlinear = 3, - NotifyNonlinearVirtual = 4, - NotifyPointer = 5, - NotifyPointerRoot = 6, - NotifyDetailNone = 7 - } - - [StructLayout(LayoutKind.Sequential)] - public struct MotifWmHints { - public IntPtr flags; - public IntPtr functions; - public IntPtr decorations; - public IntPtr input_mode; - public IntPtr status; - - public override string ToString () - { - return string.Format("MotifWmHints " : value.ToString ()); + } + return type.Name + " (" + result + ")"; + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct XSetWindowAttributes { + public IntPtr background_pixmap; + public IntPtr background_pixel; + public IntPtr border_pixmap; + public IntPtr border_pixel; + public Gravity bit_gravity; + public Gravity win_gravity; + public int backing_store; + public IntPtr backing_planes; + public IntPtr backing_pixel; + public bool save_under; + public IntPtr event_mask; + public IntPtr do_not_propagate_mask; + public bool override_redirect; + public IntPtr colormap; + public IntPtr cursor; + } + + [StructLayout(LayoutKind.Sequential)] + public struct XWindowAttributes { + public int x; + public int y; + public int width; + public int height; + public int border_width; + public int depth; + public IntPtr visual; + public IntPtr root; + public int c_class; + public Gravity bit_gravity; + public Gravity win_gravity; + public int backing_store; + public IntPtr backing_planes; + public IntPtr backing_pixel; + public bool save_under; + public IntPtr colormap; + public bool map_installed; + public MapState map_state; + public IntPtr all_event_masks; + public IntPtr your_event_mask; + public IntPtr do_not_propagate_mask; + public bool override_direct; + public IntPtr screen; + + public override string ToString () + { + return XEvent.ToString (this); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct XTextProperty { + public string value; + public IntPtr encoding; + public int format; + public IntPtr nitems; + } + + public enum XWindowClass { + InputOutput = 1, + InputOnly = 2 + } + + public enum XEventName { + KeyPress = 2, + KeyRelease = 3, + ButtonPress = 4, + ButtonRelease = 5, + MotionNotify = 6, + EnterNotify = 7, + LeaveNotify = 8, + FocusIn = 9, + FocusOut = 10, + KeymapNotify = 11, + Expose = 12, + GraphicsExpose = 13, + NoExpose = 14, + VisibilityNotify = 15, + CreateNotify = 16, + DestroyNotify = 17, + UnmapNotify = 18, + MapNotify = 19, + MapRequest = 20, + ReparentNotify = 21, + ConfigureNotify = 22, + ConfigureRequest = 23, + GravityNotify = 24, + ResizeRequest = 25, + CirculateNotify = 26, + CirculateRequest = 27, + PropertyNotify = 28, + SelectionClear = 29, + SelectionRequest = 30, + SelectionNotify = 31, + ColormapNotify = 32, + ClientMessage = 33, + MappingNotify = 34, + + LASTEvent + } + + [Flags] + public enum SetWindowValuemask { + Nothing = 0, + BackPixmap = 1, + BackPixel = 2, + BorderPixmap = 4, + BorderPixel = 8, + BitGravity = 16, + WinGravity = 32, + BackingStore = 64, + BackingPlanes = 128, + BackingPixel = 256, + OverrideRedirect = 512, + SaveUnder = 1024, + EventMask = 2048, + DontPropagate = 4096, + ColorMap = 8192, + Cursor = 16384 + } + + public enum SendEventValues { + PointerWindow = 0, + InputFocus = 1 + } + + public enum CreateWindowArgs { + CopyFromParent = 0, + ParentRelative = 1, + InputOutput = 1, + InputOnly = 2 + } + + public enum Gravity { + ForgetGravity = 0, + NorthWestGravity= 1, + NorthGravity = 2, + NorthEastGravity= 3, + WestGravity = 4, + CenterGravity = 5, + EastGravity = 6, + SouthWestGravity= 7, + SouthGravity = 8, + SouthEastGravity= 9, + StaticGravity = 10 + } + + public enum XKeySym : uint { + XK_BackSpace = 0xFF08, + XK_Tab = 0xFF09, + XK_Clear = 0xFF0B, + XK_Return = 0xFF0D, + XK_Home = 0xFF50, + XK_Left = 0xFF51, + XK_Up = 0xFF52, + XK_Right = 0xFF53, + XK_Down = 0xFF54, + XK_Page_Up = 0xFF55, + XK_Page_Down = 0xFF56, + XK_End = 0xFF57, + XK_Begin = 0xFF58, + XK_Menu = 0xFF67, + XK_Shift_L = 0xFFE1, + XK_Shift_R = 0xFFE2, + XK_Control_L = 0xFFE3, + XK_Control_R = 0xFFE4, + XK_Caps_Lock = 0xFFE5, + XK_Shift_Lock = 0xFFE6, + XK_Meta_L = 0xFFE7, + XK_Meta_R = 0xFFE8, + XK_Alt_L = 0xFFE9, + XK_Alt_R = 0xFFEA, + XK_Super_L = 0xFFEB, + XK_Super_R = 0xFFEC, + XK_Hyper_L = 0xFFED, + XK_Hyper_R = 0xFFEE, + } + + [Flags] + public enum EventMask { + NoEventMask = 0, + KeyPressMask = 1<<0, + KeyReleaseMask = 1<<1, + ButtonPressMask = 1<<2, + ButtonReleaseMask = 1<<3, + EnterWindowMask = 1<<4, + LeaveWindowMask = 1<<5, + PointerMotionMask = 1<<6, + PointerMotionHintMask = 1<<7, + Button1MotionMask = 1<<8, + Button2MotionMask = 1<<9, + Button3MotionMask = 1<<10, + Button4MotionMask = 1<<11, + Button5MotionMask = 1<<12, + ButtonMotionMask = 1<<13, + KeymapStateMask = 1<<14, + ExposureMask = 1<<15, + VisibilityChangeMask = 1<<16, + StructureNotifyMask = 1<<17, + ResizeRedirectMask = 1<<18, + SubstructureNotifyMask = 1<<19, + SubstructureRedirectMask= 1<<20, + FocusChangeMask = 1<<21, + PropertyChangeMask = 1<<22, + ColormapChangeMask = 1<<23, + OwnerGrabButtonMask = 1<<24 + } + + public enum GrabMode { + GrabModeSync = 0, + GrabModeAsync = 1 + } + + [StructLayout(LayoutKind.Sequential)] + public struct XStandardColormap { + public IntPtr colormap; + public IntPtr red_max; + public IntPtr red_mult; + public IntPtr green_max; + public IntPtr green_mult; + public IntPtr blue_max; + public IntPtr blue_mult; + public IntPtr base_pixel; + public IntPtr visualid; + public IntPtr killid; + } + + [StructLayout(LayoutKind.Sequential, Pack=2)] + public struct XColor { + public IntPtr pixel; + public ushort red; + public ushort green; + public ushort blue; + public byte flags; + public byte pad; + } + + public enum Atom { + AnyPropertyType = 0, + XA_PRIMARY = 1, + XA_SECONDARY = 2, + XA_ARC = 3, + XA_ATOM = 4, + XA_BITMAP = 5, + XA_CARDINAL = 6, + XA_COLORMAP = 7, + XA_CURSOR = 8, + XA_CUT_BUFFER0 = 9, + XA_CUT_BUFFER1 = 10, + XA_CUT_BUFFER2 = 11, + XA_CUT_BUFFER3 = 12, + XA_CUT_BUFFER4 = 13, + XA_CUT_BUFFER5 = 14, + XA_CUT_BUFFER6 = 15, + XA_CUT_BUFFER7 = 16, + XA_DRAWABLE = 17, + XA_FONT = 18, + XA_INTEGER = 19, + XA_PIXMAP = 20, + XA_POINT = 21, + XA_RECTANGLE = 22, + XA_RESOURCE_MANAGER = 23, + XA_RGB_COLOR_MAP = 24, + XA_RGB_BEST_MAP = 25, + XA_RGB_BLUE_MAP = 26, + XA_RGB_DEFAULT_MAP = 27, + XA_RGB_GRAY_MAP = 28, + XA_RGB_GREEN_MAP = 29, + XA_RGB_RED_MAP = 30, + XA_STRING = 31, + XA_VISUALID = 32, + XA_WINDOW = 33, + XA_WM_COMMAND = 34, + XA_WM_HINTS = 35, + XA_WM_CLIENT_MACHINE = 36, + XA_WM_ICON_NAME = 37, + XA_WM_ICON_SIZE = 38, + XA_WM_NAME = 39, + XA_WM_NORMAL_HINTS = 40, + XA_WM_SIZE_HINTS = 41, + XA_WM_ZOOM_HINTS = 42, + XA_MIN_SPACE = 43, + XA_NORM_SPACE = 44, + XA_MAX_SPACE = 45, + XA_END_SPACE = 46, + XA_SUPERSCRIPT_X = 47, + XA_SUPERSCRIPT_Y = 48, + XA_SUBSCRIPT_X = 49, + XA_SUBSCRIPT_Y = 50, + XA_UNDERLINE_POSITION = 51, + XA_UNDERLINE_THICKNESS = 52, + XA_STRIKEOUT_ASCENT = 53, + XA_STRIKEOUT_DESCENT = 54, + XA_ITALIC_ANGLE = 55, + XA_X_HEIGHT = 56, + XA_QUAD_WIDTH = 57, + XA_WEIGHT = 58, + XA_POINT_SIZE = 59, + XA_RESOLUTION = 60, + XA_COPYRIGHT = 61, + XA_NOTICE = 62, + XA_FONT_NAME = 63, + XA_FAMILY_NAME = 64, + XA_FULL_NAME = 65, + XA_CAP_HEIGHT = 66, + XA_WM_CLASS = 67, + XA_WM_TRANSIENT_FOR = 68, + + XA_LAST_PREDEFINED = 68 + } + + [StructLayout(LayoutKind.Sequential)] + public struct XScreen { + public IntPtr ext_data; + public IntPtr display; + public IntPtr root; + public int width; + public int height; + public int mwidth; + public int mheight; + public int ndepths; + public IntPtr depths; + public int root_depth; + public IntPtr root_visual; + public IntPtr default_gc; + public IntPtr cmap; + public IntPtr white_pixel; + public IntPtr black_pixel; + public int max_maps; + public int min_maps; + public int backing_store; + public bool save_unders; + public IntPtr root_input_mask; + } + + [Flags] + public enum ChangeWindowFlags { + CWX = 1<<0, + CWY = 1<<1, + CWWidth = 1<<2, + CWHeight = 1<<3, + CWBorderWidth = 1<<4, + CWSibling = 1<<5, + CWStackMode = 1<<6 + } + + public enum StackMode { + Above = 0, + Below = 1, + TopIf = 2, + BottomIf = 3, + Opposite = 4 + } + + [StructLayout(LayoutKind.Sequential)] + public struct XWindowChanges { + public int x; + public int y; + public int width; + public int height; + public int border_width; + public IntPtr sibling; + public StackMode stack_mode; + } + + [Flags] + public enum ColorFlags { + DoRed = 1<<0, + DoGreen = 1<<1, + DoBlue = 1<<2 + } + + public enum NotifyMode { + NotifyNormal = 0, + NotifyGrab = 1, + NotifyUngrab = 2 + } + + public enum NotifyDetail { + NotifyAncestor = 0, + NotifyVirtual = 1, + NotifyInferior = 2, + NotifyNonlinear = 3, + NotifyNonlinearVirtual = 4, + NotifyPointer = 5, + NotifyPointerRoot = 6, + NotifyDetailNone = 7 + } + + [StructLayout(LayoutKind.Sequential)] + public struct MotifWmHints { + public IntPtr flags; + public IntPtr functions; + public IntPtr decorations; + public IntPtr input_mode; + public IntPtr status; + + public override string ToString () + { + return string.Format("MotifWmHints +// +// Copyright (c) 2013-2017 Jean-Philippe Bruyère +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Text; + + + +namespace Crow.XCB +{ + using xcb_window_t = System.UInt32; + using xcb_pixmap_t = System.UInt32; + using xcb_cursor_t = System.UInt32; + using xcb_font_t = System.UInt32; + using xcb_colormap_t = System.UInt32; + using xcb_atom_t = System.UInt32; + using xcb_drawable_t = System.UInt32; + using xcb_visualid_t = System.UInt32; + using xcb_keysym_t = System.UInt32; + using xcb_keycode_t = System.Byte; + using xcb_timestamp_t = System.UInt32; + + using xcb_void_cookie_t = System.UInt32; + + using xkb_keycode_t = System.UInt32; + + public class XCBBackend : IBackend + { + const byte XCB_COPY_FROM_PARENT = 0; + + + enum xcb_window_class_t : ushort { + COPY_FROM_PARENT = 0, + INPUT_OUTPUT = 1, + INPUT_ONLY = 2 + } + + enum xcb_button_t : byte { + Left = 1, + Middle, + Right, + WheelUp, + WheelDown, + But6, + But7, + But8, + But9, + But10, + } + + [Flags] + enum xcb_event_mask_t : uint { + NO_EVENT = 0, + KEY_PRESS = 1, + KEY_RELEASE = 2, + BUTTON_PRESS = 4, + BUTTON_RELEASE = 8, + ENTER_WINDOW = 16, + LEAVE_WINDOW = 32, + POINTER_MOTION = 64, + POINTER_MOTION_HINT = 128, + BUTTON_1_MOTION = 256, + BUTTON_2_MOTION = 512, + BUTTON_3_MOTION = 1024, + BUTTON_4_MOTION = 2048, + BUTTON_5_MOTION = 4096, + BUTTON_MOTION = 8192, + KEYMAP_STATE = 16384, + EXPOSURE = 32768, + VISIBILITY_CHANGE = 65536, + STRUCTURE_NOTIFY = 131072, + RESIZE_REDIRECT = 262144, + SUBSTRUCTURE_NOTIFY = 524288, + SUBSTRUCTURE_REDIRECT = 1048576, + FOCUS_CHANGE = 2097152, + PROPERTY_CHANGE = 4194304, + COLOR_MAP_CHANGE = 8388608, + OWNER_GRAB_BUTTON = 16777216 + } + + enum xcb_event_type : byte { + KEY_PRESS = 2, + KEY_RELEASE, + BUTTON_PRESS, + BUTTON_RELEASE, + MOTION_NOTIFY, + ENTER_NOTIFY, + LEAVE_NOTIFY, + FOCUS_IN, + FOCUS_OUT, + KEYMAP_NOTIFY, + EXPOSE, + GRAPHICS_EXPOSURE, + NO_EXPOSURE, + VISIBILITY_NOTIFY, + CREATE_NOTIFY, + DESTROY_NOTIFY, + UNMAP_NOTIFY, + MAP_NOTIFY, + MAP_REQUEST, + REPARENT_NOTIFY, + CONFIGURE_NOTIFY, + CONFIGURE_REQUEST, + GRAVITY_NOTIFY, + RESIZE_REQUEST, + CIRCULATE_NOTIFY, + CIRCULATE_REQUEST, + PROPERTY_NOTIFY, + SELECTION_CLEAR, + SELECTION_REQUEST, + SELECTION_NOTIFY, + COLORMAP_NOTIFY, + CLIENT_MESSAGE, + MAPPING_NOTIFY, + GE_GENERIC, + } + [Flags] + enum xcb_cw_t : uint { + BACK_PIXMAP = 1, + BACK_PIXEL = 2, + BORDER_PIXMAP = 4, + BORDER_PIXEL = 8, + BIT_GRAVITY = 16, + WIN_GRAVITY = 32, + BACKING_STORE = 64, + BACKING_PLANES = 128, + BACKING_PIXEL = 256, + OVERRIDE_REDIRECT = 512, + SAVE_UNDER = 1024, + EVENT_MASK = 2048, + DONT_PROPAGATE = 4096, + COLORMAP = 8192, + CURSOR = 16384 + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_generic_event_t{ + public xcb_event_type response_type; /**< Type of the response */ + public byte pad0; /**< Padding */ + public UInt16 sequence; /**< Sequence number */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 7)] + UInt32[] pad; + public UInt32 full_sequence; /**< full sequence */ + } + + [StructLayout(LayoutKind.Explicit, Size = 32)] + struct xcb_event_t{ + [FieldOffsetAttribute(0)] + public xcb_event_type response_type; + + [FieldOffsetAttribute(1)] + public byte detail; + [FieldOffsetAttribute(1)] + public xcb_keycode_t keycode; + [FieldOffsetAttribute(1)] + public xcb_button_t button; + + [FieldOffsetAttribute(2)] + public UInt16 sequence; + [FieldOffsetAttribute(4)] + public xcb_timestamp_t time; + [FieldOffsetAttribute(8)] + public xcb_window_t root; + [FieldOffsetAttribute(12)] + public xcb_window_t evt; + [FieldOffsetAttribute(16)] + public xcb_window_t child; + [FieldOffsetAttribute(20)] + public UInt16 root_x; + [FieldOffsetAttribute(22)] + public UInt16 root_y; + [FieldOffsetAttribute(24)] + public UInt16 event_x; + [FieldOffsetAttribute(26)] + public UInt16 event_y; + [FieldOffsetAttribute(28)] + public UInt16 state; + [FieldOffsetAttribute(30)] + public byte same_screen; + + [FieldOffsetAttribute(31)] + public byte same_screen_focus; + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_key_press_event_t { + public xcb_event_type response_type; + public xcb_keycode_t detail; + public UInt16 sequence; + public xcb_timestamp_t time; + public xcb_window_t root; + public xcb_window_t evt; + public xcb_window_t child; + public UInt16 root_x; + public UInt16 root_y; + public UInt16 event_x; + public UInt16 event_y; + public UInt16 state; + public byte same_screen; + byte pad0; + } + [StructLayout(LayoutKind.Sequential)] + struct xcb_button_press_event_t { + public xcb_event_type response_type; + public xcb_button_t detail; + public UInt16 sequence; + public xcb_timestamp_t time; + public xcb_window_t root; + public xcb_window_t evt; + public xcb_window_t child; + public UInt16 root_x; + public UInt16 root_y; + public UInt16 event_x; + public UInt16 event_y; + public UInt16 state; + public byte same_screen; + byte pad0; + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_motion_notify_event_t { + public xcb_event_type response_type; + public byte detail; + public UInt16 sequence; + public xcb_timestamp_t time; + public xcb_window_t root; + public xcb_window_t evt; + public xcb_window_t child; + public UInt16 root_x; + public UInt16 root_y; + public UInt16 event_x; + public UInt16 event_y; + public UInt16 state; + public byte same_screen; + byte pad0; + } + [StructLayout(LayoutKind.Sequential)] + struct xcb_iterator_t { + public IntPtr data; + public int rem; + public int index; + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_screen_t { + public xcb_window_t root; + public xcb_colormap_t default_colormap; + public UInt32 white_pixel; + public UInt32 black_pixel; + public UInt32 current_input_masks; + public UInt16 width_in_pixels; + public UInt16 height_in_pixels; + public UInt16 width_in_millimeters; + public UInt16 height_in_millimeters; + public UInt16 min_installed_maps; + public UInt16 max_installed_maps; + public xcb_visualid_t root_visual; + public byte backing_stores; + public byte save_unders; + public byte root_depth; + public byte allowed_depths_len; + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_visualtype_t { + public xcb_visualid_t visual_id; + public byte _class; + public byte bits_per_rgb_value; + public UInt16 colormap_entries; + public UInt32 red_mask; + public UInt32 green_mask; + public UInt32 blue_mask; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + byte[] pad; + } + + [StructLayout(LayoutKind.Sequential)] + struct xcb_generic_reply_t{ + public byte response_type; /**< Type of the response */ + byte pad0; /**< Padding */ + public UInt16 sequence; /**< Sequence number */ + public UInt32 length; /**< Length of the response */ + } + + enum xkb_keysym : uint { + NoSymbol = 0x000000, + VoidSymbol = 0xffffff, + BackSpace = 0xff08, + Tab = 0xff09, + Linefeed = 0xff0a, + Clear = 0xff0b, + Return = 0xff0d, + Pause = 0xff13, + Scroll_Lock = 0xff14, + Sys_Req = 0xff15, + Escape = 0xff1b, + Delete = 0xffff, + Multi_key = 0xff20, + Codeinput = 0xff37, + SingleCandidate = 0xff3c, + MultipleCandidate = 0xff3d, + PreviousCandidate = 0xff3e, + Kanji = 0xff21, + Muhenkan = 0xff22, + Henkan_Mode = 0xff23, + Henkan = 0xff23, + Romaji = 0xff24, + Hiragana = 0xff25, + Katakana = 0xff26, + Hiragana_Katakana = 0xff27, + Zenkaku = 0xff28, + Hankaku = 0xff29, + Zenkaku_Hankaku = 0xff2a, + Touroku = 0xff2b, + Massyo = 0xff2c, + Kana_Lock = 0xff2d, + Kana_Shift = 0xff2e, + Eisu_Shift = 0xff2f, + Eisu_toggle = 0xff30, + Kanji_Bangou = 0xff37, + Zen_Koho = 0xff3d, + Mae_Koho = 0xff3e, + Home = 0xff50, + Left = 0xff51, + Up = 0xff52, + Right = 0xff53, + Down = 0xff54, + Prior = 0xff55, + Page_Up = 0xff55, + Next = 0xff56, + Page_Down = 0xff56, + End = 0xff57, + Begin = 0xff58, + Select = 0xff60, + Print = 0xff61, + Execute = 0xff62, + Insert = 0xff63, + Undo = 0xff65, + Redo = 0xff66, + Menu = 0xff67, + Find = 0xff68, + Cancel = 0xff69, + Help = 0xff6a, + Break = 0xff6b, + Mode_switch = 0xff7e, + script_switch = 0xff7e, + Num_Lock = 0xff7f, + KP_Space = 0xff80, + KP_Tab = 0xff89, + KP_Enter = 0xff8d, + KP_F1 = 0xff91, + KP_F2 = 0xff92, + KP_F3 = 0xff93, + KP_F4 = 0xff94, + KP_Home = 0xff95, + KP_Left = 0xff96, + KP_Up = 0xff97, + KP_Right = 0xff98, + KP_Down = 0xff99, + KP_Prior = 0xff9a, + KP_Page_Up = 0xff9a, + KP_Next = 0xff9b, + KP_Page_Down = 0xff9b, + KP_End = 0xff9c, + KP_Begin = 0xff9d, + KP_Insert = 0xff9e, + KP_Delete = 0xff9f, + KP_Equal = 0xffbd, + KP_Multiply = 0xffaa, + KP_Add = 0xffab, + KP_Separator = 0xffac, + KP_Subtract = 0xffad, + KP_Decimal = 0xffae, + KP_Divide = 0xffaf, + KP_0 = 0xffb0, + KP_1 = 0xffb1, + KP_2 = 0xffb2, + KP_3 = 0xffb3, + KP_4 = 0xffb4, + KP_5 = 0xffb5, + KP_6 = 0xffb6, + KP_7 = 0xffb7, + KP_8 = 0xffb8, + KP_9 = 0xffb9, + F1 = 0xffbe, + F2 = 0xffbf, + F3 = 0xffc0, + F4 = 0xffc1, + F5 = 0xffc2, + F6 = 0xffc3, + F7 = 0xffc4, + F8 = 0xffc5, + F9 = 0xffc6, + F10 = 0xffc7, + F11 = 0xffc8, + L1 = 0xffc8, + F12 = 0xffc9, + L2 = 0xffc9, + F13 = 0xffca, + L3 = 0xffca, + F14 = 0xffcb, + L4 = 0xffcb, + F15 = 0xffcc, + L5 = 0xffcc, + F16 = 0xffcd, + L6 = 0xffcd, + F17 = 0xffce, + L7 = 0xffce, + F18 = 0xffcf, + L8 = 0xffcf, + F19 = 0xffd0, + L9 = 0xffd0, + F20 = 0xffd1, + L10 = 0xffd1, + F21 = 0xffd2, + R1 = 0xffd2, + F22 = 0xffd3, + R2 = 0xffd3, + F23 = 0xffd4, + R3 = 0xffd4, + F24 = 0xffd5, + R4 = 0xffd5, + F25 = 0xffd6, + R5 = 0xffd6, + F26 = 0xffd7, + R6 = 0xffd7, + F27 = 0xffd8, + R7 = 0xffd8, + F28 = 0xffd9, + R8 = 0xffd9, + F29 = 0xffda, + R9 = 0xffda, + F30 = 0xffdb, + R10 = 0xffdb, + F31 = 0xffdc, + R11 = 0xffdc, + F32 = 0xffdd, + R12 = 0xffdd, + F33 = 0xffde, + R13 = 0xffde, + F34 = 0xffdf, + R14 = 0xffdf, + F35 = 0xffe0, + R15 = 0xffe0, + Shift_L = 0xffe1, + Shift_R = 0xffe2, + Control_L = 0xffe3, + Control_R = 0xffe4, + Caps_Lock = 0xffe5, + Shift_Lock = 0xffe6, + Meta_L = 0xffe7, + Meta_R = 0xffe8, + Alt_L = 0xffe9, + Alt_R = 0xffea, + Super_L = 0xffeb, + Super_R = 0xffec, + Hyper_L = 0xffed, + Hyper_R = 0xffee, + ISO_Lock = 0xfe01, + ISO_Level2_Latch = 0xfe02, + ISO_Level3_Shift = 0xfe03, + ISO_Level3_Latch = 0xfe04, + ISO_Level3_Lock = 0xfe05, + ISO_Level5_Shift = 0xfe11, + ISO_Level5_Latch = 0xfe12, + ISO_Level5_Lock = 0xfe13, + ISO_Group_Shift = 0xff7e, + ISO_Group_Latch = 0xfe06, + ISO_Group_Lock = 0xfe07, + ISO_Next_Group = 0xfe08, + ISO_Next_Group_Lock = 0xfe09, + ISO_Prev_Group = 0xfe0a, + ISO_Prev_Group_Lock = 0xfe0b, + ISO_First_Group = 0xfe0c, + ISO_First_Group_Lock = 0xfe0d, + ISO_Last_Group = 0xfe0e, + ISO_Last_Group_Lock = 0xfe0f, + ISO_Left_Tab = 0xfe20, + ISO_Move_Line_Up = 0xfe21, + ISO_Move_Line_Down = 0xfe22, + ISO_Partial_Line_Up = 0xfe23, + ISO_Partial_Line_Down = 0xfe24, + ISO_Partial_Space_Left = 0xfe25, + ISO_Partial_Space_Right = 0xfe26, + ISO_Set_Margin_Left = 0xfe27, + ISO_Set_Margin_Right = 0xfe28, + ISO_Release_Margin_Left = 0xfe29, + ISO_Release_Margin_Right = 0xfe2a, + ISO_Release_Both_Margins = 0xfe2b, + ISO_Fast_Cursor_Left = 0xfe2c, + ISO_Fast_Cursor_Right = 0xfe2d, + ISO_Fast_Cursor_Up = 0xfe2e, + ISO_Fast_Cursor_Down = 0xfe2f, + ISO_Continuous_Underline = 0xfe30, + ISO_Discontinuous_Underline = 0xfe31, + ISO_Emphasize = 0xfe32, + ISO_Center_Object = 0xfe33, + ISO_Enter = 0xfe34, + dead_grave = 0xfe50, + dead_acute = 0xfe51, + dead_circumflex = 0xfe52, + dead_tilde = 0xfe53, + dead_perispomeni = 0xfe53, + dead_macron = 0xfe54, + dead_breve = 0xfe55, + dead_abovedot = 0xfe56, + dead_diaeresis = 0xfe57, + dead_abovering = 0xfe58, + dead_doubleacute = 0xfe59, + dead_caron = 0xfe5a, + dead_cedilla = 0xfe5b, + dead_ogonek = 0xfe5c, + dead_iota = 0xfe5d, + dead_voiced_sound = 0xfe5e, + dead_semivoiced_sound = 0xfe5f, + dead_belowdot = 0xfe60, + dead_hook = 0xfe61, + dead_horn = 0xfe62, + dead_stroke = 0xfe63, + dead_abovecomma = 0xfe64, + dead_psili = 0xfe64, + dead_abovereversedcomma = 0xfe65, + dead_dasia = 0xfe65, + dead_doublegrave = 0xfe66, + dead_belowring = 0xfe67, + dead_belowmacron = 0xfe68, + dead_belowcircumflex = 0xfe69, + dead_belowtilde = 0xfe6a, + dead_belowbreve = 0xfe6b, + dead_belowdiaeresis = 0xfe6c, + dead_invertedbreve = 0xfe6d, + dead_belowcomma = 0xfe6e, + dead_currency = 0xfe6f, + dead_lowline = 0xfe90, + dead_aboveverticalline = 0xfe91, + dead_belowverticalline = 0xfe92, + dead_longsolidusoverlay = 0xfe93, + dead_a = 0xfe80, + dead_A = 0xfe81, + dead_e = 0xfe82, + dead_E = 0xfe83, + dead_i = 0xfe84, + dead_I = 0xfe85, + dead_o = 0xfe86, + dead_O = 0xfe87, + dead_u = 0xfe88, + dead_U = 0xfe89, + dead_small_schwa = 0xfe8a, + dead_capital_schwa = 0xfe8b, + dead_greek = 0xfe8c, + First_Virtual_Screen = 0xfed0, + Prev_Virtual_Screen = 0xfed1, + Next_Virtual_Screen = 0xfed2, + Last_Virtual_Screen = 0xfed4, + Terminate_Server = 0xfed5, + AccessX_Enable = 0xfe70, + AccessX_Feedback_Enable = 0xfe71, + RepeatKeys_Enable = 0xfe72, + SlowKeys_Enable = 0xfe73, + BounceKeys_Enable = 0xfe74, + StickyKeys_Enable = 0xfe75, + MouseKeys_Enable = 0xfe76, + MouseKeys_Accel_Enable = 0xfe77, + Overlay1_Enable = 0xfe78, + Overlay2_Enable = 0xfe79, + AudibleBell_Enable = 0xfe7a, + Pointer_Left = 0xfee0, + Pointer_Right = 0xfee1, + Pointer_Up = 0xfee2, + Pointer_Down = 0xfee3, + Pointer_UpLeft = 0xfee4, + Pointer_UpRight = 0xfee5, + Pointer_DownLeft = 0xfee6, + Pointer_DownRight = 0xfee7, + Pointer_Button_Dflt = 0xfee8, + Pointer_Button1 = 0xfee9, + Pointer_Button2 = 0xfeea, + Pointer_Button3 = 0xfeeb, + Pointer_Button4 = 0xfeec, + Pointer_Button5 = 0xfeed, + Pointer_DblClick_Dflt = 0xfeee, + Pointer_DblClick1 = 0xfeef, + Pointer_DblClick2 = 0xfef0, + Pointer_DblClick3 = 0xfef1, + Pointer_DblClick4 = 0xfef2, + Pointer_DblClick5 = 0xfef3, + Pointer_Drag_Dflt = 0xfef4, + Pointer_Drag1 = 0xfef5, + Pointer_Drag2 = 0xfef6, + Pointer_Drag3 = 0xfef7, + Pointer_Drag4 = 0xfef8, + Pointer_Drag5 = 0xfefd, + Pointer_EnableKeys = 0xfef9, + Pointer_Accelerate = 0xfefa, + Pointer_DfltBtnNext = 0xfefb, + Pointer_DfltBtnPrev = 0xfefc, + ch = 0xfea0, + Ch = 0xfea1, + CH = 0xfea2, + c_h = 0xfea3, + C_h = 0xfea4, + C_H = 0xfea5, + key_3270_Duplicate = 0xfd01, + key_3270_FieldMark = 0xfd02, + key_3270_Right2 = 0xfd03, + key_3270_Left2 = 0xfd04, + key_3270_BackTab = 0xfd05, + key_3270_EraseEOF = 0xfd06, + key_3270_EraseInput = 0xfd07, + key_3270_Reset = 0xfd08, + key_3270_Quit = 0xfd09, + key_3270_PA1 = 0xfd0a, + key_3270_PA2 = 0xfd0b, + key_3270_PA3 = 0xfd0c, + key_3270_Test = 0xfd0d, + key_3270_Attn = 0xfd0e, + key_3270_CursorBlink = 0xfd0f, + key_3270_AltCursor = 0xfd10, + key_3270_KeyClick = 0xfd11, + key_3270_Jump = 0xfd12, + key_3270_Ident = 0xfd13, + key_3270_Rule = 0xfd14, + key_3270_Copy = 0xfd15, + key_3270_Play = 0xfd16, + key_3270_Setup = 0xfd17, + key_3270_Record = 0xfd18, + key_3270_ChangeScreen = 0xfd19, + key_3270_DeleteWord = 0xfd1a, + key_3270_ExSelect = 0xfd1b, + key_3270_CursorSelect = 0xfd1c, + key_3270_PrintScreen = 0xfd1d, + key_3270_Enter = 0xfd1e, + space = 0x0020, + exclam = 0x0021, + quotedbl = 0x0022, + numbersign = 0x0023, + dollar = 0x0024, + percent = 0x0025, + ampersand = 0x0026, + apostrophe = 0x0027, + quoteright = 0x0027, + parenleft = 0x0028, + parenright = 0x0029, + asterisk = 0x002a, + plus = 0x002b, + comma = 0x002c, + minus = 0x002d, + period = 0x002e, + slash = 0x002f, + key_0 = 0x0030, + key_1 = 0x0031, + key_2 = 0x0032, + key_3 = 0x0033, + key_4 = 0x0034, + key_5 = 0x0035, + key_6 = 0x0036, + key_7 = 0x0037, + key_8 = 0x0038, + key_9 = 0x0039, + colon = 0x003a, + semicolon = 0x003b, + less = 0x003c, + equal = 0x003d, + greater = 0x003e, + question = 0x003f, + at = 0x0040, + A = 0x0041, + B = 0x0042, + C = 0x0043, + D = 0x0044, + E = 0x0045, + F = 0x0046, + G = 0x0047, + H = 0x0048, + I = 0x0049, + J = 0x004a, + K = 0x004b, + L = 0x004c, + M = 0x004d, + N = 0x004e, + O = 0x004f, + P = 0x0050, + Q = 0x0051, + R = 0x0052, + S = 0x0053, + T = 0x0054, + U = 0x0055, + V = 0x0056, + W = 0x0057, + X = 0x0058, + Y = 0x0059, + Z = 0x005a, + bracketleft = 0x005b, + backslash = 0x005c, + bracketright = 0x005d, + asciicircum = 0x005e, + underscore = 0x005f, + grave = 0x0060, + quoteleft = 0x0060, + a = 0x0061, + b = 0x0062, + c = 0x0063, + d = 0x0064, + e = 0x0065, + f = 0x0066, + g = 0x0067, + h = 0x0068, + i = 0x0069, + j = 0x006a, + k = 0x006b, + l = 0x006c, + m = 0x006d, + n = 0x006e, + o = 0x006f, + p = 0x0070, + q = 0x0071, + r = 0x0072, + s = 0x0073, + t = 0x0074, + u = 0x0075, + v = 0x0076, + w = 0x0077, + x = 0x0078, + y = 0x0079, + z = 0x007a, + braceleft = 0x007b, + bar = 0x007c, + braceright = 0x007d, + asciitilde = 0x007e, + nobreakspace = 0x00a0, + exclamdown = 0x00a1, + cent = 0x00a2, + sterling = 0x00a3, + currency = 0x00a4, + yen = 0x00a5, + brokenbar = 0x00a6, + section = 0x00a7, + diaeresis = 0x00a8, + copyright = 0x00a9, + ordfeminine = 0x00aa, + guillemotleft = 0x00ab, + notsign = 0x00ac, + hyphen = 0x00ad, + registered = 0x00ae, + macron = 0x00af, + degree = 0x00b0, + plusminus = 0x00b1, + twosuperior = 0x00b2, + threesuperior = 0x00b3, + acute = 0x00b4, + mu = 0x00b5, + paragraph = 0x00b6, + periodcentered = 0x00b7, + cedilla = 0x00b8, + onesuperior = 0x00b9, + masculine = 0x00ba, + guillemotright = 0x00bb, + onequarter = 0x00bc, + onehalf = 0x00bd, + threequarters = 0x00be, + questiondown = 0x00bf, + Agrave = 0x00c0, + Aacute = 0x00c1, + Acircumflex = 0x00c2, + Atilde = 0x00c3, + Adiaeresis = 0x00c4, + Aring = 0x00c5, + AE = 0x00c6, + Ccedilla = 0x00c7, + Egrave = 0x00c8, + Eacute = 0x00c9, + Ecircumflex = 0x00ca, + Ediaeresis = 0x00cb, + Igrave = 0x00cc, + Iacute = 0x00cd, + Icircumflex = 0x00ce, + Idiaeresis = 0x00cf, + ETH = 0x00d0, + Eth = 0x00d0, + Ntilde = 0x00d1, + Ograve = 0x00d2, + Oacute = 0x00d3, + Ocircumflex = 0x00d4, + Otilde = 0x00d5, + Odiaeresis = 0x00d6, + multiply = 0x00d7, + Oslash = 0x00d8, + Ooblique = 0x00d8, + Ugrave = 0x00d9, + Uacute = 0x00da, + Ucircumflex = 0x00db, + Udiaeresis = 0x00dc, + Yacute = 0x00dd, + THORN = 0x00de, + Thorn = 0x00de, + ssharp = 0x00df, + agrave = 0x00e0, + aacute = 0x00e1, + acircumflex = 0x00e2, + atilde = 0x00e3, + adiaeresis = 0x00e4, + aring = 0x00e5, + ae = 0x00e6, + ccedilla = 0x00e7, + egrave = 0x00e8, + eacute = 0x00e9, + ecircumflex = 0x00ea, + ediaeresis = 0x00eb, + igrave = 0x00ec, + iacute = 0x00ed, + icircumflex = 0x00ee, + idiaeresis = 0x00ef, + eth = 0x00f0, + ntilde = 0x00f1, + ograve = 0x00f2, + oacute = 0x00f3, + ocircumflex = 0x00f4, + otilde = 0x00f5, + odiaeresis = 0x00f6, + division = 0x00f7, + oslash = 0x00f8, + ooblique = 0x00f8, + ugrave = 0x00f9, + uacute = 0x00fa, + ucircumflex = 0x00fb, + udiaeresis = 0x00fc, + yacute = 0x00fd, + thorn = 0x00fe, + ydiaeresis = 0x00ff, + Aogonek = 0x01a1, + breve = 0x01a2, + Lstroke = 0x01a3, + Lcaron = 0x01a5, + Sacute = 0x01a6, + Scaron = 0x01a9, + Scedilla = 0x01aa, + Tcaron = 0x01ab, + Zacute = 0x01ac, + Zcaron = 0x01ae, + Zabovedot = 0x01af, + aogonek = 0x01b1, + ogonek = 0x01b2, + lstroke = 0x01b3, + lcaron = 0x01b5, + sacute = 0x01b6, + caron = 0x01b7, + scaron = 0x01b9, + scedilla = 0x01ba, + tcaron = 0x01bb, + zacute = 0x01bc, + doubleacute = 0x01bd, + zcaron = 0x01be, + zabovedot = 0x01bf, + Racute = 0x01c0, + Abreve = 0x01c3, + Lacute = 0x01c5, + Cacute = 0x01c6, + Ccaron = 0x01c8, + Eogonek = 0x01ca, + Ecaron = 0x01cc, + Dcaron = 0x01cf, + Dstroke = 0x01d0, + Nacute = 0x01d1, + Ncaron = 0x01d2, + Odoubleacute = 0x01d5, + Rcaron = 0x01d8, + Uring = 0x01d9, + Udoubleacute = 0x01db, + Tcedilla = 0x01de, + racute = 0x01e0, + abreve = 0x01e3, + lacute = 0x01e5, + cacute = 0x01e6, + ccaron = 0x01e8, + eogonek = 0x01ea, + ecaron = 0x01ec, + dcaron = 0x01ef, + dstroke = 0x01f0, + nacute = 0x01f1, + ncaron = 0x01f2, + odoubleacute = 0x01f5, + rcaron = 0x01f8, + uring = 0x01f9, + udoubleacute = 0x01fb, + tcedilla = 0x01fe, + abovedot = 0x01ff, + Hstroke = 0x02a1, + Hcircumflex = 0x02a6, + Iabovedot = 0x02a9, + Gbreve = 0x02ab, + Jcircumflex = 0x02ac, + hstroke = 0x02b1, + hcircumflex = 0x02b6, + idotless = 0x02b9, + gbreve = 0x02bb, + jcircumflex = 0x02bc, + Cabovedot = 0x02c5, + Ccircumflex = 0x02c6, + Gabovedot = 0x02d5, + Gcircumflex = 0x02d8, + Ubreve = 0x02dd, + Scircumflex = 0x02de, + cabovedot = 0x02e5, + ccircumflex = 0x02e6, + gabovedot = 0x02f5, + gcircumflex = 0x02f8, + ubreve = 0x02fd, + scircumflex = 0x02fe, + kra = 0x03a2, + kappa = 0x03a2, + Rcedilla = 0x03a3, + Itilde = 0x03a5, + Lcedilla = 0x03a6, + Emacron = 0x03aa, + Gcedilla = 0x03ab, + Tslash = 0x03ac, + rcedilla = 0x03b3, + itilde = 0x03b5, + lcedilla = 0x03b6, + emacron = 0x03ba, + gcedilla = 0x03bb, + tslash = 0x03bc, + ENG = 0x03bd, + eng = 0x03bf, + Amacron = 0x03c0, + Iogonek = 0x03c7, + Eabovedot = 0x03cc, + Imacron = 0x03cf, + Ncedilla = 0x03d1, + Omacron = 0x03d2, + Kcedilla = 0x03d3, + Uogonek = 0x03d9, + Utilde = 0x03dd, + Umacron = 0x03de, + amacron = 0x03e0, + iogonek = 0x03e7, + eabovedot = 0x03ec, + imacron = 0x03ef, + ncedilla = 0x03f1, + omacron = 0x03f2, + kcedilla = 0x03f3, + uogonek = 0x03f9, + utilde = 0x03fd, + umacron = 0x03fe, + Wcircumflex = 0x1000174, + wcircumflex = 0x1000175, + Ycircumflex = 0x1000176, + ycircumflex = 0x1000177, + Babovedot = 0x1001e02, + babovedot = 0x1001e03, + Dabovedot = 0x1001e0a, + dabovedot = 0x1001e0b, + Fabovedot = 0x1001e1e, + fabovedot = 0x1001e1f, + Mabovedot = 0x1001e40, + mabovedot = 0x1001e41, + Pabovedot = 0x1001e56, + pabovedot = 0x1001e57, + Sabovedot = 0x1001e60, + sabovedot = 0x1001e61, + Tabovedot = 0x1001e6a, + tabovedot = 0x1001e6b, + Wgrave = 0x1001e80, + wgrave = 0x1001e81, + Wacute = 0x1001e82, + wacute = 0x1001e83, + Wdiaeresis = 0x1001e84, + wdiaeresis = 0x1001e85, + Ygrave = 0x1001ef2, + ygrave = 0x1001ef3, + OE = 0x13bc, + oe = 0x13bd, + Ydiaeresis = 0x13be, + overline = 0x047e, + kana_fullstop = 0x04a1, + kana_openingbracket = 0x04a2, + kana_closingbracket = 0x04a3, + kana_comma = 0x04a4, + kana_conjunctive = 0x04a5, + kana_middledot = 0x04a5, + kana_WO = 0x04a6, + kana_a = 0x04a7, + kana_i = 0x04a8, + kana_u = 0x04a9, + kana_e = 0x04aa, + kana_o = 0x04ab, + kana_ya = 0x04ac, + kana_yu = 0x04ad, + kana_yo = 0x04ae, + kana_tsu = 0x04af, + kana_tu = 0x04af, + prolongedsound = 0x04b0, + kana_A = 0x04b1, + kana_I = 0x04b2, + kana_U = 0x04b3, + kana_E = 0x04b4, + kana_O = 0x04b5, + kana_KA = 0x04b6, + kana_KI = 0x04b7, + kana_KU = 0x04b8, + kana_KE = 0x04b9, + kana_KO = 0x04ba, + kana_SA = 0x04bb, + kana_SHI = 0x04bc, + kana_SU = 0x04bd, + kana_SE = 0x04be, + kana_SO = 0x04bf, + kana_TA = 0x04c0, + kana_CHI = 0x04c1, + kana_TI = 0x04c1, + kana_TSU = 0x04c2, + kana_TU = 0x04c2, + kana_TE = 0x04c3, + kana_TO = 0x04c4, + kana_NA = 0x04c5, + kana_NI = 0x04c6, + kana_NU = 0x04c7, + kana_NE = 0x04c8, + kana_NO = 0x04c9, + kana_HA = 0x04ca, + kana_HI = 0x04cb, + kana_FU = 0x04cc, + kana_HU = 0x04cc, + kana_HE = 0x04cd, + kana_HO = 0x04ce, + kana_MA = 0x04cf, + kana_MI = 0x04d0, + kana_MU = 0x04d1, + kana_ME = 0x04d2, + kana_MO = 0x04d3, + kana_YA = 0x04d4, + kana_YU = 0x04d5, + kana_YO = 0x04d6, + kana_RA = 0x04d7, + kana_RI = 0x04d8, + kana_RU = 0x04d9, + kana_RE = 0x04da, + kana_RO = 0x04db, + kana_WA = 0x04dc, + kana_N = 0x04dd, + voicedsound = 0x04de, + semivoicedsound = 0x04df, + kana_switch = 0xff7e, + Farsi_0 = 0x10006f0, + Farsi_1 = 0x10006f1, + Farsi_2 = 0x10006f2, + Farsi_3 = 0x10006f3, + Farsi_4 = 0x10006f4, + Farsi_5 = 0x10006f5, + Farsi_6 = 0x10006f6, + Farsi_7 = 0x10006f7, + Farsi_8 = 0x10006f8, + Farsi_9 = 0x10006f9, + Arabic_percent = 0x100066a, + Arabic_superscript_alef = 0x1000670, + Arabic_tteh = 0x1000679, + Arabic_peh = 0x100067e, + Arabic_tcheh = 0x1000686, + Arabic_ddal = 0x1000688, + Arabic_rreh = 0x1000691, + Arabic_comma = 0x05ac, + Arabic_fullstop = 0x10006d4, + Arabic_0 = 0x1000660, + Arabic_1 = 0x1000661, + Arabic_2 = 0x1000662, + Arabic_3 = 0x1000663, + Arabic_4 = 0x1000664, + Arabic_5 = 0x1000665, + Arabic_6 = 0x1000666, + Arabic_7 = 0x1000667, + Arabic_8 = 0x1000668, + Arabic_9 = 0x1000669, + Arabic_semicolon = 0x05bb, + Arabic_question_mark = 0x05bf, + Arabic_hamza = 0x05c1, + Arabic_maddaonalef = 0x05c2, + Arabic_hamzaonalef = 0x05c3, + Arabic_hamzaonwaw = 0x05c4, + Arabic_hamzaunderalef = 0x05c5, + Arabic_hamzaonyeh = 0x05c6, + Arabic_alef = 0x05c7, + Arabic_beh = 0x05c8, + Arabic_tehmarbuta = 0x05c9, + Arabic_teh = 0x05ca, + Arabic_theh = 0x05cb, + Arabic_jeem = 0x05cc, + Arabic_hah = 0x05cd, + Arabic_khah = 0x05ce, + Arabic_dal = 0x05cf, + Arabic_thal = 0x05d0, + Arabic_ra = 0x05d1, + Arabic_zain = 0x05d2, + Arabic_seen = 0x05d3, + Arabic_sheen = 0x05d4, + Arabic_sad = 0x05d5, + Arabic_dad = 0x05d6, + Arabic_tah = 0x05d7, + Arabic_zah = 0x05d8, + Arabic_ain = 0x05d9, + Arabic_ghain = 0x05da, + Arabic_tatweel = 0x05e0, + Arabic_feh = 0x05e1, + Arabic_qaf = 0x05e2, + Arabic_kaf = 0x05e3, + Arabic_lam = 0x05e4, + Arabic_meem = 0x05e5, + Arabic_noon = 0x05e6, + Arabic_ha = 0x05e7, + Arabic_heh = 0x05e7, + Arabic_waw = 0x05e8, + Arabic_alefmaksura = 0x05e9, + Arabic_yeh = 0x05ea, + Arabic_fathatan = 0x05eb, + Arabic_dammatan = 0x05ec, + Arabic_kasratan = 0x05ed, + Arabic_fatha = 0x05ee, + Arabic_damma = 0x05ef, + Arabic_kasra = 0x05f0, + Arabic_shadda = 0x05f1, + Arabic_sukun = 0x05f2, + Arabic_madda_above = 0x1000653, + Arabic_hamza_above = 0x1000654, + Arabic_hamza_below = 0x1000655, + Arabic_jeh = 0x1000698, + Arabic_veh = 0x10006a4, + Arabic_keheh = 0x10006a9, + Arabic_gaf = 0x10006af, + Arabic_noon_ghunna = 0x10006ba, + Arabic_heh_doachashmee = 0x10006be, + Farsi_yeh = 0x10006cc, + Arabic_farsi_yeh = 0x10006cc, + Arabic_yeh_baree = 0x10006d2, + Arabic_heh_goal = 0x10006c1, + Arabic_switch = 0xff7e, + Cyrillic_GHE_bar = 0x1000492, + Cyrillic_ghe_bar = 0x1000493, + Cyrillic_ZHE_descender = 0x1000496, + Cyrillic_zhe_descender = 0x1000497, + Cyrillic_KA_descender = 0x100049a, + Cyrillic_ka_descender = 0x100049b, + Cyrillic_KA_vertstroke = 0x100049c, + Cyrillic_ka_vertstroke = 0x100049d, + Cyrillic_EN_descender = 0x10004a2, + Cyrillic_en_descender = 0x10004a3, + Cyrillic_U_straight = 0x10004ae, + Cyrillic_u_straight = 0x10004af, + Cyrillic_U_straight_bar = 0x10004b0, + Cyrillic_u_straight_bar = 0x10004b1, + Cyrillic_HA_descender = 0x10004b2, + Cyrillic_ha_descender = 0x10004b3, + Cyrillic_CHE_descender = 0x10004b6, + Cyrillic_che_descender = 0x10004b7, + Cyrillic_CHE_vertstroke = 0x10004b8, + Cyrillic_che_vertstroke = 0x10004b9, + Cyrillic_SHHA = 0x10004ba, + Cyrillic_shha = 0x10004bb, + Cyrillic_SCHWA = 0x10004d8, + Cyrillic_schwa = 0x10004d9, + Cyrillic_I_macron = 0x10004e2, + Cyrillic_i_macron = 0x10004e3, + Cyrillic_O_bar = 0x10004e8, + Cyrillic_o_bar = 0x10004e9, + Cyrillic_U_macron = 0x10004ee, + Cyrillic_u_macron = 0x10004ef, + Serbian_dje = 0x06a1, + Macedonia_gje = 0x06a2, + Cyrillic_io = 0x06a3, + Ukrainian_ie = 0x06a4, + Ukranian_je = 0x06a4, + Macedonia_dse = 0x06a5, + Ukrainian_i = 0x06a6, + Ukranian_i = 0x06a6, + Ukrainian_yi = 0x06a7, + Ukranian_yi = 0x06a7, + Cyrillic_je = 0x06a8, + Serbian_je = 0x06a8, + Cyrillic_lje = 0x06a9, + Serbian_lje = 0x06a9, + Cyrillic_nje = 0x06aa, + Serbian_nje = 0x06aa, + Serbian_tshe = 0x06ab, + Macedonia_kje = 0x06ac, + Ukrainian_ghe_with_upturn = 0x06ad, + Byelorussian_shortu = 0x06ae, + Cyrillic_dzhe = 0x06af, + Serbian_dze = 0x06af, + numerosign = 0x06b0, + Serbian_DJE = 0x06b1, + Macedonia_GJE = 0x06b2, + Cyrillic_IO = 0x06b3, + Ukrainian_IE = 0x06b4, + Ukranian_JE = 0x06b4, + Macedonia_DSE = 0x06b5, + Ukrainian_I = 0x06b6, + Ukranian_I = 0x06b6, + Ukrainian_YI = 0x06b7, + Ukranian_YI = 0x06b7, + Cyrillic_JE = 0x06b8, + Serbian_JE = 0x06b8, + Cyrillic_LJE = 0x06b9, + Serbian_LJE = 0x06b9, + Cyrillic_NJE = 0x06ba, + Serbian_NJE = 0x06ba, + Serbian_TSHE = 0x06bb, + Macedonia_KJE = 0x06bc, + Ukrainian_GHE_WITH_UPTURN = 0x06bd, + Byelorussian_SHORTU = 0x06be, + Cyrillic_DZHE = 0x06bf, + Serbian_DZE = 0x06bf, + Cyrillic_yu = 0x06c0, + Cyrillic_a = 0x06c1, + Cyrillic_be = 0x06c2, + Cyrillic_tse = 0x06c3, + Cyrillic_de = 0x06c4, + Cyrillic_ie = 0x06c5, + Cyrillic_ef = 0x06c6, + Cyrillic_ghe = 0x06c7, + Cyrillic_ha = 0x06c8, + Cyrillic_i = 0x06c9, + Cyrillic_shorti = 0x06ca, + Cyrillic_ka = 0x06cb, + Cyrillic_el = 0x06cc, + Cyrillic_em = 0x06cd, + Cyrillic_en = 0x06ce, + Cyrillic_o = 0x06cf, + Cyrillic_pe = 0x06d0, + Cyrillic_ya = 0x06d1, + Cyrillic_er = 0x06d2, + Cyrillic_es = 0x06d3, + Cyrillic_te = 0x06d4, + Cyrillic_u = 0x06d5, + Cyrillic_zhe = 0x06d6, + Cyrillic_ve = 0x06d7, + Cyrillic_softsign = 0x06d8, + Cyrillic_yeru = 0x06d9, + Cyrillic_ze = 0x06da, + Cyrillic_sha = 0x06db, + Cyrillic_e = 0x06dc, + Cyrillic_shcha = 0x06dd, + Cyrillic_che = 0x06de, + Cyrillic_hardsign = 0x06df, + Cyrillic_YU = 0x06e0, + Cyrillic_A = 0x06e1, + Cyrillic_BE = 0x06e2, + Cyrillic_TSE = 0x06e3, + Cyrillic_DE = 0x06e4, + Cyrillic_IE = 0x06e5, + Cyrillic_EF = 0x06e6, + Cyrillic_GHE = 0x06e7, + Cyrillic_HA = 0x06e8, + Cyrillic_I = 0x06e9, + Cyrillic_SHORTI = 0x06ea, + Cyrillic_KA = 0x06eb, + Cyrillic_EL = 0x06ec, + Cyrillic_EM = 0x06ed, + Cyrillic_EN = 0x06ee, + Cyrillic_O = 0x06ef, + Cyrillic_PE = 0x06f0, + Cyrillic_YA = 0x06f1, + Cyrillic_ER = 0x06f2, + Cyrillic_ES = 0x06f3, + Cyrillic_TE = 0x06f4, + Cyrillic_U = 0x06f5, + Cyrillic_ZHE = 0x06f6, + Cyrillic_VE = 0x06f7, + Cyrillic_SOFTSIGN = 0x06f8, + Cyrillic_YERU = 0x06f9, + Cyrillic_ZE = 0x06fa, + Cyrillic_SHA = 0x06fb, + Cyrillic_E = 0x06fc, + Cyrillic_SHCHA = 0x06fd, + Cyrillic_CHE = 0x06fe, + Cyrillic_HARDSIGN = 0x06ff, + Greek_ALPHAaccent = 0x07a1, + Greek_EPSILONaccent = 0x07a2, + Greek_ETAaccent = 0x07a3, + Greek_IOTAaccent = 0x07a4, + Greek_IOTAdieresis = 0x07a5, + Greek_IOTAdiaeresis = 0x07a5, + Greek_OMICRONaccent = 0x07a7, + Greek_UPSILONaccent = 0x07a8, + Greek_UPSILONdieresis = 0x07a9, + Greek_OMEGAaccent = 0x07ab, + Greek_accentdieresis = 0x07ae, + Greek_horizbar = 0x07af, + Greek_alphaaccent = 0x07b1, + Greek_epsilonaccent = 0x07b2, + Greek_etaaccent = 0x07b3, + Greek_iotaaccent = 0x07b4, + Greek_iotadieresis = 0x07b5, + Greek_iotaaccentdieresis = 0x07b6, + Greek_omicronaccent = 0x07b7, + Greek_upsilonaccent = 0x07b8, + Greek_upsilondieresis = 0x07b9, + Greek_upsilonaccentdieresis = 0x07ba, + Greek_omegaaccent = 0x07bb, + Greek_ALPHA = 0x07c1, + Greek_BETA = 0x07c2, + Greek_GAMMA = 0x07c3, + Greek_DELTA = 0x07c4, + Greek_EPSILON = 0x07c5, + Greek_ZETA = 0x07c6, + Greek_ETA = 0x07c7, + Greek_THETA = 0x07c8, + Greek_IOTA = 0x07c9, + Greek_KAPPA = 0x07ca, + Greek_LAMDA = 0x07cb, + Greek_LAMBDA = 0x07cb, + Greek_MU = 0x07cc, + Greek_NU = 0x07cd, + Greek_XI = 0x07ce, + Greek_OMICRON = 0x07cf, + Greek_PI = 0x07d0, + Greek_RHO = 0x07d1, + Greek_SIGMA = 0x07d2, + Greek_TAU = 0x07d4, + Greek_UPSILON = 0x07d5, + Greek_PHI = 0x07d6, + Greek_CHI = 0x07d7, + Greek_PSI = 0x07d8, + Greek_OMEGA = 0x07d9, + Greek_alpha = 0x07e1, + Greek_beta = 0x07e2, + Greek_gamma = 0x07e3, + Greek_delta = 0x07e4, + Greek_epsilon = 0x07e5, + Greek_zeta = 0x07e6, + Greek_eta = 0x07e7, + Greek_theta = 0x07e8, + Greek_iota = 0x07e9, + Greek_kappa = 0x07ea, + Greek_lamda = 0x07eb, + Greek_lambda = 0x07eb, + Greek_mu = 0x07ec, + Greek_nu = 0x07ed, + Greek_xi = 0x07ee, + Greek_omicron = 0x07ef, + Greek_pi = 0x07f0, + Greek_rho = 0x07f1, + Greek_sigma = 0x07f2, + Greek_finalsmallsigma = 0x07f3, + Greek_tau = 0x07f4, + Greek_upsilon = 0x07f5, + Greek_phi = 0x07f6, + Greek_chi = 0x07f7, + Greek_psi = 0x07f8, + Greek_omega = 0x07f9, + Greek_switch = 0xff7e, + leftradical = 0x08a1, + topleftradical = 0x08a2, + horizconnector = 0x08a3, + topintegral = 0x08a4, + botintegral = 0x08a5, + vertconnector = 0x08a6, + topleftsqbracket = 0x08a7, + botleftsqbracket = 0x08a8, + toprightsqbracket = 0x08a9, + botrightsqbracket = 0x08aa, + topleftparens = 0x08ab, + botleftparens = 0x08ac, + toprightparens = 0x08ad, + botrightparens = 0x08ae, + leftmiddlecurlybrace = 0x08af, + rightmiddlecurlybrace = 0x08b0, + topleftsummation = 0x08b1, + botleftsummation = 0x08b2, + topvertsummationconnector = 0x08b3, + botvertsummationconnector = 0x08b4, + toprightsummation = 0x08b5, + botrightsummation = 0x08b6, + rightmiddlesummation = 0x08b7, + lessthanequal = 0x08bc, + notequal = 0x08bd, + greaterthanequal = 0x08be, + integral = 0x08bf, + therefore = 0x08c0, + variation = 0x08c1, + infinity = 0x08c2, + nabla = 0x08c5, + approximate = 0x08c8, + similarequal = 0x08c9, + ifonlyif = 0x08cd, + implies = 0x08ce, + identical = 0x08cf, + radical = 0x08d6, + includedin = 0x08da, + includes = 0x08db, + intersection = 0x08dc, + union = 0x08dd, + logicaland = 0x08de, + logicalor = 0x08df, + partialderivative = 0x08ef, + function = 0x08f6, + leftarrow = 0x08fb, + uparrow = 0x08fc, + rightarrow = 0x08fd, + downarrow = 0x08fe, + blank = 0x09df, + soliddiamond = 0x09e0, + checkerboard = 0x09e1, + ht = 0x09e2, + ff = 0x09e3, + cr = 0x09e4, + lf = 0x09e5, + nl = 0x09e8, + vt = 0x09e9, + lowrightcorner = 0x09ea, + uprightcorner = 0x09eb, + upleftcorner = 0x09ec, + lowleftcorner = 0x09ed, + crossinglines = 0x09ee, + horizlinescan1 = 0x09ef, + horizlinescan3 = 0x09f0, + horizlinescan5 = 0x09f1, + horizlinescan7 = 0x09f2, + horizlinescan9 = 0x09f3, + leftt = 0x09f4, + rightt = 0x09f5, + bott = 0x09f6, + topt = 0x09f7, + vertbar = 0x09f8, + emspace = 0x0aa1, + enspace = 0x0aa2, + em3space = 0x0aa3, + em4space = 0x0aa4, + digitspace = 0x0aa5, + punctspace = 0x0aa6, + thinspace = 0x0aa7, + hairspace = 0x0aa8, + emdash = 0x0aa9, + endash = 0x0aaa, + signifblank = 0x0aac, + ellipsis = 0x0aae, + doubbaselinedot = 0x0aaf, + onethird = 0x0ab0, + twothirds = 0x0ab1, + onefifth = 0x0ab2, + twofifths = 0x0ab3, + threefifths = 0x0ab4, + fourfifths = 0x0ab5, + onesixth = 0x0ab6, + fivesixths = 0x0ab7, + careof = 0x0ab8, + figdash = 0x0abb, + leftanglebracket = 0x0abc, + decimalpoint = 0x0abd, + rightanglebracket = 0x0abe, + marker = 0x0abf, + oneeighth = 0x0ac3, + threeeighths = 0x0ac4, + fiveeighths = 0x0ac5, + seveneighths = 0x0ac6, + trademark = 0x0ac9, + signaturemark = 0x0aca, + trademarkincircle = 0x0acb, + leftopentriangle = 0x0acc, + rightopentriangle = 0x0acd, + emopencircle = 0x0ace, + emopenrectangle = 0x0acf, + leftsinglequotemark = 0x0ad0, + rightsinglequotemark = 0x0ad1, + leftdoublequotemark = 0x0ad2, + rightdoublequotemark = 0x0ad3, + prescription = 0x0ad4, + permille = 0x0ad5, + minutes = 0x0ad6, + seconds = 0x0ad7, + latincross = 0x0ad9, + hexagram = 0x0ada, + filledrectbullet = 0x0adb, + filledlefttribullet = 0x0adc, + filledrighttribullet = 0x0add, + emfilledcircle = 0x0ade, + emfilledrect = 0x0adf, + enopencircbullet = 0x0ae0, + enopensquarebullet = 0x0ae1, + openrectbullet = 0x0ae2, + opentribulletup = 0x0ae3, + opentribulletdown = 0x0ae4, + openstar = 0x0ae5, + enfilledcircbullet = 0x0ae6, + enfilledsqbullet = 0x0ae7, + filledtribulletup = 0x0ae8, + filledtribulletdown = 0x0ae9, + leftpointer = 0x0aea, + rightpointer = 0x0aeb, + club = 0x0aec, + diamond = 0x0aed, + heart = 0x0aee, + maltesecross = 0x0af0, + dagger = 0x0af1, + doubledagger = 0x0af2, + checkmark = 0x0af3, + ballotcross = 0x0af4, + musicalsharp = 0x0af5, + musicalflat = 0x0af6, + malesymbol = 0x0af7, + femalesymbol = 0x0af8, + telephone = 0x0af9, + telephonerecorder = 0x0afa, + phonographcopyright = 0x0afb, + caret = 0x0afc, + singlelowquotemark = 0x0afd, + doublelowquotemark = 0x0afe, + cursor = 0x0aff, + leftcaret = 0x0ba3, + rightcaret = 0x0ba6, + downcaret = 0x0ba8, + upcaret = 0x0ba9, + overbar = 0x0bc0, + downtack = 0x0bc2, + upshoe = 0x0bc3, + downstile = 0x0bc4, + underbar = 0x0bc6, + jot = 0x0bca, + quad = 0x0bcc, + uptack = 0x0bce, + circle = 0x0bcf, + upstile = 0x0bd3, + downshoe = 0x0bd6, + rightshoe = 0x0bd8, + leftshoe = 0x0bda, + lefttack = 0x0bdc, + righttack = 0x0bfc, + hebrew_doublelowline = 0x0cdf, + hebrew_aleph = 0x0ce0, + hebrew_bet = 0x0ce1, + hebrew_beth = 0x0ce1, + hebrew_gimel = 0x0ce2, + hebrew_gimmel = 0x0ce2, + hebrew_dalet = 0x0ce3, + hebrew_daleth = 0x0ce3, + hebrew_he = 0x0ce4, + hebrew_waw = 0x0ce5, + hebrew_zain = 0x0ce6, + hebrew_zayin = 0x0ce6, + hebrew_chet = 0x0ce7, + hebrew_het = 0x0ce7, + hebrew_tet = 0x0ce8, + hebrew_teth = 0x0ce8, + hebrew_yod = 0x0ce9, + hebrew_finalkaph = 0x0cea, + hebrew_kaph = 0x0ceb, + hebrew_lamed = 0x0cec, + hebrew_finalmem = 0x0ced, + hebrew_mem = 0x0cee, + hebrew_finalnun = 0x0cef, + hebrew_nun = 0x0cf0, + hebrew_samech = 0x0cf1, + hebrew_samekh = 0x0cf1, + hebrew_ayin = 0x0cf2, + hebrew_finalpe = 0x0cf3, + hebrew_pe = 0x0cf4, + hebrew_finalzade = 0x0cf5, + hebrew_finalzadi = 0x0cf5, + hebrew_zade = 0x0cf6, + hebrew_zadi = 0x0cf6, + hebrew_qoph = 0x0cf7, + hebrew_kuf = 0x0cf7, + hebrew_resh = 0x0cf8, + hebrew_shin = 0x0cf9, + hebrew_taw = 0x0cfa, + hebrew_taf = 0x0cfa, + Hebrew_switch = 0xff7e, + Thai_kokai = 0x0da1, + Thai_khokhai = 0x0da2, + Thai_khokhuat = 0x0da3, + Thai_khokhwai = 0x0da4, + Thai_khokhon = 0x0da5, + Thai_khorakhang = 0x0da6, + Thai_ngongu = 0x0da7, + Thai_chochan = 0x0da8, + Thai_choching = 0x0da9, + Thai_chochang = 0x0daa, + Thai_soso = 0x0dab, + Thai_chochoe = 0x0dac, + Thai_yoying = 0x0dad, + Thai_dochada = 0x0dae, + Thai_topatak = 0x0daf, + Thai_thothan = 0x0db0, + Thai_thonangmontho = 0x0db1, + Thai_thophuthao = 0x0db2, + Thai_nonen = 0x0db3, + Thai_dodek = 0x0db4, + Thai_totao = 0x0db5, + Thai_thothung = 0x0db6, + Thai_thothahan = 0x0db7, + Thai_thothong = 0x0db8, + Thai_nonu = 0x0db9, + Thai_bobaimai = 0x0dba, + Thai_popla = 0x0dbb, + Thai_phophung = 0x0dbc, + Thai_fofa = 0x0dbd, + Thai_phophan = 0x0dbe, + Thai_fofan = 0x0dbf, + Thai_phosamphao = 0x0dc0, + Thai_moma = 0x0dc1, + Thai_yoyak = 0x0dc2, + Thai_rorua = 0x0dc3, + Thai_ru = 0x0dc4, + Thai_loling = 0x0dc5, + Thai_lu = 0x0dc6, + Thai_wowaen = 0x0dc7, + Thai_sosala = 0x0dc8, + Thai_sorusi = 0x0dc9, + Thai_sosua = 0x0dca, + Thai_hohip = 0x0dcb, + Thai_lochula = 0x0dcc, + Thai_oang = 0x0dcd, + Thai_honokhuk = 0x0dce, + Thai_paiyannoi = 0x0dcf, + Thai_saraa = 0x0dd0, + Thai_maihanakat = 0x0dd1, + Thai_saraaa = 0x0dd2, + Thai_saraam = 0x0dd3, + Thai_sarai = 0x0dd4, + Thai_saraii = 0x0dd5, + Thai_saraue = 0x0dd6, + Thai_sarauee = 0x0dd7, + Thai_sarau = 0x0dd8, + Thai_sarauu = 0x0dd9, + Thai_phinthu = 0x0dda, + Thai_maihanakat_maitho = 0x0dde, + Thai_baht = 0x0ddf, + Thai_sarae = 0x0de0, + Thai_saraae = 0x0de1, + Thai_sarao = 0x0de2, + Thai_saraaimaimuan = 0x0de3, + Thai_saraaimaimalai = 0x0de4, + Thai_lakkhangyao = 0x0de5, + Thai_maiyamok = 0x0de6, + Thai_maitaikhu = 0x0de7, + Thai_maiek = 0x0de8, + Thai_maitho = 0x0de9, + Thai_maitri = 0x0dea, + Thai_maichattawa = 0x0deb, + Thai_thanthakhat = 0x0dec, + Thai_nikhahit = 0x0ded, + Thai_leksun = 0x0df0, + Thai_leknung = 0x0df1, + Thai_leksong = 0x0df2, + Thai_leksam = 0x0df3, + Thai_leksi = 0x0df4, + Thai_lekha = 0x0df5, + Thai_lekhok = 0x0df6, + Thai_lekchet = 0x0df7, + Thai_lekpaet = 0x0df8, + Thai_lekkao = 0x0df9, + Hangul = 0xff31, + Hangul_Start = 0xff32, + Hangul_End = 0xff33, + Hangul_Hanja = 0xff34, + Hangul_Jamo = 0xff35, + Hangul_Romaja = 0xff36, + Hangul_Codeinput = 0xff37, + Hangul_Jeonja = 0xff38, + Hangul_Banja = 0xff39, + Hangul_PreHanja = 0xff3a, + Hangul_PostHanja = 0xff3b, + Hangul_SingleCandidate = 0xff3c, + Hangul_MultipleCandidate = 0xff3d, + Hangul_PreviousCandidate = 0xff3e, + Hangul_Special = 0xff3f, + Hangul_switch = 0xff7e, + Hangul_Kiyeog = 0x0ea1, + Hangul_SsangKiyeog = 0x0ea2, + Hangul_KiyeogSios = 0x0ea3, + Hangul_Nieun = 0x0ea4, + Hangul_NieunJieuj = 0x0ea5, + Hangul_NieunHieuh = 0x0ea6, + Hangul_Dikeud = 0x0ea7, + Hangul_SsangDikeud = 0x0ea8, + Hangul_Rieul = 0x0ea9, + Hangul_RieulKiyeog = 0x0eaa, + Hangul_RieulMieum = 0x0eab, + Hangul_RieulPieub = 0x0eac, + Hangul_RieulSios = 0x0ead, + Hangul_RieulTieut = 0x0eae, + Hangul_RieulPhieuf = 0x0eaf, + Hangul_RieulHieuh = 0x0eb0, + Hangul_Mieum = 0x0eb1, + Hangul_Pieub = 0x0eb2, + Hangul_SsangPieub = 0x0eb3, + Hangul_PieubSios = 0x0eb4, + Hangul_Sios = 0x0eb5, + Hangul_SsangSios = 0x0eb6, + Hangul_Ieung = 0x0eb7, + Hangul_Jieuj = 0x0eb8, + Hangul_SsangJieuj = 0x0eb9, + Hangul_Cieuc = 0x0eba, + Hangul_Khieuq = 0x0ebb, + Hangul_Tieut = 0x0ebc, + Hangul_Phieuf = 0x0ebd, + Hangul_Hieuh = 0x0ebe, + Hangul_A = 0x0ebf, + Hangul_AE = 0x0ec0, + Hangul_YA = 0x0ec1, + Hangul_YAE = 0x0ec2, + Hangul_EO = 0x0ec3, + Hangul_E = 0x0ec4, + Hangul_YEO = 0x0ec5, + Hangul_YE = 0x0ec6, + Hangul_O = 0x0ec7, + Hangul_WA = 0x0ec8, + Hangul_WAE = 0x0ec9, + Hangul_OE = 0x0eca, + Hangul_YO = 0x0ecb, + Hangul_U = 0x0ecc, + Hangul_WEO = 0x0ecd, + Hangul_WE = 0x0ece, + Hangul_WI = 0x0ecf, + Hangul_YU = 0x0ed0, + Hangul_EU = 0x0ed1, + Hangul_YI = 0x0ed2, + Hangul_I = 0x0ed3, + Hangul_J_Kiyeog = 0x0ed4, + Hangul_J_SsangKiyeog = 0x0ed5, + Hangul_J_KiyeogSios = 0x0ed6, + Hangul_J_Nieun = 0x0ed7, + Hangul_J_NieunJieuj = 0x0ed8, + Hangul_J_NieunHieuh = 0x0ed9, + Hangul_J_Dikeud = 0x0eda, + Hangul_J_Rieul = 0x0edb, + Hangul_J_RieulKiyeog = 0x0edc, + Hangul_J_RieulMieum = 0x0edd, + Hangul_J_RieulPieub = 0x0ede, + Hangul_J_RieulSios = 0x0edf, + Hangul_J_RieulTieut = 0x0ee0, + Hangul_J_RieulPhieuf = 0x0ee1, + Hangul_J_RieulHieuh = 0x0ee2, + Hangul_J_Mieum = 0x0ee3, + Hangul_J_Pieub = 0x0ee4, + Hangul_J_PieubSios = 0x0ee5, + Hangul_J_Sios = 0x0ee6, + Hangul_J_SsangSios = 0x0ee7, + Hangul_J_Ieung = 0x0ee8, + Hangul_J_Jieuj = 0x0ee9, + Hangul_J_Cieuc = 0x0eea, + Hangul_J_Khieuq = 0x0eeb, + Hangul_J_Tieut = 0x0eec, + Hangul_J_Phieuf = 0x0eed, + Hangul_J_Hieuh = 0x0eee, + Hangul_RieulYeorinHieuh = 0x0eef, + Hangul_SunkyeongeumMieum = 0x0ef0, + Hangul_SunkyeongeumPieub = 0x0ef1, + Hangul_PanSios = 0x0ef2, + Hangul_KkogjiDalrinIeung = 0x0ef3, + Hangul_SunkyeongeumPhieuf = 0x0ef4, + Hangul_YeorinHieuh = 0x0ef5, + Hangul_AraeA = 0x0ef6, + Hangul_AraeAE = 0x0ef7, + Hangul_J_PanSios = 0x0ef8, + Hangul_J_KkogjiDalrinIeung = 0x0ef9, + Hangul_J_YeorinHieuh = 0x0efa, + Korean_Won = 0x0eff, + Armenian_ligature_ew = 0x1000587, + Armenian_full_stop = 0x1000589, + Armenian_verjaket = 0x1000589, + Armenian_separation_mark = 0x100055d, + Armenian_but = 0x100055d, + Armenian_hyphen = 0x100058a, + Armenian_yentamna = 0x100058a, + Armenian_exclam = 0x100055c, + Armenian_amanak = 0x100055c, + Armenian_accent = 0x100055b, + Armenian_shesht = 0x100055b, + Armenian_question = 0x100055e, + Armenian_paruyk = 0x100055e, + Armenian_AYB = 0x1000531, + Armenian_ayb = 0x1000561, + Armenian_BEN = 0x1000532, + Armenian_ben = 0x1000562, + Armenian_GIM = 0x1000533, + Armenian_gim = 0x1000563, + Armenian_DA = 0x1000534, + Armenian_da = 0x1000564, + Armenian_YECH = 0x1000535, + Armenian_yech = 0x1000565, + Armenian_ZA = 0x1000536, + Armenian_za = 0x1000566, + Armenian_E = 0x1000537, + Armenian_e = 0x1000567, + Armenian_AT = 0x1000538, + Armenian_at = 0x1000568, + Armenian_TO = 0x1000539, + Armenian_to = 0x1000569, + Armenian_ZHE = 0x100053a, + Armenian_zhe = 0x100056a, + Armenian_INI = 0x100053b, + Armenian_ini = 0x100056b, + Armenian_LYUN = 0x100053c, + Armenian_lyun = 0x100056c, + Armenian_KHE = 0x100053d, + Armenian_khe = 0x100056d, + Armenian_TSA = 0x100053e, + Armenian_tsa = 0x100056e, + Armenian_KEN = 0x100053f, + Armenian_ken = 0x100056f, + Armenian_HO = 0x1000540, + Armenian_ho = 0x1000570, + Armenian_DZA = 0x1000541, + Armenian_dza = 0x1000571, + Armenian_GHAT = 0x1000542, + Armenian_ghat = 0x1000572, + Armenian_TCHE = 0x1000543, + Armenian_tche = 0x1000573, + Armenian_MEN = 0x1000544, + Armenian_men = 0x1000574, + Armenian_HI = 0x1000545, + Armenian_hi = 0x1000575, + Armenian_NU = 0x1000546, + Armenian_nu = 0x1000576, + Armenian_SHA = 0x1000547, + Armenian_sha = 0x1000577, + Armenian_VO = 0x1000548, + Armenian_vo = 0x1000578, + Armenian_CHA = 0x1000549, + Armenian_cha = 0x1000579, + Armenian_PE = 0x100054a, + Armenian_pe = 0x100057a, + Armenian_JE = 0x100054b, + Armenian_je = 0x100057b, + Armenian_RA = 0x100054c, + Armenian_ra = 0x100057c, + Armenian_SE = 0x100054d, + Armenian_se = 0x100057d, + Armenian_VEV = 0x100054e, + Armenian_vev = 0x100057e, + Armenian_TYUN = 0x100054f, + Armenian_tyun = 0x100057f, + Armenian_RE = 0x1000550, + Armenian_re = 0x1000580, + Armenian_TSO = 0x1000551, + Armenian_tso = 0x1000581, + Armenian_VYUN = 0x1000552, + Armenian_vyun = 0x1000582, + Armenian_PYUR = 0x1000553, + Armenian_pyur = 0x1000583, + Armenian_KE = 0x1000554, + Armenian_ke = 0x1000584, + Armenian_O = 0x1000555, + Armenian_o = 0x1000585, + Armenian_FE = 0x1000556, + Armenian_fe = 0x1000586, + Armenian_apostrophe = 0x100055a, + Georgian_an = 0x10010d0, + Georgian_ban = 0x10010d1, + Georgian_gan = 0x10010d2, + Georgian_don = 0x10010d3, + Georgian_en = 0x10010d4, + Georgian_vin = 0x10010d5, + Georgian_zen = 0x10010d6, + Georgian_tan = 0x10010d7, + Georgian_in = 0x10010d8, + Georgian_kan = 0x10010d9, + Georgian_las = 0x10010da, + Georgian_man = 0x10010db, + Georgian_nar = 0x10010dc, + Georgian_on = 0x10010dd, + Georgian_par = 0x10010de, + Georgian_zhar = 0x10010df, + Georgian_rae = 0x10010e0, + Georgian_san = 0x10010e1, + Georgian_tar = 0x10010e2, + Georgian_un = 0x10010e3, + Georgian_phar = 0x10010e4, + Georgian_khar = 0x10010e5, + Georgian_ghan = 0x10010e6, + Georgian_qar = 0x10010e7, + Georgian_shin = 0x10010e8, + Georgian_chin = 0x10010e9, + Georgian_can = 0x10010ea, + Georgian_jil = 0x10010eb, + Georgian_cil = 0x10010ec, + Georgian_char = 0x10010ed, + Georgian_xan = 0x10010ee, + Georgian_jhan = 0x10010ef, + Georgian_hae = 0x10010f0, + Georgian_he = 0x10010f1, + Georgian_hie = 0x10010f2, + Georgian_we = 0x10010f3, + Georgian_har = 0x10010f4, + Georgian_hoe = 0x10010f5, + Georgian_fi = 0x10010f6, + Xabovedot = 0x1001e8a, + Ibreve = 0x100012c, + Zstroke = 0x10001b5, + Gcaron = 0x10001e6, + Ocaron = 0x10001d1, + Obarred = 0x100019f, + xabovedot = 0x1001e8b, + ibreve = 0x100012d, + zstroke = 0x10001b6, + gcaron = 0x10001e7, + ocaron = 0x10001d2, + obarred = 0x1000275, + SCHWA = 0x100018f, + schwa = 0x1000259, + EZH = 0x10001b7, + ezh = 0x1000292, + Lbelowdot = 0x1001e36, + lbelowdot = 0x1001e37, + Abelowdot = 0x1001ea0, + abelowdot = 0x1001ea1, + Ahook = 0x1001ea2, + ahook = 0x1001ea3, + Acircumflexacute = 0x1001ea4, + acircumflexacute = 0x1001ea5, + Acircumflexgrave = 0x1001ea6, + acircumflexgrave = 0x1001ea7, + Acircumflexhook = 0x1001ea8, + acircumflexhook = 0x1001ea9, + Acircumflextilde = 0x1001eaa, + acircumflextilde = 0x1001eab, + Acircumflexbelowdot = 0x1001eac, + acircumflexbelowdot = 0x1001ead, + Abreveacute = 0x1001eae, + abreveacute = 0x1001eaf, + Abrevegrave = 0x1001eb0, + abrevegrave = 0x1001eb1, + Abrevehook = 0x1001eb2, + abrevehook = 0x1001eb3, + Abrevetilde = 0x1001eb4, + abrevetilde = 0x1001eb5, + Abrevebelowdot = 0x1001eb6, + abrevebelowdot = 0x1001eb7, + Ebelowdot = 0x1001eb8, + ebelowdot = 0x1001eb9, + Ehook = 0x1001eba, + ehook = 0x1001ebb, + Etilde = 0x1001ebc, + etilde = 0x1001ebd, + Ecircumflexacute = 0x1001ebe, + ecircumflexacute = 0x1001ebf, + Ecircumflexgrave = 0x1001ec0, + ecircumflexgrave = 0x1001ec1, + Ecircumflexhook = 0x1001ec2, + ecircumflexhook = 0x1001ec3, + Ecircumflextilde = 0x1001ec4, + ecircumflextilde = 0x1001ec5, + Ecircumflexbelowdot = 0x1001ec6, + ecircumflexbelowdot = 0x1001ec7, + Ihook = 0x1001ec8, + ihook = 0x1001ec9, + Ibelowdot = 0x1001eca, + ibelowdot = 0x1001ecb, + Obelowdot = 0x1001ecc, + obelowdot = 0x1001ecd, + Ohook = 0x1001ece, + ohook = 0x1001ecf, + Ocircumflexacute = 0x1001ed0, + ocircumflexacute = 0x1001ed1, + Ocircumflexgrave = 0x1001ed2, + ocircumflexgrave = 0x1001ed3, + Ocircumflexhook = 0x1001ed4, + ocircumflexhook = 0x1001ed5, + Ocircumflextilde = 0x1001ed6, + ocircumflextilde = 0x1001ed7, + Ocircumflexbelowdot = 0x1001ed8, + ocircumflexbelowdot = 0x1001ed9, + Ohornacute = 0x1001eda, + ohornacute = 0x1001edb, + Ohorngrave = 0x1001edc, + ohorngrave = 0x1001edd, + Ohornhook = 0x1001ede, + ohornhook = 0x1001edf, + Ohorntilde = 0x1001ee0, + ohorntilde = 0x1001ee1, + Ohornbelowdot = 0x1001ee2, + ohornbelowdot = 0x1001ee3, + Ubelowdot = 0x1001ee4, + ubelowdot = 0x1001ee5, + Uhook = 0x1001ee6, + uhook = 0x1001ee7, + Uhornacute = 0x1001ee8, + uhornacute = 0x1001ee9, + Uhorngrave = 0x1001eea, + uhorngrave = 0x1001eeb, + Uhornhook = 0x1001eec, + uhornhook = 0x1001eed, + Uhorntilde = 0x1001eee, + uhorntilde = 0x1001eef, + Uhornbelowdot = 0x1001ef0, + uhornbelowdot = 0x1001ef1, + Ybelowdot = 0x1001ef4, + ybelowdot = 0x1001ef5, + Yhook = 0x1001ef6, + yhook = 0x1001ef7, + Ytilde = 0x1001ef8, + ytilde = 0x1001ef9, + Ohorn = 0x10001a0, + ohorn = 0x10001a1, + Uhorn = 0x10001af, + uhorn = 0x10001b0, + EcuSign = 0x10020a0, + ColonSign = 0x10020a1, + CruzeiroSign = 0x10020a2, + FFrancSign = 0x10020a3, + LiraSign = 0x10020a4, + MillSign = 0x10020a5, + NairaSign = 0x10020a6, + PesetaSign = 0x10020a7, + RupeeSign = 0x10020a8, + WonSign = 0x10020a9, + NewSheqelSign = 0x10020aa, + DongSign = 0x10020ab, + EuroSign = 0x20ac, + zerosuperior = 0x1002070, + foursuperior = 0x1002074, + fivesuperior = 0x1002075, + sixsuperior = 0x1002076, + sevensuperior = 0x1002077, + eightsuperior = 0x1002078, + ninesuperior = 0x1002079, + zerosubscript = 0x1002080, + onesubscript = 0x1002081, + twosubscript = 0x1002082, + threesubscript = 0x1002083, + foursubscript = 0x1002084, + fivesubscript = 0x1002085, + sixsubscript = 0x1002086, + sevensubscript = 0x1002087, + eightsubscript = 0x1002088, + ninesubscript = 0x1002089, + partdifferential = 0x1002202, + emptyset = 0x1002205, + elementof = 0x1002208, + notelementof = 0x1002209, + containsas = 0x100220B, + squareroot = 0x100221A, + cuberoot = 0x100221B, + fourthroot = 0x100221C, + dintegral = 0x100222C, + tintegral = 0x100222D, + because = 0x1002235, + approxeq = 0x1002248, + notapproxeq = 0x1002247, + notidentical = 0x1002262, + stricteq = 0x1002263, + braille_dot_1 = 0xfff1, + braille_dot_2 = 0xfff2, + braille_dot_3 = 0xfff3, + braille_dot_4 = 0xfff4, + braille_dot_5 = 0xfff5, + braille_dot_6 = 0xfff6, + braille_dot_7 = 0xfff7, + braille_dot_8 = 0xfff8, + braille_dot_9 = 0xfff9, + braille_dot_10 = 0xfffa, + braille_blank = 0x1002800, + braille_dots_1 = 0x1002801, + braille_dots_2 = 0x1002802, + braille_dots_12 = 0x1002803, + braille_dots_3 = 0x1002804, + braille_dots_13 = 0x1002805, + braille_dots_23 = 0x1002806, + braille_dots_123 = 0x1002807, + braille_dots_4 = 0x1002808, + braille_dots_14 = 0x1002809, + braille_dots_24 = 0x100280a, + braille_dots_124 = 0x100280b, + braille_dots_34 = 0x100280c, + braille_dots_134 = 0x100280d, + braille_dots_234 = 0x100280e, + braille_dots_1234 = 0x100280f, + braille_dots_5 = 0x1002810, + braille_dots_15 = 0x1002811, + braille_dots_25 = 0x1002812, + braille_dots_125 = 0x1002813, + braille_dots_35 = 0x1002814, + braille_dots_135 = 0x1002815, + braille_dots_235 = 0x1002816, + braille_dots_1235 = 0x1002817, + braille_dots_45 = 0x1002818, + braille_dots_145 = 0x1002819, + braille_dots_245 = 0x100281a, + braille_dots_1245 = 0x100281b, + braille_dots_345 = 0x100281c, + braille_dots_1345 = 0x100281d, + braille_dots_2345 = 0x100281e, + braille_dots_12345 = 0x100281f, + braille_dots_6 = 0x1002820, + braille_dots_16 = 0x1002821, + braille_dots_26 = 0x1002822, + braille_dots_126 = 0x1002823, + braille_dots_36 = 0x1002824, + braille_dots_136 = 0x1002825, + braille_dots_236 = 0x1002826, + braille_dots_1236 = 0x1002827, + braille_dots_46 = 0x1002828, + braille_dots_146 = 0x1002829, + braille_dots_246 = 0x100282a, + braille_dots_1246 = 0x100282b, + braille_dots_346 = 0x100282c, + braille_dots_1346 = 0x100282d, + braille_dots_2346 = 0x100282e, + braille_dots_12346 = 0x100282f, + braille_dots_56 = 0x1002830, + braille_dots_156 = 0x1002831, + braille_dots_256 = 0x1002832, + braille_dots_1256 = 0x1002833, + braille_dots_356 = 0x1002834, + braille_dots_1356 = 0x1002835, + braille_dots_2356 = 0x1002836, + braille_dots_12356 = 0x1002837, + braille_dots_456 = 0x1002838, + braille_dots_1456 = 0x1002839, + braille_dots_2456 = 0x100283a, + braille_dots_12456 = 0x100283b, + braille_dots_3456 = 0x100283c, + braille_dots_13456 = 0x100283d, + braille_dots_23456 = 0x100283e, + braille_dots_123456 = 0x100283f, + braille_dots_7 = 0x1002840, + braille_dots_17 = 0x1002841, + braille_dots_27 = 0x1002842, + braille_dots_127 = 0x1002843, + braille_dots_37 = 0x1002844, + braille_dots_137 = 0x1002845, + braille_dots_237 = 0x1002846, + braille_dots_1237 = 0x1002847, + braille_dots_47 = 0x1002848, + braille_dots_147 = 0x1002849, + braille_dots_247 = 0x100284a, + braille_dots_1247 = 0x100284b, + braille_dots_347 = 0x100284c, + braille_dots_1347 = 0x100284d, + braille_dots_2347 = 0x100284e, + braille_dots_12347 = 0x100284f, + braille_dots_57 = 0x1002850, + braille_dots_157 = 0x1002851, + braille_dots_257 = 0x1002852, + braille_dots_1257 = 0x1002853, + braille_dots_357 = 0x1002854, + braille_dots_1357 = 0x1002855, + braille_dots_2357 = 0x1002856, + braille_dots_12357 = 0x1002857, + braille_dots_457 = 0x1002858, + braille_dots_1457 = 0x1002859, + braille_dots_2457 = 0x100285a, + braille_dots_12457 = 0x100285b, + braille_dots_3457 = 0x100285c, + braille_dots_13457 = 0x100285d, + braille_dots_23457 = 0x100285e, + braille_dots_123457 = 0x100285f, + braille_dots_67 = 0x1002860, + braille_dots_167 = 0x1002861, + braille_dots_267 = 0x1002862, + braille_dots_1267 = 0x1002863, + braille_dots_367 = 0x1002864, + braille_dots_1367 = 0x1002865, + braille_dots_2367 = 0x1002866, + braille_dots_12367 = 0x1002867, + braille_dots_467 = 0x1002868, + braille_dots_1467 = 0x1002869, + braille_dots_2467 = 0x100286a, + braille_dots_12467 = 0x100286b, + braille_dots_3467 = 0x100286c, + braille_dots_13467 = 0x100286d, + braille_dots_23467 = 0x100286e, + braille_dots_123467 = 0x100286f, + braille_dots_567 = 0x1002870, + braille_dots_1567 = 0x1002871, + braille_dots_2567 = 0x1002872, + braille_dots_12567 = 0x1002873, + braille_dots_3567 = 0x1002874, + braille_dots_13567 = 0x1002875, + braille_dots_23567 = 0x1002876, + braille_dots_123567 = 0x1002877, + braille_dots_4567 = 0x1002878, + braille_dots_14567 = 0x1002879, + braille_dots_24567 = 0x100287a, + braille_dots_124567 = 0x100287b, + braille_dots_34567 = 0x100287c, + braille_dots_134567 = 0x100287d, + braille_dots_234567 = 0x100287e, + braille_dots_1234567 = 0x100287f, + braille_dots_8 = 0x1002880, + braille_dots_18 = 0x1002881, + braille_dots_28 = 0x1002882, + braille_dots_128 = 0x1002883, + braille_dots_38 = 0x1002884, + braille_dots_138 = 0x1002885, + braille_dots_238 = 0x1002886, + braille_dots_1238 = 0x1002887, + braille_dots_48 = 0x1002888, + braille_dots_148 = 0x1002889, + braille_dots_248 = 0x100288a, + braille_dots_1248 = 0x100288b, + braille_dots_348 = 0x100288c, + braille_dots_1348 = 0x100288d, + braille_dots_2348 = 0x100288e, + braille_dots_12348 = 0x100288f, + braille_dots_58 = 0x1002890, + braille_dots_158 = 0x1002891, + braille_dots_258 = 0x1002892, + braille_dots_1258 = 0x1002893, + braille_dots_358 = 0x1002894, + braille_dots_1358 = 0x1002895, + braille_dots_2358 = 0x1002896, + braille_dots_12358 = 0x1002897, + braille_dots_458 = 0x1002898, + braille_dots_1458 = 0x1002899, + braille_dots_2458 = 0x100289a, + braille_dots_12458 = 0x100289b, + braille_dots_3458 = 0x100289c, + braille_dots_13458 = 0x100289d, + braille_dots_23458 = 0x100289e, + braille_dots_123458 = 0x100289f, + braille_dots_68 = 0x10028a0, + braille_dots_168 = 0x10028a1, + braille_dots_268 = 0x10028a2, + braille_dots_1268 = 0x10028a3, + braille_dots_368 = 0x10028a4, + braille_dots_1368 = 0x10028a5, + braille_dots_2368 = 0x10028a6, + braille_dots_12368 = 0x10028a7, + braille_dots_468 = 0x10028a8, + braille_dots_1468 = 0x10028a9, + braille_dots_2468 = 0x10028aa, + braille_dots_12468 = 0x10028ab, + braille_dots_3468 = 0x10028ac, + braille_dots_13468 = 0x10028ad, + braille_dots_23468 = 0x10028ae, + braille_dots_123468 = 0x10028af, + braille_dots_568 = 0x10028b0, + braille_dots_1568 = 0x10028b1, + braille_dots_2568 = 0x10028b2, + braille_dots_12568 = 0x10028b3, + braille_dots_3568 = 0x10028b4, + braille_dots_13568 = 0x10028b5, + braille_dots_23568 = 0x10028b6, + braille_dots_123568 = 0x10028b7, + braille_dots_4568 = 0x10028b8, + braille_dots_14568 = 0x10028b9, + braille_dots_24568 = 0x10028ba, + braille_dots_124568 = 0x10028bb, + braille_dots_34568 = 0x10028bc, + braille_dots_134568 = 0x10028bd, + braille_dots_234568 = 0x10028be, + braille_dots_1234568 = 0x10028bf, + braille_dots_78 = 0x10028c0, + braille_dots_178 = 0x10028c1, + braille_dots_278 = 0x10028c2, + braille_dots_1278 = 0x10028c3, + braille_dots_378 = 0x10028c4, + braille_dots_1378 = 0x10028c5, + braille_dots_2378 = 0x10028c6, + braille_dots_12378 = 0x10028c7, + braille_dots_478 = 0x10028c8, + braille_dots_1478 = 0x10028c9, + braille_dots_2478 = 0x10028ca, + braille_dots_12478 = 0x10028cb, + braille_dots_3478 = 0x10028cc, + braille_dots_13478 = 0x10028cd, + braille_dots_23478 = 0x10028ce, + braille_dots_123478 = 0x10028cf, + braille_dots_578 = 0x10028d0, + braille_dots_1578 = 0x10028d1, + braille_dots_2578 = 0x10028d2, + braille_dots_12578 = 0x10028d3, + braille_dots_3578 = 0x10028d4, + braille_dots_13578 = 0x10028d5, + braille_dots_23578 = 0x10028d6, + braille_dots_123578 = 0x10028d7, + braille_dots_4578 = 0x10028d8, + braille_dots_14578 = 0x10028d9, + braille_dots_24578 = 0x10028da, + braille_dots_124578 = 0x10028db, + braille_dots_34578 = 0x10028dc, + braille_dots_134578 = 0x10028dd, + braille_dots_234578 = 0x10028de, + braille_dots_1234578 = 0x10028df, + braille_dots_678 = 0x10028e0, + braille_dots_1678 = 0x10028e1, + braille_dots_2678 = 0x10028e2, + braille_dots_12678 = 0x10028e3, + braille_dots_3678 = 0x10028e4, + braille_dots_13678 = 0x10028e5, + braille_dots_23678 = 0x10028e6, + braille_dots_123678 = 0x10028e7, + braille_dots_4678 = 0x10028e8, + braille_dots_14678 = 0x10028e9, + braille_dots_24678 = 0x10028ea, + braille_dots_124678 = 0x10028eb, + braille_dots_34678 = 0x10028ec, + braille_dots_134678 = 0x10028ed, + braille_dots_234678 = 0x10028ee, + braille_dots_1234678 = 0x10028ef, + braille_dots_5678 = 0x10028f0, + braille_dots_15678 = 0x10028f1, + braille_dots_25678 = 0x10028f2, + braille_dots_125678 = 0x10028f3, + braille_dots_35678 = 0x10028f4, + braille_dots_135678 = 0x10028f5, + braille_dots_235678 = 0x10028f6, + braille_dots_1235678 = 0x10028f7, + braille_dots_45678 = 0x10028f8, + braille_dots_145678 = 0x10028f9, + braille_dots_245678 = 0x10028fa, + braille_dots_1245678 = 0x10028fb, + braille_dots_345678 = 0x10028fc, + braille_dots_1345678 = 0x10028fd, + braille_dots_2345678 = 0x10028fe, + braille_dots_12345678 = 0x10028ff, + Sinh_ng = 0x1000d82, + Sinh_h2 = 0x1000d83, + Sinh_a = 0x1000d85, + Sinh_aa = 0x1000d86, + Sinh_ae = 0x1000d87, + Sinh_aee = 0x1000d88, + Sinh_i = 0x1000d89, + Sinh_ii = 0x1000d8a, + Sinh_u = 0x1000d8b, + Sinh_uu = 0x1000d8c, + Sinh_ri = 0x1000d8d, + Sinh_rii = 0x1000d8e, + Sinh_lu = 0x1000d8f, + Sinh_luu = 0x1000d90, + Sinh_e = 0x1000d91, + Sinh_ee = 0x1000d92, + Sinh_ai = 0x1000d93, + Sinh_o = 0x1000d94, + Sinh_oo = 0x1000d95, + Sinh_au = 0x1000d96, + Sinh_ka = 0x1000d9a, + Sinh_kha = 0x1000d9b, + Sinh_ga = 0x1000d9c, + Sinh_gha = 0x1000d9d, + Sinh_ng2 = 0x1000d9e, + Sinh_nga = 0x1000d9f, + Sinh_ca = 0x1000da0, + Sinh_cha = 0x1000da1, + Sinh_ja = 0x1000da2, + Sinh_jha = 0x1000da3, + Sinh_nya = 0x1000da4, + Sinh_jnya = 0x1000da5, + Sinh_nja = 0x1000da6, + Sinh_tta = 0x1000da7, + Sinh_ttha = 0x1000da8, + Sinh_dda = 0x1000da9, + Sinh_ddha = 0x1000daa, + Sinh_nna = 0x1000dab, + Sinh_ndda = 0x1000dac, + Sinh_tha = 0x1000dad, + Sinh_thha = 0x1000dae, + Sinh_dha = 0x1000daf, + Sinh_dhha = 0x1000db0, + Sinh_na = 0x1000db1, + Sinh_ndha = 0x1000db3, + Sinh_pa = 0x1000db4, + Sinh_pha = 0x1000db5, + Sinh_ba = 0x1000db6, + Sinh_bha = 0x1000db7, + Sinh_ma = 0x1000db8, + Sinh_mba = 0x1000db9, + Sinh_ya = 0x1000dba, + Sinh_ra = 0x1000dbb, + Sinh_la = 0x1000dbd, + Sinh_va = 0x1000dc0, + Sinh_sha = 0x1000dc1, + Sinh_ssha = 0x1000dc2, + Sinh_sa = 0x1000dc3, + Sinh_ha = 0x1000dc4, + Sinh_lla = 0x1000dc5, + Sinh_fa = 0x1000dc6, + Sinh_al = 0x1000dca, + Sinh_aa2 = 0x1000dcf, + Sinh_ae2 = 0x1000dd0, + Sinh_aee2 = 0x1000dd1, + Sinh_i2 = 0x1000dd2, + Sinh_ii2 = 0x1000dd3, + Sinh_u2 = 0x1000dd4, + Sinh_uu2 = 0x1000dd6, + Sinh_ru2 = 0x1000dd8, + Sinh_e2 = 0x1000dd9, + Sinh_ee2 = 0x1000dda, + Sinh_ai2 = 0x1000ddb, + Sinh_o2 = 0x1000ddc, + Sinh_oo2 = 0x1000ddd, + Sinh_au2 = 0x1000dde, + Sinh_lu2 = 0x1000ddf, + Sinh_ruu2 = 0x1000df2, + Sinh_luu2 = 0x1000df3, + Sinh_kunddaliya = 0x1000df4, + XF86ModeLock = 0x1008FF01, + XF86MonBrightnessUp = 0x1008FF02, + XF86MonBrightnessDown = 0x1008FF03, + XF86KbdLightOnOff = 0x1008FF04, + XF86KbdBrightnessUp = 0x1008FF05, + XF86KbdBrightnessDown = 0x1008FF06, + XF86Standby = 0x1008FF10, + XF86AudioLowerVolume = 0x1008FF11, + XF86AudioMute = 0x1008FF12, + XF86AudioRaiseVolume = 0x1008FF13, + XF86AudioPlay = 0x1008FF14, + XF86AudioStop = 0x1008FF15, + XF86AudioPrev = 0x1008FF16, + XF86AudioNext = 0x1008FF17, + XF86HomePage = 0x1008FF18, + XF86Mail = 0x1008FF19, + XF86Start = 0x1008FF1A, + XF86Search = 0x1008FF1B, + XF86AudioRecord = 0x1008FF1C, + XF86Calculator = 0x1008FF1D, + XF86Memo = 0x1008FF1E, + XF86ToDoList = 0x1008FF1F, + XF86Calendar = 0x1008FF20, + XF86PowerDown = 0x1008FF21, + XF86ContrastAdjust = 0x1008FF22, + XF86RockerUp = 0x1008FF23, + XF86RockerDown = 0x1008FF24, + XF86RockerEnter = 0x1008FF25, + XF86Back = 0x1008FF26, + XF86Forward = 0x1008FF27, + XF86Stop = 0x1008FF28, + XF86Refresh = 0x1008FF29, + XF86PowerOff = 0x1008FF2A, + XF86WakeUp = 0x1008FF2B, + XF86Eject = 0x1008FF2C, + XF86ScreenSaver = 0x1008FF2D, + XF86WWW = 0x1008FF2E, + XF86Sleep = 0x1008FF2F, + XF86Favorites = 0x1008FF30, + XF86AudioPause = 0x1008FF31, + XF86AudioMedia = 0x1008FF32, + XF86MyComputer = 0x1008FF33, + XF86VendorHome = 0x1008FF34, + XF86LightBulb = 0x1008FF35, + XF86Shop = 0x1008FF36, + XF86History = 0x1008FF37, + XF86OpenURL = 0x1008FF38, + XF86AddFavorite = 0x1008FF39, + XF86HotLinks = 0x1008FF3A, + XF86BrightnessAdjust = 0x1008FF3B, + XF86Finance = 0x1008FF3C, + XF86Community = 0x1008FF3D, + XF86AudioRewind = 0x1008FF3E, + XF86BackForward = 0x1008FF3F, + XF86Launch0 = 0x1008FF40, + XF86Launch1 = 0x1008FF41, + XF86Launch2 = 0x1008FF42, + XF86Launch3 = 0x1008FF43, + XF86Launch4 = 0x1008FF44, + XF86Launch5 = 0x1008FF45, + XF86Launch6 = 0x1008FF46, + XF86Launch7 = 0x1008FF47, + XF86Launch8 = 0x1008FF48, + XF86Launch9 = 0x1008FF49, + XF86LaunchA = 0x1008FF4A, + XF86LaunchB = 0x1008FF4B, + XF86LaunchC = 0x1008FF4C, + XF86LaunchD = 0x1008FF4D, + XF86LaunchE = 0x1008FF4E, + XF86LaunchF = 0x1008FF4F, + XF86ApplicationLeft = 0x1008FF50, + XF86ApplicationRight = 0x1008FF51, + XF86Book = 0x1008FF52, + XF86CD = 0x1008FF53, + XF86Calculater = 0x1008FF54, + XF86Clear = 0x1008FF55, + XF86Close = 0x1008FF56, + XF86Copy = 0x1008FF57, + XF86Cut = 0x1008FF58, + XF86Display = 0x1008FF59, + XF86DOS = 0x1008FF5A, + XF86Documents = 0x1008FF5B, + XF86Excel = 0x1008FF5C, + XF86Explorer = 0x1008FF5D, + XF86Game = 0x1008FF5E, + XF86Go = 0x1008FF5F, + XF86iTouch = 0x1008FF60, + XF86LogOff = 0x1008FF61, + XF86Market = 0x1008FF62, + XF86Meeting = 0x1008FF63, + XF86MenuKB = 0x1008FF65, + XF86MenuPB = 0x1008FF66, + XF86MySites = 0x1008FF67, + XF86New = 0x1008FF68, + XF86News = 0x1008FF69, + XF86OfficeHome = 0x1008FF6A, + XF86Open = 0x1008FF6B, + XF86Option = 0x1008FF6C, + XF86Paste = 0x1008FF6D, + XF86Phone = 0x1008FF6E, + XF86Q = 0x1008FF70, + XF86Reply = 0x1008FF72, + XF86Reload = 0x1008FF73, + XF86RotateWindows = 0x1008FF74, + XF86RotationPB = 0x1008FF75, + XF86RotationKB = 0x1008FF76, + XF86Save = 0x1008FF77, + XF86ScrollUp = 0x1008FF78, + XF86ScrollDown = 0x1008FF79, + XF86ScrollClick = 0x1008FF7A, + XF86Send = 0x1008FF7B, + XF86Spell = 0x1008FF7C, + XF86SplitScreen = 0x1008FF7D, + XF86Support = 0x1008FF7E, + XF86TaskPane = 0x1008FF7F, + XF86Terminal = 0x1008FF80, + XF86Tools = 0x1008FF81, + XF86Travel = 0x1008FF82, + XF86UserPB = 0x1008FF84, + XF86User1KB = 0x1008FF85, + XF86User2KB = 0x1008FF86, + XF86Video = 0x1008FF87, + XF86WheelButton = 0x1008FF88, + XF86Word = 0x1008FF89, + XF86Xfer = 0x1008FF8A, + XF86ZoomIn = 0x1008FF8B, + XF86ZoomOut = 0x1008FF8C, + XF86Away = 0x1008FF8D, + XF86Messenger = 0x1008FF8E, + XF86WebCam = 0x1008FF8F, + XF86MailForward = 0x1008FF90, + XF86Pictures = 0x1008FF91, + XF86Music = 0x1008FF92, + XF86Battery = 0x1008FF93, + XF86Bluetooth = 0x1008FF94, + XF86WLAN = 0x1008FF95, + XF86UWB = 0x1008FF96, + XF86AudioForward = 0x1008FF97, + XF86AudioRepeat = 0x1008FF98, + XF86AudioRandomPlay = 0x1008FF99, + XF86Subtitle = 0x1008FF9A, + XF86AudioCycleTrack = 0x1008FF9B, + XF86CycleAngle = 0x1008FF9C, + XF86FrameBack = 0x1008FF9D, + XF86FrameForward = 0x1008FF9E, + XF86Time = 0x1008FF9F, + XF86Select = 0x1008FFA0, + XF86View = 0x1008FFA1, + XF86TopMenu = 0x1008FFA2, + XF86Red = 0x1008FFA3, + XF86Green = 0x1008FFA4, + XF86Yellow = 0x1008FFA5, + XF86Blue = 0x1008FFA6, + XF86Suspend = 0x1008FFA7, + XF86Hibernate = 0x1008FFA8, + XF86TouchpadToggle = 0x1008FFA9, + XF86TouchpadOn = 0x1008FFB0, + XF86TouchpadOff = 0x1008FFB1, + XF86AudioMicMute = 0x1008FFB2, + XF86Keyboard = 0x1008FFB3, + XF86WWAN = 0x1008FFB4, + XF86RFKill = 0x1008FFB5, + XF86AudioPreset = 0x1008FFB6, + XF86Switch_VT_1 = 0x1008FE01, + XF86Switch_VT_2 = 0x1008FE02, + XF86Switch_VT_3 = 0x1008FE03, + XF86Switch_VT_4 = 0x1008FE04, + XF86Switch_VT_5 = 0x1008FE05, + XF86Switch_VT_6 = 0x1008FE06, + XF86Switch_VT_7 = 0x1008FE07, + XF86Switch_VT_8 = 0x1008FE08, + XF86Switch_VT_9 = 0x1008FE09, + XF86Switch_VT_10 = 0x1008FE0A, + XF86Switch_VT_11 = 0x1008FE0B, + XF86Switch_VT_12 = 0x1008FE0C, + XF86Ungrab = 0x1008FE20, + XF86ClearGrab = 0x1008FE21, + XF86Next_VMode = 0x1008FE22, + XF86Prev_VMode = 0x1008FE23, + XF86LogWindowTree = 0x1008FE24, + XF86LogGrabInfo = 0x1008FE25, + SunFA_Grave = 0x1005FF00, + SunFA_Circum = 0x1005FF01, + SunFA_Tilde = 0x1005FF02, + SunFA_Acute = 0x1005FF03, + SunFA_Diaeresis = 0x1005FF04, + SunFA_Cedilla = 0x1005FF05, + SunF36 = 0x1005FF10, + SunF37 = 0x1005FF11, + SunSys_Req = 0x1005FF60, + SunPrint_Screen = 0x0000FF61, + SunCompose = 0x0000FF20, + SunAltGraph = 0x0000FF7E, + SunPageUp = 0x0000FF55, + SunPageDown = 0x0000FF56, + SunUndo = 0x0000FF65, + SunAgain = 0x0000FF66, + SunFind = 0x0000FF68, + SunStop = 0x0000FF69, + SunProps = 0x1005FF70, + SunFront = 0x1005FF71, + SunCopy = 0x1005FF72, + SunOpen = 0x1005FF73, + SunPaste = 0x1005FF74, + SunCut = 0x1005FF75, + SunPowerSwitch = 0x1005FF76, + SunAudioLowerVolume = 0x1005FF77, + SunAudioMute = 0x1005FF78, + SunAudioRaiseVolume = 0x1005FF79, + SunVideoDegauss = 0x1005FF7A, + SunVideoLowerBrightness = 0x1005FF7B, + SunVideoRaiseBrightness = 0x1005FF7C, + SunPowerSwitchShift = 0x1005FF7D, + Dring_accent = 0x1000FEB0, + Dcircumflex_accent = 0x1000FE5E, + Dcedilla_accent = 0x1000FE2C, + Dacute_accent = 0x1000FE27, + Dgrave_accent = 0x1000FE60, + Dtilde = 0x1000FE7E, + Ddiaeresis = 0x1000FE22, + DRemove = 0x1000FF00, + hpClearLine = 0x1000FF6F, + hpInsertLine = 0x1000FF70, + hpDeleteLine = 0x1000FF71, + hpInsertChar = 0x1000FF72, + hpDeleteChar = 0x1000FF73, + hpBackTab = 0x1000FF74, + hpKP_BackTab = 0x1000FF75, + hpModelock1 = 0x1000FF48, + hpModelock2 = 0x1000FF49, + hpReset = 0x1000FF6C, + hpSystem = 0x1000FF6D, + hpUser = 0x1000FF6E, + hpmute_acute = 0x100000A8, + hpmute_grave = 0x100000A9, + hpmute_asciicircum = 0x100000AA, + hpmute_diaeresis = 0x100000AB, + hpmute_asciitilde = 0x100000AC, + hplira = 0x100000AF, + hpguilder = 0x100000BE, + hpYdiaeresis = 0x100000EE, + hpIO = 0x100000EE, + hplongminus = 0x100000F6, + hpblock = 0x100000FC, + osfCopy = 0x1004FF02, + osfCut = 0x1004FF03, + osfPaste = 0x1004FF04, + osfBackTab = 0x1004FF07, + osfBackSpace = 0x1004FF08, + osfClear = 0x1004FF0B, + osfEscape = 0x1004FF1B, + osfAddMode = 0x1004FF31, + osfPrimaryPaste = 0x1004FF32, + osfQuickPaste = 0x1004FF33, + osfPageLeft = 0x1004FF40, + osfPageUp = 0x1004FF41, + osfPageDown = 0x1004FF42, + osfPageRight = 0x1004FF43, + osfActivate = 0x1004FF44, + osfMenuBar = 0x1004FF45, + osfLeft = 0x1004FF51, + osfUp = 0x1004FF52, + osfRight = 0x1004FF53, + osfDown = 0x1004FF54, + osfEndLine = 0x1004FF57, + osfBeginLine = 0x1004FF58, + osfEndData = 0x1004FF59, + osfBeginData = 0x1004FF5A, + osfPrevMenu = 0x1004FF5B, + osfNextMenu = 0x1004FF5C, + osfPrevField = 0x1004FF5D, + osfNextField = 0x1004FF5E, + osfSelect = 0x1004FF60, + osfInsert = 0x1004FF63, + osfUndo = 0x1004FF65, + osfMenu = 0x1004FF67, + osfCancel = 0x1004FF69, + osfHelp = 0x1004FF6A, + osfSelectAll = 0x1004FF71, + osfDeselectAll = 0x1004FF72, + osfReselect = 0x1004FF73, + osfExtend = 0x1004FF74, + osfRestore = 0x1004FF78, + osfDelete = 0x1004FFFF, + Reset = 0x1000FF6C, + System = 0x1000FF6D, + User = 0x1000FF6E, + ClearLine = 0x1000FF6F, + InsertLine = 0x1000FF70, + DeleteLine = 0x1000FF71, + InsertChar = 0x1000FF72, + DeleteChar = 0x1000FF73, + BackTab = 0x1000FF74, + KP_BackTab = 0x1000FF75, + Ext16bit_L = 0x1000FF76, + Ext16bit_R = 0x1000FF77, + mute_acute = 0x100000a8, + mute_grave = 0x100000a9, + mute_asciicircum = 0x100000aa, + mute_diaeresis = 0x100000ab, + mute_asciitilde = 0x100000ac, + lira = 0x100000af, + guilder = 0x100000be, + IO = 0x100000ee, + longminus = 0x100000f6, + block = 0x100000fc, + + } + + enum xkb_key_direction : byte { + KEY_UP, /**< The key was released. */ + KEY_DOWN /**< The key was pressed. */ + } + + [Flags] + enum xkb_state_component : ushort { + XKB_STATE_MODS_DEPRESSED = (1 << 0), + XKB_STATE_MODS_LATCHED = (1 << 1), + XKB_STATE_MODS_LOCKED = (1 << 2), + XKB_STATE_MODS_EFFECTIVE = (1 << 3), + XKB_STATE_LAYOUT_DEPRESSED = (1 << 4), + XKB_STATE_LAYOUT_LATCHED = (1 << 5), + XKB_STATE_LAYOUT_LOCKED = (1 << 6), + XKB_STATE_LAYOUT_EFFECTIVE = (1 << 7), + XKB_STATE_LEDS = (1 << 8) + } + + #region pinvoke + + [DllImportAttribute("xkbcommon")] + static extern IntPtr xkb_context_new (int flags); + [DllImportAttribute("xkbcommon")] + static extern xkb_keysym xkb_state_key_get_one_sym (IntPtr state, xkb_keycode_t keycode); + [DllImportAttribute("xkbcommon")] + static extern UInt32 xkb_state_key_get_utf32 (IntPtr state, xkb_keycode_t key); + + [DllImportAttribute("xkbcommon")] + static extern xkb_state_component xkb_state_update_key(IntPtr state, xkb_keycode_t key, xkb_key_direction direction); + + [DllImportAttribute("xkbcommon-x11.so.0")] + static extern int xkb_x11_setup_xkb_extension (IntPtr connection, + UInt16 major_xkb_version, UInt16 minor_xkb_version, + byte xkb_x11_setup_xkb_extension_flags, + out UInt16 major_xkb_version_out, + out UInt16 minor_xkb_version_out, + out byte base_event_out, + out byte base_error_out); + [DllImportAttribute("xkbcommon-x11.so.0")] + static extern int xkb_x11_get_core_keyboard_device_id(IntPtr connection); + [DllImportAttribute("xkbcommon-x11.so.0")] + static extern IntPtr xkb_x11_keymap_new_from_device (IntPtr context, IntPtr connection, + int device_id, byte flags); + [DllImportAttribute("xkbcommon-x11.so.0")] + static extern IntPtr xkb_x11_state_new_from_device (IntPtr xkbKeymap, IntPtr connection, int device_id); + + [DllImportAttribute("xcb")] + static extern IntPtr xcb_connect(string displayName, IntPtr screenNum); + [DllImportAttribute("xcb")] + static extern IntPtr xcb_get_setup(IntPtr connection); + [DllImportAttribute("xcb")] + static extern IntPtr xcb_flush(IntPtr connection); + [DllImportAttribute("xcb")] + static extern UInt32 xcb_generate_id(IntPtr connection); + + [DllImportAttribute("xcb")] + static extern xcb_iterator_t xcb_setup_roots_iterator(IntPtr setup); + [DllImportAttribute("xcb")] + static extern xcb_iterator_t xcb_screen_allowed_depths_iterator(IntPtr scr); + [DllImportAttribute("xcb")] + static extern xcb_iterator_t xcb_depth_visuals_iterator(IntPtr depth); + + [DllImportAttribute("xcb")] + static extern void xcb_screen_next(ref xcb_iterator_t scr_iterator); + [DllImportAttribute("xcb")] + static extern void xcb_depth_next(ref xcb_iterator_t depth_iterator); + [DllImportAttribute("xcb")] + static extern void xcb_visualtype_next(ref xcb_iterator_t depth_visual_iterator); + + [DllImportAttribute("xcb")] + static extern xcb_void_cookie_t xcb_create_window(IntPtr connection, byte depth, xcb_window_t win, UInt32 parent, + Int16 x, Int16 y, UInt16 width, UInt16 height, UInt16 border, + xcb_window_class_t _class, xcb_visualid_t visual, xcb_cw_t mask, IntPtr valueList); + [DllImportAttribute("xcb")] + static extern xcb_void_cookie_t xcb_map_window(IntPtr conn, xcb_window_t window); + [DllImportAttribute("xcb")] + static extern void xcb_disconnect(IntPtr connection); + + [DllImportAttribute("xcb")] + static extern IntPtr xcb_poll_for_event(IntPtr connection); + + + #endregion + + Interface iFace; + + IntPtr conn, xkbCtx, xkbKeymap, xkbState; + + #region IBackend implementation + public void Init (Interface _iFace) + { + iFace = _iFace; + + conn = xcb_connect (null, IntPtr.Zero); + + + ushort xkb_maj, xkb_min; + byte base_evt, base_err; + + xkbCtx = xkb_context_new (0); + xkb_x11_setup_xkb_extension (conn, 1, 0, 0, out xkb_maj, out xkb_min, out base_evt, out base_err); + int kb = xkb_x11_get_core_keyboard_device_id (conn); + xkbKeymap = xkb_x11_keymap_new_from_device (xkbCtx, conn, kb, 0); + xkbState = xkb_x11_state_new_from_device (xkbKeymap, conn, kb); + + + xcb_iterator_t scr_it = xcb_setup_roots_iterator (xcb_get_setup (conn)); + IntPtr screen = scr_it.data; + + xcb_screen_t scr = (xcb_screen_t)Marshal.PtrToStructure (screen, typeof(xcb_screen_t)); + + xcb_window_t win = xcb_generate_id (conn); + + xcb_cw_t mask = xcb_cw_t.BACK_PIXEL | xcb_cw_t.EVENT_MASK; + uint[] values = { + scr.black_pixel, + (uint)( + xcb_event_mask_t.EXPOSURE | + xcb_event_mask_t.POINTER_MOTION | + xcb_event_mask_t.BUTTON_PRESS | + xcb_event_mask_t.BUTTON_RELEASE | + xcb_event_mask_t.KEY_PRESS | + xcb_event_mask_t.KEY_RELEASE + ) + }; + + IntPtr intPtr = IntPtr.Zero; + + unsafe + { + fixed(uint* pValues = values) + intPtr = new IntPtr((void *) pValues); + xcb_create_window (conn, XCB_COPY_FROM_PARENT, win, scr.root, 0,0,(ushort)iFace.ClientRectangle.Width, (ushort)iFace.ClientRectangle.Height,0, + xcb_window_class_t.INPUT_OUTPUT, scr.root_visual, mask, intPtr); + } + + + xcb_map_window (conn, win); + + xcb_flush (conn); + + + IntPtr visual = findVisual (scr_it, scr.root_visual); + + + iFace.surf = new Cairo.XcbSurface (conn, win, visual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height); + } + + public void CleanUp () + { + xcb_disconnect (conn); + } + public void Flush () { + xcb_flush (conn); + } + public void ProcessEvents () + { + IntPtr evtPtr = xcb_poll_for_event (conn); + if (evtPtr == IntPtr.Zero) + return; + xcb_event_t evt = (xcb_event_t)Marshal.PtrToStructure (evtPtr, typeof(xcb_event_t)); + + switch (evt.response_type) { + case xcb_event_type.EXPOSE: + break; + case xcb_event_type.MOTION_NOTIFY: + iFace.ProcessMouseMove (evt.event_x, evt.event_y); + break; + case xcb_event_type.BUTTON_PRESS: + if (evt.button == xcb_button_t.WheelUp) + iFace.ProcessMouseWheelChanged (Interface.WheelIncrement); + else if(evt.button == xcb_button_t.WheelDown) + iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement); + else + iFace.ProcessMouseButtonDown (evt.detail - 1); + break; + case xcb_event_type.BUTTON_RELEASE: + if (evt.button == xcb_button_t.WheelUp || evt.button == xcb_button_t.WheelDown) + break; + iFace.ProcessMouseButtonUp (evt.detail - 1); + break; + case xcb_event_type.KEY_PRESS: + xkb_keysym ks = xkb_state_key_get_one_sym (xkbState, evt.keycode); + iFace.ProcessKeyUp ((int)ks); + + uint utf32 = xkb_state_key_get_utf32 (xkbState, evt.keycode); + + if (utf32 > 0) + iFace.ProcessKeyPress (char.ConvertFromUtf32 ((int)utf32) [0]); + + xkb_state_update_key (xkbState, evt.keycode, xkb_key_direction.KEY_DOWN); + + break; + case xcb_event_type.KEY_RELEASE: + xkb_keysym ksr = xkb_state_key_get_one_sym (xkbState, evt.keycode); + iFace.ProcessKeyUp ((int)ksr); + + xkb_state_update_key (xkbState, evt.keycode, xkb_key_direction.KEY_UP); + break; + default: + Console.WriteLine ("unknown event"); + break; + } + } + + #endregion + + static IntPtr findVisual (xcb_iterator_t scr_it, xcb_visualid_t visualId){ + for (; scr_it.rem > 0; xcb_screen_next (ref scr_it)) { + xcb_iterator_t depth_it = xcb_screen_allowed_depths_iterator (scr_it.data); + for (; depth_it.rem > 0; xcb_depth_next (ref depth_it)) { + xcb_iterator_t visual_it = xcb_depth_visuals_iterator (depth_it.data); + for (; visual_it.rem > 0; xcb_visualtype_next (ref visual_it)) { + xcb_visualtype_t visual = (xcb_visualtype_t)Marshal.PtrToStructure (visual_it.data, typeof(xcb_visualtype_t)); + if (visualId == visual.visual_id) + return visual_it.data; + } + } + } + return IntPtr.Zero; + } + + } +} + diff --git a/src/backends/XKeySym.cs b/src/backends/XKeySym.cs new file mode 100644 index 00000000..f874f4d4 --- /dev/null +++ b/src/backends/XKeySym.cs @@ -0,0 +1,2109 @@ +/* autogenerated */ +using System; + +namespace XLib +{ + [Flags] + public enum KeySym + { + XK_VoidSymbol = 0xffffff, + XK_BackSpace = 0xff08, + XK_Tab = 0xff09, + XK_Linefeed = 0xff0a, + XK_Clear = 0xff0b, + XK_Return = 0xff0d, + XK_Pause = 0xff13, + XK_Scroll_Lock = 0xff14, + XK_Sys_Req = 0xff15, + XK_Escape = 0xff1b, + XK_Delete = 0xffff, + XK_Multi_key = 0xff20, + XK_Codeinput = 0xff37, + XK_SingleCandidate = 0xff3c, + XK_MultipleCandidate = 0xff3d, + XK_PreviousCandidate = 0xff3e, + XK_Kanji = 0xff21, + XK_Muhenkan = 0xff22, + XK_Henkan_Mode = 0xff23, + XK_Henkan = 0xff23, + XK_Romaji = 0xff24, + XK_Hiragana = 0xff25, + XK_Katakana = 0xff26, + XK_Hiragana_Katakana = 0xff27, + XK_Zenkaku = 0xff28, + XK_Hankaku = 0xff29, + XK_Zenkaku_Hankaku = 0xff2a, + XK_Touroku = 0xff2b, + XK_Massyo = 0xff2c, + XK_Kana_Lock = 0xff2d, + XK_Kana_Shift = 0xff2e, + XK_Eisu_Shift = 0xff2f, + XK_Eisu_toggle = 0xff30, + XK_Kanji_Bangou = 0xff37, + XK_Zen_Koho = 0xff3d, + XK_Mae_Koho = 0xff3e, + XK_Home = 0xff50, + XK_Left = 0xff51, + XK_Up = 0xff52, + XK_Right = 0xff53, + XK_Down = 0xff54, + XK_Prior = 0xff55, + XK_Page_Up = 0xff55, + XK_Next = 0xff56, + XK_Page_Down = 0xff56, + XK_End = 0xff57, + XK_Begin = 0xff58, + XK_Select = 0xff60, + XK_Print = 0xff61, + XK_Execute = 0xff62, + XK_Insert = 0xff63, + XK_Undo = 0xff65, + XK_Redo = 0xff66, + XK_Menu = 0xff67, + XK_Find = 0xff68, + XK_Cancel = 0xff69, + XK_Help = 0xff6a, + XK_Break = 0xff6b, + XK_Mode_switch = 0xff7e, + XK_script_switch = 0xff7e, + XK_Num_Lock = 0xff7f, + XK_KP_Space = 0xff80, + XK_KP_Tab = 0xff89, + XK_KP_Enter = 0xff8d, + XK_KP_F1 = 0xff91, + XK_KP_F2 = 0xff92, + XK_KP_F3 = 0xff93, + XK_KP_F4 = 0xff94, + XK_KP_Home = 0xff95, + XK_KP_Left = 0xff96, + XK_KP_Up = 0xff97, + XK_KP_Right = 0xff98, + XK_KP_Down = 0xff99, + XK_KP_Prior = 0xff9a, + XK_KP_Page_Up = 0xff9a, + XK_KP_Next = 0xff9b, + XK_KP_Page_Down = 0xff9b, + XK_KP_End = 0xff9c, + XK_KP_Begin = 0xff9d, + XK_KP_Insert = 0xff9e, + XK_KP_Delete = 0xff9f, + XK_KP_Equal = 0xffbd, + XK_KP_Multiply = 0xffaa, + XK_KP_Add = 0xffab, + XK_KP_Separator = 0xffac, + XK_KP_Subtract = 0xffad, + XK_KP_Decimal = 0xffae, + XK_KP_Divide = 0xffaf, + XK_KP_0 = 0xffb0, + XK_KP_1 = 0xffb1, + XK_KP_2 = 0xffb2, + XK_KP_3 = 0xffb3, + XK_KP_4 = 0xffb4, + XK_KP_5 = 0xffb5, + XK_KP_6 = 0xffb6, + XK_KP_7 = 0xffb7, + XK_KP_8 = 0xffb8, + XK_KP_9 = 0xffb9, + XK_F1 = 0xffbe, + XK_F2 = 0xffbf, + XK_F3 = 0xffc0, + XK_F4 = 0xffc1, + XK_F5 = 0xffc2, + XK_F6 = 0xffc3, + XK_F7 = 0xffc4, + XK_F8 = 0xffc5, + XK_F9 = 0xffc6, + XK_F10 = 0xffc7, + XK_F11 = 0xffc8, + XK_L1 = 0xffc8, + XK_F12 = 0xffc9, + XK_L2 = 0xffc9, + XK_F13 = 0xffca, + XK_L3 = 0xffca, + XK_F14 = 0xffcb, + XK_L4 = 0xffcb, + XK_F15 = 0xffcc, + XK_L5 = 0xffcc, + XK_F16 = 0xffcd, + XK_L6 = 0xffcd, + XK_F17 = 0xffce, + XK_L7 = 0xffce, + XK_F18 = 0xffcf, + XK_L8 = 0xffcf, + XK_F19 = 0xffd0, + XK_L9 = 0xffd0, + XK_F20 = 0xffd1, + XK_L10 = 0xffd1, + XK_F21 = 0xffd2, + XK_R1 = 0xffd2, + XK_F22 = 0xffd3, + XK_R2 = 0xffd3, + XK_F23 = 0xffd4, + XK_R3 = 0xffd4, + XK_F24 = 0xffd5, + XK_R4 = 0xffd5, + XK_F25 = 0xffd6, + XK_R5 = 0xffd6, + XK_F26 = 0xffd7, + XK_R6 = 0xffd7, + XK_F27 = 0xffd8, + XK_R7 = 0xffd8, + XK_F28 = 0xffd9, + XK_R8 = 0xffd9, + XK_F29 = 0xffda, + XK_R9 = 0xffda, + XK_F30 = 0xffdb, + XK_R10 = 0xffdb, + XK_F31 = 0xffdc, + XK_R11 = 0xffdc, + XK_F32 = 0xffdd, + XK_R12 = 0xffdd, + XK_F33 = 0xffde, + XK_R13 = 0xffde, + XK_F34 = 0xffdf, + XK_R14 = 0xffdf, + XK_F35 = 0xffe0, + XK_R15 = 0xffe0, + XK_Shift_L = 0xffe1, + XK_Shift_R = 0xffe2, + XK_Control_L = 0xffe3, + XK_Control_R = 0xffe4, + XK_Caps_Lock = 0xffe5, + XK_Shift_Lock = 0xffe6, + XK_Meta_L = 0xffe7, + XK_Meta_R = 0xffe8, + XK_Alt_L = 0xffe9, + XK_Alt_R = 0xffea, + XK_Super_L = 0xffeb, + XK_Super_R = 0xffec, + XK_Hyper_L = 0xffed, + XK_Hyper_R = 0xffee, + XK_ISO_Lock = 0xfe01, + XK_ISO_Level2_Latch = 0xfe02, + XK_ISO_Level3_Shift = 0xfe03, + XK_ISO_Level3_Latch = 0xfe04, + XK_ISO_Level3_Lock = 0xfe05, + XK_ISO_Level5_Shift = 0xfe11, + XK_ISO_Level5_Latch = 0xfe12, + XK_ISO_Level5_Lock = 0xfe13, + XK_ISO_Group_Shift = 0xff7e, + XK_ISO_Group_Latch = 0xfe06, + XK_ISO_Group_Lock = 0xfe07, + XK_ISO_Next_Group = 0xfe08, + XK_ISO_Next_Group_Lock = 0xfe09, + XK_ISO_Prev_Group = 0xfe0a, + XK_ISO_Prev_Group_Lock = 0xfe0b, + XK_ISO_First_Group = 0xfe0c, + XK_ISO_First_Group_Lock = 0xfe0d, + XK_ISO_Last_Group = 0xfe0e, + XK_ISO_Last_Group_Lock = 0xfe0f, + XK_ISO_Left_Tab = 0xfe20, + XK_ISO_Move_Line_Up = 0xfe21, + XK_ISO_Move_Line_Down = 0xfe22, + XK_ISO_Partial_Line_Up = 0xfe23, + XK_ISO_Partial_Line_Down = 0xfe24, + XK_ISO_Partial_Space_Left = 0xfe25, + XK_ISO_Partial_Space_Right = 0xfe26, + XK_ISO_Set_Margin_Left = 0xfe27, + XK_ISO_Set_Margin_Right = 0xfe28, + XK_ISO_Release_Margin_Left = 0xfe29, + XK_ISO_Release_Margin_Right = 0xfe2a, + XK_ISO_Release_Both_Margins = 0xfe2b, + XK_ISO_Fast_Cursor_Left = 0xfe2c, + XK_ISO_Fast_Cursor_Right = 0xfe2d, + XK_ISO_Fast_Cursor_Up = 0xfe2e, + XK_ISO_Fast_Cursor_Down = 0xfe2f, + XK_ISO_Continuous_Underline = 0xfe30, + XK_ISO_Discontinuous_Underline = 0xfe31, + XK_ISO_Emphasize = 0xfe32, + XK_ISO_Center_Object = 0xfe33, + XK_ISO_Enter = 0xfe34, + XK_dead_grave = 0xfe50, + XK_dead_acute = 0xfe51, + XK_dead_circumflex = 0xfe52, + XK_dead_tilde = 0xfe53, + XK_dead_perispomeni = 0xfe53, + XK_dead_macron = 0xfe54, + XK_dead_breve = 0xfe55, + XK_dead_abovedot = 0xfe56, + XK_dead_diaeresis = 0xfe57, + XK_dead_abovering = 0xfe58, + XK_dead_doubleacute = 0xfe59, + XK_dead_caron = 0xfe5a, + XK_dead_cedilla = 0xfe5b, + XK_dead_ogonek = 0xfe5c, + XK_dead_iota = 0xfe5d, + XK_dead_voiced_sound = 0xfe5e, + XK_dead_semivoiced_sound = 0xfe5f, + XK_dead_belowdot = 0xfe60, + XK_dead_hook = 0xfe61, + XK_dead_horn = 0xfe62, + XK_dead_stroke = 0xfe63, + XK_dead_abovecomma = 0xfe64, + XK_dead_psili = 0xfe64, + XK_dead_abovereversedcomma = 0xfe65, + XK_dead_dasia = 0xfe65, + XK_dead_doublegrave = 0xfe66, + XK_dead_belowring = 0xfe67, + XK_dead_belowmacron = 0xfe68, + XK_dead_belowcircumflex = 0xfe69, + XK_dead_belowtilde = 0xfe6a, + XK_dead_belowbreve = 0xfe6b, + XK_dead_belowdiaeresis = 0xfe6c, + XK_dead_invertedbreve = 0xfe6d, + XK_dead_belowcomma = 0xfe6e, + XK_dead_currency = 0xfe6f, + XK_dead_lowline = 0xfe90, + XK_dead_aboveverticalline = 0xfe91, + XK_dead_belowverticalline = 0xfe92, + XK_dead_longsolidusoverlay = 0xfe93, + XK_dead_a = 0xfe80, + XK_dead_A = 0xfe81, + XK_dead_e = 0xfe82, + XK_dead_E = 0xfe83, + XK_dead_i = 0xfe84, + XK_dead_I = 0xfe85, + XK_dead_o = 0xfe86, + XK_dead_O = 0xfe87, + XK_dead_u = 0xfe88, + XK_dead_U = 0xfe89, + XK_dead_small_schwa = 0xfe8a, + XK_dead_capital_schwa = 0xfe8b, + XK_dead_greek = 0xfe8c, + XK_First_Virtual_Screen = 0xfed0, + XK_Prev_Virtual_Screen = 0xfed1, + XK_Next_Virtual_Screen = 0xfed2, + XK_Last_Virtual_Screen = 0xfed4, + XK_Terminate_Server = 0xfed5, + XK_AccessX_Enable = 0xfe70, + XK_AccessX_Feedback_Enable = 0xfe71, + XK_RepeatKeys_Enable = 0xfe72, + XK_SlowKeys_Enable = 0xfe73, + XK_BounceKeys_Enable = 0xfe74, + XK_StickyKeys_Enable = 0xfe75, + XK_MouseKeys_Enable = 0xfe76, + XK_MouseKeys_Accel_Enable = 0xfe77, + XK_Overlay1_Enable = 0xfe78, + XK_Overlay2_Enable = 0xfe79, + XK_AudibleBell_Enable = 0xfe7a, + XK_Pointer_Left = 0xfee0, + XK_Pointer_Right = 0xfee1, + XK_Pointer_Up = 0xfee2, + XK_Pointer_Down = 0xfee3, + XK_Pointer_UpLeft = 0xfee4, + XK_Pointer_UpRight = 0xfee5, + XK_Pointer_DownLeft = 0xfee6, + XK_Pointer_DownRight = 0xfee7, + XK_Pointer_Button_Dflt = 0xfee8, + XK_Pointer_Button1 = 0xfee9, + XK_Pointer_Button2 = 0xfeea, + XK_Pointer_Button3 = 0xfeeb, + XK_Pointer_Button4 = 0xfeec, + XK_Pointer_Button5 = 0xfeed, + XK_Pointer_DblClick_Dflt = 0xfeee, + XK_Pointer_DblClick1 = 0xfeef, + XK_Pointer_DblClick2 = 0xfef0, + XK_Pointer_DblClick3 = 0xfef1, + XK_Pointer_DblClick4 = 0xfef2, + XK_Pointer_DblClick5 = 0xfef3, + XK_Pointer_Drag_Dflt = 0xfef4, + XK_Pointer_Drag1 = 0xfef5, + XK_Pointer_Drag2 = 0xfef6, + XK_Pointer_Drag3 = 0xfef7, + XK_Pointer_Drag4 = 0xfef8, + XK_Pointer_Drag5 = 0xfefd, + XK_Pointer_EnableKeys = 0xfef9, + XK_Pointer_Accelerate = 0xfefa, + XK_Pointer_DfltBtnNext = 0xfefb, + XK_Pointer_DfltBtnPrev = 0xfefc, + XK_ch = 0xfea0, + XK_Ch = 0xfea1, + XK_CH = 0xfea2, + XK_c_h = 0xfea3, + XK_C_h = 0xfea4, + XK_C_H = 0xfea5, + XK_3270_Duplicate = 0xfd01, + XK_3270_FieldMark = 0xfd02, + XK_3270_Right2 = 0xfd03, + XK_3270_Left2 = 0xfd04, + XK_3270_BackTab = 0xfd05, + XK_3270_EraseEOF = 0xfd06, + XK_3270_EraseInput = 0xfd07, + XK_3270_Reset = 0xfd08, + XK_3270_Quit = 0xfd09, + XK_3270_PA1 = 0xfd0a, + XK_3270_PA2 = 0xfd0b, + XK_3270_PA3 = 0xfd0c, + XK_3270_Test = 0xfd0d, + XK_3270_Attn = 0xfd0e, + XK_3270_CursorBlink = 0xfd0f, + XK_3270_AltCursor = 0xfd10, + XK_3270_KeyClick = 0xfd11, + XK_3270_Jump = 0xfd12, + XK_3270_Ident = 0xfd13, + XK_3270_Rule = 0xfd14, + XK_3270_Copy = 0xfd15, + XK_3270_Play = 0xfd16, + XK_3270_Setup = 0xfd17, + XK_3270_Record = 0xfd18, + XK_3270_ChangeScreen = 0xfd19, + XK_3270_DeleteWord = 0xfd1a, + XK_3270_ExSelect = 0xfd1b, + XK_3270_CursorSelect = 0xfd1c, + XK_3270_PrintScreen = 0xfd1d, + XK_3270_Enter = 0xfd1e, + XK_space = 0x0020, + XK_exclam = 0x0021, + XK_quotedbl = 0x0022, + XK_numbersign = 0x0023, + XK_dollar = 0x0024, + XK_percent = 0x0025, + XK_ampersand = 0x0026, + XK_apostrophe = 0x0027, + XK_quoteright = 0x0027, + XK_parenleft = 0x0028, + XK_parenright = 0x0029, + XK_asterisk = 0x002a, + XK_plus = 0x002b, + XK_comma = 0x002c, + XK_minus = 0x002d, + XK_period = 0x002e, + XK_slash = 0x002f, + XK_0 = 0x0030, + XK_1 = 0x0031, + XK_2 = 0x0032, + XK_3 = 0x0033, + XK_4 = 0x0034, + XK_5 = 0x0035, + XK_6 = 0x0036, + XK_7 = 0x0037, + XK_8 = 0x0038, + XK_9 = 0x0039, + XK_colon = 0x003a, + XK_semicolon = 0x003b, + XK_less = 0x003c, + XK_equal = 0x003d, + XK_greater = 0x003e, + XK_question = 0x003f, + XK_at = 0x0040, + XK_A = 0x0041, + XK_B = 0x0042, + XK_C = 0x0043, + XK_D = 0x0044, + XK_E = 0x0045, + XK_F = 0x0046, + XK_G = 0x0047, + XK_H = 0x0048, + XK_I = 0x0049, + XK_J = 0x004a, + XK_K = 0x004b, + XK_L = 0x004c, + XK_M = 0x004d, + XK_N = 0x004e, + XK_O = 0x004f, + XK_P = 0x0050, + XK_Q = 0x0051, + XK_R = 0x0052, + XK_S = 0x0053, + XK_T = 0x0054, + XK_U = 0x0055, + XK_V = 0x0056, + XK_W = 0x0057, + XK_X = 0x0058, + XK_Y = 0x0059, + XK_Z = 0x005a, + XK_bracketleft = 0x005b, + XK_backslash = 0x005c, + XK_bracketright = 0x005d, + XK_asciicircum = 0x005e, + XK_underscore = 0x005f, + XK_grave = 0x0060, + XK_quoteleft = 0x0060, + XK_a = 0x0061, + XK_b = 0x0062, + XK_c = 0x0063, + XK_d = 0x0064, + XK_e = 0x0065, + XK_f = 0x0066, + XK_g = 0x0067, + XK_h = 0x0068, + XK_i = 0x0069, + XK_j = 0x006a, + XK_k = 0x006b, + XK_l = 0x006c, + XK_m = 0x006d, + XK_n = 0x006e, + XK_o = 0x006f, + XK_p = 0x0070, + XK_q = 0x0071, + XK_r = 0x0072, + XK_s = 0x0073, + XK_t = 0x0074, + XK_u = 0x0075, + XK_v = 0x0076, + XK_w = 0x0077, + XK_x = 0x0078, + XK_y = 0x0079, + XK_z = 0x007a, + XK_braceleft = 0x007b, + XK_bar = 0x007c, + XK_braceright = 0x007d, + XK_asciitilde = 0x007e, + XK_nobreakspace = 0x00a0, + XK_exclamdown = 0x00a1, + XK_cent = 0x00a2, + XK_sterling = 0x00a3, + XK_currency = 0x00a4, + XK_yen = 0x00a5, + XK_brokenbar = 0x00a6, + XK_section = 0x00a7, + XK_diaeresis = 0x00a8, + XK_copyright = 0x00a9, + XK_ordfeminine = 0x00aa, + XK_guillemotleft = 0x00ab, + XK_notsign = 0x00ac, + XK_hyphen = 0x00ad, + XK_registered = 0x00ae, + XK_macron = 0x00af, + XK_degree = 0x00b0, + XK_plusminus = 0x00b1, + XK_twosuperior = 0x00b2, + XK_threesuperior = 0x00b3, + XK_acute = 0x00b4, + XK_mu = 0x00b5, + XK_paragraph = 0x00b6, + XK_periodcentered = 0x00b7, + XK_cedilla = 0x00b8, + XK_onesuperior = 0x00b9, + XK_masculine = 0x00ba, + XK_guillemotright = 0x00bb, + XK_onequarter = 0x00bc, + XK_onehalf = 0x00bd, + XK_threequarters = 0x00be, + XK_questiondown = 0x00bf, + XK_Agrave = 0x00c0, + XK_Aacute = 0x00c1, + XK_Acircumflex = 0x00c2, + XK_Atilde = 0x00c3, + XK_Adiaeresis = 0x00c4, + XK_Aring = 0x00c5, + XK_AE = 0x00c6, + XK_Ccedilla = 0x00c7, + XK_Egrave = 0x00c8, + XK_Eacute = 0x00c9, + XK_Ecircumflex = 0x00ca, + XK_Ediaeresis = 0x00cb, + XK_Igrave = 0x00cc, + XK_Iacute = 0x00cd, + XK_Icircumflex = 0x00ce, + XK_Idiaeresis = 0x00cf, + XK_ETH = 0x00d0, + XK_Eth = 0x00d0, + XK_Ntilde = 0x00d1, + XK_Ograve = 0x00d2, + XK_Oacute = 0x00d3, + XK_Ocircumflex = 0x00d4, + XK_Otilde = 0x00d5, + XK_Odiaeresis = 0x00d6, + XK_multiply = 0x00d7, + XK_Oslash = 0x00d8, + XK_Ooblique = 0x00d8, + XK_Ugrave = 0x00d9, + XK_Uacute = 0x00da, + XK_Ucircumflex = 0x00db, + XK_Udiaeresis = 0x00dc, + XK_Yacute = 0x00dd, + XK_THORN = 0x00de, + XK_Thorn = 0x00de, + XK_ssharp = 0x00df, + XK_agrave = 0x00e0, + XK_aacute = 0x00e1, + XK_acircumflex = 0x00e2, + XK_atilde = 0x00e3, + XK_adiaeresis = 0x00e4, + XK_aring = 0x00e5, + XK_ae = 0x00e6, + XK_ccedilla = 0x00e7, + XK_egrave = 0x00e8, + XK_eacute = 0x00e9, + XK_ecircumflex = 0x00ea, + XK_ediaeresis = 0x00eb, + XK_igrave = 0x00ec, + XK_iacute = 0x00ed, + XK_icircumflex = 0x00ee, + XK_idiaeresis = 0x00ef, + XK_eth = 0x00f0, + XK_ntilde = 0x00f1, + XK_ograve = 0x00f2, + XK_oacute = 0x00f3, + XK_ocircumflex = 0x00f4, + XK_otilde = 0x00f5, + XK_odiaeresis = 0x00f6, + XK_division = 0x00f7, + XK_oslash = 0x00f8, + XK_ooblique = 0x00f8, + XK_ugrave = 0x00f9, + XK_uacute = 0x00fa, + XK_ucircumflex = 0x00fb, + XK_udiaeresis = 0x00fc, + XK_yacute = 0x00fd, + XK_thorn = 0x00fe, + XK_ydiaeresis = 0x00ff, + XK_Aogonek = 0x01a1, + XK_breve = 0x01a2, + XK_Lstroke = 0x01a3, + XK_Lcaron = 0x01a5, + XK_Sacute = 0x01a6, + XK_Scaron = 0x01a9, + XK_Scedilla = 0x01aa, + XK_Tcaron = 0x01ab, + XK_Zacute = 0x01ac, + XK_Zcaron = 0x01ae, + XK_Zabovedot = 0x01af, + XK_aogonek = 0x01b1, + XK_ogonek = 0x01b2, + XK_lstroke = 0x01b3, + XK_lcaron = 0x01b5, + XK_sacute = 0x01b6, + XK_caron = 0x01b7, + XK_scaron = 0x01b9, + XK_scedilla = 0x01ba, + XK_tcaron = 0x01bb, + XK_zacute = 0x01bc, + XK_doubleacute = 0x01bd, + XK_zcaron = 0x01be, + XK_zabovedot = 0x01bf, + XK_Racute = 0x01c0, + XK_Abreve = 0x01c3, + XK_Lacute = 0x01c5, + XK_Cacute = 0x01c6, + XK_Ccaron = 0x01c8, + XK_Eogonek = 0x01ca, + XK_Ecaron = 0x01cc, + XK_Dcaron = 0x01cf, + XK_Dstroke = 0x01d0, + XK_Nacute = 0x01d1, + XK_Ncaron = 0x01d2, + XK_Odoubleacute = 0x01d5, + XK_Rcaron = 0x01d8, + XK_Uring = 0x01d9, + XK_Udoubleacute = 0x01db, + XK_Tcedilla = 0x01de, + XK_racute = 0x01e0, + XK_abreve = 0x01e3, + XK_lacute = 0x01e5, + XK_cacute = 0x01e6, + XK_ccaron = 0x01e8, + XK_eogonek = 0x01ea, + XK_ecaron = 0x01ec, + XK_dcaron = 0x01ef, + XK_dstroke = 0x01f0, + XK_nacute = 0x01f1, + XK_ncaron = 0x01f2, + XK_odoubleacute = 0x01f5, + XK_rcaron = 0x01f8, + XK_uring = 0x01f9, + XK_udoubleacute = 0x01fb, + XK_tcedilla = 0x01fe, + XK_abovedot = 0x01ff, + XK_Hstroke = 0x02a1, + XK_Hcircumflex = 0x02a6, + XK_Iabovedot = 0x02a9, + XK_Gbreve = 0x02ab, + XK_Jcircumflex = 0x02ac, + XK_hstroke = 0x02b1, + XK_hcircumflex = 0x02b6, + XK_idotless = 0x02b9, + XK_gbreve = 0x02bb, + XK_jcircumflex = 0x02bc, + XK_Cabovedot = 0x02c5, + XK_Ccircumflex = 0x02c6, + XK_Gabovedot = 0x02d5, + XK_Gcircumflex = 0x02d8, + XK_Ubreve = 0x02dd, + XK_Scircumflex = 0x02de, + XK_cabovedot = 0x02e5, + XK_ccircumflex = 0x02e6, + XK_gabovedot = 0x02f5, + XK_gcircumflex = 0x02f8, + XK_ubreve = 0x02fd, + XK_scircumflex = 0x02fe, + XK_kra = 0x03a2, + XK_kappa = 0x03a2, + XK_Rcedilla = 0x03a3, + XK_Itilde = 0x03a5, + XK_Lcedilla = 0x03a6, + XK_Emacron = 0x03aa, + XK_Gcedilla = 0x03ab, + XK_Tslash = 0x03ac, + XK_rcedilla = 0x03b3, + XK_itilde = 0x03b5, + XK_lcedilla = 0x03b6, + XK_emacron = 0x03ba, + XK_gcedilla = 0x03bb, + XK_tslash = 0x03bc, + XK_ENG = 0x03bd, + XK_eng = 0x03bf, + XK_Amacron = 0x03c0, + XK_Iogonek = 0x03c7, + XK_Eabovedot = 0x03cc, + XK_Imacron = 0x03cf, + XK_Ncedilla = 0x03d1, + XK_Omacron = 0x03d2, + XK_Kcedilla = 0x03d3, + XK_Uogonek = 0x03d9, + XK_Utilde = 0x03dd, + XK_Umacron = 0x03de, + XK_amacron = 0x03e0, + XK_iogonek = 0x03e7, + XK_eabovedot = 0x03ec, + XK_imacron = 0x03ef, + XK_ncedilla = 0x03f1, + XK_omacron = 0x03f2, + XK_kcedilla = 0x03f3, + XK_uogonek = 0x03f9, + XK_utilde = 0x03fd, + XK_umacron = 0x03fe, + XK_Wcircumflex = 0x1000174, + XK_wcircumflex = 0x1000175, + XK_Ycircumflex = 0x1000176, + XK_ycircumflex = 0x1000177, + XK_Babovedot = 0x1001e02, + XK_babovedot = 0x1001e03, + XK_Dabovedot = 0x1001e0a, + XK_dabovedot = 0x1001e0b, + XK_Fabovedot = 0x1001e1e, + XK_fabovedot = 0x1001e1f, + XK_Mabovedot = 0x1001e40, + XK_mabovedot = 0x1001e41, + XK_Pabovedot = 0x1001e56, + XK_pabovedot = 0x1001e57, + XK_Sabovedot = 0x1001e60, + XK_sabovedot = 0x1001e61, + XK_Tabovedot = 0x1001e6a, + XK_tabovedot = 0x1001e6b, + XK_Wgrave = 0x1001e80, + XK_wgrave = 0x1001e81, + XK_Wacute = 0x1001e82, + XK_wacute = 0x1001e83, + XK_Wdiaeresis = 0x1001e84, + XK_wdiaeresis = 0x1001e85, + XK_Ygrave = 0x1001ef2, + XK_ygrave = 0x1001ef3, + XK_OE = 0x13bc, + XK_oe = 0x13bd, + XK_Ydiaeresis = 0x13be, + XK_overline = 0x047e, + XK_kana_fullstop = 0x04a1, + XK_kana_openingbracket = 0x04a2, + XK_kana_closingbracket = 0x04a3, + XK_kana_comma = 0x04a4, + XK_kana_conjunctive = 0x04a5, + XK_kana_middledot = 0x04a5, + XK_kana_WO = 0x04a6, + XK_kana_a = 0x04a7, + XK_kana_i = 0x04a8, + XK_kana_u = 0x04a9, + XK_kana_e = 0x04aa, + XK_kana_o = 0x04ab, + XK_kana_ya = 0x04ac, + XK_kana_yu = 0x04ad, + XK_kana_yo = 0x04ae, + XK_kana_tsu = 0x04af, + XK_kana_tu = 0x04af, + XK_prolongedsound = 0x04b0, + XK_kana_A = 0x04b1, + XK_kana_I = 0x04b2, + XK_kana_U = 0x04b3, + XK_kana_E = 0x04b4, + XK_kana_O = 0x04b5, + XK_kana_KA = 0x04b6, + XK_kana_KI = 0x04b7, + XK_kana_KU = 0x04b8, + XK_kana_KE = 0x04b9, + XK_kana_KO = 0x04ba, + XK_kana_SA = 0x04bb, + XK_kana_SHI = 0x04bc, + XK_kana_SU = 0x04bd, + XK_kana_SE = 0x04be, + XK_kana_SO = 0x04bf, + XK_kana_TA = 0x04c0, + XK_kana_CHI = 0x04c1, + XK_kana_TI = 0x04c1, + XK_kana_TSU = 0x04c2, + XK_kana_TU = 0x04c2, + XK_kana_TE = 0x04c3, + XK_kana_TO = 0x04c4, + XK_kana_NA = 0x04c5, + XK_kana_NI = 0x04c6, + XK_kana_NU = 0x04c7, + XK_kana_NE = 0x04c8, + XK_kana_NO = 0x04c9, + XK_kana_HA = 0x04ca, + XK_kana_HI = 0x04cb, + XK_kana_FU = 0x04cc, + XK_kana_HU = 0x04cc, + XK_kana_HE = 0x04cd, + XK_kana_HO = 0x04ce, + XK_kana_MA = 0x04cf, + XK_kana_MI = 0x04d0, + XK_kana_MU = 0x04d1, + XK_kana_ME = 0x04d2, + XK_kana_MO = 0x04d3, + XK_kana_YA = 0x04d4, + XK_kana_YU = 0x04d5, + XK_kana_YO = 0x04d6, + XK_kana_RA = 0x04d7, + XK_kana_RI = 0x04d8, + XK_kana_RU = 0x04d9, + XK_kana_RE = 0x04da, + XK_kana_RO = 0x04db, + XK_kana_WA = 0x04dc, + XK_kana_N = 0x04dd, + XK_voicedsound = 0x04de, + XK_semivoicedsound = 0x04df, + XK_kana_switch = 0xff7e, + XK_Farsi_0 = 0x10006f0, + XK_Farsi_1 = 0x10006f1, + XK_Farsi_2 = 0x10006f2, + XK_Farsi_3 = 0x10006f3, + XK_Farsi_4 = 0x10006f4, + XK_Farsi_5 = 0x10006f5, + XK_Farsi_6 = 0x10006f6, + XK_Farsi_7 = 0x10006f7, + XK_Farsi_8 = 0x10006f8, + XK_Farsi_9 = 0x10006f9, + XK_Arabic_percent = 0x100066a, + XK_Arabic_superscript_alef = 0x1000670, + XK_Arabic_tteh = 0x1000679, + XK_Arabic_peh = 0x100067e, + XK_Arabic_tcheh = 0x1000686, + XK_Arabic_ddal = 0x1000688, + XK_Arabic_rreh = 0x1000691, + XK_Arabic_comma = 0x05ac, + XK_Arabic_fullstop = 0x10006d4, + XK_Arabic_0 = 0x1000660, + XK_Arabic_1 = 0x1000661, + XK_Arabic_2 = 0x1000662, + XK_Arabic_3 = 0x1000663, + XK_Arabic_4 = 0x1000664, + XK_Arabic_5 = 0x1000665, + XK_Arabic_6 = 0x1000666, + XK_Arabic_7 = 0x1000667, + XK_Arabic_8 = 0x1000668, + XK_Arabic_9 = 0x1000669, + XK_Arabic_semicolon = 0x05bb, + XK_Arabic_question_mark = 0x05bf, + XK_Arabic_hamza = 0x05c1, + XK_Arabic_maddaonalef = 0x05c2, + XK_Arabic_hamzaonalef = 0x05c3, + XK_Arabic_hamzaonwaw = 0x05c4, + XK_Arabic_hamzaunderalef = 0x05c5, + XK_Arabic_hamzaonyeh = 0x05c6, + XK_Arabic_alef = 0x05c7, + XK_Arabic_beh = 0x05c8, + XK_Arabic_tehmarbuta = 0x05c9, + XK_Arabic_teh = 0x05ca, + XK_Arabic_theh = 0x05cb, + XK_Arabic_jeem = 0x05cc, + XK_Arabic_hah = 0x05cd, + XK_Arabic_khah = 0x05ce, + XK_Arabic_dal = 0x05cf, + XK_Arabic_thal = 0x05d0, + XK_Arabic_ra = 0x05d1, + XK_Arabic_zain = 0x05d2, + XK_Arabic_seen = 0x05d3, + XK_Arabic_sheen = 0x05d4, + XK_Arabic_sad = 0x05d5, + XK_Arabic_dad = 0x05d6, + XK_Arabic_tah = 0x05d7, + XK_Arabic_zah = 0x05d8, + XK_Arabic_ain = 0x05d9, + XK_Arabic_ghain = 0x05da, + XK_Arabic_tatweel = 0x05e0, + XK_Arabic_feh = 0x05e1, + XK_Arabic_qaf = 0x05e2, + XK_Arabic_kaf = 0x05e3, + XK_Arabic_lam = 0x05e4, + XK_Arabic_meem = 0x05e5, + XK_Arabic_noon = 0x05e6, + XK_Arabic_ha = 0x05e7, + XK_Arabic_heh = 0x05e7, + XK_Arabic_waw = 0x05e8, + XK_Arabic_alefmaksura = 0x05e9, + XK_Arabic_yeh = 0x05ea, + XK_Arabic_fathatan = 0x05eb, + XK_Arabic_dammatan = 0x05ec, + XK_Arabic_kasratan = 0x05ed, + XK_Arabic_fatha = 0x05ee, + XK_Arabic_damma = 0x05ef, + XK_Arabic_kasra = 0x05f0, + XK_Arabic_shadda = 0x05f1, + XK_Arabic_sukun = 0x05f2, + XK_Arabic_madda_above = 0x1000653, + XK_Arabic_hamza_above = 0x1000654, + XK_Arabic_hamza_below = 0x1000655, + XK_Arabic_jeh = 0x1000698, + XK_Arabic_veh = 0x10006a4, + XK_Arabic_keheh = 0x10006a9, + XK_Arabic_gaf = 0x10006af, + XK_Arabic_noon_ghunna = 0x10006ba, + XK_Arabic_heh_doachashmee = 0x10006be, + XK_Farsi_yeh = 0x10006cc, + XK_Arabic_farsi_yeh = 0x10006cc, + XK_Arabic_yeh_baree = 0x10006d2, + XK_Arabic_heh_goal = 0x10006c1, + XK_Arabic_switch = 0xff7e, + XK_Cyrillic_GHE_bar = 0x1000492, + XK_Cyrillic_ghe_bar = 0x1000493, + XK_Cyrillic_ZHE_descender = 0x1000496, + XK_Cyrillic_zhe_descender = 0x1000497, + XK_Cyrillic_KA_descender = 0x100049a, + XK_Cyrillic_ka_descender = 0x100049b, + XK_Cyrillic_KA_vertstroke = 0x100049c, + XK_Cyrillic_ka_vertstroke = 0x100049d, + XK_Cyrillic_EN_descender = 0x10004a2, + XK_Cyrillic_en_descender = 0x10004a3, + XK_Cyrillic_U_straight = 0x10004ae, + XK_Cyrillic_u_straight = 0x10004af, + XK_Cyrillic_U_straight_bar = 0x10004b0, + XK_Cyrillic_u_straight_bar = 0x10004b1, + XK_Cyrillic_HA_descender = 0x10004b2, + XK_Cyrillic_ha_descender = 0x10004b3, + XK_Cyrillic_CHE_descender = 0x10004b6, + XK_Cyrillic_che_descender = 0x10004b7, + XK_Cyrillic_CHE_vertstroke = 0x10004b8, + XK_Cyrillic_che_vertstroke = 0x10004b9, + XK_Cyrillic_SHHA = 0x10004ba, + XK_Cyrillic_shha = 0x10004bb, + XK_Cyrillic_SCHWA = 0x10004d8, + XK_Cyrillic_schwa = 0x10004d9, + XK_Cyrillic_I_macron = 0x10004e2, + XK_Cyrillic_i_macron = 0x10004e3, + XK_Cyrillic_O_bar = 0x10004e8, + XK_Cyrillic_o_bar = 0x10004e9, + XK_Cyrillic_U_macron = 0x10004ee, + XK_Cyrillic_u_macron = 0x10004ef, + XK_Serbian_dje = 0x06a1, + XK_Macedonia_gje = 0x06a2, + XK_Cyrillic_io = 0x06a3, + XK_Ukrainian_ie = 0x06a4, + XK_Ukranian_je = 0x06a4, + XK_Macedonia_dse = 0x06a5, + XK_Ukrainian_i = 0x06a6, + XK_Ukranian_i = 0x06a6, + XK_Ukrainian_yi = 0x06a7, + XK_Ukranian_yi = 0x06a7, + XK_Cyrillic_je = 0x06a8, + XK_Serbian_je = 0x06a8, + XK_Cyrillic_lje = 0x06a9, + XK_Serbian_lje = 0x06a9, + XK_Cyrillic_nje = 0x06aa, + XK_Serbian_nje = 0x06aa, + XK_Serbian_tshe = 0x06ab, + XK_Macedonia_kje = 0x06ac, + XK_Ukrainian_ghe_with_upturn = 0x06ad, + XK_Byelorussian_shortu = 0x06ae, + XK_Cyrillic_dzhe = 0x06af, + XK_Serbian_dze = 0x06af, + XK_numerosign = 0x06b0, + XK_Serbian_DJE = 0x06b1, + XK_Macedonia_GJE = 0x06b2, + XK_Cyrillic_IO = 0x06b3, + XK_Ukrainian_IE = 0x06b4, + XK_Ukranian_JE = 0x06b4, + XK_Macedonia_DSE = 0x06b5, + XK_Ukrainian_I = 0x06b6, + XK_Ukranian_I = 0x06b6, + XK_Ukrainian_YI = 0x06b7, + XK_Ukranian_YI = 0x06b7, + XK_Cyrillic_JE = 0x06b8, + XK_Serbian_JE = 0x06b8, + XK_Cyrillic_LJE = 0x06b9, + XK_Serbian_LJE = 0x06b9, + XK_Cyrillic_NJE = 0x06ba, + XK_Serbian_NJE = 0x06ba, + XK_Serbian_TSHE = 0x06bb, + XK_Macedonia_KJE = 0x06bc, + XK_Ukrainian_GHE_WITH_UPTURN = 0x06bd, + XK_Byelorussian_SHORTU = 0x06be, + XK_Cyrillic_DZHE = 0x06bf, + XK_Serbian_DZE = 0x06bf, + XK_Cyrillic_yu = 0x06c0, + XK_Cyrillic_a = 0x06c1, + XK_Cyrillic_be = 0x06c2, + XK_Cyrillic_tse = 0x06c3, + XK_Cyrillic_de = 0x06c4, + XK_Cyrillic_ie = 0x06c5, + XK_Cyrillic_ef = 0x06c6, + XK_Cyrillic_ghe = 0x06c7, + XK_Cyrillic_ha = 0x06c8, + XK_Cyrillic_i = 0x06c9, + XK_Cyrillic_shorti = 0x06ca, + XK_Cyrillic_ka = 0x06cb, + XK_Cyrillic_el = 0x06cc, + XK_Cyrillic_em = 0x06cd, + XK_Cyrillic_en = 0x06ce, + XK_Cyrillic_o = 0x06cf, + XK_Cyrillic_pe = 0x06d0, + XK_Cyrillic_ya = 0x06d1, + XK_Cyrillic_er = 0x06d2, + XK_Cyrillic_es = 0x06d3, + XK_Cyrillic_te = 0x06d4, + XK_Cyrillic_u = 0x06d5, + XK_Cyrillic_zhe = 0x06d6, + XK_Cyrillic_ve = 0x06d7, + XK_Cyrillic_softsign = 0x06d8, + XK_Cyrillic_yeru = 0x06d9, + XK_Cyrillic_ze = 0x06da, + XK_Cyrillic_sha = 0x06db, + XK_Cyrillic_e = 0x06dc, + XK_Cyrillic_shcha = 0x06dd, + XK_Cyrillic_che = 0x06de, + XK_Cyrillic_hardsign = 0x06df, + XK_Cyrillic_YU = 0x06e0, + XK_Cyrillic_A = 0x06e1, + XK_Cyrillic_BE = 0x06e2, + XK_Cyrillic_TSE = 0x06e3, + XK_Cyrillic_DE = 0x06e4, + XK_Cyrillic_IE = 0x06e5, + XK_Cyrillic_EF = 0x06e6, + XK_Cyrillic_GHE = 0x06e7, + XK_Cyrillic_HA = 0x06e8, + XK_Cyrillic_I = 0x06e9, + XK_Cyrillic_SHORTI = 0x06ea, + XK_Cyrillic_KA = 0x06eb, + XK_Cyrillic_EL = 0x06ec, + XK_Cyrillic_EM = 0x06ed, + XK_Cyrillic_EN = 0x06ee, + XK_Cyrillic_O = 0x06ef, + XK_Cyrillic_PE = 0x06f0, + XK_Cyrillic_YA = 0x06f1, + XK_Cyrillic_ER = 0x06f2, + XK_Cyrillic_ES = 0x06f3, + XK_Cyrillic_TE = 0x06f4, + XK_Cyrillic_U = 0x06f5, + XK_Cyrillic_ZHE = 0x06f6, + XK_Cyrillic_VE = 0x06f7, + XK_Cyrillic_SOFTSIGN = 0x06f8, + XK_Cyrillic_YERU = 0x06f9, + XK_Cyrillic_ZE = 0x06fa, + XK_Cyrillic_SHA = 0x06fb, + XK_Cyrillic_E = 0x06fc, + XK_Cyrillic_SHCHA = 0x06fd, + XK_Cyrillic_CHE = 0x06fe, + XK_Cyrillic_HARDSIGN = 0x06ff, + XK_Greek_ALPHAaccent = 0x07a1, + XK_Greek_EPSILONaccent = 0x07a2, + XK_Greek_ETAaccent = 0x07a3, + XK_Greek_IOTAaccent = 0x07a4, + XK_Greek_IOTAdieresis = 0x07a5, + XK_Greek_IOTAdiaeresis = 0x07a5, + XK_Greek_OMICRONaccent = 0x07a7, + XK_Greek_UPSILONaccent = 0x07a8, + XK_Greek_UPSILONdieresis = 0x07a9, + XK_Greek_OMEGAaccent = 0x07ab, + XK_Greek_accentdieresis = 0x07ae, + XK_Greek_horizbar = 0x07af, + XK_Greek_alphaaccent = 0x07b1, + XK_Greek_epsilonaccent = 0x07b2, + XK_Greek_etaaccent = 0x07b3, + XK_Greek_iotaaccent = 0x07b4, + XK_Greek_iotadieresis = 0x07b5, + XK_Greek_iotaaccentdieresis = 0x07b6, + XK_Greek_omicronaccent = 0x07b7, + XK_Greek_upsilonaccent = 0x07b8, + XK_Greek_upsilondieresis = 0x07b9, + XK_Greek_upsilonaccentdieresis = 0x07ba, + XK_Greek_omegaaccent = 0x07bb, + XK_Greek_ALPHA = 0x07c1, + XK_Greek_BETA = 0x07c2, + XK_Greek_GAMMA = 0x07c3, + XK_Greek_DELTA = 0x07c4, + XK_Greek_EPSILON = 0x07c5, + XK_Greek_ZETA = 0x07c6, + XK_Greek_ETA = 0x07c7, + XK_Greek_THETA = 0x07c8, + XK_Greek_IOTA = 0x07c9, + XK_Greek_KAPPA = 0x07ca, + XK_Greek_LAMDA = 0x07cb, + XK_Greek_LAMBDA = 0x07cb, + XK_Greek_MU = 0x07cc, + XK_Greek_NU = 0x07cd, + XK_Greek_XI = 0x07ce, + XK_Greek_OMICRON = 0x07cf, + XK_Greek_PI = 0x07d0, + XK_Greek_RHO = 0x07d1, + XK_Greek_SIGMA = 0x07d2, + XK_Greek_TAU = 0x07d4, + XK_Greek_UPSILON = 0x07d5, + XK_Greek_PHI = 0x07d6, + XK_Greek_CHI = 0x07d7, + XK_Greek_PSI = 0x07d8, + XK_Greek_OMEGA = 0x07d9, + XK_Greek_alpha = 0x07e1, + XK_Greek_beta = 0x07e2, + XK_Greek_gamma = 0x07e3, + XK_Greek_delta = 0x07e4, + XK_Greek_epsilon = 0x07e5, + XK_Greek_zeta = 0x07e6, + XK_Greek_eta = 0x07e7, + XK_Greek_theta = 0x07e8, + XK_Greek_iota = 0x07e9, + XK_Greek_kappa = 0x07ea, + XK_Greek_lamda = 0x07eb, + XK_Greek_lambda = 0x07eb, + XK_Greek_mu = 0x07ec, + XK_Greek_nu = 0x07ed, + XK_Greek_xi = 0x07ee, + XK_Greek_omicron = 0x07ef, + XK_Greek_pi = 0x07f0, + XK_Greek_rho = 0x07f1, + XK_Greek_sigma = 0x07f2, + XK_Greek_finalsmallsigma = 0x07f3, + XK_Greek_tau = 0x07f4, + XK_Greek_upsilon = 0x07f5, + XK_Greek_phi = 0x07f6, + XK_Greek_chi = 0x07f7, + XK_Greek_psi = 0x07f8, + XK_Greek_omega = 0x07f9, + XK_Greek_switch = 0xff7e, + XK_leftradical = 0x08a1, + XK_topleftradical = 0x08a2, + XK_horizconnector = 0x08a3, + XK_topintegral = 0x08a4, + XK_botintegral = 0x08a5, + XK_vertconnector = 0x08a6, + XK_topleftsqbracket = 0x08a7, + XK_botleftsqbracket = 0x08a8, + XK_toprightsqbracket = 0x08a9, + XK_botrightsqbracket = 0x08aa, + XK_topleftparens = 0x08ab, + XK_botleftparens = 0x08ac, + XK_toprightparens = 0x08ad, + XK_botrightparens = 0x08ae, + XK_leftmiddlecurlybrace = 0x08af, + XK_rightmiddlecurlybrace = 0x08b0, + XK_topleftsummation = 0x08b1, + XK_botleftsummation = 0x08b2, + XK_topvertsummationconnector = 0x08b3, + XK_botvertsummationconnector = 0x08b4, + XK_toprightsummation = 0x08b5, + XK_botrightsummation = 0x08b6, + XK_rightmiddlesummation = 0x08b7, + XK_lessthanequal = 0x08bc, + XK_notequal = 0x08bd, + XK_greaterthanequal = 0x08be, + XK_integral = 0x08bf, + XK_therefore = 0x08c0, + XK_variation = 0x08c1, + XK_infinity = 0x08c2, + XK_nabla = 0x08c5, + XK_approximate = 0x08c8, + XK_similarequal = 0x08c9, + XK_ifonlyif = 0x08cd, + XK_implies = 0x08ce, + XK_identical = 0x08cf, + XK_radical = 0x08d6, + XK_includedin = 0x08da, + XK_includes = 0x08db, + XK_intersection = 0x08dc, + XK_union = 0x08dd, + XK_logicaland = 0x08de, + XK_logicalor = 0x08df, + XK_partialderivative = 0x08ef, + XK_function = 0x08f6, + XK_leftarrow = 0x08fb, + XK_uparrow = 0x08fc, + XK_rightarrow = 0x08fd, + XK_downarrow = 0x08fe, + XK_blank = 0x09df, + XK_soliddiamond = 0x09e0, + XK_checkerboard = 0x09e1, + XK_ht = 0x09e2, + XK_ff = 0x09e3, + XK_cr = 0x09e4, + XK_lf = 0x09e5, + XK_nl = 0x09e8, + XK_vt = 0x09e9, + XK_lowrightcorner = 0x09ea, + XK_uprightcorner = 0x09eb, + XK_upleftcorner = 0x09ec, + XK_lowleftcorner = 0x09ed, + XK_crossinglines = 0x09ee, + XK_horizlinescan1 = 0x09ef, + XK_horizlinescan3 = 0x09f0, + XK_horizlinescan5 = 0x09f1, + XK_horizlinescan7 = 0x09f2, + XK_horizlinescan9 = 0x09f3, + XK_leftt = 0x09f4, + XK_rightt = 0x09f5, + XK_bott = 0x09f6, + XK_topt = 0x09f7, + XK_vertbar = 0x09f8, + XK_emspace = 0x0aa1, + XK_enspace = 0x0aa2, + XK_em3space = 0x0aa3, + XK_em4space = 0x0aa4, + XK_digitspace = 0x0aa5, + XK_punctspace = 0x0aa6, + XK_thinspace = 0x0aa7, + XK_hairspace = 0x0aa8, + XK_emdash = 0x0aa9, + XK_endash = 0x0aaa, + XK_signifblank = 0x0aac, + XK_ellipsis = 0x0aae, + XK_doubbaselinedot = 0x0aaf, + XK_onethird = 0x0ab0, + XK_twothirds = 0x0ab1, + XK_onefifth = 0x0ab2, + XK_twofifths = 0x0ab3, + XK_threefifths = 0x0ab4, + XK_fourfifths = 0x0ab5, + XK_onesixth = 0x0ab6, + XK_fivesixths = 0x0ab7, + XK_careof = 0x0ab8, + XK_figdash = 0x0abb, + XK_leftanglebracket = 0x0abc, + XK_decimalpoint = 0x0abd, + XK_rightanglebracket = 0x0abe, + XK_marker = 0x0abf, + XK_oneeighth = 0x0ac3, + XK_threeeighths = 0x0ac4, + XK_fiveeighths = 0x0ac5, + XK_seveneighths = 0x0ac6, + XK_trademark = 0x0ac9, + XK_signaturemark = 0x0aca, + XK_trademarkincircle = 0x0acb, + XK_leftopentriangle = 0x0acc, + XK_rightopentriangle = 0x0acd, + XK_emopencircle = 0x0ace, + XK_emopenrectangle = 0x0acf, + XK_leftsinglequotemark = 0x0ad0, + XK_rightsinglequotemark = 0x0ad1, + XK_leftdoublequotemark = 0x0ad2, + XK_rightdoublequotemark = 0x0ad3, + XK_prescription = 0x0ad4, + XK_permille = 0x0ad5, + XK_minutes = 0x0ad6, + XK_seconds = 0x0ad7, + XK_latincross = 0x0ad9, + XK_hexagram = 0x0ada, + XK_filledrectbullet = 0x0adb, + XK_filledlefttribullet = 0x0adc, + XK_filledrighttribullet = 0x0add, + XK_emfilledcircle = 0x0ade, + XK_emfilledrect = 0x0adf, + XK_enopencircbullet = 0x0ae0, + XK_enopensquarebullet = 0x0ae1, + XK_openrectbullet = 0x0ae2, + XK_opentribulletup = 0x0ae3, + XK_opentribulletdown = 0x0ae4, + XK_openstar = 0x0ae5, + XK_enfilledcircbullet = 0x0ae6, + XK_enfilledsqbullet = 0x0ae7, + XK_filledtribulletup = 0x0ae8, + XK_filledtribulletdown = 0x0ae9, + XK_leftpointer = 0x0aea, + XK_rightpointer = 0x0aeb, + XK_club = 0x0aec, + XK_diamond = 0x0aed, + XK_heart = 0x0aee, + XK_maltesecross = 0x0af0, + XK_dagger = 0x0af1, + XK_doubledagger = 0x0af2, + XK_checkmark = 0x0af3, + XK_ballotcross = 0x0af4, + XK_musicalsharp = 0x0af5, + XK_musicalflat = 0x0af6, + XK_malesymbol = 0x0af7, + XK_femalesymbol = 0x0af8, + XK_telephone = 0x0af9, + XK_telephonerecorder = 0x0afa, + XK_phonographcopyright = 0x0afb, + XK_caret = 0x0afc, + XK_singlelowquotemark = 0x0afd, + XK_doublelowquotemark = 0x0afe, + XK_cursor = 0x0aff, + XK_leftcaret = 0x0ba3, + XK_rightcaret = 0x0ba6, + XK_downcaret = 0x0ba8, + XK_upcaret = 0x0ba9, + XK_overbar = 0x0bc0, + XK_downtack = 0x0bc2, + XK_upshoe = 0x0bc3, + XK_downstile = 0x0bc4, + XK_underbar = 0x0bc6, + XK_jot = 0x0bca, + XK_quad = 0x0bcc, + XK_uptack = 0x0bce, + XK_circle = 0x0bcf, + XK_upstile = 0x0bd3, + XK_downshoe = 0x0bd6, + XK_rightshoe = 0x0bd8, + XK_leftshoe = 0x0bda, + XK_lefttack = 0x0bdc, + XK_righttack = 0x0bfc, + XK_hebrew_doublelowline = 0x0cdf, + XK_hebrew_aleph = 0x0ce0, + XK_hebrew_bet = 0x0ce1, + XK_hebrew_beth = 0x0ce1, + XK_hebrew_gimel = 0x0ce2, + XK_hebrew_gimmel = 0x0ce2, + XK_hebrew_dalet = 0x0ce3, + XK_hebrew_daleth = 0x0ce3, + XK_hebrew_he = 0x0ce4, + XK_hebrew_waw = 0x0ce5, + XK_hebrew_zain = 0x0ce6, + XK_hebrew_zayin = 0x0ce6, + XK_hebrew_chet = 0x0ce7, + XK_hebrew_het = 0x0ce7, + XK_hebrew_tet = 0x0ce8, + XK_hebrew_teth = 0x0ce8, + XK_hebrew_yod = 0x0ce9, + XK_hebrew_finalkaph = 0x0cea, + XK_hebrew_kaph = 0x0ceb, + XK_hebrew_lamed = 0x0cec, + XK_hebrew_finalmem = 0x0ced, + XK_hebrew_mem = 0x0cee, + XK_hebrew_finalnun = 0x0cef, + XK_hebrew_nun = 0x0cf0, + XK_hebrew_samech = 0x0cf1, + XK_hebrew_samekh = 0x0cf1, + XK_hebrew_ayin = 0x0cf2, + XK_hebrew_finalpe = 0x0cf3, + XK_hebrew_pe = 0x0cf4, + XK_hebrew_finalzade = 0x0cf5, + XK_hebrew_finalzadi = 0x0cf5, + XK_hebrew_zade = 0x0cf6, + XK_hebrew_zadi = 0x0cf6, + XK_hebrew_qoph = 0x0cf7, + XK_hebrew_kuf = 0x0cf7, + XK_hebrew_resh = 0x0cf8, + XK_hebrew_shin = 0x0cf9, + XK_hebrew_taw = 0x0cfa, + XK_hebrew_taf = 0x0cfa, + XK_Hebrew_switch = 0xff7e, + XK_Thai_kokai = 0x0da1, + XK_Thai_khokhai = 0x0da2, + XK_Thai_khokhuat = 0x0da3, + XK_Thai_khokhwai = 0x0da4, + XK_Thai_khokhon = 0x0da5, + XK_Thai_khorakhang = 0x0da6, + XK_Thai_ngongu = 0x0da7, + XK_Thai_chochan = 0x0da8, + XK_Thai_choching = 0x0da9, + XK_Thai_chochang = 0x0daa, + XK_Thai_soso = 0x0dab, + XK_Thai_chochoe = 0x0dac, + XK_Thai_yoying = 0x0dad, + XK_Thai_dochada = 0x0dae, + XK_Thai_topatak = 0x0daf, + XK_Thai_thothan = 0x0db0, + XK_Thai_thonangmontho = 0x0db1, + XK_Thai_thophuthao = 0x0db2, + XK_Thai_nonen = 0x0db3, + XK_Thai_dodek = 0x0db4, + XK_Thai_totao = 0x0db5, + XK_Thai_thothung = 0x0db6, + XK_Thai_thothahan = 0x0db7, + XK_Thai_thothong = 0x0db8, + XK_Thai_nonu = 0x0db9, + XK_Thai_bobaimai = 0x0dba, + XK_Thai_popla = 0x0dbb, + XK_Thai_phophung = 0x0dbc, + XK_Thai_fofa = 0x0dbd, + XK_Thai_phophan = 0x0dbe, + XK_Thai_fofan = 0x0dbf, + XK_Thai_phosamphao = 0x0dc0, + XK_Thai_moma = 0x0dc1, + XK_Thai_yoyak = 0x0dc2, + XK_Thai_rorua = 0x0dc3, + XK_Thai_ru = 0x0dc4, + XK_Thai_loling = 0x0dc5, + XK_Thai_lu = 0x0dc6, + XK_Thai_wowaen = 0x0dc7, + XK_Thai_sosala = 0x0dc8, + XK_Thai_sorusi = 0x0dc9, + XK_Thai_sosua = 0x0dca, + XK_Thai_hohip = 0x0dcb, + XK_Thai_lochula = 0x0dcc, + XK_Thai_oang = 0x0dcd, + XK_Thai_honokhuk = 0x0dce, + XK_Thai_paiyannoi = 0x0dcf, + XK_Thai_saraa = 0x0dd0, + XK_Thai_maihanakat = 0x0dd1, + XK_Thai_saraaa = 0x0dd2, + XK_Thai_saraam = 0x0dd3, + XK_Thai_sarai = 0x0dd4, + XK_Thai_saraii = 0x0dd5, + XK_Thai_saraue = 0x0dd6, + XK_Thai_sarauee = 0x0dd7, + XK_Thai_sarau = 0x0dd8, + XK_Thai_sarauu = 0x0dd9, + XK_Thai_phinthu = 0x0dda, + XK_Thai_maihanakat_maitho = 0x0dde, + XK_Thai_baht = 0x0ddf, + XK_Thai_sarae = 0x0de0, + XK_Thai_saraae = 0x0de1, + XK_Thai_sarao = 0x0de2, + XK_Thai_saraaimaimuan = 0x0de3, + XK_Thai_saraaimaimalai = 0x0de4, + XK_Thai_lakkhangyao = 0x0de5, + XK_Thai_maiyamok = 0x0de6, + XK_Thai_maitaikhu = 0x0de7, + XK_Thai_maiek = 0x0de8, + XK_Thai_maitho = 0x0de9, + XK_Thai_maitri = 0x0dea, + XK_Thai_maichattawa = 0x0deb, + XK_Thai_thanthakhat = 0x0dec, + XK_Thai_nikhahit = 0x0ded, + XK_Thai_leksun = 0x0df0, + XK_Thai_leknung = 0x0df1, + XK_Thai_leksong = 0x0df2, + XK_Thai_leksam = 0x0df3, + XK_Thai_leksi = 0x0df4, + XK_Thai_lekha = 0x0df5, + XK_Thai_lekhok = 0x0df6, + XK_Thai_lekchet = 0x0df7, + XK_Thai_lekpaet = 0x0df8, + XK_Thai_lekkao = 0x0df9, + XK_Hangul = 0xff31, + XK_Hangul_Start = 0xff32, + XK_Hangul_End = 0xff33, + XK_Hangul_Hanja = 0xff34, + XK_Hangul_Jamo = 0xff35, + XK_Hangul_Romaja = 0xff36, + XK_Hangul_Codeinput = 0xff37, + XK_Hangul_Jeonja = 0xff38, + XK_Hangul_Banja = 0xff39, + XK_Hangul_PreHanja = 0xff3a, + XK_Hangul_PostHanja = 0xff3b, + XK_Hangul_SingleCandidate = 0xff3c, + XK_Hangul_MultipleCandidate = 0xff3d, + XK_Hangul_PreviousCandidate = 0xff3e, + XK_Hangul_Special = 0xff3f, + XK_Hangul_switch = 0xff7e, + XK_Hangul_Kiyeog = 0x0ea1, + XK_Hangul_SsangKiyeog = 0x0ea2, + XK_Hangul_KiyeogSios = 0x0ea3, + XK_Hangul_Nieun = 0x0ea4, + XK_Hangul_NieunJieuj = 0x0ea5, + XK_Hangul_NieunHieuh = 0x0ea6, + XK_Hangul_Dikeud = 0x0ea7, + XK_Hangul_SsangDikeud = 0x0ea8, + XK_Hangul_Rieul = 0x0ea9, + XK_Hangul_RieulKiyeog = 0x0eaa, + XK_Hangul_RieulMieum = 0x0eab, + XK_Hangul_RieulPieub = 0x0eac, + XK_Hangul_RieulSios = 0x0ead, + XK_Hangul_RieulTieut = 0x0eae, + XK_Hangul_RieulPhieuf = 0x0eaf, + XK_Hangul_RieulHieuh = 0x0eb0, + XK_Hangul_Mieum = 0x0eb1, + XK_Hangul_Pieub = 0x0eb2, + XK_Hangul_SsangPieub = 0x0eb3, + XK_Hangul_PieubSios = 0x0eb4, + XK_Hangul_Sios = 0x0eb5, + XK_Hangul_SsangSios = 0x0eb6, + XK_Hangul_Ieung = 0x0eb7, + XK_Hangul_Jieuj = 0x0eb8, + XK_Hangul_SsangJieuj = 0x0eb9, + XK_Hangul_Cieuc = 0x0eba, + XK_Hangul_Khieuq = 0x0ebb, + XK_Hangul_Tieut = 0x0ebc, + XK_Hangul_Phieuf = 0x0ebd, + XK_Hangul_Hieuh = 0x0ebe, + XK_Hangul_A = 0x0ebf, + XK_Hangul_AE = 0x0ec0, + XK_Hangul_YA = 0x0ec1, + XK_Hangul_YAE = 0x0ec2, + XK_Hangul_EO = 0x0ec3, + XK_Hangul_E = 0x0ec4, + XK_Hangul_YEO = 0x0ec5, + XK_Hangul_YE = 0x0ec6, + XK_Hangul_O = 0x0ec7, + XK_Hangul_WA = 0x0ec8, + XK_Hangul_WAE = 0x0ec9, + XK_Hangul_OE = 0x0eca, + XK_Hangul_YO = 0x0ecb, + XK_Hangul_U = 0x0ecc, + XK_Hangul_WEO = 0x0ecd, + XK_Hangul_WE = 0x0ece, + XK_Hangul_WI = 0x0ecf, + XK_Hangul_YU = 0x0ed0, + XK_Hangul_EU = 0x0ed1, + XK_Hangul_YI = 0x0ed2, + XK_Hangul_I = 0x0ed3, + XK_Hangul_J_Kiyeog = 0x0ed4, + XK_Hangul_J_SsangKiyeog = 0x0ed5, + XK_Hangul_J_KiyeogSios = 0x0ed6, + XK_Hangul_J_Nieun = 0x0ed7, + XK_Hangul_J_NieunJieuj = 0x0ed8, + XK_Hangul_J_NieunHieuh = 0x0ed9, + XK_Hangul_J_Dikeud = 0x0eda, + XK_Hangul_J_Rieul = 0x0edb, + XK_Hangul_J_RieulKiyeog = 0x0edc, + XK_Hangul_J_RieulMieum = 0x0edd, + XK_Hangul_J_RieulPieub = 0x0ede, + XK_Hangul_J_RieulSios = 0x0edf, + XK_Hangul_J_RieulTieut = 0x0ee0, + XK_Hangul_J_RieulPhieuf = 0x0ee1, + XK_Hangul_J_RieulHieuh = 0x0ee2, + XK_Hangul_J_Mieum = 0x0ee3, + XK_Hangul_J_Pieub = 0x0ee4, + XK_Hangul_J_PieubSios = 0x0ee5, + XK_Hangul_J_Sios = 0x0ee6, + XK_Hangul_J_SsangSios = 0x0ee7, + XK_Hangul_J_Ieung = 0x0ee8, + XK_Hangul_J_Jieuj = 0x0ee9, + XK_Hangul_J_Cieuc = 0x0eea, + XK_Hangul_J_Khieuq = 0x0eeb, + XK_Hangul_J_Tieut = 0x0eec, + XK_Hangul_J_Phieuf = 0x0eed, + XK_Hangul_J_Hieuh = 0x0eee, + XK_Hangul_RieulYeorinHieuh = 0x0eef, + XK_Hangul_SunkyeongeumMieum = 0x0ef0, + XK_Hangul_SunkyeongeumPieub = 0x0ef1, + XK_Hangul_PanSios = 0x0ef2, + XK_Hangul_KkogjiDalrinIeung = 0x0ef3, + XK_Hangul_SunkyeongeumPhieuf = 0x0ef4, + XK_Hangul_YeorinHieuh = 0x0ef5, + XK_Hangul_AraeA = 0x0ef6, + XK_Hangul_AraeAE = 0x0ef7, + XK_Hangul_J_PanSios = 0x0ef8, + XK_Hangul_J_KkogjiDalrinIeung = 0x0ef9, + XK_Hangul_J_YeorinHieuh = 0x0efa, + XK_Korean_Won = 0x0eff, + XK_Armenian_ligature_ew = 0x1000587, + XK_Armenian_full_stop = 0x1000589, + XK_Armenian_verjaket = 0x1000589, + XK_Armenian_separation_mark = 0x100055d, + XK_Armenian_but = 0x100055d, + XK_Armenian_hyphen = 0x100058a, + XK_Armenian_yentamna = 0x100058a, + XK_Armenian_exclam = 0x100055c, + XK_Armenian_amanak = 0x100055c, + XK_Armenian_accent = 0x100055b, + XK_Armenian_shesht = 0x100055b, + XK_Armenian_question = 0x100055e, + XK_Armenian_paruyk = 0x100055e, + XK_Armenian_AYB = 0x1000531, + XK_Armenian_ayb = 0x1000561, + XK_Armenian_BEN = 0x1000532, + XK_Armenian_ben = 0x1000562, + XK_Armenian_GIM = 0x1000533, + XK_Armenian_gim = 0x1000563, + XK_Armenian_DA = 0x1000534, + XK_Armenian_da = 0x1000564, + XK_Armenian_YECH = 0x1000535, + XK_Armenian_yech = 0x1000565, + XK_Armenian_ZA = 0x1000536, + XK_Armenian_za = 0x1000566, + XK_Armenian_E = 0x1000537, + XK_Armenian_e = 0x1000567, + XK_Armenian_AT = 0x1000538, + XK_Armenian_at = 0x1000568, + XK_Armenian_TO = 0x1000539, + XK_Armenian_to = 0x1000569, + XK_Armenian_ZHE = 0x100053a, + XK_Armenian_zhe = 0x100056a, + XK_Armenian_INI = 0x100053b, + XK_Armenian_ini = 0x100056b, + XK_Armenian_LYUN = 0x100053c, + XK_Armenian_lyun = 0x100056c, + XK_Armenian_KHE = 0x100053d, + XK_Armenian_khe = 0x100056d, + XK_Armenian_TSA = 0x100053e, + XK_Armenian_tsa = 0x100056e, + XK_Armenian_KEN = 0x100053f, + XK_Armenian_ken = 0x100056f, + XK_Armenian_HO = 0x1000540, + XK_Armenian_ho = 0x1000570, + XK_Armenian_DZA = 0x1000541, + XK_Armenian_dza = 0x1000571, + XK_Armenian_GHAT = 0x1000542, + XK_Armenian_ghat = 0x1000572, + XK_Armenian_TCHE = 0x1000543, + XK_Armenian_tche = 0x1000573, + XK_Armenian_MEN = 0x1000544, + XK_Armenian_men = 0x1000574, + XK_Armenian_HI = 0x1000545, + XK_Armenian_hi = 0x1000575, + XK_Armenian_NU = 0x1000546, + XK_Armenian_nu = 0x1000576, + XK_Armenian_SHA = 0x1000547, + XK_Armenian_sha = 0x1000577, + XK_Armenian_VO = 0x1000548, + XK_Armenian_vo = 0x1000578, + XK_Armenian_CHA = 0x1000549, + XK_Armenian_cha = 0x1000579, + XK_Armenian_PE = 0x100054a, + XK_Armenian_pe = 0x100057a, + XK_Armenian_JE = 0x100054b, + XK_Armenian_je = 0x100057b, + XK_Armenian_RA = 0x100054c, + XK_Armenian_ra = 0x100057c, + XK_Armenian_SE = 0x100054d, + XK_Armenian_se = 0x100057d, + XK_Armenian_VEV = 0x100054e, + XK_Armenian_vev = 0x100057e, + XK_Armenian_TYUN = 0x100054f, + XK_Armenian_tyun = 0x100057f, + XK_Armenian_RE = 0x1000550, + XK_Armenian_re = 0x1000580, + XK_Armenian_TSO = 0x1000551, + XK_Armenian_tso = 0x1000581, + XK_Armenian_VYUN = 0x1000552, + XK_Armenian_vyun = 0x1000582, + XK_Armenian_PYUR = 0x1000553, + XK_Armenian_pyur = 0x1000583, + XK_Armenian_KE = 0x1000554, + XK_Armenian_ke = 0x1000584, + XK_Armenian_O = 0x1000555, + XK_Armenian_o = 0x1000585, + XK_Armenian_FE = 0x1000556, + XK_Armenian_fe = 0x1000586, + XK_Armenian_apostrophe = 0x100055a, + XK_Georgian_an = 0x10010d0, + XK_Georgian_ban = 0x10010d1, + XK_Georgian_gan = 0x10010d2, + XK_Georgian_don = 0x10010d3, + XK_Georgian_en = 0x10010d4, + XK_Georgian_vin = 0x10010d5, + XK_Georgian_zen = 0x10010d6, + XK_Georgian_tan = 0x10010d7, + XK_Georgian_in = 0x10010d8, + XK_Georgian_kan = 0x10010d9, + XK_Georgian_las = 0x10010da, + XK_Georgian_man = 0x10010db, + XK_Georgian_nar = 0x10010dc, + XK_Georgian_on = 0x10010dd, + XK_Georgian_par = 0x10010de, + XK_Georgian_zhar = 0x10010df, + XK_Georgian_rae = 0x10010e0, + XK_Georgian_san = 0x10010e1, + XK_Georgian_tar = 0x10010e2, + XK_Georgian_un = 0x10010e3, + XK_Georgian_phar = 0x10010e4, + XK_Georgian_khar = 0x10010e5, + XK_Georgian_ghan = 0x10010e6, + XK_Georgian_qar = 0x10010e7, + XK_Georgian_shin = 0x10010e8, + XK_Georgian_chin = 0x10010e9, + XK_Georgian_can = 0x10010ea, + XK_Georgian_jil = 0x10010eb, + XK_Georgian_cil = 0x10010ec, + XK_Georgian_char = 0x10010ed, + XK_Georgian_xan = 0x10010ee, + XK_Georgian_jhan = 0x10010ef, + XK_Georgian_hae = 0x10010f0, + XK_Georgian_he = 0x10010f1, + XK_Georgian_hie = 0x10010f2, + XK_Georgian_we = 0x10010f3, + XK_Georgian_har = 0x10010f4, + XK_Georgian_hoe = 0x10010f5, + XK_Georgian_fi = 0x10010f6, + XK_Xabovedot = 0x1001e8a, + XK_Ibreve = 0x100012c, + XK_Zstroke = 0x10001b5, + XK_Gcaron = 0x10001e6, + XK_Ocaron = 0x10001d1, + XK_Obarred = 0x100019f, + XK_xabovedot = 0x1001e8b, + XK_ibreve = 0x100012d, + XK_zstroke = 0x10001b6, + XK_gcaron = 0x10001e7, + XK_ocaron = 0x10001d2, + XK_obarred = 0x1000275, + XK_SCHWA = 0x100018f, + XK_schwa = 0x1000259, + XK_EZH = 0x10001b7, + XK_ezh = 0x1000292, + XK_Lbelowdot = 0x1001e36, + XK_lbelowdot = 0x1001e37, + XK_Abelowdot = 0x1001ea0, + XK_abelowdot = 0x1001ea1, + XK_Ahook = 0x1001ea2, + XK_ahook = 0x1001ea3, + XK_Acircumflexacute = 0x1001ea4, + XK_acircumflexacute = 0x1001ea5, + XK_Acircumflexgrave = 0x1001ea6, + XK_acircumflexgrave = 0x1001ea7, + XK_Acircumflexhook = 0x1001ea8, + XK_acircumflexhook = 0x1001ea9, + XK_Acircumflextilde = 0x1001eaa, + XK_acircumflextilde = 0x1001eab, + XK_Acircumflexbelowdot = 0x1001eac, + XK_acircumflexbelowdot = 0x1001ead, + XK_Abreveacute = 0x1001eae, + XK_abreveacute = 0x1001eaf, + XK_Abrevegrave = 0x1001eb0, + XK_abrevegrave = 0x1001eb1, + XK_Abrevehook = 0x1001eb2, + XK_abrevehook = 0x1001eb3, + XK_Abrevetilde = 0x1001eb4, + XK_abrevetilde = 0x1001eb5, + XK_Abrevebelowdot = 0x1001eb6, + XK_abrevebelowdot = 0x1001eb7, + XK_Ebelowdot = 0x1001eb8, + XK_ebelowdot = 0x1001eb9, + XK_Ehook = 0x1001eba, + XK_ehook = 0x1001ebb, + XK_Etilde = 0x1001ebc, + XK_etilde = 0x1001ebd, + XK_Ecircumflexacute = 0x1001ebe, + XK_ecircumflexacute = 0x1001ebf, + XK_Ecircumflexgrave = 0x1001ec0, + XK_ecircumflexgrave = 0x1001ec1, + XK_Ecircumflexhook = 0x1001ec2, + XK_ecircumflexhook = 0x1001ec3, + XK_Ecircumflextilde = 0x1001ec4, + XK_ecircumflextilde = 0x1001ec5, + XK_Ecircumflexbelowdot = 0x1001ec6, + XK_ecircumflexbelowdot = 0x1001ec7, + XK_Ihook = 0x1001ec8, + XK_ihook = 0x1001ec9, + XK_Ibelowdot = 0x1001eca, + XK_ibelowdot = 0x1001ecb, + XK_Obelowdot = 0x1001ecc, + XK_obelowdot = 0x1001ecd, + XK_Ohook = 0x1001ece, + XK_ohook = 0x1001ecf, + XK_Ocircumflexacute = 0x1001ed0, + XK_ocircumflexacute = 0x1001ed1, + XK_Ocircumflexgrave = 0x1001ed2, + XK_ocircumflexgrave = 0x1001ed3, + XK_Ocircumflexhook = 0x1001ed4, + XK_ocircumflexhook = 0x1001ed5, + XK_Ocircumflextilde = 0x1001ed6, + XK_ocircumflextilde = 0x1001ed7, + XK_Ocircumflexbelowdot = 0x1001ed8, + XK_ocircumflexbelowdot = 0x1001ed9, + XK_Ohornacute = 0x1001eda, + XK_ohornacute = 0x1001edb, + XK_Ohorngrave = 0x1001edc, + XK_ohorngrave = 0x1001edd, + XK_Ohornhook = 0x1001ede, + XK_ohornhook = 0x1001edf, + XK_Ohorntilde = 0x1001ee0, + XK_ohorntilde = 0x1001ee1, + XK_Ohornbelowdot = 0x1001ee2, + XK_ohornbelowdot = 0x1001ee3, + XK_Ubelowdot = 0x1001ee4, + XK_ubelowdot = 0x1001ee5, + XK_Uhook = 0x1001ee6, + XK_uhook = 0x1001ee7, + XK_Uhornacute = 0x1001ee8, + XK_uhornacute = 0x1001ee9, + XK_Uhorngrave = 0x1001eea, + XK_uhorngrave = 0x1001eeb, + XK_Uhornhook = 0x1001eec, + XK_uhornhook = 0x1001eed, + XK_Uhorntilde = 0x1001eee, + XK_uhorntilde = 0x1001eef, + XK_Uhornbelowdot = 0x1001ef0, + XK_uhornbelowdot = 0x1001ef1, + XK_Ybelowdot = 0x1001ef4, + XK_ybelowdot = 0x1001ef5, + XK_Yhook = 0x1001ef6, + XK_yhook = 0x1001ef7, + XK_Ytilde = 0x1001ef8, + XK_ytilde = 0x1001ef9, + XK_Ohorn = 0x10001a0, + XK_ohorn = 0x10001a1, + XK_Uhorn = 0x10001af, + XK_uhorn = 0x10001b0, + XK_EcuSign = 0x10020a0, + XK_ColonSign = 0x10020a1, + XK_CruzeiroSign = 0x10020a2, + XK_FFrancSign = 0x10020a3, + XK_LiraSign = 0x10020a4, + XK_MillSign = 0x10020a5, + XK_NairaSign = 0x10020a6, + XK_PesetaSign = 0x10020a7, + XK_RupeeSign = 0x10020a8, + XK_WonSign = 0x10020a9, + XK_NewSheqelSign = 0x10020aa, + XK_DongSign = 0x10020ab, + XK_EuroSign = 0x20ac, + XK_zerosuperior = 0x1002070, + XK_foursuperior = 0x1002074, + XK_fivesuperior = 0x1002075, + XK_sixsuperior = 0x1002076, + XK_sevensuperior = 0x1002077, + XK_eightsuperior = 0x1002078, + XK_ninesuperior = 0x1002079, + XK_zerosubscript = 0x1002080, + XK_onesubscript = 0x1002081, + XK_twosubscript = 0x1002082, + XK_threesubscript = 0x1002083, + XK_foursubscript = 0x1002084, + XK_fivesubscript = 0x1002085, + XK_sixsubscript = 0x1002086, + XK_sevensubscript = 0x1002087, + XK_eightsubscript = 0x1002088, + XK_ninesubscript = 0x1002089, + XK_partdifferential = 0x1002202, + XK_emptyset = 0x1002205, + XK_elementof = 0x1002208, + XK_notelementof = 0x1002209, + XK_containsas = 0x100220B, + XK_squareroot = 0x100221A, + XK_cuberoot = 0x100221B, + XK_fourthroot = 0x100221C, + XK_dintegral = 0x100222C, + XK_tintegral = 0x100222D, + XK_because = 0x1002235, + XK_approxeq = 0x1002248, + XK_notapproxeq = 0x1002247, + XK_notidentical = 0x1002262, + XK_stricteq = 0x1002263, + XK_braille_dot_1 = 0xfff1, + XK_braille_dot_2 = 0xfff2, + XK_braille_dot_3 = 0xfff3, + XK_braille_dot_4 = 0xfff4, + XK_braille_dot_5 = 0xfff5, + XK_braille_dot_6 = 0xfff6, + XK_braille_dot_7 = 0xfff7, + XK_braille_dot_8 = 0xfff8, + XK_braille_dot_9 = 0xfff9, + XK_braille_dot_10 = 0xfffa, + XK_braille_blank = 0x1002800, + XK_braille_dots_1 = 0x1002801, + XK_braille_dots_2 = 0x1002802, + XK_braille_dots_12 = 0x1002803, + XK_braille_dots_3 = 0x1002804, + XK_braille_dots_13 = 0x1002805, + XK_braille_dots_23 = 0x1002806, + XK_braille_dots_123 = 0x1002807, + XK_braille_dots_4 = 0x1002808, + XK_braille_dots_14 = 0x1002809, + XK_braille_dots_24 = 0x100280a, + XK_braille_dots_124 = 0x100280b, + XK_braille_dots_34 = 0x100280c, + XK_braille_dots_134 = 0x100280d, + XK_braille_dots_234 = 0x100280e, + XK_braille_dots_1234 = 0x100280f, + XK_braille_dots_5 = 0x1002810, + XK_braille_dots_15 = 0x1002811, + XK_braille_dots_25 = 0x1002812, + XK_braille_dots_125 = 0x1002813, + XK_braille_dots_35 = 0x1002814, + XK_braille_dots_135 = 0x1002815, + XK_braille_dots_235 = 0x1002816, + XK_braille_dots_1235 = 0x1002817, + XK_braille_dots_45 = 0x1002818, + XK_braille_dots_145 = 0x1002819, + XK_braille_dots_245 = 0x100281a, + XK_braille_dots_1245 = 0x100281b, + XK_braille_dots_345 = 0x100281c, + XK_braille_dots_1345 = 0x100281d, + XK_braille_dots_2345 = 0x100281e, + XK_braille_dots_12345 = 0x100281f, + XK_braille_dots_6 = 0x1002820, + XK_braille_dots_16 = 0x1002821, + XK_braille_dots_26 = 0x1002822, + XK_braille_dots_126 = 0x1002823, + XK_braille_dots_36 = 0x1002824, + XK_braille_dots_136 = 0x1002825, + XK_braille_dots_236 = 0x1002826, + XK_braille_dots_1236 = 0x1002827, + XK_braille_dots_46 = 0x1002828, + XK_braille_dots_146 = 0x1002829, + XK_braille_dots_246 = 0x100282a, + XK_braille_dots_1246 = 0x100282b, + XK_braille_dots_346 = 0x100282c, + XK_braille_dots_1346 = 0x100282d, + XK_braille_dots_2346 = 0x100282e, + XK_braille_dots_12346 = 0x100282f, + XK_braille_dots_56 = 0x1002830, + XK_braille_dots_156 = 0x1002831, + XK_braille_dots_256 = 0x1002832, + XK_braille_dots_1256 = 0x1002833, + XK_braille_dots_356 = 0x1002834, + XK_braille_dots_1356 = 0x1002835, + XK_braille_dots_2356 = 0x1002836, + XK_braille_dots_12356 = 0x1002837, + XK_braille_dots_456 = 0x1002838, + XK_braille_dots_1456 = 0x1002839, + XK_braille_dots_2456 = 0x100283a, + XK_braille_dots_12456 = 0x100283b, + XK_braille_dots_3456 = 0x100283c, + XK_braille_dots_13456 = 0x100283d, + XK_braille_dots_23456 = 0x100283e, + XK_braille_dots_123456 = 0x100283f, + XK_braille_dots_7 = 0x1002840, + XK_braille_dots_17 = 0x1002841, + XK_braille_dots_27 = 0x1002842, + XK_braille_dots_127 = 0x1002843, + XK_braille_dots_37 = 0x1002844, + XK_braille_dots_137 = 0x1002845, + XK_braille_dots_237 = 0x1002846, + XK_braille_dots_1237 = 0x1002847, + XK_braille_dots_47 = 0x1002848, + XK_braille_dots_147 = 0x1002849, + XK_braille_dots_247 = 0x100284a, + XK_braille_dots_1247 = 0x100284b, + XK_braille_dots_347 = 0x100284c, + XK_braille_dots_1347 = 0x100284d, + XK_braille_dots_2347 = 0x100284e, + XK_braille_dots_12347 = 0x100284f, + XK_braille_dots_57 = 0x1002850, + XK_braille_dots_157 = 0x1002851, + XK_braille_dots_257 = 0x1002852, + XK_braille_dots_1257 = 0x1002853, + XK_braille_dots_357 = 0x1002854, + XK_braille_dots_1357 = 0x1002855, + XK_braille_dots_2357 = 0x1002856, + XK_braille_dots_12357 = 0x1002857, + XK_braille_dots_457 = 0x1002858, + XK_braille_dots_1457 = 0x1002859, + XK_braille_dots_2457 = 0x100285a, + XK_braille_dots_12457 = 0x100285b, + XK_braille_dots_3457 = 0x100285c, + XK_braille_dots_13457 = 0x100285d, + XK_braille_dots_23457 = 0x100285e, + XK_braille_dots_123457 = 0x100285f, + XK_braille_dots_67 = 0x1002860, + XK_braille_dots_167 = 0x1002861, + XK_braille_dots_267 = 0x1002862, + XK_braille_dots_1267 = 0x1002863, + XK_braille_dots_367 = 0x1002864, + XK_braille_dots_1367 = 0x1002865, + XK_braille_dots_2367 = 0x1002866, + XK_braille_dots_12367 = 0x1002867, + XK_braille_dots_467 = 0x1002868, + XK_braille_dots_1467 = 0x1002869, + XK_braille_dots_2467 = 0x100286a, + XK_braille_dots_12467 = 0x100286b, + XK_braille_dots_3467 = 0x100286c, + XK_braille_dots_13467 = 0x100286d, + XK_braille_dots_23467 = 0x100286e, + XK_braille_dots_123467 = 0x100286f, + XK_braille_dots_567 = 0x1002870, + XK_braille_dots_1567 = 0x1002871, + XK_braille_dots_2567 = 0x1002872, + XK_braille_dots_12567 = 0x1002873, + XK_braille_dots_3567 = 0x1002874, + XK_braille_dots_13567 = 0x1002875, + XK_braille_dots_23567 = 0x1002876, + XK_braille_dots_123567 = 0x1002877, + XK_braille_dots_4567 = 0x1002878, + XK_braille_dots_14567 = 0x1002879, + XK_braille_dots_24567 = 0x100287a, + XK_braille_dots_124567 = 0x100287b, + XK_braille_dots_34567 = 0x100287c, + XK_braille_dots_134567 = 0x100287d, + XK_braille_dots_234567 = 0x100287e, + XK_braille_dots_1234567 = 0x100287f, + XK_braille_dots_8 = 0x1002880, + XK_braille_dots_18 = 0x1002881, + XK_braille_dots_28 = 0x1002882, + XK_braille_dots_128 = 0x1002883, + XK_braille_dots_38 = 0x1002884, + XK_braille_dots_138 = 0x1002885, + XK_braille_dots_238 = 0x1002886, + XK_braille_dots_1238 = 0x1002887, + XK_braille_dots_48 = 0x1002888, + XK_braille_dots_148 = 0x1002889, + XK_braille_dots_248 = 0x100288a, + XK_braille_dots_1248 = 0x100288b, + XK_braille_dots_348 = 0x100288c, + XK_braille_dots_1348 = 0x100288d, + XK_braille_dots_2348 = 0x100288e, + XK_braille_dots_12348 = 0x100288f, + XK_braille_dots_58 = 0x1002890, + XK_braille_dots_158 = 0x1002891, + XK_braille_dots_258 = 0x1002892, + XK_braille_dots_1258 = 0x1002893, + XK_braille_dots_358 = 0x1002894, + XK_braille_dots_1358 = 0x1002895, + XK_braille_dots_2358 = 0x1002896, + XK_braille_dots_12358 = 0x1002897, + XK_braille_dots_458 = 0x1002898, + XK_braille_dots_1458 = 0x1002899, + XK_braille_dots_2458 = 0x100289a, + XK_braille_dots_12458 = 0x100289b, + XK_braille_dots_3458 = 0x100289c, + XK_braille_dots_13458 = 0x100289d, + XK_braille_dots_23458 = 0x100289e, + XK_braille_dots_123458 = 0x100289f, + XK_braille_dots_68 = 0x10028a0, + XK_braille_dots_168 = 0x10028a1, + XK_braille_dots_268 = 0x10028a2, + XK_braille_dots_1268 = 0x10028a3, + XK_braille_dots_368 = 0x10028a4, + XK_braille_dots_1368 = 0x10028a5, + XK_braille_dots_2368 = 0x10028a6, + XK_braille_dots_12368 = 0x10028a7, + XK_braille_dots_468 = 0x10028a8, + XK_braille_dots_1468 = 0x10028a9, + XK_braille_dots_2468 = 0x10028aa, + XK_braille_dots_12468 = 0x10028ab, + XK_braille_dots_3468 = 0x10028ac, + XK_braille_dots_13468 = 0x10028ad, + XK_braille_dots_23468 = 0x10028ae, + XK_braille_dots_123468 = 0x10028af, + XK_braille_dots_568 = 0x10028b0, + XK_braille_dots_1568 = 0x10028b1, + XK_braille_dots_2568 = 0x10028b2, + XK_braille_dots_12568 = 0x10028b3, + XK_braille_dots_3568 = 0x10028b4, + XK_braille_dots_13568 = 0x10028b5, + XK_braille_dots_23568 = 0x10028b6, + XK_braille_dots_123568 = 0x10028b7, + XK_braille_dots_4568 = 0x10028b8, + XK_braille_dots_14568 = 0x10028b9, + XK_braille_dots_24568 = 0x10028ba, + XK_braille_dots_124568 = 0x10028bb, + XK_braille_dots_34568 = 0x10028bc, + XK_braille_dots_134568 = 0x10028bd, + XK_braille_dots_234568 = 0x10028be, + XK_braille_dots_1234568 = 0x10028bf, + XK_braille_dots_78 = 0x10028c0, + XK_braille_dots_178 = 0x10028c1, + XK_braille_dots_278 = 0x10028c2, + XK_braille_dots_1278 = 0x10028c3, + XK_braille_dots_378 = 0x10028c4, + XK_braille_dots_1378 = 0x10028c5, + XK_braille_dots_2378 = 0x10028c6, + XK_braille_dots_12378 = 0x10028c7, + XK_braille_dots_478 = 0x10028c8, + XK_braille_dots_1478 = 0x10028c9, + XK_braille_dots_2478 = 0x10028ca, + XK_braille_dots_12478 = 0x10028cb, + XK_braille_dots_3478 = 0x10028cc, + XK_braille_dots_13478 = 0x10028cd, + XK_braille_dots_23478 = 0x10028ce, + XK_braille_dots_123478 = 0x10028cf, + XK_braille_dots_578 = 0x10028d0, + XK_braille_dots_1578 = 0x10028d1, + XK_braille_dots_2578 = 0x10028d2, + XK_braille_dots_12578 = 0x10028d3, + XK_braille_dots_3578 = 0x10028d4, + XK_braille_dots_13578 = 0x10028d5, + XK_braille_dots_23578 = 0x10028d6, + XK_braille_dots_123578 = 0x10028d7, + XK_braille_dots_4578 = 0x10028d8, + XK_braille_dots_14578 = 0x10028d9, + XK_braille_dots_24578 = 0x10028da, + XK_braille_dots_124578 = 0x10028db, + XK_braille_dots_34578 = 0x10028dc, + XK_braille_dots_134578 = 0x10028dd, + XK_braille_dots_234578 = 0x10028de, + XK_braille_dots_1234578 = 0x10028df, + XK_braille_dots_678 = 0x10028e0, + XK_braille_dots_1678 = 0x10028e1, + XK_braille_dots_2678 = 0x10028e2, + XK_braille_dots_12678 = 0x10028e3, + XK_braille_dots_3678 = 0x10028e4, + XK_braille_dots_13678 = 0x10028e5, + XK_braille_dots_23678 = 0x10028e6, + XK_braille_dots_123678 = 0x10028e7, + XK_braille_dots_4678 = 0x10028e8, + XK_braille_dots_14678 = 0x10028e9, + XK_braille_dots_24678 = 0x10028ea, + XK_braille_dots_124678 = 0x10028eb, + XK_braille_dots_34678 = 0x10028ec, + XK_braille_dots_134678 = 0x10028ed, + XK_braille_dots_234678 = 0x10028ee, + XK_braille_dots_1234678 = 0x10028ef, + XK_braille_dots_5678 = 0x10028f0, + XK_braille_dots_15678 = 0x10028f1, + XK_braille_dots_25678 = 0x10028f2, + XK_braille_dots_125678 = 0x10028f3, + XK_braille_dots_35678 = 0x10028f4, + XK_braille_dots_135678 = 0x10028f5, + XK_braille_dots_235678 = 0x10028f6, + XK_braille_dots_1235678 = 0x10028f7, + XK_braille_dots_45678 = 0x10028f8, + XK_braille_dots_145678 = 0x10028f9, + XK_braille_dots_245678 = 0x10028fa, + XK_braille_dots_1245678 = 0x10028fb, + XK_braille_dots_345678 = 0x10028fc, + XK_braille_dots_1345678 = 0x10028fd, + XK_braille_dots_2345678 = 0x10028fe, + XK_braille_dots_12345678 = 0x10028ff, + XK_Sinh_ng = 0x1000d82, + XK_Sinh_h2 = 0x1000d83, + XK_Sinh_a = 0x1000d85, + XK_Sinh_aa = 0x1000d86, + XK_Sinh_ae = 0x1000d87, + XK_Sinh_aee = 0x1000d88, + XK_Sinh_i = 0x1000d89, + XK_Sinh_ii = 0x1000d8a, + XK_Sinh_u = 0x1000d8b, + XK_Sinh_uu = 0x1000d8c, + XK_Sinh_ri = 0x1000d8d, + XK_Sinh_rii = 0x1000d8e, + XK_Sinh_lu = 0x1000d8f, + XK_Sinh_luu = 0x1000d90, + XK_Sinh_e = 0x1000d91, + XK_Sinh_ee = 0x1000d92, + XK_Sinh_ai = 0x1000d93, + XK_Sinh_o = 0x1000d94, + XK_Sinh_oo = 0x1000d95, + XK_Sinh_au = 0x1000d96, + XK_Sinh_ka = 0x1000d9a, + XK_Sinh_kha = 0x1000d9b, + XK_Sinh_ga = 0x1000d9c, + XK_Sinh_gha = 0x1000d9d, + XK_Sinh_ng2 = 0x1000d9e, + XK_Sinh_nga = 0x1000d9f, + XK_Sinh_ca = 0x1000da0, + XK_Sinh_cha = 0x1000da1, + XK_Sinh_ja = 0x1000da2, + XK_Sinh_jha = 0x1000da3, + XK_Sinh_nya = 0x1000da4, + XK_Sinh_jnya = 0x1000da5, + XK_Sinh_nja = 0x1000da6, + XK_Sinh_tta = 0x1000da7, + XK_Sinh_ttha = 0x1000da8, + XK_Sinh_dda = 0x1000da9, + XK_Sinh_ddha = 0x1000daa, + XK_Sinh_nna = 0x1000dab, + XK_Sinh_ndda = 0x1000dac, + XK_Sinh_tha = 0x1000dad, + XK_Sinh_thha = 0x1000dae, + XK_Sinh_dha = 0x1000daf, + XK_Sinh_dhha = 0x1000db0, + XK_Sinh_na = 0x1000db1, + XK_Sinh_ndha = 0x1000db3, + XK_Sinh_pa = 0x1000db4, + XK_Sinh_pha = 0x1000db5, + XK_Sinh_ba = 0x1000db6, + XK_Sinh_bha = 0x1000db7, + XK_Sinh_ma = 0x1000db8, + XK_Sinh_mba = 0x1000db9, + XK_Sinh_ya = 0x1000dba, + XK_Sinh_ra = 0x1000dbb, + XK_Sinh_la = 0x1000dbd, + XK_Sinh_va = 0x1000dc0, + XK_Sinh_sha = 0x1000dc1, + XK_Sinh_ssha = 0x1000dc2, + XK_Sinh_sa = 0x1000dc3, + XK_Sinh_ha = 0x1000dc4, + XK_Sinh_lla = 0x1000dc5, + XK_Sinh_fa = 0x1000dc6, + XK_Sinh_al = 0x1000dca, + XK_Sinh_aa2 = 0x1000dcf, + XK_Sinh_ae2 = 0x1000dd0, + XK_Sinh_aee2 = 0x1000dd1, + XK_Sinh_i2 = 0x1000dd2, + XK_Sinh_ii2 = 0x1000dd3, + XK_Sinh_u2 = 0x1000dd4, + XK_Sinh_uu2 = 0x1000dd6, + XK_Sinh_ru2 = 0x1000dd8, + XK_Sinh_e2 = 0x1000dd9, + XK_Sinh_ee2 = 0x1000dda, + XK_Sinh_ai2 = 0x1000ddb, + XK_Sinh_o2 = 0x1000ddc, + XK_Sinh_oo2 = 0x1000ddd, + XK_Sinh_au2 = 0x1000dde, + XK_Sinh_lu2 = 0x1000ddf, + XK_Sinh_ruu2 = 0x1000df2, + XK_Sinh_luu2 = 0x1000df3, + XK_Sinh_kunddaliya = 0x1000df4, + } +} diff --git a/src/backends/XLibBackend.cs b/src/backends/XLibBackend.cs new file mode 100644 index 00000000..11f44ebd --- /dev/null +++ b/src/backends/XLibBackend.cs @@ -0,0 +1,221 @@ +// +// XLibBackend.cs +// +// Author: +// Jean-Philippe Bruyère +// +// Copyright (c) 2013-2017 Jean-Philippe Bruyère +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace Crow.XLIB +{ + public class XLibBackend : IBackend + { + #region pinvoke + [DllImportAttribute("X11")] + static extern int XInitThreads(); + [DllImportAttribute("X11")] + static extern IntPtr XOpenDisplay(IntPtr displayName); + [DllImportAttribute("X11")] + static extern IntPtr XCloseDisplay(IntPtr disp); + [DllImportAttribute("X11")] + static extern Int32 XDefaultScreen(IntPtr disp); + [DllImportAttribute("X11")] + static extern IntPtr XDefaultRootWindow(IntPtr disp); + [DllImportAttribute("X11")] + static extern UInt32 XDefaultDepth (IntPtr disp, Int32 screen); + [DllImportAttribute("X11")] + static extern IntPtr XDefaultVisual(IntPtr disp, Int32 screen); + [DllImportAttribute("X11")] + static extern IntPtr XCreateSimpleWindow(IntPtr disp, IntPtr rootWindow, Int32 x, Int32 y, UInt32 width, UInt32 height, + UInt32 borderWidth, IntPtr border, IntPtr background); + [DllImportAttribute("X11")] + static extern IntPtr XCreatePixmap(IntPtr disp, IntPtr rootWindow, UInt32 width, UInt32 height, UInt32 depth); + [DllImportAttribute("X11")] + static extern IntPtr XFreePixmap(IntPtr disp, IntPtr pixmap); + [DllImportAttribute("X11")] + static extern IntPtr XFree(IntPtr data); + [DllImportAttribute("X11")] + static extern Int32 XSelectInput(IntPtr disp, IntPtr win, EventMask eventMask); + [DllImportAttribute("X11")] + static extern Int32 XMapWindow(IntPtr disp, IntPtr win); + [DllImportAttribute("X11")] + static extern int XPending (IntPtr disp); + [DllImportAttribute("X11")] + static extern IntPtr XNextEvent(IntPtr disp, ref XEvent xevent); + [DllImportAttribute("X11")] + static extern Int32 XSync(IntPtr disp, int discard); + [DllImportAttribute("X11")] + static extern int XConnectionNumber(IntPtr disp); + [DllImportAttribute("X11")] + static extern IntPtr XSetErrorHandler(XErrorHandler error_handler); + + [DllImport ("libX11")] + static extern void XDisplayKeycodes (IntPtr disp, out int min, out int max); + [DllImport ("libX11")] + static extern IntPtr XGetKeyboardMapping (IntPtr disp, byte first_keycode, int keycode_count, + out int keysyms_per_keycode_return); + [DllImport ("libX11")] + unsafe static extern byte* XGetModifierMapping (IntPtr disp); + [DllImport ("libX11")] + static extern uint XKeycodeToKeysym (IntPtr display, int keycode, int index); + #endregion + + IntPtr xDisp, xwinHnd, xDefaultRootWin, xDefaultVisual; + UInt32 xDefaultDepth; + Int32 xScreen; + XErrorHandler errorHnd; + + Interface iFace; + + #region IBackend implementation + + public void Init (Interface _iFace) + { + iFace = _iFace; + XInitThreads (); + xDisp = XOpenDisplay(IntPtr.Zero); + if (xDisp == IntPtr.Zero) + throw new NotSupportedException("[XLib] Failed to open display."); + + xScreen = XDefaultScreen(xDisp); + + xDefaultRootWin = XDefaultRootWindow (xDisp); + xDefaultVisual = XDefaultVisual (xDisp, xScreen); + xDefaultDepth = XDefaultDepth (xDisp, xScreen); + + xwinHnd = XCreateSimpleWindow (xDisp, xDefaultRootWin, + 0, 0, (uint)iFace.ClientRectangle.Width, (uint)iFace.ClientRectangle.Height, 0, IntPtr.Zero, IntPtr.Zero); + if (xwinHnd == IntPtr.Zero) + throw new NotSupportedException("[XLib] Failed to create window."); + + XSelectInput (xDisp, xwinHnd, EventMask.ExposureMask | + EventMask.KeyPressMask | EventMask.KeyReleaseMask | + EventMask.PointerMotionMask | EventMask.ButtonPressMask | EventMask.ButtonReleaseMask); + + XMapWindow (xDisp, xwinHnd); + + iFace.surf = new Cairo.XlibSurface (xDisp, xwinHnd, xDefaultVisual, iFace.ClientRectangle.Width, iFace.ClientRectangle.Height); + + errorHnd = new XErrorHandler (HandleError); + XSetErrorHandler (errorHnd); + + int min_keycode, max_keycode, keysyms_per_keycode; + + XDisplayKeycodes (xDisp, out min_keycode, out max_keycode); + IntPtr ksp = XGetKeyboardMapping (xDisp, (byte) min_keycode, + max_keycode + 1 - min_keycode, out keysyms_per_keycode); + XFree (ksp); + + unsafe { + byte* modmap_unmanaged = XGetModifierMapping (xDisp); + int nummodmap = 0; + int* ptr = (int*)modmap_unmanaged; + nummodmap = ptr [0]; + + for (int i = 0; i< nummodmap; i++) { + Console.WriteLine(modmap_unmanaged[i+4]); + } + XFree ((IntPtr)modmap_unmanaged); + } + } + + public void CleanUp () + { + XCloseDisplay (xDisp); + } + public void Flush () { + XSync (xDisp, 0); + } + public void ProcessEvents () + { + if (XPending (xDisp) > 0) { + XEvent xevent = new XEvent (); + XNextEvent (xDisp, ref xevent); + + switch (xevent.type) { + case XEventName.Expose: + iFace.ProcessResize (new Rectangle (0, 0, xevent.ExposeEvent.width, xevent.ExposeEvent.height)); + break; + case XEventName.KeyPress: + iFace.ProcessKeyDown (xevent.KeyEvent.keycode); + + /*int min_keycode, max_keycode, keysyms_per_keycode; + XLib.NativeMethods.XDisplayKeycodes (xDisp, out min_keycode, out max_keycode); + + IntPtr ksp = XLib.NativeMethods.XGetKeyboardMapping (xDisp, (byte)min_keycode, + max_keycode + 1 - min_keycode, out keysyms_per_keycode); + XLib.NativeMethods.XFree (ksp);*/ + + uint keySym; + keySym = XKeycodeToKeysym (xDisp, xevent.KeyEvent.keycode, 0); + char c = (char)keySym; + + Debug.WriteLine ("keycode:{0}; keysym:{1}; char:{2}", xevent.KeyEvent.keycode, keySym, c); + break; + case XEventName.KeyRelease: + iFace.ProcessKeyUp (xevent.KeyEvent.keycode); + //Debug.WriteLine ("keypress: {0}", xevent.KeyEvent.keycode); + break; + case XEventName.MotionNotify: + //Debug.WriteLine ("motion: ({0},{1})", xevent.MotionEvent.x, xevent.MotionEvent.y); + iFace.ProcessMouseMove (xevent.MotionEvent.x, xevent.MotionEvent.y); + break; + case XEventName.ButtonPress: + //Debug.WriteLine ("button press: {0}", xevent.ButtonEvent.button); + if (xevent.ButtonEvent.button == 4) + iFace.ProcessMouseWheelChanged (Interface.WheelIncrement); + else if(xevent.ButtonEvent.button == 5) + iFace.ProcessMouseWheelChanged (-Interface.WheelIncrement); + else + iFace.ProcessMouseButtonDown (xevent.ButtonEvent.button - 1); + break; + case XEventName.ButtonRelease: + //Debug.WriteLine ("button release: {0}", xevent.ButtonEvent.button); + iFace.ProcessMouseButtonUp (xevent.ButtonEvent.button - 1); + break; + + } + } + } + + #endregion + + int HandleError (IntPtr display, ref XErrorEvent error_event) + { + /*if (ErrorExceptions) + throw new X11Exception (error_event.display, error_event.resourceid, + error_event.serial, error_event.error_code, + error_event.request_code, error_event.minor_code); + else + Console.WriteLine ("X11 Error encountered: {0}{1}\n", + X11Exception.GetMessage(error_event.display, error_event.resourceid, + error_event.serial, error_event.error_code, + error_event.request_code, error_event.minor_code), + WhereString());*/ + Debug.WriteLine ("XERROR {0}", error_event.error_code); + return 0; + } + } +} + diff --git a/src/debug/DebugLogger.cs b/src/debug/DebugLogger.cs index 4bfba106..0599a6a1 100644 --- a/src/debug/DebugLogger.cs +++ b/src/debug/DebugLogger.cs @@ -99,7 +99,7 @@ namespace Crow if (type.HasFlag (DbgEvtType.GraphicObject)) { } - + return null; } } public static class DebugLog