diff --git a/log.md b/log.md
index bbfd382b3..a970c894c 100644
--- a/log.md
+++ b/log.md
@@ -8,6 +8,11 @@
## 已知问题
## 已完成 Done
+### 2025.1.14
+- 添加内存大小检测
+- 添加检测开关
+- 添加内存大小显示
+
### 2025.1.13
- 修复自定义加载器获取模组文件列表错误
- 修复模组升级时信息被删除
diff --git a/src/ColorMC.Core/CoreMain.cs b/src/ColorMC.Core/CoreMain.cs
index 9cb828f93..a23907eb9 100644
--- a/src/ColorMC.Core/CoreMain.cs
+++ b/src/ColorMC.Core/CoreMain.cs
@@ -16,7 +16,7 @@ public static class ColorMCCore
{
public const int VersionNum = 34;
public const string TopVersion = "A34";
- public const string DateVersion = "20250113";
+ public const string DateVersion = "20250114";
///
/// 版本号
diff --git a/src/ColorMC.Core/Game/GameLaunch.cs b/src/ColorMC.Core/Game/GameLaunch.cs
index f877fe98c..7cedc320a 100644
--- a/src/ColorMC.Core/Game/GameLaunch.cs
+++ b/src/ColorMC.Core/Game/GameLaunch.cs
@@ -1366,8 +1366,11 @@ public static async Task CreateGameCmd(this GameSettingObj obj, Ga
{
if (larg.Request == null)
{
- return new() { Message =
- string.Format(LanguageHelper.Get("Core.Launch.Info16"), obj.Name) };
+ return new()
+ {
+ Message =
+ string.Format(LanguageHelper.Get("Core.Launch.Info16"), obj.Name)
+ };
}
var res2 = await larg.Request(string.Format(LanguageHelper.Get("Core.Launch.Info15"), obj.Name));
if (!res2)
diff --git a/src/ColorMC.Core/Game/GameLogs.cs b/src/ColorMC.Core/Game/GameLogs.cs
index 9f442bda1..ac584bcac 100644
--- a/src/ColorMC.Core/Game/GameLogs.cs
+++ b/src/ColorMC.Core/Game/GameLogs.cs
@@ -100,8 +100,8 @@ public static List GetLogFiles(this GameSettingObj obj)
return Encoding.GetEncoding("gbk").GetString(output.ToArray());
}
catch
- {
-
+ {
+
}
}
return Encoding.UTF8.GetString(output.ToArray());
diff --git a/src/ColorMC.Core/Game/Mods.cs b/src/ColorMC.Core/Game/Mods.cs
index e65ef4289..5f0c7d3ce 100644
--- a/src/ColorMC.Core/Game/Mods.cs
+++ b/src/ColorMC.Core/Game/Mods.cs
@@ -158,7 +158,7 @@ public static void Disable(this ModObj mod)
var info = mod.Game.Mods.Values.FirstOrDefault(item => item.Sha1 == mod.Sha1);
if (info != null)
- {
+ {
info.File = Path.ChangeExtension(info.File, Name3);
mod.Game.SaveModInfo();
}
diff --git a/src/ColorMC.Core/Hook/Win32.cs b/src/ColorMC.Core/Hook/Win32.cs
index 89cc5f792..103418a8c 100644
--- a/src/ColorMC.Core/Hook/Win32.cs
+++ b/src/ColorMC.Core/Hook/Win32.cs
@@ -1,7 +1,6 @@
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.InteropServices;
-using System.Security.Principal;
using System.Text;
using Microsoft.Win32.SafeHandles;
diff --git a/src/ColorMC.Gui/ColorMCGui.cs b/src/ColorMC.Gui/ColorMCGui.cs
index d5d796482..a78d996f7 100644
--- a/src/ColorMC.Gui/ColorMCGui.cs
+++ b/src/ColorMC.Gui/ColorMCGui.cs
@@ -81,8 +81,8 @@ public static void Main(string[] args)
ProcessUtils.LaunchAdmin(args);
}
catch
- {
-
+ {
+
}
return;
}
diff --git a/src/ColorMC.Gui/Hook/HookUtils.cs b/src/ColorMC.Gui/Hook/HookUtils.cs
new file mode 100644
index 000000000..b2f60a506
--- /dev/null
+++ b/src/ColorMC.Gui/Hook/HookUtils.cs
@@ -0,0 +1,68 @@
+using System.Diagnostics;
+using ColorMC.Core.Objs;
+using ColorMC.Core.Utils;
+
+namespace ColorMC.Gui.Hook;
+
+public static class HookUtils
+{
+ public static ulong GetMemorySize()
+ {
+ if (SystemInfo.Os == OsType.Windows)
+ {
+ return Win32.GetTotalMemory() / 1024 / 1024;
+ }
+ else if (SystemInfo.Os == OsType.Linux)
+ {
+ return Linux.GetTotalMemory() / 1024;
+ }
+ else if (SystemInfo.Os == OsType.MacOS)
+ {
+ return Macos.GetTotalMemory() / 1024;
+ }
+
+ return 0;
+ }
+
+ public static ulong GetFreeSize()
+ {
+ if (SystemInfo.Os == OsType.Windows)
+ {
+ return Win32.GetFreeMemory() / 1024 / 1024;
+ }
+ else if (SystemInfo.Os == OsType.Linux)
+ {
+ return Linux.GetFreeMemory() / 1024;
+ }
+ else if (SystemInfo.Os == OsType.MacOS)
+ {
+ return Macos.GetFreeMemory() / 1024;
+ }
+
+ return 0;
+ }
+
+ public static void WaitWindowDisplay(Process pr)
+ {
+ if (SystemInfo.Os == OsType.Windows)
+ {
+ Win32.WaitWindowDisplay(pr);
+ }
+ else if (SystemInfo.Os == OsType.Linux)
+ {
+ X11Native.WaitWindowDisplay(pr);
+ }
+ }
+
+ public static void SetTitle(Process pr, string title)
+ {
+ if (SystemInfo.Os == OsType.Windows)
+ {
+ Win32.SetTitle(pr, title);
+ }
+ else if (SystemInfo.Os == OsType.Linux)
+ {
+ X11Native.SetTitle(pr, title);
+ }
+ }
+}
diff --git a/src/ColorMC.Gui/Hook/Linux.cs b/src/ColorMC.Gui/Hook/Linux.cs
new file mode 100644
index 000000000..5f7ee2be3
--- /dev/null
+++ b/src/ColorMC.Gui/Hook/Linux.cs
@@ -0,0 +1,51 @@
+using System;
+using System.IO;
+
+namespace ColorMC.Gui.Hook;
+
+internal static class Linux
+{
+ public static ulong GetTotalMemory()
+ {
+ const string memInfoPath = "/proc/meminfo";
+ if (File.Exists(memInfoPath))
+ {
+ var lines = File.ReadAllLines(memInfoPath);
+ foreach (var line in lines)
+ {
+ if (line.StartsWith("MemTotal:"))
+ {
+ var parts = line.Split([' '], StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 2 && ulong.TryParse(parts[1], out ulong memKb))
+ {
+ return memKb;
+ }
+ }
+ }
+ }
+
+ return 0;
+ }
+
+ public static ulong GetFreeMemory()
+ {
+ const string memInfoPath = "/proc/meminfo";
+ if (File.Exists(memInfoPath))
+ {
+ var lines = File.ReadAllLines(memInfoPath);
+ foreach (var line in lines)
+ {
+ if (line.StartsWith("MemFree:"))
+ {
+ var parts = line.Split([' '], StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 2 && ulong.TryParse(parts[1], out ulong memKb))
+ {
+ return memKb;
+ }
+ }
+ }
+ }
+
+ return 0;
+ }
+}
diff --git a/src/ColorMC.Gui/Hook/Macos.cs b/src/ColorMC.Gui/Hook/Macos.cs
new file mode 100644
index 000000000..10c4741b1
--- /dev/null
+++ b/src/ColorMC.Gui/Hook/Macos.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Diagnostics;
+
+namespace ColorMC.Gui.Hook;
+
+internal static class Macos
+{
+ public static ulong GetTotalMemory()
+ {
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "sysctl",
+ Arguments = "hw.memsize",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true
+ }
+ };
+
+ process.Start();
+ var output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
+
+ if (output.StartsWith("hw.memsize:"))
+ {
+ var parts = output.Split([' '], StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 2 && ulong.TryParse(parts[1], out ulong memBytes))
+ {
+ return memBytes;
+ }
+ }
+
+ return 0;
+ }
+
+ public static ulong GetFreeMemory()
+ {
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "vm_stat",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true
+ }
+ };
+
+ process.Start();
+ var output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
+
+ var lines = output.Split('\n');
+ ulong freePages = 0;
+ ulong pageSize = 4096;
+
+ foreach (var line in lines)
+ {
+ if (line.StartsWith("Pages free:"))
+ {
+ var parts = line.Split([' '], StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 3 && ulong.TryParse(parts[2].TrimEnd('.'), out ulong pages))
+ {
+ freePages = pages;
+ }
+ }
+ else if (line.StartsWith("page size of"))
+ {
+ var parts = line.Split([' '], StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 4 && ulong.TryParse(parts[3], out ulong size))
+ {
+ pageSize = size;
+ }
+ }
+ }
+
+ if (freePages > 0)
+ {
+ return freePages * pageSize;
+ }
+
+ return 0;
+ }
+}
diff --git a/src/ColorMC.Gui/Hook/Win32Native.cs b/src/ColorMC.Gui/Hook/Win32Native.cs
index 11294dca8..d0fb8bd47 100644
--- a/src/ColorMC.Gui/Hook/Win32Native.cs
+++ b/src/ColorMC.Gui/Hook/Win32Native.cs
@@ -190,322 +190,370 @@ public void SendScoll(bool up)
Win32.SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(Win32.INPUT)));
}
+}
- internal unsafe class Win32
+internal unsafe class Win32
+{
+ public const int WM_CLOSE = 0x0010;
+ public const int WM_DESTROY = 0x0002;
+ public const int WH_GETMESSAGE = 3;
+ public const int WH_CALLWNDPROC = 4;
+ public const int WM_GETICON = 0x007F;
+
+ public const int WM_KEYDOWN = 0x0100;
+ public const int WM_KEYUP = 0x0101;
+ public const int WM_MOUSEMOVE = 0x0200;
+ public const int WM_LBUTTONDOWN = 0x0201;
+ public const int WM_LBUTTONUP = 0x0202;
+ public const int WM_LBUTTONDBLCLK = 0x0203;
+ public const int WM_RBUTTONDOWN = 0x0204;
+ public const int WM_RBUTTONUP = 0x0205;
+ public const int WM_RBUTTONDBLCLK = 0x0206;
+ public const int WM_MBUTTONDOWN = 0x0207;
+ public const int WM_MBUTTONUP = 0x0208;
+ public const int WM_MBUTTONDBLCLK = 0x0209;
+ public const int WM_XBUTTONDOWN = 0x020B;
+ public const int WM_XBUTTONUP = 0x020C;
+ public const int WM_XBUTTONDBLCLK = 0x020D;
+
+ public const int INPUT_MOUSE = 0;
+ public const int INPUT_KEYBOARD = 1;
+ public const uint MOUSEEVENTF_WHEEL = 0x0800;
+ public const uint MOUSEEVENTF_MOVE = 0x0001;
+ public const uint KEYEVENTF_KEYUP = 0x0002;
+
+ public const int WS_CAPTION = 0x00C00000;
+ public const int WS_THICKFRAME = 0x00040000;
+ public const int WS_MINIMIZE = 0x20000000;
+ public const int WS_MAXIMIZE = 0x01000000;
+ public const int WS_SYSMENU = 0x00080000;
+
+ public const int MK_LBUTTON = 0x0001;
+ public const int MK_MBUTTON = 0x0010;
+ public const int MK_RBUTTON = 0x0002;
+ public const int MK_XBUTTON1 = 0x0020;
+ public const int MK_XBUTTON2 = 0x0040;
+
+ // ShowWindow函数的命令常量
+ public const int SW_MINIMIZE = 6;
+ public const int SW_MAXIMIZE = 3;
+ public const int SW_RESTORE = 9;
+
+ // 常量用于SetWindowPos函数
+ public const uint SWP_FRAMECHANGED = 0x0020;
+ public const uint SWP_NOMOVE = 0x0002;
+ public const uint SWP_NOSIZE = 0x0001;
+ public const uint SWP_NOZORDER = 0x0004;
+
+ // 定义事件常量
+ public const uint EVENT_OBJECT_NAMECHANGE = 0x800C;
+
+ public const uint WINEVENT_OUTOFCONTEXT = 0;
+
+ public const int ICON_SMALL = 0;
+ public const int ICON_BIG = 1;
+ public const int ICON_SMALL2 = 2;
+
+ public const int GWL_WNDPROC = -4;
+ public const int GWL_STYLE = -16;
+ public const int GWL_EXSTYLE = -20;
+
+ public const int WS_EX_LAYERED = 0x80000;
+ public const int WS_EX_TRANSPARENT = 0x20;
+
+ public const uint LWA_COLORKEY = 0x00000001;
+ public const uint LWA_ALPHA = 0x00000002;
+
+ public const int CURSOR_SHOWING = 0x00000001;
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct INPUT
{
- public const int WM_CLOSE = 0x0010;
- public const int WM_DESTROY = 0x0002;
- public const int WH_GETMESSAGE = 3;
- public const int WH_CALLWNDPROC = 4;
- public const int WM_GETICON = 0x007F;
-
- public const int WM_KEYDOWN = 0x0100;
- public const int WM_KEYUP = 0x0101;
- public const int WM_MOUSEMOVE = 0x0200;
- public const int WM_LBUTTONDOWN = 0x0201;
- public const int WM_LBUTTONUP = 0x0202;
- public const int WM_LBUTTONDBLCLK = 0x0203;
- public const int WM_RBUTTONDOWN = 0x0204;
- public const int WM_RBUTTONUP = 0x0205;
- public const int WM_RBUTTONDBLCLK = 0x0206;
- public const int WM_MBUTTONDOWN = 0x0207;
- public const int WM_MBUTTONUP = 0x0208;
- public const int WM_MBUTTONDBLCLK = 0x0209;
- public const int WM_XBUTTONDOWN = 0x020B;
- public const int WM_XBUTTONUP = 0x020C;
- public const int WM_XBUTTONDBLCLK = 0x020D;
-
- public const int INPUT_MOUSE = 0;
- public const int INPUT_KEYBOARD = 1;
- public const uint MOUSEEVENTF_WHEEL = 0x0800;
- public const uint MOUSEEVENTF_MOVE = 0x0001;
- public const uint KEYEVENTF_KEYUP = 0x0002;
-
- public const int WS_CAPTION = 0x00C00000;
- public const int WS_THICKFRAME = 0x00040000;
- public const int WS_MINIMIZE = 0x20000000;
- public const int WS_MAXIMIZE = 0x01000000;
- public const int WS_SYSMENU = 0x00080000;
-
- public const int MK_LBUTTON = 0x0001;
- public const int MK_MBUTTON = 0x0010;
- public const int MK_RBUTTON = 0x0002;
- public const int MK_XBUTTON1 = 0x0020;
- public const int MK_XBUTTON2 = 0x0040;
-
- // ShowWindow函数的命令常量
- public const int SW_MINIMIZE = 6;
- public const int SW_MAXIMIZE = 3;
- public const int SW_RESTORE = 9;
-
- // 常量用于SetWindowPos函数
- public const uint SWP_FRAMECHANGED = 0x0020;
- public const uint SWP_NOMOVE = 0x0002;
- public const uint SWP_NOSIZE = 0x0001;
- public const uint SWP_NOZORDER = 0x0004;
-
- // 定义事件常量
- public const uint EVENT_OBJECT_NAMECHANGE = 0x800C;
-
- public const uint WINEVENT_OUTOFCONTEXT = 0;
-
- public const int ICON_SMALL = 0;
- public const int ICON_BIG = 1;
- public const int ICON_SMALL2 = 2;
-
- public const int GWL_WNDPROC = -4;
- public const int GWL_STYLE = -16;
- public const int GWL_EXSTYLE = -20;
-
- public const int WS_EX_LAYERED = 0x80000;
- public const int WS_EX_TRANSPARENT = 0x20;
-
- public const uint LWA_COLORKEY = 0x00000001;
- public const uint LWA_ALPHA = 0x00000002;
-
- public const int CURSOR_SHOWING = 0x00000001;
-
- [StructLayout(LayoutKind.Sequential)]
- public struct INPUT
- {
- public int type;
- public InputUnion u;
- }
+ public int type;
+ public InputUnion u;
+ }
- [StructLayout(LayoutKind.Explicit)]
- public struct InputUnion
- {
- [FieldOffset(0)]
- public MOUSEINPUT mi;
+ [StructLayout(LayoutKind.Explicit)]
+ public struct InputUnion
+ {
+ [FieldOffset(0)]
+ public MOUSEINPUT mi;
- [FieldOffset(0)]
- public KEYBDINPUT ki;
- }
+ [FieldOffset(0)]
+ public KEYBDINPUT ki;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct MOUSEINPUT
- {
- public int dx;
- public int dy;
- public uint mouseData;
- public uint dwFlags;
- public uint time;
- public IntPtr dwExtraInfo;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct MOUSEINPUT
+ {
+ public int dx;
+ public int dy;
+ public uint mouseData;
+ public uint dwFlags;
+ public uint time;
+ public IntPtr dwExtraInfo;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct KEYBDINPUT
- {
- public ushort wVk;
- public ushort wScan;
- public uint dwFlags;
- public uint time;
- public IntPtr dwExtraInfo;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct KEYBDINPUT
+ {
+ public ushort wVk;
+ public ushort wScan;
+ public uint dwFlags;
+ public uint time;
+ public IntPtr dwExtraInfo;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct POINT
- {
- public int x;
- public int y;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct POINT
+ {
+ public int x;
+ public int y;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct CURSORINFO
- {
- public int cbSize;
- public int flags;
- public IntPtr hCursor;
- public POINT ptScreenPos;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct CURSORINFO
+ {
+ public int cbSize;
+ public int flags;
+ public IntPtr hCursor;
+ public POINT ptScreenPos;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct RECT
- {
- public int Left; // x position of upper-left corner
- public int Top; // y position of upper-left corner
- public int Right; // x position of lower-right corner
- public int Bottom; // y position of lower-right corner
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct RECT
+ {
+ public int Left; // x position of upper-left corner
+ public int Top; // y position of upper-left corner
+ public int Right; // x position of lower-right corner
+ public int Bottom; // y position of lower-right corner
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct BITMAPINFO
- {
- public int biSize;
- public int biWidth, biHeight;
- public short biPlanes, biBitCount;
- public int biCompression, biSizeImage;
- public int biXPelsPerMeter, biYPelsPerMeter;
- public int biClrUsed, biClrImportant;
- public int colors; // Actually a variable sized array of RGBQUAD
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct BITMAPINFO
+ {
+ public int biSize;
+ public int biWidth, biHeight;
+ public short biPlanes, biBitCount;
+ public int biCompression, biSizeImage;
+ public int biXPelsPerMeter, biYPelsPerMeter;
+ public int biClrUsed, biClrImportant;
+ public int colors; // Actually a variable sized array of RGBQUAD
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct SETTEXTEX
- {
- public uint Flags;
- public uint Codepage;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct SETTEXTEX
+ {
+ public uint Flags;
+ public uint Codepage;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct BITMAP
- {
- public int bmType;
- public int bmWidth;
- public int bmHeight;
- public int bmWidthBytes;
- public short bmPlanes;
- public short bmBitsPixel;
- public IntPtr bmBits;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct BITMAP
+ {
+ public int bmType;
+ public int bmWidth;
+ public int bmHeight;
+ public int bmWidthBytes;
+ public short bmPlanes;
+ public short bmBitsPixel;
+ public IntPtr bmBits;
+ }
- [StructLayout(LayoutKind.Sequential)]
- public struct ICONINFO
- {
- public bool fIcon;
- public int xHotspot;
- public int yHotspot;
- public IntPtr hbmMask;
- public IntPtr hbmColor;
- }
+ [StructLayout(LayoutKind.Sequential)]
+ public struct ICONINFO
+ {
+ public bool fIcon;
+ public int xHotspot;
+ public int yHotspot;
+ public IntPtr hbmMask;
+ public IntPtr hbmColor;
+ }
- // 定义CWPSTRUCT结构体,用于处理消息参数
- [StructLayout(LayoutKind.Sequential)]
- public struct CWPSTRUCT
- {
- public IntPtr lParam;
- public IntPtr wParam;
- public uint message;
- public IntPtr hwnd;
- }
+ // 定义CWPSTRUCT结构体,用于处理消息参数
+ [StructLayout(LayoutKind.Sequential)]
+ public struct CWPSTRUCT
+ {
+ public IntPtr lParam;
+ public IntPtr wParam;
+ public uint message;
+ public IntPtr hwnd;
+ }
- internal static void WaitWindowDisplay(Process process)
+ internal static void WaitWindowDisplay(Process process)
+ {
+ try
{
- try
+ while (!process.HasExited)
{
- while (!process.HasExited)
+ process.WaitForInputIdle();
+ Thread.Sleep(500);
+ if (process.MainWindowHandle != IntPtr.Zero)
{
- process.WaitForInputIdle();
- Thread.Sleep(500);
- if (process.MainWindowHandle != IntPtr.Zero)
- {
- break;
- }
+ break;
}
}
- catch
- {
-
- }
}
-
- internal static void SetTitle(Process process, string title)
+ catch
{
- SetWindowText(process.MainWindowHandle, title);
+
}
+ }
- public delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
- public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
- public delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
+ internal static void SetTitle(Process process, string title)
+ {
+ SetWindowText(process.MainWindowHandle, title);
+ }
+
+ public delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
+ public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
+ public delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
- [DllImport("gdi32.dll", SetLastError = true)]
- public static extern int GetObject(IntPtr hgdiobj, int cbBuffer, out BITMAP lpvObject);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern int GetObject(IntPtr hgdiobj, int cbBuffer, out BITMAP lpvObject);
- [DllImport("gdi32.dll")]
- public static extern int GetDIBits(IntPtr hdc, IntPtr hbmp, uint uStartScan,
- uint cScanLines, [Out] byte[] lpvBits, ref BITMAPINFO lpbmi, uint uUsage);
+ [DllImport("gdi32.dll")]
+ public static extern int GetDIBits(IntPtr hdc, IntPtr hbmp, uint uStartScan,
+ uint cScanLines, [Out] byte[] lpvBits, ref BITMAPINFO lpbmi, uint uUsage);
- [DllImport("gdi32.dll", SetLastError = true)]
- public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern IntPtr CreateCompatibleDC(IntPtr hdc);
- [DllImport("gdi32.dll", SetLastError = true)]
- public static extern bool DeleteObject(IntPtr hObject);
+ [DllImport("gdi32.dll", SetLastError = true)]
+ public static extern bool DeleteObject(IntPtr hObject);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
- [DllImport("user32.dll")]
- public static extern bool GetCursorInfo(out CURSORINFO pci);
+ [DllImport("user32.dll")]
+ public static extern bool GetCursorInfo(out CURSORINFO pci);
- //[DllImport("user32.dll")]
- //public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
+ //[DllImport("user32.dll")]
+ //public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
- //[DllImport("user32.dll", SetLastError = true)]
- //public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
+ //[DllImport("user32.dll", SetLastError = true)]
+ //public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
- //[DllImport("user32.dll", SetLastError = true)]
- //public static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
+ //[DllImport("user32.dll", SetLastError = true)]
+ //public static extern IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool SetWindowText(IntPtr hWnd, string lpString);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool SetWindowText(IntPtr hWnd, string lpString);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO pIconInfo);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO pIconInfo);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool DestroyIcon(IntPtr hIcon);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool DestroyIcon(IntPtr hIcon);
- [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
- [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
- public static extern int GetWindowTextLength(IntPtr hWnd);
+ [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
+ public static extern int GetWindowTextLength(IntPtr hWnd);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
- [DllImport("user32.dll")]
- public static extern bool UnhookWindowsHookEx(IntPtr hhk);
+ [DllImport("user32.dll")]
+ public static extern bool UnhookWindowsHookEx(IntPtr hhk);
- [DllImport("user32.dll")]
- public static extern bool UnhookWinEvent(IntPtr hWinEventHook);
+ [DllImport("user32.dll")]
+ public static extern bool UnhookWinEvent(IntPtr hWinEventHook);
- [DllImport("user32.dll")]
- public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
+ [DllImport("user32.dll")]
+ public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
- [DllImport("user32.dll")]
- public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
+ [DllImport("user32.dll")]
+ public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
- [DllImport("user32.dll")]
- public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
+ [DllImport("user32.dll")]
+ public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool DestroyWindow(IntPtr hwnd);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern bool DestroyWindow(IntPtr hwnd);
- [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "SendMessageW")]
- public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
+ [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "SendMessageW")]
+ public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
- [DllImport("user32.dll")]
- public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
+ [DllImport("user32.dll")]
+ public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
- [DllImport("user32.dll", SetLastError = true)]
- public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
+ [DllImport("user32.dll", SetLastError = true)]
+ public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
- [DllImport("user32.dll")]
- public static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, uint idProcess, uint idThread, uint dwFlags);
+ [DllImport("user32.dll")]
+ public static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr hmodWinEventProc, WinEventDelegate lpfnWinEventProc, uint idProcess, uint idThread, uint dwFlags);
- //[DllImport("user32.dll", SetLastError = true)]
- //public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
+ //[DllImport("user32.dll", SetLastError = true)]
+ //public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
- [DllImport("user32.dll")]
- public static extern bool IsWindow(IntPtr hWnd);
+ [DllImport("user32.dll")]
+ public static extern bool IsWindow(IntPtr hWnd);
- [DllImport("user32.dll")]
- public static extern bool GetClipCursor(out RECT lpRect);
+ [DllImport("user32.dll")]
+ public static extern bool GetClipCursor(out RECT lpRect);
- //[DllImport("user32.dll")]
- //public static extern int ShowCursor(bool bShow);
+ //[DllImport("user32.dll")]
+ //public static extern int ShowCursor(bool bShow);
- //[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- //public static extern IntPtr GetModuleHandle(string lpModuleName);
+ //[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ //public static extern IntPtr GetModuleHandle(string lpModuleName);
- //[DllImport("kernel32.dll")]
- //public static extern uint GetCurrentThreadId();
+ //[DllImport("kernel32.dll")]
+ //public static extern uint GetCurrentThreadId();
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+ private class MEMORYSTATUSEX
+ {
+ public uint dwLength;
+ public uint dwMemoryLoad;
+ public ulong ullTotalPhys;
+ public ulong ullAvailPhys;
+ public ulong ullTotalPageFile;
+ public ulong ullAvailPageFile;
+ public ulong ullTotalVirtual;
+ public ulong ullAvailVirtual;
+ public ulong ullAvailExtendedVirtual;
+
+ public MEMORYSTATUSEX()
+ {
+ this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
+ }
}
-}
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ private static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
+
+ public static ulong GetTotalMemory()
+ {
+ var memoryStatus = new MEMORYSTATUSEX();
+ if (GlobalMemoryStatusEx(memoryStatus))
+ {
+ return memoryStatus.ullTotalPhys;
+ }
+ else
+ {
+ throw new InvalidOperationException("Unable to get memory status.");
+ }
+ }
+
+ public static ulong GetFreeMemory()
+ {
+ var memoryStatus = new MEMORYSTATUSEX();
+ if (GlobalMemoryStatusEx(memoryStatus))
+ {
+ return memoryStatus.ullAvailPhys; // 可用物理内存(空闲内存)
+ }
+ else
+ {
+ throw new InvalidOperationException("Unable to get memory status.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ColorMC.Gui/Hook/X11Hook.cs b/src/ColorMC.Gui/Hook/X11Hook.cs
index aa828cbb8..a62ab3f2e 100644
--- a/src/ColorMC.Gui/Hook/X11Hook.cs
+++ b/src/ColorMC.Gui/Hook/X11Hook.cs
@@ -8,7 +8,7 @@
namespace ColorMC.Gui.Hook;
-internal partial class X11Hook
+internal partial class X11Native
{
// X11 相关的常量和函数声明
public const int PropModeReplace = 0;
diff --git a/src/ColorMC.Gui/Hook/X11KeyTransform.cs b/src/ColorMC.Gui/Hook/X11KeyTransform.cs
deleted file mode 100644
index abf66076e..000000000
--- a/src/ColorMC.Gui/Hook/X11KeyTransform.cs
+++ /dev/null
@@ -1,2546 +0,0 @@
-//using Avalonia.Input;
-//using System;
-//using System.Collections.Generic;
-//using System.Linq;
-//using System.Text;
-//using System.Threading.Tasks;
-
-//namespace ColorMC.Gui.Utils.Hook;
-
-//internal static class X11KeyTransform
-//{
-// // X scan code to physical key map.
-// // https://github.com/chromium/chromium/blob/main/ui/events/keycodes/dom/dom_code_data.inc
-// // This list has the same order as the PhysicalKey enum.
-// private static readonly Dictionary s_physicalKeyFromScanCode = new(162)
-// {
-// // Writing System Keys
-// { 0x31, PhysicalKey.Backquote },
-// { 0x33, PhysicalKey.Backslash },
-// { 0x22, PhysicalKey.BracketLeft },
-// { 0x23, PhysicalKey.BracketRight },
-// { 0x3B, PhysicalKey.Comma },
-// { 0x13, PhysicalKey.Digit0 },
-// { 0x0A, PhysicalKey.Digit1 },
-// { 0x0B, PhysicalKey.Digit2 },
-// { 0x0C, PhysicalKey.Digit3 },
-// { 0x0D, PhysicalKey.Digit4 },
-// { 0x0E, PhysicalKey.Digit5 },
-// { 0x0F, PhysicalKey.Digit6 },
-// { 0x10, PhysicalKey.Digit7 },
-// { 0x11, PhysicalKey.Digit8 },
-// { 0x12, PhysicalKey.Digit9 },
-// { 0x15, PhysicalKey.Equal },
-// { 0x5E, PhysicalKey.IntlBackslash },
-// { 0x61, PhysicalKey.IntlRo },
-// { 0x84, PhysicalKey.IntlYen },
-// { 0x26, PhysicalKey.A },
-// { 0x38, PhysicalKey.B },
-// { 0x36, PhysicalKey.C },
-// { 0x28, PhysicalKey.D },
-// { 0x1A, PhysicalKey.E },
-// { 0x29, PhysicalKey.F },
-// { 0x2A, PhysicalKey.G },
-// { 0x2B, PhysicalKey.H },
-// { 0x1F, PhysicalKey.I },
-// { 0x2C, PhysicalKey.J },
-// { 0x2D, PhysicalKey.K },
-// { 0x2E, PhysicalKey.L },
-// { 0x3A, PhysicalKey.M },
-// { 0x39, PhysicalKey.N },
-// { 0x20, PhysicalKey.O },
-// { 0x21, PhysicalKey.P },
-// { 0x18, PhysicalKey.Q },
-// { 0x1B, PhysicalKey.R },
-// { 0x27, PhysicalKey.S },
-// { 0x1C, PhysicalKey.T },
-// { 0x1E, PhysicalKey.U },
-// { 0x37, PhysicalKey.V },
-// { 0x19, PhysicalKey.W },
-// { 0x35, PhysicalKey.X },
-// { 0x1D, PhysicalKey.Y },
-// { 0x34, PhysicalKey.Z },
-// { 0x14, PhysicalKey.Minus },
-// { 0x3C, PhysicalKey.Period },
-// { 0x30, PhysicalKey.Quote },
-// { 0x2F, PhysicalKey.Semicolon },
-// { 0x3D, PhysicalKey.Slash },
-
-// // Functional Keys
-// { 0x40, PhysicalKey.AltLeft },
-// { 0x6C, PhysicalKey.AltRight },
-// { 0x16, PhysicalKey.Backspace },
-// { 0x42, PhysicalKey.CapsLock },
-// { 0x87, PhysicalKey.ContextMenu },
-// { 0x25, PhysicalKey.ControlLeft },
-// { 0x69, PhysicalKey.ControlRight },
-// { 0x24, PhysicalKey.Enter },
-// { 0x85, PhysicalKey.MetaLeft },
-// { 0x86, PhysicalKey.MetaRight },
-// { 0x32, PhysicalKey.ShiftLeft },
-// { 0x3E, PhysicalKey.ShiftRight },
-// { 0x41, PhysicalKey.Space },
-// { 0x17, PhysicalKey.Tab },
-// { 0x64, PhysicalKey.Convert },
-// { 0x65, PhysicalKey.KanaMode },
-// { 0x82, PhysicalKey.Lang1 },
-// { 0x83, PhysicalKey.Lang2 },
-// { 0x62, PhysicalKey.Lang3 },
-// { 0x63, PhysicalKey.Lang4 },
-// { 0x5D, PhysicalKey.Lang5 },
-// { 0x66, PhysicalKey.NonConvert },
-
-// // Control Pad Section
-// { 0x77, PhysicalKey.Delete },
-// { 0x73, PhysicalKey.End },
-// { 0x92, PhysicalKey.Help },
-// { 0x6E, PhysicalKey.Home },
-// { 0x76, PhysicalKey.Insert },
-// { 0x75, PhysicalKey.PageDown },
-// { 0x70, PhysicalKey.PageUp },
-
-// // Arrow Pad Section
-// { 0x74, PhysicalKey.ArrowDown },
-// { 0x71, PhysicalKey.ArrowLeft },
-// { 0x72, PhysicalKey.ArrowRight },
-// { 0x6F, PhysicalKey.ArrowUp },
-
-// // Numpad Section
-// { 0x4D, PhysicalKey.NumLock },
-// { 0x5A, PhysicalKey.NumPad0 },
-// { 0x57, PhysicalKey.NumPad1 },
-// { 0x58, PhysicalKey.NumPad2 },
-// { 0x59, PhysicalKey.NumPad3 },
-// { 0x53, PhysicalKey.NumPad4 },
-// { 0x54, PhysicalKey.NumPad5 },
-// { 0x55, PhysicalKey.NumPad6 },
-// { 0x4F, PhysicalKey.NumPad7 },
-// { 0x50, PhysicalKey.NumPad8 },
-// { 0x51, PhysicalKey.NumPad9 },
-// { 0x56, PhysicalKey.NumPadAdd },
-// //{ , PhysicalKey.NumPadClear },
-// { 0x81, PhysicalKey.NumPadComma },
-// { 0x5B, PhysicalKey.NumPadDecimal },
-// { 0x6A, PhysicalKey.NumPadDivide },
-// { 0x68, PhysicalKey.NumPadEnter },
-// { 0x7D, PhysicalKey.NumPadEqual },
-// { 0x3F, PhysicalKey.NumPadMultiply },
-// { 0xBB, PhysicalKey.NumPadParenLeft },
-// { 0xBC, PhysicalKey.NumPadParenRight },
-// { 0x52, PhysicalKey.NumPadSubtract },
-
-// // Function Section
-// { 0x09, PhysicalKey.Escape },
-// { 0x43, PhysicalKey.F1 },
-// { 0x44, PhysicalKey.F2 },
-// { 0x45, PhysicalKey.F3 },
-// { 0x46, PhysicalKey.F4 },
-// { 0x47, PhysicalKey.F5 },
-// { 0x48, PhysicalKey.F6 },
-// { 0x49, PhysicalKey.F7 },
-// { 0x4A, PhysicalKey.F8 },
-// { 0x4B, PhysicalKey.F9 },
-// { 0x4C, PhysicalKey.F10 },
-// { 0x5F, PhysicalKey.F11 },
-// { 0x60, PhysicalKey.F12 },
-// { 0xBF, PhysicalKey.F13 },
-// { 0xC0, PhysicalKey.F14 },
-// { 0xC1, PhysicalKey.F15 },
-// { 0xC2, PhysicalKey.F16 },
-// { 0xC3, PhysicalKey.F17 },
-// { 0xC4, PhysicalKey.F18 },
-// { 0xC5, PhysicalKey.F19 },
-// { 0xC6, PhysicalKey.F20 },
-// { 0xC7, PhysicalKey.F21 },
-// { 0xC8, PhysicalKey.F22 },
-// { 0xC9, PhysicalKey.F23 },
-// { 0xCA, PhysicalKey.F24 },
-// { 0x6B, PhysicalKey.PrintScreen },
-// { 0x4E, PhysicalKey.ScrollLock },
-// { 0x7F, PhysicalKey.Pause },
-
-// // Media Keys
-// { 0xA6, PhysicalKey.BrowserBack },
-// { 0xA4, PhysicalKey.BrowserFavorites },
-// { 0xA7, PhysicalKey.BrowserForward },
-// { 0xB4, PhysicalKey.BrowserHome },
-// { 0xB5, PhysicalKey.BrowserRefresh },
-// { 0xE1, PhysicalKey.BrowserSearch },
-// { 0x88, PhysicalKey.BrowserStop },
-// { 0xA9, PhysicalKey.Eject },
-// { 0x98, PhysicalKey.LaunchApp1 },
-// { 0x94, PhysicalKey.LaunchApp2 },
-// { 0xA3, PhysicalKey.LaunchMail },
-// { 0xAC, PhysicalKey.MediaPlayPause },
-// { 0xB3, PhysicalKey.MediaSelect },
-// { 0xAE, PhysicalKey.MediaStop },
-// { 0xAB, PhysicalKey.MediaTrackNext },
-// { 0xAD, PhysicalKey.MediaTrackPrevious },
-// { 0x7C, PhysicalKey.Power },
-// { 0x96, PhysicalKey.Sleep },
-// { 0x7A, PhysicalKey.AudioVolumeDown },
-// { 0x79, PhysicalKey.AudioVolumeMute },
-// { 0x7B, PhysicalKey.AudioVolumeUp },
-// { 0x97, PhysicalKey.WakeUp },
-
-// // Legacy Keys
-// { 0x89, PhysicalKey.Again },
-// { 0x8D, PhysicalKey.Copy },
-// { 0x91, PhysicalKey.Cut },
-// { 0x90, PhysicalKey.Find },
-// { 0x8E, PhysicalKey.Open },
-// { 0x8F, PhysicalKey.Paste },
-// //{ , PhysicalKey.Props },
-// { 0x8C, PhysicalKey.Select },
-// { 0x8B, PhysicalKey.Undo }
-// };
-
-// public static PhysicalKey PhysicalKeyFromScanCode(int scanCode)
-// => scanCode is > 0 and <= 255 && s_physicalKeyFromScanCode.TryGetValue((byte)scanCode, out var result) ?
-// result :
-// PhysicalKey.None;
-
-// private static readonly Dictionary s_keyFromX11Key = new(180)
-// {
-// {X11Key.Cancel, Key.Cancel},
-// {X11Key.BackSpace, Key.Back},
-// {X11Key.Tab, Key.Tab},
-// {X11Key.Linefeed, Key.LineFeed},
-// {X11Key.Clear, Key.Clear},
-// {X11Key.Return, Key.Return},
-// {X11Key.KP_Enter, Key.Return},
-// {X11Key.Pause, Key.Pause},
-// {X11Key.Caps_Lock, Key.CapsLock},
-// //{ X11Key.?, Key.HangulMode }
-// //{ X11Key.?, Key.JunjaMode }
-// //{ X11Key.?, Key.FinalMode }
-// //{ X11Key.?, Key.KanjiMode }
-// {X11Key.Escape, Key.Escape},
-// //{ X11Key.?, Key.ImeConvert }
-// //{ X11Key.?, Key.ImeNonConvert }
-// //{ X11Key.?, Key.ImeAccept }
-// //{ X11Key.?, Key.ImeModeChange }
-// {X11Key.space, Key.Space},
-// {X11Key.Prior, Key.Prior},
-// {X11Key.KP_Prior, Key.Prior},
-// {X11Key.Page_Down, Key.PageDown},
-// {X11Key.KP_Page_Down, Key.PageDown},
-// {X11Key.End, Key.End},
-// {X11Key.KP_End, Key.End},
-// {X11Key.Home, Key.Home},
-// {X11Key.KP_Home, Key.Home},
-// {X11Key.Left, Key.Left},
-// {X11Key.KP_Left, Key.Left},
-// {X11Key.Up, Key.Up},
-// {X11Key.KP_Up, Key.Up},
-// {X11Key.Right, Key.Right},
-// {X11Key.KP_Right, Key.Right},
-// {X11Key.Down, Key.Down},
-// {X11Key.KP_Down, Key.Down},
-// {X11Key.Select, Key.Select},
-// {X11Key.Print, Key.Print},
-// {X11Key.Execute, Key.Execute},
-// //{ X11Key.?, Key.Snapshot }
-// {X11Key.Insert, Key.Insert},
-// {X11Key.KP_Insert, Key.Insert},
-// {X11Key.Delete, Key.Delete},
-// {X11Key.KP_Delete, Key.Delete},
-// {X11Key.Help, Key.Help},
-// {X11Key.A, Key.A},
-// {X11Key.B, Key.B},
-// {X11Key.C, Key.C},
-// {X11Key.D, Key.D},
-// {X11Key.E, Key.E},
-// {X11Key.F, Key.F},
-// {X11Key.G, Key.G},
-// {X11Key.H, Key.H},
-// {X11Key.I, Key.I},
-// {X11Key.J, Key.J},
-// {X11Key.K, Key.K},
-// {X11Key.L, Key.L},
-// {X11Key.M, Key.M},
-// {X11Key.N, Key.N},
-// {X11Key.O, Key.O},
-// {X11Key.P, Key.P},
-// {X11Key.Q, Key.Q},
-// {X11Key.R, Key.R},
-// {X11Key.S, Key.S},
-// {X11Key.T, Key.T},
-// {X11Key.U, Key.U},
-// {X11Key.V, Key.V},
-// {X11Key.W, Key.W},
-// {X11Key.X, Key.X},
-// {X11Key.Y, Key.Y},
-// {X11Key.Z, Key.Z},
-// {X11Key.a, Key.A},
-// {X11Key.b, Key.B},
-// {X11Key.c, Key.C},
-// {X11Key.d, Key.D},
-// {X11Key.e, Key.E},
-// {X11Key.f, Key.F},
-// {X11Key.g, Key.G},
-// {X11Key.h, Key.H},
-// {X11Key.i, Key.I},
-// {X11Key.j, Key.J},
-// {X11Key.k, Key.K},
-// {X11Key.l, Key.L},
-// {X11Key.m, Key.M},
-// {X11Key.n, Key.N},
-// {X11Key.o, Key.O},
-// {X11Key.p, Key.P},
-// {X11Key.q, Key.Q},
-// {X11Key.r, Key.R},
-// {X11Key.s, Key.S},
-// {X11Key.t, Key.T},
-// {X11Key.u, Key.U},
-// {X11Key.v, Key.V},
-// {X11Key.w, Key.W},
-// {X11Key.x, Key.X},
-// {X11Key.y, Key.Y},
-// {X11Key.z, Key.Z},
-// {X11Key.Super_L, Key.LWin },
-// {X11Key.Super_R, Key.RWin },
-// {X11Key.Menu, Key.Apps},
-// //{ X11Key.?, Key.Sleep }
-// {X11Key.KP_0, Key.NumPad0},
-// {X11Key.KP_1, Key.NumPad1},
-// {X11Key.KP_2, Key.NumPad2},
-// {X11Key.KP_3, Key.NumPad3},
-// {X11Key.KP_4, Key.NumPad4},
-// {X11Key.KP_5, Key.NumPad5},
-// {X11Key.KP_6, Key.NumPad6},
-// {X11Key.KP_7, Key.NumPad7},
-// {X11Key.KP_8, Key.NumPad8},
-// {X11Key.KP_9, Key.NumPad9},
-// {X11Key.multiply, Key.Multiply},
-// {X11Key.KP_Multiply, Key.Multiply},
-// {X11Key.KP_Add, Key.Add},
-// //{ X11Key.?, Key.Separator }
-// {X11Key.KP_Subtract, Key.Subtract},
-// {X11Key.KP_Decimal, Key.Decimal},
-// {X11Key.KP_Divide, Key.Divide},
-// {X11Key.F1, Key.F1},
-// {X11Key.F2, Key.F2},
-// {X11Key.F3, Key.F3},
-// {X11Key.F4, Key.F4},
-// {X11Key.F5, Key.F5},
-// {X11Key.F6, Key.F6},
-// {X11Key.F7, Key.F7},
-// {X11Key.F8, Key.F8},
-// {X11Key.F9, Key.F9},
-// {X11Key.F10, Key.F10},
-// {X11Key.F11, Key.F11},
-// {X11Key.F12, Key.F12},
-// {X11Key.L3, Key.F13},
-// {X11Key.F14, Key.F14},
-// {X11Key.L5, Key.F15},
-// {X11Key.F16, Key.F16},
-// {X11Key.F17, Key.F17},
-// {X11Key.L8, Key.F18},
-// {X11Key.L9, Key.F19},
-// {X11Key.L10, Key.F20},
-// {X11Key.R1, Key.F21},
-// {X11Key.R2, Key.F22},
-// {X11Key.F23, Key.F23},
-// {X11Key.R4, Key.F24},
-// {X11Key.Num_Lock, Key.NumLock},
-// {X11Key.Scroll_Lock, Key.Scroll},
-// {X11Key.Shift_L, Key.LeftShift},
-// {X11Key.Shift_R, Key.RightShift},
-// {X11Key.Control_L, Key.LeftCtrl},
-// {X11Key.Control_R, Key.RightCtrl},
-// {X11Key.Alt_L, Key.LeftAlt},
-// {X11Key.Alt_R, Key.RightAlt},
-// //{ X11Key.?, Key.BrowserBack }
-// //{ X11Key.?, Key.BrowserForward }
-// //{ X11Key.?, Key.BrowserRefresh }
-// //{ X11Key.?, Key.BrowserStop }
-// //{ X11Key.?, Key.BrowserSearch }
-// //{ X11Key.?, Key.BrowserFavorites }
-// //{ X11Key.?, Key.BrowserHome }
-// //{ X11Key.?, Key.VolumeMute }
-// //{ X11Key.?, Key.VolumeDown }
-// //{ X11Key.?, Key.VolumeUp }
-// //{ X11Key.?, Key.MediaNextTrack }
-// //{ X11Key.?, Key.MediaPreviousTrack }
-// //{ X11Key.?, Key.MediaStop }
-// //{ X11Key.?, Key.MediaPlayPause }
-// //{ X11Key.?, Key.LaunchMail }
-// //{ X11Key.?, Key.SelectMedia }
-// //{ X11Key.?, Key.LaunchApplication1 }
-// //{ X11Key.?, Key.LaunchApplication2 }
-// {X11Key.minus, Key.OemMinus},
-// {X11Key.underscore, Key.OemMinus},
-// {X11Key.plus, Key.OemPlus},
-// {X11Key.equal, Key.OemPlus},
-// {X11Key.bracketleft, Key.OemOpenBrackets},
-// {X11Key.braceleft, Key.OemOpenBrackets},
-// {X11Key.bracketright, Key.OemCloseBrackets},
-// {X11Key.braceright, Key.OemCloseBrackets},
-// {X11Key.backslash, Key.OemPipe},
-// {X11Key.bar, Key.OemPipe},
-// {X11Key.semicolon, Key.OemSemicolon},
-// {X11Key.colon, Key.OemSemicolon},
-// {X11Key.apostrophe, Key.OemQuotes},
-// {X11Key.quotedbl, Key.OemQuotes},
-// {X11Key.comma, Key.OemComma},
-// {X11Key.less, Key.OemComma},
-// {X11Key.period, Key.OemPeriod},
-// {X11Key.greater, Key.OemPeriod},
-// {X11Key.slash, Key.Oem2},
-// {X11Key.question, Key.Oem2},
-// {X11Key.grave, Key.OemTilde},
-// {X11Key.asciitilde, Key.OemTilde},
-// {X11Key.XK_1, Key.D1},
-// {X11Key.XK_2, Key.D2},
-// {X11Key.XK_3, Key.D3},
-// {X11Key.XK_4, Key.D4},
-// {X11Key.XK_5, Key.D5},
-// {X11Key.XK_6, Key.D6},
-// {X11Key.XK_7, Key.D7},
-// {X11Key.XK_8, Key.D8},
-// {X11Key.XK_9, Key.D9},
-// {X11Key.XK_0, Key.D0},
-// //{ X11Key.?, Key.AbntC1 }
-// //{ X11Key.?, Key.AbntC2 }
-// //{ X11Key.?, Key.Oem8 }
-// //{ X11Key.?, Key.Oem102 }
-// //{ X11Key.?, Key.ImeProcessed }
-// //{ X11Key.?, Key.System }
-// //{ X11Key.?, Key.OemAttn }
-// //{ X11Key.?, Key.OemFinish }
-// //{ X11Key.?, Key.DbeHiragana }
-// //{ X11Key.?, Key.OemAuto }
-// //{ X11Key.?, Key.DbeDbcsChar }
-// //{ X11Key.?, Key.OemBackTab }
-// //{ X11Key.?, Key.Attn }
-// //{ X11Key.?, Key.DbeEnterWordRegisterMode }
-// //{ X11Key.?, Key.DbeEnterImeConfigureMode }
-// //{ X11Key.?, Key.EraseEof }
-// //{ X11Key.?, Key.Play }
-// //{ X11Key.?, Key.Zoom }
-// //{ X11Key.?, Key.NoName }
-// //{ X11Key.?, Key.DbeEnterDialogConversionMode }
-// //{ X11Key.?, Key.OemClear }
-// //{ X11Key.?, Key.DeadCharProcessed }
-// };
-
-// public static Key KeyFromX11Key(X11Key key)
-// => s_keyFromX11Key.TryGetValue(key, out var result) ? result : Key.None;
-
-// public static X11Key X11KeyFromKey(Key key)
-// {
-// foreach (var item in s_keyFromX11Key)
-// {
-// if (item.Value == key)
-// {
-// return item.Key;
-// }
-// }
-
-// return X11Key.VoidSymbol;
-// }
-//}
-
-//internal enum X11Key
-//{
-// VoidSymbol = 0xffffff /* Void symbol */,
-// BackSpace = 0xff08 /* Back space, back char */,
-// Tab = 0xff09,
-// Linefeed = 0xff0a /* Linefeed, LF */,
-// Clear = 0xff0b,
-// Return = 0xff0d /* Return, enter */,
-// Pause = 0xff13 /* Pause, hold */,
-// Scroll_Lock = 0xff14,
-// Sys_Req = 0xff15,
-// Escape = 0xff1b,
-// Delete = 0xffff /* Delete, rubout */,
-// Multi_key = 0xff20 /* Multi-key character compose */,
-// Codeinput = 0xff37,
-// SingleCandidate = 0xff3c,
-// MultipleCandidate = 0xff3d,
-// PreviousCandidate = 0xff3e,
-// Kanji = 0xff21 /* Kanji, Kanji convert */,
-// Muhenkan = 0xff22 /* Cancel Conversion */,
-// Henkan_Mode = 0xff23 /* Start/Stop Conversion */,
-// Henkan = 0xff23 /* Alias for Henkan_Mode */,
-// Romaji = 0xff24 /* to Romaji */,
-// Hiragana = 0xff25 /* to Hiragana */,
-// Katakana = 0xff26 /* to Katakana */,
-// Hiragana_Katakana = 0xff27 /* Hiragana/Katakana toggle */,
-// Zenkaku = 0xff28 /* to Zenkaku */,
-// Hankaku = 0xff29 /* to Hankaku */,
-// Zenkaku_Hankaku = 0xff2a /* Zenkaku/Hankaku toggle */,
-// Touroku = 0xff2b /* Add to Dictionary */,
-// Massyo = 0xff2c /* Delete from Dictionary */,
-// Kana_Lock = 0xff2d /* Kana Lock */,
-// Kana_Shift = 0xff2e /* Kana Shift */,
-// Eisu_Shift = 0xff2f /* Alphanumeric Shift */,
-// Eisu_toggle = 0xff30 /* Alphanumeric toggle */,
-// Kanji_Bangou = 0xff37 /* Codeinput */,
-// Zen_Koho = 0xff3d /* Multiple/All Candidate(s) */,
-// Mae_Koho = 0xff3e /* Previous Candidate */,
-// Home = 0xff50,
-// Left = 0xff51 /* Move left, left arrow */,
-// Up = 0xff52 /* Move up, up arrow */,
-// Right = 0xff53 /* Move right, right arrow */,
-// Down = 0xff54 /* Move down, down arrow */,
-// Prior = 0xff55 /* Prior, previous */,
-// Page_Up = 0xff55,
-// Next = 0xff56 /* Next */,
-// Page_Down = 0xff56,
-// End = 0xff57 /* EOL */,
-// Begin = 0xff58 /* BOL */,
-// Select = 0xff60 /* Select, mark */,
-// Print = 0xff61,
-// Execute = 0xff62 /* Execute, run, do */,
-// Insert = 0xff63 /* Insert, insert here */,
-// Undo = 0xff65,
-// Redo = 0xff66 /* Redo, again */,
-// Menu = 0xff67,
-// Find = 0xff68 /* Find, search */,
-// Cancel = 0xff69 /* Cancel, stop, abort, exit */,
-// Help = 0xff6a /* Help */,
-// Break = 0xff6b,
-// Mode_switch = 0xff7e /* Character set switch */,
-// script_switch = 0xff7e /* Alias for mode_switch */,
-// Num_Lock = 0xff7f,
-// KP_Space = 0xff80 /* Space */,
-// KP_Tab = 0xff89,
-// KP_Enter = 0xff8d /* Enter */,
-// KP_F1 = 0xff91 /* PF1, KP_A, ... */,
-// 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 /* Equals */,
-// KP_Multiply = 0xffaa,
-// KP_Add = 0xffab,
-// KP_Separator = 0xffac /* Separator, often comma */,
-// 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 /* Left shift */,
-// Shift_R = 0xffe2 /* Right shift */,
-// Control_L = 0xffe3 /* Left control */,
-// Control_R = 0xffe4 /* Right control */,
-// Caps_Lock = 0xffe5 /* Caps lock */,
-// Shift_Lock = 0xffe6 /* Shift lock */,
-// Meta_L = 0xffe7 /* Left meta */,
-// Meta_R = 0xffe8 /* Right meta */,
-// Alt_L = 0xffe9 /* Left alt */,
-// Alt_R = 0xffea /* Right alt */,
-// Super_L = 0xffeb /* Left super */,
-// Super_R = 0xffec /* Right super */,
-// Hyper_L = 0xffed /* Left hyper */,
-// Hyper_R = 0xffee /* Right hyper */,
-// 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 /* Alias for mode_switch */,
-// 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 /* alias for dead_tilde */,
-// 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 /* alias for dead_abovecomma */,
-// dead_abovereversedcomma = 0xfe65,
-// dead_dasia = 0xfe65 /* alias for dead_abovereversedcomma */,
-// 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,
-// 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,
-// space = 0x0020 /* U+0020 SPACE */,
-// exclam = 0x0021 /* U+0021 EXCLAMATION MARK */,
-// quotedbl = 0x0022 /* U+0022 QUOTATION MARK */,
-// numbersign = 0x0023 /* U+0023 NUMBER SIGN */,
-// dollar = 0x0024 /* U+0024 DOLLAR SIGN */,
-// percent = 0x0025 /* U+0025 PERCENT SIGN */,
-// ampersand = 0x0026 /* U+0026 AMPERSAND */,
-// apostrophe = 0x0027 /* U+0027 APOSTROPHE */,
-// quoteright = 0x0027 /* deprecated */,
-// parenleft = 0x0028 /* U+0028 LEFT PARENTHESIS */,
-// parenright = 0x0029 /* U+0029 RIGHT PARENTHESIS */,
-// asterisk = 0x002a /* U+002A ASTERISK */,
-// plus = 0x002b /* U+002B PLUS SIGN */,
-// comma = 0x002c /* U+002C COMMA */,
-// minus = 0x002d /* U+002D HYPHEN-MINUS */,
-// period = 0x002e /* U+002E FULL STOP */,
-// slash = 0x002f /* U+002F SOLIDUS */,
-// XK_0 = 0x0030 /* U+0030 DIGIT ZERO */,
-// XK_1 = 0x0031 /* U+0031 DIGIT ONE */,
-// XK_2 = 0x0032 /* U+0032 DIGIT TWO */,
-// XK_3 = 0x0033 /* U+0033 DIGIT THREE */,
-// XK_4 = 0x0034 /* U+0034 DIGIT FOUR */,
-// XK_5 = 0x0035 /* U+0035 DIGIT FIVE */,
-// XK_6 = 0x0036 /* U+0036 DIGIT SIX */,
-// XK_7 = 0x0037 /* U+0037 DIGIT SEVEN */,
-// XK_8 = 0x0038 /* U+0038 DIGIT EIGHT */,
-// XK_9 = 0x0039 /* U+0039 DIGIT NINE */,
-// colon = 0x003a /* U+003A COLON */,
-// semicolon = 0x003b /* U+003B SEMICOLON */,
-// less = 0x003c /* U+003C LESS-THAN SIGN */,
-// equal = 0x003d /* U+003D EQUALS SIGN */,
-// greater = 0x003e /* U+003E GREATER-THAN SIGN */,
-// question = 0x003f /* U+003F QUESTION MARK */,
-// at = 0x0040 /* U+0040 COMMERCIAL AT */,
-// A = 0x0041 /* U+0041 LATIN CAPITAL LETTER A */,
-// B = 0x0042 /* U+0042 LATIN CAPITAL LETTER B */,
-// C = 0x0043 /* U+0043 LATIN CAPITAL LETTER C */,
-// D = 0x0044 /* U+0044 LATIN CAPITAL LETTER D */,
-// E = 0x0045 /* U+0045 LATIN CAPITAL LETTER E */,
-// F = 0x0046 /* U+0046 LATIN CAPITAL LETTER F */,
-// G = 0x0047 /* U+0047 LATIN CAPITAL LETTER G */,
-// H = 0x0048 /* U+0048 LATIN CAPITAL LETTER H */,
-// I = 0x0049 /* U+0049 LATIN CAPITAL LETTER I */,
-// J = 0x004a /* U+004A LATIN CAPITAL LETTER J */,
-// K = 0x004b /* U+004B LATIN CAPITAL LETTER K */,
-// L = 0x004c /* U+004C LATIN CAPITAL LETTER L */,
-// M = 0x004d /* U+004D LATIN CAPITAL LETTER M */,
-// N = 0x004e /* U+004E LATIN CAPITAL LETTER N */,
-// O = 0x004f /* U+004F LATIN CAPITAL LETTER O */,
-// P = 0x0050 /* U+0050 LATIN CAPITAL LETTER P */,
-// Q = 0x0051 /* U+0051 LATIN CAPITAL LETTER Q */,
-// R = 0x0052 /* U+0052 LATIN CAPITAL LETTER R */,
-// S = 0x0053 /* U+0053 LATIN CAPITAL LETTER S */,
-// T = 0x0054 /* U+0054 LATIN CAPITAL LETTER T */,
-// U = 0x0055 /* U+0055 LATIN CAPITAL LETTER U */,
-// V = 0x0056 /* U+0056 LATIN CAPITAL LETTER V */,
-// W = 0x0057 /* U+0057 LATIN CAPITAL LETTER W */,
-// X = 0x0058 /* U+0058 LATIN CAPITAL LETTER X */,
-// Y = 0x0059 /* U+0059 LATIN CAPITAL LETTER Y */,
-// Z = 0x005a /* U+005A LATIN CAPITAL LETTER Z */,
-// bracketleft = 0x005b /* U+005B LEFT SQUARE BRACKET */,
-// backslash = 0x005c /* U+005C REVERSE SOLIDUS */,
-// bracketright = 0x005d /* U+005D RIGHT SQUARE BRACKET */,
-// asciicircum = 0x005e /* U+005E CIRCUMFLEX ACCENT */,
-// underscore = 0x005f /* U+005F LOW LINE */,
-// grave = 0x0060 /* U+0060 GRAVE ACCENT */,
-// quoteleft = 0x0060 /* deprecated */,
-// a = 0x0061 /* U+0061 LATIN SMALL LETTER A */,
-// b = 0x0062 /* U+0062 LATIN SMALL LETTER B */,
-// c = 0x0063 /* U+0063 LATIN SMALL LETTER C */,
-// d = 0x0064 /* U+0064 LATIN SMALL LETTER D */,
-// e = 0x0065 /* U+0065 LATIN SMALL LETTER E */,
-// f = 0x0066 /* U+0066 LATIN SMALL LETTER F */,
-// g = 0x0067 /* U+0067 LATIN SMALL LETTER G */,
-// h = 0x0068 /* U+0068 LATIN SMALL LETTER H */,
-// i = 0x0069 /* U+0069 LATIN SMALL LETTER I */,
-// j = 0x006a /* U+006A LATIN SMALL LETTER J */,
-// k = 0x006b /* U+006B LATIN SMALL LETTER K */,
-// l = 0x006c /* U+006C LATIN SMALL LETTER L */,
-// m = 0x006d /* U+006D LATIN SMALL LETTER M */,
-// n = 0x006e /* U+006E LATIN SMALL LETTER N */,
-// o = 0x006f /* U+006F LATIN SMALL LETTER O */,
-// p = 0x0070 /* U+0070 LATIN SMALL LETTER P */,
-// q = 0x0071 /* U+0071 LATIN SMALL LETTER Q */,
-// r = 0x0072 /* U+0072 LATIN SMALL LETTER R */,
-// s = 0x0073 /* U+0073 LATIN SMALL LETTER S */,
-// t = 0x0074 /* U+0074 LATIN SMALL LETTER T */,
-// u = 0x0075 /* U+0075 LATIN SMALL LETTER U */,
-// v = 0x0076 /* U+0076 LATIN SMALL LETTER V */,
-// w = 0x0077 /* U+0077 LATIN SMALL LETTER W */,
-// x = 0x0078 /* U+0078 LATIN SMALL LETTER X */,
-// y = 0x0079 /* U+0079 LATIN SMALL LETTER Y */,
-// z = 0x007a /* U+007A LATIN SMALL LETTER Z */,
-// braceleft = 0x007b /* U+007B LEFT CURLY BRACKET */,
-// bar = 0x007c /* U+007C VERTICAL LINE */,
-// braceright = 0x007d /* U+007D RIGHT CURLY BRACKET */,
-// asciitilde = 0x007e /* U+007E TILDE */,
-// nobreakspace = 0x00a0 /* U+00A0 NO-BREAK SPACE */,
-// exclamdown = 0x00a1 /* U+00A1 INVERTED EXCLAMATION MARK */,
-// cent = 0x00a2 /* U+00A2 CENT SIGN */,
-// sterling = 0x00a3 /* U+00A3 POUND SIGN */,
-// currency = 0x00a4 /* U+00A4 CURRENCY SIGN */,
-// yen = 0x00a5 /* U+00A5 YEN SIGN */,
-// brokenbar = 0x00a6 /* U+00A6 BROKEN BAR */,
-// section = 0x00a7 /* U+00A7 SECTION SIGN */,
-// diaeresis = 0x00a8 /* U+00A8 DIAERESIS */,
-// copyright = 0x00a9 /* U+00A9 COPYRIGHT SIGN */,
-// ordfeminine = 0x00aa /* U+00AA FEMININE ORDINAL INDICATOR */,
-// guillemotleft = 0x00ab /* U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */,
-// notsign = 0x00ac /* U+00AC NOT SIGN */,
-// hyphen = 0x00ad /* U+00AD SOFT HYPHEN */,
-// registered = 0x00ae /* U+00AE REGISTERED SIGN */,
-// macron = 0x00af /* U+00AF MACRON */,
-// degree = 0x00b0 /* U+00B0 DEGREE SIGN */,
-// plusminus = 0x00b1 /* U+00B1 PLUS-MINUS SIGN */,
-// twosuperior = 0x00b2 /* U+00B2 SUPERSCRIPT TWO */,
-// threesuperior = 0x00b3 /* U+00B3 SUPERSCRIPT THREE */,
-// acute = 0x00b4 /* U+00B4 ACUTE ACCENT */,
-// mu = 0x00b5 /* U+00B5 MICRO SIGN */,
-// paragraph = 0x00b6 /* U+00B6 PILCROW SIGN */,
-// periodcentered = 0x00b7 /* U+00B7 MIDDLE DOT */,
-// cedilla = 0x00b8 /* U+00B8 CEDILLA */,
-// onesuperior = 0x00b9 /* U+00B9 SUPERSCRIPT ONE */,
-// masculine = 0x00ba /* U+00BA MASCULINE ORDINAL INDICATOR */,
-// guillemotright = 0x00bb /* U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */,
-// onequarter = 0x00bc /* U+00BC VULGAR FRACTION ONE QUARTER */,
-// onehalf = 0x00bd /* U+00BD VULGAR FRACTION ONE HALF */,
-// threequarters = 0x00be /* U+00BE VULGAR FRACTION THREE QUARTERS */,
-// questiondown = 0x00bf /* U+00BF INVERTED QUESTION MARK */,
-// Agrave = 0x00c0 /* U+00C0 LATIN CAPITAL LETTER A WITH GRAVE */,
-// Aacute = 0x00c1 /* U+00C1 LATIN CAPITAL LETTER A WITH ACUTE */,
-// Acircumflex = 0x00c2 /* U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
-// Atilde = 0x00c3 /* U+00C3 LATIN CAPITAL LETTER A WITH TILDE */,
-// Adiaeresis = 0x00c4 /* U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS */,
-// Aring = 0x00c5 /* U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE */,
-// AE = 0x00c6 /* U+00C6 LATIN CAPITAL LETTER AE */,
-// Ccedilla = 0x00c7 /* U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA */,
-// Egrave = 0x00c8 /* U+00C8 LATIN CAPITAL LETTER E WITH GRAVE */,
-// Eacute = 0x00c9 /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */,
-// Ecircumflex = 0x00ca /* U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */,
-// Ediaeresis = 0x00cb /* U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS */,
-// Igrave = 0x00cc /* U+00CC LATIN CAPITAL LETTER I WITH GRAVE */,
-// Iacute = 0x00cd /* U+00CD LATIN CAPITAL LETTER I WITH ACUTE */,
-// Icircumflex = 0x00ce /* U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */,
-// Idiaeresis = 0x00cf /* U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS */,
-// ETH = 0x00d0 /* U+00D0 LATIN CAPITAL LETTER ETH */,
-// Eth = 0x00d0 /* deprecated */,
-// Ntilde = 0x00d1 /* U+00D1 LATIN CAPITAL LETTER N WITH TILDE */,
-// Ograve = 0x00d2 /* U+00D2 LATIN CAPITAL LETTER O WITH GRAVE */,
-// Oacute = 0x00d3 /* U+00D3 LATIN CAPITAL LETTER O WITH ACUTE */,
-// Ocircumflex = 0x00d4 /* U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
-// Otilde = 0x00d5 /* U+00D5 LATIN CAPITAL LETTER O WITH TILDE */,
-// Odiaeresis = 0x00d6 /* U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS */,
-// multiply = 0x00d7 /* U+00D7 MULTIPLICATION SIGN */,
-// Oslash = 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */,
-// Ooblique = 0x00d8 /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */,
-// Ugrave = 0x00d9 /* U+00D9 LATIN CAPITAL LETTER U WITH GRAVE */,
-// Uacute = 0x00da /* U+00DA LATIN CAPITAL LETTER U WITH ACUTE */,
-// Ucircumflex = 0x00db /* U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */,
-// Udiaeresis = 0x00dc /* U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS */,
-// Yacute = 0x00dd /* U+00DD LATIN CAPITAL LETTER Y WITH ACUTE */,
-// THORN = 0x00de /* U+00DE LATIN CAPITAL LETTER THORN */,
-// Thorn = 0x00de /* deprecated */,
-// ssharp = 0x00df /* U+00DF LATIN SMALL LETTER SHARP S */,
-// agrave = 0x00e0 /* U+00E0 LATIN SMALL LETTER A WITH GRAVE */,
-// aacute = 0x00e1 /* U+00E1 LATIN SMALL LETTER A WITH ACUTE */,
-// acircumflex = 0x00e2 /* U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
-// atilde = 0x00e3 /* U+00E3 LATIN SMALL LETTER A WITH TILDE */,
-// adiaeresis = 0x00e4 /* U+00E4 LATIN SMALL LETTER A WITH DIAERESIS */,
-// aring = 0x00e5 /* U+00E5 LATIN SMALL LETTER A WITH RING ABOVE */,
-// ae = 0x00e6 /* U+00E6 LATIN SMALL LETTER AE */,
-// ccedilla = 0x00e7 /* U+00E7 LATIN SMALL LETTER C WITH CEDILLA */,
-// egrave = 0x00e8 /* U+00E8 LATIN SMALL LETTER E WITH GRAVE */,
-// eacute = 0x00e9 /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */,
-// ecircumflex = 0x00ea /* U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX */,
-// ediaeresis = 0x00eb /* U+00EB LATIN SMALL LETTER E WITH DIAERESIS */,
-// igrave = 0x00ec /* U+00EC LATIN SMALL LETTER I WITH GRAVE */,
-// iacute = 0x00ed /* U+00ED LATIN SMALL LETTER I WITH ACUTE */,
-// icircumflex = 0x00ee /* U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX */,
-// idiaeresis = 0x00ef /* U+00EF LATIN SMALL LETTER I WITH DIAERESIS */,
-// eth = 0x00f0 /* U+00F0 LATIN SMALL LETTER ETH */,
-// ntilde = 0x00f1 /* U+00F1 LATIN SMALL LETTER N WITH TILDE */,
-// ograve = 0x00f2 /* U+00F2 LATIN SMALL LETTER O WITH GRAVE */,
-// oacute = 0x00f3 /* U+00F3 LATIN SMALL LETTER O WITH ACUTE */,
-// ocircumflex = 0x00f4 /* U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX */,
-// otilde = 0x00f5 /* U+00F5 LATIN SMALL LETTER O WITH TILDE */,
-// odiaeresis = 0x00f6 /* U+00F6 LATIN SMALL LETTER O WITH DIAERESIS */,
-// division = 0x00f7 /* U+00F7 DIVISION SIGN */,
-// oslash = 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */,
-// ooblique = 0x00f8 /* U+00F8 LATIN SMALL LETTER O WITH STROKE */,
-// ugrave = 0x00f9 /* U+00F9 LATIN SMALL LETTER U WITH GRAVE */,
-// uacute = 0x00fa /* U+00FA LATIN SMALL LETTER U WITH ACUTE */,
-// ucircumflex = 0x00fb /* U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX */,
-// udiaeresis = 0x00fc /* U+00FC LATIN SMALL LETTER U WITH DIAERESIS */,
-// yacute = 0x00fd /* U+00FD LATIN SMALL LETTER Y WITH ACUTE */,
-// thorn = 0x00fe /* U+00FE LATIN SMALL LETTER THORN */,
-// ydiaeresis = 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */,
-// Aogonek = 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */,
-// breve = 0x01a2 /* U+02D8 BREVE */,
-// Lstroke = 0x01a3 /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */,
-// Lcaron = 0x01a5 /* U+013D LATIN CAPITAL LETTER L WITH CARON */,
-// Sacute = 0x01a6 /* U+015A LATIN CAPITAL LETTER S WITH ACUTE */,
-// Scaron = 0x01a9 /* U+0160 LATIN CAPITAL LETTER S WITH CARON */,
-// Scedilla = 0x01aa /* U+015E LATIN CAPITAL LETTER S WITH CEDILLA */,
-// Tcaron = 0x01ab /* U+0164 LATIN CAPITAL LETTER T WITH CARON */,
-// Zacute = 0x01ac /* U+0179 LATIN CAPITAL LETTER Z WITH ACUTE */,
-// Zcaron = 0x01ae /* U+017D LATIN CAPITAL LETTER Z WITH CARON */,
-// Zabovedot = 0x01af /* U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE */,
-// aogonek = 0x01b1 /* U+0105 LATIN SMALL LETTER A WITH OGONEK */,
-// ogonek = 0x01b2 /* U+02DB OGONEK */,
-// lstroke = 0x01b3 /* U+0142 LATIN SMALL LETTER L WITH STROKE */,
-// lcaron = 0x01b5 /* U+013E LATIN SMALL LETTER L WITH CARON */,
-// sacute = 0x01b6 /* U+015B LATIN SMALL LETTER S WITH ACUTE */,
-// caron = 0x01b7 /* U+02C7 CARON */,
-// scaron = 0x01b9 /* U+0161 LATIN SMALL LETTER S WITH CARON */,
-// scedilla = 0x01ba /* U+015F LATIN SMALL LETTER S WITH CEDILLA */,
-// tcaron = 0x01bb /* U+0165 LATIN SMALL LETTER T WITH CARON */,
-// zacute = 0x01bc /* U+017A LATIN SMALL LETTER Z WITH ACUTE */,
-// doubleacute = 0x01bd /* U+02DD DOUBLE ACUTE ACCENT */,
-// zcaron = 0x01be /* U+017E LATIN SMALL LETTER Z WITH CARON */,
-// zabovedot = 0x01bf /* U+017C LATIN SMALL LETTER Z WITH DOT ABOVE */,
-// Racute = 0x01c0 /* U+0154 LATIN CAPITAL LETTER R WITH ACUTE */,
-// Abreve = 0x01c3 /* U+0102 LATIN CAPITAL LETTER A WITH BREVE */,
-// Lacute = 0x01c5 /* U+0139 LATIN CAPITAL LETTER L WITH ACUTE */,
-// Cacute = 0x01c6 /* U+0106 LATIN CAPITAL LETTER C WITH ACUTE */,
-// Ccaron = 0x01c8 /* U+010C LATIN CAPITAL LETTER C WITH CARON */,
-// Eogonek = 0x01ca /* U+0118 LATIN CAPITAL LETTER E WITH OGONEK */,
-// Ecaron = 0x01cc /* U+011A LATIN CAPITAL LETTER E WITH CARON */,
-// Dcaron = 0x01cf /* U+010E LATIN CAPITAL LETTER D WITH CARON */,
-// Dstroke = 0x01d0 /* U+0110 LATIN CAPITAL LETTER D WITH STROKE */,
-// Nacute = 0x01d1 /* U+0143 LATIN CAPITAL LETTER N WITH ACUTE */,
-// Ncaron = 0x01d2 /* U+0147 LATIN CAPITAL LETTER N WITH CARON */,
-// Odoubleacute = 0x01d5 /* U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */,
-// Rcaron = 0x01d8 /* U+0158 LATIN CAPITAL LETTER R WITH CARON */,
-// Uring = 0x01d9 /* U+016E LATIN CAPITAL LETTER U WITH RING ABOVE */,
-// Udoubleacute = 0x01db /* U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */,
-// Tcedilla = 0x01de /* U+0162 LATIN CAPITAL LETTER T WITH CEDILLA */,
-// racute = 0x01e0 /* U+0155 LATIN SMALL LETTER R WITH ACUTE */,
-// abreve = 0x01e3 /* U+0103 LATIN SMALL LETTER A WITH BREVE */,
-// lacute = 0x01e5 /* U+013A LATIN SMALL LETTER L WITH ACUTE */,
-// cacute = 0x01e6 /* U+0107 LATIN SMALL LETTER C WITH ACUTE */,
-// ccaron = 0x01e8 /* U+010D LATIN SMALL LETTER C WITH CARON */,
-// eogonek = 0x01ea /* U+0119 LATIN SMALL LETTER E WITH OGONEK */,
-// ecaron = 0x01ec /* U+011B LATIN SMALL LETTER E WITH CARON */,
-// dcaron = 0x01ef /* U+010F LATIN SMALL LETTER D WITH CARON */,
-// dstroke = 0x01f0 /* U+0111 LATIN SMALL LETTER D WITH STROKE */,
-// nacute = 0x01f1 /* U+0144 LATIN SMALL LETTER N WITH ACUTE */,
-// ncaron = 0x01f2 /* U+0148 LATIN SMALL LETTER N WITH CARON */,
-// odoubleacute = 0x01f5 /* U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE */,
-// rcaron = 0x01f8 /* U+0159 LATIN SMALL LETTER R WITH CARON */,
-// uring = 0x01f9 /* U+016F LATIN SMALL LETTER U WITH RING ABOVE */,
-// udoubleacute = 0x01fb /* U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE */,
-// tcedilla = 0x01fe /* U+0163 LATIN SMALL LETTER T WITH CEDILLA */,
-// abovedot = 0x01ff /* U+02D9 DOT ABOVE */,
-// Hstroke = 0x02a1 /* U+0126 LATIN CAPITAL LETTER H WITH STROKE */,
-// Hcircumflex = 0x02a6 /* U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */,
-// Iabovedot = 0x02a9 /* U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE */,
-// Gbreve = 0x02ab /* U+011E LATIN CAPITAL LETTER G WITH BREVE */,
-// Jcircumflex = 0x02ac /* U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX */,
-// hstroke = 0x02b1 /* U+0127 LATIN SMALL LETTER H WITH STROKE */,
-// hcircumflex = 0x02b6 /* U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX */,
-// idotless = 0x02b9 /* U+0131 LATIN SMALL LETTER DOTLESS I */,
-// gbreve = 0x02bb /* U+011F LATIN SMALL LETTER G WITH BREVE */,
-// jcircumflex = 0x02bc /* U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX */,
-// Cabovedot = 0x02c5 /* U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE */,
-// Ccircumflex = 0x02c6 /* U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */,
-// Gabovedot = 0x02d5 /* U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE */,
-// Gcircumflex = 0x02d8 /* U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX */,
-// Ubreve = 0x02dd /* U+016C LATIN CAPITAL LETTER U WITH BREVE */,
-// Scircumflex = 0x02de /* U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX */,
-// cabovedot = 0x02e5 /* U+010B LATIN SMALL LETTER C WITH DOT ABOVE */,
-// ccircumflex = 0x02e6 /* U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX */,
-// gabovedot = 0x02f5 /* U+0121 LATIN SMALL LETTER G WITH DOT ABOVE */,
-// gcircumflex = 0x02f8 /* U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX */,
-// ubreve = 0x02fd /* U+016D LATIN SMALL LETTER U WITH BREVE */,
-// scircumflex = 0x02fe /* U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX */,
-// kra = 0x03a2 /* U+0138 LATIN SMALL LETTER KRA */,
-// kappa = 0x03a2 /* deprecated */,
-// Rcedilla = 0x03a3 /* U+0156 LATIN CAPITAL LETTER R WITH CEDILLA */,
-// Itilde = 0x03a5 /* U+0128 LATIN CAPITAL LETTER I WITH TILDE */,
-// Lcedilla = 0x03a6 /* U+013B LATIN CAPITAL LETTER L WITH CEDILLA */,
-// Emacron = 0x03aa /* U+0112 LATIN CAPITAL LETTER E WITH MACRON */,
-// Gcedilla = 0x03ab /* U+0122 LATIN CAPITAL LETTER G WITH CEDILLA */,
-// Tslash = 0x03ac /* U+0166 LATIN CAPITAL LETTER T WITH STROKE */,
-// rcedilla = 0x03b3 /* U+0157 LATIN SMALL LETTER R WITH CEDILLA */,
-// itilde = 0x03b5 /* U+0129 LATIN SMALL LETTER I WITH TILDE */,
-// lcedilla = 0x03b6 /* U+013C LATIN SMALL LETTER L WITH CEDILLA */,
-// emacron = 0x03ba /* U+0113 LATIN SMALL LETTER E WITH MACRON */,
-// gcedilla = 0x03bb /* U+0123 LATIN SMALL LETTER G WITH CEDILLA */,
-// tslash = 0x03bc /* U+0167 LATIN SMALL LETTER T WITH STROKE */,
-// ENG = 0x03bd /* U+014A LATIN CAPITAL LETTER ENG */,
-// eng = 0x03bf /* U+014B LATIN SMALL LETTER ENG */,
-// Amacron = 0x03c0 /* U+0100 LATIN CAPITAL LETTER A WITH MACRON */,
-// Iogonek = 0x03c7 /* U+012E LATIN CAPITAL LETTER I WITH OGONEK */,
-// Eabovedot = 0x03cc /* U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE */,
-// Imacron = 0x03cf /* U+012A LATIN CAPITAL LETTER I WITH MACRON */,
-// Ncedilla = 0x03d1 /* U+0145 LATIN CAPITAL LETTER N WITH CEDILLA */,
-// Omacron = 0x03d2 /* U+014C LATIN CAPITAL LETTER O WITH MACRON */,
-// Kcedilla = 0x03d3 /* U+0136 LATIN CAPITAL LETTER K WITH CEDILLA */,
-// Uogonek = 0x03d9 /* U+0172 LATIN CAPITAL LETTER U WITH OGONEK */,
-// Utilde = 0x03dd /* U+0168 LATIN CAPITAL LETTER U WITH TILDE */,
-// Umacron = 0x03de /* U+016A LATIN CAPITAL LETTER U WITH MACRON */,
-// amacron = 0x03e0 /* U+0101 LATIN SMALL LETTER A WITH MACRON */,
-// iogonek = 0x03e7 /* U+012F LATIN SMALL LETTER I WITH OGONEK */,
-// eabovedot = 0x03ec /* U+0117 LATIN SMALL LETTER E WITH DOT ABOVE */,
-// imacron = 0x03ef /* U+012B LATIN SMALL LETTER I WITH MACRON */,
-// ncedilla = 0x03f1 /* U+0146 LATIN SMALL LETTER N WITH CEDILLA */,
-// omacron = 0x03f2 /* U+014D LATIN SMALL LETTER O WITH MACRON */,
-// kcedilla = 0x03f3 /* U+0137 LATIN SMALL LETTER K WITH CEDILLA */,
-// uogonek = 0x03f9 /* U+0173 LATIN SMALL LETTER U WITH OGONEK */,
-// utilde = 0x03fd /* U+0169 LATIN SMALL LETTER U WITH TILDE */,
-// umacron = 0x03fe /* U+016B LATIN SMALL LETTER U WITH MACRON */,
-// Wcircumflex = 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */,
-// wcircumflex = 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */,
-// Ycircumflex = 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */,
-// ycircumflex = 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */,
-// Babovedot = 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */,
-// babovedot = 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */,
-// Dabovedot = 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */,
-// dabovedot = 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */,
-// Fabovedot = 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */,
-// fabovedot = 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */,
-// Mabovedot = 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */,
-// mabovedot = 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */,
-// Pabovedot = 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */,
-// pabovedot = 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */,
-// Sabovedot = 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */,
-// sabovedot = 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */,
-// Tabovedot = 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */,
-// tabovedot = 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */,
-// Wgrave = 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */,
-// wgrave = 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */,
-// Wacute = 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */,
-// wacute = 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */,
-// Wdiaeresis = 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */,
-// wdiaeresis = 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */,
-// Ygrave = 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */,
-// ygrave = 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */,
-// OE = 0x13bc /* U+0152 LATIN CAPITAL LIGATURE OE */,
-// oe = 0x13bd /* U+0153 LATIN SMALL LIGATURE OE */,
-// Ydiaeresis = 0x13be /* U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS */,
-// overline = 0x047e /* U+203E OVERLINE */,
-// kana_fullstop = 0x04a1 /* U+3002 IDEOGRAPHIC FULL STOP */,
-// kana_openingbracket = 0x04a2 /* U+300C LEFT CORNER BRACKET */,
-// kana_closingbracket = 0x04a3 /* U+300D RIGHT CORNER BRACKET */,
-// kana_comma = 0x04a4 /* U+3001 IDEOGRAPHIC COMMA */,
-// kana_conjunctive = 0x04a5 /* U+30FB KATAKANA MIDDLE DOT */,
-// kana_middledot = 0x04a5 /* deprecated */,
-// kana_WO = 0x04a6 /* U+30F2 KATAKANA LETTER WO */,
-// kana_a = 0x04a7 /* U+30A1 KATAKANA LETTER SMALL A */,
-// kana_i = 0x04a8 /* U+30A3 KATAKANA LETTER SMALL I */,
-// kana_u = 0x04a9 /* U+30A5 KATAKANA LETTER SMALL U */,
-// kana_e = 0x04aa /* U+30A7 KATAKANA LETTER SMALL E */,
-// kana_o = 0x04ab /* U+30A9 KATAKANA LETTER SMALL O */,
-// kana_ya = 0x04ac /* U+30E3 KATAKANA LETTER SMALL YA */,
-// kana_yu = 0x04ad /* U+30E5 KATAKANA LETTER SMALL YU */,
-// kana_yo = 0x04ae /* U+30E7 KATAKANA LETTER SMALL YO */,
-// kana_tsu = 0x04af /* U+30C3 KATAKANA LETTER SMALL TU */,
-// kana_tu = 0x04af /* deprecated */,
-// prolongedsound = 0x04b0 /* U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK */,
-// kana_A = 0x04b1 /* U+30A2 KATAKANA LETTER A */,
-// kana_I = 0x04b2 /* U+30A4 KATAKANA LETTER I */,
-// kana_U = 0x04b3 /* U+30A6 KATAKANA LETTER U */,
-// kana_E = 0x04b4 /* U+30A8 KATAKANA LETTER E */,
-// kana_O = 0x04b5 /* U+30AA KATAKANA LETTER O */,
-// kana_KA = 0x04b6 /* U+30AB KATAKANA LETTER KA */,
-// kana_KI = 0x04b7 /* U+30AD KATAKANA LETTER KI */,
-// kana_KU = 0x04b8 /* U+30AF KATAKANA LETTER KU */,
-// kana_KE = 0x04b9 /* U+30B1 KATAKANA LETTER KE */,
-// kana_KO = 0x04ba /* U+30B3 KATAKANA LETTER KO */,
-// kana_SA = 0x04bb /* U+30B5 KATAKANA LETTER SA */,
-// kana_SHI = 0x04bc /* U+30B7 KATAKANA LETTER SI */,
-// kana_SU = 0x04bd /* U+30B9 KATAKANA LETTER SU */,
-// kana_SE = 0x04be /* U+30BB KATAKANA LETTER SE */,
-// kana_SO = 0x04bf /* U+30BD KATAKANA LETTER SO */,
-// kana_TA = 0x04c0 /* U+30BF KATAKANA LETTER TA */,
-// kana_CHI = 0x04c1 /* U+30C1 KATAKANA LETTER TI */,
-// kana_TI = 0x04c1 /* deprecated */,
-// kana_TSU = 0x04c2 /* U+30C4 KATAKANA LETTER TU */,
-// kana_TU = 0x04c2 /* deprecated */,
-// kana_TE = 0x04c3 /* U+30C6 KATAKANA LETTER TE */,
-// kana_TO = 0x04c4 /* U+30C8 KATAKANA LETTER TO */,
-// kana_NA = 0x04c5 /* U+30CA KATAKANA LETTER NA */,
-// kana_NI = 0x04c6 /* U+30CB KATAKANA LETTER NI */,
-// kana_NU = 0x04c7 /* U+30CC KATAKANA LETTER NU */,
-// kana_NE = 0x04c8 /* U+30CD KATAKANA LETTER NE */,
-// kana_NO = 0x04c9 /* U+30CE KATAKANA LETTER NO */,
-// kana_HA = 0x04ca /* U+30CF KATAKANA LETTER HA */,
-// kana_HI = 0x04cb /* U+30D2 KATAKANA LETTER HI */,
-// kana_FU = 0x04cc /* U+30D5 KATAKANA LETTER HU */,
-// kana_HU = 0x04cc /* deprecated */,
-// kana_HE = 0x04cd /* U+30D8 KATAKANA LETTER HE */,
-// kana_HO = 0x04ce /* U+30DB KATAKANA LETTER HO */,
-// kana_MA = 0x04cf /* U+30DE KATAKANA LETTER MA */,
-// kana_MI = 0x04d0 /* U+30DF KATAKANA LETTER MI */,
-// kana_MU = 0x04d1 /* U+30E0 KATAKANA LETTER MU */,
-// kana_ME = 0x04d2 /* U+30E1 KATAKANA LETTER ME */,
-// kana_MO = 0x04d3 /* U+30E2 KATAKANA LETTER MO */,
-// kana_YA = 0x04d4 /* U+30E4 KATAKANA LETTER YA */,
-// kana_YU = 0x04d5 /* U+30E6 KATAKANA LETTER YU */,
-// kana_YO = 0x04d6 /* U+30E8 KATAKANA LETTER YO */,
-// kana_RA = 0x04d7 /* U+30E9 KATAKANA LETTER RA */,
-// kana_RI = 0x04d8 /* U+30EA KATAKANA LETTER RI */,
-// kana_RU = 0x04d9 /* U+30EB KATAKANA LETTER RU */,
-// kana_RE = 0x04da /* U+30EC KATAKANA LETTER RE */,
-// kana_RO = 0x04db /* U+30ED KATAKANA LETTER RO */,
-// kana_WA = 0x04dc /* U+30EF KATAKANA LETTER WA */,
-// kana_N = 0x04dd /* U+30F3 KATAKANA LETTER N */,
-// voicedsound = 0x04de /* U+309B KATAKANA-HIRAGANA VOICED SOUND MARK */,
-// semivoicedsound = 0x04df /* U+309C KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */,
-// kana_switch = 0xff7e /* Alias for mode_switch */,
-// Farsi_0 = 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */,
-// Farsi_1 = 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */,
-// Farsi_2 = 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */,
-// Farsi_3 = 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */,
-// Farsi_4 = 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */,
-// Farsi_5 = 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */,
-// Farsi_6 = 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */,
-// Farsi_7 = 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */,
-// Farsi_8 = 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */,
-// Farsi_9 = 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */,
-// Arabic_percent = 0x100066a /* U+066A ARABIC PERCENT SIGN */,
-// Arabic_superscript_alef = 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */,
-// Arabic_tteh = 0x1000679 /* U+0679 ARABIC LETTER TTEH */,
-// Arabic_peh = 0x100067e /* U+067E ARABIC LETTER PEH */,
-// Arabic_tcheh = 0x1000686 /* U+0686 ARABIC LETTER TCHEH */,
-// Arabic_ddal = 0x1000688 /* U+0688 ARABIC LETTER DDAL */,
-// Arabic_rreh = 0x1000691 /* U+0691 ARABIC LETTER RREH */,
-// Arabic_comma = 0x05ac /* U+060C ARABIC COMMA */,
-// Arabic_fullstop = 0x10006d4 /* U+06D4 ARABIC FULL STOP */,
-// Arabic_0 = 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */,
-// Arabic_1 = 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */,
-// Arabic_2 = 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */,
-// Arabic_3 = 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */,
-// Arabic_4 = 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */,
-// Arabic_5 = 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */,
-// Arabic_6 = 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */,
-// Arabic_7 = 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */,
-// Arabic_8 = 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */,
-// Arabic_9 = 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */,
-// Arabic_semicolon = 0x05bb /* U+061B ARABIC SEMICOLON */,
-// Arabic_question_mark = 0x05bf /* U+061F ARABIC QUESTION MARK */,
-// Arabic_hamza = 0x05c1 /* U+0621 ARABIC LETTER HAMZA */,
-// Arabic_maddaonalef = 0x05c2 /* U+0622 ARABIC LETTER ALEF WITH MADDA ABOVE */,
-// Arabic_hamzaonalef = 0x05c3 /* U+0623 ARABIC LETTER ALEF WITH HAMZA ABOVE */,
-// Arabic_hamzaonwaw = 0x05c4 /* U+0624 ARABIC LETTER WAW WITH HAMZA ABOVE */,
-// Arabic_hamzaunderalef = 0x05c5 /* U+0625 ARABIC LETTER ALEF WITH HAMZA BELOW */,
-// Arabic_hamzaonyeh = 0x05c6 /* U+0626 ARABIC LETTER YEH WITH HAMZA ABOVE */,
-// Arabic_alef = 0x05c7 /* U+0627 ARABIC LETTER ALEF */,
-// Arabic_beh = 0x05c8 /* U+0628 ARABIC LETTER BEH */,
-// Arabic_tehmarbuta = 0x05c9 /* U+0629 ARABIC LETTER TEH MARBUTA */,
-// Arabic_teh = 0x05ca /* U+062A ARABIC LETTER TEH */,
-// Arabic_theh = 0x05cb /* U+062B ARABIC LETTER THEH */,
-// Arabic_jeem = 0x05cc /* U+062C ARABIC LETTER JEEM */,
-// Arabic_hah = 0x05cd /* U+062D ARABIC LETTER HAH */,
-// Arabic_khah = 0x05ce /* U+062E ARABIC LETTER KHAH */,
-// Arabic_dal = 0x05cf /* U+062F ARABIC LETTER DAL */,
-// Arabic_thal = 0x05d0 /* U+0630 ARABIC LETTER THAL */,
-// Arabic_ra = 0x05d1 /* U+0631 ARABIC LETTER REH */,
-// Arabic_zain = 0x05d2 /* U+0632 ARABIC LETTER ZAIN */,
-// Arabic_seen = 0x05d3 /* U+0633 ARABIC LETTER SEEN */,
-// Arabic_sheen = 0x05d4 /* U+0634 ARABIC LETTER SHEEN */,
-// Arabic_sad = 0x05d5 /* U+0635 ARABIC LETTER SAD */,
-// Arabic_dad = 0x05d6 /* U+0636 ARABIC LETTER DAD */,
-// Arabic_tah = 0x05d7 /* U+0637 ARABIC LETTER TAH */,
-// Arabic_zah = 0x05d8 /* U+0638 ARABIC LETTER ZAH */,
-// Arabic_ain = 0x05d9 /* U+0639 ARABIC LETTER AIN */,
-// Arabic_ghain = 0x05da /* U+063A ARABIC LETTER GHAIN */,
-// Arabic_tatweel = 0x05e0 /* U+0640 ARABIC TATWEEL */,
-// Arabic_feh = 0x05e1 /* U+0641 ARABIC LETTER FEH */,
-// Arabic_qaf = 0x05e2 /* U+0642 ARABIC LETTER QAF */,
-// Arabic_kaf = 0x05e3 /* U+0643 ARABIC LETTER KAF */,
-// Arabic_lam = 0x05e4 /* U+0644 ARABIC LETTER LAM */,
-// Arabic_meem = 0x05e5 /* U+0645 ARABIC LETTER MEEM */,
-// Arabic_noon = 0x05e6 /* U+0646 ARABIC LETTER NOON */,
-// Arabic_ha = 0x05e7 /* U+0647 ARABIC LETTER HEH */,
-// Arabic_heh = 0x05e7 /* deprecated */,
-// Arabic_waw = 0x05e8 /* U+0648 ARABIC LETTER WAW */,
-// Arabic_alefmaksura = 0x05e9 /* U+0649 ARABIC LETTER ALEF MAKSURA */,
-// Arabic_yeh = 0x05ea /* U+064A ARABIC LETTER YEH */,
-// Arabic_fathatan = 0x05eb /* U+064B ARABIC FATHATAN */,
-// Arabic_dammatan = 0x05ec /* U+064C ARABIC DAMMATAN */,
-// Arabic_kasratan = 0x05ed /* U+064D ARABIC KASRATAN */,
-// Arabic_fatha = 0x05ee /* U+064E ARABIC FATHA */,
-// Arabic_damma = 0x05ef /* U+064F ARABIC DAMMA */,
-// Arabic_kasra = 0x05f0 /* U+0650 ARABIC KASRA */,
-// Arabic_shadda = 0x05f1 /* U+0651 ARABIC SHADDA */,
-// Arabic_sukun = 0x05f2 /* U+0652 ARABIC SUKUN */,
-// Arabic_madda_above = 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */,
-// Arabic_hamza_above = 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */,
-// Arabic_hamza_below = 0x1000655 /* U+0655 ARABIC HAMZA BELOW */,
-// Arabic_jeh = 0x1000698 /* U+0698 ARABIC LETTER JEH */,
-// Arabic_veh = 0x10006a4 /* U+06A4 ARABIC LETTER VEH */,
-// Arabic_keheh = 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */,
-// Arabic_gaf = 0x10006af /* U+06AF ARABIC LETTER GAF */,
-// Arabic_noon_ghunna = 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */,
-// Arabic_heh_doachashmee = 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */,
-// Farsi_yeh = 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */,
-// Arabic_farsi_yeh = 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */,
-// Arabic_yeh_baree = 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */,
-// Arabic_heh_goal = 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */,
-// Arabic_switch = 0xff7e /* Alias for mode_switch */,
-// Cyrillic_GHE_bar = 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */,
-// Cyrillic_ghe_bar = 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */,
-// Cyrillic_ZHE_descender = 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */,
-// Cyrillic_zhe_descender = 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */,
-// Cyrillic_KA_descender = 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */,
-// Cyrillic_ka_descender = 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */,
-// Cyrillic_KA_vertstroke = 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */,
-// Cyrillic_ka_vertstroke = 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */,
-// Cyrillic_EN_descender = 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */,
-// Cyrillic_en_descender = 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */,
-// Cyrillic_U_straight = 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */,
-// Cyrillic_u_straight = 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */,
-// Cyrillic_U_straight_bar = 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */,
-// Cyrillic_u_straight_bar = 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */,
-// Cyrillic_HA_descender = 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */,
-// Cyrillic_ha_descender = 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */,
-// Cyrillic_CHE_descender = 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */,
-// Cyrillic_che_descender = 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */,
-// Cyrillic_CHE_vertstroke = 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */,
-// Cyrillic_che_vertstroke = 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */,
-// Cyrillic_SHHA = 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */,
-// Cyrillic_shha = 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */,
-// Cyrillic_SCHWA = 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */,
-// Cyrillic_schwa = 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */,
-// Cyrillic_I_macron = 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */,
-// Cyrillic_i_macron = 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */,
-// Cyrillic_O_bar = 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */,
-// Cyrillic_o_bar = 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */,
-// Cyrillic_U_macron = 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */,
-// Cyrillic_u_macron = 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */,
-// Serbian_dje = 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */,
-// Macedonia_gje = 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */,
-// Cyrillic_io = 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */,
-// Ukrainian_ie = 0x06a4 /* U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE */,
-// Ukranian_je = 0x06a4 /* deprecated */,
-// Macedonia_dse = 0x06a5 /* U+0455 CYRILLIC SMALL LETTER DZE */,
-// Ukrainian_i = 0x06a6 /* U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */,
-// Ukranian_i = 0x06a6 /* deprecated */,
-// Ukrainian_yi = 0x06a7 /* U+0457 CYRILLIC SMALL LETTER YI */,
-// Ukranian_yi = 0x06a7 /* deprecated */,
-// Cyrillic_je = 0x06a8 /* U+0458 CYRILLIC SMALL LETTER JE */,
-// Serbian_je = 0x06a8 /* deprecated */,
-// Cyrillic_lje = 0x06a9 /* U+0459 CYRILLIC SMALL LETTER LJE */,
-// Serbian_lje = 0x06a9 /* deprecated */,
-// Cyrillic_nje = 0x06aa /* U+045A CYRILLIC SMALL LETTER NJE */,
-// Serbian_nje = 0x06aa /* deprecated */,
-// Serbian_tshe = 0x06ab /* U+045B CYRILLIC SMALL LETTER TSHE */,
-// Macedonia_kje = 0x06ac /* U+045C CYRILLIC SMALL LETTER KJE */,
-// Ukrainian_ghe_with_upturn = 0x06ad /* U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN */,
-// Byelorussian_shortu = 0x06ae /* U+045E CYRILLIC SMALL LETTER SHORT U */,
-// Cyrillic_dzhe = 0x06af /* U+045F CYRILLIC SMALL LETTER DZHE */,
-// Serbian_dze = 0x06af /* deprecated */,
-// numerosign = 0x06b0 /* U+2116 NUMERO SIGN */,
-// Serbian_DJE = 0x06b1 /* U+0402 CYRILLIC CAPITAL LETTER DJE */,
-// Macedonia_GJE = 0x06b2 /* U+0403 CYRILLIC CAPITAL LETTER GJE */,
-// Cyrillic_IO = 0x06b3 /* U+0401 CYRILLIC CAPITAL LETTER IO */,
-// Ukrainian_IE = 0x06b4 /* U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE */,
-// Ukranian_JE = 0x06b4 /* deprecated */,
-// Macedonia_DSE = 0x06b5 /* U+0405 CYRILLIC CAPITAL LETTER DZE */,
-// Ukrainian_I = 0x06b6 /* U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */,
-// Ukranian_I = 0x06b6 /* deprecated */,
-// Ukrainian_YI = 0x06b7 /* U+0407 CYRILLIC CAPITAL LETTER YI */,
-// Ukranian_YI = 0x06b7 /* deprecated */,
-// Cyrillic_JE = 0x06b8 /* U+0408 CYRILLIC CAPITAL LETTER JE */,
-// Serbian_JE = 0x06b8 /* deprecated */,
-// Cyrillic_LJE = 0x06b9 /* U+0409 CYRILLIC CAPITAL LETTER LJE */,
-// Serbian_LJE = 0x06b9 /* deprecated */,
-// Cyrillic_NJE = 0x06ba /* U+040A CYRILLIC CAPITAL LETTER NJE */,
-// Serbian_NJE = 0x06ba /* deprecated */,
-// Serbian_TSHE = 0x06bb /* U+040B CYRILLIC CAPITAL LETTER TSHE */,
-// Macedonia_KJE = 0x06bc /* U+040C CYRILLIC CAPITAL LETTER KJE */,
-// Ukrainian_GHE_WITH_UPTURN = 0x06bd /* U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN */,
-// Byelorussian_SHORTU = 0x06be /* U+040E CYRILLIC CAPITAL LETTER SHORT U */,
-// Cyrillic_DZHE = 0x06bf /* U+040F CYRILLIC CAPITAL LETTER DZHE */,
-// Serbian_DZE = 0x06bf /* deprecated */,
-// Cyrillic_yu = 0x06c0 /* U+044E CYRILLIC SMALL LETTER YU */,
-// Cyrillic_a = 0x06c1 /* U+0430 CYRILLIC SMALL LETTER A */,
-// Cyrillic_be = 0x06c2 /* U+0431 CYRILLIC SMALL LETTER BE */,
-// Cyrillic_tse = 0x06c3 /* U+0446 CYRILLIC SMALL LETTER TSE */,
-// Cyrillic_de = 0x06c4 /* U+0434 CYRILLIC SMALL LETTER DE */,
-// Cyrillic_ie = 0x06c5 /* U+0435 CYRILLIC SMALL LETTER IE */,
-// Cyrillic_ef = 0x06c6 /* U+0444 CYRILLIC SMALL LETTER EF */,
-// Cyrillic_ghe = 0x06c7 /* U+0433 CYRILLIC SMALL LETTER GHE */,
-// Cyrillic_ha = 0x06c8 /* U+0445 CYRILLIC SMALL LETTER HA */,
-// Cyrillic_i = 0x06c9 /* U+0438 CYRILLIC SMALL LETTER I */,
-// Cyrillic_shorti = 0x06ca /* U+0439 CYRILLIC SMALL LETTER SHORT I */,
-// Cyrillic_ka = 0x06cb /* U+043A CYRILLIC SMALL LETTER KA */,
-// Cyrillic_el = 0x06cc /* U+043B CYRILLIC SMALL LETTER EL */,
-// Cyrillic_em = 0x06cd /* U+043C CYRILLIC SMALL LETTER EM */,
-// Cyrillic_en = 0x06ce /* U+043D CYRILLIC SMALL LETTER EN */,
-// Cyrillic_o = 0x06cf /* U+043E CYRILLIC SMALL LETTER O */,
-// Cyrillic_pe = 0x06d0 /* U+043F CYRILLIC SMALL LETTER PE */,
-// Cyrillic_ya = 0x06d1 /* U+044F CYRILLIC SMALL LETTER YA */,
-// Cyrillic_er = 0x06d2 /* U+0440 CYRILLIC SMALL LETTER ER */,
-// Cyrillic_es = 0x06d3 /* U+0441 CYRILLIC SMALL LETTER ES */,
-// Cyrillic_te = 0x06d4 /* U+0442 CYRILLIC SMALL LETTER TE */,
-// Cyrillic_u = 0x06d5 /* U+0443 CYRILLIC SMALL LETTER U */,
-// Cyrillic_zhe = 0x06d6 /* U+0436 CYRILLIC SMALL LETTER ZHE */,
-// Cyrillic_ve = 0x06d7 /* U+0432 CYRILLIC SMALL LETTER VE */,
-// Cyrillic_softsign = 0x06d8 /* U+044C CYRILLIC SMALL LETTER SOFT SIGN */,
-// Cyrillic_yeru = 0x06d9 /* U+044B CYRILLIC SMALL LETTER YERU */,
-// Cyrillic_ze = 0x06da /* U+0437 CYRILLIC SMALL LETTER ZE */,
-// Cyrillic_sha = 0x06db /* U+0448 CYRILLIC SMALL LETTER SHA */,
-// Cyrillic_e = 0x06dc /* U+044D CYRILLIC SMALL LETTER E */,
-// Cyrillic_shcha = 0x06dd /* U+0449 CYRILLIC SMALL LETTER SHCHA */,
-// Cyrillic_che = 0x06de /* U+0447 CYRILLIC SMALL LETTER CHE */,
-// Cyrillic_hardsign = 0x06df /* U+044A CYRILLIC SMALL LETTER HARD SIGN */,
-// Cyrillic_YU = 0x06e0 /* U+042E CYRILLIC CAPITAL LETTER YU */,
-// Cyrillic_A = 0x06e1 /* U+0410 CYRILLIC CAPITAL LETTER A */,
-// Cyrillic_BE = 0x06e2 /* U+0411 CYRILLIC CAPITAL LETTER BE */,
-// Cyrillic_TSE = 0x06e3 /* U+0426 CYRILLIC CAPITAL LETTER TSE */,
-// Cyrillic_DE = 0x06e4 /* U+0414 CYRILLIC CAPITAL LETTER DE */,
-// Cyrillic_IE = 0x06e5 /* U+0415 CYRILLIC CAPITAL LETTER IE */,
-// Cyrillic_EF = 0x06e6 /* U+0424 CYRILLIC CAPITAL LETTER EF */,
-// Cyrillic_GHE = 0x06e7 /* U+0413 CYRILLIC CAPITAL LETTER GHE */,
-// Cyrillic_HA = 0x06e8 /* U+0425 CYRILLIC CAPITAL LETTER HA */,
-// Cyrillic_I = 0x06e9 /* U+0418 CYRILLIC CAPITAL LETTER I */,
-// Cyrillic_SHORTI = 0x06ea /* U+0419 CYRILLIC CAPITAL LETTER SHORT I */,
-// Cyrillic_KA = 0x06eb /* U+041A CYRILLIC CAPITAL LETTER KA */,
-// Cyrillic_EL = 0x06ec /* U+041B CYRILLIC CAPITAL LETTER EL */,
-// Cyrillic_EM = 0x06ed /* U+041C CYRILLIC CAPITAL LETTER EM */,
-// Cyrillic_EN = 0x06ee /* U+041D CYRILLIC CAPITAL LETTER EN */,
-// Cyrillic_O = 0x06ef /* U+041E CYRILLIC CAPITAL LETTER O */,
-// Cyrillic_PE = 0x06f0 /* U+041F CYRILLIC CAPITAL LETTER PE */,
-// Cyrillic_YA = 0x06f1 /* U+042F CYRILLIC CAPITAL LETTER YA */,
-// Cyrillic_ER = 0x06f2 /* U+0420 CYRILLIC CAPITAL LETTER ER */,
-// Cyrillic_ES = 0x06f3 /* U+0421 CYRILLIC CAPITAL LETTER ES */,
-// Cyrillic_TE = 0x06f4 /* U+0422 CYRILLIC CAPITAL LETTER TE */,
-// Cyrillic_U = 0x06f5 /* U+0423 CYRILLIC CAPITAL LETTER U */,
-// Cyrillic_ZHE = 0x06f6 /* U+0416 CYRILLIC CAPITAL LETTER ZHE */,
-// Cyrillic_VE = 0x06f7 /* U+0412 CYRILLIC CAPITAL LETTER VE */,
-// Cyrillic_SOFTSIGN = 0x06f8 /* U+042C CYRILLIC CAPITAL LETTER SOFT SIGN */,
-// Cyrillic_YERU = 0x06f9 /* U+042B CYRILLIC CAPITAL LETTER YERU */,
-// Cyrillic_ZE = 0x06fa /* U+0417 CYRILLIC CAPITAL LETTER ZE */,
-// Cyrillic_SHA = 0x06fb /* U+0428 CYRILLIC CAPITAL LETTER SHA */,
-// Cyrillic_E = 0x06fc /* U+042D CYRILLIC CAPITAL LETTER E */,
-// Cyrillic_SHCHA = 0x06fd /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */,
-// Cyrillic_CHE = 0x06fe /* U+0427 CYRILLIC CAPITAL LETTER CHE */,
-// Cyrillic_HARDSIGN = 0x06ff /* U+042A CYRILLIC CAPITAL LETTER HARD SIGN */,
-// Greek_ALPHAaccent = 0x07a1 /* U+0386 GREEK CAPITAL LETTER ALPHA WITH TONOS */,
-// Greek_EPSILONaccent = 0x07a2 /* U+0388 GREEK CAPITAL LETTER EPSILON WITH TONOS */,
-// Greek_ETAaccent = 0x07a3 /* U+0389 GREEK CAPITAL LETTER ETA WITH TONOS */,
-// Greek_IOTAaccent = 0x07a4 /* U+038A GREEK CAPITAL LETTER IOTA WITH TONOS */,
-// Greek_IOTAdieresis = 0x07a5 /* U+03AA GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */,
-// Greek_IOTAdiaeresis = 0x07a5 /* old typo */,
-// Greek_OMICRONaccent = 0x07a7 /* U+038C GREEK CAPITAL LETTER OMICRON WITH TONOS */,
-// Greek_UPSILONaccent = 0x07a8 /* U+038E GREEK CAPITAL LETTER UPSILON WITH TONOS */,
-// Greek_UPSILONdieresis = 0x07a9 /* U+03AB GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */,
-// Greek_OMEGAaccent = 0x07ab /* U+038F GREEK CAPITAL LETTER OMEGA WITH TONOS */,
-// Greek_accentdieresis = 0x07ae /* U+0385 GREEK DIALYTIKA TONOS */,
-// Greek_horizbar = 0x07af /* U+2015 HORIZONTAL BAR */,
-// Greek_alphaaccent = 0x07b1 /* U+03AC GREEK SMALL LETTER ALPHA WITH TONOS */,
-// Greek_epsilonaccent = 0x07b2 /* U+03AD GREEK SMALL LETTER EPSILON WITH TONOS */,
-// Greek_etaaccent = 0x07b3 /* U+03AE GREEK SMALL LETTER ETA WITH TONOS */,
-// Greek_iotaaccent = 0x07b4 /* U+03AF GREEK SMALL LETTER IOTA WITH TONOS */,
-// Greek_iotadieresis = 0x07b5 /* U+03CA GREEK SMALL LETTER IOTA WITH DIALYTIKA */,
-// Greek_iotaaccentdieresis = 0x07b6 /* U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */,
-// Greek_omicronaccent = 0x07b7 /* U+03CC GREEK SMALL LETTER OMICRON WITH TONOS */,
-// Greek_upsilonaccent = 0x07b8 /* U+03CD GREEK SMALL LETTER UPSILON WITH TONOS */,
-// Greek_upsilondieresis = 0x07b9 /* U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA */,
-// Greek_upsilonaccentdieresis = 0x07ba /* U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */,
-// Greek_omegaaccent = 0x07bb /* U+03CE GREEK SMALL LETTER OMEGA WITH TONOS */,
-// Greek_ALPHA = 0x07c1 /* U+0391 GREEK CAPITAL LETTER ALPHA */,
-// Greek_BETA = 0x07c2 /* U+0392 GREEK CAPITAL LETTER BETA */,
-// Greek_GAMMA = 0x07c3 /* U+0393 GREEK CAPITAL LETTER GAMMA */,
-// Greek_DELTA = 0x07c4 /* U+0394 GREEK CAPITAL LETTER DELTA */,
-// Greek_EPSILON = 0x07c5 /* U+0395 GREEK CAPITAL LETTER EPSILON */,
-// Greek_ZETA = 0x07c6 /* U+0396 GREEK CAPITAL LETTER ZETA */,
-// Greek_ETA = 0x07c7 /* U+0397 GREEK CAPITAL LETTER ETA */,
-// Greek_THETA = 0x07c8 /* U+0398 GREEK CAPITAL LETTER THETA */,
-// Greek_IOTA = 0x07c9 /* U+0399 GREEK CAPITAL LETTER IOTA */,
-// Greek_KAPPA = 0x07ca /* U+039A GREEK CAPITAL LETTER KAPPA */,
-// Greek_LAMDA = 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */,
-// Greek_LAMBDA = 0x07cb /* U+039B GREEK CAPITAL LETTER LAMDA */,
-// Greek_MU = 0x07cc /* U+039C GREEK CAPITAL LETTER MU */,
-// Greek_NU = 0x07cd /* U+039D GREEK CAPITAL LETTER NU */,
-// Greek_XI = 0x07ce /* U+039E GREEK CAPITAL LETTER XI */,
-// Greek_OMICRON = 0x07cf /* U+039F GREEK CAPITAL LETTER OMICRON */,
-// Greek_PI = 0x07d0 /* U+03A0 GREEK CAPITAL LETTER PI */,
-// Greek_RHO = 0x07d1 /* U+03A1 GREEK CAPITAL LETTER RHO */,
-// Greek_SIGMA = 0x07d2 /* U+03A3 GREEK CAPITAL LETTER SIGMA */,
-// Greek_TAU = 0x07d4 /* U+03A4 GREEK CAPITAL LETTER TAU */,
-// Greek_UPSILON = 0x07d5 /* U+03A5 GREEK CAPITAL LETTER UPSILON */,
-// Greek_PHI = 0x07d6 /* U+03A6 GREEK CAPITAL LETTER PHI */,
-// Greek_CHI = 0x07d7 /* U+03A7 GREEK CAPITAL LETTER CHI */,
-// Greek_PSI = 0x07d8 /* U+03A8 GREEK CAPITAL LETTER PSI */,
-// Greek_OMEGA = 0x07d9 /* U+03A9 GREEK CAPITAL LETTER OMEGA */,
-// Greek_alpha = 0x07e1 /* U+03B1 GREEK SMALL LETTER ALPHA */,
-// Greek_beta = 0x07e2 /* U+03B2 GREEK SMALL LETTER BETA */,
-// Greek_gamma = 0x07e3 /* U+03B3 GREEK SMALL LETTER GAMMA */,
-// Greek_delta = 0x07e4 /* U+03B4 GREEK SMALL LETTER DELTA */,
-// Greek_epsilon = 0x07e5 /* U+03B5 GREEK SMALL LETTER EPSILON */,
-// Greek_zeta = 0x07e6 /* U+03B6 GREEK SMALL LETTER ZETA */,
-// Greek_eta = 0x07e7 /* U+03B7 GREEK SMALL LETTER ETA */,
-// Greek_theta = 0x07e8 /* U+03B8 GREEK SMALL LETTER THETA */,
-// Greek_iota = 0x07e9 /* U+03B9 GREEK SMALL LETTER IOTA */,
-// Greek_kappa = 0x07ea /* U+03BA GREEK SMALL LETTER KAPPA */,
-// Greek_lamda = 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */,
-// Greek_lambda = 0x07eb /* U+03BB GREEK SMALL LETTER LAMDA */,
-// Greek_mu = 0x07ec /* U+03BC GREEK SMALL LETTER MU */,
-// Greek_nu = 0x07ed /* U+03BD GREEK SMALL LETTER NU */,
-// Greek_xi = 0x07ee /* U+03BE GREEK SMALL LETTER XI */,
-// Greek_omicron = 0x07ef /* U+03BF GREEK SMALL LETTER OMICRON */,
-// Greek_pi = 0x07f0 /* U+03C0 GREEK SMALL LETTER PI */,
-// Greek_rho = 0x07f1 /* U+03C1 GREEK SMALL LETTER RHO */,
-// Greek_sigma = 0x07f2 /* U+03C3 GREEK SMALL LETTER SIGMA */,
-// Greek_finalsmallsigma = 0x07f3 /* U+03C2 GREEK SMALL LETTER FINAL SIGMA */,
-// Greek_tau = 0x07f4 /* U+03C4 GREEK SMALL LETTER TAU */,
-// Greek_upsilon = 0x07f5 /* U+03C5 GREEK SMALL LETTER UPSILON */,
-// Greek_phi = 0x07f6 /* U+03C6 GREEK SMALL LETTER PHI */,
-// Greek_chi = 0x07f7 /* U+03C7 GREEK SMALL LETTER CHI */,
-// Greek_psi = 0x07f8 /* U+03C8 GREEK SMALL LETTER PSI */,
-// Greek_omega = 0x07f9 /* U+03C9 GREEK SMALL LETTER OMEGA */,
-// Greek_switch = 0xff7e /* Alias for mode_switch */,
-// leftradical = 0x08a1 /* U+23B7 RADICAL SYMBOL BOTTOM */,
-// topleftradical = 0x08a2 /*(U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT)*/,
-// horizconnector = 0x08a3 /*(U+2500 BOX DRAWINGS LIGHT HORIZONTAL)*/,
-// topintegral = 0x08a4 /* U+2320 TOP HALF INTEGRAL */,
-// botintegral = 0x08a5 /* U+2321 BOTTOM HALF INTEGRAL */,
-// vertconnector = 0x08a6 /*(U+2502 BOX DRAWINGS LIGHT VERTICAL)*/,
-// topleftsqbracket = 0x08a7 /* U+23A1 LEFT SQUARE BRACKET UPPER CORNER */,
-// botleftsqbracket = 0x08a8 /* U+23A3 LEFT SQUARE BRACKET LOWER CORNER */,
-// toprightsqbracket = 0x08a9 /* U+23A4 RIGHT SQUARE BRACKET UPPER CORNER */,
-// botrightsqbracket = 0x08aa /* U+23A6 RIGHT SQUARE BRACKET LOWER CORNER */,
-// topleftparens = 0x08ab /* U+239B LEFT PARENTHESIS UPPER HOOK */,
-// botleftparens = 0x08ac /* U+239D LEFT PARENTHESIS LOWER HOOK */,
-// toprightparens = 0x08ad /* U+239E RIGHT PARENTHESIS UPPER HOOK */,
-// botrightparens = 0x08ae /* U+23A0 RIGHT PARENTHESIS LOWER HOOK */,
-// leftmiddlecurlybrace = 0x08af /* U+23A8 LEFT CURLY BRACKET MIDDLE PIECE */,
-// rightmiddlecurlybrace = 0x08b0 /* U+23AC RIGHT CURLY BRACKET MIDDLE PIECE */,
-// topleftsummation = 0x08b1,
-// botleftsummation = 0x08b2,
-// topvertsummationconnector = 0x08b3,
-// botvertsummationconnector = 0x08b4,
-// toprightsummation = 0x08b5,
-// botrightsummation = 0x08b6,
-// rightmiddlesummation = 0x08b7,
-// lessthanequal = 0x08bc /* U+2264 LESS-THAN OR EQUAL TO */,
-// notequal = 0x08bd /* U+2260 NOT EQUAL TO */,
-// greaterthanequal = 0x08be /* U+2265 GREATER-THAN OR EQUAL TO */,
-// integral = 0x08bf /* U+222B INTEGRAL */,
-// therefore = 0x08c0 /* U+2234 THEREFORE */,
-// variation = 0x08c1 /* U+221D PROPORTIONAL TO */,
-// infinity = 0x08c2 /* U+221E INFINITY */,
-// nabla = 0x08c5 /* U+2207 NABLA */,
-// approximate = 0x08c8 /* U+223C TILDE OPERATOR */,
-// similarequal = 0x08c9 /* U+2243 ASYMPTOTICALLY EQUAL TO */,
-// ifonlyif = 0x08cd /* U+21D4 LEFT RIGHT DOUBLE ARROW */,
-// implies = 0x08ce /* U+21D2 RIGHTWARDS DOUBLE ARROW */,
-// identical = 0x08cf /* U+2261 IDENTICAL TO */,
-// radical = 0x08d6 /* U+221A SQUARE ROOT */,
-// includedin = 0x08da /* U+2282 SUBSET OF */,
-// includes = 0x08db /* U+2283 SUPERSET OF */,
-// intersection = 0x08dc /* U+2229 INTERSECTION */,
-// union = 0x08dd /* U+222A UNION */,
-// logicaland = 0x08de /* U+2227 LOGICAL AND */,
-// logicalor = 0x08df /* U+2228 LOGICAL OR */,
-// partialderivative = 0x08ef /* U+2202 PARTIAL DIFFERENTIAL */,
-// function = 0x08f6 /* U+0192 LATIN SMALL LETTER F WITH HOOK */,
-// leftarrow = 0x08fb /* U+2190 LEFTWARDS ARROW */,
-// uparrow = 0x08fc /* U+2191 UPWARDS ARROW */,
-// rightarrow = 0x08fd /* U+2192 RIGHTWARDS ARROW */,
-// downarrow = 0x08fe /* U+2193 DOWNWARDS ARROW */,
-// blank = 0x09df,
-// soliddiamond = 0x09e0 /* U+25C6 BLACK DIAMOND */,
-// checkerboard = 0x09e1 /* U+2592 MEDIUM SHADE */,
-// ht = 0x09e2 /* U+2409 SYMBOL FOR HORIZONTAL TABULATION */,
-// ff = 0x09e3 /* U+240C SYMBOL FOR FORM FEED */,
-// cr = 0x09e4 /* U+240D SYMBOL FOR CARRIAGE RETURN */,
-// lf = 0x09e5 /* U+240A SYMBOL FOR LINE FEED */,
-// nl = 0x09e8 /* U+2424 SYMBOL FOR NEWLINE */,
-// vt = 0x09e9 /* U+240B SYMBOL FOR VERTICAL TABULATION */,
-// lowrightcorner = 0x09ea /* U+2518 BOX DRAWINGS LIGHT UP AND LEFT */,
-// uprightcorner = 0x09eb /* U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT */,
-// upleftcorner = 0x09ec /* U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT */,
-// lowleftcorner = 0x09ed /* U+2514 BOX DRAWINGS LIGHT UP AND RIGHT */,
-// crossinglines = 0x09ee /* U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */,
-// horizlinescan1 = 0x09ef /* U+23BA HORIZONTAL SCAN LINE-1 */,
-// horizlinescan3 = 0x09f0 /* U+23BB HORIZONTAL SCAN LINE-3 */,
-// horizlinescan5 = 0x09f1 /* U+2500 BOX DRAWINGS LIGHT HORIZONTAL */,
-// horizlinescan7 = 0x09f2 /* U+23BC HORIZONTAL SCAN LINE-7 */,
-// horizlinescan9 = 0x09f3 /* U+23BD HORIZONTAL SCAN LINE-9 */,
-// leftt = 0x09f4 /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */,
-// rightt = 0x09f5 /* U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT */,
-// bott = 0x09f6 /* U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL */,
-// topt = 0x09f7 /* U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */,
-// vertbar = 0x09f8 /* U+2502 BOX DRAWINGS LIGHT VERTICAL */,
-// emspace = 0x0aa1 /* U+2003 EM SPACE */,
-// enspace = 0x0aa2 /* U+2002 EN SPACE */,
-// em3space = 0x0aa3 /* U+2004 THREE-PER-EM SPACE */,
-// em4space = 0x0aa4 /* U+2005 FOUR-PER-EM SPACE */,
-// digitspace = 0x0aa5 /* U+2007 FIGURE SPACE */,
-// punctspace = 0x0aa6 /* U+2008 PUNCTUATION SPACE */,
-// thinspace = 0x0aa7 /* U+2009 THIN SPACE */,
-// hairspace = 0x0aa8 /* U+200A HAIR SPACE */,
-// emdash = 0x0aa9 /* U+2014 EM DASH */,
-// endash = 0x0aaa /* U+2013 EN DASH */,
-// signifblank = 0x0aac /*(U+2423 OPEN BOX)*/,
-// ellipsis = 0x0aae /* U+2026 HORIZONTAL ELLIPSIS */,
-// doubbaselinedot = 0x0aaf /* U+2025 TWO DOT LEADER */,
-// onethird = 0x0ab0 /* U+2153 VULGAR FRACTION ONE THIRD */,
-// twothirds = 0x0ab1 /* U+2154 VULGAR FRACTION TWO THIRDS */,
-// onefifth = 0x0ab2 /* U+2155 VULGAR FRACTION ONE FIFTH */,
-// twofifths = 0x0ab3 /* U+2156 VULGAR FRACTION TWO FIFTHS */,
-// threefifths = 0x0ab4 /* U+2157 VULGAR FRACTION THREE FIFTHS */,
-// fourfifths = 0x0ab5 /* U+2158 VULGAR FRACTION FOUR FIFTHS */,
-// onesixth = 0x0ab6 /* U+2159 VULGAR FRACTION ONE SIXTH */,
-// fivesixths = 0x0ab7 /* U+215A VULGAR FRACTION FIVE SIXTHS */,
-// careof = 0x0ab8 /* U+2105 CARE OF */,
-// figdash = 0x0abb /* U+2012 FIGURE DASH */,
-// leftanglebracket = 0x0abc /*(U+27E8 MATHEMATICAL LEFT ANGLE BRACKET)*/,
-// decimalpoint = 0x0abd /*(U+002E FULL STOP)*/,
-// rightanglebracket = 0x0abe /*(U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET)*/,
-// marker = 0x0abf,
-// oneeighth = 0x0ac3 /* U+215B VULGAR FRACTION ONE EIGHTH */,
-// threeeighths = 0x0ac4 /* U+215C VULGAR FRACTION THREE EIGHTHS */,
-// fiveeighths = 0x0ac5 /* U+215D VULGAR FRACTION FIVE EIGHTHS */,
-// seveneighths = 0x0ac6 /* U+215E VULGAR FRACTION SEVEN EIGHTHS */,
-// trademark = 0x0ac9 /* U+2122 TRADE MARK SIGN */,
-// signaturemark = 0x0aca /*(U+2613 SALTIRE)*/,
-// trademarkincircle = 0x0acb,
-// leftopentriangle = 0x0acc /*(U+25C1 WHITE LEFT-POINTING TRIANGLE)*/,
-// rightopentriangle = 0x0acd /*(U+25B7 WHITE RIGHT-POINTING TRIANGLE)*/,
-// emopencircle = 0x0ace /*(U+25CB WHITE CIRCLE)*/,
-// emopenrectangle = 0x0acf /*(U+25AF WHITE VERTICAL RECTANGLE)*/,
-// leftsinglequotemark = 0x0ad0 /* U+2018 LEFT SINGLE QUOTATION MARK */,
-// rightsinglequotemark = 0x0ad1 /* U+2019 RIGHT SINGLE QUOTATION MARK */,
-// leftdoublequotemark = 0x0ad2 /* U+201C LEFT DOUBLE QUOTATION MARK */,
-// rightdoublequotemark = 0x0ad3 /* U+201D RIGHT DOUBLE QUOTATION MARK */,
-// prescription = 0x0ad4 /* U+211E PRESCRIPTION TAKE */,
-// permille = 0x0ad5 /* U+2030 PER MILLE SIGN */,
-// minutes = 0x0ad6 /* U+2032 PRIME */,
-// seconds = 0x0ad7 /* U+2033 DOUBLE PRIME */,
-// latincross = 0x0ad9 /* U+271D LATIN CROSS */,
-// hexagram = 0x0ada,
-// filledrectbullet = 0x0adb /*(U+25AC BLACK RECTANGLE)*/,
-// filledlefttribullet = 0x0adc /*(U+25C0 BLACK LEFT-POINTING TRIANGLE)*/,
-// filledrighttribullet = 0x0add /*(U+25B6 BLACK RIGHT-POINTING TRIANGLE)*/,
-// emfilledcircle = 0x0ade /*(U+25CF BLACK CIRCLE)*/,
-// emfilledrect = 0x0adf /*(U+25AE BLACK VERTICAL RECTANGLE)*/,
-// enopencircbullet = 0x0ae0 /*(U+25E6 WHITE BULLET)*/,
-// enopensquarebullet = 0x0ae1 /*(U+25AB WHITE SMALL SQUARE)*/,
-// openrectbullet = 0x0ae2 /*(U+25AD WHITE RECTANGLE)*/,
-// opentribulletup = 0x0ae3 /*(U+25B3 WHITE UP-POINTING TRIANGLE)*/,
-// opentribulletdown = 0x0ae4 /*(U+25BD WHITE DOWN-POINTING TRIANGLE)*/,
-// openstar = 0x0ae5 /*(U+2606 WHITE STAR)*/,
-// enfilledcircbullet = 0x0ae6 /*(U+2022 BULLET)*/,
-// enfilledsqbullet = 0x0ae7 /*(U+25AA BLACK SMALL SQUARE)*/,
-// filledtribulletup = 0x0ae8 /*(U+25B2 BLACK UP-POINTING TRIANGLE)*/,
-// filledtribulletdown = 0x0ae9 /*(U+25BC BLACK DOWN-POINTING TRIANGLE)*/,
-// leftpointer = 0x0aea /*(U+261C WHITE LEFT POINTING INDEX)*/,
-// rightpointer = 0x0aeb /*(U+261E WHITE RIGHT POINTING INDEX)*/,
-// club = 0x0aec /* U+2663 BLACK CLUB SUIT */,
-// diamond = 0x0aed /* U+2666 BLACK DIAMOND SUIT */,
-// heart = 0x0aee /* U+2665 BLACK HEART SUIT */,
-// maltesecross = 0x0af0 /* U+2720 MALTESE CROSS */,
-// dagger = 0x0af1 /* U+2020 DAGGER */,
-// doubledagger = 0x0af2 /* U+2021 DOUBLE DAGGER */,
-// checkmark = 0x0af3 /* U+2713 CHECK MARK */,
-// ballotcross = 0x0af4 /* U+2717 BALLOT X */,
-// musicalsharp = 0x0af5 /* U+266F MUSIC SHARP SIGN */,
-// musicalflat = 0x0af6 /* U+266D MUSIC FLAT SIGN */,
-// malesymbol = 0x0af7 /* U+2642 MALE SIGN */,
-// femalesymbol = 0x0af8 /* U+2640 FEMALE SIGN */,
-// telephone = 0x0af9 /* U+260E BLACK TELEPHONE */,
-// telephonerecorder = 0x0afa /* U+2315 TELEPHONE RECORDER */,
-// phonographcopyright = 0x0afb /* U+2117 SOUND RECORDING COPYRIGHT */,
-// caret = 0x0afc /* U+2038 CARET */,
-// singlelowquotemark = 0x0afd /* U+201A SINGLE LOW-9 QUOTATION MARK */,
-// doublelowquotemark = 0x0afe /* U+201E DOUBLE LOW-9 QUOTATION MARK */,
-// cursor = 0x0aff,
-// leftcaret = 0x0ba3 /*(U+003C LESS-THAN SIGN)*/,
-// rightcaret = 0x0ba6 /*(U+003E GREATER-THAN SIGN)*/,
-// downcaret = 0x0ba8 /*(U+2228 LOGICAL OR)*/,
-// upcaret = 0x0ba9 /*(U+2227 LOGICAL AND)*/,
-// overbar = 0x0bc0 /*(U+00AF MACRON)*/,
-// downtack = 0x0bc2 /* U+22A4 DOWN TACK */,
-// upshoe = 0x0bc3 /*(U+2229 INTERSECTION)*/,
-// downstile = 0x0bc4 /* U+230A LEFT FLOOR */,
-// underbar = 0x0bc6 /*(U+005F LOW LINE)*/,
-// jot = 0x0bca /* U+2218 RING OPERATOR */,
-// quad = 0x0bcc /* U+2395 APL FUNCTIONAL SYMBOL QUAD */,
-// uptack = 0x0bce /* U+22A5 UP TACK */,
-// circle = 0x0bcf /* U+25CB WHITE CIRCLE */,
-// upstile = 0x0bd3 /* U+2308 LEFT CEILING */,
-// downshoe = 0x0bd6 /*(U+222A UNION)*/,
-// rightshoe = 0x0bd8 /*(U+2283 SUPERSET OF)*/,
-// leftshoe = 0x0bda /*(U+2282 SUBSET OF)*/,
-// lefttack = 0x0bdc /* U+22A3 LEFT TACK */,
-// righttack = 0x0bfc /* U+22A2 RIGHT TACK */,
-// hebrew_doublelowline = 0x0cdf /* U+2017 DOUBLE LOW LINE */,
-// hebrew_aleph = 0x0ce0 /* U+05D0 HEBREW LETTER ALEF */,
-// hebrew_bet = 0x0ce1 /* U+05D1 HEBREW LETTER BET */,
-// hebrew_beth = 0x0ce1 /* deprecated */,
-// hebrew_gimel = 0x0ce2 /* U+05D2 HEBREW LETTER GIMEL */,
-// hebrew_gimmel = 0x0ce2 /* deprecated */,
-// hebrew_dalet = 0x0ce3 /* U+05D3 HEBREW LETTER DALET */,
-// hebrew_daleth = 0x0ce3 /* deprecated */,
-// hebrew_he = 0x0ce4 /* U+05D4 HEBREW LETTER HE */,
-// hebrew_waw = 0x0ce5 /* U+05D5 HEBREW LETTER VAV */,
-// hebrew_zain = 0x0ce6 /* U+05D6 HEBREW LETTER ZAYIN */,
-// hebrew_zayin = 0x0ce6 /* deprecated */,
-// hebrew_chet = 0x0ce7 /* U+05D7 HEBREW LETTER HET */,
-// hebrew_het = 0x0ce7 /* deprecated */,
-// hebrew_tet = 0x0ce8 /* U+05D8 HEBREW LETTER TET */,
-// hebrew_teth = 0x0ce8 /* deprecated */,
-// hebrew_yod = 0x0ce9 /* U+05D9 HEBREW LETTER YOD */,
-// hebrew_finalkaph = 0x0cea /* U+05DA HEBREW LETTER FINAL KAF */,
-// hebrew_kaph = 0x0ceb /* U+05DB HEBREW LETTER KAF */,
-// hebrew_lamed = 0x0cec /* U+05DC HEBREW LETTER LAMED */,
-// hebrew_finalmem = 0x0ced /* U+05DD HEBREW LETTER FINAL MEM */,
-// hebrew_mem = 0x0cee /* U+05DE HEBREW LETTER MEM */,
-// hebrew_finalnun = 0x0cef /* U+05DF HEBREW LETTER FINAL NUN */,
-// hebrew_nun = 0x0cf0 /* U+05E0 HEBREW LETTER NUN */,
-// hebrew_samech = 0x0cf1 /* U+05E1 HEBREW LETTER SAMEKH */,
-// hebrew_samekh = 0x0cf1 /* deprecated */,
-// hebrew_ayin = 0x0cf2 /* U+05E2 HEBREW LETTER AYIN */,
-// hebrew_finalpe = 0x0cf3 /* U+05E3 HEBREW LETTER FINAL PE */,
-// hebrew_pe = 0x0cf4 /* U+05E4 HEBREW LETTER PE */,
-// hebrew_finalzade = 0x0cf5 /* U+05E5 HEBREW LETTER FINAL TSADI */,
-// hebrew_finalzadi = 0x0cf5 /* deprecated */,
-// hebrew_zade = 0x0cf6 /* U+05E6 HEBREW LETTER TSADI */,
-// hebrew_zadi = 0x0cf6 /* deprecated */,
-// hebrew_qoph = 0x0cf7 /* U+05E7 HEBREW LETTER QOF */,
-// hebrew_kuf = 0x0cf7 /* deprecated */,
-// hebrew_resh = 0x0cf8 /* U+05E8 HEBREW LETTER RESH */,
-// hebrew_shin = 0x0cf9 /* U+05E9 HEBREW LETTER SHIN */,
-// hebrew_taw = 0x0cfa /* U+05EA HEBREW LETTER TAV */,
-// hebrew_taf = 0x0cfa /* deprecated */,
-// Hebrew_switch = 0xff7e /* Alias for mode_switch */,
-// Thai_kokai = 0x0da1 /* U+0E01 THAI CHARACTER KO KAI */,
-// Thai_khokhai = 0x0da2 /* U+0E02 THAI CHARACTER KHO KHAI */,
-// Thai_khokhuat = 0x0da3 /* U+0E03 THAI CHARACTER KHO KHUAT */,
-// Thai_khokhwai = 0x0da4 /* U+0E04 THAI CHARACTER KHO KHWAI */,
-// Thai_khokhon = 0x0da5 /* U+0E05 THAI CHARACTER KHO KHON */,
-// Thai_khorakhang = 0x0da6 /* U+0E06 THAI CHARACTER KHO RAKHANG */,
-// Thai_ngongu = 0x0da7 /* U+0E07 THAI CHARACTER NGO NGU */,
-// Thai_chochan = 0x0da8 /* U+0E08 THAI CHARACTER CHO CHAN */,
-// Thai_choching = 0x0da9 /* U+0E09 THAI CHARACTER CHO CHING */,
-// Thai_chochang = 0x0daa /* U+0E0A THAI CHARACTER CHO CHANG */,
-// Thai_soso = 0x0dab /* U+0E0B THAI CHARACTER SO SO */,
-// Thai_chochoe = 0x0dac /* U+0E0C THAI CHARACTER CHO CHOE */,
-// Thai_yoying = 0x0dad /* U+0E0D THAI CHARACTER YO YING */,
-// Thai_dochada = 0x0dae /* U+0E0E THAI CHARACTER DO CHADA */,
-// Thai_topatak = 0x0daf /* U+0E0F THAI CHARACTER TO PATAK */,
-// Thai_thothan = 0x0db0 /* U+0E10 THAI CHARACTER THO THAN */,
-// Thai_thonangmontho = 0x0db1 /* U+0E11 THAI CHARACTER THO NANGMONTHO */,
-// Thai_thophuthao = 0x0db2 /* U+0E12 THAI CHARACTER THO PHUTHAO */,
-// Thai_nonen = 0x0db3 /* U+0E13 THAI CHARACTER NO NEN */,
-// Thai_dodek = 0x0db4 /* U+0E14 THAI CHARACTER DO DEK */,
-// Thai_totao = 0x0db5 /* U+0E15 THAI CHARACTER TO TAO */,
-// Thai_thothung = 0x0db6 /* U+0E16 THAI CHARACTER THO THUNG */,
-// Thai_thothahan = 0x0db7 /* U+0E17 THAI CHARACTER THO THAHAN */,
-// Thai_thothong = 0x0db8 /* U+0E18 THAI CHARACTER THO THONG */,
-// Thai_nonu = 0x0db9 /* U+0E19 THAI CHARACTER NO NU */,
-// Thai_bobaimai = 0x0dba /* U+0E1A THAI CHARACTER BO BAIMAI */,
-// Thai_popla = 0x0dbb /* U+0E1B THAI CHARACTER PO PLA */,
-// Thai_phophung = 0x0dbc /* U+0E1C THAI CHARACTER PHO PHUNG */,
-// Thai_fofa = 0x0dbd /* U+0E1D THAI CHARACTER FO FA */,
-// Thai_phophan = 0x0dbe /* U+0E1E THAI CHARACTER PHO PHAN */,
-// Thai_fofan = 0x0dbf /* U+0E1F THAI CHARACTER FO FAN */,
-// Thai_phosamphao = 0x0dc0 /* U+0E20 THAI CHARACTER PHO SAMPHAO */,
-// Thai_moma = 0x0dc1 /* U+0E21 THAI CHARACTER MO MA */,
-// Thai_yoyak = 0x0dc2 /* U+0E22 THAI CHARACTER YO YAK */,
-// Thai_rorua = 0x0dc3 /* U+0E23 THAI CHARACTER RO RUA */,
-// Thai_ru = 0x0dc4 /* U+0E24 THAI CHARACTER RU */,
-// Thai_loling = 0x0dc5 /* U+0E25 THAI CHARACTER LO LING */,
-// Thai_lu = 0x0dc6 /* U+0E26 THAI CHARACTER LU */,
-// Thai_wowaen = 0x0dc7 /* U+0E27 THAI CHARACTER WO WAEN */,
-// Thai_sosala = 0x0dc8 /* U+0E28 THAI CHARACTER SO SALA */,
-// Thai_sorusi = 0x0dc9 /* U+0E29 THAI CHARACTER SO RUSI */,
-// Thai_sosua = 0x0dca /* U+0E2A THAI CHARACTER SO SUA */,
-// Thai_hohip = 0x0dcb /* U+0E2B THAI CHARACTER HO HIP */,
-// Thai_lochula = 0x0dcc /* U+0E2C THAI CHARACTER LO CHULA */,
-// Thai_oang = 0x0dcd /* U+0E2D THAI CHARACTER O ANG */,
-// Thai_honokhuk = 0x0dce /* U+0E2E THAI CHARACTER HO NOKHUK */,
-// Thai_paiyannoi = 0x0dcf /* U+0E2F THAI CHARACTER PAIYANNOI */,
-// Thai_saraa = 0x0dd0 /* U+0E30 THAI CHARACTER SARA A */,
-// Thai_maihanakat = 0x0dd1 /* U+0E31 THAI CHARACTER MAI HAN-AKAT */,
-// Thai_saraaa = 0x0dd2 /* U+0E32 THAI CHARACTER SARA AA */,
-// Thai_saraam = 0x0dd3 /* U+0E33 THAI CHARACTER SARA AM */,
-// Thai_sarai = 0x0dd4 /* U+0E34 THAI CHARACTER SARA I */,
-// Thai_saraii = 0x0dd5 /* U+0E35 THAI CHARACTER SARA II */,
-// Thai_saraue = 0x0dd6 /* U+0E36 THAI CHARACTER SARA UE */,
-// Thai_sarauee = 0x0dd7 /* U+0E37 THAI CHARACTER SARA UEE */,
-// Thai_sarau = 0x0dd8 /* U+0E38 THAI CHARACTER SARA U */,
-// Thai_sarauu = 0x0dd9 /* U+0E39 THAI CHARACTER SARA UU */,
-// Thai_phinthu = 0x0dda /* U+0E3A THAI CHARACTER PHINTHU */,
-// Thai_maihanakat_maitho = 0x0dde,
-// Thai_baht = 0x0ddf /* U+0E3F THAI CURRENCY SYMBOL BAHT */,
-// Thai_sarae = 0x0de0 /* U+0E40 THAI CHARACTER SARA E */,
-// Thai_saraae = 0x0de1 /* U+0E41 THAI CHARACTER SARA AE */,
-// Thai_sarao = 0x0de2 /* U+0E42 THAI CHARACTER SARA O */,
-// Thai_saraaimaimuan = 0x0de3 /* U+0E43 THAI CHARACTER SARA AI MAIMUAN */,
-// Thai_saraaimaimalai = 0x0de4 /* U+0E44 THAI CHARACTER SARA AI MAIMALAI */,
-// Thai_lakkhangyao = 0x0de5 /* U+0E45 THAI CHARACTER LAKKHANGYAO */,
-// Thai_maiyamok = 0x0de6 /* U+0E46 THAI CHARACTER MAIYAMOK */,
-// Thai_maitaikhu = 0x0de7 /* U+0E47 THAI CHARACTER MAITAIKHU */,
-// Thai_maiek = 0x0de8 /* U+0E48 THAI CHARACTER MAI EK */,
-// Thai_maitho = 0x0de9 /* U+0E49 THAI CHARACTER MAI THO */,
-// Thai_maitri = 0x0dea /* U+0E4A THAI CHARACTER MAI TRI */,
-// Thai_maichattawa = 0x0deb /* U+0E4B THAI CHARACTER MAI CHATTAWA */,
-// Thai_thanthakhat = 0x0dec /* U+0E4C THAI CHARACTER THANTHAKHAT */,
-// Thai_nikhahit = 0x0ded /* U+0E4D THAI CHARACTER NIKHAHIT */,
-// Thai_leksun = 0x0df0 /* U+0E50 THAI DIGIT ZERO */,
-// Thai_leknung = 0x0df1 /* U+0E51 THAI DIGIT ONE */,
-// Thai_leksong = 0x0df2 /* U+0E52 THAI DIGIT TWO */,
-// Thai_leksam = 0x0df3 /* U+0E53 THAI DIGIT THREE */,
-// Thai_leksi = 0x0df4 /* U+0E54 THAI DIGIT FOUR */,
-// Thai_lekha = 0x0df5 /* U+0E55 THAI DIGIT FIVE */,
-// Thai_lekhok = 0x0df6 /* U+0E56 THAI DIGIT SIX */,
-// Thai_lekchet = 0x0df7 /* U+0E57 THAI DIGIT SEVEN */,
-// Thai_lekpaet = 0x0df8 /* U+0E58 THAI DIGIT EIGHT */,
-// Thai_lekkao = 0x0df9 /* U+0E59 THAI DIGIT NINE */,
-// Hangul = 0xff31 /* Hangul start/stop(toggle) */,
-// Hangul_Start = 0xff32 /* Hangul start */,
-// Hangul_End = 0xff33 /* Hangul end, English start */,
-// Hangul_Hanja = 0xff34 /* Start Hangul->Hanja Conversion */,
-// Hangul_Jamo = 0xff35 /* Hangul Jamo mode */,
-// Hangul_Romaja = 0xff36 /* Hangul Romaja mode */,
-// Hangul_Codeinput = 0xff37 /* Hangul code input mode */,
-// Hangul_Jeonja = 0xff38 /* Jeonja mode */,
-// Hangul_Banja = 0xff39 /* Banja mode */,
-// Hangul_PreHanja = 0xff3a /* Pre Hanja conversion */,
-// Hangul_PostHanja = 0xff3b /* Post Hanja conversion */,
-// Hangul_SingleCandidate = 0xff3c /* Single candidate */,
-// Hangul_MultipleCandidate = 0xff3d /* Multiple candidate */,
-// Hangul_PreviousCandidate = 0xff3e /* Previous candidate */,
-// Hangul_Special = 0xff3f /* Special symbols */,
-// Hangul_switch = 0xff7e /* Alias for mode_switch */,
-// 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 /*(U+20A9 WON SIGN)*/,
-// Armenian_ligature_ew = 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */,
-// Armenian_full_stop = 0x1000589 /* U+0589 ARMENIAN FULL STOP */,
-// Armenian_verjaket = 0x1000589 /* U+0589 ARMENIAN FULL STOP */,
-// Armenian_separation_mark = 0x100055d /* U+055D ARMENIAN COMMA */,
-// Armenian_but = 0x100055d /* U+055D ARMENIAN COMMA */,
-// Armenian_hyphen = 0x100058a /* U+058A ARMENIAN HYPHEN */,
-// Armenian_yentamna = 0x100058a /* U+058A ARMENIAN HYPHEN */,
-// Armenian_exclam = 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */,
-// Armenian_amanak = 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */,
-// Armenian_accent = 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */,
-// Armenian_shesht = 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */,
-// Armenian_question = 0x100055e /* U+055E ARMENIAN QUESTION MARK */,
-// Armenian_paruyk = 0x100055e /* U+055E ARMENIAN QUESTION MARK */,
-// Armenian_AYB = 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */,
-// Armenian_ayb = 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */,
-// Armenian_BEN = 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */,
-// Armenian_ben = 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */,
-// Armenian_GIM = 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */,
-// Armenian_gim = 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */,
-// Armenian_DA = 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */,
-// Armenian_da = 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */,
-// Armenian_YECH = 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */,
-// Armenian_yech = 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */,
-// Armenian_ZA = 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */,
-// Armenian_za = 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */,
-// Armenian_E = 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */,
-// Armenian_e = 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */,
-// Armenian_AT = 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */,
-// Armenian_at = 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */,
-// Armenian_TO = 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */,
-// Armenian_to = 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */,
-// Armenian_ZHE = 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */,
-// Armenian_zhe = 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */,
-// Armenian_INI = 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */,
-// Armenian_ini = 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */,
-// Armenian_LYUN = 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */,
-// Armenian_lyun = 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */,
-// Armenian_KHE = 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */,
-// Armenian_khe = 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */,
-// Armenian_TSA = 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */,
-// Armenian_tsa = 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */,
-// Armenian_KEN = 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */,
-// Armenian_ken = 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */,
-// Armenian_HO = 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */,
-// Armenian_ho = 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */,
-// Armenian_DZA = 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */,
-// Armenian_dza = 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */,
-// Armenian_GHAT = 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */,
-// Armenian_ghat = 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */,
-// Armenian_TCHE = 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */,
-// Armenian_tche = 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */,
-// Armenian_MEN = 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */,
-// Armenian_men = 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */,
-// Armenian_HI = 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */,
-// Armenian_hi = 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */,
-// Armenian_NU = 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */,
-// Armenian_nu = 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */,
-// Armenian_SHA = 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */,
-// Armenian_sha = 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */,
-// Armenian_VO = 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */,
-// Armenian_vo = 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */,
-// Armenian_CHA = 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */,
-// Armenian_cha = 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */,
-// Armenian_PE = 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */,
-// Armenian_pe = 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */,
-// Armenian_JE = 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */,
-// Armenian_je = 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */,
-// Armenian_RA = 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */,
-// Armenian_ra = 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */,
-// Armenian_SE = 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */,
-// Armenian_se = 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */,
-// Armenian_VEV = 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */,
-// Armenian_vev = 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */,
-// Armenian_TYUN = 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */,
-// Armenian_tyun = 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */,
-// Armenian_RE = 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */,
-// Armenian_re = 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */,
-// Armenian_TSO = 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */,
-// Armenian_tso = 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */,
-// Armenian_VYUN = 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */,
-// Armenian_vyun = 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */,
-// Armenian_PYUR = 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */,
-// Armenian_pyur = 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */,
-// Armenian_KE = 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */,
-// Armenian_ke = 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */,
-// Armenian_O = 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */,
-// Armenian_o = 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */,
-// Armenian_FE = 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */,
-// Armenian_fe = 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */,
-// Armenian_apostrophe = 0x100055a /* U+055A ARMENIAN APOSTROPHE */,
-// Georgian_an = 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */,
-// Georgian_ban = 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */,
-// Georgian_gan = 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */,
-// Georgian_don = 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */,
-// Georgian_en = 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */,
-// Georgian_vin = 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */,
-// Georgian_zen = 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */,
-// Georgian_tan = 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */,
-// Georgian_in = 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */,
-// Georgian_kan = 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */,
-// Georgian_las = 0x10010da /* U+10DA GEORGIAN LETTER LAS */,
-// Georgian_man = 0x10010db /* U+10DB GEORGIAN LETTER MAN */,
-// Georgian_nar = 0x10010dc /* U+10DC GEORGIAN LETTER NAR */,
-// Georgian_on = 0x10010dd /* U+10DD GEORGIAN LETTER ON */,
-// Georgian_par = 0x10010de /* U+10DE GEORGIAN LETTER PAR */,
-// Georgian_zhar = 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */,
-// Georgian_rae = 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */,
-// Georgian_san = 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */,
-// Georgian_tar = 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */,
-// Georgian_un = 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */,
-// Georgian_phar = 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */,
-// Georgian_khar = 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */,
-// Georgian_ghan = 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */,
-// Georgian_qar = 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */,
-// Georgian_shin = 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */,
-// Georgian_chin = 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */,
-// Georgian_can = 0x10010ea /* U+10EA GEORGIAN LETTER CAN */,
-// Georgian_jil = 0x10010eb /* U+10EB GEORGIAN LETTER JIL */,
-// Georgian_cil = 0x10010ec /* U+10EC GEORGIAN LETTER CIL */,
-// Georgian_char = 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */,
-// Georgian_xan = 0x10010ee /* U+10EE GEORGIAN LETTER XAN */,
-// Georgian_jhan = 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */,
-// Georgian_hae = 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */,
-// Georgian_he = 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */,
-// Georgian_hie = 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */,
-// Georgian_we = 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */,
-// Georgian_har = 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */,
-// Georgian_hoe = 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */,
-// Georgian_fi = 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */,
-// Xabovedot = 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */,
-// Ibreve = 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */,
-// Zstroke = 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */,
-// Gcaron = 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */,
-// Ocaron = 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */,
-// Obarred = 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */,
-// xabovedot = 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */,
-// ibreve = 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */,
-// zstroke = 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */,
-// gcaron = 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */,
-// ocaron = 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */,
-// obarred = 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */,
-// SCHWA = 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */,
-// schwa = 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */,
-// EZH = 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */,
-// ezh = 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */,
-// Lbelowdot = 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */,
-// lbelowdot = 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */,
-// Abelowdot = 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */,
-// abelowdot = 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */,
-// Ahook = 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */,
-// ahook = 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */,
-// Acircumflexacute = 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */,
-// acircumflexacute = 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */,
-// Acircumflexgrave = 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */,
-// acircumflexgrave = 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */,
-// Acircumflexhook = 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */,
-// acircumflexhook = 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */,
-// Acircumflextilde = 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */,
-// acircumflextilde = 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */,
-// Acircumflexbelowdot = 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */,
-// acircumflexbelowdot = 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */,
-// Abreveacute = 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */,
-// abreveacute = 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */,
-// Abrevegrave = 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */,
-// abrevegrave = 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */,
-// Abrevehook = 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */,
-// abrevehook = 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */,
-// Abrevetilde = 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */,
-// abrevetilde = 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */,
-// Abrevebelowdot = 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */,
-// abrevebelowdot = 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */,
-// Ebelowdot = 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */,
-// ebelowdot = 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */,
-// Ehook = 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */,
-// ehook = 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */,
-// Etilde = 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */,
-// etilde = 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */,
-// Ecircumflexacute = 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */,
-// ecircumflexacute = 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */,
-// Ecircumflexgrave = 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */,
-// ecircumflexgrave = 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */,
-// Ecircumflexhook = 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */,
-// ecircumflexhook = 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */,
-// Ecircumflextilde = 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */,
-// ecircumflextilde = 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */,
-// Ecircumflexbelowdot = 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */,
-// ecircumflexbelowdot = 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */,
-// Ihook = 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */,
-// ihook = 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */,
-// Ibelowdot = 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */,
-// ibelowdot = 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */,
-// Obelowdot = 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */,
-// obelowdot = 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */,
-// Ohook = 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */,
-// ohook = 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */,
-// Ocircumflexacute = 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */,
-// ocircumflexacute = 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */,
-// Ocircumflexgrave = 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */,
-// ocircumflexgrave = 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */,
-// Ocircumflexhook = 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */,
-// ocircumflexhook = 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */,
-// Ocircumflextilde = 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */,
-// ocircumflextilde = 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */,
-// Ocircumflexbelowdot = 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */,
-// ocircumflexbelowdot = 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */,
-// Ohornacute = 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */,
-// ohornacute = 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */,
-// Ohorngrave = 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */,
-// ohorngrave = 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */,
-// Ohornhook = 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */,
-// ohornhook = 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */,
-// Ohorntilde = 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */,
-// ohorntilde = 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */,
-// Ohornbelowdot = 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */,
-// ohornbelowdot = 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */,
-// Ubelowdot = 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */,
-// ubelowdot = 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */,
-// Uhook = 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */,
-// uhook = 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */,
-// Uhornacute = 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */,
-// uhornacute = 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */,
-// Uhorngrave = 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */,
-// uhorngrave = 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */,
-// Uhornhook = 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */,
-// uhornhook = 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */,
-// Uhorntilde = 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */,
-// uhorntilde = 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */,
-// Uhornbelowdot = 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */,
-// uhornbelowdot = 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */,
-// Ybelowdot = 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */,
-// ybelowdot = 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */,
-// Yhook = 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */,
-// yhook = 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */,
-// Ytilde = 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */,
-// ytilde = 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */,
-// Ohorn = 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */,
-// ohorn = 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */,
-// Uhorn = 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */,
-// uhorn = 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */,
-// EcuSign = 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */,
-// ColonSign = 0x10020a1 /* U+20A1 COLON SIGN */,
-// CruzeiroSign = 0x10020a2 /* U+20A2 CRUZEIRO SIGN */,
-// FFrancSign = 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */,
-// LiraSign = 0x10020a4 /* U+20A4 LIRA SIGN */,
-// MillSign = 0x10020a5 /* U+20A5 MILL SIGN */,
-// NairaSign = 0x10020a6 /* U+20A6 NAIRA SIGN */,
-// PesetaSign = 0x10020a7 /* U+20A7 PESETA SIGN */,
-// RupeeSign = 0x10020a8 /* U+20A8 RUPEE SIGN */,
-// WonSign = 0x10020a9 /* U+20A9 WON SIGN */,
-// NewSheqelSign = 0x10020aa /* U+20AA NEW SHEQEL SIGN */,
-// DongSign = 0x10020ab /* U+20AB DONG SIGN */,
-// EuroSign = 0x20ac /* U+20AC EURO SIGN */,
-// zerosuperior = 0x1002070 /* U+2070 SUPERSCRIPT ZERO */,
-// foursuperior = 0x1002074 /* U+2074 SUPERSCRIPT FOUR */,
-// fivesuperior = 0x1002075 /* U+2075 SUPERSCRIPT FIVE */,
-// sixsuperior = 0x1002076 /* U+2076 SUPERSCRIPT SIX */,
-// sevensuperior = 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */,
-// eightsuperior = 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */,
-// ninesuperior = 0x1002079 /* U+2079 SUPERSCRIPT NINE */,
-// zerosubscript = 0x1002080 /* U+2080 SUBSCRIPT ZERO */,
-// onesubscript = 0x1002081 /* U+2081 SUBSCRIPT ONE */,
-// twosubscript = 0x1002082 /* U+2082 SUBSCRIPT TWO */,
-// threesubscript = 0x1002083 /* U+2083 SUBSCRIPT THREE */,
-// foursubscript = 0x1002084 /* U+2084 SUBSCRIPT FOUR */,
-// fivesubscript = 0x1002085 /* U+2085 SUBSCRIPT FIVE */,
-// sixsubscript = 0x1002086 /* U+2086 SUBSCRIPT SIX */,
-// sevensubscript = 0x1002087 /* U+2087 SUBSCRIPT SEVEN */,
-// eightsubscript = 0x1002088 /* U+2088 SUBSCRIPT EIGHT */,
-// ninesubscript = 0x1002089 /* U+2089 SUBSCRIPT NINE */,
-// partdifferential = 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */,
-// emptyset = 0x1002205 /* U+2205 NULL SET */,
-// elementof = 0x1002208 /* U+2208 ELEMENT OF */,
-// notelementof = 0x1002209 /* U+2209 NOT AN ELEMENT OF */,
-// containsas = 0x100220B /* U+220B CONTAINS AS MEMBER */,
-// squareroot = 0x100221A /* U+221A SQUARE ROOT */,
-// cuberoot = 0x100221B /* U+221B CUBE ROOT */,
-// fourthroot = 0x100221C /* U+221C FOURTH ROOT */,
-// dintegral = 0x100222C /* U+222C DOUBLE INTEGRAL */,
-// tintegral = 0x100222D /* U+222D TRIPLE INTEGRAL */,
-// because = 0x1002235 /* U+2235 BECAUSE */,
-// approxeq = 0x1002248 /* U+2245 ALMOST EQUAL TO */,
-// notapproxeq = 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */,
-// notidentical = 0x1002262 /* U+2262 NOT IDENTICAL TO */,
-// stricteq = 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */,
-// 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 /* U+2800 BRAILLE PATTERN BLANK */,
-// braille_dots_1 = 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */,
-// braille_dots_2 = 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */,
-// braille_dots_12 = 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */,
-// braille_dots_3 = 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */,
-// braille_dots_13 = 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */,
-// braille_dots_23 = 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */,
-// braille_dots_123 = 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */,
-// braille_dots_4 = 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */,
-// braille_dots_14 = 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */,
-// braille_dots_24 = 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */,
-// braille_dots_124 = 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */,
-// braille_dots_34 = 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */,
-// braille_dots_134 = 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */,
-// braille_dots_234 = 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */,
-// braille_dots_1234 = 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */,
-// braille_dots_5 = 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */,
-// braille_dots_15 = 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */,
-// braille_dots_25 = 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */,
-// braille_dots_125 = 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */,
-// braille_dots_35 = 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */,
-// braille_dots_135 = 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */,
-// braille_dots_235 = 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */,
-// braille_dots_1235 = 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */,
-// braille_dots_45 = 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */,
-// braille_dots_145 = 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */,
-// braille_dots_245 = 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */,
-// braille_dots_1245 = 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */,
-// braille_dots_345 = 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */,
-// braille_dots_1345 = 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */,
-// braille_dots_2345 = 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */,
-// braille_dots_12345 = 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */,
-// braille_dots_6 = 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */,
-// braille_dots_16 = 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */,
-// braille_dots_26 = 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */,
-// braille_dots_126 = 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */,
-// braille_dots_36 = 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */,
-// braille_dots_136 = 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */,
-// braille_dots_236 = 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */,
-// braille_dots_1236 = 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */,
-// braille_dots_46 = 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */,
-// braille_dots_146 = 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */,
-// braille_dots_246 = 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */,
-// braille_dots_1246 = 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */,
-// braille_dots_346 = 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */,
-// braille_dots_1346 = 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */,
-// braille_dots_2346 = 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */,
-// braille_dots_12346 = 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */,
-// braille_dots_56 = 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */,
-// braille_dots_156 = 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */,
-// braille_dots_256 = 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */,
-// braille_dots_1256 = 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */,
-// braille_dots_356 = 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */,
-// braille_dots_1356 = 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */,
-// braille_dots_2356 = 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */,
-// braille_dots_12356 = 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */,
-// braille_dots_456 = 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */,
-// braille_dots_1456 = 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */,
-// braille_dots_2456 = 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */,
-// braille_dots_12456 = 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */,
-// braille_dots_3456 = 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */,
-// braille_dots_13456 = 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */,
-// braille_dots_23456 = 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */,
-// braille_dots_123456 = 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */,
-// braille_dots_7 = 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */,
-// braille_dots_17 = 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */,
-// braille_dots_27 = 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */,
-// braille_dots_127 = 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */,
-// braille_dots_37 = 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */,
-// braille_dots_137 = 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */,
-// braille_dots_237 = 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */,
-// braille_dots_1237 = 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */,
-// braille_dots_47 = 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */,
-// braille_dots_147 = 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */,
-// braille_dots_247 = 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */,
-// braille_dots_1247 = 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */,
-// braille_dots_347 = 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */,
-// braille_dots_1347 = 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */,
-// braille_dots_2347 = 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */,
-// braille_dots_12347 = 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */,
-// braille_dots_57 = 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */,
-// braille_dots_157 = 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */,
-// braille_dots_257 = 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */,
-// braille_dots_1257 = 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */,
-// braille_dots_357 = 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */,
-// braille_dots_1357 = 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */,
-// braille_dots_2357 = 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */,
-// braille_dots_12357 = 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */,
-// braille_dots_457 = 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */,
-// braille_dots_1457 = 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */,
-// braille_dots_2457 = 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */,
-// braille_dots_12457 = 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */,
-// braille_dots_3457 = 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */,
-// braille_dots_13457 = 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */,
-// braille_dots_23457 = 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */,
-// braille_dots_123457 = 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */,
-// braille_dots_67 = 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */,
-// braille_dots_167 = 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */,
-// braille_dots_267 = 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */,
-// braille_dots_1267 = 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */,
-// braille_dots_367 = 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */,
-// braille_dots_1367 = 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */,
-// braille_dots_2367 = 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */,
-// braille_dots_12367 = 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */,
-// braille_dots_467 = 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */,
-// braille_dots_1467 = 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */,
-// braille_dots_2467 = 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */,
-// braille_dots_12467 = 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */,
-// braille_dots_3467 = 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */,
-// braille_dots_13467 = 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */,
-// braille_dots_23467 = 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */,
-// braille_dots_123467 = 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */,
-// braille_dots_567 = 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */,
-// braille_dots_1567 = 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */,
-// braille_dots_2567 = 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */,
-// braille_dots_12567 = 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */,
-// braille_dots_3567 = 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */,
-// braille_dots_13567 = 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */,
-// braille_dots_23567 = 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */,
-// braille_dots_123567 = 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */,
-// braille_dots_4567 = 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */,
-// braille_dots_14567 = 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */,
-// braille_dots_24567 = 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */,
-// braille_dots_124567 = 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */,
-// braille_dots_34567 = 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */,
-// braille_dots_134567 = 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */,
-// braille_dots_234567 = 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */,
-// braille_dots_1234567 = 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */,
-// braille_dots_8 = 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */,
-// braille_dots_18 = 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */,
-// braille_dots_28 = 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */,
-// braille_dots_128 = 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */,
-// braille_dots_38 = 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */,
-// braille_dots_138 = 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */,
-// braille_dots_238 = 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */,
-// braille_dots_1238 = 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */,
-// braille_dots_48 = 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */,
-// braille_dots_148 = 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */,
-// braille_dots_248 = 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */,
-// braille_dots_1248 = 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */,
-// braille_dots_348 = 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */,
-// braille_dots_1348 = 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */,
-// braille_dots_2348 = 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */,
-// braille_dots_12348 = 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */,
-// braille_dots_58 = 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */,
-// braille_dots_158 = 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */,
-// braille_dots_258 = 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */,
-// braille_dots_1258 = 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */,
-// braille_dots_358 = 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */,
-// braille_dots_1358 = 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */,
-// braille_dots_2358 = 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */,
-// braille_dots_12358 = 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */,
-// braille_dots_458 = 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */,
-// braille_dots_1458 = 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */,
-// braille_dots_2458 = 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */,
-// braille_dots_12458 = 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */,
-// braille_dots_3458 = 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */,
-// braille_dots_13458 = 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */,
-// braille_dots_23458 = 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */,
-// braille_dots_123458 = 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */,
-// braille_dots_68 = 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */,
-// braille_dots_168 = 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */,
-// braille_dots_268 = 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */,
-// braille_dots_1268 = 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */,
-// braille_dots_368 = 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */,
-// braille_dots_1368 = 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */,
-// braille_dots_2368 = 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */,
-// braille_dots_12368 = 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */,
-// braille_dots_468 = 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */,
-// braille_dots_1468 = 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */,
-// braille_dots_2468 = 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */,
-// braille_dots_12468 = 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */,
-// braille_dots_3468 = 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */,
-// braille_dots_13468 = 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */,
-// braille_dots_23468 = 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */,
-// braille_dots_123468 = 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */,
-// braille_dots_568 = 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */,
-// braille_dots_1568 = 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */,
-// braille_dots_2568 = 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */,
-// braille_dots_12568 = 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */,
-// braille_dots_3568 = 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */,
-// braille_dots_13568 = 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */,
-// braille_dots_23568 = 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */,
-// braille_dots_123568 = 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */,
-// braille_dots_4568 = 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */,
-// braille_dots_14568 = 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */,
-// braille_dots_24568 = 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */,
-// braille_dots_124568 = 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */,
-// braille_dots_34568 = 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */,
-// braille_dots_134568 = 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */,
-// braille_dots_234568 = 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */,
-// braille_dots_1234568 = 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */,
-// braille_dots_78 = 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */,
-// braille_dots_178 = 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */,
-// braille_dots_278 = 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */,
-// braille_dots_1278 = 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */,
-// braille_dots_378 = 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */,
-// braille_dots_1378 = 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */,
-// braille_dots_2378 = 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */,
-// braille_dots_12378 = 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */,
-// braille_dots_478 = 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */,
-// braille_dots_1478 = 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */,
-// braille_dots_2478 = 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */,
-// braille_dots_12478 = 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */,
-// braille_dots_3478 = 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */,
-// braille_dots_13478 = 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */,
-// braille_dots_23478 = 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */,
-// braille_dots_123478 = 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */,
-// braille_dots_578 = 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */,
-// braille_dots_1578 = 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */,
-// braille_dots_2578 = 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */,
-// braille_dots_12578 = 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */,
-// braille_dots_3578 = 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */,
-// braille_dots_13578 = 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */,
-// braille_dots_23578 = 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */,
-// braille_dots_123578 = 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */,
-// braille_dots_4578 = 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */,
-// braille_dots_14578 = 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */,
-// braille_dots_24578 = 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */,
-// braille_dots_124578 = 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */,
-// braille_dots_34578 = 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */,
-// braille_dots_134578 = 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */,
-// braille_dots_234578 = 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */,
-// braille_dots_1234578 = 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */,
-// braille_dots_678 = 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */,
-// braille_dots_1678 = 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */,
-// braille_dots_2678 = 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */,
-// braille_dots_12678 = 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */,
-// braille_dots_3678 = 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */,
-// braille_dots_13678 = 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */,
-// braille_dots_23678 = 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */,
-// braille_dots_123678 = 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */,
-// braille_dots_4678 = 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */,
-// braille_dots_14678 = 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */,
-// braille_dots_24678 = 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */,
-// braille_dots_124678 = 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */,
-// braille_dots_34678 = 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */,
-// braille_dots_134678 = 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */,
-// braille_dots_234678 = 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */,
-// braille_dots_1234678 = 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */,
-// braille_dots_5678 = 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */,
-// braille_dots_15678 = 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */,
-// braille_dots_25678 = 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */,
-// braille_dots_125678 = 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */,
-// braille_dots_35678 = 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */,
-// braille_dots_135678 = 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */,
-// braille_dots_235678 = 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */,
-// braille_dots_1235678 = 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */,
-// braille_dots_45678 = 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */,
-// braille_dots_145678 = 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */,
-// braille_dots_245678 = 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */,
-// braille_dots_1245678 = 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */,
-// braille_dots_345678 = 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */,
-// braille_dots_1345678 = 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */,
-// braille_dots_2345678 = 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */,
-// braille_dots_12345678 = 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */,
-// Sinh_ng = 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */,
-// Sinh_h2 = 0x1000d83 /* U+0D83 SINHALA VISARGAYA */,
-// Sinh_a = 0x1000d85 /* U+0D85 SINHALA AYANNA */,
-// Sinh_aa = 0x1000d86 /* U+0D86 SINHALA AAYANNA */,
-// Sinh_ae = 0x1000d87 /* U+0D87 SINHALA AEYANNA */,
-// Sinh_aee = 0x1000d88 /* U+0D88 SINHALA AEEYANNA */,
-// Sinh_i = 0x1000d89 /* U+0D89 SINHALA IYANNA */,
-// Sinh_ii = 0x1000d8a /* U+0D8A SINHALA IIYANNA */,
-// Sinh_u = 0x1000d8b /* U+0D8B SINHALA UYANNA */,
-// Sinh_uu = 0x1000d8c /* U+0D8C SINHALA UUYANNA */,
-// Sinh_ri = 0x1000d8d /* U+0D8D SINHALA IRUYANNA */,
-// Sinh_rii = 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */,
-// Sinh_lu = 0x1000d8f /* U+0D8F SINHALA ILUYANNA */,
-// Sinh_luu = 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */,
-// Sinh_e = 0x1000d91 /* U+0D91 SINHALA EYANNA */,
-// Sinh_ee = 0x1000d92 /* U+0D92 SINHALA EEYANNA */,
-// Sinh_ai = 0x1000d93 /* U+0D93 SINHALA AIYANNA */,
-// Sinh_o = 0x1000d94 /* U+0D94 SINHALA OYANNA */,
-// Sinh_oo = 0x1000d95 /* U+0D95 SINHALA OOYANNA */,
-// Sinh_au = 0x1000d96 /* U+0D96 SINHALA AUYANNA */,
-// Sinh_ka = 0x1000d9a /* U+0D9A SINHALA KAYANNA */,
-// Sinh_kha = 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */,
-// Sinh_ga = 0x1000d9c /* U+0D9C SINHALA GAYANNA */,
-// Sinh_gha = 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */,
-// Sinh_ng2 = 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */,
-// Sinh_nga = 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */,
-// Sinh_ca = 0x1000da0 /* U+0DA0 SINHALA CAYANNA */,
-// Sinh_cha = 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */,
-// Sinh_ja = 0x1000da2 /* U+0DA2 SINHALA JAYANNA */,
-// Sinh_jha = 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */,
-// Sinh_nya = 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */,
-// Sinh_jnya = 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */,
-// Sinh_nja = 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */,
-// Sinh_tta = 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */,
-// Sinh_ttha = 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */,
-// Sinh_dda = 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */,
-// Sinh_ddha = 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */,
-// Sinh_nna = 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */,
-// Sinh_ndda = 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */,
-// Sinh_tha = 0x1000dad /* U+0DAD SINHALA TAYANNA */,
-// Sinh_thha = 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */,
-// Sinh_dha = 0x1000daf /* U+0DAF SINHALA DAYANNA */,
-// Sinh_dhha = 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */,
-// Sinh_na = 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */,
-// Sinh_ndha = 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */,
-// Sinh_pa = 0x1000db4 /* U+0DB4 SINHALA PAYANNA */,
-// Sinh_pha = 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */,
-// Sinh_ba = 0x1000db6 /* U+0DB6 SINHALA BAYANNA */,
-// Sinh_bha = 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */,
-// Sinh_ma = 0x1000db8 /* U+0DB8 SINHALA MAYANNA */,
-// Sinh_mba = 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */,
-// Sinh_ya = 0x1000dba /* U+0DBA SINHALA YAYANNA */,
-// Sinh_ra = 0x1000dbb /* U+0DBB SINHALA RAYANNA */,
-// Sinh_la = 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */,
-// Sinh_va = 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */,
-// Sinh_sha = 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */,
-// Sinh_ssha = 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */,
-// Sinh_sa = 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */,
-// Sinh_ha = 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */,
-// Sinh_lla = 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */,
-// Sinh_fa = 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */,
-// Sinh_al = 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */,
-// Sinh_aa2 = 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */,
-// Sinh_ae2 = 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */,
-// Sinh_aee2 = 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */,
-// Sinh_i2 = 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */,
-// Sinh_ii2 = 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */,
-// Sinh_u2 = 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */,
-// Sinh_uu2 = 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */,
-// Sinh_ru2 = 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */,
-// Sinh_e2 = 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */,
-// Sinh_ee2 = 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */,
-// Sinh_ai2 = 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */,
-// Sinh_o2 = 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/,
-// Sinh_oo2 = 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/,
-// Sinh_au2 = 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */,
-// Sinh_lu2 = 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */,
-// Sinh_ruu2 = 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */,
-// Sinh_luu2 = 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */,
-// Sinh_kunddaliya = 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */
-//}
diff --git a/src/ColorMC.Gui/Hook/X11Native.cs b/src/ColorMC.Gui/Hook/X11Native.cs
deleted file mode 100644
index f1611f29b..000000000
--- a/src/ColorMC.Gui/Hook/X11Native.cs
+++ /dev/null
@@ -1,388 +0,0 @@
-//using Avalonia.Input;
-//using Avalonia.Media.Imaging;
-//using ColorMC.Gui.Objs;
-//using SkiaSharp;
-//using System;
-//using System.Diagnostics;
-//using System.Runtime.InteropServices;
-//using X11;
-
-//namespace ColorMC.Gui.Utils.Hook;
-
-//public class X11Native : INative
-//{
-// public event Action? TitleChange;
-// public event Action? IsFocus;
-
-// private IntPtr target;
-// private IntPtr topTarget;
-// private IntPtr display;
-
-// public void AddHook(Process process, IntPtr handel)
-// {
-// target = handel;
-
-// var pd = process.StartInfo.Environment["DISPLAY"];
-
-// display = Xlib.XOpenDisplay(pd);
-// if (display == IntPtr.Zero)
-// {
-// throw new Exception("DISPLAY open fail");
-// }
-// }
-
-// public void AddHookTop(IntPtr top)
-// {
-// topTarget = top;
-// }
-
-
-// private bool GetWindow(out XWindowAttributes attributes)
-// {
-// return Xlib.XGetWindowAttributes(display, target, out attributes) != Status.Failure;
-// }
-
-// public void NoTranferTop()
-// {
-// if (GetWindow(out var attributes))
-// {
-// X11.XRectangle rect = new() { x = 0, y = 0, width = (short)attributes.width, height = (short)attributes.height };
-// X11.XShapeCombineRectangles(display, target, X11.ShapeKind.ShapeInput, 0, 0, ref rect, 1, X11.ShapeOp.ShapeSet, 0);
-// }
-// }
-
-
-// public void TransferTop()
-// {
-// if (GetWindow(out _))
-// {
-// X11.XRectangle rect = new() { x = 0, y = 0, width = 0, height = 0 };
-// X11.XShapeCombineRectangles(display, target, X11.ShapeKind.ShapeInput, 0, 0, ref rect, 1, X11.ShapeOp.ShapeSet, 0);
-// }
-// }
-
-
-// public void Close()
-// {
-// var wmDelete = Xlib.XInternAtom(display, "WM_DELETE_WINDOW", false);
-
-// XAnyEvent evt = new()
-// {
-// type = (int)Event.ClientMessage,
-// send_event = true,
-// display = display,
-// window = target,
-// serial = (ulong)wmDelete
-// };
-
-// unsafe
-// {
-// Xlib.XSendEvent(display, target, false, (long)EventMask.NoEventMask, new IntPtr(&evt));
-// }
-// Xlib.XFlush(display);
-// }
-
-// public void DestroyWindow()
-// {
-// Xlib.XDestroyWindow(display, target);
-// }
-
-// public Bitmap? GetIcon()
-// {
-// var atomNetWmIcon = Xlib.XInternAtom(display, "_NET_WM_ICON", false);
-
-// if (X11.XGetWindowProperty(display, target, atomNetWmIcon, 0, long.MaxValue, false, Atom.None,
-// out var actualType, out int actualFormat, out long nItems, out long bytesAfter, out IntPtr prop) == 0 && prop != IntPtr.Zero)
-// {
-// try
-// {
-// if (actualFormat == 32)
-// {
-// // The first two values are width and height
-// int width = Marshal.ReadInt32(prop);
-// int height = Marshal.ReadInt32(prop, 4);
-
-// // Prepare to read the ARGB values
-// var argbValues = new int[width * height];
-// Marshal.Copy(prop, argbValues, 2, argbValues.Length);
-
-// // Create SKBitmap from the ARGB values
-// var info = new SKImageInfo(width, height, SKColorType.Bgra8888);
-// var skBitmap = new SKBitmap(info);
-// unsafe
-// {
-// fixed (void* ptr = argbValues)
-// {
-// skBitmap.SetPixels(new IntPtr(ptr));
-// }
-// }
-// // Convert SKBitmap to Avalonia Bitmap
-// using var image = SKImage.FromBitmap(skBitmap);
-// using var data = image.Encode(SKEncodedImageFormat.Png, 100);
-// var stream = data.AsStream();
-// var bitmap = new Bitmap(stream);
-// return bitmap;
-// }
-// }
-// finally
-// {
-// Xlib.XFree(prop);
-// }
-// }
-
-// return null;
-// }
-
-// public bool GetMouseMode()
-// {
-// if (Xlib.XQueryPointer(display, target, out IntPtr root_return, out IntPtr child_return,
-// out int root_x, out int root_y, out int win_x, out int win_y, out uint mask_return))
-// {
-// return true;
-// }
-// else
-// {
-// return false;
-// }
-
-// }
-
-// public bool GetWindowSize(out int width, out int height)
-// {
-// if (GetWindow(out var attributes))
-// {
-// width = (int)attributes.width;
-// height = (int)attributes.height;
-// return true;
-// }
-// else
-// {
-// width = 0;
-// height = 0;
-// return false;
-// }
-// }
-
-// public string GetWindowTitle()
-// {
-// Xlib.XFetchName(display, target, out var window_name);
-
-// return window_name ?? "";
-// }
-
-// public void NoBorder()
-// {
-// // _NET_WM_WINDOW_TYPE
-// var xaPropType = Xlib.XInternAtom(display, "_NET_WM_WINDOW_TYPE", false);
-// // _NET_WM_WINDOW_TYPE_DIALOG
-// var xaDialogAtom = Xlib.XInternAtom(display, "_NET_WM_WINDOW_TYPE_DIALOG", false);
-
-// IntPtr data = (IntPtr)xaDialogAtom;
-// Xlib.XChangeProperty(display, target, xaPropType, xaPropType, 32, X11.PropModeReplace, data, 1);
-// }
-
-// private void SendMouse(byte key1, bool down)
-// {
-// var xKeyEvent = new XKeyEvent
-// {
-// type = down ? (int)Event.ButtonPress : (int)Event.ButtonRelease,
-// serial = IntPtr.Zero,
-// send_event = true,
-// display = display,
-// window = target,
-// root = Xlib.XRootWindow(display, 0),
-// subwindow = IntPtr.Zero,
-// time = 0,
-// x = 0,
-// y = 0,
-// x_root = 0,
-// y_root = 0,
-// state = 0,
-// keycode = key1,
-// same_screen = true
-// };
-
-// unsafe
-// {
-// Xlib.XSendEvent(display, target, true, (long)(down ? EventMask.ButtonPressMask : EventMask.ButtonReleaseMask), new IntPtr(&xKeyEvent));
-// }
-// Xlib.XFlush(display);
-// }
-
-// private void SendKey(byte key1, bool down)
-// {
-// var xKeyEvent = new XKeyEvent
-// {
-// type = down ? (int)Event.KeyPress : (int)Event.KeyRelease,
-// serial = IntPtr.Zero,
-// send_event = true,
-// display = display,
-// window = target,
-// root = Xlib.XRootWindow(display, 0),
-// subwindow = IntPtr.Zero,
-// time = 0,
-// x = 0,
-// y = 0,
-// x_root = 0,
-// y_root = 0,
-// state = 0,
-// keycode = key1,
-// same_screen = true
-// };
-
-// unsafe
-// {
-// Xlib.XSendEvent(display, target, true, (long)(down ? EventMask.KeyPressMask : EventMask.KeyReleaseMask), new IntPtr(&xKeyEvent));
-// }
-// Xlib.XFlush(display);
-// }
-
-// public void SendKey(InputKeyObj key, bool down, bool message)
-// {
-// if (InputControlUtils.IsEditMode)
-// {
-// return;
-// }
-
-// X11Key key1 = 0;
-// if (key.KeyModifiers == KeyModifiers.Alt)
-// {
-// X11KeyTransform.X11KeyFromKey(Key.LeftAlt);
-// }
-// else if (key.KeyModifiers == KeyModifiers.Control)
-// {
-// key1 = X11KeyTransform.X11KeyFromKey(Key.LeftCtrl);
-// }
-// else if (key.KeyModifiers == KeyModifiers.Shift)
-// {
-// key1 = X11KeyTransform.X11KeyFromKey(Key.LeftShift);
-// }
-
-// if (key1 != 0)
-// {
-// var keycode = Xlib.XKeysymToKeycode(display, (KeySym)key1);
-// SendKey((byte)keycode, down);
-// }
-
-// if (key.MouseButton != MouseButton.None)
-// {
-// var key2 = key.MouseButton switch
-// {
-// MouseButton.Left => Button.LEFT,
-// MouseButton.Right => Button.RIGHT,
-// MouseButton.Middle => Button.MIDDLE,
-// MouseButton.XButton1 => Button.X1,
-// MouseButton.XButton2 => Button.X2,
-// _ => throw new Exception()
-// };
-// SendMouse((byte)key2, down);
-// }
-// else
-// {
-// key1 = X11KeyTransform.X11KeyFromKey(key.Key);
-
-// SendKey((byte)key1, down);
-// }
-// }
-
-// public void SendMouse(double cursorX, double cursorY, bool message)
-// {
-// int x = (int)cursorX;
-// int y = (int)cursorY;
-// XMotionEvent motionEvent = new()
-// {
-// type = 6, // MotionNotify
-// serial = 0,
-// send_event = true,
-// display = display,
-// window = target,
-// root = Xlib.XRootWindow(display, 0),
-// subwindow = 0,
-// time = 0, // You can also use Xlib's CurrentTime
-// x = x,
-// y = y,
-// x_root = x,
-// y_root = y,
-// state = 0,
-// is_hint = 0,
-// same_screen = true,
-// };
-
-// unsafe
-// {
-// Xlib.XSendEvent(display, target, true, (long)EventMask.PointerMotionMask, new IntPtr(&motionEvent));
-// }
-// }
-
-// public void SendScoll(bool up)
-// {
-// SendMouse((byte)(up ? Button.FOUR : Button.FIVE), true);
-// SendMouse((byte)(up ? Button.FOUR : Button.FIVE), false);
-// }
-
-// private void ChangeState(IntPtr stateAtom, bool set)
-// {
-// var wmState = Xlib.XInternAtom(display, "_NET_WM_STATE", false);
-
-// var xev = new XWindowStateEvent
-// {
-// type = (int)Event.ClientMessage,
-// serial = IntPtr.Zero,
-// send_event = true,
-// display = display,
-// window = target,
-// message_type = (nint)wmState,
-// format = 32,
-// data1 = (set ? 1 : 0), // _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE
-// data2 = stateAtom,
-// data3 = IntPtr.Zero,
-// data4 = IntPtr.Zero,
-// data5 = IntPtr.Zero
-// };
-
-// unsafe
-// {
-// Xlib.XSendEvent(display, target, false, (long)(EventMask.SubstructureRedirectMask | EventMask.SubstructureNotifyMask), new IntPtr(&xev));
-// }
-// }
-
-// public void SetWindowState(Avalonia.Controls.WindowState state)
-// {
-// var stateAtom = (IntPtr)Xlib.XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_HORZ", false);
-// var stateAtom1 = (IntPtr)Xlib.XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_VERT", false);
-// var stateAtom2 = (IntPtr)Xlib.XInternAtom(display, "_NET_WM_STATE_HIDDEN", false);
-
-// if (state == Avalonia.Controls.WindowState.Normal)
-// {
-// ChangeState(stateAtom, false);
-// ChangeState(stateAtom1, false);
-// ChangeState(stateAtom2, false);
-// }
-// else if (state == Avalonia.Controls.WindowState.Minimized)
-// {
-// ChangeState(stateAtom, false);
-// ChangeState(stateAtom1, false);
-
-// ChangeState(stateAtom2, true);
-// }
-// else if (state == Avalonia.Controls.WindowState.Maximized)
-// {
-// ChangeState(stateAtom2, false);
-
-// ChangeState(stateAtom, true);
-// ChangeState(stateAtom1, true);
-// }
-
-// Xlib.XFlush(display);
-// }
-
-// public void Stop()
-// {
-// if (display != IntPtr.Zero)
-// {
-// Xlib.XCloseDisplay(display);
-// display = IntPtr.Zero;
-// }
-// }
-//}
-
diff --git a/src/ColorMC.Gui/MusicPlayer/Decoder/Flac/EmptyBlock.cs b/src/ColorMC.Gui/MusicPlayer/Decoder/Flac/EmptyBlock.cs
index 29802df4f..e389b81af 100644
--- a/src/ColorMC.Gui/MusicPlayer/Decoder/Flac/EmptyBlock.cs
+++ b/src/ColorMC.Gui/MusicPlayer/Decoder/Flac/EmptyBlock.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ColorMC.Gui.MusicPlayer.Decoder.Flac;
+namespace ColorMC.Gui.MusicPlayer.Decoder.Flac;
public class EmptyBlock(bool last, BlockType type, int size) : FlacInfoBlock(last, type, size)
{
diff --git a/src/ColorMC.Gui/Objs/GuiConfigObj.cs b/src/ColorMC.Gui/Objs/GuiConfigObj.cs
index d7b99b3cb..c39e7004f 100644
--- a/src/ColorMC.Gui/Objs/GuiConfigObj.cs
+++ b/src/ColorMC.Gui/Objs/GuiConfigObj.cs
@@ -3,6 +3,25 @@
namespace ColorMC.Gui.Objs;
+///
+/// 启动前检测
+///
+public record LaunchCheckSetting
+{
+ ///
+ /// 检测账户锁定
+ ///
+ public bool CheckUser { get; set; }
+ ///
+ /// 检测加载器
+ ///
+ public bool CheckLoader { get; set; }
+ ///
+ /// 检测内存大小
+ ///
+ public bool CheckMemory { get; set; }
+}
+
///
/// 样式设置
///
@@ -356,6 +375,10 @@ public record GuiConfigObj
///
public InputSetting Input { get; set; }
///
+ /// 启动前检测
+ ///
+ public LaunchCheckSetting LaunchCheck { get; set; }
+ ///
/// 服务器云同步密钥
///
public string ServerKey { get; set; }
diff --git a/src/ColorMC.Gui/Resource/Language/gui_zh-cn.json b/src/ColorMC.Gui/Resource/Language/gui_zh-cn.json
index 4f40291c9..d9120a1e1 100644
--- a/src/ColorMC.Gui/Resource/Language/gui_zh-cn.json
+++ b/src/ColorMC.Gui/Resource/Language/gui_zh-cn.json
@@ -55,6 +55,7 @@
"MainWindow.Flyouts.Text21": "启动实例",
"MainWindow.Flyouts.Text22": "选中分组实例",
"MainWindow.Flyouts.Text23": "导出启动参数",
+ "MainWindow.Flyouts.Text24": "启动参数",
"MainWindow.Info2": "已启动",
"MainWindow.Info3": "正在启动游戏",
"MainWindow.Info8": "正在登录账户",
@@ -303,8 +304,12 @@
"SettingWindow.Tab4.Text21": "执行的程序命令",
"SettingWindow.Tab4.Text22": "校验完整性",
"SettingWindow.Tab4.Text23": "启用安全log4j",
- "SettingWindow.Tab4.Text24": "游戏文件检查",
+ "SettingWindow.Tab4.Text24": "游戏启动前检查",
"SettingWindow.Tab4.Text25": "同时启动游戏",
+ "SettingWindow.Tab4.Text26": "检测账户冲突",
+ "SettingWindow.Tab4.Text27": "检测模组加载器",
+ "SettingWindow.Tab4.Text28": "检测内存参数",
+ "SettingWindow.Tab4.Text29": "当前系统内存:{0} MB,剩余内存{1} MB",
"SettingWindow.Tab5.Text1": "添加Java路径",
"SettingWindow.Tab5.Text2": "Java名字",
"SettingWindow.Tab5.Text3": "Java路径",
@@ -1211,11 +1216,12 @@
"GameBinding.Info15": "无法识别的模组",
"GameBinding.Info16": "正在下载服务器实例文件",
"GameBinding.Info17": "损坏的结构文件",
- "GameBinding.Info18": "是否不再提醒账户冲突",
+ "GameBinding.Info18": "是否不再检测账户冲突",
"GameBinding.Info19": "游戏实例 {0} 添加了Mod,但是没有使用Mod加载器,是否要继续启动",
"GameBinding.Info20": "你正在启动大型整合包,但是内存分配过小,\n可能会导致性能问题(卡顿),是否继续启动",
"GameBinding.Info21": "调整内存",
- "GameBinding.Info22": "是否不再提示内存过小问题",
+ "GameBinding.Info22": "是否不再检测内存过小",
+ "GameBinding.Info23": "是否不再检测模组加载器",
"GameBinding.Error1": "账户已被占用,是否继续使用这个账户",
"GameBinding.Error2": "设置图标错误",
"GameBinding.Error3": "没有选择账户",
diff --git a/src/ColorMC.Gui/UI/Controls/GameEdit/GameEditControl.axaml.cs b/src/ColorMC.Gui/UI/Controls/GameEdit/GameEditControl.axaml.cs
index 4790e3a02..a4da423d7 100644
--- a/src/ColorMC.Gui/UI/Controls/GameEdit/GameEditControl.axaml.cs
+++ b/src/ColorMC.Gui/UI/Controls/GameEdit/GameEditControl.axaml.cs
@@ -74,6 +74,11 @@ public override void Closed()
WindowManager.GameEditWindows.Remove(_obj.UUID);
}
+ public override void Opened()
+ {
+ (DataContext as GameEditModel)?.Load();
+ }
+
public override TopModel GenModel(BaseModel model)
{
return new GameEditModel(model, _obj);
diff --git a/src/ColorMC.Gui/UI/Controls/GameEdit/Tab2Control.axaml b/src/ColorMC.Gui/UI/Controls/GameEdit/Tab2Control.axaml
index 6b1cf0b9e..1c88f7f6a 100644
--- a/src/ColorMC.Gui/UI/Controls/GameEdit/Tab2Control.axaml
+++ b/src/ColorMC.Gui/UI/Controls/GameEdit/Tab2Control.axaml
@@ -115,6 +115,28 @@
Stroke="{setting:Theme FontColor}" />
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
diff --git a/src/ColorMC.Gui/UI/Controls/GameLog/GameLogControl.axaml.cs b/src/ColorMC.Gui/UI/Controls/GameLog/GameLogControl.axaml.cs
index 5dc36c8bf..401cb37f5 100644
--- a/src/ColorMC.Gui/UI/Controls/GameLog/GameLogControl.axaml.cs
+++ b/src/ColorMC.Gui/UI/Controls/GameLog/GameLogControl.axaml.cs
@@ -1,4 +1,3 @@
-using System;
using System.ComponentModel;
using Avalonia.Input;
using Avalonia.Media;
diff --git a/src/ColorMC.Gui/UI/Controls/Setting/SettingControl.cs b/src/ColorMC.Gui/UI/Controls/Setting/SettingControl.cs
index 714b4b98e..2cb6dfed8 100644
--- a/src/ColorMC.Gui/UI/Controls/Setting/SettingControl.cs
+++ b/src/ColorMC.Gui/UI/Controls/Setting/SettingControl.cs
@@ -79,7 +79,7 @@ public void GoTo(SettingType type)
public override void Opened()
{
- (DataContext as SettingModel)!.LoadUISetting();
+ (DataContext as SettingModel)?.Load();
}
public override TopModel GenModel(BaseModel model)
diff --git a/src/ColorMC.Gui/UI/Controls/Setting/Tab4Control.axaml b/src/ColorMC.Gui/UI/Controls/Setting/Tab4Control.axaml
index a74f8375c..305e9d761 100644
--- a/src/ColorMC.Gui/UI/Controls/Setting/Tab4Control.axaml
+++ b/src/ColorMC.Gui/UI/Controls/Setting/Tab4Control.axaml
@@ -108,6 +108,20 @@
+
+
+
+
+
+
diff --git a/src/ColorMC.Gui/UI/Converters/MinModeToPanelTemplateConverter.cs b/src/ColorMC.Gui/UI/Converters/MinModeToPanelTemplateConverter.cs
index 6af645981..e8a112e7a 100644
--- a/src/ColorMC.Gui/UI/Converters/MinModeToPanelTemplateConverter.cs
+++ b/src/ColorMC.Gui/UI/Converters/MinModeToPanelTemplateConverter.cs
@@ -1,9 +1,5 @@
using System;
-using System.Collections.Generic;
using System.Globalization;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
diff --git a/src/ColorMC.Gui/UI/Flyouts/MainFlyout.cs b/src/ColorMC.Gui/UI/Flyouts/MainFlyout.cs
index d367af4ed..0a4395ad2 100644
--- a/src/ColorMC.Gui/UI/Flyouts/MainFlyout.cs
+++ b/src/ColorMC.Gui/UI/Flyouts/MainFlyout.cs
@@ -30,6 +30,10 @@ public MainFlyout(Control con, GameItemModel obj)
{
WindowManager.ShowGameEdit(obj.Obj);
}),
+ new FlyoutMenuObj(App.Lang("MainWindow.Flyouts.Text24"), true, ()=>
+ {
+ WindowManager.ShowGameEdit(obj.Obj, GameEditWindowType.Arg);
+ }),
new FlyoutMenuObj(App.Lang("MainWindow.Flyouts.Text4"), true, ()=>
{
WindowManager.ShowGameEdit(obj.Obj, GameEditWindowType.Mod);
diff --git a/src/ColorMC.Gui/UI/Model/Add/AddControlModel.cs b/src/ColorMC.Gui/UI/Model/Add/AddControlModel.cs
index ea3682438..8b5d8e0fe 100644
--- a/src/ColorMC.Gui/UI/Model/Add/AddControlModel.cs
+++ b/src/ColorMC.Gui/UI/Model/Add/AddControlModel.cs
@@ -5,9 +5,9 @@
using System.Threading;
using System.Threading.Tasks;
using AvaloniaEdit.Utils;
+using ColorMC.Core.Game;
using ColorMC.Core.Helpers;
using ColorMC.Core.Objs;
-using ColorMC.Core.Game;
using ColorMC.Core.Objs.CurseForge;
using ColorMC.Core.Objs.McMod;
using ColorMC.Core.Objs.Modrinth;
@@ -998,7 +998,7 @@ public async void Install(FileVersionItemModel data)
}
ModInfoObj? mod = null;
- if (_now == FileType.Mod && Obj.Mods.TryGetValue(data.ID, out mod))
+ if (_now == FileType.Mod && Obj.Mods.TryGetValue(data.ID, out mod))
{
var res1 = await Model.ShowWait(App.Lang("AddWindow.Info15"));
if (!res1)
diff --git a/src/ColorMC.Gui/UI/Model/GameEdit/GameEditModel.cs b/src/ColorMC.Gui/UI/Model/GameEdit/GameEditModel.cs
index e6b83fb59..0d5ce2029 100644
--- a/src/ColorMC.Gui/UI/Model/GameEdit/GameEditModel.cs
+++ b/src/ColorMC.Gui/UI/Model/GameEdit/GameEditModel.cs
@@ -1,5 +1,8 @@
-using ColorMC.Core.Objs;
+using System.Timers;
+using Avalonia.Threading;
+using ColorMC.Core.Objs;
using ColorMC.Core.Utils;
+using ColorMC.Gui.Hook;
using ColorMC.Gui.UI.Model.Items;
using ColorMC.Gui.Utils;
@@ -13,6 +16,8 @@ public partial class GameEditModel : MenuModel
private readonly string _useName;
+ private readonly Timer _timer;
+
public GameEditModel(BaseModel model, GameSettingObj obj) : base(model)
{
_useName = ToString() + ":" + obj.UUID;
@@ -23,6 +28,10 @@ public GameEditModel(BaseModel model, GameSettingObj obj) : base(model)
Phone = true;
}
+ _timer = new Timer(1000);
+ _timer.Elapsed += Timer_Elapsed;
+ _timer.AutoReset = true;
+
_setting = GameGuiSetting.ReadConfig(_obj);
_displayModText = _setting.Mod.EnableText;
_displayModId = _setting.Mod.EnableModId;
@@ -308,6 +317,11 @@ public GameEditModel(BaseModel model, GameSettingObj obj) : base(model)
]);
}
+ public void Load()
+ {
+ _timer.Start();
+ }
+
private void PackState(CoreRunState state)
{
if (state == CoreRunState.Read)
@@ -333,8 +347,18 @@ private void PackState(CoreRunState state)
}
}
+ private void Timer_Elapsed(object? sender, ElapsedEventArgs e)
+ {
+ Dispatcher.UIThread.Post(() =>
+ {
+ Memory = string.Format(App.Lang("SettingWindow.Tab4.Text29"), HookUtils.GetMemorySize(), HookUtils.GetFreeSize());
+ });
+ }
+
public override void Close()
{
+ _timer.Stop();
+ _timer.Dispose();
_configLoad = true;
_gameLoad = true;
GameVersionList.Clear();
diff --git a/src/ColorMC.Gui/UI/Model/GameEdit/GameEditTab2Model.cs b/src/ColorMC.Gui/UI/Model/GameEdit/GameEditTab2Model.cs
index d5b2d6c8d..41d29b43a 100644
--- a/src/ColorMC.Gui/UI/Model/GameEdit/GameEditTab2Model.cs
+++ b/src/ColorMC.Gui/UI/Model/GameEdit/GameEditTab2Model.cs
@@ -88,6 +88,9 @@ public partial class GameEditModel
[ObservableProperty]
private bool _preRunSame;
+ [ObservableProperty]
+ private string _memory;
+
private bool _configLoad;
partial void OnCycTitleChanged(bool value)
diff --git a/src/ColorMC.Gui/UI/Model/GameLog/GameLogTabModel.cs b/src/ColorMC.Gui/UI/Model/GameLog/GameLogTabModel.cs
index f76546b7a..4a359d6a4 100644
--- a/src/ColorMC.Gui/UI/Model/GameLog/GameLogTabModel.cs
+++ b/src/ColorMC.Gui/UI/Model/GameLog/GameLogTabModel.cs
@@ -211,7 +211,7 @@ public async Task Push()
{
return;
}
- Model.ShowReadInfoOne(string.Format(App.Lang("GameLogWindow.Info5"), url), App.Lang("GameLogWindow.Info8"), async () =>
+ Model.ShowReadInfoOne(string.Format(App.Lang("GameLogWindow.Info5"), url), App.Lang("GameLogWindow.Info8"), async () =>
{
await BaseBinding.CopyTextClipboard(top, url);
Model.Notify(App.Lang("GameLogWindow.Info7"));
diff --git a/src/ColorMC.Gui/UI/Model/Items/DownloadModModel.cs b/src/ColorMC.Gui/UI/Model/Items/DownloadModModel.cs
index 35ce0e11a..a198a8253 100644
--- a/src/ColorMC.Gui/UI/Model/Items/DownloadModModel.cs
+++ b/src/ColorMC.Gui/UI/Model/Items/DownloadModModel.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using ColorMC.Core.Objs;
using ColorMC.Core.Objs.Minecraft;
using ColorMC.Gui.Objs;
using CommunityToolkit.Mvvm.ComponentModel;
diff --git a/src/ColorMC.Gui/UI/Model/Setting/SettingModel.cs b/src/ColorMC.Gui/UI/Model/Setting/SettingModel.cs
index adfb3e885..1fff5397a 100644
--- a/src/ColorMC.Gui/UI/Model/Setting/SettingModel.cs
+++ b/src/ColorMC.Gui/UI/Model/Setting/SettingModel.cs
@@ -1,5 +1,8 @@
-using ColorMC.Core.Objs;
+using System.Timers;
+using Avalonia.Threading;
+using ColorMC.Core.Objs;
using ColorMC.Core.Utils;
+using ColorMC.Gui.Hook;
using ColorMC.Gui.UI.Model.Items;
using ColorMC.Gui.Utils;
@@ -12,6 +15,8 @@ public partial class SettingModel : MenuModel
private readonly string _name;
+ private readonly Timer _timer;
+
public SettingModel(BaseModel model) : base(model)
{
_name = ToString() ?? "SettingModel";
@@ -26,6 +31,10 @@ public SettingModel(BaseModel model) : base(model)
IsInputEnable = true;
}
+ _timer = new Timer(1000);
+ _timer.Elapsed += Timer_Elapsed;
+ _timer.AutoReset = true;
+
if (!SdlUtils.SdlInit)
{
InputInit = false;
@@ -175,8 +184,24 @@ public SettingModel(BaseModel model) : base(model)
]);
}
+ public void Load()
+ {
+ _timer.Start();
+ LoadUISetting();
+ }
+
+ private void Timer_Elapsed(object? sender, ElapsedEventArgs e)
+ {
+ Dispatcher.UIThread.Post(() =>
+ {
+ Memory = string.Format(App.Lang("SettingWindow.Tab4.Text29"), HookUtils.GetMemorySize(), HookUtils.GetFreeSize());
+ });
+ }
+
public override void Close()
{
+ _timer.Stop();
+ _timer.Dispose();
FontList.Clear();
JavaList.Clear();
_uuids.Clear();
diff --git a/src/ColorMC.Gui/UI/Model/Setting/SettingTab4Model.cs b/src/ColorMC.Gui/UI/Model/Setting/SettingTab4Model.cs
index 1256f1641..fa6b92291 100644
--- a/src/ColorMC.Gui/UI/Model/Setting/SettingTab4Model.cs
+++ b/src/ColorMC.Gui/UI/Model/Setting/SettingTab4Model.cs
@@ -55,6 +55,12 @@ public partial class SettingModel
private bool _customGc;
[ObservableProperty]
private bool _preRunSame;
+ [ObservableProperty]
+ private bool _checkUser;
+ [ObservableProperty]
+ private bool _checkLoader;
+ [ObservableProperty]
+ private bool _checkMemory;
[ObservableProperty]
private GCType _gC;
@@ -68,8 +74,26 @@ public partial class SettingModel
[ObservableProperty]
private uint? _height;
+ [ObservableProperty]
+ private string _memory;
+
private bool _argLoad = true;
+ partial void OnCheckUserChanged(bool value)
+ {
+ SetCheck();
+ }
+
+ partial void OnCheckLoaderChanged(bool value)
+ {
+ SetCheck();
+ }
+
+ partial void OnCheckMemoryChanged(bool value)
+ {
+ SetCheck();
+ }
+
partial void OnSafeLog4jChanged(bool value)
{
if (_argLoad)
@@ -233,6 +257,7 @@ public void LoadArg()
CheckAssetsSha1 = con.GameCheck.CheckAssetsSha1;
CheckLibSha1 = con.GameCheck.CheckLibSha1;
CheckModSha1 = con.GameCheck.CheckModSha1;
+
PostRun = con.DefaultJvmArg.LaunchPost;
PreRun = con.DefaultJvmArg.LaunchPre;
SafeLog4j = con.SafeLog4j;
@@ -242,10 +267,22 @@ public void LoadArg()
if (config1 is { } con1)
{
CloseBefore = con1.CloseBeforeLaunch;
+
+ CheckUser = con1.LaunchCheck.CheckUser;
+ CheckLoader = con1.LaunchCheck.CheckLoader;
+ CheckMemory = con1.LaunchCheck.CheckMemory;
}
_argLoad = false;
}
+ private void SetCheck()
+ {
+ if (_argLoad)
+ return;
+
+ ConfigBinding.SetCheck(CheckUser, CheckLoader, CheckMemory);
+ }
+
private void SetMemory()
{
if (_argLoad)
diff --git a/src/ColorMC.Gui/UI/Model/TopModel.cs b/src/ColorMC.Gui/UI/Model/TopModel.cs
index 60b77eb2b..2210a5b87 100644
--- a/src/ColorMC.Gui/UI/Model/TopModel.cs
+++ b/src/ColorMC.Gui/UI/Model/TopModel.cs
@@ -19,8 +19,8 @@ partial void OnMinModeChanged(bool value)
}
protected virtual void MinModeChange()
- {
-
+ {
+
}
public virtual void WidthChange(int index, double width)
diff --git a/src/ColorMC.Gui/UIBinding/BaseBinding.cs b/src/ColorMC.Gui/UIBinding/BaseBinding.cs
index 9a6453b51..53a34ce15 100644
--- a/src/ColorMC.Gui/UIBinding/BaseBinding.cs
+++ b/src/ColorMC.Gui/UIBinding/BaseBinding.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
-using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Avalonia.Animation;
diff --git a/src/ColorMC.Gui/UIBinding/ConfigBinding.cs b/src/ColorMC.Gui/UIBinding/ConfigBinding.cs
index 388a32e4e..5d48d22c3 100644
--- a/src/ColorMC.Gui/UIBinding/ConfigBinding.cs
+++ b/src/ColorMC.Gui/UIBinding/ConfigBinding.cs
@@ -1022,4 +1022,14 @@ public static void SetCard(bool cardNews, bool cardLast, bool cardOnline)
GuiConfigUtils.Save();
WindowManager.MainWindow?.LoadDone();
}
+
+ public static void SetCheck(bool user, bool loader, bool memory)
+ {
+ GuiConfigUtils.Config.LaunchCheck ??= new();
+ GuiConfigUtils.Config.LaunchCheck.CheckUser = user;
+ GuiConfigUtils.Config.LaunchCheck.CheckLoader = loader;
+ GuiConfigUtils.Config.LaunchCheck.CheckMemory = memory;
+
+ GuiConfigUtils.Save();
+ }
}
diff --git a/src/ColorMC.Gui/UIBinding/GameBinding.cs b/src/ColorMC.Gui/UIBinding/GameBinding.cs
index 8b0aceab5..65dfdff39 100644
--- a/src/ColorMC.Gui/UIBinding/GameBinding.cs
+++ b/src/ColorMC.Gui/UIBinding/GameBinding.cs
@@ -58,8 +58,6 @@ public static class GameBinding
///
private static CancellationTokenSource s_launchCancel = new();
- private static bool s_notDisplayMem;
-
///
/// 获取游戏实例列表
///
@@ -501,45 +499,57 @@ public static async Task Launch(BaseModel model, GameSettingOb
var count = obj.ReadModFast();
- if (count > 0 && obj.Loader == Loaders.Normal)
+ if (count > 0)
{
- var res2 = await model.ShowWait(string.Format(App.Lang("GameBinding.Info19"), obj.Name));
- if (!res2)
+ if (GuiConfigUtils.Config.LaunchCheck.CheckLoader && obj.Loader == Loaders.Normal)
{
- return new() { };
+ var res2 = await model.ShowWait(string.Format(App.Lang("GameBinding.Info19"), obj.Name));
+ if (!res2)
+ {
+ return new() { };
+ }
+
+ res2 = await model.ShowWait(App.Lang("GameBinding.Info23"));
+ if (res2 == true)
+ {
+ GuiConfigUtils.Config.LaunchCheck.CheckLoader = false;
+ GuiConfigUtils.Save();
+ }
}
- }
- if (!s_notDisplayMem && count > 150)
- {
- var mem = obj.JvmArg?.MaxMemory ?? ConfigUtils.Config.DefaultJvmArg.MaxMemory;
- if (mem <= 4096)
+ if (GuiConfigUtils.Config.LaunchCheck.CheckMemory && obj.Loader != Loaders.Normal)
{
- bool launch = false;
- await model.ShowChoiseCancelWait(App.Lang("GameBinding.Info20"), App.Lang("GameBinding.Info21"), () =>
+ var mem = obj.JvmArg?.MaxMemory ?? ConfigUtils.Config.DefaultJvmArg.MaxMemory;
+ if ((mem <= 4096 && count > 150)
+ || (mem <= 8192 && count > 300))
{
- model.ShowClose();
- if (obj.JvmArg?.MaxMemory != null)
+ bool launch = false;
+ await model.ShowChoiseCancelWait(App.Lang("GameBinding.Info20"), App.Lang("GameBinding.Info21"), () =>
{
- WindowManager.ShowGameEdit(obj, GameEditWindowType.Arg);
- }
- else
+ model.ShowClose();
+ if (obj.JvmArg?.MaxMemory != null)
+ {
+ WindowManager.ShowGameEdit(obj, GameEditWindowType.Arg);
+ }
+ else
+ {
+ WindowManager.ShowSetting(SettingType.Arg);
+ }
+ }, (data) =>
+ {
+ launch = data;
+ });
+ if (!launch)
{
- WindowManager.ShowSetting(SettingType.Arg);
+ return new();
}
- }, (data) =>
- {
- launch = data;
- });
- if (!launch)
- {
- return new();
- }
- var res3 = await model.ShowWait(App.Lang("GameBinding.Info22"));
- if (res3 == true)
- {
- s_notDisplayMem = true;
+ var res3 = await model.ShowWait(App.Lang("GameBinding.Info22"));
+ if (res3 == true)
+ {
+ GuiConfigUtils.Config.LaunchCheck.CheckMemory = false;
+ GuiConfigUtils.Save();
+ }
}
}
}
@@ -2624,18 +2634,7 @@ private static void GameHandel(BaseModel model, GameSettingObj obj, DesktopGameH
try
{
var conf = obj.Window;
- if (SystemInfo.Os == OsType.Windows)
- {
- Win32Native.Win32.WaitWindowDisplay(pr);
- }
- else if (SystemInfo.Os == OsType.Linux)
- {
- X11Hook.WaitWindowDisplay(pr);
- }
- else if (SystemInfo.Os == OsType.MacOS)
- {
- return;
- }
+ HookUtils.WaitWindowDisplay(pr);
if (pr.HasExited)
{
@@ -2658,71 +2657,63 @@ private static void GameHandel(BaseModel model, GameSettingObj obj, DesktopGameH
}
}
- if (SystemInfo.Os == OsType.MacOS)
+ //修改窗口标题
+
+ if (SystemInfo.Os == OsType.MacOS
+ || string.IsNullOrWhiteSpace(conf?.GameTitle))
{
return;
}
- //修改窗口标题
- if (!string.IsNullOrWhiteSpace(conf?.GameTitle))
- {
- var ran = new Random();
- int i = 0;
- var list = new List();
- var list1 = conf.GameTitle.Split('\n');
-
- foreach (var item in list1)
- {
- var temp = item.Trim();
- if (string.IsNullOrWhiteSpace(temp))
- {
- continue;
- }
+ var ran = new Random();
+ int i = 0;
+ var list = new List();
+ var list1 = conf.GameTitle.Split('\n');
- list.Add(temp);
- }
- if (list.Count == 0)
+ foreach (var item in list1)
+ {
+ var temp = item.Trim();
+ if (string.IsNullOrWhiteSpace(temp))
{
- return;
+ continue;
}
- Thread.Sleep(1000);
+ list.Add(temp);
+ }
+ if (list.Count == 0)
+ {
+ return;
+ }
- do
- {
- string title1 = "";
- if (conf.RandomTitle)
- {
- title1 = list[ran.Next(list.Count)];
- }
- else
- {
- i++;
- if (i >= list.Count)
- {
- i = 0;
- }
- title1 = list[i];
- }
+ Thread.Sleep(1000);
- if (SystemInfo.Os == OsType.Windows)
- {
- Win32Native.Win32.SetTitle(pr, title1);
- }
- else if (SystemInfo.Os == OsType.Linux)
+ do
+ {
+ string title1 = "";
+ if (conf.RandomTitle)
+ {
+ title1 = list[ran.Next(list.Count)];
+ }
+ else
+ {
+ i++;
+ if (i >= list.Count)
{
- X11Hook.SetTitle(pr, title1);
+ i = 0;
}
+ title1 = list[i];
+ }
- if (!conf.CycTitle || conf.TitleDelay <= 0 || pr.HasExited)
- {
- break;
- }
+ HookUtils.SetTitle(pr, title1);
- Thread.Sleep(conf.TitleDelay);
+ if (!conf.CycTitle || conf.TitleDelay <= 0 || pr.HasExited)
+ {
+ break;
}
- while (!ColorMCGui.IsClose && !handel.IsExit);
+
+ Thread.Sleep(conf.TitleDelay);
}
+ while (!ColorMCGui.IsClose && !handel.IsExit);
}
catch
{
@@ -2757,7 +2748,7 @@ public static async void ExportCmd(GameSettingObj obj, BaseModel model)
return;
}
var arg = MakeArg(user, model, -1);
-
+
arg.Update2 = (obj, state) =>
{
Dispatcher.UIThread.Post(() =>
diff --git a/src/ColorMC.Gui/UIBinding/UserBinding.cs b/src/ColorMC.Gui/UIBinding/UserBinding.cs
index 50d256fce..8b9f7ea58 100644
--- a/src/ColorMC.Gui/UIBinding/UserBinding.cs
+++ b/src/ColorMC.Gui/UIBinding/UserBinding.cs
@@ -4,7 +4,6 @@
using System.Text;
using System.Threading.Tasks;
using Avalonia.Controls;
-using Avalonia.Threading;
using ColorMC.Core;
using ColorMC.Core.Game;
using ColorMC.Core.Helpers;
@@ -25,7 +24,6 @@ public static class UserBinding
public static event Action? UserEdit;
private static readonly List s_lockUser = [];
- private static bool s_notDisplayUserLock;
///
/// ˻
@@ -374,7 +372,7 @@ public static async Task GetLaunchUser(BaseModel model)
}
}
- if (IsLock(login) && !s_notDisplayUserLock)
+ if (IsLock(login) && GuiConfigUtils.Config.LaunchCheck.CheckUser)
{
var res = await model.ShowWait(App.Lang("GameBinding.Error1"));
if (!res)
@@ -382,14 +380,12 @@ public static async Task GetLaunchUser(BaseModel model)
return new() { Message = App.Lang("GameBinding.Error5") };
}
- Dispatcher.UIThread.Post(async () =>
+ res = await model.ShowWait(App.Lang("GameBinding.Info18"));
+ if (res)
{
- var res1 = await model.ShowWait(App.Lang("GameBinding.Info18"));
- if (res1)
- {
- s_notDisplayUserLock = true;
- }
- });
+ GuiConfigUtils.Config.LaunchCheck.CheckUser = false;
+ GuiConfigUtils.Save();
+ }
}
return new() { User = login };
diff --git a/src/ColorMC.Gui/UIBinding/WebBinding.cs b/src/ColorMC.Gui/UIBinding/WebBinding.cs
index c102c5f8d..e644a3985 100644
--- a/src/ColorMC.Gui/UIBinding/WebBinding.cs
+++ b/src/ColorMC.Gui/UIBinding/WebBinding.cs
@@ -83,7 +83,7 @@ public static async Task GetModPackList(SourceType type, string?
list1.Add(new(item, FileType.ModPack));
});
- return new()
+ return new()
{
List = list1,
Count = list.Pagination.TotalCount
@@ -325,7 +325,7 @@ public static async Task GetList(FileType now, SourceType type,
});
});
- return new()
+ return new()
{
List = list1,
Count = list.Pagination.TotalCount
@@ -359,7 +359,7 @@ public static async Task GetList(FileType now, SourceType type,
});
});
- return new()
+ return new()
{
List = list1,
Count = list.Hits.Count
@@ -478,7 +478,7 @@ public static void UpgradeMod(GameSettingObj obj, ICollection l
///
///
///
- public static async Task DownloadMod(GameSettingObj obj, ICollection list)
+ public static async Task DownloadMod(GameSettingObj obj, ICollection list)
{
var list1 = new List();
var setting = GameGuiSetting.ReadConfig(obj);
@@ -486,7 +486,7 @@ public static async Task DownloadMod(GameSettingObj obj, ICollection
{
- obj.AddModInfo(item.Info);
+ obj.AddModInfo(item.Info);
if (item.Old is { } old)
{
PathHelper.Delete(item.Old.Local);
@@ -507,7 +507,7 @@ public static async Task DownloadMod(GameSettingObj obj, ICollection