From 5d14402cc8b3c0f01770bf1d3e500af3b0db31f0 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 25 Jul 2022 19:47:22 -0500 Subject: [PATCH 01/13] revert to 33c1cc80b6 "make destroying focused client actually work" --- .gitattributes | 1 - Cargo.lock | 1 - Cargo.toml | 1 - src/config.rs | 88 +---------------------------- src/main.rs | 131 +++++--------------------------------------- src/msg/config.rs | 2 - src/msg/main.rs | 39 ++----------- src/msg_listener.rs | 85 ++-------------------------- src/x11/client.rs | 73 +++--------------------- 9 files changed, 31 insertions(+), 390 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 176a458..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto diff --git a/Cargo.lock b/Cargo.lock index 035c264..0771a76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -604,7 +604,6 @@ name = "xcrab" version = "0.1.0" dependencies = [ "breadx", - "gluten-keyboard", "lazy_static", "serde", "slotmap", diff --git a/Cargo.toml b/Cargo.toml index 3329ccb..16f2527 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,6 @@ toml = "0.5.9" serde = { version = "1.0.137", features = ["derive"]} lazy_static = "1.4.0" slotmap = "1.0.6" -gluten-keyboard = "0.1.2" [[bin]] name = "xcrab-msg" diff --git a/src/config.rs b/src/config.rs index b8a63df..74e0f40 100644 --- a/src/config.rs +++ b/src/config.rs @@ -15,14 +15,8 @@ #![allow(dead_code, clippy::module_name_repetitions)] -use crate::msg_listener::Action; use crate::Result; -use breadx::auto::xproto::KeyButMask; -use serde::{ - de::{Deserializer, Visitor}, - Deserialize, -}; -use std::collections::HashMap; +use serde::Deserialize; use std::path::PathBuf; #[derive(Clone, Debug, Deserialize)] @@ -33,9 +27,6 @@ pub struct XcrabConfig { gap_size: Option, outer_gap_size: Option, pub msg: Option, - #[allow(clippy::zero_sized_map_values)] // TODO: Action will be expanded in the future - #[serde(default)] - pub binds: HashMap, } #[derive(Clone, Debug, Deserialize)] @@ -57,7 +48,6 @@ impl Default for XcrabConfig { gap_size: Some(DEFAULT_GAP_SIZE), outer_gap_size: None, msg: Some(XcrabMsgConfig::default()), - binds: HashMap::new(), } } } @@ -106,79 +96,3 @@ pub fn load_file() -> Result { fn get_home() -> Result { Ok(std::env::var("HOME")?) } - -struct ActionVisitor; -impl<'de> Visitor<'de> for ActionVisitor { - type Value = Action; - - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - formatter.write_str("a valid WM action") - } - - fn visit_str(self, value: &str) -> std::result::Result { - value.parse().map_err(|s| E::custom(s)) - } -} - -impl<'de> Deserialize<'de> for Action { - fn deserialize>(deserializer: D) -> std::result::Result { - deserializer.deserialize_str(ActionVisitor) - } -} - -#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] -pub struct Keybind { - pub key: char, - pub mods: KeyButMask, -} - -struct KeybindVisitor; -impl<'de> Visitor<'de> for KeybindVisitor { - type Value = Keybind; - - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - formatter.write_str("a keybind in the form of 'M-x'") - } - - fn visit_str(self, value: &str) -> std::result::Result { - let mut mask = KeyButMask::default(); - - for part in value.split('-') { - if part.len() > 1 { - return Err(E::custom("parts may only contain one character")); - } - - let c = part - .chars() - .next() - .ok_or_else(|| E::custom("parts must contain at least one character"))?; - - if c.is_ascii_uppercase() { - // FIXME: add more as required - match c { - 'C' => mask.set_control(true), - 'S' => mask.set_shift(true), - 'A' => mask.set_mod1(true), // alt key - 'W' => mask.set_mod4(true), // super key, 'w' for windows because S is taken - _ => return Err(E::custom(format!("no such modifier: {}", c))), - }; - } - } - - // ignores extraneous keys - let c = value - .split('-') - .flat_map(str::chars) - .find(char::is_ascii_lowercase) - .ok_or_else(|| E::custom("must specify one normal key"))? - .to_ascii_uppercase(); - - Ok(Keybind { key: c, mods: mask }) - } -} - -impl<'de> Deserialize<'de> for Keybind { - fn deserialize>(deserializer: D) -> std::result::Result { - deserializer.deserialize_str(KeybindVisitor) - } -} diff --git a/src/main.rs b/src/main.rs index 1a338d6..a28a758 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,9 +16,9 @@ #![warn(clippy::pedantic)] use std::fmt::{Debug, Display}; +use std::ops::Deref; use breadx::{ - keyboard::KeyboardState, prelude::{AsyncDisplay, AsyncDisplayXprotoExt, MapState}, traits::DisplayBase, AsyncDisplayConnection, AsyncDisplayExt, BreadError, ConfigureWindowParameters, Event, @@ -27,7 +27,7 @@ use breadx::{ use lazy_static::lazy_static; -use tokio::sync::mpsc; +use tokio::sync::mpsc::unbounded_channel; mod config; mod msg_listener; @@ -42,7 +42,6 @@ pub enum XcrabError { Toml(toml::de::Error), Var(std::env::VarError), ClientDoesntExist, - Custom(String), } impl From for XcrabError { @@ -69,31 +68,19 @@ impl From for XcrabError { } } -impl From for XcrabError { - fn from(v: String) -> Self { - Self::Custom(v) - } -} - lazy_static! { - // pub static ref CONFIG: config::XcrabConfig = config::load_file().unwrap_or_default(); - pub static ref CONFIG: config::XcrabConfig = config::load_file().unwrap_or_else(|e| { - println!("[CONFIG] Error parsing config: {e}"); - println!("[CONFIG] Falling back to default config"); - config::XcrabConfig::default() - }); + pub static ref CONFIG: config::XcrabConfig = config::load_file().unwrap_or_default(); } impl Display for XcrabError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Self::Bread(be) => Display::fmt(be, f)?, - Self::Io(ie) => Display::fmt(ie, f)?, - Self::Toml(te) => Display::fmt(te, f)?, - Self::Var(ve) => Display::fmt(ve, f)?, - Self::Custom(fe) => Display::fmt(fe, f)?, + Self::Bread(be) => Display::fmt(&be, f)?, + Self::Io(ie) => Display::fmt(&ie, f)?, + Self::Toml(te) => Display::fmt(&te, f)?, + Self::Var(ve) => Display::fmt(&ve, f)?, Self::ClientDoesntExist => Display::fmt("client didn't exist", f)?, - } + }; Ok(()) } @@ -137,55 +124,30 @@ async fn main() -> Result<()> { conn.ungrab_server_async().await?; - let (send, mut recv) = mpsc::unbounded_channel(); - let (result_send, result_recv) = mpsc::unbounded_channel(); + let (send, mut recv) = unbounded_channel(); tokio::spawn(msg_listener::listener_task( CONFIG.msg.clone().unwrap_or_default().socket_path, send, - result_recv, )); - let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; - loop { // biased mode makes select! poll the channel first in order to keep xcrab-msg from being // starved by x11 events. Probably unnecessary, but better safe than sorry. tokio::select! { biased; - Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn, &result_send).await?, - Ok(ev) = conn.wait_for_event_async() => process_event(ev, - &mut manager, - &mut conn, - root, - &mut keyboard_state, - ).await?, + Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn).await?, + Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root).await?, } } } -#[allow(clippy::too_many_lines)] // FIXME: missing help i have no idea how to make this shorter async fn process_event( ev: Event, manager: &mut XcrabWindowManager, conn: &mut Dpy, root: Window, - keyboard_state: &mut KeyboardState, ) -> Result<()> { - let focused = { - // A new scope is required in order to drop the future stored here, and therefore free the - // immutable borrow of `manager` - let orig = manager - .get_focused() - .await - .map(|w| (w, manager.get_framed_window(w))); - if let Some((w, fut)) = orig { - Some((w, fut.await)) - } else { - None - } - }; - match ev { Event::MapRequest(ev) => { manager.add_client(conn, ev.window).await?; @@ -221,77 +183,12 @@ async fn process_event( manager.remove_client(conn, ev.window).await?; } } - Event::ButtonPress(mut ev) => { - if ev.detail == 1 && manager.has_client(ev.event) { + Event::ButtonPress(ev) => { + dbg!(&ev); + if ev.detail == 1 { manager.set_focus(conn, ev.event).await?; } - if let Some((focused, focused_frame)) = focused { - if ev.event == focused_frame.input { - ev.event = focused; - conn.send_event_async(focused, EventMask::BUTTON_PRESS, Event::ButtonPress(ev)) - .await?; - } - } } - Event::KeyPress(mut ev) => { - if let Some(k) = keyboard_state.process_keycode(ev.detail, ev.state) { - if let Some(c) = k.as_char() { - for (&bind, action) in &CONFIG.binds { - if bind.key == c && bind.mods == ev.state { - action.eval(manager, conn).await?; - } - } - } - } - - // keybind did not match, forward instead - if let Some((focused, _)) = focused { - ev.event = focused; - conn.send_event_async(focused, EventMask::KEY_PRESS, Event::KeyPress(ev)) - .await?; - } - } - Event::KeyRelease(mut ev) => { - if let Some((focused, focused_frame)) = focused { - if ev.event == focused_frame.input { - ev.event = focused; - conn.send_event_async(focused, EventMask::KEY_RELEASE, Event::KeyRelease(ev)) - .await?; - } - } - } - Event::ButtonRelease(mut ev) => { - if let Some((focused, focused_frame)) = focused { - if ev.event == focused_frame.input { - ev.event = focused; - conn.send_event_async( - focused, - EventMask::BUTTON_RELEASE, - Event::ButtonRelease(ev), - ) - .await?; - } - } - } - Event::EnterNotify(mut ev) => { - if let Some((focused, focused_frame)) = focused { - if ev.event == focused_frame.input { - ev.event = focused; - conn.send_event_async(focused, EventMask::ENTER_WINDOW, Event::EnterNotify(ev)) - .await?; - } - } - } - Event::LeaveNotify(mut ev) => { - if let Some((focused, focused_frame)) = focused { - if ev.event == focused_frame.input { - ev.event = focused; - conn.send_event_async(focused, EventMask::LEAVE_WINDOW, Event::LeaveNotify(ev)) - .await?; - } - } - } - _ => {} } Ok(()) diff --git a/src/msg/config.rs b/src/msg/config.rs index d5a0485..82cedbe 100644 --- a/src/msg/config.rs +++ b/src/msg/config.rs @@ -17,14 +17,12 @@ use crate::Result; use serde::Deserialize; use std::path::PathBuf; -#[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Default, Deserialize)] // Dummy struct for deserializing the message config - we're using the same file for both binaries pub struct XcrabConfig { pub msg: XcrabMsgConfig, } -#[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Deserialize)] pub struct XcrabMsgConfig { pub socket_path: PathBuf, diff --git a/src/msg/main.rs b/src/msg/main.rs index 3d24557..9231125 100644 --- a/src/msg/main.rs +++ b/src/msg/main.rs @@ -13,32 +13,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#![warn(clippy::pedantic)] - mod config; -use std::error::Error; -use std::fmt::{Debug, Display, Formatter, Result as FmtResult}; -use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::io::AsyncWriteExt; use tokio::net::UnixStream; -type Result = std::result::Result>; - -struct CustomError(String); - -impl Debug for CustomError { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - f.write_str(&self.0) - } -} - -impl Display for CustomError { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - f.write_str(&self.0) - } -} - -impl Error for CustomError {} +type Result = std::result::Result>; #[tokio::main] async fn main() -> Result<()> { @@ -48,20 +28,9 @@ async fn main() -> Result<()> { let path = conf.msg.socket_path; - let stream = UnixStream::connect(path).await?; - let (mut read, mut write) = stream.into_split(); + let mut stream = UnixStream::connect(path).await?; - write.write_all(msg.as_bytes()).await?; - drop(write); // Shutdown the writer half so that the write actually goes through - // "Don't cross the streams!"" - - let mut buf = String::new(); - - read.read_to_string(&mut buf).await?; - - if !buf.is_empty() { - return Err(CustomError(buf).into()); - } + stream.write_all(msg.as_bytes()).await?; Ok(()) } diff --git a/src/msg_listener.rs b/src/msg_listener.rs index 7bc5407..0da7523 100644 --- a/src/msg_listener.rs +++ b/src/msg_listener.rs @@ -17,10 +17,9 @@ use crate::x11::client::XcrabWindowManager; use crate::Result; use breadx::AsyncDisplay; use std::path::Path; -use std::str::FromStr; -use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::io::AsyncReadExt; use tokio::net::UnixListener; -use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; +use tokio::sync::mpsc::UnboundedSender; macro_rules! unwrap_or_continue { ($e:expr) => { @@ -35,7 +34,6 @@ macro_rules! unwrap_or_continue { pub async fn listener_task>( socket_path: P, sender: UnboundedSender, - mut result_recv: UnboundedReceiver>, ) -> Result<()> { let socket_path = socket_path.as_ref(); if socket_path.exists() { @@ -49,13 +47,6 @@ pub async fn listener_task>( stream.read_to_string(&mut buf).await?; drop(sender.send(buf)); // go back to ms word clippy - - // we can unwrap here because if the channel is closed then something's not right - if let Err(e) = result_recv.recv().await.unwrap() { - stream.write_all(format!("{}", e).as_bytes()).await?; - } else { - stream.write_all(&[]).await?; - } } } @@ -63,76 +54,10 @@ pub async fn on_recv( data: String, manager: &mut XcrabWindowManager, conn: &mut Dpy, - result_sender: &UnboundedSender>, ) -> Result<()> { - let res = { data.parse::() }; - - if let Ok(ref a) = res { - a.eval(manager, conn).await?; // Don't send these errors over the channel, because they're - // xcrab errors, not msg errors + match &*data { + "close" => manager.destroy_focused_client(conn).await?, + _ => println!("{}", data), } - - drop(result_sender.send(res.map(|_| ()))); - Ok(()) } - -#[derive(Debug, Clone)] -#[non_exhaustive] -pub enum Action { - Close, -} - -impl FromStr for Action { - type Err = crate::XcrabError; - - fn from_str(s: &str) -> std::result::Result { - #[allow(clippy::enum_glob_use)] - use Action::*; - let parts: Vec = s - .split(' ') - .map(str::to_ascii_lowercase) - .filter(|s| !s.is_empty()) - .collect(); - - if parts.is_empty() { - return Err(String::from("No action provided").into()); - } - - macro_rules! eq_ignore_ascii_case_match { - (($scrutinee:expr) { $($s:literal => $v:expr,)+ else => $else:expr $(,)? }) => { - $( - if $scrutinee.eq_ignore_ascii_case($s) { - $v - } else - )+ { - $else - } - }; - } - - // TODO: When more actions are added (such as focus etc), they will take arguments. In that - // case, they will get passed the rest of `parts`. - eq_ignore_ascii_case_match!((parts[0]) { - "close" => Ok(Close), - else => Err(format!("Unknown action: {}", s).into()), - }) - } -} - -impl Action { - pub async fn eval( - &self, - manager: &mut XcrabWindowManager, - conn: &mut Dpy, - ) -> Result<()> { - #[allow(clippy::enum_glob_use)] - use Action::*; - - match self { - Close => manager.destroy_focused_client(conn).await?, - } - - Ok(()) - } -} diff --git a/src/x11/client.rs b/src/x11/client.rs index 7d937ad..c1a4c74 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -137,12 +137,14 @@ enum RectangleContents { Client(Client), } +#[allow(clippy::module_name_repetitions)] #[derive(Debug, Clone)] struct Pane { children: Vec, directionality: Directionality, } +#[allow(clippy::module_name_repetitions)] #[derive(Debug, Clone, Copy)] struct Client { frame: FramedWindow, @@ -242,10 +244,7 @@ impl XcrabWindowManager { }; if let Some(focus) = self.focused { - let focused_key = self.clients.get(&focus).unwrap(); - let focused = self.rects.get(*focused_key).unwrap(); - let focused_frame = focused.unwrap_client().frame; - req.focus = focused_frame.input; + req.focus = focus; } conn.exchange_request_async(req).await?; @@ -611,17 +610,6 @@ impl XcrabWindowManager { Ok(()) } - - pub async fn get_focused(&self) -> Option { - self.focused - } - - pub async fn get_framed_window(&self, window: Window) -> FramedWindow { - let focused_key = self.clients.get(&window).unwrap(); - let focused = self.rects.get(*focused_key).unwrap(); - let focused_frame = focused.unwrap_client().frame; - focused_frame - } } pub fn may_not_exist(res: breadx::Result) -> breadx::Result { @@ -637,10 +625,9 @@ pub fn may_not_exist(res: breadx::Result) -> breadx::Result { } #[derive(Debug, Clone, Copy)] -pub struct FramedWindow { - pub frame: Window, - pub win: Window, - pub input: Window, +struct FramedWindow { + frame: Window, + win: Window, } impl FramedWindow { @@ -700,27 +687,12 @@ impl FramedWindow { .await, )?; - self.input - .configure_async( - conn, - ConfigureWindowParameters { - x: Some(0), - y: Some(0), - width, - height, - border_width: None, - ..Default::default() - }, - ) - .await?; - Ok(()) } async fn map(self, conn: &mut Dpy) -> Result<()> { may_not_exist(self.win.map_async(conn).await)?; self.frame.map_async(conn).await?; - self.input.map_async(conn).await?; Ok(()) } @@ -736,10 +708,6 @@ impl FramedWindow { // no longer related to us, remove from save set may_not_exist(self.win.change_save_set_async(conn, SetMode::Delete).await)?; - self.input.unmap_async(conn).await?; - - self.input.free_async(conn).await?; - self.frame.free_async(conn).await?; Ok(()) @@ -851,21 +819,6 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul ) .await?; - let input = conn - .create_window_async( - frame, - breadx::WindowClass::InputOnly, - None, - Some(conn.default_visual_id()), - 0, - 0, - geometry.width, - geometry.height, - 0, - WindowParameters::default(), - ) - .await?; - frame .set_event_mask_async( conn, @@ -876,21 +829,9 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul win.set_event_mask_async(conn, EventMask::BUTTON_PRESS) .await?; - input - .set_event_mask_async( - conn, - EventMask::BUTTON_PRESS - | EventMask::BUTTON_RELEASE - | EventMask::KEY_PRESS - | EventMask::KEY_RELEASE - | EventMask::ENTER_WINDOW - | EventMask::LEAVE_WINDOW, - ) - .await?; - may_not_exist(win.change_save_set_async(conn, SetMode::Insert).await)?; may_not_exist(win.reparent_async(conn, frame, 0, 0).await)?; - Ok(FramedWindow { frame, win, input }) + Ok(FramedWindow { frame, win }) } -- 2.37.1 From 65048bab952a4949c906c15be30bbe6aa3378026 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Thu, 28 Jul 2022 12:57:50 -0500 Subject: [PATCH 02/13] alright, keybinds the right way we still need to make use of the config file, but that's easy enough to change I'm not quite sure how you would get the inner value for the modmask, but if you make a simple keypress event listener (or use an existing one, I'm sure those exist), the inner value that you want is in the keybutmask value of the event object I'll probably deal with that myself, but I'll leave that here for future reference --- src/main.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index a28a758..a93aec5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,9 +16,10 @@ #![warn(clippy::pedantic)] use std::fmt::{Debug, Display}; -use std::ops::Deref; use breadx::{ + auto::xproto::{GrabKeyRequest, GrabMode, KeyButMask, Keycode, Keysym, ModMask}, + keyboard::KeyboardState, prelude::{AsyncDisplay, AsyncDisplayXprotoExt, MapState}, traits::DisplayBase, AsyncDisplayConnection, AsyncDisplayExt, BreadError, ConfigureWindowParameters, Event, @@ -35,6 +36,8 @@ mod x11; use x11::client::{may_not_exist, XcrabWindowManager}; +use std::collections::HashMap; + #[non_exhaustive] pub enum XcrabError { Bread(BreadError), @@ -104,7 +107,7 @@ async fn main() -> Result<()> { // listen for substructure redirects to intercept events like window creation root.set_event_mask_async( &mut conn, - EventMask::SUBSTRUCTURE_REDIRECT | EventMask::SUBSTRUCTURE_NOTIFY, + EventMask::SUBSTRUCTURE_REDIRECT | EventMask::SUBSTRUCTURE_NOTIFY | EventMask::KEY_PRESS, ) .await?; @@ -131,13 +134,34 @@ async fn main() -> Result<()> { send, )); + let mask = ModMask { + inner: 20 + }; + let keymap = keymap(&mut conn).await.unwrap_or_default(); + let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); + let key = keymap + .get(&key_u32) + .expect("yeah sorry that keysym didn't map out"); + + conn.exchange_request_async(GrabKeyRequest { + req_type: 33, + owner_events: false, + length: 4, + grab_window: root, + modifiers: mask, + key: *key, + pointer_mode: GrabMode::Async, + keyboard_mode: GrabMode::Async, + }) + .await?; + loop { // biased mode makes select! poll the channel first in order to keep xcrab-msg from being // starved by x11 events. Probably unnecessary, but better safe than sorry. tokio::select! { biased; Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn).await?, - Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root).await?, + Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root, &keymap).await?, } } } @@ -147,6 +171,7 @@ async fn process_event( manager: &mut XcrabWindowManager, conn: &mut Dpy, root: Window, + keymap: &HashMap, ) -> Result<()> { match ev { Event::MapRequest(ev) => { @@ -184,12 +209,37 @@ async fn process_event( } } Event::ButtonPress(ev) => { - dbg!(&ev); if ev.detail == 1 { manager.set_focus(conn, ev.event).await?; } } + Event::KeyPress(ev) => { + let key_u32 = u32::from_str_radix("0x0078", 16).unwrap_or_default(); + let key = keymap.get(&key_u32).unwrap_or(&u8::MIN); + if ev.detail == *key { + manager.destroy_focused_client(conn).await?; + } + dbg!(ev); + } _ => {} } Ok(()) } + +// I will move this to x11/client.rs eventually +// this is just ease of coding for now + +async fn keymap(conn: &mut Dpy) -> Option> { + let mut state = KeyboardState::new_async(conn).await.ok()?; + let mut map: HashMap = HashMap::new(); + for keycode in 8..255_u8 { + let key = state.process_keycode(keycode, KeyButMask::default()); + let keysyms = state.lookup_keysyms(keycode); + if key != None { + for keysym in keysyms { + map.insert(*keysym, keycode); + } + } + } + Some(map) +} -- 2.37.1 From 9e21c0a02aee27a2227c3785f61a23b0f1bf6b51 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Thu, 28 Jul 2022 13:04:58 -0500 Subject: [PATCH 03/13] remove keypress event debugging, make keybind to destroy client work --- src/main.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index a93aec5..4a2271a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -214,12 +214,11 @@ async fn process_event( } } Event::KeyPress(ev) => { - let key_u32 = u32::from_str_radix("0x0078", 16).unwrap_or_default(); + let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); let key = keymap.get(&key_u32).unwrap_or(&u8::MIN); if ev.detail == *key { manager.destroy_focused_client(conn).await?; } - dbg!(ev); } _ => {} } -- 2.37.1 From 65d2207a5f67f8545f5b75a41d35ebba4d94724d Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Thu, 28 Jul 2022 14:22:10 -0500 Subject: [PATCH 04/13] minor changes + re-add custom error type --- src/main.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4a2271a..47c0fa1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,6 +45,7 @@ pub enum XcrabError { Toml(toml::de::Error), Var(std::env::VarError), ClientDoesntExist, + Custom(String), } impl From for XcrabError { @@ -71,8 +72,18 @@ impl From for XcrabError { } } +impl From for XcrabError { + fn from(v: String) -> Self { + Self::Custom(v) + } +} + lazy_static! { - pub static ref CONFIG: config::XcrabConfig = config::load_file().unwrap_or_default(); + pub static ref CONFIG: config::XcrabConfig = config::load_file().unwrap_or_else(|e| { + println!("[CONFIG] Error parsing config: {e}"); + println!("[CONFIG] Falling back to default config"); + config::XcrabConfig::default() + }); } impl Display for XcrabError { @@ -83,6 +94,7 @@ impl Display for XcrabError { Self::Toml(te) => Display::fmt(&te, f)?, Self::Var(ve) => Display::fmt(&ve, f)?, Self::ClientDoesntExist => Display::fmt("client didn't exist", f)?, + Self::Custom(fe) => Display::fmt(fe, f)?, }; Ok(()) @@ -139,9 +151,8 @@ async fn main() -> Result<()> { }; let keymap = keymap(&mut conn).await.unwrap_or_default(); let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); - let key = keymap - .get(&key_u32) - .expect("yeah sorry that keysym didn't map out"); + let key: &u8 = keymap + .get(&key_u32).ok_or(XcrabError::Custom("the keysym requested was not found in the keymap".to_string()))?; conn.exchange_request_async(GrabKeyRequest { req_type: 33, -- 2.37.1 From 85c82e7504b898f2cea16b37a730d698f892ebf6 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Thu, 28 Jul 2022 21:37:00 -0500 Subject: [PATCH 05/13] random commit (please ignore) --- src/config.rs | 88 +- src/keysymdef.rs | 2107 +++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 27 +- src/msg/config.rs | 15 +- src/msg/main.rs | 43 +- src/msg_listener.rs | 85 +- src/x11/client.rs | 73 +- 7 files changed, 2387 insertions(+), 51 deletions(-) create mode 100644 src/keysymdef.rs diff --git a/src/config.rs b/src/config.rs index 74e0f40..b8a63df 100644 --- a/src/config.rs +++ b/src/config.rs @@ -15,8 +15,14 @@ #![allow(dead_code, clippy::module_name_repetitions)] +use crate::msg_listener::Action; use crate::Result; -use serde::Deserialize; +use breadx::auto::xproto::KeyButMask; +use serde::{ + de::{Deserializer, Visitor}, + Deserialize, +}; +use std::collections::HashMap; use std::path::PathBuf; #[derive(Clone, Debug, Deserialize)] @@ -27,6 +33,9 @@ pub struct XcrabConfig { gap_size: Option, outer_gap_size: Option, pub msg: Option, + #[allow(clippy::zero_sized_map_values)] // TODO: Action will be expanded in the future + #[serde(default)] + pub binds: HashMap, } #[derive(Clone, Debug, Deserialize)] @@ -48,6 +57,7 @@ impl Default for XcrabConfig { gap_size: Some(DEFAULT_GAP_SIZE), outer_gap_size: None, msg: Some(XcrabMsgConfig::default()), + binds: HashMap::new(), } } } @@ -96,3 +106,79 @@ pub fn load_file() -> Result { fn get_home() -> Result { Ok(std::env::var("HOME")?) } + +struct ActionVisitor; +impl<'de> Visitor<'de> for ActionVisitor { + type Value = Action; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("a valid WM action") + } + + fn visit_str(self, value: &str) -> std::result::Result { + value.parse().map_err(|s| E::custom(s)) + } +} + +impl<'de> Deserialize<'de> for Action { + fn deserialize>(deserializer: D) -> std::result::Result { + deserializer.deserialize_str(ActionVisitor) + } +} + +#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] +pub struct Keybind { + pub key: char, + pub mods: KeyButMask, +} + +struct KeybindVisitor; +impl<'de> Visitor<'de> for KeybindVisitor { + type Value = Keybind; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("a keybind in the form of 'M-x'") + } + + fn visit_str(self, value: &str) -> std::result::Result { + let mut mask = KeyButMask::default(); + + for part in value.split('-') { + if part.len() > 1 { + return Err(E::custom("parts may only contain one character")); + } + + let c = part + .chars() + .next() + .ok_or_else(|| E::custom("parts must contain at least one character"))?; + + if c.is_ascii_uppercase() { + // FIXME: add more as required + match c { + 'C' => mask.set_control(true), + 'S' => mask.set_shift(true), + 'A' => mask.set_mod1(true), // alt key + 'W' => mask.set_mod4(true), // super key, 'w' for windows because S is taken + _ => return Err(E::custom(format!("no such modifier: {}", c))), + }; + } + } + + // ignores extraneous keys + let c = value + .split('-') + .flat_map(str::chars) + .find(char::is_ascii_lowercase) + .ok_or_else(|| E::custom("must specify one normal key"))? + .to_ascii_uppercase(); + + Ok(Keybind { key: c, mods: mask }) + } +} + +impl<'de> Deserialize<'de> for Keybind { + fn deserialize>(deserializer: D) -> std::result::Result { + deserializer.deserialize_str(KeybindVisitor) + } +} diff --git a/src/keysymdef.rs b/src/keysymdef.rs new file mode 100644 index 0000000..ef732d0 --- /dev/null +++ b/src/keysymdef.rs @@ -0,0 +1,2107 @@ +/* automatically generated by rust-bindgen 0.60.1 */ + +#![allow(unused, clippy::unreadable_literal, dead_code)] +pub const VOID_SYMBOL: u32 = 16777215; +pub const BACKSPACE: u32 = 65288; +pub const TAB: u32 = 65289; +pub const LINEFEED: u32 = 65290; +pub const CLEAR: u32 = 65291; +pub const RETURN: u32 = 65293; +pub const PAUSE: u32 = 65299; +pub const SCROLL_LOCK: u32 = 65300; +pub const SYS_REQ: u32 = 65301; +pub const ESCAPE: u32 = 65307; +pub const DELETE: u32 = 65535; +pub const MULTI_KEY: u32 = 65312; +pub const CODEINPUT: u32 = 65335; +pub const SINGLE_CANDIDATE: u32 = 65340; +pub const MULTIPLE_CANDIDATE: u32 = 65341; +pub const PREVIOUS_CANDIDATE: u32 = 65342; +pub const KANJI: u32 = 65313; +pub const MUHENKAN: u32 = 65314; +pub const HENKAN_MODE: u32 = 65315; +pub const HENKAN: u32 = 65315; +pub const ROMAJI: u32 = 65316; +pub const HIRAGANA: u32 = 65317; +pub const KATAKANA: u32 = 65318; +pub const HIRAGANA_KATAKANA: u32 = 65319; +pub const ZENKAKU: u32 = 65320; +pub const HANKAKU: u32 = 65321; +pub const ZENKAKU_HANKAKU: u32 = 65322; +pub const TOUROKU: u32 = 65323; +pub const MASSYO: u32 = 65324; +pub const KANA_LOCK: u32 = 65325; +pub const KANA_SHIFT: u32 = 65326; +pub const EISU_SHIFT: u32 = 65327; +pub const EISU_TOGGLE: u32 = 65328; +pub const KANJI_BANGOU: u32 = 65335; +pub const ZEN_KOHO: u32 = 65341; +pub const MAE_KOHO: u32 = 65342; +pub const HOME: u32 = 65360; +pub const LEFT: u32 = 65361; +pub const UP: u32 = 65362; +pub const RIGHT: u32 = 65363; +pub const DOWN: u32 = 65364; +pub const PRIOR: u32 = 65365; +pub const PAGE_UP: u32 = 65365; +pub const NEXT: u32 = 65366; +pub const PAGE_DOWN: u32 = 65366; +pub const END: u32 = 65367; +pub const BEGIN: u32 = 65368; +pub const SELECT: u32 = 65376; +pub const PRINT: u32 = 65377; +pub const EXECUTE: u32 = 65378; +pub const INSERT: u32 = 65379; +pub const UNDO: u32 = 65381; +pub const REDO: u32 = 65382; +pub const MENU: u32 = 65383; +pub const FIND: u32 = 65384; +pub const CANCEL: u32 = 65385; +pub const HELP: u32 = 65386; +pub const BREAK: u32 = 65387; +pub const MODE_SWITCH: u32 = 65406; +pub const SCRIPT_SWITCH: u32 = 65406; +pub const NUMBER_LOCK: u32 = 65407; +pub const KP_SPACE: u32 = 65408; +pub const KP_TAB: u32 = 65417; +pub const KP_ENTER: u32 = 65421; +pub const KP_F1: u32 = 65425; +pub const KP_F2: u32 = 65426; +pub const KP_F3: u32 = 65427; +pub const KP_F4: u32 = 65428; +pub const KP_HOME: u32 = 65429; +pub const KP_LEFT: u32 = 65430; +pub const KP_UP: u32 = 65431; +pub const KP_RIGHT: u32 = 65432; +pub const KP_DOWN: u32 = 65433; +pub const KP_PRIOR: u32 = 65434; +pub const KP_PAGE_UP: u32 = 65434; +pub const KP_NEXT: u32 = 65435; +pub const KP_PAGE_DOWN: u32 = 65435; +pub const KP_END: u32 = 65436; +pub const KP_BEGIN: u32 = 65437; +pub const KP_INSERT: u32 = 65438; +pub const KP_DELETE: u32 = 65439; +pub const KP_EQUAL: u32 = 65469; +pub const KP_MULTIPLY: u32 = 65450; +pub const KP_ADD: u32 = 65451; +pub const KP_SEPARATOR: u32 = 65452; +pub const KP_SUBTRACT: u32 = 65453; +pub const KP_DECIMAL: u32 = 65454; +pub const KP_DIVIDE: u32 = 65455; +pub const KP_0: u32 = 65456; +pub const KP_1: u32 = 65457; +pub const KP_2: u32 = 65458; +pub const KP_3: u32 = 65459; +pub const KP_4: u32 = 65460; +pub const KP_5: u32 = 65461; +pub const KP_6: u32 = 65462; +pub const KP_7: u32 = 65463; +pub const KP_8: u32 = 65464; +pub const KP_9: u32 = 65465; +pub const F1: u32 = 65470; +pub const F2: u32 = 65471; +pub const F3: u32 = 65472; +pub const F4: u32 = 65473; +pub const F5: u32 = 65474; +pub const F6: u32 = 65475; +pub const F7: u32 = 65476; +pub const F8: u32 = 65477; +pub const F9: u32 = 65478; +pub const F10: u32 = 65479; +pub const F11: u32 = 65480; +pub const L1: u32 = 65480; +pub const F12: u32 = 65481; +pub const L2: u32 = 65481; +pub const F13: u32 = 65482; +pub const L3: u32 = 65482; +pub const F14: u32 = 65483; +pub const L4: u32 = 65483; +pub const F15: u32 = 65484; +pub const L5: u32 = 65484; +pub const F16: u32 = 65485; +pub const L6: u32 = 65485; +pub const F17: u32 = 65486; +pub const L7: u32 = 65486; +pub const F18: u32 = 65487; +pub const L8: u32 = 65487; +pub const F19: u32 = 65488; +pub const L9: u32 = 65488; +pub const F20: u32 = 65489; +pub const L10: u32 = 65489; +pub const F21: u32 = 65490; +pub const R1: u32 = 65490; +pub const F22: u32 = 65491; +pub const R2: u32 = 65491; +pub const F23: u32 = 65492; +pub const R3: u32 = 65492; +pub const F24: u32 = 65493; +pub const R4: u32 = 65493; +pub const F25: u32 = 65494; +pub const R5: u32 = 65494; +pub const F26: u32 = 65495; +pub const R6: u32 = 65495; +pub const F27: u32 = 65496; +pub const R7: u32 = 65496; +pub const F28: u32 = 65497; +pub const R8: u32 = 65497; +pub const F29: u32 = 65498; +pub const R9: u32 = 65498; +pub const F30: u32 = 65499; +pub const R10: u32 = 65499; +pub const F31: u32 = 65500; +pub const R11: u32 = 65500; +pub const F32: u32 = 65501; +pub const R12: u32 = 65501; +pub const F33: u32 = 65502; +pub const R13: u32 = 65502; +pub const F34: u32 = 65503; +pub const R14: u32 = 65503; +pub const F35: u32 = 65504; +pub const R15: u32 = 65504; +pub const SHIFT_L: u32 = 65505; +pub const SHIFT_R: u32 = 65506; +pub const CONTROL_L: u32 = 65507; +pub const CONTROL_R: u32 = 65508; +pub const CAPS_LOCK: u32 = 65509; +pub const SHIFT_LOCK: u32 = 65510; +pub const META_L: u32 = 65511; +pub const META_R: u32 = 65512; +pub const ALT_L: u32 = 65513; +pub const ALT_R: u32 = 65514; +pub const SUPER_L: u32 = 65515; +pub const SUPER_R: u32 = 65516; +pub const HYPER_L: u32 = 65517; +pub const HYPER_R: u32 = 65518; +pub const ISO_LOCK: u32 = 65025; +pub const ISO_LEVEL2_LOCK: u32 = 65026; +pub const ISO_LEVEL3_SHIFT: u32 = 65027; +pub const ISO_LEVEL3_LATCH: u32 = 65028; +pub const ISO_LEVEL3_LOCK: u32 = 65029; +pub const ISO_LEVEL5_SHIFT: u32 = 65041; +pub const ISO_LEVEL5_LATCH: u32 = 65042; +pub const ISO_LEVEL5_LOCK: u32 = 65043; +pub const ISO_GROUP_SHIFT: u32 = 65406; +pub const ISO_GROUP_LATCH: u32 = 65030; +pub const ISO_GROUP_LOCK: u32 = 65031; +pub const ISO_NEXT_GROUP: u32 = 65032; +pub const ISO_NEXT_GROUP_LOCK: u32 = 65033; +pub const ISO_PREV_GROUP: u32 = 65034; +pub const ISO_PREV_GROUP_LOCK: u32 = 65035; +pub const ISO_FIRST_GROUP: u32 = 65036; +pub const ISO_FIRST_GROUP_LOCK: u32 = 65037; +pub const ISO_LAST_GROUP: u32 = 65038; +pub const ISO_LAST_GROUP_LOCK: u32 = 65039; +pub const ISO_LEFT_TAB: u32 = 65056; +pub const ISO_MOVE_LINE_UP: u32 = 65057; +pub const ISO_MOVE_LINE_DOWN: u32 = 65058; +pub const ISO_PARTIAL_LINE_UP: u32 = 65059; +pub const ISO_PARTIAL_LINE_DOWN: u32 = 65060; +pub const ISO_PARTIAL_SPACE_LEFT: u32 = 65061; +pub const ISO_PARTIAL_SPACE_RIGHT: u32 = 65062; +pub const ISO_SET_MARGIN_LEFT: u32 = 65063; +pub const ISO_SET_MARGIN_RIGHT: u32 = 65064; +pub const ISO_RELEASE_MARGIN_LEFT: u32 = 65065; +pub const ISO_RELEASE_MARGIN_RIGHT: u32 = 65066; +pub const ISO_RELEASE_BOTH_MARGINS: u32 = 65067; +pub const ISO_FAST_CURSOR_LEFT: u32 = 65068; +pub const ISO_FAST_CURSOR_RIGHT: u32 = 65069; +pub const ISO_FAST_CURSOR_UP: u32 = 65070; +pub const ISO_FAST_CURSOR_DOWN: u32 = 65071; +pub const ISO_CONTINUOUS_UNDERLINE: u32 = 65072; +pub const ISO_DISCONTINUOUS_UNDERLINE: u32 = 65073; +pub const ISO_EMPHASIZE: u32 = 65074; +pub const ISO_CENTER_OBJECT: u32 = 65075; +pub const ISO_ENTER: u32 = 65076; +pub const DEAD_GRAVE: u32 = 65104; +pub const DEAD_ACUTE: u32 = 65105; +pub const DEAD_CIRCUMFLEX: u32 = 65106; +pub const DEAD_TILDE: u32 = 65107; +pub const DEAD_PERISPOMENI: u32 = 65107; +pub const DEAD_MACRON: u32 = 65108; +pub const DEAD_BREVE: u32 = 65109; +pub const DEAD_ABOVEDOT: u32 = 65110; +pub const DEAD_DIAERESIS: u32 = 65111; +pub const DEAD_ABOVERING: u32 = 65112; +pub const DEAD_DOUBLEACUTE: u32 = 65113; +pub const DEAD_CARON: u32 = 65114; +pub const DEAD_CEDILLA: u32 = 65115; +pub const DEAD_OGONEK: u32 = 65116; +pub const DEAD_IOTA: u32 = 65117; +pub const DEAD_VOICED_SOUND: u32 = 65118; +pub const DEAD_SEMIVOICED_SOUND: u32 = 65119; +pub const DEAD_BELOWDOT: u32 = 65120; +pub const DEAD_HOOK: u32 = 65121; +pub const DEAD_HORN: u32 = 65122; +pub const dead_stroke: u32 = 65123; +pub const DEAD_ABOVECOMMA: u32 = 65124; +pub const DEAD_PSILI: u32 = 65124; +pub const DEAD_ABOVEREVERSEDCOMMA: u32 = 65125; +pub const DEAD_DASIA: u32 = 65125; +pub const DEAD_DOUBLEGRAVE: u32 = 65126; +pub const DEAD_BELOWRING: u32 = 65127; +pub const DEAD_BELOWMACRON: u32 = 65128; +pub const DEAD_BELOWCIRCUMFLEX: u32 = 65129; +pub const dead_belowtilde: u32 = 65130; +pub const dead_belowbreve: u32 = 65131; +pub const dead_belowdiaeresis: u32 = 65132; +pub const dead_invertedbreve: u32 = 65133; +pub const dead_belowcomma: u32 = 65134; +pub const dead_currency: u32 = 65135; +pub const dead_lowline: u32 = 65168; +pub const dead_aboveverticalline: u32 = 65169; +pub const dead_belowverticalline: u32 = 65170; +pub const dead_longsolidusoverlay: u32 = 65171; +pub const dead_a: u32 = 65152; +pub const dead_A: u32 = 65153; +pub const dead_e: u32 = 65154; +pub const dead_E: u32 = 65155; +pub const dead_i: u32 = 65156; +pub const dead_I: u32 = 65157; +pub const dead_o: u32 = 65158; +pub const dead_O: u32 = 65159; +pub const dead_u: u32 = 65160; +pub const dead_U: u32 = 65161; +pub const dead_small_schwa: u32 = 65162; +pub const dead_capital_schwa: u32 = 65163; +pub const dead_greek: u32 = 65164; +pub const First_Virtual_Screen: u32 = 65232; +pub const Prev_Virtual_Screen: u32 = 65233; +pub const Next_Virtual_Screen: u32 = 65234; +pub const Last_Virtual_Screen: u32 = 65236; +pub const Terminate_Server: u32 = 65237; +pub const AccessX_Enable: u32 = 65136; +pub const AccessX_Feedback_Enable: u32 = 65137; +pub const RepeatKeys_Enable: u32 = 65138; +pub const SlowKeys_Enable: u32 = 65139; +pub const BounceKeys_Enable: u32 = 65140; +pub const StickyKeys_Enable: u32 = 65141; +pub const MouseKeys_Enable: u32 = 65142; +pub const MouseKeys_Accel_Enable: u32 = 65143; +pub const Overlay1_Enable: u32 = 65144; +pub const Overlay2_Enable: u32 = 65145; +pub const AudibleBell_Enable: u32 = 65146; +pub const Pointer_Left: u32 = 65248; +pub const Pointer_Right: u32 = 65249; +pub const Pointer_Up: u32 = 65250; +pub const Pointer_Down: u32 = 65251; +pub const Pointer_UpLeft: u32 = 65252; +pub const Pointer_UpRight: u32 = 65253; +pub const Pointer_DownLeft: u32 = 65254; +pub const Pointer_DownRight: u32 = 65255; +pub const Pointer_Button_Dflt: u32 = 65256; +pub const Pointer_Button1: u32 = 65257; +pub const Pointer_Button2: u32 = 65258; +pub const Pointer_Button3: u32 = 65259; +pub const Pointer_Button4: u32 = 65260; +pub const Pointer_Button5: u32 = 65261; +pub const Pointer_DblClick_Dflt: u32 = 65262; +pub const Pointer_DblClick1: u32 = 65263; +pub const Pointer_DblClick2: u32 = 65264; +pub const Pointer_DblClick3: u32 = 65265; +pub const Pointer_DblClick4: u32 = 65266; +pub const Pointer_DblClick5: u32 = 65267; +pub const Pointer_Drag_Dflt: u32 = 65268; +pub const Pointer_Drag1: u32 = 65269; +pub const Pointer_Drag2: u32 = 65270; +pub const Pointer_Drag3: u32 = 65271; +pub const Pointer_Drag4: u32 = 65272; +pub const Pointer_Drag5: u32 = 65277; +pub const Pointer_EnableKeys: u32 = 65273; +pub const Pointer_Accelerate: u32 = 65274; +pub const Pointer_DfltBtnNext: u32 = 65275; +pub const Pointer_DfltBtnPrev: u32 = 65276; +pub const ch: u32 = 65184; +pub const Ch: u32 = 65185; +pub const CH: u32 = 65186; +pub const c_h: u32 = 65187; +pub const C_h: u32 = 65188; +pub const C_H: u32 = 65189; +pub const Duplicate_3270: u32 = 64769; +pub const FieldMark_3270: u32 = 64770; +pub const Right2_3270: u32 = 64771; +pub const Left2_3270: u32 = 64772; +pub const BackTab_3270: u32 = 64773; +pub const EraseEOF_3270: u32 = 64774; +pub const EraseInput_3270: u32 = 64775; +pub const Reset_3270: u32 = 64776; +pub const Quit_3270: u32 = 64777; +pub const PA1_3270: u32 = 64778; +pub const PA2_3270: u32 = 64779; +pub const PA3_3270: u32 = 64780; +pub const Test_3270: u32 = 64781; +pub const Attn_3270: u32 = 64782; +pub const CursorBlink_3270: u32 = 64783; +pub const AltCursor_3270: u32 = 64784; +pub const KeyClick_3270: u32 = 64785; +pub const Jump_3270: u32 = 64786; +pub const Ident_3270: u32 = 64787; +pub const Rule_3270: u32 = 64788; +pub const Copy_3270: u32 = 64789; +pub const Play_3270: u32 = 64790; +pub const Setup_3270: u32 = 64791; +pub const Record_3270: u32 = 64792; +pub const ChangeScreen_3270: u32 = 64793; +pub const DeleteWord_3270: u32 = 64794; +pub const ExSelect_3270: u32 = 64795; +pub const CursorSelect_3270: u32 = 64796; +pub const PrintScreen_3270: u32 = 64797; +pub const Enter_3270: u32 = 64798; +pub const SPACE: u32 = 32; +pub const EXCLAM: u32 = 33; +pub const QUOTEDBL: u32 = 34; +pub const NUMBERSIGN: u32 = 35; +pub const DOLLAR: u32 = 36; +pub const PERCENT: u32 = 37; +pub const APERSAND: u32 = 38; +pub const APOSTROPHE: u32 = 39; +pub const QUOTERIGHT: u32 = 39; +pub const PARENLEFT: u32 = 40; +pub const PARENRIGHT: u32 = 41; +pub const ASTERISK: u32 = 42; +pub const PLUS: u32 = 43; +pub const COMMA: u32 = 44; +pub const MINUS: u32 = 45; +pub const PERIOD: u32 = 46; +pub const SLASH: u32 = 47; +pub const N_0: u32 = 48; +pub const N_1: u32 = 49; +pub const N_2: u32 = 50; +pub const N_3: u32 = 51; +pub const N_4: u32 = 52; +pub const N_5: u32 = 53; +pub const N_6: u32 = 54; +pub const N_7: u32 = 55; +pub const N_8: u32 = 56; +pub const N_9: u32 = 57; +pub const COLON: u32 = 58; +pub const SEMICOLON: u32 = 59; +pub const LESS: u32 = 60; +pub const EQUAL: u32 = 61; +pub const GREATER: u32 = 62; +pub const QUESTION: u32 = 63; +pub const AT: u32 = 64; +pub const UPPER_A: u32 = 65; +pub const UPPER_B: u32 = 66; +pub const UPPER_C: u32 = 67; +pub const UPPER_D: u32 = 68; +pub const UPPER_E: u32 = 69; +pub const UPPER_F: u32 = 70; +pub const UPPER_G: u32 = 71; +pub const UPPER_H: u32 = 72; +pub const UPPER_I: u32 = 73; +pub const UPPER_J: u32 = 74; +pub const UPPER_K: u32 = 75; +pub const UPPER_L: u32 = 76; +pub const UPPER_M: u32 = 77; +pub const UPPER_N: u32 = 78; +pub const UPPER_O: u32 = 79; +pub const UPPER_P: u32 = 80; +pub const UPPER_Q: u32 = 81; +pub const UPPER_R: u32 = 82; +pub const UPPER_S: u32 = 83; +pub const UPPER_T: u32 = 84; +pub const UPPER_U: u32 = 85; +pub const UPPER_V: u32 = 86; +pub const UPPER_W: u32 = 87; +pub const UPPER_X: u32 = 88; +pub const UPPER_Y: u32 = 89; +pub const UPPER_Z: u32 = 90; +pub const BRACKETLEFT: u32 = 91; +pub const BACKSLASH: u32 = 92; +pub const BRACKETRIGHT: u32 = 93; +pub const ASCIICIRCUM: u32 = 94; +pub const UNDERSCORE: u32 = 95; +pub const GRAVE: u32 = 96; +pub const QUOTELEFT: u32 = 96; +pub const LOWER_A: u32 = 97; +pub const LOWER_B: u32 = 98; +pub const LOWER_C: u32 = 99; +pub const LOWER_D: u32 = 100; +pub const LOWER_E: u32 = 101; +pub const LOWER_F: u32 = 102; +pub const LOWER_G: u32 = 103; +pub const LOWER_H: u32 = 104; +pub const LOWER_I: u32 = 105; +pub const LOWER_J: u32 = 106; +pub const LOWER_K: u32 = 107; +pub const LOWER_L: u32 = 108; +pub const LOWER_M: u32 = 109; +pub const LOWER_N: u32 = 110; +pub const LOWER_O: u32 = 111; +pub const LOWER_P: u32 = 112; +pub const LOWER_Q: u32 = 113; +pub const LOWER_R: u32 = 114; +pub const LOWER_S: u32 = 115; +pub const LOWER_T: u32 = 116; +pub const LOWER_U: u32 = 117; +pub const LOWER_V: u32 = 118; +pub const LOWER_W: u32 = 119; +pub const LOWER_X: u32 = 120; +pub const LOWER_Y: u32 = 121; +pub const LOWER_Z: u32 = 122; +pub const BRACELEFT: u32 = 123; +pub const BAR: u32 = 124; +pub const BRACERIGHT: u32 = 125; +pub const ASCIITILDI: u32 = 126; +pub const NOBREAKSPACE: u32 = 160; +pub const EXCLAMDOWN: u32 = 161; +pub const cent: u32 = 162; +pub const sterling: u32 = 163; +pub const currency: u32 = 164; +pub const yen: u32 = 165; +pub const brokenbar: u32 = 166; +pub const section: u32 = 167; +pub const diaeresis: u32 = 168; +pub const copyright: u32 = 169; +pub const ordfeminine: u32 = 170; +pub const guillemotleft: u32 = 171; +pub const notsign: u32 = 172; +pub const hyphen: u32 = 173; +pub const registered: u32 = 174; +pub const macron: u32 = 175; +pub const degree: u32 = 176; +pub const plusminus: u32 = 177; +pub const twosuperior: u32 = 178; +pub const threesuperior: u32 = 179; +pub const acute: u32 = 180; +pub const mu: u32 = 181; +pub const paragraph: u32 = 182; +pub const periodcentered: u32 = 183; +pub const cedilla: u32 = 184; +pub const onesuperior: u32 = 185; +pub const masculine: u32 = 186; +pub const guillemotright: u32 = 187; +pub const onequarter: u32 = 188; +pub const onehalf: u32 = 189; +pub const threequarters: u32 = 190; +pub const questiondown: u32 = 191; +pub const Agrave: u32 = 192; +pub const Aacute: u32 = 193; +pub const Acircumflex: u32 = 194; +pub const Atilde: u32 = 195; +pub const Adiaeresis: u32 = 196; +pub const Aring: u32 = 197; +pub const AE: u32 = 198; +pub const Ccedilla: u32 = 199; +pub const Egrave: u32 = 200; +pub const Eacute: u32 = 201; +pub const Ecircumflex: u32 = 202; +pub const Ediaeresis: u32 = 203; +pub const Igrave: u32 = 204; +pub const Iacute: u32 = 205; +pub const Icircumflex: u32 = 206; +pub const Idiaeresis: u32 = 207; +pub const ETH: u32 = 208; +pub const Eth: u32 = 208; +pub const Ntilde: u32 = 209; +pub const Ograve: u32 = 210; +pub const Oacute: u32 = 211; +pub const Ocircumflex: u32 = 212; +pub const Otilde: u32 = 213; +pub const Odiaeresis: u32 = 214; +pub const multiply: u32 = 215; +pub const Oslash: u32 = 216; +pub const Ooblique: u32 = 216; +pub const Ugrave: u32 = 217; +pub const Uacute: u32 = 218; +pub const Ucircumflex: u32 = 219; +pub const Udiaeresis: u32 = 220; +pub const Yacute: u32 = 221; +pub const THORN: u32 = 222; +pub const Thorn: u32 = 222; +pub const ssharp: u32 = 223; +pub const agrave: u32 = 224; +pub const aacute: u32 = 225; +pub const acircumflex: u32 = 226; +pub const atilde: u32 = 227; +pub const adiaeresis: u32 = 228; +pub const aring: u32 = 229; +pub const ae: u32 = 230; +pub const ccedilla: u32 = 231; +pub const egrave: u32 = 232; +pub const eacute: u32 = 233; +pub const ecircumflex: u32 = 234; +pub const ediaeresis: u32 = 235; +pub const igrave: u32 = 236; +pub const iacute: u32 = 237; +pub const icircumflex: u32 = 238; +pub const idiaeresis: u32 = 239; +pub const eth: u32 = 240; +pub const ntilde: u32 = 241; +pub const ograve: u32 = 242; +pub const oacute: u32 = 243; +pub const ocircumflex: u32 = 244; +pub const otilde: u32 = 245; +pub const odiaeresis: u32 = 246; +pub const division: u32 = 247; +pub const oslash: u32 = 248; +pub const ooblique: u32 = 248; +pub const ugrave: u32 = 249; +pub const uacute: u32 = 250; +pub const ucircumflex: u32 = 251; +pub const udiaeresis: u32 = 252; +pub const yacute: u32 = 253; +pub const thorn: u32 = 254; +pub const ydiaeresis: u32 = 255; +pub const Aogonek: u32 = 417; +pub const breve: u32 = 418; +pub const Lstroke: u32 = 419; +pub const Lcaron: u32 = 421; +pub const Sacute: u32 = 422; +pub const Scaron: u32 = 425; +pub const Scedilla: u32 = 426; +pub const Tcaron: u32 = 427; +pub const Zacute: u32 = 428; +pub const Zcaron: u32 = 430; +pub const Zabovedot: u32 = 431; +pub const aogonek: u32 = 433; +pub const ogonek: u32 = 434; +pub const lstroke: u32 = 435; +pub const lcaron: u32 = 437; +pub const sacute: u32 = 438; +pub const caron: u32 = 439; +pub const scaron: u32 = 441; +pub const scedilla: u32 = 442; +pub const tcaron: u32 = 443; +pub const zacute: u32 = 444; +pub const doubleacute: u32 = 445; +pub const zcaron: u32 = 446; +pub const zabovedot: u32 = 447; +pub const Racute: u32 = 448; +pub const Abreve: u32 = 451; +pub const Lacute: u32 = 453; +pub const Cacute: u32 = 454; +pub const Ccaron: u32 = 456; +pub const Eogonek: u32 = 458; +pub const Ecaron: u32 = 460; +pub const Dcaron: u32 = 463; +pub const Dstroke: u32 = 464; +pub const Nacute: u32 = 465; +pub const Ncaron: u32 = 466; +pub const Odoubleacute: u32 = 469; +pub const Rcaron: u32 = 472; +pub const Uring: u32 = 473; +pub const Udoubleacute: u32 = 475; +pub const Tcedilla: u32 = 478; +pub const racute: u32 = 480; +pub const abreve: u32 = 483; +pub const lacute: u32 = 485; +pub const cacute: u32 = 486; +pub const ccaron: u32 = 488; +pub const eogonek: u32 = 490; +pub const ecaron: u32 = 492; +pub const dcaron: u32 = 495; +pub const dstroke: u32 = 496; +pub const nacute: u32 = 497; +pub const ncaron: u32 = 498; +pub const odoubleacute: u32 = 501; +pub const rcaron: u32 = 504; +pub const uring: u32 = 505; +pub const udoubleacute: u32 = 507; +pub const tcedilla: u32 = 510; +pub const abovedot: u32 = 511; +pub const Hstroke: u32 = 673; +pub const Hcircumflex: u32 = 678; +pub const Iabovedot: u32 = 681; +pub const Gbreve: u32 = 683; +pub const Jcircumflex: u32 = 684; +pub const hstroke: u32 = 689; +pub const hcircumflex: u32 = 694; +pub const idotless: u32 = 697; +pub const gbreve: u32 = 699; +pub const jcircumflex: u32 = 700; +pub const Cabovedot: u32 = 709; +pub const Ccircumflex: u32 = 710; +pub const Gabovedot: u32 = 725; +pub const Gcircumflex: u32 = 728; +pub const Ubreve: u32 = 733; +pub const Scircumflex: u32 = 734; +pub const cabovedot: u32 = 741; +pub const ccircumflex: u32 = 742; +pub const gabovedot: u32 = 757; +pub const gcircumflex: u32 = 760; +pub const ubreve: u32 = 765; +pub const scircumflex: u32 = 766; +pub const kra: u32 = 930; +pub const kappa: u32 = 930; +pub const Rcedilla: u32 = 931; +pub const Itilde: u32 = 933; +pub const Lcedilla: u32 = 934; +pub const Emacron: u32 = 938; +pub const Gcedilla: u32 = 939; +pub const Tslash: u32 = 940; +pub const rcedilla: u32 = 947; +pub const itilde: u32 = 949; +pub const lcedilla: u32 = 950; +pub const emacron: u32 = 954; +pub const gcedilla: u32 = 955; +pub const tslash: u32 = 956; +pub const ENG: u32 = 957; +pub const eng: u32 = 959; +pub const Amacron: u32 = 960; +pub const Iogonek: u32 = 967; +pub const Eabovedot: u32 = 972; +pub const Imacron: u32 = 975; +pub const Ncedilla: u32 = 977; +pub const Omacron: u32 = 978; +pub const Kcedilla: u32 = 979; +pub const Uogonek: u32 = 985; +pub const Utilde: u32 = 989; +pub const Umacron: u32 = 990; +pub const amacron: u32 = 992; +pub const iogonek: u32 = 999; +pub const eabovedot: u32 = 1004; +pub const imacron: u32 = 1007; +pub const ncedilla: u32 = 1009; +pub const omacron: u32 = 1010; +pub const kcedilla: u32 = 1011; +pub const uogonek: u32 = 1017; +pub const utilde: u32 = 1021; +pub const umacron: u32 = 1022; +pub const Wcircumflex: u32 = 16777588; +pub const wcircumflex: u32 = 16777589; +pub const Ycircumflex: u32 = 16777590; +pub const ycircumflex: u32 = 16777591; +pub const Babovedot: u32 = 16784898; +pub const babovedot: u32 = 16784899; +pub const Dabovedot: u32 = 16784906; +pub const dabovedot: u32 = 16784907; +pub const Fabovedot: u32 = 16784926; +pub const fabovedot: u32 = 16784927; +pub const Mabovedot: u32 = 16784960; +pub const mabovedot: u32 = 16784961; +pub const Pabovedot: u32 = 16784982; +pub const pabovedot: u32 = 16784983; +pub const Sabovedot: u32 = 16784992; +pub const sabovedot: u32 = 16784993; +pub const Tabovedot: u32 = 16785002; +pub const tabovedot: u32 = 16785003; +pub const Wgrave: u32 = 16785024; +pub const wgrave: u32 = 16785025; +pub const Wacute: u32 = 16785026; +pub const wacute: u32 = 16785027; +pub const Wdiaeresis: u32 = 16785028; +pub const wdiaeresis: u32 = 16785029; +pub const Ygrave: u32 = 16785138; +pub const ygrave: u32 = 16785139; +pub const OE: u32 = 5052; +pub const oe: u32 = 5053; +pub const Ydiaeresis: u32 = 5054; +pub const overline: u32 = 1150; +pub const kana_fullstop: u32 = 1185; +pub const kana_openingbracket: u32 = 1186; +pub const kana_closingbracket: u32 = 1187; +pub const kana_comma: u32 = 1188; +pub const kana_conjunctive: u32 = 1189; +pub const kana_middledot: u32 = 1189; +pub const kana_WO: u32 = 1190; +pub const kana_a: u32 = 1191; +pub const kana_i: u32 = 1192; +pub const kana_u: u32 = 1193; +pub const kana_e: u32 = 1194; +pub const kana_o: u32 = 1195; +pub const kana_ya: u32 = 1196; +pub const kana_yu: u32 = 1197; +pub const kana_yo: u32 = 1198; +pub const kana_tsu: u32 = 1199; +pub const kana_tu: u32 = 1199; +pub const prolongedsound: u32 = 1200; +pub const kana_A: u32 = 1201; +pub const kana_I: u32 = 1202; +pub const kana_U: u32 = 1203; +pub const kana_E: u32 = 1204; +pub const kana_O: u32 = 1205; +pub const kana_KA: u32 = 1206; +pub const kana_KI: u32 = 1207; +pub const kana_KU: u32 = 1208; +pub const kana_KE: u32 = 1209; +pub const kana_KO: u32 = 1210; +pub const kana_SA: u32 = 1211; +pub const kana_SHI: u32 = 1212; +pub const kana_SU: u32 = 1213; +pub const kana_SE: u32 = 1214; +pub const kana_SO: u32 = 1215; +pub const kana_TA: u32 = 1216; +pub const kana_CHI: u32 = 1217; +pub const kana_TI: u32 = 1217; +pub const kana_TSU: u32 = 1218; +pub const kana_TU: u32 = 1218; +pub const kana_TE: u32 = 1219; +pub const kana_TO: u32 = 1220; +pub const kana_NA: u32 = 1221; +pub const kana_NI: u32 = 1222; +pub const kana_NU: u32 = 1223; +pub const kana_NE: u32 = 1224; +pub const kana_NO: u32 = 1225; +pub const kana_HA: u32 = 1226; +pub const kana_HI: u32 = 1227; +pub const kana_FU: u32 = 1228; +pub const kana_HU: u32 = 1228; +pub const kana_HE: u32 = 1229; +pub const kana_HO: u32 = 1230; +pub const kana_MA: u32 = 1231; +pub const kana_MI: u32 = 1232; +pub const kana_MU: u32 = 1233; +pub const kana_ME: u32 = 1234; +pub const kana_MO: u32 = 1235; +pub const kana_YA: u32 = 1236; +pub const kana_YU: u32 = 1237; +pub const kana_YO: u32 = 1238; +pub const kana_RA: u32 = 1239; +pub const kana_RI: u32 = 1240; +pub const kana_RU: u32 = 1241; +pub const kana_RE: u32 = 1242; +pub const kana_RO: u32 = 1243; +pub const kana_WA: u32 = 1244; +pub const kana_N: u32 = 1245; +pub const voicedsound: u32 = 1246; +pub const semivoicedsound: u32 = 1247; +pub const kana_switch: u32 = 65406; +pub const Farsi_0: u32 = 16778992; +pub const Farsi_1: u32 = 16778993; +pub const Farsi_2: u32 = 16778994; +pub const Farsi_3: u32 = 16778995; +pub const Farsi_4: u32 = 16778996; +pub const Farsi_5: u32 = 16778997; +pub const Farsi_6: u32 = 16778998; +pub const Farsi_7: u32 = 16778999; +pub const Farsi_8: u32 = 16779000; +pub const Farsi_9: u32 = 16779001; +pub const Arabic_percent: u32 = 16778858; +pub const Arabic_superscript_alef: u32 = 16778864; +pub const Arabic_tteh: u32 = 16778873; +pub const Arabic_peh: u32 = 16778878; +pub const Arabic_tcheh: u32 = 16778886; +pub const Arabic_ddal: u32 = 16778888; +pub const Arabic_rreh: u32 = 16778897; +pub const Arabic_comma: u32 = 1452; +pub const Arabic_fullstop: u32 = 16778964; +pub const Arabic_0: u32 = 16778848; +pub const Arabic_1: u32 = 16778849; +pub const Arabic_2: u32 = 16778850; +pub const Arabic_3: u32 = 16778851; +pub const Arabic_4: u32 = 16778852; +pub const Arabic_5: u32 = 16778853; +pub const Arabic_6: u32 = 16778854; +pub const Arabic_7: u32 = 16778855; +pub const Arabic_8: u32 = 16778856; +pub const Arabic_9: u32 = 16778857; +pub const Arabic_semicolon: u32 = 1467; +pub const Arabic_question_mark: u32 = 1471; +pub const Arabic_hamza: u32 = 1473; +pub const Arabic_maddaonalef: u32 = 1474; +pub const Arabic_hamzaonalef: u32 = 1475; +pub const Arabic_hamzaonwaw: u32 = 1476; +pub const Arabic_hamzaunderalef: u32 = 1477; +pub const Arabic_hamzaonyeh: u32 = 1478; +pub const Arabic_alef: u32 = 1479; +pub const Arabic_beh: u32 = 1480; +pub const Arabic_tehmarbuta: u32 = 1481; +pub const Arabic_teh: u32 = 1482; +pub const Arabic_theh: u32 = 1483; +pub const Arabic_jeem: u32 = 1484; +pub const Arabic_hah: u32 = 1485; +pub const Arabic_khah: u32 = 1486; +pub const Arabic_dal: u32 = 1487; +pub const Arabic_thal: u32 = 1488; +pub const Arabic_ra: u32 = 1489; +pub const Arabic_zain: u32 = 1490; +pub const Arabic_seen: u32 = 1491; +pub const Arabic_sheen: u32 = 1492; +pub const Arabic_sad: u32 = 1493; +pub const Arabic_dad: u32 = 1494; +pub const Arabic_tah: u32 = 1495; +pub const Arabic_zah: u32 = 1496; +pub const Arabic_ain: u32 = 1497; +pub const Arabic_ghain: u32 = 1498; +pub const Arabic_tatweel: u32 = 1504; +pub const Arabic_feh: u32 = 1505; +pub const Arabic_qaf: u32 = 1506; +pub const Arabic_kaf: u32 = 1507; +pub const Arabic_lam: u32 = 1508; +pub const Arabic_meem: u32 = 1509; +pub const Arabic_noon: u32 = 1510; +pub const Arabic_ha: u32 = 1511; +pub const Arabic_heh: u32 = 1511; +pub const Arabic_waw: u32 = 1512; +pub const Arabic_alefmaksura: u32 = 1513; +pub const Arabic_yeh: u32 = 1514; +pub const Arabic_fathatan: u32 = 1515; +pub const Arabic_dammatan: u32 = 1516; +pub const Arabic_kasratan: u32 = 1517; +pub const Arabic_fatha: u32 = 1518; +pub const Arabic_damma: u32 = 1519; +pub const Arabic_kasra: u32 = 1520; +pub const Arabic_shadda: u32 = 1521; +pub const Arabic_sukun: u32 = 1522; +pub const Arabic_madda_above: u32 = 16778835; +pub const Arabic_hamza_above: u32 = 16778836; +pub const Arabic_hamza_below: u32 = 16778837; +pub const Arabic_jeh: u32 = 16778904; +pub const Arabic_veh: u32 = 16778916; +pub const Arabic_keheh: u32 = 16778921; +pub const Arabic_gaf: u32 = 16778927; +pub const Arabic_noon_ghunna: u32 = 16778938; +pub const Arabic_heh_doachashmee: u32 = 16778942; +pub const Farsi_yeh: u32 = 16778956; +pub const Arabic_farsi_yeh: u32 = 16778956; +pub const Arabic_yeh_baree: u32 = 16778962; +pub const Arabic_heh_goal: u32 = 16778945; +pub const Arabic_switch: u32 = 65406; +pub const Cyrillic_GHE_bar: u32 = 16778386; +pub const Cyrillic_ghe_bar: u32 = 16778387; +pub const Cyrillic_ZHE_descender: u32 = 16778390; +pub const Cyrillic_zhe_descender: u32 = 16778391; +pub const Cyrillic_KA_descender: u32 = 16778394; +pub const Cyrillic_ka_descender: u32 = 16778395; +pub const Cyrillic_KA_vertstroke: u32 = 16778396; +pub const Cyrillic_ka_vertstroke: u32 = 16778397; +pub const Cyrillic_EN_descender: u32 = 16778402; +pub const Cyrillic_en_descender: u32 = 16778403; +pub const Cyrillic_U_straight: u32 = 16778414; +pub const Cyrillic_u_straight: u32 = 16778415; +pub const Cyrillic_U_straight_bar: u32 = 16778416; +pub const Cyrillic_u_straight_bar: u32 = 16778417; +pub const Cyrillic_HA_descender: u32 = 16778418; +pub const Cyrillic_ha_descender: u32 = 16778419; +pub const Cyrillic_CHE_descender: u32 = 16778422; +pub const Cyrillic_che_descender: u32 = 16778423; +pub const Cyrillic_CHE_vertstroke: u32 = 16778424; +pub const Cyrillic_che_vertstroke: u32 = 16778425; +pub const Cyrillic_SHHA: u32 = 16778426; +pub const Cyrillic_shha: u32 = 16778427; +pub const Cyrillic_SCHWA: u32 = 16778456; +pub const Cyrillic_schwa: u32 = 16778457; +pub const Cyrillic_I_macron: u32 = 16778466; +pub const Cyrillic_i_macron: u32 = 16778467; +pub const Cyrillic_O_bar: u32 = 16778472; +pub const Cyrillic_o_bar: u32 = 16778473; +pub const Cyrillic_U_macron: u32 = 16778478; +pub const Cyrillic_u_macron: u32 = 16778479; +pub const Serbian_dje: u32 = 1697; +pub const Macedonia_gje: u32 = 1698; +pub const Cyrillic_io: u32 = 1699; +pub const Ukrainian_ie: u32 = 1700; +pub const Ukranian_je: u32 = 1700; +pub const Macedonia_dse: u32 = 1701; +pub const Ukrainian_i: u32 = 1702; +pub const Ukranian_i: u32 = 1702; +pub const Ukrainian_yi: u32 = 1703; +pub const Ukranian_yi: u32 = 1703; +pub const Cyrillic_je: u32 = 1704; +pub const Serbian_je: u32 = 1704; +pub const Cyrillic_lje: u32 = 1705; +pub const Serbian_lje: u32 = 1705; +pub const Cyrillic_nje: u32 = 1706; +pub const Serbian_nje: u32 = 1706; +pub const Serbian_tshe: u32 = 1707; +pub const Macedonia_kje: u32 = 1708; +pub const Ukrainian_ghe_with_upturn: u32 = 1709; +pub const Byelorussian_shortu: u32 = 1710; +pub const Cyrillic_dzhe: u32 = 1711; +pub const Serbian_dze: u32 = 1711; +pub const numerosign: u32 = 1712; +pub const Serbian_DJE: u32 = 1713; +pub const Macedonia_GJE: u32 = 1714; +pub const Cyrillic_IO: u32 = 1715; +pub const Ukrainian_IE: u32 = 1716; +pub const Ukranian_JE: u32 = 1716; +pub const Macedonia_DSE: u32 = 1717; +pub const Ukrainian_I: u32 = 1718; +pub const Ukranian_I: u32 = 1718; +pub const Ukrainian_YI: u32 = 1719; +pub const Ukranian_YI: u32 = 1719; +pub const Cyrillic_JE: u32 = 1720; +pub const Serbian_JE: u32 = 1720; +pub const Cyrillic_LJE: u32 = 1721; +pub const Serbian_LJE: u32 = 1721; +pub const Cyrillic_NJE: u32 = 1722; +pub const Serbian_NJE: u32 = 1722; +pub const Serbian_TSHE: u32 = 1723; +pub const Macedonia_KJE: u32 = 1724; +pub const Ukrainian_GHE_WITH_UPTURN: u32 = 1725; +pub const Byelorussian_SHORTU: u32 = 1726; +pub const Cyrillic_DZHE: u32 = 1727; +pub const Serbian_DZE: u32 = 1727; +pub const Cyrillic_yu: u32 = 1728; +pub const Cyrillic_a: u32 = 1729; +pub const Cyrillic_be: u32 = 1730; +pub const Cyrillic_tse: u32 = 1731; +pub const Cyrillic_de: u32 = 1732; +pub const Cyrillic_ie: u32 = 1733; +pub const Cyrillic_ef: u32 = 1734; +pub const Cyrillic_ghe: u32 = 1735; +pub const Cyrillic_ha: u32 = 1736; +pub const Cyrillic_i: u32 = 1737; +pub const Cyrillic_shorti: u32 = 1738; +pub const Cyrillic_ka: u32 = 1739; +pub const Cyrillic_el: u32 = 1740; +pub const Cyrillic_em: u32 = 1741; +pub const Cyrillic_en: u32 = 1742; +pub const Cyrillic_o: u32 = 1743; +pub const Cyrillic_pe: u32 = 1744; +pub const Cyrillic_ya: u32 = 1745; +pub const Cyrillic_er: u32 = 1746; +pub const Cyrillic_es: u32 = 1747; +pub const Cyrillic_te: u32 = 1748; +pub const Cyrillic_u: u32 = 1749; +pub const Cyrillic_zhe: u32 = 1750; +pub const Cyrillic_ve: u32 = 1751; +pub const Cyrillic_softsign: u32 = 1752; +pub const Cyrillic_yeru: u32 = 1753; +pub const Cyrillic_ze: u32 = 1754; +pub const Cyrillic_sha: u32 = 1755; +pub const Cyrillic_e: u32 = 1756; +pub const Cyrillic_shcha: u32 = 1757; +pub const Cyrillic_che: u32 = 1758; +pub const Cyrillic_hardsign: u32 = 1759; +pub const Cyrillic_YU: u32 = 1760; +pub const Cyrillic_A: u32 = 1761; +pub const Cyrillic_BE: u32 = 1762; +pub const Cyrillic_TSE: u32 = 1763; +pub const Cyrillic_DE: u32 = 1764; +pub const Cyrillic_IE: u32 = 1765; +pub const Cyrillic_EF: u32 = 1766; +pub const Cyrillic_GHE: u32 = 1767; +pub const Cyrillic_HA: u32 = 1768; +pub const Cyrillic_I: u32 = 1769; +pub const Cyrillic_SHORTI: u32 = 1770; +pub const Cyrillic_KA: u32 = 1771; +pub const Cyrillic_EL: u32 = 1772; +pub const Cyrillic_EM: u32 = 1773; +pub const Cyrillic_EN: u32 = 1774; +pub const Cyrillic_O: u32 = 1775; +pub const Cyrillic_PE: u32 = 1776; +pub const Cyrillic_YA: u32 = 1777; +pub const Cyrillic_ER: u32 = 1778; +pub const Cyrillic_ES: u32 = 1779; +pub const Cyrillic_TE: u32 = 1780; +pub const Cyrillic_U: u32 = 1781; +pub const Cyrillic_ZHE: u32 = 1782; +pub const Cyrillic_VE: u32 = 1783; +pub const Cyrillic_SOFTSIGN: u32 = 1784; +pub const Cyrillic_YERU: u32 = 1785; +pub const Cyrillic_ZE: u32 = 1786; +pub const Cyrillic_SHA: u32 = 1787; +pub const Cyrillic_E: u32 = 1788; +pub const Cyrillic_SHCHA: u32 = 1789; +pub const Cyrillic_CHE: u32 = 1790; +pub const Cyrillic_HARDSIGN: u32 = 1791; +pub const Greek_ALPHAaccent: u32 = 1953; +pub const Greek_EPSILONaccent: u32 = 1954; +pub const Greek_ETAaccent: u32 = 1955; +pub const Greek_IOTAaccent: u32 = 1956; +pub const Greek_IOTAdieresis: u32 = 1957; +pub const Greek_IOTAdiaeresis: u32 = 1957; +pub const Greek_OMICRONaccent: u32 = 1959; +pub const Greek_UPSILONaccent: u32 = 1960; +pub const Greek_UPSILONdieresis: u32 = 1961; +pub const Greek_OMEGAaccent: u32 = 1963; +pub const Greek_accentdieresis: u32 = 1966; +pub const Greek_horizbar: u32 = 1967; +pub const Greek_alphaaccent: u32 = 1969; +pub const Greek_epsilonaccent: u32 = 1970; +pub const Greek_etaaccent: u32 = 1971; +pub const Greek_iotaaccent: u32 = 1972; +pub const Greek_iotadieresis: u32 = 1973; +pub const Greek_iotaaccentdieresis: u32 = 1974; +pub const Greek_omicronaccent: u32 = 1975; +pub const Greek_upsilonaccent: u32 = 1976; +pub const Greek_upsilondieresis: u32 = 1977; +pub const Greek_upsilonaccentdieresis: u32 = 1978; +pub const Greek_omegaaccent: u32 = 1979; +pub const Greek_ALPHA: u32 = 1985; +pub const Greek_BETA: u32 = 1986; +pub const Greek_GAMMA: u32 = 1987; +pub const Greek_DELTA: u32 = 1988; +pub const Greek_EPSILON: u32 = 1989; +pub const Greek_ZETA: u32 = 1990; +pub const Greek_ETA: u32 = 1991; +pub const Greek_THETA: u32 = 1992; +pub const Greek_IOTA: u32 = 1993; +pub const Greek_KAPPA: u32 = 1994; +pub const Greek_LAMDA: u32 = 1995; +pub const Greek_LAMBDA: u32 = 1995; +pub const Greek_MU: u32 = 1996; +pub const Greek_NU: u32 = 1997; +pub const Greek_XI: u32 = 1998; +pub const Greek_OMICRON: u32 = 1999; +pub const Greek_PI: u32 = 2000; +pub const Greek_RHO: u32 = 2001; +pub const Greek_SIGMA: u32 = 2002; +pub const Greek_TAU: u32 = 2004; +pub const Greek_UPSILON: u32 = 2005; +pub const Greek_PHI: u32 = 2006; +pub const Greek_CHI: u32 = 2007; +pub const Greek_PSI: u32 = 2008; +pub const Greek_OMEGA: u32 = 2009; +pub const Greek_alpha: u32 = 2017; +pub const Greek_beta: u32 = 2018; +pub const Greek_gamma: u32 = 2019; +pub const Greek_delta: u32 = 2020; +pub const Greek_epsilon: u32 = 2021; +pub const Greek_zeta: u32 = 2022; +pub const Greek_eta: u32 = 2023; +pub const Greek_theta: u32 = 2024; +pub const Greek_iota: u32 = 2025; +pub const Greek_kappa: u32 = 2026; +pub const Greek_lamda: u32 = 2027; +pub const Greek_lambda: u32 = 2027; +pub const Greek_mu: u32 = 2028; +pub const Greek_nu: u32 = 2029; +pub const Greek_xi: u32 = 2030; +pub const Greek_omicron: u32 = 2031; +pub const Greek_pi: u32 = 2032; +pub const Greek_rho: u32 = 2033; +pub const Greek_sigma: u32 = 2034; +pub const Greek_finalsmallsigma: u32 = 2035; +pub const Greek_tau: u32 = 2036; +pub const Greek_upsilon: u32 = 2037; +pub const Greek_phi: u32 = 2038; +pub const Greek_chi: u32 = 2039; +pub const Greek_psi: u32 = 2040; +pub const Greek_omega: u32 = 2041; +pub const Greek_switch: u32 = 65406; +pub const leftradical: u32 = 2209; +pub const topleftradical: u32 = 2210; +pub const horizconnector: u32 = 2211; +pub const topintegral: u32 = 2212; +pub const botintegral: u32 = 2213; +pub const vertconnector: u32 = 2214; +pub const topleftsqbracket: u32 = 2215; +pub const botleftsqbracket: u32 = 2216; +pub const toprightsqbracket: u32 = 2217; +pub const botrightsqbracket: u32 = 2218; +pub const topleftparens: u32 = 2219; +pub const botleftparens: u32 = 2220; +pub const toprightparens: u32 = 2221; +pub const botrightparens: u32 = 2222; +pub const leftmiddlecurlybrace: u32 = 2223; +pub const rightmiddlecurlybrace: u32 = 2224; +pub const topleftsummation: u32 = 2225; +pub const botleftsummation: u32 = 2226; +pub const topvertsummationconnector: u32 = 2227; +pub const botvertsummationconnector: u32 = 2228; +pub const toprightsummation: u32 = 2229; +pub const botrightsummation: u32 = 2230; +pub const rightmiddlesummation: u32 = 2231; +pub const lessthanequal: u32 = 2236; +pub const notequal: u32 = 2237; +pub const greaterthanequal: u32 = 2238; +pub const integral: u32 = 2239; +pub const therefore: u32 = 2240; +pub const variation: u32 = 2241; +pub const infinity: u32 = 2242; +pub const nabla: u32 = 2245; +pub const approximate: u32 = 2248; +pub const similarequal: u32 = 2249; +pub const ifonlyif: u32 = 2253; +pub const implies: u32 = 2254; +pub const identical: u32 = 2255; +pub const radical: u32 = 2262; +pub const includedin: u32 = 2266; +pub const includes: u32 = 2267; +pub const intersection: u32 = 2268; +pub const union: u32 = 2269; +pub const logicaland: u32 = 2270; +pub const logicalor: u32 = 2271; +pub const partialderivative: u32 = 2287; +pub const function: u32 = 2294; +pub const leftarrow: u32 = 2299; +pub const uparrow: u32 = 2300; +pub const rightarrow: u32 = 2301; +pub const downarrow: u32 = 2302; +pub const blank: u32 = 2527; +pub const soliddiamond: u32 = 2528; +pub const checkerboard: u32 = 2529; +pub const ht: u32 = 2530; +pub const ff: u32 = 2531; +pub const cr: u32 = 2532; +pub const lf: u32 = 2533; +pub const nl: u32 = 2536; +pub const vt: u32 = 2537; +pub const lowrightcorner: u32 = 2538; +pub const uprightcorner: u32 = 2539; +pub const upleftcorner: u32 = 2540; +pub const lowleftcorner: u32 = 2541; +pub const crossinglines: u32 = 2542; +pub const horizlinescan1: u32 = 2543; +pub const horizlinescan3: u32 = 2544; +pub const horizlinescan5: u32 = 2545; +pub const horizlinescan7: u32 = 2546; +pub const horizlinescan9: u32 = 2547; +pub const leftt: u32 = 2548; +pub const rightt: u32 = 2549; +pub const bott: u32 = 2550; +pub const topt: u32 = 2551; +pub const vertbar: u32 = 2552; +pub const emspace: u32 = 2721; +pub const enspace: u32 = 2722; +pub const em3space: u32 = 2723; +pub const em4space: u32 = 2724; +pub const digitspace: u32 = 2725; +pub const punctspace: u32 = 2726; +pub const thinspace: u32 = 2727; +pub const hairspace: u32 = 2728; +pub const emdash: u32 = 2729; +pub const endash: u32 = 2730; +pub const signifblank: u32 = 2732; +pub const ellipsis: u32 = 2734; +pub const doubbaselinedot: u32 = 2735; +pub const onethird: u32 = 2736; +pub const twothirds: u32 = 2737; +pub const onefifth: u32 = 2738; +pub const twofifths: u32 = 2739; +pub const threefifths: u32 = 2740; +pub const fourfifths: u32 = 2741; +pub const onesixth: u32 = 2742; +pub const fivesixths: u32 = 2743; +pub const careof: u32 = 2744; +pub const figdash: u32 = 2747; +pub const leftanglebracket: u32 = 2748; +pub const decimalpoint: u32 = 2749; +pub const rightanglebracket: u32 = 2750; +pub const marker: u32 = 2751; +pub const oneeighth: u32 = 2755; +pub const threeeighths: u32 = 2756; +pub const fiveeighths: u32 = 2757; +pub const seveneighths: u32 = 2758; +pub const trademark: u32 = 2761; +pub const signaturemark: u32 = 2762; +pub const trademarkincircle: u32 = 2763; +pub const leftopentriangle: u32 = 2764; +pub const rightopentriangle: u32 = 2765; +pub const emopencircle: u32 = 2766; +pub const emopenrectangle: u32 = 2767; +pub const leftsinglequotemark: u32 = 2768; +pub const rightsinglequotemark: u32 = 2769; +pub const leftdoublequotemark: u32 = 2770; +pub const rightdoublequotemark: u32 = 2771; +pub const prescription: u32 = 2772; +pub const permille: u32 = 2773; +pub const minutes: u32 = 2774; +pub const seconds: u32 = 2775; +pub const latincross: u32 = 2777; +pub const hexagram: u32 = 2778; +pub const filledrectbullet: u32 = 2779; +pub const filledlefttribullet: u32 = 2780; +pub const filledrighttribullet: u32 = 2781; +pub const emfilledcircle: u32 = 2782; +pub const emfilledrect: u32 = 2783; +pub const enopencircbullet: u32 = 2784; +pub const enopensquarebullet: u32 = 2785; +pub const openrectbullet: u32 = 2786; +pub const opentribulletup: u32 = 2787; +pub const opentribulletdown: u32 = 2788; +pub const openstar: u32 = 2789; +pub const enfilledcircbullet: u32 = 2790; +pub const enfilledsqbullet: u32 = 2791; +pub const filledtribulletup: u32 = 2792; +pub const filledtribulletdown: u32 = 2793; +pub const leftpointer: u32 = 2794; +pub const rightpointer: u32 = 2795; +pub const club: u32 = 2796; +pub const diamond: u32 = 2797; +pub const heart: u32 = 2798; +pub const maltesecross: u32 = 2800; +pub const dagger: u32 = 2801; +pub const doubledagger: u32 = 2802; +pub const checkmark: u32 = 2803; +pub const ballotcross: u32 = 2804; +pub const musicalsharp: u32 = 2805; +pub const musicalflat: u32 = 2806; +pub const malesymbol: u32 = 2807; +pub const femalesymbol: u32 = 2808; +pub const telephone: u32 = 2809; +pub const telephonerecorder: u32 = 2810; +pub const phonographcopyright: u32 = 2811; +pub const caret: u32 = 2812; +pub const singlelowquotemark: u32 = 2813; +pub const doublelowquotemark: u32 = 2814; +pub const cursor: u32 = 2815; +pub const leftcaret: u32 = 2979; +pub const rightcaret: u32 = 2982; +pub const downcaret: u32 = 2984; +pub const upcaret: u32 = 2985; +pub const overbar: u32 = 3008; +pub const downtack: u32 = 3010; +pub const upshoe: u32 = 3011; +pub const downstile: u32 = 3012; +pub const underbar: u32 = 3014; +pub const jot: u32 = 3018; +pub const quad: u32 = 3020; +pub const uptack: u32 = 3022; +pub const circle: u32 = 3023; +pub const upstile: u32 = 3027; +pub const downshoe: u32 = 3030; +pub const rightshoe: u32 = 3032; +pub const leftshoe: u32 = 3034; +pub const lefttack: u32 = 3036; +pub const righttack: u32 = 3068; +pub const hebrew_doublelowline: u32 = 3295; +pub const hebrew_aleph: u32 = 3296; +pub const hebrew_bet: u32 = 3297; +pub const hebrew_beth: u32 = 3297; +pub const hebrew_gimel: u32 = 3298; +pub const hebrew_gimmel: u32 = 3298; +pub const hebrew_dalet: u32 = 3299; +pub const hebrew_daleth: u32 = 3299; +pub const hebrew_he: u32 = 3300; +pub const hebrew_waw: u32 = 3301; +pub const hebrew_zain: u32 = 3302; +pub const hebrew_zayin: u32 = 3302; +pub const hebrew_chet: u32 = 3303; +pub const hebrew_het: u32 = 3303; +pub const hebrew_tet: u32 = 3304; +pub const hebrew_teth: u32 = 3304; +pub const hebrew_yod: u32 = 3305; +pub const hebrew_finalkaph: u32 = 3306; +pub const hebrew_kaph: u32 = 3307; +pub const hebrew_lamed: u32 = 3308; +pub const hebrew_finalmem: u32 = 3309; +pub const hebrew_mem: u32 = 3310; +pub const hebrew_finalnun: u32 = 3311; +pub const hebrew_nun: u32 = 3312; +pub const hebrew_samech: u32 = 3313; +pub const hebrew_samekh: u32 = 3313; +pub const hebrew_ayin: u32 = 3314; +pub const hebrew_finalpe: u32 = 3315; +pub const hebrew_pe: u32 = 3316; +pub const hebrew_finalzade: u32 = 3317; +pub const hebrew_finalzadi: u32 = 3317; +pub const hebrew_zade: u32 = 3318; +pub const hebrew_zadi: u32 = 3318; +pub const hebrew_qoph: u32 = 3319; +pub const hebrew_kuf: u32 = 3319; +pub const hebrew_resh: u32 = 3320; +pub const hebrew_shin: u32 = 3321; +pub const hebrew_taw: u32 = 3322; +pub const hebrew_taf: u32 = 3322; +pub const Hebrew_switch: u32 = 65406; +pub const Thai_kokai: u32 = 3489; +pub const Thai_khokhai: u32 = 3490; +pub const Thai_khokhuat: u32 = 3491; +pub const Thai_khokhwai: u32 = 3492; +pub const Thai_khokhon: u32 = 3493; +pub const Thai_khorakhang: u32 = 3494; +pub const Thai_ngongu: u32 = 3495; +pub const Thai_chochan: u32 = 3496; +pub const Thai_choching: u32 = 3497; +pub const Thai_chochang: u32 = 3498; +pub const Thai_soso: u32 = 3499; +pub const Thai_chochoe: u32 = 3500; +pub const Thai_yoying: u32 = 3501; +pub const Thai_dochada: u32 = 3502; +pub const Thai_topatak: u32 = 3503; +pub const Thai_thothan: u32 = 3504; +pub const Thai_thonangmontho: u32 = 3505; +pub const Thai_thophuthao: u32 = 3506; +pub const Thai_nonen: u32 = 3507; +pub const Thai_dodek: u32 = 3508; +pub const Thai_totao: u32 = 3509; +pub const Thai_thothung: u32 = 3510; +pub const Thai_thothahan: u32 = 3511; +pub const Thai_thothong: u32 = 3512; +pub const Thai_nonu: u32 = 3513; +pub const Thai_bobaimai: u32 = 3514; +pub const Thai_popla: u32 = 3515; +pub const Thai_phophung: u32 = 3516; +pub const Thai_fofa: u32 = 3517; +pub const Thai_phophan: u32 = 3518; +pub const Thai_fofan: u32 = 3519; +pub const Thai_phosamphao: u32 = 3520; +pub const Thai_moma: u32 = 3521; +pub const Thai_yoyak: u32 = 3522; +pub const Thai_rorua: u32 = 3523; +pub const Thai_ru: u32 = 3524; +pub const Thai_loling: u32 = 3525; +pub const Thai_lu: u32 = 3526; +pub const Thai_wowaen: u32 = 3527; +pub const Thai_sosala: u32 = 3528; +pub const Thai_sorusi: u32 = 3529; +pub const Thai_sosua: u32 = 3530; +pub const Thai_hohip: u32 = 3531; +pub const Thai_lochula: u32 = 3532; +pub const Thai_oang: u32 = 3533; +pub const Thai_honokhuk: u32 = 3534; +pub const Thai_paiyannoi: u32 = 3535; +pub const Thai_saraa: u32 = 3536; +pub const Thai_maihanakat: u32 = 3537; +pub const Thai_saraaa: u32 = 3538; +pub const Thai_saraam: u32 = 3539; +pub const Thai_sarai: u32 = 3540; +pub const Thai_saraii: u32 = 3541; +pub const Thai_saraue: u32 = 3542; +pub const Thai_sarauee: u32 = 3543; +pub const Thai_sarau: u32 = 3544; +pub const Thai_sarauu: u32 = 3545; +pub const Thai_phinthu: u32 = 3546; +pub const Thai_maihanakat_maitho: u32 = 3550; +pub const Thai_baht: u32 = 3551; +pub const Thai_sarae: u32 = 3552; +pub const Thai_saraae: u32 = 3553; +pub const Thai_sarao: u32 = 3554; +pub const Thai_saraaimaimuan: u32 = 3555; +pub const Thai_saraaimaimalai: u32 = 3556; +pub const Thai_lakkhangyao: u32 = 3557; +pub const Thai_maiyamok: u32 = 3558; +pub const Thai_maitaikhu: u32 = 3559; +pub const Thai_maiek: u32 = 3560; +pub const Thai_maitho: u32 = 3561; +pub const Thai_maitri: u32 = 3562; +pub const Thai_maichattawa: u32 = 3563; +pub const Thai_thanthakhat: u32 = 3564; +pub const Thai_nikhahit: u32 = 3565; +pub const Thai_leksun: u32 = 3568; +pub const Thai_leknung: u32 = 3569; +pub const Thai_leksong: u32 = 3570; +pub const Thai_leksam: u32 = 3571; +pub const Thai_leksi: u32 = 3572; +pub const Thai_lekha: u32 = 3573; +pub const Thai_lekhok: u32 = 3574; +pub const Thai_lekchet: u32 = 3575; +pub const Thai_lekpaet: u32 = 3576; +pub const Thai_lekkao: u32 = 3577; +pub const Hangul: u32 = 65329; +pub const Hangul_Start: u32 = 65330; +pub const Hangul_End: u32 = 65331; +pub const Hangul_Hanja: u32 = 65332; +pub const Hangul_Jamo: u32 = 65333; +pub const Hangul_Romaja: u32 = 65334; +pub const Hangul_Codeinput: u32 = 65335; +pub const Hangul_Jeonja: u32 = 65336; +pub const Hangul_Banja: u32 = 65337; +pub const Hangul_PreHanja: u32 = 65338; +pub const Hangul_PostHanja: u32 = 65339; +pub const Hangul_SingleCandidate: u32 = 65340; +pub const Hangul_MultipleCandidate: u32 = 65341; +pub const Hangul_PreviousCandidate: u32 = 65342; +pub const Hangul_Special: u32 = 65343; +pub const Hangul_switch: u32 = 65406; +pub const Hangul_Kiyeog: u32 = 3745; +pub const Hangul_SsangKiyeog: u32 = 3746; +pub const Hangul_KiyeogSios: u32 = 3747; +pub const Hangul_Nieun: u32 = 3748; +pub const Hangul_NieunJieuj: u32 = 3749; +pub const Hangul_NieunHieuh: u32 = 3750; +pub const Hangul_Dikeud: u32 = 3751; +pub const Hangul_SsangDikeud: u32 = 3752; +pub const Hangul_Rieul: u32 = 3753; +pub const Hangul_RieulKiyeog: u32 = 3754; +pub const Hangul_RieulMieum: u32 = 3755; +pub const Hangul_RieulPieub: u32 = 3756; +pub const Hangul_RieulSios: u32 = 3757; +pub const Hangul_RieulTieut: u32 = 3758; +pub const Hangul_RieulPhieuf: u32 = 3759; +pub const Hangul_RieulHieuh: u32 = 3760; +pub const Hangul_Mieum: u32 = 3761; +pub const Hangul_Pieub: u32 = 3762; +pub const Hangul_SsangPieub: u32 = 3763; +pub const Hangul_PieubSios: u32 = 3764; +pub const Hangul_Sios: u32 = 3765; +pub const Hangul_SsangSios: u32 = 3766; +pub const Hangul_Ieung: u32 = 3767; +pub const Hangul_Jieuj: u32 = 3768; +pub const Hangul_SsangJieuj: u32 = 3769; +pub const Hangul_Cieuc: u32 = 3770; +pub const Hangul_Khieuq: u32 = 3771; +pub const Hangul_Tieut: u32 = 3772; +pub const Hangul_Phieuf: u32 = 3773; +pub const Hangul_Hieuh: u32 = 3774; +pub const Hangul_A: u32 = 3775; +pub const Hangul_AE: u32 = 3776; +pub const Hangul_YA: u32 = 3777; +pub const Hangul_YAE: u32 = 3778; +pub const Hangul_EO: u32 = 3779; +pub const Hangul_E: u32 = 3780; +pub const Hangul_YEO: u32 = 3781; +pub const Hangul_YE: u32 = 3782; +pub const Hangul_O: u32 = 3783; +pub const Hangul_WA: u32 = 3784; +pub const Hangul_WAE: u32 = 3785; +pub const Hangul_OE: u32 = 3786; +pub const Hangul_YO: u32 = 3787; +pub const Hangul_U: u32 = 3788; +pub const Hangul_WEO: u32 = 3789; +pub const Hangul_WE: u32 = 3790; +pub const Hangul_WI: u32 = 3791; +pub const Hangul_YU: u32 = 3792; +pub const Hangul_EU: u32 = 3793; +pub const Hangul_YI: u32 = 3794; +pub const Hangul_I: u32 = 3795; +pub const Hangul_J_Kiyeog: u32 = 3796; +pub const Hangul_J_SsangKiyeog: u32 = 3797; +pub const Hangul_J_KiyeogSios: u32 = 3798; +pub const Hangul_J_Nieun: u32 = 3799; +pub const Hangul_J_NieunJieuj: u32 = 3800; +pub const Hangul_J_NieunHieuh: u32 = 3801; +pub const Hangul_J_Dikeud: u32 = 3802; +pub const Hangul_J_Rieul: u32 = 3803; +pub const Hangul_J_RieulKiyeog: u32 = 3804; +pub const Hangul_J_RieulMieum: u32 = 3805; +pub const Hangul_J_RieulPieub: u32 = 3806; +pub const Hangul_J_RieulSios: u32 = 3807; +pub const Hangul_J_RieulTieut: u32 = 3808; +pub const Hangul_J_RieulPhieuf: u32 = 3809; +pub const Hangul_J_RieulHieuh: u32 = 3810; +pub const Hangul_J_Mieum: u32 = 3811; +pub const Hangul_J_Pieub: u32 = 3812; +pub const Hangul_J_PieubSios: u32 = 3813; +pub const Hangul_J_Sios: u32 = 3814; +pub const Hangul_J_SsangSios: u32 = 3815; +pub const Hangul_J_Ieung: u32 = 3816; +pub const Hangul_J_Jieuj: u32 = 3817; +pub const Hangul_J_Cieuc: u32 = 3818; +pub const Hangul_J_Khieuq: u32 = 3819; +pub const Hangul_J_Tieut: u32 = 3820; +pub const Hangul_J_Phieuf: u32 = 3821; +pub const Hangul_J_Hieuh: u32 = 3822; +pub const Hangul_RieulYeorinHieuh: u32 = 3823; +pub const Hangul_SunkyeongeumMieum: u32 = 3824; +pub const Hangul_SunkyeongeumPieub: u32 = 3825; +pub const Hangul_PanSios: u32 = 3826; +pub const Hangul_KkogjiDalrinIeung: u32 = 3827; +pub const Hangul_SunkyeongeumPhieuf: u32 = 3828; +pub const Hangul_YeorinHieuh: u32 = 3829; +pub const Hangul_AraeA: u32 = 3830; +pub const Hangul_AraeAE: u32 = 3831; +pub const Hangul_J_PanSios: u32 = 3832; +pub const Hangul_J_KkogjiDalrinIeung: u32 = 3833; +pub const Hangul_J_YeorinHieuh: u32 = 3834; +pub const Korean_Won: u32 = 3839; +pub const Armenian_ligature_ew: u32 = 16778631; +pub const Armenian_full_stop: u32 = 16778633; +pub const Armenian_verjaket: u32 = 16778633; +pub const Armenian_separation_mark: u32 = 16778589; +pub const Armenian_but: u32 = 16778589; +pub const Armenian_hyphen: u32 = 16778634; +pub const Armenian_yentamna: u32 = 16778634; +pub const Armenian_exclam: u32 = 16778588; +pub const Armenian_amanak: u32 = 16778588; +pub const Armenian_accent: u32 = 16778587; +pub const Armenian_shesht: u32 = 16778587; +pub const Armenian_question: u32 = 16778590; +pub const Armenian_paruyk: u32 = 16778590; +pub const Armenian_AYB: u32 = 16778545; +pub const Armenian_ayb: u32 = 16778593; +pub const Armenian_BEN: u32 = 16778546; +pub const Armenian_ben: u32 = 16778594; +pub const Armenian_GIM: u32 = 16778547; +pub const Armenian_gim: u32 = 16778595; +pub const Armenian_DA: u32 = 16778548; +pub const Armenian_da: u32 = 16778596; +pub const Armenian_YECH: u32 = 16778549; +pub const Armenian_yech: u32 = 16778597; +pub const Armenian_ZA: u32 = 16778550; +pub const Armenian_za: u32 = 16778598; +pub const Armenian_E: u32 = 16778551; +pub const Armenian_e: u32 = 16778599; +pub const Armenian_AT: u32 = 16778552; +pub const Armenian_at: u32 = 16778600; +pub const Armenian_TO: u32 = 16778553; +pub const Armenian_to: u32 = 16778601; +pub const Armenian_ZHE: u32 = 16778554; +pub const Armenian_zhe: u32 = 16778602; +pub const Armenian_INI: u32 = 16778555; +pub const Armenian_ini: u32 = 16778603; +pub const Armenian_LYUN: u32 = 16778556; +pub const Armenian_lyun: u32 = 16778604; +pub const Armenian_KHE: u32 = 16778557; +pub const Armenian_khe: u32 = 16778605; +pub const Armenian_TSA: u32 = 16778558; +pub const Armenian_tsa: u32 = 16778606; +pub const Armenian_KEN: u32 = 16778559; +pub const Armenian_ken: u32 = 16778607; +pub const Armenian_HO: u32 = 16778560; +pub const Armenian_ho: u32 = 16778608; +pub const Armenian_DZA: u32 = 16778561; +pub const Armenian_dza: u32 = 16778609; +pub const Armenian_GHAT: u32 = 16778562; +pub const Armenian_ghat: u32 = 16778610; +pub const Armenian_TCHE: u32 = 16778563; +pub const Armenian_tche: u32 = 16778611; +pub const Armenian_MEN: u32 = 16778564; +pub const Armenian_men: u32 = 16778612; +pub const Armenian_HI: u32 = 16778565; +pub const Armenian_hi: u32 = 16778613; +pub const Armenian_NU: u32 = 16778566; +pub const Armenian_nu: u32 = 16778614; +pub const Armenian_SHA: u32 = 16778567; +pub const Armenian_sha: u32 = 16778615; +pub const Armenian_VO: u32 = 16778568; +pub const Armenian_vo: u32 = 16778616; +pub const Armenian_CHA: u32 = 16778569; +pub const Armenian_cha: u32 = 16778617; +pub const Armenian_PE: u32 = 16778570; +pub const Armenian_pe: u32 = 16778618; +pub const Armenian_JE: u32 = 16778571; +pub const Armenian_je: u32 = 16778619; +pub const Armenian_RA: u32 = 16778572; +pub const Armenian_ra: u32 = 16778620; +pub const Armenian_SE: u32 = 16778573; +pub const Armenian_se: u32 = 16778621; +pub const Armenian_VEV: u32 = 16778574; +pub const Armenian_vev: u32 = 16778622; +pub const Armenian_TYUN: u32 = 16778575; +pub const Armenian_tyun: u32 = 16778623; +pub const Armenian_RE: u32 = 16778576; +pub const Armenian_re: u32 = 16778624; +pub const Armenian_TSO: u32 = 16778577; +pub const Armenian_tso: u32 = 16778625; +pub const Armenian_VYUN: u32 = 16778578; +pub const Armenian_vyun: u32 = 16778626; +pub const Armenian_PYUR: u32 = 16778579; +pub const Armenian_pyur: u32 = 16778627; +pub const Armenian_KE: u32 = 16778580; +pub const Armenian_ke: u32 = 16778628; +pub const Armenian_O: u32 = 16778581; +pub const Armenian_o: u32 = 16778629; +pub const Armenian_FE: u32 = 16778582; +pub const Armenian_fe: u32 = 16778630; +pub const Armenian_apostrophe: u32 = 16778586; +pub const Georgian_an: u32 = 16781520; +pub const Georgian_ban: u32 = 16781521; +pub const Georgian_gan: u32 = 16781522; +pub const Georgian_don: u32 = 16781523; +pub const Georgian_en: u32 = 16781524; +pub const Georgian_vin: u32 = 16781525; +pub const Georgian_zen: u32 = 16781526; +pub const Georgian_tan: u32 = 16781527; +pub const Georgian_in: u32 = 16781528; +pub const Georgian_kan: u32 = 16781529; +pub const Georgian_las: u32 = 16781530; +pub const Georgian_man: u32 = 16781531; +pub const Georgian_nar: u32 = 16781532; +pub const Georgian_on: u32 = 16781533; +pub const Georgian_par: u32 = 16781534; +pub const Georgian_zhar: u32 = 16781535; +pub const Georgian_rae: u32 = 16781536; +pub const Georgian_san: u32 = 16781537; +pub const Georgian_tar: u32 = 16781538; +pub const Georgian_un: u32 = 16781539; +pub const Georgian_phar: u32 = 16781540; +pub const Georgian_khar: u32 = 16781541; +pub const Georgian_ghan: u32 = 16781542; +pub const Georgian_qar: u32 = 16781543; +pub const Georgian_shin: u32 = 16781544; +pub const Georgian_chin: u32 = 16781545; +pub const Georgian_can: u32 = 16781546; +pub const Georgian_jil: u32 = 16781547; +pub const Georgian_cil: u32 = 16781548; +pub const Georgian_char: u32 = 16781549; +pub const Georgian_xan: u32 = 16781550; +pub const Georgian_jhan: u32 = 16781551; +pub const Georgian_hae: u32 = 16781552; +pub const Georgian_he: u32 = 16781553; +pub const Georgian_hie: u32 = 16781554; +pub const Georgian_we: u32 = 16781555; +pub const Georgian_har: u32 = 16781556; +pub const Georgian_hoe: u32 = 16781557; +pub const Georgian_fi: u32 = 16781558; +pub const Xabovedot: u32 = 16785034; +pub const Ibreve: u32 = 16777516; +pub const Zstroke: u32 = 16777653; +pub const Gcaron: u32 = 16777702; +pub const Ocaron: u32 = 16777681; +pub const Obarred: u32 = 16777631; +pub const xabovedot: u32 = 16785035; +pub const ibreve: u32 = 16777517; +pub const zstroke: u32 = 16777654; +pub const gcaron: u32 = 16777703; +pub const ocaron: u32 = 16777682; +pub const obarred: u32 = 16777845; +pub const SCHWA: u32 = 16777615; +pub const schwa: u32 = 16777817; +pub const EZH: u32 = 16777655; +pub const ezh: u32 = 16777874; +pub const Lbelowdot: u32 = 16784950; +pub const lbelowdot: u32 = 16784951; +pub const Abelowdot: u32 = 16785056; +pub const abelowdot: u32 = 16785057; +pub const Ahook: u32 = 16785058; +pub const ahook: u32 = 16785059; +pub const Acircumflexacute: u32 = 16785060; +pub const acircumflexacute: u32 = 16785061; +pub const Acircumflexgrave: u32 = 16785062; +pub const acircumflexgrave: u32 = 16785063; +pub const Acircumflexhook: u32 = 16785064; +pub const acircumflexhook: u32 = 16785065; +pub const Acircumflextilde: u32 = 16785066; +pub const acircumflextilde: u32 = 16785067; +pub const Acircumflexbelowdot: u32 = 16785068; +pub const acircumflexbelowdot: u32 = 16785069; +pub const Abreveacute: u32 = 16785070; +pub const abreveacute: u32 = 16785071; +pub const Abrevegrave: u32 = 16785072; +pub const abrevegrave: u32 = 16785073; +pub const Abrevehook: u32 = 16785074; +pub const abrevehook: u32 = 16785075; +pub const Abrevetilde: u32 = 16785076; +pub const abrevetilde: u32 = 16785077; +pub const Abrevebelowdot: u32 = 16785078; +pub const abrevebelowdot: u32 = 16785079; +pub const Ebelowdot: u32 = 16785080; +pub const ebelowdot: u32 = 16785081; +pub const Ehook: u32 = 16785082; +pub const ehook: u32 = 16785083; +pub const Etilde: u32 = 16785084; +pub const etilde: u32 = 16785085; +pub const Ecircumflexacute: u32 = 16785086; +pub const ecircumflexacute: u32 = 16785087; +pub const Ecircumflexgrave: u32 = 16785088; +pub const ecircumflexgrave: u32 = 16785089; +pub const Ecircumflexhook: u32 = 16785090; +pub const ecircumflexhook: u32 = 16785091; +pub const Ecircumflextilde: u32 = 16785092; +pub const ecircumflextilde: u32 = 16785093; +pub const Ecircumflexbelowdot: u32 = 16785094; +pub const ecircumflexbelowdot: u32 = 16785095; +pub const Ihook: u32 = 16785096; +pub const ihook: u32 = 16785097; +pub const Ibelowdot: u32 = 16785098; +pub const ibelowdot: u32 = 16785099; +pub const Obelowdot: u32 = 16785100; +pub const obelowdot: u32 = 16785101; +pub const Ohook: u32 = 16785102; +pub const ohook: u32 = 16785103; +pub const Ocircumflexacute: u32 = 16785104; +pub const ocircumflexacute: u32 = 16785105; +pub const Ocircumflexgrave: u32 = 16785106; +pub const ocircumflexgrave: u32 = 16785107; +pub const Ocircumflexhook: u32 = 16785108; +pub const ocircumflexhook: u32 = 16785109; +pub const Ocircumflextilde: u32 = 16785110; +pub const ocircumflextilde: u32 = 16785111; +pub const Ocircumflexbelowdot: u32 = 16785112; +pub const ocircumflexbelowdot: u32 = 16785113; +pub const Ohornacute: u32 = 16785114; +pub const ohornacute: u32 = 16785115; +pub const Ohorngrave: u32 = 16785116; +pub const ohorngrave: u32 = 16785117; +pub const Ohornhook: u32 = 16785118; +pub const ohornhook: u32 = 16785119; +pub const Ohorntilde: u32 = 16785120; +pub const ohorntilde: u32 = 16785121; +pub const Ohornbelowdot: u32 = 16785122; +pub const ohornbelowdot: u32 = 16785123; +pub const Ubelowdot: u32 = 16785124; +pub const ubelowdot: u32 = 16785125; +pub const Uhook: u32 = 16785126; +pub const uhook: u32 = 16785127; +pub const Uhornacute: u32 = 16785128; +pub const uhornacute: u32 = 16785129; +pub const Uhorngrave: u32 = 16785130; +pub const uhorngrave: u32 = 16785131; +pub const Uhornhook: u32 = 16785132; +pub const uhornhook: u32 = 16785133; +pub const Uhorntilde: u32 = 16785134; +pub const uhorntilde: u32 = 16785135; +pub const Uhornbelowdot: u32 = 16785136; +pub const uhornbelowdot: u32 = 16785137; +pub const Ybelowdot: u32 = 16785140; +pub const ybelowdot: u32 = 16785141; +pub const Yhook: u32 = 16785142; +pub const yhook: u32 = 16785143; +pub const Ytilde: u32 = 16785144; +pub const ytilde: u32 = 16785145; +pub const Ohorn: u32 = 16777632; +pub const ohorn: u32 = 16777633; +pub const Uhorn: u32 = 16777647; +pub const uhorn: u32 = 16777648; +pub const combining_tilde: u32 = 16777987; +pub const combining_grave: u32 = 16777984; +pub const combining_acute: u32 = 16777985; +pub const combining_hook: u32 = 16777993; +pub const combining_belowdot: u32 = 16778019; +pub const EcuSign: u32 = 16785568; +pub const ColonSign: u32 = 16785569; +pub const CruzeiroSign: u32 = 16785570; +pub const FFrancSign: u32 = 16785571; +pub const LiraSign: u32 = 16785572; +pub const MillSign: u32 = 16785573; +pub const NairaSign: u32 = 16785574; +pub const PesetaSign: u32 = 16785575; +pub const RupeeSign: u32 = 16785576; +pub const WonSign: u32 = 16785577; +pub const NewSheqelSign: u32 = 16785578; +pub const DongSign: u32 = 16785579; +pub const EuroSign: u32 = 8364; +pub const zerosuperior: u32 = 16785520; +pub const foursuperior: u32 = 16785524; +pub const fivesuperior: u32 = 16785525; +pub const sixsuperior: u32 = 16785526; +pub const sevensuperior: u32 = 16785527; +pub const eightsuperior: u32 = 16785528; +pub const ninesuperior: u32 = 16785529; +pub const zerosubscript: u32 = 16785536; +pub const onesubscript: u32 = 16785537; +pub const twosubscript: u32 = 16785538; +pub const threesubscript: u32 = 16785539; +pub const foursubscript: u32 = 16785540; +pub const fivesubscript: u32 = 16785541; +pub const sixsubscript: u32 = 16785542; +pub const sevensubscript: u32 = 16785543; +pub const eightsubscript: u32 = 16785544; +pub const ninesubscript: u32 = 16785545; +pub const partdifferential: u32 = 16785922; +pub const emptyset: u32 = 16785925; +pub const elementof: u32 = 16785928; +pub const notelementof: u32 = 16785929; +pub const containsas: u32 = 16785931; +pub const squareroot: u32 = 16785946; +pub const cuberoot: u32 = 16785947; +pub const fourthroot: u32 = 16785948; +pub const dintegral: u32 = 16785964; +pub const tintegral: u32 = 16785965; +pub const because: u32 = 16785973; +pub const approxeq: u32 = 16785992; +pub const notapproxeq: u32 = 16785991; +pub const notidentical: u32 = 16786018; +pub const stricteq: u32 = 16786019; +pub const braille_dot_1: u32 = 65521; +pub const braille_dot_2: u32 = 65522; +pub const braille_dot_3: u32 = 65523; +pub const braille_dot_4: u32 = 65524; +pub const braille_dot_5: u32 = 65525; +pub const braille_dot_6: u32 = 65526; +pub const braille_dot_7: u32 = 65527; +pub const braille_dot_8: u32 = 65528; +pub const braille_dot_9: u32 = 65529; +pub const braille_dot_10: u32 = 65530; +pub const braille_blank: u32 = 16787456; +pub const braille_dots_1: u32 = 16787457; +pub const braille_dots_2: u32 = 16787458; +pub const braille_dots_12: u32 = 16787459; +pub const braille_dots_3: u32 = 16787460; +pub const braille_dots_13: u32 = 16787461; +pub const braille_dots_23: u32 = 16787462; +pub const braille_dots_123: u32 = 16787463; +pub const braille_dots_4: u32 = 16787464; +pub const braille_dots_14: u32 = 16787465; +pub const braille_dots_24: u32 = 16787466; +pub const braille_dots_124: u32 = 16787467; +pub const braille_dots_34: u32 = 16787468; +pub const braille_dots_134: u32 = 16787469; +pub const braille_dots_234: u32 = 16787470; +pub const braille_dots_1234: u32 = 16787471; +pub const braille_dots_5: u32 = 16787472; +pub const braille_dots_15: u32 = 16787473; +pub const braille_dots_25: u32 = 16787474; +pub const braille_dots_125: u32 = 16787475; +pub const braille_dots_35: u32 = 16787476; +pub const braille_dots_135: u32 = 16787477; +pub const braille_dots_235: u32 = 16787478; +pub const braille_dots_1235: u32 = 16787479; +pub const braille_dots_45: u32 = 16787480; +pub const braille_dots_145: u32 = 16787481; +pub const braille_dots_245: u32 = 16787482; +pub const braille_dots_1245: u32 = 16787483; +pub const braille_dots_345: u32 = 16787484; +pub const braille_dots_1345: u32 = 16787485; +pub const braille_dots_2345: u32 = 16787486; +pub const braille_dots_12345: u32 = 16787487; +pub const braille_dots_6: u32 = 16787488; +pub const braille_dots_16: u32 = 16787489; +pub const braille_dots_26: u32 = 16787490; +pub const braille_dots_126: u32 = 16787491; +pub const braille_dots_36: u32 = 16787492; +pub const braille_dots_136: u32 = 16787493; +pub const braille_dots_236: u32 = 16787494; +pub const braille_dots_1236: u32 = 16787495; +pub const braille_dots_46: u32 = 16787496; +pub const braille_dots_146: u32 = 16787497; +pub const braille_dots_246: u32 = 16787498; +pub const braille_dots_1246: u32 = 16787499; +pub const braille_dots_346: u32 = 16787500; +pub const braille_dots_1346: u32 = 16787501; +pub const braille_dots_2346: u32 = 16787502; +pub const braille_dots_12346: u32 = 16787503; +pub const braille_dots_56: u32 = 16787504; +pub const braille_dots_156: u32 = 16787505; +pub const braille_dots_256: u32 = 16787506; +pub const braille_dots_1256: u32 = 16787507; +pub const braille_dots_356: u32 = 16787508; +pub const braille_dots_1356: u32 = 16787509; +pub const braille_dots_2356: u32 = 16787510; +pub const braille_dots_12356: u32 = 16787511; +pub const braille_dots_456: u32 = 16787512; +pub const braille_dots_1456: u32 = 16787513; +pub const braille_dots_2456: u32 = 16787514; +pub const braille_dots_12456: u32 = 16787515; +pub const braille_dots_3456: u32 = 16787516; +pub const braille_dots_13456: u32 = 16787517; +pub const braille_dots_23456: u32 = 16787518; +pub const braille_dots_123456: u32 = 16787519; +pub const braille_dots_7: u32 = 16787520; +pub const braille_dots_17: u32 = 16787521; +pub const braille_dots_27: u32 = 16787522; +pub const braille_dots_127: u32 = 16787523; +pub const braille_dots_37: u32 = 16787524; +pub const braille_dots_137: u32 = 16787525; +pub const braille_dots_237: u32 = 16787526; +pub const braille_dots_1237: u32 = 16787527; +pub const braille_dots_47: u32 = 16787528; +pub const braille_dots_147: u32 = 16787529; +pub const braille_dots_247: u32 = 16787530; +pub const braille_dots_1247: u32 = 16787531; +pub const braille_dots_347: u32 = 16787532; +pub const braille_dots_1347: u32 = 16787533; +pub const braille_dots_2347: u32 = 16787534; +pub const braille_dots_12347: u32 = 16787535; +pub const braille_dots_57: u32 = 16787536; +pub const braille_dots_157: u32 = 16787537; +pub const braille_dots_257: u32 = 16787538; +pub const braille_dots_1257: u32 = 16787539; +pub const braille_dots_357: u32 = 16787540; +pub const braille_dots_1357: u32 = 16787541; +pub const braille_dots_2357: u32 = 16787542; +pub const braille_dots_12357: u32 = 16787543; +pub const braille_dots_457: u32 = 16787544; +pub const braille_dots_1457: u32 = 16787545; +pub const braille_dots_2457: u32 = 16787546; +pub const braille_dots_12457: u32 = 16787547; +pub const braille_dots_3457: u32 = 16787548; +pub const braille_dots_13457: u32 = 16787549; +pub const braille_dots_23457: u32 = 16787550; +pub const braille_dots_123457: u32 = 16787551; +pub const braille_dots_67: u32 = 16787552; +pub const braille_dots_167: u32 = 16787553; +pub const braille_dots_267: u32 = 16787554; +pub const braille_dots_1267: u32 = 16787555; +pub const braille_dots_367: u32 = 16787556; +pub const braille_dots_1367: u32 = 16787557; +pub const braille_dots_2367: u32 = 16787558; +pub const braille_dots_12367: u32 = 16787559; +pub const braille_dots_467: u32 = 16787560; +pub const braille_dots_1467: u32 = 16787561; +pub const braille_dots_2467: u32 = 16787562; +pub const braille_dots_12467: u32 = 16787563; +pub const braille_dots_3467: u32 = 16787564; +pub const braille_dots_13467: u32 = 16787565; +pub const braille_dots_23467: u32 = 16787566; +pub const braille_dots_123467: u32 = 16787567; +pub const braille_dots_567: u32 = 16787568; +pub const braille_dots_1567: u32 = 16787569; +pub const braille_dots_2567: u32 = 16787570; +pub const braille_dots_12567: u32 = 16787571; +pub const braille_dots_3567: u32 = 16787572; +pub const braille_dots_13567: u32 = 16787573; +pub const braille_dots_23567: u32 = 16787574; +pub const braille_dots_123567: u32 = 16787575; +pub const braille_dots_4567: u32 = 16787576; +pub const braille_dots_14567: u32 = 16787577; +pub const braille_dots_24567: u32 = 16787578; +pub const braille_dots_124567: u32 = 16787579; +pub const braille_dots_34567: u32 = 16787580; +pub const braille_dots_134567: u32 = 16787581; +pub const braille_dots_234567: u32 = 16787582; +pub const braille_dots_1234567: u32 = 16787583; +pub const braille_dots_8: u32 = 16787584; +pub const braille_dots_18: u32 = 16787585; +pub const braille_dots_28: u32 = 16787586; +pub const braille_dots_128: u32 = 16787587; +pub const braille_dots_38: u32 = 16787588; +pub const braille_dots_138: u32 = 16787589; +pub const braille_dots_238: u32 = 16787590; +pub const braille_dots_1238: u32 = 16787591; +pub const braille_dots_48: u32 = 16787592; +pub const braille_dots_148: u32 = 16787593; +pub const braille_dots_248: u32 = 16787594; +pub const braille_dots_1248: u32 = 16787595; +pub const braille_dots_348: u32 = 16787596; +pub const braille_dots_1348: u32 = 16787597; +pub const braille_dots_2348: u32 = 16787598; +pub const braille_dots_12348: u32 = 16787599; +pub const braille_dots_58: u32 = 16787600; +pub const braille_dots_158: u32 = 16787601; +pub const braille_dots_258: u32 = 16787602; +pub const braille_dots_1258: u32 = 16787603; +pub const braille_dots_358: u32 = 16787604; +pub const braille_dots_1358: u32 = 16787605; +pub const braille_dots_2358: u32 = 16787606; +pub const braille_dots_12358: u32 = 16787607; +pub const braille_dots_458: u32 = 16787608; +pub const braille_dots_1458: u32 = 16787609; +pub const braille_dots_2458: u32 = 16787610; +pub const braille_dots_12458: u32 = 16787611; +pub const braille_dots_3458: u32 = 16787612; +pub const braille_dots_13458: u32 = 16787613; +pub const braille_dots_23458: u32 = 16787614; +pub const braille_dots_123458: u32 = 16787615; +pub const braille_dots_68: u32 = 16787616; +pub const braille_dots_168: u32 = 16787617; +pub const braille_dots_268: u32 = 16787618; +pub const braille_dots_1268: u32 = 16787619; +pub const braille_dots_368: u32 = 16787620; +pub const braille_dots_1368: u32 = 16787621; +pub const braille_dots_2368: u32 = 16787622; +pub const braille_dots_12368: u32 = 16787623; +pub const braille_dots_468: u32 = 16787624; +pub const braille_dots_1468: u32 = 16787625; +pub const braille_dots_2468: u32 = 16787626; +pub const braille_dots_12468: u32 = 16787627; +pub const braille_dots_3468: u32 = 16787628; +pub const braille_dots_13468: u32 = 16787629; +pub const braille_dots_23468: u32 = 16787630; +pub const braille_dots_123468: u32 = 16787631; +pub const braille_dots_568: u32 = 16787632; +pub const braille_dots_1568: u32 = 16787633; +pub const braille_dots_2568: u32 = 16787634; +pub const braille_dots_12568: u32 = 16787635; +pub const braille_dots_3568: u32 = 16787636; +pub const braille_dots_13568: u32 = 16787637; +pub const braille_dots_23568: u32 = 16787638; +pub const braille_dots_123568: u32 = 16787639; +pub const braille_dots_4568: u32 = 16787640; +pub const braille_dots_14568: u32 = 16787641; +pub const braille_dots_24568: u32 = 16787642; +pub const braille_dots_124568: u32 = 16787643; +pub const braille_dots_34568: u32 = 16787644; +pub const braille_dots_134568: u32 = 16787645; +pub const braille_dots_234568: u32 = 16787646; +pub const braille_dots_1234568: u32 = 16787647; +pub const braille_dots_78: u32 = 16787648; +pub const braille_dots_178: u32 = 16787649; +pub const braille_dots_278: u32 = 16787650; +pub const braille_dots_1278: u32 = 16787651; +pub const braille_dots_378: u32 = 16787652; +pub const braille_dots_1378: u32 = 16787653; +pub const braille_dots_2378: u32 = 16787654; +pub const braille_dots_12378: u32 = 16787655; +pub const braille_dots_478: u32 = 16787656; +pub const braille_dots_1478: u32 = 16787657; +pub const braille_dots_2478: u32 = 16787658; +pub const braille_dots_12478: u32 = 16787659; +pub const braille_dots_3478: u32 = 16787660; +pub const braille_dots_13478: u32 = 16787661; +pub const braille_dots_23478: u32 = 16787662; +pub const braille_dots_123478: u32 = 16787663; +pub const braille_dots_578: u32 = 16787664; +pub const braille_dots_1578: u32 = 16787665; +pub const braille_dots_2578: u32 = 16787666; +pub const braille_dots_12578: u32 = 16787667; +pub const braille_dots_3578: u32 = 16787668; +pub const braille_dots_13578: u32 = 16787669; +pub const braille_dots_23578: u32 = 16787670; +pub const braille_dots_123578: u32 = 16787671; +pub const braille_dots_4578: u32 = 16787672; +pub const braille_dots_14578: u32 = 16787673; +pub const braille_dots_24578: u32 = 16787674; +pub const braille_dots_124578: u32 = 16787675; +pub const braille_dots_34578: u32 = 16787676; +pub const braille_dots_134578: u32 = 16787677; +pub const braille_dots_234578: u32 = 16787678; +pub const braille_dots_1234578: u32 = 16787679; +pub const braille_dots_678: u32 = 16787680; +pub const braille_dots_1678: u32 = 16787681; +pub const braille_dots_2678: u32 = 16787682; +pub const braille_dots_12678: u32 = 16787683; +pub const braille_dots_3678: u32 = 16787684; +pub const braille_dots_13678: u32 = 16787685; +pub const braille_dots_23678: u32 = 16787686; +pub const braille_dots_123678: u32 = 16787687; +pub const braille_dots_4678: u32 = 16787688; +pub const braille_dots_14678: u32 = 16787689; +pub const braille_dots_24678: u32 = 16787690; +pub const braille_dots_124678: u32 = 16787691; +pub const braille_dots_34678: u32 = 16787692; +pub const braille_dots_134678: u32 = 16787693; +pub const braille_dots_234678: u32 = 16787694; +pub const braille_dots_1234678: u32 = 16787695; +pub const braille_dots_5678: u32 = 16787696; +pub const braille_dots_15678: u32 = 16787697; +pub const braille_dots_25678: u32 = 16787698; +pub const braille_dots_125678: u32 = 16787699; +pub const braille_dots_35678: u32 = 16787700; +pub const braille_dots_135678: u32 = 16787701; +pub const braille_dots_235678: u32 = 16787702; +pub const braille_dots_1235678: u32 = 16787703; +pub const braille_dots_45678: u32 = 16787704; +pub const braille_dots_145678: u32 = 16787705; +pub const braille_dots_245678: u32 = 16787706; +pub const braille_dots_1245678: u32 = 16787707; +pub const braille_dots_345678: u32 = 16787708; +pub const braille_dots_1345678: u32 = 16787709; +pub const braille_dots_2345678: u32 = 16787710; +pub const braille_dots_12345678: u32 = 16787711; +pub const Sinh_ng: u32 = 16780674; +pub const Sinh_h2: u32 = 16780675; +pub const Sinh_a: u32 = 16780677; +pub const Sinh_aa: u32 = 16780678; +pub const Sinh_ae: u32 = 16780679; +pub const Sinh_aee: u32 = 16780680; +pub const Sinh_i: u32 = 16780681; +pub const Sinh_ii: u32 = 16780682; +pub const Sinh_u: u32 = 16780683; +pub const Sinh_uu: u32 = 16780684; +pub const Sinh_ri: u32 = 16780685; +pub const Sinh_rii: u32 = 16780686; +pub const Sinh_lu: u32 = 16780687; +pub const Sinh_luu: u32 = 16780688; +pub const Sinh_e: u32 = 16780689; +pub const Sinh_ee: u32 = 16780690; +pub const Sinh_ai: u32 = 16780691; +pub const Sinh_o: u32 = 16780692; +pub const Sinh_oo: u32 = 16780693; +pub const Sinh_au: u32 = 16780694; +pub const Sinh_ka: u32 = 16780698; +pub const Sinh_kha: u32 = 16780699; +pub const Sinh_ga: u32 = 16780700; +pub const Sinh_gha: u32 = 16780701; +pub const Sinh_ng2: u32 = 16780702; +pub const Sinh_nga: u32 = 16780703; +pub const Sinh_ca: u32 = 16780704; +pub const Sinh_cha: u32 = 16780705; +pub const Sinh_ja: u32 = 16780706; +pub const Sinh_jha: u32 = 16780707; +pub const Sinh_nya: u32 = 16780708; +pub const Sinh_jnya: u32 = 16780709; +pub const Sinh_nja: u32 = 16780710; +pub const Sinh_tta: u32 = 16780711; +pub const Sinh_ttha: u32 = 16780712; +pub const Sinh_dda: u32 = 16780713; +pub const Sinh_ddha: u32 = 16780714; +pub const Sinh_nna: u32 = 16780715; +pub const Sinh_ndda: u32 = 16780716; +pub const Sinh_tha: u32 = 16780717; +pub const Sinh_thha: u32 = 16780718; +pub const Sinh_dha: u32 = 16780719; +pub const Sinh_dhha: u32 = 16780720; +pub const Sinh_na: u32 = 16780721; +pub const Sinh_ndha: u32 = 16780723; +pub const Sinh_pa: u32 = 16780724; +pub const Sinh_pha: u32 = 16780725; +pub const Sinh_ba: u32 = 16780726; +pub const Sinh_bha: u32 = 16780727; +pub const Sinh_ma: u32 = 16780728; +pub const Sinh_mba: u32 = 16780729; +pub const Sinh_ya: u32 = 16780730; +pub const Sinh_ra: u32 = 16780731; +pub const Sinh_la: u32 = 16780733; +pub const Sinh_va: u32 = 16780736; +pub const Sinh_sha: u32 = 16780737; +pub const Sinh_ssha: u32 = 16780738; +pub const Sinh_sa: u32 = 16780739; +pub const Sinh_ha: u32 = 16780740; +pub const Sinh_lla: u32 = 16780741; +pub const Sinh_fa: u32 = 16780742; +pub const Sinh_al: u32 = 16780746; +pub const Sinh_aa2: u32 = 16780751; +pub const Sinh_ae2: u32 = 16780752; +pub const Sinh_aee2: u32 = 16780753; +pub const Sinh_i2: u32 = 16780754; +pub const Sinh_ii2: u32 = 16780755; +pub const Sinh_u2: u32 = 16780756; +pub const Sinh_uu2: u32 = 16780758; +pub const Sinh_ru2: u32 = 16780760; +pub const Sinh_e2: u32 = 16780761; +pub const Sinh_ee2: u32 = 16780762; +pub const Sinh_ai2: u32 = 16780763; +pub const Sinh_o2: u32 = 16780764; +pub const Sinh_oo2: u32 = 16780765; +pub const Sinh_au2: u32 = 16780766; +pub const Sinh_lu2: u32 = 16780767; +pub const Sinh_ruu2: u32 = 16780786; +pub const Sinh_luu2: u32 = 16780787; +pub const Sinh_kunddaliya: u32 = 16780788; diff --git a/src/main.rs b/src/main.rs index 47c0fa1..b015a8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,12 +28,16 @@ use breadx::{ use lazy_static::lazy_static; +use tokio::sync::mpsc; + use tokio::sync::mpsc::unbounded_channel; mod config; mod msg_listener; mod x11; +mod keysymdef; + use x11::client::{may_not_exist, XcrabWindowManager}; use std::collections::HashMap; @@ -140,19 +144,20 @@ async fn main() -> Result<()> { conn.ungrab_server_async().await?; let (send, mut recv) = unbounded_channel(); + let (result_send, result_recv) = mpsc::unbounded_channel(); tokio::spawn(msg_listener::listener_task( CONFIG.msg.clone().unwrap_or_default().socket_path, send, + result_recv, )); - let mask = ModMask { - inner: 20 - }; + let mask = ModMask { inner: 20 }; let keymap = keymap(&mut conn).await.unwrap_or_default(); let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); - let key: &u8 = keymap - .get(&key_u32).ok_or(XcrabError::Custom("the keysym requested was not found in the keymap".to_string()))?; + let key: &u8 = keymap.get(&key_u32).ok_or_else(|| { + XcrabError::Custom("the keysym requested was not found in the keymap".to_string()) + })?; conn.exchange_request_async(GrabKeyRequest { req_type: 33, @@ -166,13 +171,15 @@ async fn main() -> Result<()> { }) .await?; + // let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; + loop { // biased mode makes select! poll the channel first in order to keep xcrab-msg from being // starved by x11 events. Probably unnecessary, but better safe than sorry. tokio::select! { biased; - Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn).await?, - Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root, &keymap).await?, + Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn, &result_send).await?, + Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root, &keymap,/* &mut keyboard_state */).await?, } } } @@ -183,6 +190,7 @@ async fn process_event( conn: &mut Dpy, root: Window, keymap: &HashMap, + // keyboard_state: &mut KeyboardState, ) -> Result<()> { match ev { Event::MapRequest(ev) => { @@ -225,8 +233,9 @@ async fn process_event( } } Event::KeyPress(ev) => { - let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); - let key = keymap.get(&key_u32).unwrap_or(&u8::MIN); + let keysym = u32::from_str_radix("0078", 16).unwrap_or_default(); + let key = keymap.get(&keysym).unwrap_or(&u8::MIN); + if ev.detail == *key { manager.destroy_focused_client(conn).await?; } diff --git a/src/msg/config.rs b/src/msg/config.rs index 82cedbe..f4a4d8d 100644 --- a/src/msg/config.rs +++ b/src/msg/config.rs @@ -1,33 +1,28 @@ // Copyright (C) 2022 Infoshock Tech - // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. - // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. - // You should have received a copy of the GNU General Public License // along with this program. If not, see . - use crate::Result; use serde::Deserialize; use std::path::PathBuf; - +#[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Default, Deserialize)] // Dummy struct for deserializing the message config - we're using the same file for both binaries pub struct XcrabConfig { pub msg: XcrabMsgConfig, } - +#[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Deserialize)] pub struct XcrabMsgConfig { pub socket_path: PathBuf, } - impl Default for XcrabMsgConfig { fn default() -> Self { Self { @@ -35,21 +30,15 @@ impl Default for XcrabMsgConfig { } } } - fn load_file_inner() -> Result { let home_dir = get_home(); - let contents = std::fs::read_to_string(format!("{}/.config/xcrab/config.toml", home_dir))?; - let config: XcrabConfig = toml::from_str(&contents)?; - Ok(config) } - pub fn load_file() -> XcrabConfig { load_file_inner().unwrap_or_default() } - fn get_home() -> String { std::env::var("HOME").expect("Error: $HOME variable was not set") } diff --git a/src/msg/main.rs b/src/msg/main.rs index 9231125..3497ffc 100644 --- a/src/msg/main.rs +++ b/src/msg/main.rs @@ -1,36 +1,47 @@ // Copyright (C) 2022 Infoshock Tech - // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. - // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. - // You should have received a copy of the GNU General Public License // along with this program. If not, see . - +#![warn(clippy::pedantic)] mod config; - -use tokio::io::AsyncWriteExt; +use std::error::Error; +use std::fmt::{Debug, Display, Formatter, Result as FmtResult}; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::UnixStream; - -type Result = std::result::Result>; - +type Result = std::result::Result>; +struct CustomError(String); +impl Debug for CustomError { + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + f.write_str(&self.0) + } +} +impl Display for CustomError { + fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { + f.write_str(&self.0) + } +} +impl Error for CustomError {} #[tokio::main] async fn main() -> Result<()> { let msg = std::env::args().skip(1).collect::>().join(" "); - let conf = config::load_file(); - let path = conf.msg.socket_path; - - let mut stream = UnixStream::connect(path).await?; - - stream.write_all(msg.as_bytes()).await?; - + let stream = UnixStream::connect(path).await?; + let (mut read, mut write) = stream.into_split(); + write.write_all(msg.as_bytes()).await?; + drop(write); // Shutdown the writer half so that the write actually goes through + // "Don't cross the streams!"" + let mut buf = String::new(); + read.read_to_string(&mut buf).await?; + if !buf.is_empty() { + return Err(CustomError(buf).into()); + } Ok(()) } diff --git a/src/msg_listener.rs b/src/msg_listener.rs index 0da7523..7bc5407 100644 --- a/src/msg_listener.rs +++ b/src/msg_listener.rs @@ -17,9 +17,10 @@ use crate::x11::client::XcrabWindowManager; use crate::Result; use breadx::AsyncDisplay; use std::path::Path; -use tokio::io::AsyncReadExt; +use std::str::FromStr; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::UnixListener; -use tokio::sync::mpsc::UnboundedSender; +use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; macro_rules! unwrap_or_continue { ($e:expr) => { @@ -34,6 +35,7 @@ macro_rules! unwrap_or_continue { pub async fn listener_task>( socket_path: P, sender: UnboundedSender, + mut result_recv: UnboundedReceiver>, ) -> Result<()> { let socket_path = socket_path.as_ref(); if socket_path.exists() { @@ -47,6 +49,13 @@ pub async fn listener_task>( stream.read_to_string(&mut buf).await?; drop(sender.send(buf)); // go back to ms word clippy + + // we can unwrap here because if the channel is closed then something's not right + if let Err(e) = result_recv.recv().await.unwrap() { + stream.write_all(format!("{}", e).as_bytes()).await?; + } else { + stream.write_all(&[]).await?; + } } } @@ -54,10 +63,76 @@ pub async fn on_recv( data: String, manager: &mut XcrabWindowManager, conn: &mut Dpy, + result_sender: &UnboundedSender>, ) -> Result<()> { - match &*data { - "close" => manager.destroy_focused_client(conn).await?, - _ => println!("{}", data), + let res = { data.parse::() }; + + if let Ok(ref a) = res { + a.eval(manager, conn).await?; // Don't send these errors over the channel, because they're + // xcrab errors, not msg errors } + + drop(result_sender.send(res.map(|_| ()))); + Ok(()) } + +#[derive(Debug, Clone)] +#[non_exhaustive] +pub enum Action { + Close, +} + +impl FromStr for Action { + type Err = crate::XcrabError; + + fn from_str(s: &str) -> std::result::Result { + #[allow(clippy::enum_glob_use)] + use Action::*; + let parts: Vec = s + .split(' ') + .map(str::to_ascii_lowercase) + .filter(|s| !s.is_empty()) + .collect(); + + if parts.is_empty() { + return Err(String::from("No action provided").into()); + } + + macro_rules! eq_ignore_ascii_case_match { + (($scrutinee:expr) { $($s:literal => $v:expr,)+ else => $else:expr $(,)? }) => { + $( + if $scrutinee.eq_ignore_ascii_case($s) { + $v + } else + )+ { + $else + } + }; + } + + // TODO: When more actions are added (such as focus etc), they will take arguments. In that + // case, they will get passed the rest of `parts`. + eq_ignore_ascii_case_match!((parts[0]) { + "close" => Ok(Close), + else => Err(format!("Unknown action: {}", s).into()), + }) + } +} + +impl Action { + pub async fn eval( + &self, + manager: &mut XcrabWindowManager, + conn: &mut Dpy, + ) -> Result<()> { + #[allow(clippy::enum_glob_use)] + use Action::*; + + match self { + Close => manager.destroy_focused_client(conn).await?, + } + + Ok(()) + } +} diff --git a/src/x11/client.rs b/src/x11/client.rs index c1a4c74..7d937ad 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -137,14 +137,12 @@ enum RectangleContents { Client(Client), } -#[allow(clippy::module_name_repetitions)] #[derive(Debug, Clone)] struct Pane { children: Vec, directionality: Directionality, } -#[allow(clippy::module_name_repetitions)] #[derive(Debug, Clone, Copy)] struct Client { frame: FramedWindow, @@ -244,7 +242,10 @@ impl XcrabWindowManager { }; if let Some(focus) = self.focused { - req.focus = focus; + let focused_key = self.clients.get(&focus).unwrap(); + let focused = self.rects.get(*focused_key).unwrap(); + let focused_frame = focused.unwrap_client().frame; + req.focus = focused_frame.input; } conn.exchange_request_async(req).await?; @@ -610,6 +611,17 @@ impl XcrabWindowManager { Ok(()) } + + pub async fn get_focused(&self) -> Option { + self.focused + } + + pub async fn get_framed_window(&self, window: Window) -> FramedWindow { + let focused_key = self.clients.get(&window).unwrap(); + let focused = self.rects.get(*focused_key).unwrap(); + let focused_frame = focused.unwrap_client().frame; + focused_frame + } } pub fn may_not_exist(res: breadx::Result) -> breadx::Result { @@ -625,9 +637,10 @@ pub fn may_not_exist(res: breadx::Result) -> breadx::Result { } #[derive(Debug, Clone, Copy)] -struct FramedWindow { - frame: Window, - win: Window, +pub struct FramedWindow { + pub frame: Window, + pub win: Window, + pub input: Window, } impl FramedWindow { @@ -687,12 +700,27 @@ impl FramedWindow { .await, )?; + self.input + .configure_async( + conn, + ConfigureWindowParameters { + x: Some(0), + y: Some(0), + width, + height, + border_width: None, + ..Default::default() + }, + ) + .await?; + Ok(()) } async fn map(self, conn: &mut Dpy) -> Result<()> { may_not_exist(self.win.map_async(conn).await)?; self.frame.map_async(conn).await?; + self.input.map_async(conn).await?; Ok(()) } @@ -708,6 +736,10 @@ impl FramedWindow { // no longer related to us, remove from save set may_not_exist(self.win.change_save_set_async(conn, SetMode::Delete).await)?; + self.input.unmap_async(conn).await?; + + self.input.free_async(conn).await?; + self.frame.free_async(conn).await?; Ok(()) @@ -819,6 +851,21 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul ) .await?; + let input = conn + .create_window_async( + frame, + breadx::WindowClass::InputOnly, + None, + Some(conn.default_visual_id()), + 0, + 0, + geometry.width, + geometry.height, + 0, + WindowParameters::default(), + ) + .await?; + frame .set_event_mask_async( conn, @@ -829,9 +876,21 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul win.set_event_mask_async(conn, EventMask::BUTTON_PRESS) .await?; + input + .set_event_mask_async( + conn, + EventMask::BUTTON_PRESS + | EventMask::BUTTON_RELEASE + | EventMask::KEY_PRESS + | EventMask::KEY_RELEASE + | EventMask::ENTER_WINDOW + | EventMask::LEAVE_WINDOW, + ) + .await?; + may_not_exist(win.change_save_set_async(conn, SetMode::Insert).await)?; may_not_exist(win.reparent_async(conn, frame, 0, 0).await)?; - Ok(FramedWindow { frame, win }) + Ok(FramedWindow { frame, win, input }) } -- 2.37.1 From cd2e9bab9ee563114ea6bce4e9d65187e65b57fc Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Fri, 29 Jul 2022 11:31:33 -0500 Subject: [PATCH 06/13] add keysymdef.rs --- .gitignore | 1 + src/config.rs | 2 +- src/keysymdef.rs | 2893 +++++++++++++++++-------------------------- src/msg_listener.rs | 4 +- src/x11/client.rs | 4 +- 5 files changed, 1128 insertions(+), 1776 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4bf..40d9aca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/.idea \ No newline at end of file diff --git a/src/config.rs b/src/config.rs index b8a63df..06ed9de 100644 --- a/src/config.rs +++ b/src/config.rs @@ -159,7 +159,7 @@ impl<'de> Visitor<'de> for KeybindVisitor { 'C' => mask.set_control(true), 'S' => mask.set_shift(true), 'A' => mask.set_mod1(true), // alt key - 'W' => mask.set_mod4(true), // super key, 'w' for windows because S is taken + 'W' => mask.set_mod4(true), // super key, 'w' for windows BECAUSE S is taken _ => return Err(E::custom(format!("no such modifier: {}", c))), }; } diff --git a/src/keysymdef.rs b/src/keysymdef.rs index ef732d0..cc96c75 100644 --- a/src/keysymdef.rs +++ b/src/keysymdef.rs @@ -1,8 +1,12 @@ /* automatically generated by rust-bindgen 0.60.1 */ -#![allow(unused, clippy::unreadable_literal, dead_code)] +// this file has been changed from the default keysymdef.h file (which you can find at /usr/include/X11). +// some keysyms have been deleted, and others have been changed. +// however the order of the keysyms is the same as the header file. +// if you are unsure of which key a keysym may refer to, please refer to the C header file. +// moreover, it is possible that xcrab doesn't support the keysym you are looking for at all. pub const VOID_SYMBOL: u32 = 16777215; -pub const BACKSPACE: u32 = 65288; +pub const BACK_SPACE: u32 = 65288; pub const TAB: u32 = 65289; pub const LINEFEED: u32 = 65290; pub const CLEAR: u32 = 65291; @@ -61,7 +65,7 @@ pub const HELP: u32 = 65386; pub const BREAK: u32 = 65387; pub const MODE_SWITCH: u32 = 65406; pub const SCRIPT_SWITCH: u32 = 65406; -pub const NUMBER_LOCK: u32 = 65407; +pub const NUM_LOCK: u32 = 65407; pub const KP_SPACE: u32 = 65408; pub const KP_TAB: u32 = 65417; pub const KP_ENTER: u32 = 65421; @@ -174,7 +178,7 @@ pub const SUPER_R: u32 = 65516; pub const HYPER_L: u32 = 65517; pub const HYPER_R: u32 = 65518; pub const ISO_LOCK: u32 = 65025; -pub const ISO_LEVEL2_LOCK: u32 = 65026; +pub const ISO_LEVEL2_LATCH: u32 = 65026; pub const ISO_LEVEL3_SHIFT: u32 = 65027; pub const ISO_LEVEL3_LATCH: u32 = 65028; pub const ISO_LEVEL3_LOCK: u32 = 65029; @@ -233,7 +237,7 @@ pub const DEAD_SEMIVOICED_SOUND: u32 = 65119; pub const DEAD_BELOWDOT: u32 = 65120; pub const DEAD_HOOK: u32 = 65121; pub const DEAD_HORN: u32 = 65122; -pub const dead_stroke: u32 = 65123; +pub const DEAD_STROKE: u32 = 65123; pub const DEAD_ABOVECOMMA: u32 = 65124; pub const DEAD_PSILI: u32 = 65124; pub const DEAD_ABOVEREVERSEDCOMMA: u32 = 65125; @@ -242,118 +246,72 @@ pub const DEAD_DOUBLEGRAVE: u32 = 65126; pub const DEAD_BELOWRING: u32 = 65127; pub const DEAD_BELOWMACRON: u32 = 65128; pub const DEAD_BELOWCIRCUMFLEX: u32 = 65129; -pub const dead_belowtilde: u32 = 65130; -pub const dead_belowbreve: u32 = 65131; -pub const dead_belowdiaeresis: u32 = 65132; -pub const dead_invertedbreve: u32 = 65133; -pub const dead_belowcomma: u32 = 65134; -pub const dead_currency: u32 = 65135; -pub const dead_lowline: u32 = 65168; -pub const dead_aboveverticalline: u32 = 65169; -pub const dead_belowverticalline: u32 = 65170; -pub const dead_longsolidusoverlay: u32 = 65171; -pub const dead_a: u32 = 65152; -pub const dead_A: u32 = 65153; -pub const dead_e: u32 = 65154; -pub const dead_E: u32 = 65155; -pub const dead_i: u32 = 65156; -pub const dead_I: u32 = 65157; -pub const dead_o: u32 = 65158; -pub const dead_O: u32 = 65159; -pub const dead_u: u32 = 65160; -pub const dead_U: u32 = 65161; -pub const dead_small_schwa: u32 = 65162; -pub const dead_capital_schwa: u32 = 65163; -pub const dead_greek: u32 = 65164; -pub const First_Virtual_Screen: u32 = 65232; -pub const Prev_Virtual_Screen: u32 = 65233; -pub const Next_Virtual_Screen: u32 = 65234; -pub const Last_Virtual_Screen: u32 = 65236; -pub const Terminate_Server: u32 = 65237; -pub const AccessX_Enable: u32 = 65136; -pub const AccessX_Feedback_Enable: u32 = 65137; -pub const RepeatKeys_Enable: u32 = 65138; -pub const SlowKeys_Enable: u32 = 65139; -pub const BounceKeys_Enable: u32 = 65140; -pub const StickyKeys_Enable: u32 = 65141; -pub const MouseKeys_Enable: u32 = 65142; -pub const MouseKeys_Accel_Enable: u32 = 65143; -pub const Overlay1_Enable: u32 = 65144; -pub const Overlay2_Enable: u32 = 65145; -pub const AudibleBell_Enable: u32 = 65146; -pub const Pointer_Left: u32 = 65248; -pub const Pointer_Right: u32 = 65249; -pub const Pointer_Up: u32 = 65250; -pub const Pointer_Down: u32 = 65251; -pub const Pointer_UpLeft: u32 = 65252; -pub const Pointer_UpRight: u32 = 65253; -pub const Pointer_DownLeft: u32 = 65254; -pub const Pointer_DownRight: u32 = 65255; -pub const Pointer_Button_Dflt: u32 = 65256; -pub const Pointer_Button1: u32 = 65257; -pub const Pointer_Button2: u32 = 65258; -pub const Pointer_Button3: u32 = 65259; -pub const Pointer_Button4: u32 = 65260; -pub const Pointer_Button5: u32 = 65261; -pub const Pointer_DblClick_Dflt: u32 = 65262; -pub const Pointer_DblClick1: u32 = 65263; -pub const Pointer_DblClick2: u32 = 65264; -pub const Pointer_DblClick3: u32 = 65265; -pub const Pointer_DblClick4: u32 = 65266; -pub const Pointer_DblClick5: u32 = 65267; -pub const Pointer_Drag_Dflt: u32 = 65268; -pub const Pointer_Drag1: u32 = 65269; -pub const Pointer_Drag2: u32 = 65270; -pub const Pointer_Drag3: u32 = 65271; -pub const Pointer_Drag4: u32 = 65272; -pub const Pointer_Drag5: u32 = 65277; -pub const Pointer_EnableKeys: u32 = 65273; -pub const Pointer_Accelerate: u32 = 65274; -pub const Pointer_DfltBtnNext: u32 = 65275; -pub const Pointer_DfltBtnPrev: u32 = 65276; -pub const ch: u32 = 65184; -pub const Ch: u32 = 65185; -pub const CH: u32 = 65186; -pub const c_h: u32 = 65187; -pub const C_h: u32 = 65188; -pub const C_H: u32 = 65189; -pub const Duplicate_3270: u32 = 64769; -pub const FieldMark_3270: u32 = 64770; -pub const Right2_3270: u32 = 64771; -pub const Left2_3270: u32 = 64772; -pub const BackTab_3270: u32 = 64773; -pub const EraseEOF_3270: u32 = 64774; -pub const EraseInput_3270: u32 = 64775; -pub const Reset_3270: u32 = 64776; -pub const Quit_3270: u32 = 64777; -pub const PA1_3270: u32 = 64778; -pub const PA2_3270: u32 = 64779; -pub const PA3_3270: u32 = 64780; -pub const Test_3270: u32 = 64781; -pub const Attn_3270: u32 = 64782; -pub const CursorBlink_3270: u32 = 64783; -pub const AltCursor_3270: u32 = 64784; -pub const KeyClick_3270: u32 = 64785; -pub const Jump_3270: u32 = 64786; -pub const Ident_3270: u32 = 64787; -pub const Rule_3270: u32 = 64788; -pub const Copy_3270: u32 = 64789; -pub const Play_3270: u32 = 64790; -pub const Setup_3270: u32 = 64791; -pub const Record_3270: u32 = 64792; -pub const ChangeScreen_3270: u32 = 64793; -pub const DeleteWord_3270: u32 = 64794; -pub const ExSelect_3270: u32 = 64795; -pub const CursorSelect_3270: u32 = 64796; -pub const PrintScreen_3270: u32 = 64797; -pub const Enter_3270: u32 = 64798; +pub const DEAD_BELOWTILDE: u32 = 65130; +pub const DEAD_BELOWBREVE: u32 = 65131; +pub const DEAD_BELOWDIAERESIS: u32 = 65132; +pub const DEAD_INVERTEDBREVE: u32 = 65133; +pub const DEAD_BELOWCOMMA: u32 = 65134; +pub const DEAD_CURRENCY: u32 = 65135; +pub const DEAD_LOWLINE: u32 = 65168; +pub const DEAD_ABOVEVERTICALLINE: u32 = 65169; +pub const DEAD_BELOWVERTICALLINE: u32 = 65170; +pub const DEAD_LONGSOLIDUSOVERLAY: u32 = 65171; +pub const DEAD_SMALL_SCHWA: u32 = 65162; +pub const DEAD_CAPITAL_SCHWA: u32 = 65163; +pub const DEAD_GREEK: u32 = 65164; +pub const FIRST_VIRTUAL_SCREEN: u32 = 65232; +pub const PREV_VIRTUAL_SCREEN: u32 = 65233; +pub const NEXT_VIRTUAL_SCREEN: u32 = 65234; +pub const LAST_VIRTUAL_SCREEN: u32 = 65236; +pub const TERMINATE_SERVER: u32 = 65237; +pub const ACCESS_X_ENABLE: u32 = 65136; +pub const ACCESS_X_FEEDBACK_ENABLE: u32 = 65137; +pub const REPEAT_KEYS_ENABLE: u32 = 65138; +pub const SLOW_KEYS_ENABLE: u32 = 65139; +pub const BOUNCE_KEYS_ENABLE: u32 = 65140; +pub const STICKY_KEYS_ENABLE: u32 = 65141; +pub const MOUSE_KEYS_ENABLE: u32 = 65142; +pub const MOUSE_KEYS_ACCEL_ENABLE: u32 = 65143; +pub const OVERLAY1_ENABLE: u32 = 65144; +pub const OVERLAY2_ENABLE: u32 = 65145; +pub const AUDIBLE_BELL_ENABLE: u32 = 65146; +pub const POINTER_LEFT: u32 = 65248; +pub const POINTER_RIGHT: u32 = 65249; +pub const POINTER_UP: u32 = 65250; +pub const POINTER_DOWN: u32 = 65251; +pub const POINTER_UP_LEFT: u32 = 65252; +pub const POINTER_UP_RIGHT: u32 = 65253; +pub const POINTER_DOWN_LEFT: u32 = 65254; +pub const POINTER_DOWN_RIGHT: u32 = 65255; +pub const POINTER_BUTTON_DFLT: u32 = 65256; +pub const POINTER_BUTTON1: u32 = 65257; +pub const POINTER_BUTTON2: u32 = 65258; +pub const POINTER_BUTTON3: u32 = 65259; +pub const POINTER_BUTTON4: u32 = 65260; +pub const POINTER_BUTTON5: u32 = 65261; +pub const POINTER_DBL_CLICK_DFLT: u32 = 65262; +pub const POINTER_DBL_CLICK1: u32 = 65263; +pub const POINTER_DBL_CLICK2: u32 = 65264; +pub const POINTER_DBL_CLICK3: u32 = 65265; +pub const POINTER_DBL_CLICK4: u32 = 65266; +pub const POINTER_DBL_CLICK5: u32 = 65267; +pub const POINTER_DRAG_DFLT: u32 = 65268; +pub const POINTER_DRAG1: u32 = 65269; +pub const POINTER_DRAG2: u32 = 65270; +pub const POINTER_DRAG3: u32 = 65271; +pub const POINTER_DRAG4: u32 = 65272; +pub const POINTER_DRAG5: u32 = 65277; +pub const POINTER_ENABLE_KEYS: u32 = 65273; +pub const POINTER_ACCELERATE: u32 = 65274; +pub const POINTER_DFLT_BTN_NEXT: u32 = 65275; +pub const POINTER_DFLT_BTN_PREV: u32 = 65276; pub const SPACE: u32 = 32; pub const EXCLAM: u32 = 33; pub const QUOTEDBL: u32 = 34; pub const NUMBERSIGN: u32 = 35; pub const DOLLAR: u32 = 36; pub const PERCENT: u32 = 37; -pub const APERSAND: u32 = 38; +pub const AMPERSAND: u32 = 38; pub const APOSTROPHE: u32 = 39; pub const QUOTERIGHT: u32 = 39; pub const PARENLEFT: u32 = 40; @@ -443,1665 +401,1058 @@ pub const LOWER_Z: u32 = 122; pub const BRACELEFT: u32 = 123; pub const BAR: u32 = 124; pub const BRACERIGHT: u32 = 125; -pub const ASCIITILDI: u32 = 126; +pub const ASCIITILDE: u32 = 126; pub const NOBREAKSPACE: u32 = 160; pub const EXCLAMDOWN: u32 = 161; -pub const cent: u32 = 162; -pub const sterling: u32 = 163; -pub const currency: u32 = 164; -pub const yen: u32 = 165; -pub const brokenbar: u32 = 166; -pub const section: u32 = 167; -pub const diaeresis: u32 = 168; -pub const copyright: u32 = 169; -pub const ordfeminine: u32 = 170; -pub const guillemotleft: u32 = 171; -pub const notsign: u32 = 172; -pub const hyphen: u32 = 173; -pub const registered: u32 = 174; -pub const macron: u32 = 175; -pub const degree: u32 = 176; -pub const plusminus: u32 = 177; -pub const twosuperior: u32 = 178; -pub const threesuperior: u32 = 179; -pub const acute: u32 = 180; -pub const mu: u32 = 181; -pub const paragraph: u32 = 182; -pub const periodcentered: u32 = 183; -pub const cedilla: u32 = 184; -pub const onesuperior: u32 = 185; -pub const masculine: u32 = 186; -pub const guillemotright: u32 = 187; -pub const onequarter: u32 = 188; -pub const onehalf: u32 = 189; -pub const threequarters: u32 = 190; -pub const questiondown: u32 = 191; -pub const Agrave: u32 = 192; -pub const Aacute: u32 = 193; -pub const Acircumflex: u32 = 194; -pub const Atilde: u32 = 195; -pub const Adiaeresis: u32 = 196; -pub const Aring: u32 = 197; -pub const AE: u32 = 198; -pub const Ccedilla: u32 = 199; -pub const Egrave: u32 = 200; -pub const Eacute: u32 = 201; -pub const Ecircumflex: u32 = 202; -pub const Ediaeresis: u32 = 203; -pub const Igrave: u32 = 204; -pub const Iacute: u32 = 205; -pub const Icircumflex: u32 = 206; -pub const Idiaeresis: u32 = 207; -pub const ETH: u32 = 208; -pub const Eth: u32 = 208; -pub const Ntilde: u32 = 209; -pub const Ograve: u32 = 210; -pub const Oacute: u32 = 211; -pub const Ocircumflex: u32 = 212; -pub const Otilde: u32 = 213; -pub const Odiaeresis: u32 = 214; -pub const multiply: u32 = 215; -pub const Oslash: u32 = 216; -pub const Ooblique: u32 = 216; -pub const Ugrave: u32 = 217; -pub const Uacute: u32 = 218; -pub const Ucircumflex: u32 = 219; -pub const Udiaeresis: u32 = 220; -pub const Yacute: u32 = 221; -pub const THORN: u32 = 222; -pub const Thorn: u32 = 222; -pub const ssharp: u32 = 223; -pub const agrave: u32 = 224; -pub const aacute: u32 = 225; -pub const acircumflex: u32 = 226; -pub const atilde: u32 = 227; -pub const adiaeresis: u32 = 228; -pub const aring: u32 = 229; -pub const ae: u32 = 230; -pub const ccedilla: u32 = 231; -pub const egrave: u32 = 232; -pub const eacute: u32 = 233; -pub const ecircumflex: u32 = 234; -pub const ediaeresis: u32 = 235; -pub const igrave: u32 = 236; -pub const iacute: u32 = 237; -pub const icircumflex: u32 = 238; -pub const idiaeresis: u32 = 239; -pub const eth: u32 = 240; -pub const ntilde: u32 = 241; -pub const ograve: u32 = 242; -pub const oacute: u32 = 243; -pub const ocircumflex: u32 = 244; -pub const otilde: u32 = 245; -pub const odiaeresis: u32 = 246; -pub const division: u32 = 247; -pub const oslash: u32 = 248; -pub const ooblique: u32 = 248; -pub const ugrave: u32 = 249; -pub const uacute: u32 = 250; -pub const ucircumflex: u32 = 251; -pub const udiaeresis: u32 = 252; -pub const yacute: u32 = 253; -pub const thorn: u32 = 254; -pub const ydiaeresis: u32 = 255; -pub const Aogonek: u32 = 417; -pub const breve: u32 = 418; -pub const Lstroke: u32 = 419; -pub const Lcaron: u32 = 421; -pub const Sacute: u32 = 422; -pub const Scaron: u32 = 425; -pub const Scedilla: u32 = 426; -pub const Tcaron: u32 = 427; -pub const Zacute: u32 = 428; -pub const Zcaron: u32 = 430; -pub const Zabovedot: u32 = 431; -pub const aogonek: u32 = 433; -pub const ogonek: u32 = 434; -pub const lstroke: u32 = 435; -pub const lcaron: u32 = 437; -pub const sacute: u32 = 438; -pub const caron: u32 = 439; -pub const scaron: u32 = 441; -pub const scedilla: u32 = 442; -pub const tcaron: u32 = 443; -pub const zacute: u32 = 444; -pub const doubleacute: u32 = 445; -pub const zcaron: u32 = 446; -pub const zabovedot: u32 = 447; -pub const Racute: u32 = 448; -pub const Abreve: u32 = 451; -pub const Lacute: u32 = 453; -pub const Cacute: u32 = 454; -pub const Ccaron: u32 = 456; -pub const Eogonek: u32 = 458; -pub const Ecaron: u32 = 460; -pub const Dcaron: u32 = 463; -pub const Dstroke: u32 = 464; -pub const Nacute: u32 = 465; -pub const Ncaron: u32 = 466; -pub const Odoubleacute: u32 = 469; -pub const Rcaron: u32 = 472; -pub const Uring: u32 = 473; -pub const Udoubleacute: u32 = 475; -pub const Tcedilla: u32 = 478; -pub const racute: u32 = 480; -pub const abreve: u32 = 483; -pub const lacute: u32 = 485; -pub const cacute: u32 = 486; -pub const ccaron: u32 = 488; -pub const eogonek: u32 = 490; -pub const ecaron: u32 = 492; -pub const dcaron: u32 = 495; -pub const dstroke: u32 = 496; -pub const nacute: u32 = 497; -pub const ncaron: u32 = 498; -pub const odoubleacute: u32 = 501; -pub const rcaron: u32 = 504; -pub const uring: u32 = 505; -pub const udoubleacute: u32 = 507; -pub const tcedilla: u32 = 510; -pub const abovedot: u32 = 511; -pub const Hstroke: u32 = 673; -pub const Hcircumflex: u32 = 678; -pub const Iabovedot: u32 = 681; -pub const Gbreve: u32 = 683; -pub const Jcircumflex: u32 = 684; -pub const hstroke: u32 = 689; -pub const hcircumflex: u32 = 694; -pub const idotless: u32 = 697; -pub const gbreve: u32 = 699; -pub const jcircumflex: u32 = 700; -pub const Cabovedot: u32 = 709; -pub const Ccircumflex: u32 = 710; -pub const Gabovedot: u32 = 725; -pub const Gcircumflex: u32 = 728; -pub const Ubreve: u32 = 733; -pub const Scircumflex: u32 = 734; -pub const cabovedot: u32 = 741; -pub const ccircumflex: u32 = 742; -pub const gabovedot: u32 = 757; -pub const gcircumflex: u32 = 760; -pub const ubreve: u32 = 765; -pub const scircumflex: u32 = 766; -pub const kra: u32 = 930; -pub const kappa: u32 = 930; -pub const Rcedilla: u32 = 931; -pub const Itilde: u32 = 933; -pub const Lcedilla: u32 = 934; -pub const Emacron: u32 = 938; -pub const Gcedilla: u32 = 939; -pub const Tslash: u32 = 940; -pub const rcedilla: u32 = 947; -pub const itilde: u32 = 949; -pub const lcedilla: u32 = 950; -pub const emacron: u32 = 954; -pub const gcedilla: u32 = 955; -pub const tslash: u32 = 956; -pub const ENG: u32 = 957; -pub const eng: u32 = 959; -pub const Amacron: u32 = 960; -pub const Iogonek: u32 = 967; -pub const Eabovedot: u32 = 972; -pub const Imacron: u32 = 975; -pub const Ncedilla: u32 = 977; -pub const Omacron: u32 = 978; -pub const Kcedilla: u32 = 979; -pub const Uogonek: u32 = 985; -pub const Utilde: u32 = 989; -pub const Umacron: u32 = 990; -pub const amacron: u32 = 992; -pub const iogonek: u32 = 999; -pub const eabovedot: u32 = 1004; -pub const imacron: u32 = 1007; -pub const ncedilla: u32 = 1009; -pub const omacron: u32 = 1010; -pub const kcedilla: u32 = 1011; -pub const uogonek: u32 = 1017; -pub const utilde: u32 = 1021; -pub const umacron: u32 = 1022; -pub const Wcircumflex: u32 = 16777588; -pub const wcircumflex: u32 = 16777589; -pub const Ycircumflex: u32 = 16777590; -pub const ycircumflex: u32 = 16777591; -pub const Babovedot: u32 = 16784898; -pub const babovedot: u32 = 16784899; -pub const Dabovedot: u32 = 16784906; -pub const dabovedot: u32 = 16784907; -pub const Fabovedot: u32 = 16784926; -pub const fabovedot: u32 = 16784927; -pub const Mabovedot: u32 = 16784960; -pub const mabovedot: u32 = 16784961; -pub const Pabovedot: u32 = 16784982; -pub const pabovedot: u32 = 16784983; -pub const Sabovedot: u32 = 16784992; -pub const sabovedot: u32 = 16784993; -pub const Tabovedot: u32 = 16785002; -pub const tabovedot: u32 = 16785003; -pub const Wgrave: u32 = 16785024; -pub const wgrave: u32 = 16785025; -pub const Wacute: u32 = 16785026; -pub const wacute: u32 = 16785027; -pub const Wdiaeresis: u32 = 16785028; -pub const wdiaeresis: u32 = 16785029; -pub const Ygrave: u32 = 16785138; -pub const ygrave: u32 = 16785139; -pub const OE: u32 = 5052; -pub const oe: u32 = 5053; -pub const Ydiaeresis: u32 = 5054; -pub const overline: u32 = 1150; -pub const kana_fullstop: u32 = 1185; -pub const kana_openingbracket: u32 = 1186; -pub const kana_closingbracket: u32 = 1187; -pub const kana_comma: u32 = 1188; -pub const kana_conjunctive: u32 = 1189; -pub const kana_middledot: u32 = 1189; -pub const kana_WO: u32 = 1190; -pub const kana_a: u32 = 1191; -pub const kana_i: u32 = 1192; -pub const kana_u: u32 = 1193; -pub const kana_e: u32 = 1194; -pub const kana_o: u32 = 1195; -pub const kana_ya: u32 = 1196; -pub const kana_yu: u32 = 1197; -pub const kana_yo: u32 = 1198; -pub const kana_tsu: u32 = 1199; -pub const kana_tu: u32 = 1199; -pub const prolongedsound: u32 = 1200; -pub const kana_A: u32 = 1201; -pub const kana_I: u32 = 1202; -pub const kana_U: u32 = 1203; -pub const kana_E: u32 = 1204; -pub const kana_O: u32 = 1205; -pub const kana_KA: u32 = 1206; -pub const kana_KI: u32 = 1207; -pub const kana_KU: u32 = 1208; -pub const kana_KE: u32 = 1209; -pub const kana_KO: u32 = 1210; -pub const kana_SA: u32 = 1211; -pub const kana_SHI: u32 = 1212; -pub const kana_SU: u32 = 1213; -pub const kana_SE: u32 = 1214; -pub const kana_SO: u32 = 1215; -pub const kana_TA: u32 = 1216; -pub const kana_CHI: u32 = 1217; -pub const kana_TI: u32 = 1217; -pub const kana_TSU: u32 = 1218; -pub const kana_TU: u32 = 1218; -pub const kana_TE: u32 = 1219; -pub const kana_TO: u32 = 1220; -pub const kana_NA: u32 = 1221; -pub const kana_NI: u32 = 1222; -pub const kana_NU: u32 = 1223; -pub const kana_NE: u32 = 1224; -pub const kana_NO: u32 = 1225; -pub const kana_HA: u32 = 1226; -pub const kana_HI: u32 = 1227; -pub const kana_FU: u32 = 1228; -pub const kana_HU: u32 = 1228; -pub const kana_HE: u32 = 1229; -pub const kana_HO: u32 = 1230; -pub const kana_MA: u32 = 1231; -pub const kana_MI: u32 = 1232; -pub const kana_MU: u32 = 1233; -pub const kana_ME: u32 = 1234; -pub const kana_MO: u32 = 1235; -pub const kana_YA: u32 = 1236; -pub const kana_YU: u32 = 1237; -pub const kana_YO: u32 = 1238; -pub const kana_RA: u32 = 1239; -pub const kana_RI: u32 = 1240; -pub const kana_RU: u32 = 1241; -pub const kana_RE: u32 = 1242; -pub const kana_RO: u32 = 1243; -pub const kana_WA: u32 = 1244; -pub const kana_N: u32 = 1245; -pub const voicedsound: u32 = 1246; -pub const semivoicedsound: u32 = 1247; -pub const kana_switch: u32 = 65406; -pub const Farsi_0: u32 = 16778992; -pub const Farsi_1: u32 = 16778993; -pub const Farsi_2: u32 = 16778994; -pub const Farsi_3: u32 = 16778995; -pub const Farsi_4: u32 = 16778996; -pub const Farsi_5: u32 = 16778997; -pub const Farsi_6: u32 = 16778998; -pub const Farsi_7: u32 = 16778999; -pub const Farsi_8: u32 = 16779000; -pub const Farsi_9: u32 = 16779001; -pub const Arabic_percent: u32 = 16778858; -pub const Arabic_superscript_alef: u32 = 16778864; -pub const Arabic_tteh: u32 = 16778873; -pub const Arabic_peh: u32 = 16778878; -pub const Arabic_tcheh: u32 = 16778886; -pub const Arabic_ddal: u32 = 16778888; -pub const Arabic_rreh: u32 = 16778897; -pub const Arabic_comma: u32 = 1452; -pub const Arabic_fullstop: u32 = 16778964; -pub const Arabic_0: u32 = 16778848; -pub const Arabic_1: u32 = 16778849; -pub const Arabic_2: u32 = 16778850; -pub const Arabic_3: u32 = 16778851; -pub const Arabic_4: u32 = 16778852; -pub const Arabic_5: u32 = 16778853; -pub const Arabic_6: u32 = 16778854; -pub const Arabic_7: u32 = 16778855; -pub const Arabic_8: u32 = 16778856; -pub const Arabic_9: u32 = 16778857; -pub const Arabic_semicolon: u32 = 1467; -pub const Arabic_question_mark: u32 = 1471; -pub const Arabic_hamza: u32 = 1473; -pub const Arabic_maddaonalef: u32 = 1474; -pub const Arabic_hamzaonalef: u32 = 1475; -pub const Arabic_hamzaonwaw: u32 = 1476; -pub const Arabic_hamzaunderalef: u32 = 1477; -pub const Arabic_hamzaonyeh: u32 = 1478; -pub const Arabic_alef: u32 = 1479; -pub const Arabic_beh: u32 = 1480; -pub const Arabic_tehmarbuta: u32 = 1481; -pub const Arabic_teh: u32 = 1482; -pub const Arabic_theh: u32 = 1483; -pub const Arabic_jeem: u32 = 1484; -pub const Arabic_hah: u32 = 1485; -pub const Arabic_khah: u32 = 1486; -pub const Arabic_dal: u32 = 1487; -pub const Arabic_thal: u32 = 1488; -pub const Arabic_ra: u32 = 1489; -pub const Arabic_zain: u32 = 1490; -pub const Arabic_seen: u32 = 1491; -pub const Arabic_sheen: u32 = 1492; -pub const Arabic_sad: u32 = 1493; -pub const Arabic_dad: u32 = 1494; -pub const Arabic_tah: u32 = 1495; -pub const Arabic_zah: u32 = 1496; -pub const Arabic_ain: u32 = 1497; -pub const Arabic_ghain: u32 = 1498; -pub const Arabic_tatweel: u32 = 1504; -pub const Arabic_feh: u32 = 1505; -pub const Arabic_qaf: u32 = 1506; -pub const Arabic_kaf: u32 = 1507; -pub const Arabic_lam: u32 = 1508; -pub const Arabic_meem: u32 = 1509; -pub const Arabic_noon: u32 = 1510; -pub const Arabic_ha: u32 = 1511; -pub const Arabic_heh: u32 = 1511; -pub const Arabic_waw: u32 = 1512; -pub const Arabic_alefmaksura: u32 = 1513; -pub const Arabic_yeh: u32 = 1514; -pub const Arabic_fathatan: u32 = 1515; -pub const Arabic_dammatan: u32 = 1516; -pub const Arabic_kasratan: u32 = 1517; -pub const Arabic_fatha: u32 = 1518; -pub const Arabic_damma: u32 = 1519; -pub const Arabic_kasra: u32 = 1520; -pub const Arabic_shadda: u32 = 1521; -pub const Arabic_sukun: u32 = 1522; -pub const Arabic_madda_above: u32 = 16778835; -pub const Arabic_hamza_above: u32 = 16778836; -pub const Arabic_hamza_below: u32 = 16778837; -pub const Arabic_jeh: u32 = 16778904; -pub const Arabic_veh: u32 = 16778916; -pub const Arabic_keheh: u32 = 16778921; -pub const Arabic_gaf: u32 = 16778927; -pub const Arabic_noon_ghunna: u32 = 16778938; -pub const Arabic_heh_doachashmee: u32 = 16778942; -pub const Farsi_yeh: u32 = 16778956; -pub const Arabic_farsi_yeh: u32 = 16778956; -pub const Arabic_yeh_baree: u32 = 16778962; -pub const Arabic_heh_goal: u32 = 16778945; -pub const Arabic_switch: u32 = 65406; -pub const Cyrillic_GHE_bar: u32 = 16778386; -pub const Cyrillic_ghe_bar: u32 = 16778387; -pub const Cyrillic_ZHE_descender: u32 = 16778390; -pub const Cyrillic_zhe_descender: u32 = 16778391; -pub const Cyrillic_KA_descender: u32 = 16778394; -pub const Cyrillic_ka_descender: u32 = 16778395; -pub const Cyrillic_KA_vertstroke: u32 = 16778396; -pub const Cyrillic_ka_vertstroke: u32 = 16778397; -pub const Cyrillic_EN_descender: u32 = 16778402; -pub const Cyrillic_en_descender: u32 = 16778403; -pub const Cyrillic_U_straight: u32 = 16778414; -pub const Cyrillic_u_straight: u32 = 16778415; -pub const Cyrillic_U_straight_bar: u32 = 16778416; -pub const Cyrillic_u_straight_bar: u32 = 16778417; -pub const Cyrillic_HA_descender: u32 = 16778418; -pub const Cyrillic_ha_descender: u32 = 16778419; -pub const Cyrillic_CHE_descender: u32 = 16778422; -pub const Cyrillic_che_descender: u32 = 16778423; -pub const Cyrillic_CHE_vertstroke: u32 = 16778424; -pub const Cyrillic_che_vertstroke: u32 = 16778425; -pub const Cyrillic_SHHA: u32 = 16778426; -pub const Cyrillic_shha: u32 = 16778427; -pub const Cyrillic_SCHWA: u32 = 16778456; -pub const Cyrillic_schwa: u32 = 16778457; -pub const Cyrillic_I_macron: u32 = 16778466; -pub const Cyrillic_i_macron: u32 = 16778467; -pub const Cyrillic_O_bar: u32 = 16778472; -pub const Cyrillic_o_bar: u32 = 16778473; -pub const Cyrillic_U_macron: u32 = 16778478; -pub const Cyrillic_u_macron: u32 = 16778479; -pub const Serbian_dje: u32 = 1697; -pub const Macedonia_gje: u32 = 1698; -pub const Cyrillic_io: u32 = 1699; -pub const Ukrainian_ie: u32 = 1700; -pub const Ukranian_je: u32 = 1700; -pub const Macedonia_dse: u32 = 1701; -pub const Ukrainian_i: u32 = 1702; -pub const Ukranian_i: u32 = 1702; -pub const Ukrainian_yi: u32 = 1703; -pub const Ukranian_yi: u32 = 1703; -pub const Cyrillic_je: u32 = 1704; -pub const Serbian_je: u32 = 1704; -pub const Cyrillic_lje: u32 = 1705; -pub const Serbian_lje: u32 = 1705; -pub const Cyrillic_nje: u32 = 1706; -pub const Serbian_nje: u32 = 1706; -pub const Serbian_tshe: u32 = 1707; -pub const Macedonia_kje: u32 = 1708; -pub const Ukrainian_ghe_with_upturn: u32 = 1709; -pub const Byelorussian_shortu: u32 = 1710; -pub const Cyrillic_dzhe: u32 = 1711; -pub const Serbian_dze: u32 = 1711; -pub const numerosign: u32 = 1712; -pub const Serbian_DJE: u32 = 1713; -pub const Macedonia_GJE: u32 = 1714; -pub const Cyrillic_IO: u32 = 1715; -pub const Ukrainian_IE: u32 = 1716; -pub const Ukranian_JE: u32 = 1716; -pub const Macedonia_DSE: u32 = 1717; -pub const Ukrainian_I: u32 = 1718; -pub const Ukranian_I: u32 = 1718; -pub const Ukrainian_YI: u32 = 1719; -pub const Ukranian_YI: u32 = 1719; -pub const Cyrillic_JE: u32 = 1720; -pub const Serbian_JE: u32 = 1720; -pub const Cyrillic_LJE: u32 = 1721; -pub const Serbian_LJE: u32 = 1721; -pub const Cyrillic_NJE: u32 = 1722; -pub const Serbian_NJE: u32 = 1722; -pub const Serbian_TSHE: u32 = 1723; -pub const Macedonia_KJE: u32 = 1724; -pub const Ukrainian_GHE_WITH_UPTURN: u32 = 1725; -pub const Byelorussian_SHORTU: u32 = 1726; -pub const Cyrillic_DZHE: u32 = 1727; -pub const Serbian_DZE: u32 = 1727; -pub const Cyrillic_yu: u32 = 1728; -pub const Cyrillic_a: u32 = 1729; -pub const Cyrillic_be: u32 = 1730; -pub const Cyrillic_tse: u32 = 1731; -pub const Cyrillic_de: u32 = 1732; -pub const Cyrillic_ie: u32 = 1733; -pub const Cyrillic_ef: u32 = 1734; -pub const Cyrillic_ghe: u32 = 1735; -pub const Cyrillic_ha: u32 = 1736; -pub const Cyrillic_i: u32 = 1737; -pub const Cyrillic_shorti: u32 = 1738; -pub const Cyrillic_ka: u32 = 1739; -pub const Cyrillic_el: u32 = 1740; -pub const Cyrillic_em: u32 = 1741; -pub const Cyrillic_en: u32 = 1742; -pub const Cyrillic_o: u32 = 1743; -pub const Cyrillic_pe: u32 = 1744; -pub const Cyrillic_ya: u32 = 1745; -pub const Cyrillic_er: u32 = 1746; -pub const Cyrillic_es: u32 = 1747; -pub const Cyrillic_te: u32 = 1748; -pub const Cyrillic_u: u32 = 1749; -pub const Cyrillic_zhe: u32 = 1750; -pub const Cyrillic_ve: u32 = 1751; -pub const Cyrillic_softsign: u32 = 1752; -pub const Cyrillic_yeru: u32 = 1753; -pub const Cyrillic_ze: u32 = 1754; -pub const Cyrillic_sha: u32 = 1755; -pub const Cyrillic_e: u32 = 1756; -pub const Cyrillic_shcha: u32 = 1757; -pub const Cyrillic_che: u32 = 1758; -pub const Cyrillic_hardsign: u32 = 1759; -pub const Cyrillic_YU: u32 = 1760; -pub const Cyrillic_A: u32 = 1761; -pub const Cyrillic_BE: u32 = 1762; -pub const Cyrillic_TSE: u32 = 1763; -pub const Cyrillic_DE: u32 = 1764; -pub const Cyrillic_IE: u32 = 1765; -pub const Cyrillic_EF: u32 = 1766; -pub const Cyrillic_GHE: u32 = 1767; -pub const Cyrillic_HA: u32 = 1768; -pub const Cyrillic_I: u32 = 1769; -pub const Cyrillic_SHORTI: u32 = 1770; -pub const Cyrillic_KA: u32 = 1771; -pub const Cyrillic_EL: u32 = 1772; -pub const Cyrillic_EM: u32 = 1773; -pub const Cyrillic_EN: u32 = 1774; -pub const Cyrillic_O: u32 = 1775; -pub const Cyrillic_PE: u32 = 1776; -pub const Cyrillic_YA: u32 = 1777; -pub const Cyrillic_ER: u32 = 1778; -pub const Cyrillic_ES: u32 = 1779; -pub const Cyrillic_TE: u32 = 1780; -pub const Cyrillic_U: u32 = 1781; -pub const Cyrillic_ZHE: u32 = 1782; -pub const Cyrillic_VE: u32 = 1783; -pub const Cyrillic_SOFTSIGN: u32 = 1784; -pub const Cyrillic_YERU: u32 = 1785; -pub const Cyrillic_ZE: u32 = 1786; -pub const Cyrillic_SHA: u32 = 1787; -pub const Cyrillic_E: u32 = 1788; -pub const Cyrillic_SHCHA: u32 = 1789; -pub const Cyrillic_CHE: u32 = 1790; -pub const Cyrillic_HARDSIGN: u32 = 1791; -pub const Greek_ALPHAaccent: u32 = 1953; -pub const Greek_EPSILONaccent: u32 = 1954; -pub const Greek_ETAaccent: u32 = 1955; -pub const Greek_IOTAaccent: u32 = 1956; -pub const Greek_IOTAdieresis: u32 = 1957; -pub const Greek_IOTAdiaeresis: u32 = 1957; -pub const Greek_OMICRONaccent: u32 = 1959; -pub const Greek_UPSILONaccent: u32 = 1960; -pub const Greek_UPSILONdieresis: u32 = 1961; -pub const Greek_OMEGAaccent: u32 = 1963; -pub const Greek_accentdieresis: u32 = 1966; -pub const Greek_horizbar: u32 = 1967; -pub const Greek_alphaaccent: u32 = 1969; -pub const Greek_epsilonaccent: u32 = 1970; -pub const Greek_etaaccent: u32 = 1971; -pub const Greek_iotaaccent: u32 = 1972; -pub const Greek_iotadieresis: u32 = 1973; -pub const Greek_iotaaccentdieresis: u32 = 1974; -pub const Greek_omicronaccent: u32 = 1975; -pub const Greek_upsilonaccent: u32 = 1976; -pub const Greek_upsilondieresis: u32 = 1977; -pub const Greek_upsilonaccentdieresis: u32 = 1978; -pub const Greek_omegaaccent: u32 = 1979; -pub const Greek_ALPHA: u32 = 1985; -pub const Greek_BETA: u32 = 1986; -pub const Greek_GAMMA: u32 = 1987; -pub const Greek_DELTA: u32 = 1988; -pub const Greek_EPSILON: u32 = 1989; -pub const Greek_ZETA: u32 = 1990; -pub const Greek_ETA: u32 = 1991; -pub const Greek_THETA: u32 = 1992; -pub const Greek_IOTA: u32 = 1993; -pub const Greek_KAPPA: u32 = 1994; -pub const Greek_LAMDA: u32 = 1995; -pub const Greek_LAMBDA: u32 = 1995; -pub const Greek_MU: u32 = 1996; -pub const Greek_NU: u32 = 1997; -pub const Greek_XI: u32 = 1998; -pub const Greek_OMICRON: u32 = 1999; -pub const Greek_PI: u32 = 2000; -pub const Greek_RHO: u32 = 2001; -pub const Greek_SIGMA: u32 = 2002; -pub const Greek_TAU: u32 = 2004; -pub const Greek_UPSILON: u32 = 2005; -pub const Greek_PHI: u32 = 2006; -pub const Greek_CHI: u32 = 2007; -pub const Greek_PSI: u32 = 2008; -pub const Greek_OMEGA: u32 = 2009; -pub const Greek_alpha: u32 = 2017; -pub const Greek_beta: u32 = 2018; -pub const Greek_gamma: u32 = 2019; -pub const Greek_delta: u32 = 2020; -pub const Greek_epsilon: u32 = 2021; -pub const Greek_zeta: u32 = 2022; -pub const Greek_eta: u32 = 2023; -pub const Greek_theta: u32 = 2024; -pub const Greek_iota: u32 = 2025; -pub const Greek_kappa: u32 = 2026; -pub const Greek_lamda: u32 = 2027; -pub const Greek_lambda: u32 = 2027; -pub const Greek_mu: u32 = 2028; -pub const Greek_nu: u32 = 2029; -pub const Greek_xi: u32 = 2030; -pub const Greek_omicron: u32 = 2031; -pub const Greek_pi: u32 = 2032; -pub const Greek_rho: u32 = 2033; -pub const Greek_sigma: u32 = 2034; -pub const Greek_finalsmallsigma: u32 = 2035; -pub const Greek_tau: u32 = 2036; -pub const Greek_upsilon: u32 = 2037; -pub const Greek_phi: u32 = 2038; -pub const Greek_chi: u32 = 2039; -pub const Greek_psi: u32 = 2040; -pub const Greek_omega: u32 = 2041; -pub const Greek_switch: u32 = 65406; -pub const leftradical: u32 = 2209; -pub const topleftradical: u32 = 2210; -pub const horizconnector: u32 = 2211; -pub const topintegral: u32 = 2212; -pub const botintegral: u32 = 2213; -pub const vertconnector: u32 = 2214; -pub const topleftsqbracket: u32 = 2215; -pub const botleftsqbracket: u32 = 2216; -pub const toprightsqbracket: u32 = 2217; -pub const botrightsqbracket: u32 = 2218; -pub const topleftparens: u32 = 2219; -pub const botleftparens: u32 = 2220; -pub const toprightparens: u32 = 2221; -pub const botrightparens: u32 = 2222; -pub const leftmiddlecurlybrace: u32 = 2223; -pub const rightmiddlecurlybrace: u32 = 2224; -pub const topleftsummation: u32 = 2225; -pub const botleftsummation: u32 = 2226; -pub const topvertsummationconnector: u32 = 2227; -pub const botvertsummationconnector: u32 = 2228; -pub const toprightsummation: u32 = 2229; -pub const botrightsummation: u32 = 2230; -pub const rightmiddlesummation: u32 = 2231; -pub const lessthanequal: u32 = 2236; -pub const notequal: u32 = 2237; -pub const greaterthanequal: u32 = 2238; -pub const integral: u32 = 2239; -pub const therefore: u32 = 2240; -pub const variation: u32 = 2241; -pub const infinity: u32 = 2242; -pub const nabla: u32 = 2245; -pub const approximate: u32 = 2248; -pub const similarequal: u32 = 2249; -pub const ifonlyif: u32 = 2253; -pub const implies: u32 = 2254; -pub const identical: u32 = 2255; -pub const radical: u32 = 2262; -pub const includedin: u32 = 2266; -pub const includes: u32 = 2267; -pub const intersection: u32 = 2268; -pub const union: u32 = 2269; -pub const logicaland: u32 = 2270; -pub const logicalor: u32 = 2271; -pub const partialderivative: u32 = 2287; -pub const function: u32 = 2294; -pub const leftarrow: u32 = 2299; -pub const uparrow: u32 = 2300; -pub const rightarrow: u32 = 2301; -pub const downarrow: u32 = 2302; -pub const blank: u32 = 2527; -pub const soliddiamond: u32 = 2528; -pub const checkerboard: u32 = 2529; -pub const ht: u32 = 2530; -pub const ff: u32 = 2531; -pub const cr: u32 = 2532; -pub const lf: u32 = 2533; -pub const nl: u32 = 2536; -pub const vt: u32 = 2537; -pub const lowrightcorner: u32 = 2538; -pub const uprightcorner: u32 = 2539; -pub const upleftcorner: u32 = 2540; -pub const lowleftcorner: u32 = 2541; -pub const crossinglines: u32 = 2542; -pub const horizlinescan1: u32 = 2543; -pub const horizlinescan3: u32 = 2544; -pub const horizlinescan5: u32 = 2545; -pub const horizlinescan7: u32 = 2546; -pub const horizlinescan9: u32 = 2547; -pub const leftt: u32 = 2548; -pub const rightt: u32 = 2549; -pub const bott: u32 = 2550; -pub const topt: u32 = 2551; -pub const vertbar: u32 = 2552; -pub const emspace: u32 = 2721; -pub const enspace: u32 = 2722; -pub const em3space: u32 = 2723; -pub const em4space: u32 = 2724; -pub const digitspace: u32 = 2725; -pub const punctspace: u32 = 2726; -pub const thinspace: u32 = 2727; -pub const hairspace: u32 = 2728; -pub const emdash: u32 = 2729; -pub const endash: u32 = 2730; -pub const signifblank: u32 = 2732; -pub const ellipsis: u32 = 2734; -pub const doubbaselinedot: u32 = 2735; -pub const onethird: u32 = 2736; -pub const twothirds: u32 = 2737; -pub const onefifth: u32 = 2738; -pub const twofifths: u32 = 2739; -pub const threefifths: u32 = 2740; -pub const fourfifths: u32 = 2741; -pub const onesixth: u32 = 2742; -pub const fivesixths: u32 = 2743; -pub const careof: u32 = 2744; -pub const figdash: u32 = 2747; -pub const leftanglebracket: u32 = 2748; -pub const decimalpoint: u32 = 2749; -pub const rightanglebracket: u32 = 2750; -pub const marker: u32 = 2751; -pub const oneeighth: u32 = 2755; -pub const threeeighths: u32 = 2756; -pub const fiveeighths: u32 = 2757; -pub const seveneighths: u32 = 2758; -pub const trademark: u32 = 2761; -pub const signaturemark: u32 = 2762; -pub const trademarkincircle: u32 = 2763; -pub const leftopentriangle: u32 = 2764; -pub const rightopentriangle: u32 = 2765; -pub const emopencircle: u32 = 2766; -pub const emopenrectangle: u32 = 2767; -pub const leftsinglequotemark: u32 = 2768; -pub const rightsinglequotemark: u32 = 2769; -pub const leftdoublequotemark: u32 = 2770; -pub const rightdoublequotemark: u32 = 2771; -pub const prescription: u32 = 2772; -pub const permille: u32 = 2773; -pub const minutes: u32 = 2774; -pub const seconds: u32 = 2775; -pub const latincross: u32 = 2777; -pub const hexagram: u32 = 2778; -pub const filledrectbullet: u32 = 2779; -pub const filledlefttribullet: u32 = 2780; -pub const filledrighttribullet: u32 = 2781; -pub const emfilledcircle: u32 = 2782; -pub const emfilledrect: u32 = 2783; -pub const enopencircbullet: u32 = 2784; -pub const enopensquarebullet: u32 = 2785; -pub const openrectbullet: u32 = 2786; -pub const opentribulletup: u32 = 2787; -pub const opentribulletdown: u32 = 2788; -pub const openstar: u32 = 2789; -pub const enfilledcircbullet: u32 = 2790; -pub const enfilledsqbullet: u32 = 2791; -pub const filledtribulletup: u32 = 2792; -pub const filledtribulletdown: u32 = 2793; -pub const leftpointer: u32 = 2794; -pub const rightpointer: u32 = 2795; -pub const club: u32 = 2796; -pub const diamond: u32 = 2797; -pub const heart: u32 = 2798; -pub const maltesecross: u32 = 2800; -pub const dagger: u32 = 2801; -pub const doubledagger: u32 = 2802; -pub const checkmark: u32 = 2803; -pub const ballotcross: u32 = 2804; -pub const musicalsharp: u32 = 2805; -pub const musicalflat: u32 = 2806; -pub const malesymbol: u32 = 2807; -pub const femalesymbol: u32 = 2808; -pub const telephone: u32 = 2809; -pub const telephonerecorder: u32 = 2810; -pub const phonographcopyright: u32 = 2811; -pub const caret: u32 = 2812; -pub const singlelowquotemark: u32 = 2813; -pub const doublelowquotemark: u32 = 2814; -pub const cursor: u32 = 2815; -pub const leftcaret: u32 = 2979; -pub const rightcaret: u32 = 2982; -pub const downcaret: u32 = 2984; -pub const upcaret: u32 = 2985; -pub const overbar: u32 = 3008; -pub const downtack: u32 = 3010; -pub const upshoe: u32 = 3011; -pub const downstile: u32 = 3012; -pub const underbar: u32 = 3014; -pub const jot: u32 = 3018; -pub const quad: u32 = 3020; -pub const uptack: u32 = 3022; -pub const circle: u32 = 3023; -pub const upstile: u32 = 3027; -pub const downshoe: u32 = 3030; -pub const rightshoe: u32 = 3032; -pub const leftshoe: u32 = 3034; -pub const lefttack: u32 = 3036; -pub const righttack: u32 = 3068; -pub const hebrew_doublelowline: u32 = 3295; -pub const hebrew_aleph: u32 = 3296; -pub const hebrew_bet: u32 = 3297; -pub const hebrew_beth: u32 = 3297; -pub const hebrew_gimel: u32 = 3298; -pub const hebrew_gimmel: u32 = 3298; -pub const hebrew_dalet: u32 = 3299; -pub const hebrew_daleth: u32 = 3299; -pub const hebrew_he: u32 = 3300; -pub const hebrew_waw: u32 = 3301; -pub const hebrew_zain: u32 = 3302; -pub const hebrew_zayin: u32 = 3302; -pub const hebrew_chet: u32 = 3303; -pub const hebrew_het: u32 = 3303; -pub const hebrew_tet: u32 = 3304; -pub const hebrew_teth: u32 = 3304; -pub const hebrew_yod: u32 = 3305; -pub const hebrew_finalkaph: u32 = 3306; -pub const hebrew_kaph: u32 = 3307; -pub const hebrew_lamed: u32 = 3308; -pub const hebrew_finalmem: u32 = 3309; -pub const hebrew_mem: u32 = 3310; -pub const hebrew_finalnun: u32 = 3311; -pub const hebrew_nun: u32 = 3312; -pub const hebrew_samech: u32 = 3313; -pub const hebrew_samekh: u32 = 3313; -pub const hebrew_ayin: u32 = 3314; -pub const hebrew_finalpe: u32 = 3315; -pub const hebrew_pe: u32 = 3316; -pub const hebrew_finalzade: u32 = 3317; -pub const hebrew_finalzadi: u32 = 3317; -pub const hebrew_zade: u32 = 3318; -pub const hebrew_zadi: u32 = 3318; -pub const hebrew_qoph: u32 = 3319; -pub const hebrew_kuf: u32 = 3319; -pub const hebrew_resh: u32 = 3320; -pub const hebrew_shin: u32 = 3321; -pub const hebrew_taw: u32 = 3322; -pub const hebrew_taf: u32 = 3322; -pub const Hebrew_switch: u32 = 65406; -pub const Thai_kokai: u32 = 3489; -pub const Thai_khokhai: u32 = 3490; -pub const Thai_khokhuat: u32 = 3491; -pub const Thai_khokhwai: u32 = 3492; -pub const Thai_khokhon: u32 = 3493; -pub const Thai_khorakhang: u32 = 3494; -pub const Thai_ngongu: u32 = 3495; -pub const Thai_chochan: u32 = 3496; -pub const Thai_choching: u32 = 3497; -pub const Thai_chochang: u32 = 3498; -pub const Thai_soso: u32 = 3499; -pub const Thai_chochoe: u32 = 3500; -pub const Thai_yoying: u32 = 3501; -pub const Thai_dochada: u32 = 3502; -pub const Thai_topatak: u32 = 3503; -pub const Thai_thothan: u32 = 3504; -pub const Thai_thonangmontho: u32 = 3505; -pub const Thai_thophuthao: u32 = 3506; -pub const Thai_nonen: u32 = 3507; -pub const Thai_dodek: u32 = 3508; -pub const Thai_totao: u32 = 3509; -pub const Thai_thothung: u32 = 3510; -pub const Thai_thothahan: u32 = 3511; -pub const Thai_thothong: u32 = 3512; -pub const Thai_nonu: u32 = 3513; -pub const Thai_bobaimai: u32 = 3514; -pub const Thai_popla: u32 = 3515; -pub const Thai_phophung: u32 = 3516; -pub const Thai_fofa: u32 = 3517; -pub const Thai_phophan: u32 = 3518; -pub const Thai_fofan: u32 = 3519; -pub const Thai_phosamphao: u32 = 3520; -pub const Thai_moma: u32 = 3521; -pub const Thai_yoyak: u32 = 3522; -pub const Thai_rorua: u32 = 3523; -pub const Thai_ru: u32 = 3524; -pub const Thai_loling: u32 = 3525; -pub const Thai_lu: u32 = 3526; -pub const Thai_wowaen: u32 = 3527; -pub const Thai_sosala: u32 = 3528; -pub const Thai_sorusi: u32 = 3529; -pub const Thai_sosua: u32 = 3530; -pub const Thai_hohip: u32 = 3531; -pub const Thai_lochula: u32 = 3532; -pub const Thai_oang: u32 = 3533; -pub const Thai_honokhuk: u32 = 3534; -pub const Thai_paiyannoi: u32 = 3535; -pub const Thai_saraa: u32 = 3536; -pub const Thai_maihanakat: u32 = 3537; -pub const Thai_saraaa: u32 = 3538; -pub const Thai_saraam: u32 = 3539; -pub const Thai_sarai: u32 = 3540; -pub const Thai_saraii: u32 = 3541; -pub const Thai_saraue: u32 = 3542; -pub const Thai_sarauee: u32 = 3543; -pub const Thai_sarau: u32 = 3544; -pub const Thai_sarauu: u32 = 3545; -pub const Thai_phinthu: u32 = 3546; -pub const Thai_maihanakat_maitho: u32 = 3550; -pub const Thai_baht: u32 = 3551; -pub const Thai_sarae: u32 = 3552; -pub const Thai_saraae: u32 = 3553; -pub const Thai_sarao: u32 = 3554; -pub const Thai_saraaimaimuan: u32 = 3555; -pub const Thai_saraaimaimalai: u32 = 3556; -pub const Thai_lakkhangyao: u32 = 3557; -pub const Thai_maiyamok: u32 = 3558; -pub const Thai_maitaikhu: u32 = 3559; -pub const Thai_maiek: u32 = 3560; -pub const Thai_maitho: u32 = 3561; -pub const Thai_maitri: u32 = 3562; -pub const Thai_maichattawa: u32 = 3563; -pub const Thai_thanthakhat: u32 = 3564; -pub const Thai_nikhahit: u32 = 3565; -pub const Thai_leksun: u32 = 3568; -pub const Thai_leknung: u32 = 3569; -pub const Thai_leksong: u32 = 3570; -pub const Thai_leksam: u32 = 3571; -pub const Thai_leksi: u32 = 3572; -pub const Thai_lekha: u32 = 3573; -pub const Thai_lekhok: u32 = 3574; -pub const Thai_lekchet: u32 = 3575; -pub const Thai_lekpaet: u32 = 3576; -pub const Thai_lekkao: u32 = 3577; -pub const Hangul: u32 = 65329; -pub const Hangul_Start: u32 = 65330; -pub const Hangul_End: u32 = 65331; -pub const Hangul_Hanja: u32 = 65332; -pub const Hangul_Jamo: u32 = 65333; -pub const Hangul_Romaja: u32 = 65334; -pub const Hangul_Codeinput: u32 = 65335; -pub const Hangul_Jeonja: u32 = 65336; -pub const Hangul_Banja: u32 = 65337; -pub const Hangul_PreHanja: u32 = 65338; -pub const Hangul_PostHanja: u32 = 65339; -pub const Hangul_SingleCandidate: u32 = 65340; -pub const Hangul_MultipleCandidate: u32 = 65341; -pub const Hangul_PreviousCandidate: u32 = 65342; -pub const Hangul_Special: u32 = 65343; -pub const Hangul_switch: u32 = 65406; -pub const Hangul_Kiyeog: u32 = 3745; -pub const Hangul_SsangKiyeog: u32 = 3746; -pub const Hangul_KiyeogSios: u32 = 3747; -pub const Hangul_Nieun: u32 = 3748; -pub const Hangul_NieunJieuj: u32 = 3749; -pub const Hangul_NieunHieuh: u32 = 3750; -pub const Hangul_Dikeud: u32 = 3751; -pub const Hangul_SsangDikeud: u32 = 3752; -pub const Hangul_Rieul: u32 = 3753; -pub const Hangul_RieulKiyeog: u32 = 3754; -pub const Hangul_RieulMieum: u32 = 3755; -pub const Hangul_RieulPieub: u32 = 3756; -pub const Hangul_RieulSios: u32 = 3757; -pub const Hangul_RieulTieut: u32 = 3758; -pub const Hangul_RieulPhieuf: u32 = 3759; -pub const Hangul_RieulHieuh: u32 = 3760; -pub const Hangul_Mieum: u32 = 3761; -pub const Hangul_Pieub: u32 = 3762; -pub const Hangul_SsangPieub: u32 = 3763; -pub const Hangul_PieubSios: u32 = 3764; -pub const Hangul_Sios: u32 = 3765; -pub const Hangul_SsangSios: u32 = 3766; -pub const Hangul_Ieung: u32 = 3767; -pub const Hangul_Jieuj: u32 = 3768; -pub const Hangul_SsangJieuj: u32 = 3769; -pub const Hangul_Cieuc: u32 = 3770; -pub const Hangul_Khieuq: u32 = 3771; -pub const Hangul_Tieut: u32 = 3772; -pub const Hangul_Phieuf: u32 = 3773; -pub const Hangul_Hieuh: u32 = 3774; -pub const Hangul_A: u32 = 3775; -pub const Hangul_AE: u32 = 3776; -pub const Hangul_YA: u32 = 3777; -pub const Hangul_YAE: u32 = 3778; -pub const Hangul_EO: u32 = 3779; -pub const Hangul_E: u32 = 3780; -pub const Hangul_YEO: u32 = 3781; -pub const Hangul_YE: u32 = 3782; -pub const Hangul_O: u32 = 3783; -pub const Hangul_WA: u32 = 3784; -pub const Hangul_WAE: u32 = 3785; -pub const Hangul_OE: u32 = 3786; -pub const Hangul_YO: u32 = 3787; -pub const Hangul_U: u32 = 3788; -pub const Hangul_WEO: u32 = 3789; -pub const Hangul_WE: u32 = 3790; -pub const Hangul_WI: u32 = 3791; -pub const Hangul_YU: u32 = 3792; -pub const Hangul_EU: u32 = 3793; -pub const Hangul_YI: u32 = 3794; -pub const Hangul_I: u32 = 3795; -pub const Hangul_J_Kiyeog: u32 = 3796; -pub const Hangul_J_SsangKiyeog: u32 = 3797; -pub const Hangul_J_KiyeogSios: u32 = 3798; -pub const Hangul_J_Nieun: u32 = 3799; -pub const Hangul_J_NieunJieuj: u32 = 3800; -pub const Hangul_J_NieunHieuh: u32 = 3801; -pub const Hangul_J_Dikeud: u32 = 3802; -pub const Hangul_J_Rieul: u32 = 3803; -pub const Hangul_J_RieulKiyeog: u32 = 3804; -pub const Hangul_J_RieulMieum: u32 = 3805; -pub const Hangul_J_RieulPieub: u32 = 3806; -pub const Hangul_J_RieulSios: u32 = 3807; -pub const Hangul_J_RieulTieut: u32 = 3808; -pub const Hangul_J_RieulPhieuf: u32 = 3809; -pub const Hangul_J_RieulHieuh: u32 = 3810; -pub const Hangul_J_Mieum: u32 = 3811; -pub const Hangul_J_Pieub: u32 = 3812; -pub const Hangul_J_PieubSios: u32 = 3813; -pub const Hangul_J_Sios: u32 = 3814; -pub const Hangul_J_SsangSios: u32 = 3815; -pub const Hangul_J_Ieung: u32 = 3816; -pub const Hangul_J_Jieuj: u32 = 3817; -pub const Hangul_J_Cieuc: u32 = 3818; -pub const Hangul_J_Khieuq: u32 = 3819; -pub const Hangul_J_Tieut: u32 = 3820; -pub const Hangul_J_Phieuf: u32 = 3821; -pub const Hangul_J_Hieuh: u32 = 3822; -pub const Hangul_RieulYeorinHieuh: u32 = 3823; -pub const Hangul_SunkyeongeumMieum: u32 = 3824; -pub const Hangul_SunkyeongeumPieub: u32 = 3825; -pub const Hangul_PanSios: u32 = 3826; -pub const Hangul_KkogjiDalrinIeung: u32 = 3827; -pub const Hangul_SunkyeongeumPhieuf: u32 = 3828; -pub const Hangul_YeorinHieuh: u32 = 3829; -pub const Hangul_AraeA: u32 = 3830; -pub const Hangul_AraeAE: u32 = 3831; -pub const Hangul_J_PanSios: u32 = 3832; -pub const Hangul_J_KkogjiDalrinIeung: u32 = 3833; -pub const Hangul_J_YeorinHieuh: u32 = 3834; -pub const Korean_Won: u32 = 3839; -pub const Armenian_ligature_ew: u32 = 16778631; -pub const Armenian_full_stop: u32 = 16778633; -pub const Armenian_verjaket: u32 = 16778633; -pub const Armenian_separation_mark: u32 = 16778589; -pub const Armenian_but: u32 = 16778589; -pub const Armenian_hyphen: u32 = 16778634; -pub const Armenian_yentamna: u32 = 16778634; -pub const Armenian_exclam: u32 = 16778588; -pub const Armenian_amanak: u32 = 16778588; -pub const Armenian_accent: u32 = 16778587; -pub const Armenian_shesht: u32 = 16778587; -pub const Armenian_question: u32 = 16778590; -pub const Armenian_paruyk: u32 = 16778590; -pub const Armenian_AYB: u32 = 16778545; -pub const Armenian_ayb: u32 = 16778593; -pub const Armenian_BEN: u32 = 16778546; -pub const Armenian_ben: u32 = 16778594; -pub const Armenian_GIM: u32 = 16778547; -pub const Armenian_gim: u32 = 16778595; -pub const Armenian_DA: u32 = 16778548; -pub const Armenian_da: u32 = 16778596; -pub const Armenian_YECH: u32 = 16778549; -pub const Armenian_yech: u32 = 16778597; -pub const Armenian_ZA: u32 = 16778550; -pub const Armenian_za: u32 = 16778598; -pub const Armenian_E: u32 = 16778551; -pub const Armenian_e: u32 = 16778599; -pub const Armenian_AT: u32 = 16778552; -pub const Armenian_at: u32 = 16778600; -pub const Armenian_TO: u32 = 16778553; -pub const Armenian_to: u32 = 16778601; -pub const Armenian_ZHE: u32 = 16778554; -pub const Armenian_zhe: u32 = 16778602; -pub const Armenian_INI: u32 = 16778555; -pub const Armenian_ini: u32 = 16778603; -pub const Armenian_LYUN: u32 = 16778556; -pub const Armenian_lyun: u32 = 16778604; -pub const Armenian_KHE: u32 = 16778557; -pub const Armenian_khe: u32 = 16778605; -pub const Armenian_TSA: u32 = 16778558; -pub const Armenian_tsa: u32 = 16778606; -pub const Armenian_KEN: u32 = 16778559; -pub const Armenian_ken: u32 = 16778607; -pub const Armenian_HO: u32 = 16778560; -pub const Armenian_ho: u32 = 16778608; -pub const Armenian_DZA: u32 = 16778561; -pub const Armenian_dza: u32 = 16778609; -pub const Armenian_GHAT: u32 = 16778562; -pub const Armenian_ghat: u32 = 16778610; -pub const Armenian_TCHE: u32 = 16778563; -pub const Armenian_tche: u32 = 16778611; -pub const Armenian_MEN: u32 = 16778564; -pub const Armenian_men: u32 = 16778612; -pub const Armenian_HI: u32 = 16778565; -pub const Armenian_hi: u32 = 16778613; -pub const Armenian_NU: u32 = 16778566; -pub const Armenian_nu: u32 = 16778614; -pub const Armenian_SHA: u32 = 16778567; -pub const Armenian_sha: u32 = 16778615; -pub const Armenian_VO: u32 = 16778568; -pub const Armenian_vo: u32 = 16778616; -pub const Armenian_CHA: u32 = 16778569; -pub const Armenian_cha: u32 = 16778617; -pub const Armenian_PE: u32 = 16778570; -pub const Armenian_pe: u32 = 16778618; -pub const Armenian_JE: u32 = 16778571; -pub const Armenian_je: u32 = 16778619; -pub const Armenian_RA: u32 = 16778572; -pub const Armenian_ra: u32 = 16778620; -pub const Armenian_SE: u32 = 16778573; -pub const Armenian_se: u32 = 16778621; -pub const Armenian_VEV: u32 = 16778574; -pub const Armenian_vev: u32 = 16778622; -pub const Armenian_TYUN: u32 = 16778575; -pub const Armenian_tyun: u32 = 16778623; -pub const Armenian_RE: u32 = 16778576; -pub const Armenian_re: u32 = 16778624; -pub const Armenian_TSO: u32 = 16778577; -pub const Armenian_tso: u32 = 16778625; -pub const Armenian_VYUN: u32 = 16778578; -pub const Armenian_vyun: u32 = 16778626; -pub const Armenian_PYUR: u32 = 16778579; -pub const Armenian_pyur: u32 = 16778627; -pub const Armenian_KE: u32 = 16778580; -pub const Armenian_ke: u32 = 16778628; -pub const Armenian_O: u32 = 16778581; -pub const Armenian_o: u32 = 16778629; -pub const Armenian_FE: u32 = 16778582; -pub const Armenian_fe: u32 = 16778630; -pub const Armenian_apostrophe: u32 = 16778586; -pub const Georgian_an: u32 = 16781520; -pub const Georgian_ban: u32 = 16781521; -pub const Georgian_gan: u32 = 16781522; -pub const Georgian_don: u32 = 16781523; -pub const Georgian_en: u32 = 16781524; -pub const Georgian_vin: u32 = 16781525; -pub const Georgian_zen: u32 = 16781526; -pub const Georgian_tan: u32 = 16781527; -pub const Georgian_in: u32 = 16781528; -pub const Georgian_kan: u32 = 16781529; -pub const Georgian_las: u32 = 16781530; -pub const Georgian_man: u32 = 16781531; -pub const Georgian_nar: u32 = 16781532; -pub const Georgian_on: u32 = 16781533; -pub const Georgian_par: u32 = 16781534; -pub const Georgian_zhar: u32 = 16781535; -pub const Georgian_rae: u32 = 16781536; -pub const Georgian_san: u32 = 16781537; -pub const Georgian_tar: u32 = 16781538; -pub const Georgian_un: u32 = 16781539; -pub const Georgian_phar: u32 = 16781540; -pub const Georgian_khar: u32 = 16781541; -pub const Georgian_ghan: u32 = 16781542; -pub const Georgian_qar: u32 = 16781543; -pub const Georgian_shin: u32 = 16781544; -pub const Georgian_chin: u32 = 16781545; -pub const Georgian_can: u32 = 16781546; -pub const Georgian_jil: u32 = 16781547; -pub const Georgian_cil: u32 = 16781548; -pub const Georgian_char: u32 = 16781549; -pub const Georgian_xan: u32 = 16781550; -pub const Georgian_jhan: u32 = 16781551; -pub const Georgian_hae: u32 = 16781552; -pub const Georgian_he: u32 = 16781553; -pub const Georgian_hie: u32 = 16781554; -pub const Georgian_we: u32 = 16781555; -pub const Georgian_har: u32 = 16781556; -pub const Georgian_hoe: u32 = 16781557; -pub const Georgian_fi: u32 = 16781558; -pub const Xabovedot: u32 = 16785034; -pub const Ibreve: u32 = 16777516; -pub const Zstroke: u32 = 16777653; -pub const Gcaron: u32 = 16777702; -pub const Ocaron: u32 = 16777681; -pub const Obarred: u32 = 16777631; -pub const xabovedot: u32 = 16785035; -pub const ibreve: u32 = 16777517; -pub const zstroke: u32 = 16777654; -pub const gcaron: u32 = 16777703; -pub const ocaron: u32 = 16777682; -pub const obarred: u32 = 16777845; -pub const SCHWA: u32 = 16777615; -pub const schwa: u32 = 16777817; -pub const EZH: u32 = 16777655; -pub const ezh: u32 = 16777874; -pub const Lbelowdot: u32 = 16784950; -pub const lbelowdot: u32 = 16784951; -pub const Abelowdot: u32 = 16785056; -pub const abelowdot: u32 = 16785057; -pub const Ahook: u32 = 16785058; -pub const ahook: u32 = 16785059; -pub const Acircumflexacute: u32 = 16785060; -pub const acircumflexacute: u32 = 16785061; -pub const Acircumflexgrave: u32 = 16785062; -pub const acircumflexgrave: u32 = 16785063; -pub const Acircumflexhook: u32 = 16785064; -pub const acircumflexhook: u32 = 16785065; -pub const Acircumflextilde: u32 = 16785066; -pub const acircumflextilde: u32 = 16785067; -pub const Acircumflexbelowdot: u32 = 16785068; -pub const acircumflexbelowdot: u32 = 16785069; -pub const Abreveacute: u32 = 16785070; -pub const abreveacute: u32 = 16785071; -pub const Abrevegrave: u32 = 16785072; -pub const abrevegrave: u32 = 16785073; -pub const Abrevehook: u32 = 16785074; -pub const abrevehook: u32 = 16785075; -pub const Abrevetilde: u32 = 16785076; -pub const abrevetilde: u32 = 16785077; -pub const Abrevebelowdot: u32 = 16785078; -pub const abrevebelowdot: u32 = 16785079; -pub const Ebelowdot: u32 = 16785080; -pub const ebelowdot: u32 = 16785081; -pub const Ehook: u32 = 16785082; -pub const ehook: u32 = 16785083; -pub const Etilde: u32 = 16785084; -pub const etilde: u32 = 16785085; -pub const Ecircumflexacute: u32 = 16785086; -pub const ecircumflexacute: u32 = 16785087; -pub const Ecircumflexgrave: u32 = 16785088; -pub const ecircumflexgrave: u32 = 16785089; -pub const Ecircumflexhook: u32 = 16785090; -pub const ecircumflexhook: u32 = 16785091; -pub const Ecircumflextilde: u32 = 16785092; -pub const ecircumflextilde: u32 = 16785093; -pub const Ecircumflexbelowdot: u32 = 16785094; -pub const ecircumflexbelowdot: u32 = 16785095; -pub const Ihook: u32 = 16785096; -pub const ihook: u32 = 16785097; -pub const Ibelowdot: u32 = 16785098; -pub const ibelowdot: u32 = 16785099; -pub const Obelowdot: u32 = 16785100; -pub const obelowdot: u32 = 16785101; -pub const Ohook: u32 = 16785102; -pub const ohook: u32 = 16785103; -pub const Ocircumflexacute: u32 = 16785104; -pub const ocircumflexacute: u32 = 16785105; -pub const Ocircumflexgrave: u32 = 16785106; -pub const ocircumflexgrave: u32 = 16785107; -pub const Ocircumflexhook: u32 = 16785108; -pub const ocircumflexhook: u32 = 16785109; -pub const Ocircumflextilde: u32 = 16785110; -pub const ocircumflextilde: u32 = 16785111; -pub const Ocircumflexbelowdot: u32 = 16785112; -pub const ocircumflexbelowdot: u32 = 16785113; -pub const Ohornacute: u32 = 16785114; -pub const ohornacute: u32 = 16785115; -pub const Ohorngrave: u32 = 16785116; -pub const ohorngrave: u32 = 16785117; -pub const Ohornhook: u32 = 16785118; -pub const ohornhook: u32 = 16785119; -pub const Ohorntilde: u32 = 16785120; -pub const ohorntilde: u32 = 16785121; -pub const Ohornbelowdot: u32 = 16785122; -pub const ohornbelowdot: u32 = 16785123; -pub const Ubelowdot: u32 = 16785124; -pub const ubelowdot: u32 = 16785125; -pub const Uhook: u32 = 16785126; -pub const uhook: u32 = 16785127; -pub const Uhornacute: u32 = 16785128; -pub const uhornacute: u32 = 16785129; -pub const Uhorngrave: u32 = 16785130; -pub const uhorngrave: u32 = 16785131; -pub const Uhornhook: u32 = 16785132; -pub const uhornhook: u32 = 16785133; -pub const Uhorntilde: u32 = 16785134; -pub const uhorntilde: u32 = 16785135; -pub const Uhornbelowdot: u32 = 16785136; -pub const uhornbelowdot: u32 = 16785137; -pub const Ybelowdot: u32 = 16785140; -pub const ybelowdot: u32 = 16785141; -pub const Yhook: u32 = 16785142; -pub const yhook: u32 = 16785143; -pub const Ytilde: u32 = 16785144; -pub const ytilde: u32 = 16785145; -pub const Ohorn: u32 = 16777632; -pub const ohorn: u32 = 16777633; -pub const Uhorn: u32 = 16777647; -pub const uhorn: u32 = 16777648; -pub const combining_tilde: u32 = 16777987; -pub const combining_grave: u32 = 16777984; -pub const combining_acute: u32 = 16777985; -pub const combining_hook: u32 = 16777993; -pub const combining_belowdot: u32 = 16778019; -pub const EcuSign: u32 = 16785568; -pub const ColonSign: u32 = 16785569; -pub const CruzeiroSign: u32 = 16785570; -pub const FFrancSign: u32 = 16785571; -pub const LiraSign: u32 = 16785572; -pub const MillSign: u32 = 16785573; -pub const NairaSign: u32 = 16785574; -pub const PesetaSign: u32 = 16785575; -pub const RupeeSign: u32 = 16785576; -pub const WonSign: u32 = 16785577; -pub const NewSheqelSign: u32 = 16785578; -pub const DongSign: u32 = 16785579; -pub const EuroSign: u32 = 8364; -pub const zerosuperior: u32 = 16785520; -pub const foursuperior: u32 = 16785524; -pub const fivesuperior: u32 = 16785525; -pub const sixsuperior: u32 = 16785526; -pub const sevensuperior: u32 = 16785527; -pub const eightsuperior: u32 = 16785528; -pub const ninesuperior: u32 = 16785529; -pub const zerosubscript: u32 = 16785536; -pub const onesubscript: u32 = 16785537; -pub const twosubscript: u32 = 16785538; -pub const threesubscript: u32 = 16785539; -pub const foursubscript: u32 = 16785540; -pub const fivesubscript: u32 = 16785541; -pub const sixsubscript: u32 = 16785542; -pub const sevensubscript: u32 = 16785543; -pub const eightsubscript: u32 = 16785544; -pub const ninesubscript: u32 = 16785545; -pub const partdifferential: u32 = 16785922; -pub const emptyset: u32 = 16785925; -pub const elementof: u32 = 16785928; -pub const notelementof: u32 = 16785929; -pub const containsas: u32 = 16785931; -pub const squareroot: u32 = 16785946; -pub const cuberoot: u32 = 16785947; -pub const fourthroot: u32 = 16785948; -pub const dintegral: u32 = 16785964; -pub const tintegral: u32 = 16785965; -pub const because: u32 = 16785973; -pub const approxeq: u32 = 16785992; -pub const notapproxeq: u32 = 16785991; -pub const notidentical: u32 = 16786018; -pub const stricteq: u32 = 16786019; -pub const braille_dot_1: u32 = 65521; -pub const braille_dot_2: u32 = 65522; -pub const braille_dot_3: u32 = 65523; -pub const braille_dot_4: u32 = 65524; -pub const braille_dot_5: u32 = 65525; -pub const braille_dot_6: u32 = 65526; -pub const braille_dot_7: u32 = 65527; -pub const braille_dot_8: u32 = 65528; -pub const braille_dot_9: u32 = 65529; -pub const braille_dot_10: u32 = 65530; -pub const braille_blank: u32 = 16787456; -pub const braille_dots_1: u32 = 16787457; -pub const braille_dots_2: u32 = 16787458; -pub const braille_dots_12: u32 = 16787459; -pub const braille_dots_3: u32 = 16787460; -pub const braille_dots_13: u32 = 16787461; -pub const braille_dots_23: u32 = 16787462; -pub const braille_dots_123: u32 = 16787463; -pub const braille_dots_4: u32 = 16787464; -pub const braille_dots_14: u32 = 16787465; -pub const braille_dots_24: u32 = 16787466; -pub const braille_dots_124: u32 = 16787467; -pub const braille_dots_34: u32 = 16787468; -pub const braille_dots_134: u32 = 16787469; -pub const braille_dots_234: u32 = 16787470; -pub const braille_dots_1234: u32 = 16787471; -pub const braille_dots_5: u32 = 16787472; -pub const braille_dots_15: u32 = 16787473; -pub const braille_dots_25: u32 = 16787474; -pub const braille_dots_125: u32 = 16787475; -pub const braille_dots_35: u32 = 16787476; -pub const braille_dots_135: u32 = 16787477; -pub const braille_dots_235: u32 = 16787478; -pub const braille_dots_1235: u32 = 16787479; -pub const braille_dots_45: u32 = 16787480; -pub const braille_dots_145: u32 = 16787481; -pub const braille_dots_245: u32 = 16787482; -pub const braille_dots_1245: u32 = 16787483; -pub const braille_dots_345: u32 = 16787484; -pub const braille_dots_1345: u32 = 16787485; -pub const braille_dots_2345: u32 = 16787486; -pub const braille_dots_12345: u32 = 16787487; -pub const braille_dots_6: u32 = 16787488; -pub const braille_dots_16: u32 = 16787489; -pub const braille_dots_26: u32 = 16787490; -pub const braille_dots_126: u32 = 16787491; -pub const braille_dots_36: u32 = 16787492; -pub const braille_dots_136: u32 = 16787493; -pub const braille_dots_236: u32 = 16787494; -pub const braille_dots_1236: u32 = 16787495; -pub const braille_dots_46: u32 = 16787496; -pub const braille_dots_146: u32 = 16787497; -pub const braille_dots_246: u32 = 16787498; -pub const braille_dots_1246: u32 = 16787499; -pub const braille_dots_346: u32 = 16787500; -pub const braille_dots_1346: u32 = 16787501; -pub const braille_dots_2346: u32 = 16787502; -pub const braille_dots_12346: u32 = 16787503; -pub const braille_dots_56: u32 = 16787504; -pub const braille_dots_156: u32 = 16787505; -pub const braille_dots_256: u32 = 16787506; -pub const braille_dots_1256: u32 = 16787507; -pub const braille_dots_356: u32 = 16787508; -pub const braille_dots_1356: u32 = 16787509; -pub const braille_dots_2356: u32 = 16787510; -pub const braille_dots_12356: u32 = 16787511; -pub const braille_dots_456: u32 = 16787512; -pub const braille_dots_1456: u32 = 16787513; -pub const braille_dots_2456: u32 = 16787514; -pub const braille_dots_12456: u32 = 16787515; -pub const braille_dots_3456: u32 = 16787516; -pub const braille_dots_13456: u32 = 16787517; -pub const braille_dots_23456: u32 = 16787518; -pub const braille_dots_123456: u32 = 16787519; -pub const braille_dots_7: u32 = 16787520; -pub const braille_dots_17: u32 = 16787521; -pub const braille_dots_27: u32 = 16787522; -pub const braille_dots_127: u32 = 16787523; -pub const braille_dots_37: u32 = 16787524; -pub const braille_dots_137: u32 = 16787525; -pub const braille_dots_237: u32 = 16787526; -pub const braille_dots_1237: u32 = 16787527; -pub const braille_dots_47: u32 = 16787528; -pub const braille_dots_147: u32 = 16787529; -pub const braille_dots_247: u32 = 16787530; -pub const braille_dots_1247: u32 = 16787531; -pub const braille_dots_347: u32 = 16787532; -pub const braille_dots_1347: u32 = 16787533; -pub const braille_dots_2347: u32 = 16787534; -pub const braille_dots_12347: u32 = 16787535; -pub const braille_dots_57: u32 = 16787536; -pub const braille_dots_157: u32 = 16787537; -pub const braille_dots_257: u32 = 16787538; -pub const braille_dots_1257: u32 = 16787539; -pub const braille_dots_357: u32 = 16787540; -pub const braille_dots_1357: u32 = 16787541; -pub const braille_dots_2357: u32 = 16787542; -pub const braille_dots_12357: u32 = 16787543; -pub const braille_dots_457: u32 = 16787544; -pub const braille_dots_1457: u32 = 16787545; -pub const braille_dots_2457: u32 = 16787546; -pub const braille_dots_12457: u32 = 16787547; -pub const braille_dots_3457: u32 = 16787548; -pub const braille_dots_13457: u32 = 16787549; -pub const braille_dots_23457: u32 = 16787550; -pub const braille_dots_123457: u32 = 16787551; -pub const braille_dots_67: u32 = 16787552; -pub const braille_dots_167: u32 = 16787553; -pub const braille_dots_267: u32 = 16787554; -pub const braille_dots_1267: u32 = 16787555; -pub const braille_dots_367: u32 = 16787556; -pub const braille_dots_1367: u32 = 16787557; -pub const braille_dots_2367: u32 = 16787558; -pub const braille_dots_12367: u32 = 16787559; -pub const braille_dots_467: u32 = 16787560; -pub const braille_dots_1467: u32 = 16787561; -pub const braille_dots_2467: u32 = 16787562; -pub const braille_dots_12467: u32 = 16787563; -pub const braille_dots_3467: u32 = 16787564; -pub const braille_dots_13467: u32 = 16787565; -pub const braille_dots_23467: u32 = 16787566; -pub const braille_dots_123467: u32 = 16787567; -pub const braille_dots_567: u32 = 16787568; -pub const braille_dots_1567: u32 = 16787569; -pub const braille_dots_2567: u32 = 16787570; -pub const braille_dots_12567: u32 = 16787571; -pub const braille_dots_3567: u32 = 16787572; -pub const braille_dots_13567: u32 = 16787573; -pub const braille_dots_23567: u32 = 16787574; -pub const braille_dots_123567: u32 = 16787575; -pub const braille_dots_4567: u32 = 16787576; -pub const braille_dots_14567: u32 = 16787577; -pub const braille_dots_24567: u32 = 16787578; -pub const braille_dots_124567: u32 = 16787579; -pub const braille_dots_34567: u32 = 16787580; -pub const braille_dots_134567: u32 = 16787581; -pub const braille_dots_234567: u32 = 16787582; -pub const braille_dots_1234567: u32 = 16787583; -pub const braille_dots_8: u32 = 16787584; -pub const braille_dots_18: u32 = 16787585; -pub const braille_dots_28: u32 = 16787586; -pub const braille_dots_128: u32 = 16787587; -pub const braille_dots_38: u32 = 16787588; -pub const braille_dots_138: u32 = 16787589; -pub const braille_dots_238: u32 = 16787590; -pub const braille_dots_1238: u32 = 16787591; -pub const braille_dots_48: u32 = 16787592; -pub const braille_dots_148: u32 = 16787593; -pub const braille_dots_248: u32 = 16787594; -pub const braille_dots_1248: u32 = 16787595; -pub const braille_dots_348: u32 = 16787596; -pub const braille_dots_1348: u32 = 16787597; -pub const braille_dots_2348: u32 = 16787598; -pub const braille_dots_12348: u32 = 16787599; -pub const braille_dots_58: u32 = 16787600; -pub const braille_dots_158: u32 = 16787601; -pub const braille_dots_258: u32 = 16787602; -pub const braille_dots_1258: u32 = 16787603; -pub const braille_dots_358: u32 = 16787604; -pub const braille_dots_1358: u32 = 16787605; -pub const braille_dots_2358: u32 = 16787606; -pub const braille_dots_12358: u32 = 16787607; -pub const braille_dots_458: u32 = 16787608; -pub const braille_dots_1458: u32 = 16787609; -pub const braille_dots_2458: u32 = 16787610; -pub const braille_dots_12458: u32 = 16787611; -pub const braille_dots_3458: u32 = 16787612; -pub const braille_dots_13458: u32 = 16787613; -pub const braille_dots_23458: u32 = 16787614; -pub const braille_dots_123458: u32 = 16787615; -pub const braille_dots_68: u32 = 16787616; -pub const braille_dots_168: u32 = 16787617; -pub const braille_dots_268: u32 = 16787618; -pub const braille_dots_1268: u32 = 16787619; -pub const braille_dots_368: u32 = 16787620; -pub const braille_dots_1368: u32 = 16787621; -pub const braille_dots_2368: u32 = 16787622; -pub const braille_dots_12368: u32 = 16787623; -pub const braille_dots_468: u32 = 16787624; -pub const braille_dots_1468: u32 = 16787625; -pub const braille_dots_2468: u32 = 16787626; -pub const braille_dots_12468: u32 = 16787627; -pub const braille_dots_3468: u32 = 16787628; -pub const braille_dots_13468: u32 = 16787629; -pub const braille_dots_23468: u32 = 16787630; -pub const braille_dots_123468: u32 = 16787631; -pub const braille_dots_568: u32 = 16787632; -pub const braille_dots_1568: u32 = 16787633; -pub const braille_dots_2568: u32 = 16787634; -pub const braille_dots_12568: u32 = 16787635; -pub const braille_dots_3568: u32 = 16787636; -pub const braille_dots_13568: u32 = 16787637; -pub const braille_dots_23568: u32 = 16787638; -pub const braille_dots_123568: u32 = 16787639; -pub const braille_dots_4568: u32 = 16787640; -pub const braille_dots_14568: u32 = 16787641; -pub const braille_dots_24568: u32 = 16787642; -pub const braille_dots_124568: u32 = 16787643; -pub const braille_dots_34568: u32 = 16787644; -pub const braille_dots_134568: u32 = 16787645; -pub const braille_dots_234568: u32 = 16787646; -pub const braille_dots_1234568: u32 = 16787647; -pub const braille_dots_78: u32 = 16787648; -pub const braille_dots_178: u32 = 16787649; -pub const braille_dots_278: u32 = 16787650; -pub const braille_dots_1278: u32 = 16787651; -pub const braille_dots_378: u32 = 16787652; -pub const braille_dots_1378: u32 = 16787653; -pub const braille_dots_2378: u32 = 16787654; -pub const braille_dots_12378: u32 = 16787655; -pub const braille_dots_478: u32 = 16787656; -pub const braille_dots_1478: u32 = 16787657; -pub const braille_dots_2478: u32 = 16787658; -pub const braille_dots_12478: u32 = 16787659; -pub const braille_dots_3478: u32 = 16787660; -pub const braille_dots_13478: u32 = 16787661; -pub const braille_dots_23478: u32 = 16787662; -pub const braille_dots_123478: u32 = 16787663; -pub const braille_dots_578: u32 = 16787664; -pub const braille_dots_1578: u32 = 16787665; -pub const braille_dots_2578: u32 = 16787666; -pub const braille_dots_12578: u32 = 16787667; -pub const braille_dots_3578: u32 = 16787668; -pub const braille_dots_13578: u32 = 16787669; -pub const braille_dots_23578: u32 = 16787670; -pub const braille_dots_123578: u32 = 16787671; -pub const braille_dots_4578: u32 = 16787672; -pub const braille_dots_14578: u32 = 16787673; -pub const braille_dots_24578: u32 = 16787674; -pub const braille_dots_124578: u32 = 16787675; -pub const braille_dots_34578: u32 = 16787676; -pub const braille_dots_134578: u32 = 16787677; -pub const braille_dots_234578: u32 = 16787678; -pub const braille_dots_1234578: u32 = 16787679; -pub const braille_dots_678: u32 = 16787680; -pub const braille_dots_1678: u32 = 16787681; -pub const braille_dots_2678: u32 = 16787682; -pub const braille_dots_12678: u32 = 16787683; -pub const braille_dots_3678: u32 = 16787684; -pub const braille_dots_13678: u32 = 16787685; -pub const braille_dots_23678: u32 = 16787686; -pub const braille_dots_123678: u32 = 16787687; -pub const braille_dots_4678: u32 = 16787688; -pub const braille_dots_14678: u32 = 16787689; -pub const braille_dots_24678: u32 = 16787690; -pub const braille_dots_124678: u32 = 16787691; -pub const braille_dots_34678: u32 = 16787692; -pub const braille_dots_134678: u32 = 16787693; -pub const braille_dots_234678: u32 = 16787694; -pub const braille_dots_1234678: u32 = 16787695; -pub const braille_dots_5678: u32 = 16787696; -pub const braille_dots_15678: u32 = 16787697; -pub const braille_dots_25678: u32 = 16787698; -pub const braille_dots_125678: u32 = 16787699; -pub const braille_dots_35678: u32 = 16787700; -pub const braille_dots_135678: u32 = 16787701; -pub const braille_dots_235678: u32 = 16787702; -pub const braille_dots_1235678: u32 = 16787703; -pub const braille_dots_45678: u32 = 16787704; -pub const braille_dots_145678: u32 = 16787705; -pub const braille_dots_245678: u32 = 16787706; -pub const braille_dots_1245678: u32 = 16787707; -pub const braille_dots_345678: u32 = 16787708; -pub const braille_dots_1345678: u32 = 16787709; -pub const braille_dots_2345678: u32 = 16787710; -pub const braille_dots_12345678: u32 = 16787711; -pub const Sinh_ng: u32 = 16780674; -pub const Sinh_h2: u32 = 16780675; -pub const Sinh_a: u32 = 16780677; -pub const Sinh_aa: u32 = 16780678; -pub const Sinh_ae: u32 = 16780679; -pub const Sinh_aee: u32 = 16780680; -pub const Sinh_i: u32 = 16780681; -pub const Sinh_ii: u32 = 16780682; -pub const Sinh_u: u32 = 16780683; -pub const Sinh_uu: u32 = 16780684; -pub const Sinh_ri: u32 = 16780685; -pub const Sinh_rii: u32 = 16780686; -pub const Sinh_lu: u32 = 16780687; -pub const Sinh_luu: u32 = 16780688; -pub const Sinh_e: u32 = 16780689; -pub const Sinh_ee: u32 = 16780690; -pub const Sinh_ai: u32 = 16780691; -pub const Sinh_o: u32 = 16780692; -pub const Sinh_oo: u32 = 16780693; -pub const Sinh_au: u32 = 16780694; -pub const Sinh_ka: u32 = 16780698; -pub const Sinh_kha: u32 = 16780699; -pub const Sinh_ga: u32 = 16780700; -pub const Sinh_gha: u32 = 16780701; -pub const Sinh_ng2: u32 = 16780702; -pub const Sinh_nga: u32 = 16780703; -pub const Sinh_ca: u32 = 16780704; -pub const Sinh_cha: u32 = 16780705; -pub const Sinh_ja: u32 = 16780706; -pub const Sinh_jha: u32 = 16780707; -pub const Sinh_nya: u32 = 16780708; -pub const Sinh_jnya: u32 = 16780709; -pub const Sinh_nja: u32 = 16780710; -pub const Sinh_tta: u32 = 16780711; -pub const Sinh_ttha: u32 = 16780712; -pub const Sinh_dda: u32 = 16780713; -pub const Sinh_ddha: u32 = 16780714; -pub const Sinh_nna: u32 = 16780715; -pub const Sinh_ndda: u32 = 16780716; -pub const Sinh_tha: u32 = 16780717; -pub const Sinh_thha: u32 = 16780718; -pub const Sinh_dha: u32 = 16780719; -pub const Sinh_dhha: u32 = 16780720; -pub const Sinh_na: u32 = 16780721; -pub const Sinh_ndha: u32 = 16780723; -pub const Sinh_pa: u32 = 16780724; -pub const Sinh_pha: u32 = 16780725; -pub const Sinh_ba: u32 = 16780726; -pub const Sinh_bha: u32 = 16780727; -pub const Sinh_ma: u32 = 16780728; -pub const Sinh_mba: u32 = 16780729; -pub const Sinh_ya: u32 = 16780730; -pub const Sinh_ra: u32 = 16780731; -pub const Sinh_la: u32 = 16780733; -pub const Sinh_va: u32 = 16780736; -pub const Sinh_sha: u32 = 16780737; -pub const Sinh_ssha: u32 = 16780738; -pub const Sinh_sa: u32 = 16780739; -pub const Sinh_ha: u32 = 16780740; -pub const Sinh_lla: u32 = 16780741; -pub const Sinh_fa: u32 = 16780742; -pub const Sinh_al: u32 = 16780746; -pub const Sinh_aa2: u32 = 16780751; -pub const Sinh_ae2: u32 = 16780752; -pub const Sinh_aee2: u32 = 16780753; -pub const Sinh_i2: u32 = 16780754; -pub const Sinh_ii2: u32 = 16780755; -pub const Sinh_u2: u32 = 16780756; -pub const Sinh_uu2: u32 = 16780758; -pub const Sinh_ru2: u32 = 16780760; -pub const Sinh_e2: u32 = 16780761; -pub const Sinh_ee2: u32 = 16780762; -pub const Sinh_ai2: u32 = 16780763; -pub const Sinh_o2: u32 = 16780764; -pub const Sinh_oo2: u32 = 16780765; -pub const Sinh_au2: u32 = 16780766; -pub const Sinh_lu2: u32 = 16780767; -pub const Sinh_ruu2: u32 = 16780786; -pub const Sinh_luu2: u32 = 16780787; -pub const Sinh_kunddaliya: u32 = 16780788; +pub const CENT: u32 = 162; +pub const STERLING: u32 = 163; +pub const CURRENCY: u32 = 164; +pub const YEN: u32 = 165; +pub const BROKENBAR: u32 = 166; +pub const SECTION: u32 = 167; +pub const DIAERESIS: u32 = 168; +pub const COPYRIGHT: u32 = 169; +pub const ORDFEMININE: u32 = 170; +pub const GUILLEMOTLEFT: u32 = 171; +pub const NOTSIGN: u32 = 172; +pub const HYPHEN: u32 = 173; +pub const REGISTERED: u32 = 174; +pub const MACRON: u32 = 175; +pub const DEGREE: u32 = 176; +pub const PLUSMINUS: u32 = 177; +pub const TWOSUPERIOR: u32 = 178; +pub const THREESUPERIOR: u32 = 179; +pub const ACUTE: u32 = 180; +pub const MU: u32 = 181; +pub const PARAGRAPH: u32 = 182; +pub const PERIODCENTERED: u32 = 183; +pub const CEDILLA: u32 = 184; +pub const ONESUPERIOR: u32 = 185; +pub const MASCULINE: u32 = 186; +pub const GUILLEMOTRIGHT: u32 = 187; +pub const ONEQUARTER: u32 = 188; +pub const ONEHALF: u32 = 189; +pub const THREEQUARTERS: u32 = 190; +pub const QUESTIONDOWN: u32 = 191; +pub const MULTIPLY: u32 = 215; +pub const OVERLINE: u32 = 1150; +pub const KANA_FULLSTOP: u32 = 1185; +pub const KANA_OPENINGBRACKET: u32 = 1186; +pub const KANA_CLOSINGBRACKET: u32 = 1187; +pub const KANA_COMMA: u32 = 1188; +pub const KANA_CONJUNCTIVE: u32 = 1189; +pub const KANA_MIDDLEDOT: u32 = 1189; +pub const KANA_WO: u32 = 1190; +pub const KANA_LOWER_A: u32 = 1191; +pub const KANA_LOWER_I: u32 = 1192; +pub const KANA_LOWER_U: u32 = 1193; +pub const KANA_LOWER_E: u32 = 1194; +pub const KANA_LOWER_O: u32 = 1195; +pub const KANA_LOWER_YA: u32 = 1196; +pub const KANA_LOWER_YU: u32 = 1197; +pub const KANA_LOWER_YO: u32 = 1198; +pub const KANA_LOWER_TSU: u32 = 1199; +pub const KANA_LOWER_TU: u32 = 1199; +pub const PROLONGEDSOUND: u32 = 1200; +pub const KANA_UPPER_A: u32 = 1201; +pub const KANA_UPPER_I: u32 = 1202; +pub const KANA_UPPER_U: u32 = 1203; +pub const KANA_UPPER_E: u32 = 1204; +pub const KANA_UPPER_O: u32 = 1205; +pub const KANA_UPPER_KA: u32 = 1206; +pub const KANA_UPPER_KI: u32 = 1207; +pub const KANA_UPPER_KU: u32 = 1208; +pub const KANA_UPPER_KE: u32 = 1209; +pub const KANA_UPPER_KO: u32 = 1210; +pub const KANA_UPPER_SA: u32 = 1211; +pub const KANA_UPPER_SHI: u32 = 1212; +pub const KANA_UPPER_SU: u32 = 1213; +pub const KANA_UPPER_SE: u32 = 1214; +pub const KANA_UPPER_SO: u32 = 1215; +pub const KANA_UPPER_TA: u32 = 1216; +pub const KANA_UPPER_CHI: u32 = 1217; +pub const KANA_UPPER_TI: u32 = 1217; +pub const KANA_UPPER_TSU: u32 = 1218; +pub const KANA_UPPER_TU: u32 = 1218; +pub const KANA_UPPER_TE: u32 = 1219; +pub const KANA_UPPER_TO: u32 = 1220; +pub const KANA_UPPER_NA: u32 = 1221; +pub const KANA_UPPER_NI: u32 = 1222; +pub const KANA_UPPER_NU: u32 = 1223; +pub const KANA_UPPER_NE: u32 = 1224; +pub const KANA_UPPER_NO: u32 = 1225; +pub const KANA_UPPER_HA: u32 = 1226; +pub const KANA_UPPER_HI: u32 = 1227; +pub const KANA_UPPER_FU: u32 = 1228; +pub const KANA_UPPER_HU: u32 = 1228; +pub const KANA_UPPER_HE: u32 = 1229; +pub const KANA_UPPER_HO: u32 = 1230; +pub const KANA_UPPER_MA: u32 = 1231; +pub const KANA_UPPER_MI: u32 = 1232; +pub const KANA_UPPER_MU: u32 = 1233; +pub const KANA_UPPER_ME: u32 = 1234; +pub const KANA_UPPER_MO: u32 = 1235; +pub const KANA_UPPER_YA: u32 = 1236; +pub const KANA_UPPER_YU: u32 = 1237; +pub const KANA_UPPER_YO: u32 = 1238; +pub const KANA_UPPER_RA: u32 = 1239; +pub const KANA_UPPER_RI: u32 = 1240; +pub const KANA_UPPER_RU: u32 = 1241; +pub const KANA_UPPER_RE: u32 = 1242; +pub const KANA_UPPER_RO: u32 = 1243; +pub const KANA_UPPER_WA: u32 = 1244; +pub const KANA_UPPER_N: u32 = 1245; +pub const VOICED_SOUND: u32 = 1246; +pub const SEMI_VOICED_SOUND: u32 = 1247; +pub const KANA_SWITCH: u32 = 65406; +pub const FARSI_0: u32 = 16778992; +pub const FARSI_1: u32 = 16778993; +pub const FARSI_2: u32 = 16778994; +pub const FARSI_3: u32 = 16778995; +pub const FARSI_4: u32 = 16778996; +pub const FARSI_5: u32 = 16778997; +pub const FARSI_6: u32 = 16778998; +pub const FARSI_7: u32 = 16778999; +pub const FARSI_8: u32 = 16779000; +pub const FARSI_9: u32 = 16779001; +pub const ARABIC_PERCENT: u32 = 16778858; +pub const ARABIC_SUPERSCRIPT_ALEF: u32 = 16778864; +pub const ARABIC_TTEH: u32 = 16778873; +pub const ARABIC_PEH: u32 = 16778878; +pub const ARABIC_TCHEH: u32 = 16778886; +pub const ARABIC_DDAL: u32 = 16778888; +pub const ARABIC_RREH: u32 = 16778897; +pub const ARABIC_COMMA: u32 = 1452; +pub const ARABIC_FULLSTOP: u32 = 16778964; +pub const ARABIC_0: u32 = 16778848; +pub const ARABIC_1: u32 = 16778849; +pub const ARABIC_2: u32 = 16778850; +pub const ARABIC_3: u32 = 16778851; +pub const ARABIC_4: u32 = 16778852; +pub const ARABIC_5: u32 = 16778853; +pub const ARABIC_6: u32 = 16778854; +pub const ARABIC_7: u32 = 16778855; +pub const ARABIC_8: u32 = 16778856; +pub const ARABIC_9: u32 = 16778857; +pub const ARABIC_SEMICOLON: u32 = 1467; +pub const ARABIC_QUESTION_MARK: u32 = 1471; +pub const ARABIC_HAMZA: u32 = 1473; +pub const ARABIC_MADDAONALEF: u32 = 1474; +pub const ARABIC_HAMZAONALEF: u32 = 1475; +pub const ARABIC_HAMZAONWAW: u32 = 1476; +pub const ARABIC_HAMZAUNDERALEF: u32 = 1477; +pub const ARABIC_HAMZAONYEH: u32 = 1478; +pub const ARABIC_ALEF: u32 = 1479; +pub const ARABIC_BEH: u32 = 1480; +pub const ARABIC_TEHMARBUTA: u32 = 1481; +pub const ARABIC_TEH: u32 = 1482; +pub const ARABIC_THEH: u32 = 1483; +pub const ARABIC_JEEM: u32 = 1484; +pub const ARABIC_HAH: u32 = 1485; +pub const ARABIC_KHAH: u32 = 1486; +pub const ARABIC_DAL: u32 = 1487; +pub const ARABIC_THAL: u32 = 1488; +pub const ARABIC_RA: u32 = 1489; +pub const ARABIC_ZAIN: u32 = 1490; +pub const ARABIC_SEEN: u32 = 1491; +pub const ARABIC_SHEEN: u32 = 1492; +pub const ARABIC_SAD: u32 = 1493; +pub const ARABIC_DAD: u32 = 1494; +pub const ARABIC_TAH: u32 = 1495; +pub const ARABIC_ZAH: u32 = 1496; +pub const ARABIC_AIN: u32 = 1497; +pub const ARABIC_GHAIN: u32 = 1498; +pub const ARABIC_TATWEEL: u32 = 1504; +pub const ARABIC_FEH: u32 = 1505; +pub const ARABIC_QAF: u32 = 1506; +pub const ARABIC_KAF: u32 = 1507; +pub const ARABIC_LAM: u32 = 1508; +pub const ARABIC_MEEM: u32 = 1509; +pub const ARABIC_NOON: u32 = 1510; +pub const ARABIC_HA: u32 = 1511; +pub const ARABIC_HEH: u32 = 1511; +pub const ARABIC_WAW: u32 = 1512; +pub const ARABIC_ALEFMAKSURA: u32 = 1513; +pub const ARABIC_YEH: u32 = 1514; +pub const ARABIC_FATHATAN: u32 = 1515; +pub const ARABIC_DAMMATAN: u32 = 1516; +pub const ARABIC_KASRATAN: u32 = 1517; +pub const ARABIC_FATHA: u32 = 1518; +pub const ARABIC_DAMMA: u32 = 1519; +pub const ARABIC_KASRA: u32 = 1520; +pub const ARABIC_SHADDA: u32 = 1521; +pub const ARABIC_SUKUN: u32 = 1522; +pub const ARABIC_MADDA_ABOVE: u32 = 16778835; +pub const ARABIC_HAMZA_ABOVE: u32 = 16778836; +pub const ARABIC_HAMZA_BELOW: u32 = 16778837; +pub const ARABIC_JEH: u32 = 16778904; +pub const ARABIC_VEH: u32 = 16778916; +pub const ARABIC_KEHEH: u32 = 16778921; +pub const ARABIC_GAF: u32 = 16778927; +pub const ARABIC_NOON_GHUNNA: u32 = 16778938; +pub const ARABIC_HEH_DOACHASHMEE: u32 = 16778942; +pub const FARSI_YEH: u32 = 16778956; +pub const ARABIC_FARSI_YEH: u32 = 16778956; +pub const ARABIC_YEH_BAREE: u32 = 16778962; +pub const ARABIC_HEH_GOAL: u32 = 16778945; +pub const ARABIC_SWITCH: u32 = 65406; +pub const NUMEROSIGN: u32 = 1712; +pub const GREEK_IOTADIAERESIS: u32 = 1957; +pub const GREEK_IOTAACCENT: u32 = 1972; +pub const GREEK_FINALSMALLSIGMA: u32 = 2035; +pub const LEFTRADICAL: u32 = 2209; +pub const TOPLEFTRADICAL: u32 = 2210; +pub const HORIZCONNECTOR: u32 = 2211; +pub const TOPINTEGRAL: u32 = 2212; +pub const BOTINTEGRAL: u32 = 2213; +pub const VERTCONNECTOR: u32 = 2214; +pub const TOPLEFTSQBRACKET: u32 = 2215; +pub const BOTLEFTSQBRACKET: u32 = 2216; +pub const TOPRIGHTSQBRACKET: u32 = 2217; +pub const BOTRIGHTSQBRACKET: u32 = 2218; +pub const TOPLEFTPARENS: u32 = 2219; +pub const BOTLEFTPARENS: u32 = 2220; +pub const TOPRIGHTPARENS: u32 = 2221; +pub const BOTRIGHTPARENS: u32 = 2222; +pub const LEFTMIDDLECURLYBRACE: u32 = 2223; +pub const RIGHTMIDDLECURLYBRACE: u32 = 2224; +pub const TOPLEFTSUMMATION: u32 = 2225; +pub const BOTLEFTSUMMATION: u32 = 2226; +pub const TOPVERTSUMMATIONCONNECTOR: u32 = 2227; +pub const BOTVERTSUMMATIONCONNECTOR: u32 = 2228; +pub const TOPRIGHTSUMMATION: u32 = 2229; +pub const BOTRIGHTSUMMATION: u32 = 2230; +pub const RIGHTMIDDLESUMMATION: u32 = 2231; +pub const LESSTHANEQUAL: u32 = 2236; +pub const NOTEQUAL: u32 = 2237; +pub const GREATERTHANEQUAL: u32 = 2238; +pub const INTEGRAL: u32 = 2239; +pub const THEREFORE: u32 = 2240; +pub const VARIATION: u32 = 2241; +pub const INFINITY: u32 = 2242; +pub const NABLA: u32 = 2245; +pub const APPROXIMATE: u32 = 2248; +pub const SIMILAREQUAL: u32 = 2249; +pub const IFONLYIF: u32 = 2253; +pub const IMPLIES: u32 = 2254; +pub const IDENTICAL: u32 = 2255; +pub const RADICAL: u32 = 2262; +pub const INCLUDEDIN: u32 = 2266; +pub const INCLUDES: u32 = 2267; +pub const INTERSECTION: u32 = 2268; +pub const UNION: u32 = 2269; +pub const LOGICALAND: u32 = 2270; +pub const LOGICALOR: u32 = 2271; +pub const PARTIALDERIVATIVE: u32 = 2287; +pub const FUNCTION: u32 = 2294; +pub const LEFTARROW: u32 = 2299; +pub const UPARROW: u32 = 2300; +pub const RIGHTARROW: u32 = 2301; +pub const DOWNARROW: u32 = 2302; +pub const BLANK: u32 = 2527; +pub const SOLIDDIAMOND: u32 = 2528; +pub const CHECKERBOARD: u32 = 2529; +pub const HT: u32 = 2530; +pub const FF: u32 = 2531; +pub const CR: u32 = 2532; +pub const LF: u32 = 2533; +pub const NL: u32 = 2536; +pub const VT: u32 = 2537; +pub const LOWRIGHTCORNER: u32 = 2538; +pub const UPRIGHTCORNER: u32 = 2539; +pub const UPLEFTCORNER: u32 = 2540; +pub const LOWLEFTCORNER: u32 = 2541; +pub const CROSSINGLINES: u32 = 2542; +pub const HORIZLINESCAN1: u32 = 2543; +pub const HORIZLINESCAN3: u32 = 2544; +pub const HORIZLINESCAN5: u32 = 2545; +pub const HORIZLINESCAN7: u32 = 2546; +pub const HORIZLINESCAN9: u32 = 2547; +pub const LEFTT: u32 = 2548; +pub const RIGHTT: u32 = 2549; +pub const BOTT: u32 = 2550; +pub const TOPT: u32 = 2551; +pub const VERTBAR: u32 = 2552; +pub const EMSPACE: u32 = 2721; +pub const ENSPACE: u32 = 2722; +pub const EM3SPACE: u32 = 2723; +pub const EM4SPACE: u32 = 2724; +pub const DIGITSPACE: u32 = 2725; +pub const PUNCTSPACE: u32 = 2726; +pub const THINSPACE: u32 = 2727; +pub const HAIRSPACE: u32 = 2728; +pub const EMDASH: u32 = 2729; +pub const ENDASH: u32 = 2730; +pub const SIGNIFBLANK: u32 = 2732; +pub const ELLIPSIS: u32 = 2734; +pub const DOUBBASELINEDOT: u32 = 2735; +pub const ONETHIRD: u32 = 2736; +pub const TWOTHIRDS: u32 = 2737; +pub const ONEFIFTH: u32 = 2738; +pub const TWOFIFTHS: u32 = 2739; +pub const THREEFIFTHS: u32 = 2740; +pub const FOURFIFTHS: u32 = 2741; +pub const ONESIXTH: u32 = 2742; +pub const FIVESIXTHS: u32 = 2743; +pub const CAREOF: u32 = 2744; +pub const FIGDASH: u32 = 2747; +pub const LEFTANGLEBRACKET: u32 = 2748; +pub const DECIMALPOINT: u32 = 2749; +pub const RIGHTANGLEBRACKET: u32 = 2750; +pub const MARKER: u32 = 2751; +pub const ONEEIGHTH: u32 = 2755; +pub const THREEEIGHTHS: u32 = 2756; +pub const FIVEEIGHTHS: u32 = 2757; +pub const SEVENEIGHTHS: u32 = 2758; +pub const TRADEMARK: u32 = 2761; +pub const SIGNATUREMARK: u32 = 2762; +pub const TRADEMARKINCIRCLE: u32 = 2763; +pub const LEFTOPENTRIANGLE: u32 = 2764; +pub const RIGHTOPENTRIANGLE: u32 = 2765; +pub const EMOPENCIRCLE: u32 = 2766; +pub const EMOPENRECTANGLE: u32 = 2767; +pub const LEFTSINGLEQUOTEMARK: u32 = 2768; +pub const RIGHTSINGLEQUOTEMARK: u32 = 2769; +pub const LEFTDOUBLEQUOTEMARK: u32 = 2770; +pub const RIGHTDOUBLEQUOTEMARK: u32 = 2771; +pub const PRESCRIPTION: u32 = 2772; +pub const PERMILLE: u32 = 2773; +pub const MINUTES: u32 = 2774; +pub const SECONDS: u32 = 2775; +pub const LATINCROSS: u32 = 2777; +pub const HEXAGRAM: u32 = 2778; +pub const FILLEDRECTBULLET: u32 = 2779; +pub const FILLEDLEFTTRIBULLET: u32 = 2780; +pub const FILLEDRIGHTTRIBULLET: u32 = 2781; +pub const EMFILLEDCIRCLE: u32 = 2782; +pub const EMFILLEDRECT: u32 = 2783; +pub const ENOPENCIRCBULLET: u32 = 2784; +pub const ENOPENSQUAREBULLET: u32 = 2785; +pub const OPENRECTBULLET: u32 = 2786; +pub const OPENTRIBULLETUP: u32 = 2787; +pub const OPENTRIBULLETDOWN: u32 = 2788; +pub const OPENSTAR: u32 = 2789; +pub const ENFILLEDCIRCBULLET: u32 = 2790; +pub const ENFILLEDSQBULLET: u32 = 2791; +pub const FILLEDTRIBULLETUP: u32 = 2792; +pub const FILLEDTRIBULLETDOWN: u32 = 2793; +pub const LEFTPOINTER: u32 = 2794; +pub const RIGHTPOINTER: u32 = 2795; +pub const CLUB: u32 = 2796; +pub const DIAMOND: u32 = 2797; +pub const HEART: u32 = 2798; +pub const MALTESECROSS: u32 = 2800; +pub const DAGGER: u32 = 2801; +pub const DOUBLEDAGGER: u32 = 2802; +pub const CHECKMARK: u32 = 2803; +pub const BALLOTCROSS: u32 = 2804; +pub const MUSICALSHARP: u32 = 2805; +pub const MUSICALFLAT: u32 = 2806; +pub const MALESYMBOL: u32 = 2807; +pub const FEMALESYMBOL: u32 = 2808; +pub const TELEPHONE: u32 = 2809; +pub const TELEPHONERECORDER: u32 = 2810; +pub const PHONOGRAPHCOPYRIGHT: u32 = 2811; +pub const CARET: u32 = 2812; +pub const SINGLELOWQUOTEMARK: u32 = 2813; +pub const DOUBLELOWQUOTEMARK: u32 = 2814; +pub const CURSOR: u32 = 2815; +pub const LEFTCARET: u32 = 2979; +pub const RIGHTCARET: u32 = 2982; +pub const DOWNCARET: u32 = 2984; +pub const UPCARET: u32 = 2985; +pub const OVERBAR: u32 = 3008; +pub const DOWNTACK: u32 = 3010; +pub const UPSHOE: u32 = 3011; +pub const DOWNSTILE: u32 = 3012; +pub const UNDERBAR: u32 = 3014; +pub const JOT: u32 = 3018; +pub const QUAD: u32 = 3020; +pub const UPTACK: u32 = 3022; +pub const CIRCLE: u32 = 3023; +pub const UPSTILE: u32 = 3027; +pub const DOWNSHOE: u32 = 3030; +pub const RIGHTSHOE: u32 = 3032; +pub const LEFTSHOE: u32 = 3034; +pub const LEFTTACK: u32 = 3036; +pub const RIGHTTACK: u32 = 3068; +pub const HEBREW_DOUBLELOWLINE: u32 = 3295; +pub const HEBREW_ALEPH: u32 = 3296; +pub const HEBREW_BET: u32 = 3297; +pub const HEBREW_BETH: u32 = 3297; +pub const HEBREW_GIMEL: u32 = 3298; +pub const HEBREW_GIMMEL: u32 = 3298; +pub const HEBREW_DALET: u32 = 3299; +pub const HEBREW_DALETH: u32 = 3299; +pub const HEBREW_HE: u32 = 3300; +pub const HEBREW_WAW: u32 = 3301; +pub const HEBREW_ZAIN: u32 = 3302; +pub const HEBREW_ZAYIN: u32 = 3302; +pub const HEBREW_CHET: u32 = 3303; +pub const HEBREW_HET: u32 = 3303; +pub const HEBREW_TET: u32 = 3304; +pub const HEBREW_TETH: u32 = 3304; +pub const HEBREW_YOD: u32 = 3305; +pub const HEBREW_FINALKAPH: u32 = 3306; +pub const HEBREW_KAPH: u32 = 3307; +pub const HEBREW_LAMED: u32 = 3308; +pub const HEBREW_FINALMEM: u32 = 3309; +pub const HEBREW_MEM: u32 = 3310; +pub const HEBREW_FINALNUN: u32 = 3311; +pub const HEBREW_NUN: u32 = 3312; +pub const HEBREW_SAMECH: u32 = 3313; +pub const HEBREW_SAMEKH: u32 = 3313; +pub const HEBREW_AYIN: u32 = 3314; +pub const HEBREW_FINALPE: u32 = 3315; +pub const HEBREW_PE: u32 = 3316; +pub const HEBREW_FINALZADE: u32 = 3317; +pub const HEBREW_FINALZADI: u32 = 3317; +pub const HEBREW_ZADE: u32 = 3318; +pub const HEBREW_ZADI: u32 = 3318; +pub const HEBREW_QOPH: u32 = 3319; +pub const HEBREW_KUF: u32 = 3319; +pub const HEBREW_RESH: u32 = 3320; +pub const HEBREW_SHIN: u32 = 3321; +pub const HEBREW_TAW: u32 = 3322; +pub const HEBREW_TAF: u32 = 3322; +pub const HEBREW_SWITCH: u32 = 65406; +pub const THAI_KOKAI: u32 = 3489; +pub const THAI_KHOKHAI: u32 = 3490; +pub const THAI_KHOKHUAT: u32 = 3491; +pub const THAI_KHOKHWAI: u32 = 3492; +pub const THAI_KHOKHON: u32 = 3493; +pub const THAI_KHORAKHANG: u32 = 3494; +pub const THAI_NGONGU: u32 = 3495; +pub const THAI_CHOCHAN: u32 = 3496; +pub const THAI_CHOCHING: u32 = 3497; +pub const THAI_CHOCHANG: u32 = 3498; +pub const THAI_SOSO: u32 = 3499; +pub const THAI_CHOCHOE: u32 = 3500; +pub const THAI_YOYING: u32 = 3501; +pub const THAI_DOCHADA: u32 = 3502; +pub const THAI_TOPATAK: u32 = 3503; +pub const THAI_THOTHAN: u32 = 3504; +pub const THAI_THONANGMONTHO: u32 = 3505; +pub const THAI_THOPHUTHAO: u32 = 3506; +pub const THAI_NONEN: u32 = 3507; +pub const THAI_DODEK: u32 = 3508; +pub const THAI_TOTAO: u32 = 3509; +pub const THAI_THOTHUNG: u32 = 3510; +pub const THAI_THOTHAHAN: u32 = 3511; +pub const THAI_THOTHONG: u32 = 3512; +pub const THAI_NONU: u32 = 3513; +pub const THAI_BOBAIMAI: u32 = 3514; +pub const THAI_POPLA: u32 = 3515; +pub const THAI_PHOPHUNG: u32 = 3516; +pub const THAI_FOFA: u32 = 3517; +pub const THAI_PHOPHAN: u32 = 3518; +pub const THAI_FOFAN: u32 = 3519; +pub const THAI_PHOSAMPHAO: u32 = 3520; +pub const THAI_MOMA: u32 = 3521; +pub const THAI_YOYAK: u32 = 3522; +pub const THAI_RORUA: u32 = 3523; +pub const THAI_RU: u32 = 3524; +pub const THAI_LOLING: u32 = 3525; +pub const THAI_LU: u32 = 3526; +pub const THAI_WOWAEN: u32 = 3527; +pub const THAI_SOSALA: u32 = 3528; +pub const THAI_SORUSI: u32 = 3529; +pub const THAI_SOSUA: u32 = 3530; +pub const THAI_HOHIP: u32 = 3531; +pub const THAI_LOCHULA: u32 = 3532; +pub const THAI_OANG: u32 = 3533; +pub const THAI_HONOKHUK: u32 = 3534; +pub const THAI_PAIYANNOI: u32 = 3535; +pub const THAI_SARAA: u32 = 3536; +pub const THAI_MAIHANAKAT: u32 = 3537; +pub const THAI_SARAAA: u32 = 3538; +pub const THAI_SARAAM: u32 = 3539; +pub const THAI_SARAI: u32 = 3540; +pub const THAI_SARAII: u32 = 3541; +pub const THAI_SARAUE: u32 = 3542; +pub const THAI_SARAUEE: u32 = 3543; +pub const THAI_SARAU: u32 = 3544; +pub const THAI_SARAUU: u32 = 3545; +pub const THAI_PHINTHU: u32 = 3546; +pub const THAI_MAIHANAKAT_MAITHO: u32 = 3550; +pub const THAI_BAHT: u32 = 3551; +pub const THAI_SARAE: u32 = 3552; +pub const THAI_SARAAE: u32 = 3553; +pub const THAI_SARAO: u32 = 3554; +pub const THAI_SARAAIMAIMUAN: u32 = 3555; +pub const THAI_SARAAIMAIMALAI: u32 = 3556; +pub const THAI_LAKKHANGYAO: u32 = 3557; +pub const THAI_MAIYAMOK: u32 = 3558; +pub const THAI_MAITAIKHU: u32 = 3559; +pub const THAI_MAIEK: u32 = 3560; +pub const THAI_MAITHO: u32 = 3561; +pub const THAI_MAITRI: u32 = 3562; +pub const THAI_MAICHATTAWA: u32 = 3563; +pub const THAI_THANTHAKHAT: u32 = 3564; +pub const THAI_NIKHAHIT: u32 = 3565; +pub const THAI_LEKSUN: u32 = 3568; +pub const THAI_LEKNUNG: u32 = 3569; +pub const THAI_LEKSONG: u32 = 3570; +pub const THAI_LEKSAM: u32 = 3571; +pub const THAI_LEKSI: u32 = 3572; +pub const THAI_LEKHA: u32 = 3573; +pub const THAI_LEKHOK: u32 = 3574; +pub const THAI_LEKCHET: u32 = 3575; +pub const THAI_LEKPAET: u32 = 3576; +pub const THAI_LEKKAO: u32 = 3577; +pub const HANGUL: u32 = 65329; +pub const HANGUL_START: u32 = 65330; +pub const HANGUL_END: u32 = 65331; +pub const HANGUL_HANJA: u32 = 65332; +pub const HANGUL_JAMO: u32 = 65333; +pub const HANGUL_ROMAJA: u32 = 65334; +pub const HANGUL_CODEINPUT: u32 = 65335; +pub const HANGUL_JEONJA: u32 = 65336; +pub const HANGUL_BANJA: u32 = 65337; +pub const HANGUL_PRE_HANJA: u32 = 65338; +pub const HANGUL_POST_HANJA: u32 = 65339; +pub const HANGUL_SINGLE_CANDIDATE: u32 = 65340; +pub const HANGUL_MULTIPLE_CANDIDATE: u32 = 65341; +pub const HANGUL_PREVIOUS_CANDIDATE: u32 = 65342; +pub const HANGUL_SPECIAL: u32 = 65343; +pub const HANGUL_SWITCH: u32 = 65406; +pub const HANGUL_KIYEOG: u32 = 3745; +pub const HANGUL_SSANG_KIYEOG: u32 = 3746; +pub const HANGUL_KIYEOG_SIOS: u32 = 3747; +pub const HANGUL_NIEUN: u32 = 3748; +pub const HANGUL_NIEUN_JIEUJ: u32 = 3749; +pub const HANGUL_NIEUN_HIEUH: u32 = 3750; +pub const HANGUL_DIKEUD: u32 = 3751; +pub const HANGUL_SSANG_DIKEUD: u32 = 3752; +pub const HANGUL_RIEUL: u32 = 3753; +pub const HANGUL_RIEUL_KIYEOG: u32 = 3754; +pub const HANGUL_RIEUL_MIEUM: u32 = 3755; +pub const HANGUL_RIEUL_PIEUB: u32 = 3756; +pub const HANGUL_RIEUL_SIOS: u32 = 3757; +pub const HANGUL_RIEUL_TIEUT: u32 = 3758; +pub const HANGUL_RIEUL_PHIEUF: u32 = 3759; +pub const HANGUL_RIEUL_HIEUH: u32 = 3760; +pub const HANGUL_MIEUM: u32 = 3761; +pub const HANGUL_PIEUB: u32 = 3762; +pub const HANGUL_SSANG_PIEUB: u32 = 3763; +pub const HANGUL_PIEUB_SIOS: u32 = 3764; +pub const HANGUL_SIOS: u32 = 3765; +pub const HANGUL_SSANG_SIOS: u32 = 3766; +pub const HANGUL_IEUNG: u32 = 3767; +pub const HANGUL_JIEUJ: u32 = 3768; +pub const HANGUL_SSANG_JIEUJ: u32 = 3769; +pub const HANGUL_CIEUC: u32 = 3770; +pub const HANGUL_KHIEUQ: u32 = 3771; +pub const HANGUL_TIEUT: u32 = 3772; +pub const HANGUL_PHIEUF: u32 = 3773; +pub const HANGUL_HIEUH: u32 = 3774; +pub const HANGUL_A: u32 = 3775; +pub const HANGUL_AE: u32 = 3776; +pub const HANGUL_YA: u32 = 3777; +pub const HANGUL_YAE: u32 = 3778; +pub const HANGUL_EO: u32 = 3779; +pub const HANGUL_E: u32 = 3780; +pub const HANGUL_YEO: u32 = 3781; +pub const HANGUL_YE: u32 = 3782; +pub const HANGUL_O: u32 = 3783; +pub const HANGUL_WA: u32 = 3784; +pub const HANGUL_WAE: u32 = 3785; +pub const HANGUL_OE: u32 = 3786; +pub const HANGUL_YO: u32 = 3787; +pub const HANGUL_U: u32 = 3788; +pub const HANGUL_WEO: u32 = 3789; +pub const HANGUL_WE: u32 = 3790; +pub const HANGUL_WI: u32 = 3791; +pub const HANGUL_YU: u32 = 3792; +pub const HANGUL_EU: u32 = 3793; +pub const HANGUL_YI: u32 = 3794; +pub const HANGUL_I: u32 = 3795; +pub const HANGUL_J_KIYEOG: u32 = 3796; +pub const HANGUL_J_SSANG_KIYEOG: u32 = 3797; +pub const HANGUL_J_KIYEOG_SIOS: u32 = 3798; +pub const HANGUL_J_NIEUN: u32 = 3799; +pub const HANGUL_J_NIEUN_JIEUJ: u32 = 3800; +pub const HANGUL_J_NIEUN_HIEUH: u32 = 3801; +pub const HANGUL_J_DIKEUD: u32 = 3802; +pub const HANGUL_J_RIEUL: u32 = 3803; +pub const HANGUL_J_RIEUL_KIYEOG: u32 = 3804; +pub const HANGUL_J_RIEUL_MIEUM: u32 = 3805; +pub const HANGUL_J_RIEUL_PIEUB: u32 = 3806; +pub const HANGUL_J_RIEUL_SIOS: u32 = 3807; +pub const HANGUL_J_RIEUL_TIEUT: u32 = 3808; +pub const HANGUL_J_RIEUL_PHIEUF: u32 = 3809; +pub const HANGUL_J_RIEUL_HIEUH: u32 = 3810; +pub const HANGUL_J_MIEUM: u32 = 3811; +pub const HANGUL_J_PIEUB: u32 = 3812; +pub const HANGUL_J_PIEUB_SIOS: u32 = 3813; +pub const HANGUL_J_SIOS: u32 = 3814; +pub const HANGUL_J_SSANG_SIOS: u32 = 3815; +pub const HANGUL_J_IEUNG: u32 = 3816; +pub const HANGUL_J_JIEUJ: u32 = 3817; +pub const HANGUL_J_CIEUC: u32 = 3818; +pub const HANGUL_J_KHIEUQ: u32 = 3819; +pub const HANGUL_J_TIEUT: u32 = 3820; +pub const HANGUL_J_PHIEUF: u32 = 3821; +pub const HANGUL_J_HIEUH: u32 = 3822; +pub const HANGUL_RIEUL_YEORIN_HIEUH: u32 = 3823; +pub const HANGUL_SUNKYEONGEUM_MIEUM: u32 = 3824; +pub const HANGUL_SUNKYEONGEUM_PIEUB: u32 = 3825; +pub const HANGUL_PAN_SIOS: u32 = 3826; +pub const HANGUL_KKOGJI_DALRIN_IEUNG: u32 = 3827; +pub const HANGUL_SUNKYEONGEUM_PHIEUF: u32 = 3828; +pub const HANGUL_YEORIN_HIEUH: u32 = 3829; +pub const HANGUL_ARAE_A: u32 = 3830; +pub const HANGUL_ARAE_AE: u32 = 3831; +pub const HANGUL_J_PAN_SIOS: u32 = 3832; +pub const HANGUL_J_KKOGJI_DALRIN_IEUNG: u32 = 3833; +pub const HANGUL_J_YEORIN_HIEUH: u32 = 3834; +pub const KOREAN_WON: u32 = 3839; +pub const ARMENIAN_LIGATURE_EW: u32 = 16778631; +pub const ARMENIAN_FULL_STOP: u32 = 16778633; +pub const ARMENIAN_VERJAKET: u32 = 16778633; +pub const ARMENIAN_SEPARATION_MARK: u32 = 16778589; +pub const ARMENIAN_BUT: u32 = 16778589; +pub const ARMENIAN_HYPHEN: u32 = 16778634; +pub const ARMENIAN_YENTAMNA: u32 = 16778634; +pub const ARMENIAN_EXCLAM: u32 = 16778588; +pub const ARMENIAN_AMANAK: u32 = 16778588; +pub const ARMENIAN_ACCENT: u32 = 16778587; +pub const ARMENIAN_SHESHT: u32 = 16778587; +pub const ARMENIAN_QUESTION: u32 = 16778590; +pub const ARMENIAN_PARUYK: u32 = 16778590; +pub const ARMENIAN_APOSTROPHE: u32 = 16778586; +pub const GEORGIAN_AN: u32 = 16781520; +pub const GEORGIAN_BAN: u32 = 16781521; +pub const GEORGIAN_GAN: u32 = 16781522; +pub const GEORGIAN_DON: u32 = 16781523; +pub const GEORGIAN_EN: u32 = 16781524; +pub const GEORGIAN_VIN: u32 = 16781525; +pub const GEORGIAN_ZEN: u32 = 16781526; +pub const GEORGIAN_TAN: u32 = 16781527; +pub const GEORGIAN_IN: u32 = 16781528; +pub const GEORGIAN_KAN: u32 = 16781529; +pub const GEORGIAN_LAS: u32 = 16781530; +pub const GEORGIAN_MAN: u32 = 16781531; +pub const GEORGIAN_NAR: u32 = 16781532; +pub const GEORGIAN_ON: u32 = 16781533; +pub const GEORGIAN_PAR: u32 = 16781534; +pub const GEORGIAN_ZHAR: u32 = 16781535; +pub const GEORGIAN_RAE: u32 = 16781536; +pub const GEORGIAN_SAN: u32 = 16781537; +pub const GEORGIAN_TAR: u32 = 16781538; +pub const GEORGIAN_UN: u32 = 16781539; +pub const GEORGIAN_PHAR: u32 = 16781540; +pub const GEORGIAN_KHAR: u32 = 16781541; +pub const GEORGIAN_GHAN: u32 = 16781542; +pub const GEORGIAN_QAR: u32 = 16781543; +pub const GEORGIAN_SHIN: u32 = 16781544; +pub const GEORGIAN_CHIN: u32 = 16781545; +pub const GEORGIAN_CAN: u32 = 16781546; +pub const GEORGIAN_JIL: u32 = 16781547; +pub const GEORGIAN_CIL: u32 = 16781548; +pub const GEORGIAN_CHAR: u32 = 16781549; +pub const GEORGIAN_XAN: u32 = 16781550; +pub const GEORGIAN_JHAN: u32 = 16781551; +pub const GEORGIAN_HAE: u32 = 16781552; +pub const GEORGIAN_HE: u32 = 16781553; +pub const GEORGIAN_HIE: u32 = 16781554; +pub const GEORGIAN_WE: u32 = 16781555; +pub const GEORGIAN_HAR: u32 = 16781556; +pub const GEORGIAN_HOE: u32 = 16781557; +pub const GEORGIAN_FI: u32 = 16781558; +pub const COMBINING_TILDE: u32 = 16777987; +pub const COMBINING_GRAVE: u32 = 16777984; +pub const COMBINING_ACUTE: u32 = 16777985; +pub const COMBINING_HOOK: u32 = 16777993; +pub const COMBINING_BELOWDOT: u32 = 16778019; +pub const ECU_SIGN: u32 = 16785568; +pub const COLON_SIGN: u32 = 16785569; +pub const CRUZEIRO_SIGN: u32 = 16785570; +pub const FFRANC_SIGN: u32 = 16785571; +pub const LIRA_SIGN: u32 = 16785572; +pub const MILL_SIGN: u32 = 16785573; +pub const NAIRA_SIGN: u32 = 16785574; +pub const PESETA_SIGN: u32 = 16785575; +pub const RUPEE_SIGN: u32 = 16785576; +pub const WON_SIGN: u32 = 16785577; +pub const NEW_SHEQEL_SIGN: u32 = 16785578; +pub const DONG_SIGN: u32 = 16785579; +pub const EURO_SIGN: u32 = 8364; +pub const ZEROSUPERIOR: u32 = 16785520; +pub const FOURSUPERIOR: u32 = 16785524; +pub const FIVESUPERIOR: u32 = 16785525; +pub const SIXSUPERIOR: u32 = 16785526; +pub const SEVENSUPERIOR: u32 = 16785527; +pub const EIGHTSUPERIOR: u32 = 16785528; +pub const NINESUPERIOR: u32 = 16785529; +pub const ZEROSUBSCRIPT: u32 = 16785536; +pub const ONESUBSCRIPT: u32 = 16785537; +pub const TWOSUBSCRIPT: u32 = 16785538; +pub const THREESUBSCRIPT: u32 = 16785539; +pub const FOURSUBSCRIPT: u32 = 16785540; +pub const FIVESUBSCRIPT: u32 = 16785541; +pub const SIXSUBSCRIPT: u32 = 16785542; +pub const SEVENSUBSCRIPT: u32 = 16785543; +pub const EIGHTSUBSCRIPT: u32 = 16785544; +pub const NINESUBSCRIPT: u32 = 16785545; +pub const PARTDIFFERENTIAL: u32 = 16785922; +pub const EMPTYSET: u32 = 16785925; +pub const ELEMENTOF: u32 = 16785928; +pub const NOTELEMENTOF: u32 = 16785929; +pub const CONTAINSAS: u32 = 16785931; +pub const SQUAREROOT: u32 = 16785946; +pub const CUBEROOT: u32 = 16785947; +pub const FOURTHROOT: u32 = 16785948; +pub const DINTEGRAL: u32 = 16785964; +pub const TINTEGRAL: u32 = 16785965; +pub const BECAUSE: u32 = 16785973; +pub const APPROXEQ: u32 = 16785992; +pub const NOTAPPROXEQ: u32 = 16785991; +pub const NOTIDENTICAL: u32 = 16786018; +pub const STRICTEQ: u32 = 16786019; +pub const BRAILLE_DOT_1: u32 = 65521; +pub const BRAILLE_DOT_2: u32 = 65522; +pub const BRAILLE_DOT_3: u32 = 65523; +pub const BRAILLE_DOT_4: u32 = 65524; +pub const BRAILLE_DOT_5: u32 = 65525; +pub const BRAILLE_DOT_6: u32 = 65526; +pub const BRAILLE_DOT_7: u32 = 65527; +pub const BRAILLE_DOT_8: u32 = 65528; +pub const BRAILLE_DOT_9: u32 = 65529; +pub const BRAILLE_DOT_10: u32 = 65530; +pub const BRAILLE_BLANK: u32 = 16787456; +pub const BRAILLE_DOTS_1: u32 = 16787457; +pub const BRAILLE_DOTS_2: u32 = 16787458; +pub const BRAILLE_DOTS_12: u32 = 16787459; +pub const BRAILLE_DOTS_3: u32 = 16787460; +pub const BRAILLE_DOTS_13: u32 = 16787461; +pub const BRAILLE_DOTS_23: u32 = 16787462; +pub const BRAILLE_DOTS_123: u32 = 16787463; +pub const BRAILLE_DOTS_4: u32 = 16787464; +pub const BRAILLE_DOTS_14: u32 = 16787465; +pub const BRAILLE_DOTS_24: u32 = 16787466; +pub const BRAILLE_DOTS_124: u32 = 16787467; +pub const BRAILLE_DOTS_34: u32 = 16787468; +pub const BRAILLE_DOTS_134: u32 = 16787469; +pub const BRAILLE_DOTS_234: u32 = 16787470; +pub const BRAILLE_DOTS_1234: u32 = 16787471; +pub const BRAILLE_DOTS_5: u32 = 16787472; +pub const BRAILLE_DOTS_15: u32 = 16787473; +pub const BRAILLE_DOTS_25: u32 = 16787474; +pub const BRAILLE_DOTS_125: u32 = 16787475; +pub const BRAILLE_DOTS_35: u32 = 16787476; +pub const BRAILLE_DOTS_135: u32 = 16787477; +pub const BRAILLE_DOTS_235: u32 = 16787478; +pub const BRAILLE_DOTS_1235: u32 = 16787479; +pub const BRAILLE_DOTS_45: u32 = 16787480; +pub const BRAILLE_DOTS_145: u32 = 16787481; +pub const BRAILLE_DOTS_245: u32 = 16787482; +pub const BRAILLE_DOTS_1245: u32 = 16787483; +pub const BRAILLE_DOTS_345: u32 = 16787484; +pub const BRAILLE_DOTS_1345: u32 = 16787485; +pub const BRAILLE_DOTS_2345: u32 = 16787486; +pub const BRAILLE_DOTS_12345: u32 = 16787487; +pub const BRAILLE_DOTS_6: u32 = 16787488; +pub const BRAILLE_DOTS_16: u32 = 16787489; +pub const BRAILLE_DOTS_26: u32 = 16787490; +pub const BRAILLE_DOTS_126: u32 = 16787491; +pub const BRAILLE_DOTS_36: u32 = 16787492; +pub const BRAILLE_DOTS_136: u32 = 16787493; +pub const BRAILLE_DOTS_236: u32 = 16787494; +pub const BRAILLE_DOTS_1236: u32 = 16787495; +pub const BRAILLE_DOTS_46: u32 = 16787496; +pub const BRAILLE_DOTS_146: u32 = 16787497; +pub const BRAILLE_DOTS_246: u32 = 16787498; +pub const BRAILLE_DOTS_1246: u32 = 16787499; +pub const BRAILLE_DOTS_346: u32 = 16787500; +pub const BRAILLE_DOTS_1346: u32 = 16787501; +pub const BRAILLE_DOTS_2346: u32 = 16787502; +pub const BRAILLE_DOTS_12346: u32 = 16787503; +pub const BRAILLE_DOTS_56: u32 = 16787504; +pub const BRAILLE_DOTS_156: u32 = 16787505; +pub const BRAILLE_DOTS_256: u32 = 16787506; +pub const BRAILLE_DOTS_1256: u32 = 16787507; +pub const BRAILLE_DOTS_356: u32 = 16787508; +pub const BRAILLE_DOTS_1356: u32 = 16787509; +pub const BRAILLE_DOTS_2356: u32 = 16787510; +pub const BRAILLE_DOTS_12356: u32 = 16787511; +pub const BRAILLE_DOTS_456: u32 = 16787512; +pub const BRAILLE_DOTS_1456: u32 = 16787513; +pub const BRAILLE_DOTS_2456: u32 = 16787514; +pub const BRAILLE_DOTS_12456: u32 = 16787515; +pub const BRAILLE_DOTS_3456: u32 = 16787516; +pub const BRAILLE_DOTS_13456: u32 = 16787517; +pub const BRAILLE_DOTS_23456: u32 = 16787518; +pub const BRAILLE_DOTS_123456: u32 = 16787519; +pub const BRAILLE_DOTS_7: u32 = 16787520; +pub const BRAILLE_DOTS_17: u32 = 16787521; +pub const BRAILLE_DOTS_27: u32 = 16787522; +pub const BRAILLE_DOTS_127: u32 = 16787523; +pub const BRAILLE_DOTS_37: u32 = 16787524; +pub const BRAILLE_DOTS_137: u32 = 16787525; +pub const BRAILLE_DOTS_237: u32 = 16787526; +pub const BRAILLE_DOTS_1237: u32 = 16787527; +pub const BRAILLE_DOTS_47: u32 = 16787528; +pub const BRAILLE_DOTS_147: u32 = 16787529; +pub const BRAILLE_DOTS_247: u32 = 16787530; +pub const BRAILLE_DOTS_1247: u32 = 16787531; +pub const BRAILLE_DOTS_347: u32 = 16787532; +pub const BRAILLE_DOTS_1347: u32 = 16787533; +pub const BRAILLE_DOTS_2347: u32 = 16787534; +pub const BRAILLE_DOTS_12347: u32 = 16787535; +pub const BRAILLE_DOTS_57: u32 = 16787536; +pub const BRAILLE_DOTS_157: u32 = 16787537; +pub const BRAILLE_DOTS_257: u32 = 16787538; +pub const BRAILLE_DOTS_1257: u32 = 16787539; +pub const BRAILLE_DOTS_357: u32 = 16787540; +pub const BRAILLE_DOTS_1357: u32 = 16787541; +pub const BRAILLE_DOTS_2357: u32 = 16787542; +pub const BRAILLE_DOTS_12357: u32 = 16787543; +pub const BRAILLE_DOTS_457: u32 = 16787544; +pub const BRAILLE_DOTS_1457: u32 = 16787545; +pub const BRAILLE_DOTS_2457: u32 = 16787546; +pub const BRAILLE_DOTS_12457: u32 = 16787547; +pub const BRAILLE_DOTS_3457: u32 = 16787548; +pub const BRAILLE_DOTS_13457: u32 = 16787549; +pub const BRAILLE_DOTS_23457: u32 = 16787550; +pub const BRAILLE_DOTS_123457: u32 = 16787551; +pub const BRAILLE_DOTS_67: u32 = 16787552; +pub const BRAILLE_DOTS_167: u32 = 16787553; +pub const BRAILLE_DOTS_267: u32 = 16787554; +pub const BRAILLE_DOTS_1267: u32 = 16787555; +pub const BRAILLE_DOTS_367: u32 = 16787556; +pub const BRAILLE_DOTS_1367: u32 = 16787557; +pub const BRAILLE_DOTS_2367: u32 = 16787558; +pub const BRAILLE_DOTS_12367: u32 = 16787559; +pub const BRAILLE_DOTS_467: u32 = 16787560; +pub const BRAILLE_DOTS_1467: u32 = 16787561; +pub const BRAILLE_DOTS_2467: u32 = 16787562; +pub const BRAILLE_DOTS_12467: u32 = 16787563; +pub const BRAILLE_DOTS_3467: u32 = 16787564; +pub const BRAILLE_DOTS_13467: u32 = 16787565; +pub const BRAILLE_DOTS_23467: u32 = 16787566; +pub const BRAILLE_DOTS_123467: u32 = 16787567; +pub const BRAILLE_DOTS_567: u32 = 16787568; +pub const BRAILLE_DOTS_1567: u32 = 16787569; +pub const BRAILLE_DOTS_2567: u32 = 16787570; +pub const BRAILLE_DOTS_12567: u32 = 16787571; +pub const BRAILLE_DOTS_3567: u32 = 16787572; +pub const BRAILLE_DOTS_13567: u32 = 16787573; +pub const BRAILLE_DOTS_23567: u32 = 16787574; +pub const BRAILLE_DOTS_123567: u32 = 16787575; +pub const BRAILLE_DOTS_4567: u32 = 16787576; +pub const BRAILLE_DOTS_14567: u32 = 16787577; +pub const BRAILLE_DOTS_24567: u32 = 16787578; +pub const BRAILLE_DOTS_124567: u32 = 16787579; +pub const BRAILLE_DOTS_34567: u32 = 16787580; +pub const BRAILLE_DOTS_134567: u32 = 16787581; +pub const BRAILLE_DOTS_234567: u32 = 16787582; +pub const BRAILLE_DOTS_1234567: u32 = 16787583; +pub const BRAILLE_DOTS_8: u32 = 16787584; +pub const BRAILLE_DOTS_18: u32 = 16787585; +pub const BRAILLE_DOTS_28: u32 = 16787586; +pub const BRAILLE_DOTS_128: u32 = 16787587; +pub const BRAILLE_DOTS_38: u32 = 16787588; +pub const BRAILLE_DOTS_138: u32 = 16787589; +pub const BRAILLE_DOTS_238: u32 = 16787590; +pub const BRAILLE_DOTS_1238: u32 = 16787591; +pub const BRAILLE_DOTS_48: u32 = 16787592; +pub const BRAILLE_DOTS_148: u32 = 16787593; +pub const BRAILLE_DOTS_248: u32 = 16787594; +pub const BRAILLE_DOTS_1248: u32 = 16787595; +pub const BRAILLE_DOTS_348: u32 = 16787596; +pub const BRAILLE_DOTS_1348: u32 = 16787597; +pub const BRAILLE_DOTS_2348: u32 = 16787598; +pub const BRAILLE_DOTS_12348: u32 = 16787599; +pub const BRAILLE_DOTS_58: u32 = 16787600; +pub const BRAILLE_DOTS_158: u32 = 16787601; +pub const BRAILLE_DOTS_258: u32 = 16787602; +pub const BRAILLE_DOTS_1258: u32 = 16787603; +pub const BRAILLE_DOTS_358: u32 = 16787604; +pub const BRAILLE_DOTS_1358: u32 = 16787605; +pub const BRAILLE_DOTS_2358: u32 = 16787606; +pub const BRAILLE_DOTS_12358: u32 = 16787607; +pub const BRAILLE_DOTS_458: u32 = 16787608; +pub const BRAILLE_DOTS_1458: u32 = 16787609; +pub const BRAILLE_DOTS_2458: u32 = 16787610; +pub const BRAILLE_DOTS_12458: u32 = 16787611; +pub const BRAILLE_DOTS_3458: u32 = 16787612; +pub const BRAILLE_DOTS_13458: u32 = 16787613; +pub const BRAILLE_DOTS_23458: u32 = 16787614; +pub const BRAILLE_DOTS_123458: u32 = 16787615; +pub const BRAILLE_DOTS_68: u32 = 16787616; +pub const BRAILLE_DOTS_168: u32 = 16787617; +pub const BRAILLE_DOTS_268: u32 = 16787618; +pub const BRAILLE_DOTS_1268: u32 = 16787619; +pub const BRAILLE_DOTS_368: u32 = 16787620; +pub const BRAILLE_DOTS_1368: u32 = 16787621; +pub const BRAILLE_DOTS_2368: u32 = 16787622; +pub const BRAILLE_DOTS_12368: u32 = 16787623; +pub const BRAILLE_DOTS_468: u32 = 16787624; +pub const BRAILLE_DOTS_1468: u32 = 16787625; +pub const BRAILLE_DOTS_2468: u32 = 16787626; +pub const BRAILLE_DOTS_12468: u32 = 16787627; +pub const BRAILLE_DOTS_3468: u32 = 16787628; +pub const BRAILLE_DOTS_13468: u32 = 16787629; +pub const BRAILLE_DOTS_23468: u32 = 16787630; +pub const BRAILLE_DOTS_123468: u32 = 16787631; +pub const BRAILLE_DOTS_568: u32 = 16787632; +pub const BRAILLE_DOTS_1568: u32 = 16787633; +pub const BRAILLE_DOTS_2568: u32 = 16787634; +pub const BRAILLE_DOTS_12568: u32 = 16787635; +pub const BRAILLE_DOTS_3568: u32 = 16787636; +pub const BRAILLE_DOTS_13568: u32 = 16787637; +pub const BRAILLE_DOTS_23568: u32 = 16787638; +pub const BRAILLE_DOTS_123568: u32 = 16787639; +pub const BRAILLE_DOTS_4568: u32 = 16787640; +pub const BRAILLE_DOTS_14568: u32 = 16787641; +pub const BRAILLE_DOTS_24568: u32 = 16787642; +pub const BRAILLE_DOTS_124568: u32 = 16787643; +pub const BRAILLE_DOTS_34568: u32 = 16787644; +pub const BRAILLE_DOTS_134568: u32 = 16787645; +pub const BRAILLE_DOTS_234568: u32 = 16787646; +pub const BRAILLE_DOTS_1234568: u32 = 16787647; +pub const BRAILLE_DOTS_78: u32 = 16787648; +pub const BRAILLE_DOTS_178: u32 = 16787649; +pub const BRAILLE_DOTS_278: u32 = 16787650; +pub const BRAILLE_DOTS_1278: u32 = 16787651; +pub const BRAILLE_DOTS_378: u32 = 16787652; +pub const BRAILLE_DOTS_1378: u32 = 16787653; +pub const BRAILLE_DOTS_2378: u32 = 16787654; +pub const BRAILLE_DOTS_12378: u32 = 16787655; +pub const BRAILLE_DOTS_478: u32 = 16787656; +pub const BRAILLE_DOTS_1478: u32 = 16787657; +pub const BRAILLE_DOTS_2478: u32 = 16787658; +pub const BRAILLE_DOTS_12478: u32 = 16787659; +pub const BRAILLE_DOTS_3478: u32 = 16787660; +pub const BRAILLE_DOTS_13478: u32 = 16787661; +pub const BRAILLE_DOTS_23478: u32 = 16787662; +pub const BRAILLE_DOTS_123478: u32 = 16787663; +pub const BRAILLE_DOTS_578: u32 = 16787664; +pub const BRAILLE_DOTS_1578: u32 = 16787665; +pub const BRAILLE_DOTS_2578: u32 = 16787666; +pub const BRAILLE_DOTS_12578: u32 = 16787667; +pub const BRAILLE_DOTS_3578: u32 = 16787668; +pub const BRAILLE_DOTS_13578: u32 = 16787669; +pub const BRAILLE_DOTS_23578: u32 = 16787670; +pub const BRAILLE_DOTS_123578: u32 = 16787671; +pub const BRAILLE_DOTS_4578: u32 = 16787672; +pub const BRAILLE_DOTS_14578: u32 = 16787673; +pub const BRAILLE_DOTS_24578: u32 = 16787674; +pub const BRAILLE_DOTS_124578: u32 = 16787675; +pub const BRAILLE_DOTS_34578: u32 = 16787676; +pub const BRAILLE_DOTS_134578: u32 = 16787677; +pub const BRAILLE_DOTS_234578: u32 = 16787678; +pub const BRAILLE_DOTS_1234578: u32 = 16787679; +pub const BRAILLE_DOTS_678: u32 = 16787680; +pub const BRAILLE_DOTS_1678: u32 = 16787681; +pub const BRAILLE_DOTS_2678: u32 = 16787682; +pub const BRAILLE_DOTS_12678: u32 = 16787683; +pub const BRAILLE_DOTS_3678: u32 = 16787684; +pub const BRAILLE_DOTS_13678: u32 = 16787685; +pub const BRAILLE_DOTS_23678: u32 = 16787686; +pub const BRAILLE_DOTS_123678: u32 = 16787687; +pub const BRAILLE_DOTS_4678: u32 = 16787688; +pub const BRAILLE_DOTS_14678: u32 = 16787689; +pub const BRAILLE_DOTS_24678: u32 = 16787690; +pub const BRAILLE_DOTS_124678: u32 = 16787691; +pub const BRAILLE_DOTS_34678: u32 = 16787692; +pub const BRAILLE_DOTS_134678: u32 = 16787693; +pub const BRAILLE_DOTS_234678: u32 = 16787694; +pub const BRAILLE_DOTS_1234678: u32 = 16787695; +pub const BRAILLE_DOTS_5678: u32 = 16787696; +pub const BRAILLE_DOTS_15678: u32 = 16787697; +pub const BRAILLE_DOTS_25678: u32 = 16787698; +pub const BRAILLE_DOTS_125678: u32 = 16787699; +pub const BRAILLE_DOTS_35678: u32 = 16787700; +pub const BRAILLE_DOTS_135678: u32 = 16787701; +pub const BRAILLE_DOTS_235678: u32 = 16787702; +pub const BRAILLE_DOTS_1235678: u32 = 16787703; +pub const BRAILLE_DOTS_45678: u32 = 16787704; +pub const BRAILLE_DOTS_145678: u32 = 16787705; +pub const BRAILLE_DOTS_245678: u32 = 16787706; +pub const BRAILLE_DOTS_1245678: u32 = 16787707; +pub const BRAILLE_DOTS_345678: u32 = 16787708; +pub const BRAILLE_DOTS_1345678: u32 = 16787709; +pub const BRAILLE_DOTS_2345678: u32 = 16787710; +pub const BRAILLE_DOTS_12345678: u32 = 16787711; +pub const SINH_NG: u32 = 16780674; +pub const SINH_H2: u32 = 16780675; +pub const SINH_A: u32 = 16780677; +pub const SINH_AA: u32 = 16780678; +pub const SINH_AE: u32 = 16780679; +pub const SINH_AEE: u32 = 16780680; +pub const SINH_I: u32 = 16780681; +pub const SINH_II: u32 = 16780682; +pub const SINH_U: u32 = 16780683; +pub const SINH_UU: u32 = 16780684; +pub const SINH_RI: u32 = 16780685; +pub const SINH_RII: u32 = 16780686; +pub const SINH_LU: u32 = 16780687; +pub const SINH_LUU: u32 = 16780688; +pub const SINH_E: u32 = 16780689; +pub const SINH_EE: u32 = 16780690; +pub const SINH_AI: u32 = 16780691; +pub const SINH_O: u32 = 16780692; +pub const SINH_OO: u32 = 16780693; +pub const SINH_AU: u32 = 16780694; +pub const SINH_KA: u32 = 16780698; +pub const SINH_KHA: u32 = 16780699; +pub const SINH_GA: u32 = 16780700; +pub const SINH_GHA: u32 = 16780701; +pub const SINH_NG2: u32 = 16780702; +pub const SINH_NGA: u32 = 16780703; +pub const SINH_CA: u32 = 16780704; +pub const SINH_CHA: u32 = 16780705; +pub const SINH_JA: u32 = 16780706; +pub const SINH_JHA: u32 = 16780707; +pub const SINH_NYA: u32 = 16780708; +pub const SINH_JNYA: u32 = 16780709; +pub const SINH_NJA: u32 = 16780710; +pub const SINH_TTA: u32 = 16780711; +pub const SINH_TTHA: u32 = 16780712; +pub const SINH_DDA: u32 = 16780713; +pub const SINH_DDHA: u32 = 16780714; +pub const SINH_NNA: u32 = 16780715; +pub const SINH_NDDA: u32 = 16780716; +pub const SINH_THA: u32 = 16780717; +pub const SINH_THHA: u32 = 16780718; +pub const SINH_DHA: u32 = 16780719; +pub const SINH_DHHA: u32 = 16780720; +pub const SINH_NA: u32 = 16780721; +pub const SINH_NDHA: u32 = 16780723; +pub const SINH_PA: u32 = 16780724; +pub const SINH_PHA: u32 = 16780725; +pub const SINH_BA: u32 = 16780726; +pub const SINH_BHA: u32 = 16780727; +pub const SINH_MA: u32 = 16780728; +pub const SINH_MBA: u32 = 16780729; +pub const SINH_YA: u32 = 16780730; +pub const SINH_RA: u32 = 16780731; +pub const SINH_LA: u32 = 16780733; +pub const SINH_VA: u32 = 16780736; +pub const SINH_SHA: u32 = 16780737; +pub const SINH_SSHA: u32 = 16780738; +pub const SINH_SA: u32 = 16780739; +pub const SINH_HA: u32 = 16780740; +pub const SINH_LLA: u32 = 16780741; +pub const SINH_FA: u32 = 16780742; +pub const SINH_AL: u32 = 16780746; +pub const SINH_AA2: u32 = 16780751; +pub const SINH_AE2: u32 = 16780752; +pub const SINH_AEE2: u32 = 16780753; +pub const SINH_I2: u32 = 16780754; +pub const SINH_II2: u32 = 16780755; +pub const SINH_U2: u32 = 16780756; +pub const SINH_UU2: u32 = 16780758; +pub const SINH_RU2: u32 = 16780760; +pub const SINH_E2: u32 = 16780761; +pub const SINH_EE2: u32 = 16780762; +pub const SINH_AI2: u32 = 16780763; +pub const SINH_O2: u32 = 16780764; +pub const SINH_OO2: u32 = 16780765; +pub const SINH_AU2: u32 = 16780766; +pub const SINH_LU2: u32 = 16780767; +pub const SINH_RUU2: u32 = 16780786; +pub const SINH_LUU2: u32 = 16780787; +pub const SINH_KUNDDALIYA: u32 = 16780788; diff --git a/src/msg_listener.rs b/src/msg_listener.rs index 7bc5407..a660a43 100644 --- a/src/msg_listener.rs +++ b/src/msg_listener.rs @@ -50,7 +50,7 @@ pub async fn listener_task>( drop(sender.send(buf)); // go back to ms word clippy - // we can unwrap here because if the channel is closed then something's not right + // we can unwrap here BECAUSE if the channel is closed then something's not right if let Err(e) = result_recv.recv().await.unwrap() { stream.write_all(format!("{}", e).as_bytes()).await?; } else { @@ -68,7 +68,7 @@ pub async fn on_recv( let res = { data.parse::() }; if let Ok(ref a) = res { - a.eval(manager, conn).await?; // Don't send these errors over the channel, because they're + a.eval(manager, conn).await?; // Don't send these errors over the channel, BECAUSE they're // xcrab errors, not msg errors } diff --git a/src/x11/client.rs b/src/x11/client.rs index 7d937ad..7aabca3 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -626,7 +626,7 @@ impl XcrabWindowManager { pub fn may_not_exist(res: breadx::Result) -> breadx::Result { match res { - // if its a `Window` error, that means it happened because + // if its a `Window` error, that means it happened BECAUSE // a window failed to exist, and we want to allow those Err(BreadError::XProtocol { error_code: ErrorCode(3), @@ -834,7 +834,7 @@ impl FramedWindow { async fn frame(conn: &mut Dpy, win: Window) -> Result { let root = conn.default_root(); - // here, we cant use `may_not_exist` because we need the geometry + // here, we cant use `may_not_exist` BECAUSE we need the geometry let geometry = win.geometry_immediate_async(conn).await?; let frame = conn -- 2.37.1 From f68559f233e549d4191d454e3248db0cd7346337 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Fri, 29 Jul 2022 11:32:07 -0500 Subject: [PATCH 07/13] add a little side note --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index bc69e36..11f3a18 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,16 @@ A window manager written in [Rust](https://rust-lang.org). ## Contributing Please contribute, we don't know what the fuck we are doing. How we even got to this point is beyond us. + +### A small side note about the config file and keybinds + +If you wish to set a keybind, you must use a 32-bit unsigned integer value. +These values are pre-defined, and can be found in the `keysymdef.rs` file. +The file is an automatically generated binding from the `keysymdef.h` file +(which can be found at `/usr/include/X11`). Refer to both of these files if +you are having trouble with keybinds. Please note, however, that it is +not a direct binding - the constant names have been trimmed (the prefix `XK_`) +removed, and have been renamed to follow rust constant naming conventions. Some +keysyms (mostly greek ones) have been outright removed, due to me being too lazy +to bother with renaming them all in order to not have conflicts. +> `hungl was here` \ No newline at end of file -- 2.37.1 From 3ef4a2c9fc475e64030d1bfdae5f9032b00d3aad Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Sun, 31 Jul 2022 13:46:21 -0500 Subject: [PATCH 08/13] remove most of the idiotic stuff I did before (still doesn't work) --- Cargo.lock | 65 +- Cargo.toml | 1 + README.md | 15 +- src/config.rs | 2 +- src/keysymdef.rs | 1458 ------------------------------------------- src/main.rs | 91 ++- src/msg_listener.rs | 4 +- src/x11/client.rs | 4 +- 8 files changed, 102 insertions(+), 1538 deletions(-) delete mode 100644 src/keysymdef.rs diff --git a/Cargo.lock b/Cargo.lock index 0771a76..27ff78e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,9 +40,9 @@ dependencies = [ [[package]] name = "async-task" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "atomic-waker" @@ -99,15 +99,15 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.9.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" +checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" [[package]] name = "cache-padded" @@ -129,9 +129,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -144,15 +144,15 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] @@ -290,9 +290,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" [[package]] name = "parking" @@ -344,9 +344,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" dependencies = [ "unicode-ident", ] @@ -362,9 +362,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] @@ -377,18 +377,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.137" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" dependencies = [ "proc-macro2", "quote", @@ -406,9 +406,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "slotmap" @@ -421,9 +424,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" [[package]] name = "socket2" @@ -463,10 +466,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" dependencies = [ + "autocfg", "bytes", "libc", "memchr", @@ -503,9 +507,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" [[package]] name = "version_check" @@ -604,6 +608,7 @@ name = "xcrab" version = "0.1.0" dependencies = [ "breadx", + "gluten-keyboard", "lazy_static", "serde", "slotmap", diff --git a/Cargo.toml b/Cargo.toml index 16f2527..3329ccb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ toml = "0.5.9" serde = { version = "1.0.137", features = ["derive"]} lazy_static = "1.4.0" slotmap = "1.0.6" +gluten-keyboard = "0.1.2" [[bin]] name = "xcrab-msg" diff --git a/README.md b/README.md index 11f3a18..190a64e 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,4 @@ A window manager written in [Rust](https://rust-lang.org). ## Contributing -Please contribute, we don't know what the fuck we are doing. How we even got to this point is beyond us. - -### A small side note about the config file and keybinds - -If you wish to set a keybind, you must use a 32-bit unsigned integer value. -These values are pre-defined, and can be found in the `keysymdef.rs` file. -The file is an automatically generated binding from the `keysymdef.h` file -(which can be found at `/usr/include/X11`). Refer to both of these files if -you are having trouble with keybinds. Please note, however, that it is -not a direct binding - the constant names have been trimmed (the prefix `XK_`) -removed, and have been renamed to follow rust constant naming conventions. Some -keysyms (mostly greek ones) have been outright removed, due to me being too lazy -to bother with renaming them all in order to not have conflicts. -> `hungl was here` \ No newline at end of file +Please contribute, we don't know what the fuck we are doing. How we even got to this point is beyond us. \ No newline at end of file diff --git a/src/config.rs b/src/config.rs index 06ed9de..b8a63df 100644 --- a/src/config.rs +++ b/src/config.rs @@ -159,7 +159,7 @@ impl<'de> Visitor<'de> for KeybindVisitor { 'C' => mask.set_control(true), 'S' => mask.set_shift(true), 'A' => mask.set_mod1(true), // alt key - 'W' => mask.set_mod4(true), // super key, 'w' for windows BECAUSE S is taken + 'W' => mask.set_mod4(true), // super key, 'w' for windows because S is taken _ => return Err(E::custom(format!("no such modifier: {}", c))), }; } diff --git a/src/keysymdef.rs b/src/keysymdef.rs deleted file mode 100644 index cc96c75..0000000 --- a/src/keysymdef.rs +++ /dev/null @@ -1,1458 +0,0 @@ -/* automatically generated by rust-bindgen 0.60.1 */ - -// this file has been changed from the default keysymdef.h file (which you can find at /usr/include/X11). -// some keysyms have been deleted, and others have been changed. -// however the order of the keysyms is the same as the header file. -// if you are unsure of which key a keysym may refer to, please refer to the C header file. -// moreover, it is possible that xcrab doesn't support the keysym you are looking for at all. -pub const VOID_SYMBOL: u32 = 16777215; -pub const BACK_SPACE: u32 = 65288; -pub const TAB: u32 = 65289; -pub const LINEFEED: u32 = 65290; -pub const CLEAR: u32 = 65291; -pub const RETURN: u32 = 65293; -pub const PAUSE: u32 = 65299; -pub const SCROLL_LOCK: u32 = 65300; -pub const SYS_REQ: u32 = 65301; -pub const ESCAPE: u32 = 65307; -pub const DELETE: u32 = 65535; -pub const MULTI_KEY: u32 = 65312; -pub const CODEINPUT: u32 = 65335; -pub const SINGLE_CANDIDATE: u32 = 65340; -pub const MULTIPLE_CANDIDATE: u32 = 65341; -pub const PREVIOUS_CANDIDATE: u32 = 65342; -pub const KANJI: u32 = 65313; -pub const MUHENKAN: u32 = 65314; -pub const HENKAN_MODE: u32 = 65315; -pub const HENKAN: u32 = 65315; -pub const ROMAJI: u32 = 65316; -pub const HIRAGANA: u32 = 65317; -pub const KATAKANA: u32 = 65318; -pub const HIRAGANA_KATAKANA: u32 = 65319; -pub const ZENKAKU: u32 = 65320; -pub const HANKAKU: u32 = 65321; -pub const ZENKAKU_HANKAKU: u32 = 65322; -pub const TOUROKU: u32 = 65323; -pub const MASSYO: u32 = 65324; -pub const KANA_LOCK: u32 = 65325; -pub const KANA_SHIFT: u32 = 65326; -pub const EISU_SHIFT: u32 = 65327; -pub const EISU_TOGGLE: u32 = 65328; -pub const KANJI_BANGOU: u32 = 65335; -pub const ZEN_KOHO: u32 = 65341; -pub const MAE_KOHO: u32 = 65342; -pub const HOME: u32 = 65360; -pub const LEFT: u32 = 65361; -pub const UP: u32 = 65362; -pub const RIGHT: u32 = 65363; -pub const DOWN: u32 = 65364; -pub const PRIOR: u32 = 65365; -pub const PAGE_UP: u32 = 65365; -pub const NEXT: u32 = 65366; -pub const PAGE_DOWN: u32 = 65366; -pub const END: u32 = 65367; -pub const BEGIN: u32 = 65368; -pub const SELECT: u32 = 65376; -pub const PRINT: u32 = 65377; -pub const EXECUTE: u32 = 65378; -pub const INSERT: u32 = 65379; -pub const UNDO: u32 = 65381; -pub const REDO: u32 = 65382; -pub const MENU: u32 = 65383; -pub const FIND: u32 = 65384; -pub const CANCEL: u32 = 65385; -pub const HELP: u32 = 65386; -pub const BREAK: u32 = 65387; -pub const MODE_SWITCH: u32 = 65406; -pub const SCRIPT_SWITCH: u32 = 65406; -pub const NUM_LOCK: u32 = 65407; -pub const KP_SPACE: u32 = 65408; -pub const KP_TAB: u32 = 65417; -pub const KP_ENTER: u32 = 65421; -pub const KP_F1: u32 = 65425; -pub const KP_F2: u32 = 65426; -pub const KP_F3: u32 = 65427; -pub const KP_F4: u32 = 65428; -pub const KP_HOME: u32 = 65429; -pub const KP_LEFT: u32 = 65430; -pub const KP_UP: u32 = 65431; -pub const KP_RIGHT: u32 = 65432; -pub const KP_DOWN: u32 = 65433; -pub const KP_PRIOR: u32 = 65434; -pub const KP_PAGE_UP: u32 = 65434; -pub const KP_NEXT: u32 = 65435; -pub const KP_PAGE_DOWN: u32 = 65435; -pub const KP_END: u32 = 65436; -pub const KP_BEGIN: u32 = 65437; -pub const KP_INSERT: u32 = 65438; -pub const KP_DELETE: u32 = 65439; -pub const KP_EQUAL: u32 = 65469; -pub const KP_MULTIPLY: u32 = 65450; -pub const KP_ADD: u32 = 65451; -pub const KP_SEPARATOR: u32 = 65452; -pub const KP_SUBTRACT: u32 = 65453; -pub const KP_DECIMAL: u32 = 65454; -pub const KP_DIVIDE: u32 = 65455; -pub const KP_0: u32 = 65456; -pub const KP_1: u32 = 65457; -pub const KP_2: u32 = 65458; -pub const KP_3: u32 = 65459; -pub const KP_4: u32 = 65460; -pub const KP_5: u32 = 65461; -pub const KP_6: u32 = 65462; -pub const KP_7: u32 = 65463; -pub const KP_8: u32 = 65464; -pub const KP_9: u32 = 65465; -pub const F1: u32 = 65470; -pub const F2: u32 = 65471; -pub const F3: u32 = 65472; -pub const F4: u32 = 65473; -pub const F5: u32 = 65474; -pub const F6: u32 = 65475; -pub const F7: u32 = 65476; -pub const F8: u32 = 65477; -pub const F9: u32 = 65478; -pub const F10: u32 = 65479; -pub const F11: u32 = 65480; -pub const L1: u32 = 65480; -pub const F12: u32 = 65481; -pub const L2: u32 = 65481; -pub const F13: u32 = 65482; -pub const L3: u32 = 65482; -pub const F14: u32 = 65483; -pub const L4: u32 = 65483; -pub const F15: u32 = 65484; -pub const L5: u32 = 65484; -pub const F16: u32 = 65485; -pub const L6: u32 = 65485; -pub const F17: u32 = 65486; -pub const L7: u32 = 65486; -pub const F18: u32 = 65487; -pub const L8: u32 = 65487; -pub const F19: u32 = 65488; -pub const L9: u32 = 65488; -pub const F20: u32 = 65489; -pub const L10: u32 = 65489; -pub const F21: u32 = 65490; -pub const R1: u32 = 65490; -pub const F22: u32 = 65491; -pub const R2: u32 = 65491; -pub const F23: u32 = 65492; -pub const R3: u32 = 65492; -pub const F24: u32 = 65493; -pub const R4: u32 = 65493; -pub const F25: u32 = 65494; -pub const R5: u32 = 65494; -pub const F26: u32 = 65495; -pub const R6: u32 = 65495; -pub const F27: u32 = 65496; -pub const R7: u32 = 65496; -pub const F28: u32 = 65497; -pub const R8: u32 = 65497; -pub const F29: u32 = 65498; -pub const R9: u32 = 65498; -pub const F30: u32 = 65499; -pub const R10: u32 = 65499; -pub const F31: u32 = 65500; -pub const R11: u32 = 65500; -pub const F32: u32 = 65501; -pub const R12: u32 = 65501; -pub const F33: u32 = 65502; -pub const R13: u32 = 65502; -pub const F34: u32 = 65503; -pub const R14: u32 = 65503; -pub const F35: u32 = 65504; -pub const R15: u32 = 65504; -pub const SHIFT_L: u32 = 65505; -pub const SHIFT_R: u32 = 65506; -pub const CONTROL_L: u32 = 65507; -pub const CONTROL_R: u32 = 65508; -pub const CAPS_LOCK: u32 = 65509; -pub const SHIFT_LOCK: u32 = 65510; -pub const META_L: u32 = 65511; -pub const META_R: u32 = 65512; -pub const ALT_L: u32 = 65513; -pub const ALT_R: u32 = 65514; -pub const SUPER_L: u32 = 65515; -pub const SUPER_R: u32 = 65516; -pub const HYPER_L: u32 = 65517; -pub const HYPER_R: u32 = 65518; -pub const ISO_LOCK: u32 = 65025; -pub const ISO_LEVEL2_LATCH: u32 = 65026; -pub const ISO_LEVEL3_SHIFT: u32 = 65027; -pub const ISO_LEVEL3_LATCH: u32 = 65028; -pub const ISO_LEVEL3_LOCK: u32 = 65029; -pub const ISO_LEVEL5_SHIFT: u32 = 65041; -pub const ISO_LEVEL5_LATCH: u32 = 65042; -pub const ISO_LEVEL5_LOCK: u32 = 65043; -pub const ISO_GROUP_SHIFT: u32 = 65406; -pub const ISO_GROUP_LATCH: u32 = 65030; -pub const ISO_GROUP_LOCK: u32 = 65031; -pub const ISO_NEXT_GROUP: u32 = 65032; -pub const ISO_NEXT_GROUP_LOCK: u32 = 65033; -pub const ISO_PREV_GROUP: u32 = 65034; -pub const ISO_PREV_GROUP_LOCK: u32 = 65035; -pub const ISO_FIRST_GROUP: u32 = 65036; -pub const ISO_FIRST_GROUP_LOCK: u32 = 65037; -pub const ISO_LAST_GROUP: u32 = 65038; -pub const ISO_LAST_GROUP_LOCK: u32 = 65039; -pub const ISO_LEFT_TAB: u32 = 65056; -pub const ISO_MOVE_LINE_UP: u32 = 65057; -pub const ISO_MOVE_LINE_DOWN: u32 = 65058; -pub const ISO_PARTIAL_LINE_UP: u32 = 65059; -pub const ISO_PARTIAL_LINE_DOWN: u32 = 65060; -pub const ISO_PARTIAL_SPACE_LEFT: u32 = 65061; -pub const ISO_PARTIAL_SPACE_RIGHT: u32 = 65062; -pub const ISO_SET_MARGIN_LEFT: u32 = 65063; -pub const ISO_SET_MARGIN_RIGHT: u32 = 65064; -pub const ISO_RELEASE_MARGIN_LEFT: u32 = 65065; -pub const ISO_RELEASE_MARGIN_RIGHT: u32 = 65066; -pub const ISO_RELEASE_BOTH_MARGINS: u32 = 65067; -pub const ISO_FAST_CURSOR_LEFT: u32 = 65068; -pub const ISO_FAST_CURSOR_RIGHT: u32 = 65069; -pub const ISO_FAST_CURSOR_UP: u32 = 65070; -pub const ISO_FAST_CURSOR_DOWN: u32 = 65071; -pub const ISO_CONTINUOUS_UNDERLINE: u32 = 65072; -pub const ISO_DISCONTINUOUS_UNDERLINE: u32 = 65073; -pub const ISO_EMPHASIZE: u32 = 65074; -pub const ISO_CENTER_OBJECT: u32 = 65075; -pub const ISO_ENTER: u32 = 65076; -pub const DEAD_GRAVE: u32 = 65104; -pub const DEAD_ACUTE: u32 = 65105; -pub const DEAD_CIRCUMFLEX: u32 = 65106; -pub const DEAD_TILDE: u32 = 65107; -pub const DEAD_PERISPOMENI: u32 = 65107; -pub const DEAD_MACRON: u32 = 65108; -pub const DEAD_BREVE: u32 = 65109; -pub const DEAD_ABOVEDOT: u32 = 65110; -pub const DEAD_DIAERESIS: u32 = 65111; -pub const DEAD_ABOVERING: u32 = 65112; -pub const DEAD_DOUBLEACUTE: u32 = 65113; -pub const DEAD_CARON: u32 = 65114; -pub const DEAD_CEDILLA: u32 = 65115; -pub const DEAD_OGONEK: u32 = 65116; -pub const DEAD_IOTA: u32 = 65117; -pub const DEAD_VOICED_SOUND: u32 = 65118; -pub const DEAD_SEMIVOICED_SOUND: u32 = 65119; -pub const DEAD_BELOWDOT: u32 = 65120; -pub const DEAD_HOOK: u32 = 65121; -pub const DEAD_HORN: u32 = 65122; -pub const DEAD_STROKE: u32 = 65123; -pub const DEAD_ABOVECOMMA: u32 = 65124; -pub const DEAD_PSILI: u32 = 65124; -pub const DEAD_ABOVEREVERSEDCOMMA: u32 = 65125; -pub const DEAD_DASIA: u32 = 65125; -pub const DEAD_DOUBLEGRAVE: u32 = 65126; -pub const DEAD_BELOWRING: u32 = 65127; -pub const DEAD_BELOWMACRON: u32 = 65128; -pub const DEAD_BELOWCIRCUMFLEX: u32 = 65129; -pub const DEAD_BELOWTILDE: u32 = 65130; -pub const DEAD_BELOWBREVE: u32 = 65131; -pub const DEAD_BELOWDIAERESIS: u32 = 65132; -pub const DEAD_INVERTEDBREVE: u32 = 65133; -pub const DEAD_BELOWCOMMA: u32 = 65134; -pub const DEAD_CURRENCY: u32 = 65135; -pub const DEAD_LOWLINE: u32 = 65168; -pub const DEAD_ABOVEVERTICALLINE: u32 = 65169; -pub const DEAD_BELOWVERTICALLINE: u32 = 65170; -pub const DEAD_LONGSOLIDUSOVERLAY: u32 = 65171; -pub const DEAD_SMALL_SCHWA: u32 = 65162; -pub const DEAD_CAPITAL_SCHWA: u32 = 65163; -pub const DEAD_GREEK: u32 = 65164; -pub const FIRST_VIRTUAL_SCREEN: u32 = 65232; -pub const PREV_VIRTUAL_SCREEN: u32 = 65233; -pub const NEXT_VIRTUAL_SCREEN: u32 = 65234; -pub const LAST_VIRTUAL_SCREEN: u32 = 65236; -pub const TERMINATE_SERVER: u32 = 65237; -pub const ACCESS_X_ENABLE: u32 = 65136; -pub const ACCESS_X_FEEDBACK_ENABLE: u32 = 65137; -pub const REPEAT_KEYS_ENABLE: u32 = 65138; -pub const SLOW_KEYS_ENABLE: u32 = 65139; -pub const BOUNCE_KEYS_ENABLE: u32 = 65140; -pub const STICKY_KEYS_ENABLE: u32 = 65141; -pub const MOUSE_KEYS_ENABLE: u32 = 65142; -pub const MOUSE_KEYS_ACCEL_ENABLE: u32 = 65143; -pub const OVERLAY1_ENABLE: u32 = 65144; -pub const OVERLAY2_ENABLE: u32 = 65145; -pub const AUDIBLE_BELL_ENABLE: u32 = 65146; -pub const POINTER_LEFT: u32 = 65248; -pub const POINTER_RIGHT: u32 = 65249; -pub const POINTER_UP: u32 = 65250; -pub const POINTER_DOWN: u32 = 65251; -pub const POINTER_UP_LEFT: u32 = 65252; -pub const POINTER_UP_RIGHT: u32 = 65253; -pub const POINTER_DOWN_LEFT: u32 = 65254; -pub const POINTER_DOWN_RIGHT: u32 = 65255; -pub const POINTER_BUTTON_DFLT: u32 = 65256; -pub const POINTER_BUTTON1: u32 = 65257; -pub const POINTER_BUTTON2: u32 = 65258; -pub const POINTER_BUTTON3: u32 = 65259; -pub const POINTER_BUTTON4: u32 = 65260; -pub const POINTER_BUTTON5: u32 = 65261; -pub const POINTER_DBL_CLICK_DFLT: u32 = 65262; -pub const POINTER_DBL_CLICK1: u32 = 65263; -pub const POINTER_DBL_CLICK2: u32 = 65264; -pub const POINTER_DBL_CLICK3: u32 = 65265; -pub const POINTER_DBL_CLICK4: u32 = 65266; -pub const POINTER_DBL_CLICK5: u32 = 65267; -pub const POINTER_DRAG_DFLT: u32 = 65268; -pub const POINTER_DRAG1: u32 = 65269; -pub const POINTER_DRAG2: u32 = 65270; -pub const POINTER_DRAG3: u32 = 65271; -pub const POINTER_DRAG4: u32 = 65272; -pub const POINTER_DRAG5: u32 = 65277; -pub const POINTER_ENABLE_KEYS: u32 = 65273; -pub const POINTER_ACCELERATE: u32 = 65274; -pub const POINTER_DFLT_BTN_NEXT: u32 = 65275; -pub const POINTER_DFLT_BTN_PREV: u32 = 65276; -pub const SPACE: u32 = 32; -pub const EXCLAM: u32 = 33; -pub const QUOTEDBL: u32 = 34; -pub const NUMBERSIGN: u32 = 35; -pub const DOLLAR: u32 = 36; -pub const PERCENT: u32 = 37; -pub const AMPERSAND: u32 = 38; -pub const APOSTROPHE: u32 = 39; -pub const QUOTERIGHT: u32 = 39; -pub const PARENLEFT: u32 = 40; -pub const PARENRIGHT: u32 = 41; -pub const ASTERISK: u32 = 42; -pub const PLUS: u32 = 43; -pub const COMMA: u32 = 44; -pub const MINUS: u32 = 45; -pub const PERIOD: u32 = 46; -pub const SLASH: u32 = 47; -pub const N_0: u32 = 48; -pub const N_1: u32 = 49; -pub const N_2: u32 = 50; -pub const N_3: u32 = 51; -pub const N_4: u32 = 52; -pub const N_5: u32 = 53; -pub const N_6: u32 = 54; -pub const N_7: u32 = 55; -pub const N_8: u32 = 56; -pub const N_9: u32 = 57; -pub const COLON: u32 = 58; -pub const SEMICOLON: u32 = 59; -pub const LESS: u32 = 60; -pub const EQUAL: u32 = 61; -pub const GREATER: u32 = 62; -pub const QUESTION: u32 = 63; -pub const AT: u32 = 64; -pub const UPPER_A: u32 = 65; -pub const UPPER_B: u32 = 66; -pub const UPPER_C: u32 = 67; -pub const UPPER_D: u32 = 68; -pub const UPPER_E: u32 = 69; -pub const UPPER_F: u32 = 70; -pub const UPPER_G: u32 = 71; -pub const UPPER_H: u32 = 72; -pub const UPPER_I: u32 = 73; -pub const UPPER_J: u32 = 74; -pub const UPPER_K: u32 = 75; -pub const UPPER_L: u32 = 76; -pub const UPPER_M: u32 = 77; -pub const UPPER_N: u32 = 78; -pub const UPPER_O: u32 = 79; -pub const UPPER_P: u32 = 80; -pub const UPPER_Q: u32 = 81; -pub const UPPER_R: u32 = 82; -pub const UPPER_S: u32 = 83; -pub const UPPER_T: u32 = 84; -pub const UPPER_U: u32 = 85; -pub const UPPER_V: u32 = 86; -pub const UPPER_W: u32 = 87; -pub const UPPER_X: u32 = 88; -pub const UPPER_Y: u32 = 89; -pub const UPPER_Z: u32 = 90; -pub const BRACKETLEFT: u32 = 91; -pub const BACKSLASH: u32 = 92; -pub const BRACKETRIGHT: u32 = 93; -pub const ASCIICIRCUM: u32 = 94; -pub const UNDERSCORE: u32 = 95; -pub const GRAVE: u32 = 96; -pub const QUOTELEFT: u32 = 96; -pub const LOWER_A: u32 = 97; -pub const LOWER_B: u32 = 98; -pub const LOWER_C: u32 = 99; -pub const LOWER_D: u32 = 100; -pub const LOWER_E: u32 = 101; -pub const LOWER_F: u32 = 102; -pub const LOWER_G: u32 = 103; -pub const LOWER_H: u32 = 104; -pub const LOWER_I: u32 = 105; -pub const LOWER_J: u32 = 106; -pub const LOWER_K: u32 = 107; -pub const LOWER_L: u32 = 108; -pub const LOWER_M: u32 = 109; -pub const LOWER_N: u32 = 110; -pub const LOWER_O: u32 = 111; -pub const LOWER_P: u32 = 112; -pub const LOWER_Q: u32 = 113; -pub const LOWER_R: u32 = 114; -pub const LOWER_S: u32 = 115; -pub const LOWER_T: u32 = 116; -pub const LOWER_U: u32 = 117; -pub const LOWER_V: u32 = 118; -pub const LOWER_W: u32 = 119; -pub const LOWER_X: u32 = 120; -pub const LOWER_Y: u32 = 121; -pub const LOWER_Z: u32 = 122; -pub const BRACELEFT: u32 = 123; -pub const BAR: u32 = 124; -pub const BRACERIGHT: u32 = 125; -pub const ASCIITILDE: u32 = 126; -pub const NOBREAKSPACE: u32 = 160; -pub const EXCLAMDOWN: u32 = 161; -pub const CENT: u32 = 162; -pub const STERLING: u32 = 163; -pub const CURRENCY: u32 = 164; -pub const YEN: u32 = 165; -pub const BROKENBAR: u32 = 166; -pub const SECTION: u32 = 167; -pub const DIAERESIS: u32 = 168; -pub const COPYRIGHT: u32 = 169; -pub const ORDFEMININE: u32 = 170; -pub const GUILLEMOTLEFT: u32 = 171; -pub const NOTSIGN: u32 = 172; -pub const HYPHEN: u32 = 173; -pub const REGISTERED: u32 = 174; -pub const MACRON: u32 = 175; -pub const DEGREE: u32 = 176; -pub const PLUSMINUS: u32 = 177; -pub const TWOSUPERIOR: u32 = 178; -pub const THREESUPERIOR: u32 = 179; -pub const ACUTE: u32 = 180; -pub const MU: u32 = 181; -pub const PARAGRAPH: u32 = 182; -pub const PERIODCENTERED: u32 = 183; -pub const CEDILLA: u32 = 184; -pub const ONESUPERIOR: u32 = 185; -pub const MASCULINE: u32 = 186; -pub const GUILLEMOTRIGHT: u32 = 187; -pub const ONEQUARTER: u32 = 188; -pub const ONEHALF: u32 = 189; -pub const THREEQUARTERS: u32 = 190; -pub const QUESTIONDOWN: u32 = 191; -pub const MULTIPLY: u32 = 215; -pub const OVERLINE: u32 = 1150; -pub const KANA_FULLSTOP: u32 = 1185; -pub const KANA_OPENINGBRACKET: u32 = 1186; -pub const KANA_CLOSINGBRACKET: u32 = 1187; -pub const KANA_COMMA: u32 = 1188; -pub const KANA_CONJUNCTIVE: u32 = 1189; -pub const KANA_MIDDLEDOT: u32 = 1189; -pub const KANA_WO: u32 = 1190; -pub const KANA_LOWER_A: u32 = 1191; -pub const KANA_LOWER_I: u32 = 1192; -pub const KANA_LOWER_U: u32 = 1193; -pub const KANA_LOWER_E: u32 = 1194; -pub const KANA_LOWER_O: u32 = 1195; -pub const KANA_LOWER_YA: u32 = 1196; -pub const KANA_LOWER_YU: u32 = 1197; -pub const KANA_LOWER_YO: u32 = 1198; -pub const KANA_LOWER_TSU: u32 = 1199; -pub const KANA_LOWER_TU: u32 = 1199; -pub const PROLONGEDSOUND: u32 = 1200; -pub const KANA_UPPER_A: u32 = 1201; -pub const KANA_UPPER_I: u32 = 1202; -pub const KANA_UPPER_U: u32 = 1203; -pub const KANA_UPPER_E: u32 = 1204; -pub const KANA_UPPER_O: u32 = 1205; -pub const KANA_UPPER_KA: u32 = 1206; -pub const KANA_UPPER_KI: u32 = 1207; -pub const KANA_UPPER_KU: u32 = 1208; -pub const KANA_UPPER_KE: u32 = 1209; -pub const KANA_UPPER_KO: u32 = 1210; -pub const KANA_UPPER_SA: u32 = 1211; -pub const KANA_UPPER_SHI: u32 = 1212; -pub const KANA_UPPER_SU: u32 = 1213; -pub const KANA_UPPER_SE: u32 = 1214; -pub const KANA_UPPER_SO: u32 = 1215; -pub const KANA_UPPER_TA: u32 = 1216; -pub const KANA_UPPER_CHI: u32 = 1217; -pub const KANA_UPPER_TI: u32 = 1217; -pub const KANA_UPPER_TSU: u32 = 1218; -pub const KANA_UPPER_TU: u32 = 1218; -pub const KANA_UPPER_TE: u32 = 1219; -pub const KANA_UPPER_TO: u32 = 1220; -pub const KANA_UPPER_NA: u32 = 1221; -pub const KANA_UPPER_NI: u32 = 1222; -pub const KANA_UPPER_NU: u32 = 1223; -pub const KANA_UPPER_NE: u32 = 1224; -pub const KANA_UPPER_NO: u32 = 1225; -pub const KANA_UPPER_HA: u32 = 1226; -pub const KANA_UPPER_HI: u32 = 1227; -pub const KANA_UPPER_FU: u32 = 1228; -pub const KANA_UPPER_HU: u32 = 1228; -pub const KANA_UPPER_HE: u32 = 1229; -pub const KANA_UPPER_HO: u32 = 1230; -pub const KANA_UPPER_MA: u32 = 1231; -pub const KANA_UPPER_MI: u32 = 1232; -pub const KANA_UPPER_MU: u32 = 1233; -pub const KANA_UPPER_ME: u32 = 1234; -pub const KANA_UPPER_MO: u32 = 1235; -pub const KANA_UPPER_YA: u32 = 1236; -pub const KANA_UPPER_YU: u32 = 1237; -pub const KANA_UPPER_YO: u32 = 1238; -pub const KANA_UPPER_RA: u32 = 1239; -pub const KANA_UPPER_RI: u32 = 1240; -pub const KANA_UPPER_RU: u32 = 1241; -pub const KANA_UPPER_RE: u32 = 1242; -pub const KANA_UPPER_RO: u32 = 1243; -pub const KANA_UPPER_WA: u32 = 1244; -pub const KANA_UPPER_N: u32 = 1245; -pub const VOICED_SOUND: u32 = 1246; -pub const SEMI_VOICED_SOUND: u32 = 1247; -pub const KANA_SWITCH: u32 = 65406; -pub const FARSI_0: u32 = 16778992; -pub const FARSI_1: u32 = 16778993; -pub const FARSI_2: u32 = 16778994; -pub const FARSI_3: u32 = 16778995; -pub const FARSI_4: u32 = 16778996; -pub const FARSI_5: u32 = 16778997; -pub const FARSI_6: u32 = 16778998; -pub const FARSI_7: u32 = 16778999; -pub const FARSI_8: u32 = 16779000; -pub const FARSI_9: u32 = 16779001; -pub const ARABIC_PERCENT: u32 = 16778858; -pub const ARABIC_SUPERSCRIPT_ALEF: u32 = 16778864; -pub const ARABIC_TTEH: u32 = 16778873; -pub const ARABIC_PEH: u32 = 16778878; -pub const ARABIC_TCHEH: u32 = 16778886; -pub const ARABIC_DDAL: u32 = 16778888; -pub const ARABIC_RREH: u32 = 16778897; -pub const ARABIC_COMMA: u32 = 1452; -pub const ARABIC_FULLSTOP: u32 = 16778964; -pub const ARABIC_0: u32 = 16778848; -pub const ARABIC_1: u32 = 16778849; -pub const ARABIC_2: u32 = 16778850; -pub const ARABIC_3: u32 = 16778851; -pub const ARABIC_4: u32 = 16778852; -pub const ARABIC_5: u32 = 16778853; -pub const ARABIC_6: u32 = 16778854; -pub const ARABIC_7: u32 = 16778855; -pub const ARABIC_8: u32 = 16778856; -pub const ARABIC_9: u32 = 16778857; -pub const ARABIC_SEMICOLON: u32 = 1467; -pub const ARABIC_QUESTION_MARK: u32 = 1471; -pub const ARABIC_HAMZA: u32 = 1473; -pub const ARABIC_MADDAONALEF: u32 = 1474; -pub const ARABIC_HAMZAONALEF: u32 = 1475; -pub const ARABIC_HAMZAONWAW: u32 = 1476; -pub const ARABIC_HAMZAUNDERALEF: u32 = 1477; -pub const ARABIC_HAMZAONYEH: u32 = 1478; -pub const ARABIC_ALEF: u32 = 1479; -pub const ARABIC_BEH: u32 = 1480; -pub const ARABIC_TEHMARBUTA: u32 = 1481; -pub const ARABIC_TEH: u32 = 1482; -pub const ARABIC_THEH: u32 = 1483; -pub const ARABIC_JEEM: u32 = 1484; -pub const ARABIC_HAH: u32 = 1485; -pub const ARABIC_KHAH: u32 = 1486; -pub const ARABIC_DAL: u32 = 1487; -pub const ARABIC_THAL: u32 = 1488; -pub const ARABIC_RA: u32 = 1489; -pub const ARABIC_ZAIN: u32 = 1490; -pub const ARABIC_SEEN: u32 = 1491; -pub const ARABIC_SHEEN: u32 = 1492; -pub const ARABIC_SAD: u32 = 1493; -pub const ARABIC_DAD: u32 = 1494; -pub const ARABIC_TAH: u32 = 1495; -pub const ARABIC_ZAH: u32 = 1496; -pub const ARABIC_AIN: u32 = 1497; -pub const ARABIC_GHAIN: u32 = 1498; -pub const ARABIC_TATWEEL: u32 = 1504; -pub const ARABIC_FEH: u32 = 1505; -pub const ARABIC_QAF: u32 = 1506; -pub const ARABIC_KAF: u32 = 1507; -pub const ARABIC_LAM: u32 = 1508; -pub const ARABIC_MEEM: u32 = 1509; -pub const ARABIC_NOON: u32 = 1510; -pub const ARABIC_HA: u32 = 1511; -pub const ARABIC_HEH: u32 = 1511; -pub const ARABIC_WAW: u32 = 1512; -pub const ARABIC_ALEFMAKSURA: u32 = 1513; -pub const ARABIC_YEH: u32 = 1514; -pub const ARABIC_FATHATAN: u32 = 1515; -pub const ARABIC_DAMMATAN: u32 = 1516; -pub const ARABIC_KASRATAN: u32 = 1517; -pub const ARABIC_FATHA: u32 = 1518; -pub const ARABIC_DAMMA: u32 = 1519; -pub const ARABIC_KASRA: u32 = 1520; -pub const ARABIC_SHADDA: u32 = 1521; -pub const ARABIC_SUKUN: u32 = 1522; -pub const ARABIC_MADDA_ABOVE: u32 = 16778835; -pub const ARABIC_HAMZA_ABOVE: u32 = 16778836; -pub const ARABIC_HAMZA_BELOW: u32 = 16778837; -pub const ARABIC_JEH: u32 = 16778904; -pub const ARABIC_VEH: u32 = 16778916; -pub const ARABIC_KEHEH: u32 = 16778921; -pub const ARABIC_GAF: u32 = 16778927; -pub const ARABIC_NOON_GHUNNA: u32 = 16778938; -pub const ARABIC_HEH_DOACHASHMEE: u32 = 16778942; -pub const FARSI_YEH: u32 = 16778956; -pub const ARABIC_FARSI_YEH: u32 = 16778956; -pub const ARABIC_YEH_BAREE: u32 = 16778962; -pub const ARABIC_HEH_GOAL: u32 = 16778945; -pub const ARABIC_SWITCH: u32 = 65406; -pub const NUMEROSIGN: u32 = 1712; -pub const GREEK_IOTADIAERESIS: u32 = 1957; -pub const GREEK_IOTAACCENT: u32 = 1972; -pub const GREEK_FINALSMALLSIGMA: u32 = 2035; -pub const LEFTRADICAL: u32 = 2209; -pub const TOPLEFTRADICAL: u32 = 2210; -pub const HORIZCONNECTOR: u32 = 2211; -pub const TOPINTEGRAL: u32 = 2212; -pub const BOTINTEGRAL: u32 = 2213; -pub const VERTCONNECTOR: u32 = 2214; -pub const TOPLEFTSQBRACKET: u32 = 2215; -pub const BOTLEFTSQBRACKET: u32 = 2216; -pub const TOPRIGHTSQBRACKET: u32 = 2217; -pub const BOTRIGHTSQBRACKET: u32 = 2218; -pub const TOPLEFTPARENS: u32 = 2219; -pub const BOTLEFTPARENS: u32 = 2220; -pub const TOPRIGHTPARENS: u32 = 2221; -pub const BOTRIGHTPARENS: u32 = 2222; -pub const LEFTMIDDLECURLYBRACE: u32 = 2223; -pub const RIGHTMIDDLECURLYBRACE: u32 = 2224; -pub const TOPLEFTSUMMATION: u32 = 2225; -pub const BOTLEFTSUMMATION: u32 = 2226; -pub const TOPVERTSUMMATIONCONNECTOR: u32 = 2227; -pub const BOTVERTSUMMATIONCONNECTOR: u32 = 2228; -pub const TOPRIGHTSUMMATION: u32 = 2229; -pub const BOTRIGHTSUMMATION: u32 = 2230; -pub const RIGHTMIDDLESUMMATION: u32 = 2231; -pub const LESSTHANEQUAL: u32 = 2236; -pub const NOTEQUAL: u32 = 2237; -pub const GREATERTHANEQUAL: u32 = 2238; -pub const INTEGRAL: u32 = 2239; -pub const THEREFORE: u32 = 2240; -pub const VARIATION: u32 = 2241; -pub const INFINITY: u32 = 2242; -pub const NABLA: u32 = 2245; -pub const APPROXIMATE: u32 = 2248; -pub const SIMILAREQUAL: u32 = 2249; -pub const IFONLYIF: u32 = 2253; -pub const IMPLIES: u32 = 2254; -pub const IDENTICAL: u32 = 2255; -pub const RADICAL: u32 = 2262; -pub const INCLUDEDIN: u32 = 2266; -pub const INCLUDES: u32 = 2267; -pub const INTERSECTION: u32 = 2268; -pub const UNION: u32 = 2269; -pub const LOGICALAND: u32 = 2270; -pub const LOGICALOR: u32 = 2271; -pub const PARTIALDERIVATIVE: u32 = 2287; -pub const FUNCTION: u32 = 2294; -pub const LEFTARROW: u32 = 2299; -pub const UPARROW: u32 = 2300; -pub const RIGHTARROW: u32 = 2301; -pub const DOWNARROW: u32 = 2302; -pub const BLANK: u32 = 2527; -pub const SOLIDDIAMOND: u32 = 2528; -pub const CHECKERBOARD: u32 = 2529; -pub const HT: u32 = 2530; -pub const FF: u32 = 2531; -pub const CR: u32 = 2532; -pub const LF: u32 = 2533; -pub const NL: u32 = 2536; -pub const VT: u32 = 2537; -pub const LOWRIGHTCORNER: u32 = 2538; -pub const UPRIGHTCORNER: u32 = 2539; -pub const UPLEFTCORNER: u32 = 2540; -pub const LOWLEFTCORNER: u32 = 2541; -pub const CROSSINGLINES: u32 = 2542; -pub const HORIZLINESCAN1: u32 = 2543; -pub const HORIZLINESCAN3: u32 = 2544; -pub const HORIZLINESCAN5: u32 = 2545; -pub const HORIZLINESCAN7: u32 = 2546; -pub const HORIZLINESCAN9: u32 = 2547; -pub const LEFTT: u32 = 2548; -pub const RIGHTT: u32 = 2549; -pub const BOTT: u32 = 2550; -pub const TOPT: u32 = 2551; -pub const VERTBAR: u32 = 2552; -pub const EMSPACE: u32 = 2721; -pub const ENSPACE: u32 = 2722; -pub const EM3SPACE: u32 = 2723; -pub const EM4SPACE: u32 = 2724; -pub const DIGITSPACE: u32 = 2725; -pub const PUNCTSPACE: u32 = 2726; -pub const THINSPACE: u32 = 2727; -pub const HAIRSPACE: u32 = 2728; -pub const EMDASH: u32 = 2729; -pub const ENDASH: u32 = 2730; -pub const SIGNIFBLANK: u32 = 2732; -pub const ELLIPSIS: u32 = 2734; -pub const DOUBBASELINEDOT: u32 = 2735; -pub const ONETHIRD: u32 = 2736; -pub const TWOTHIRDS: u32 = 2737; -pub const ONEFIFTH: u32 = 2738; -pub const TWOFIFTHS: u32 = 2739; -pub const THREEFIFTHS: u32 = 2740; -pub const FOURFIFTHS: u32 = 2741; -pub const ONESIXTH: u32 = 2742; -pub const FIVESIXTHS: u32 = 2743; -pub const CAREOF: u32 = 2744; -pub const FIGDASH: u32 = 2747; -pub const LEFTANGLEBRACKET: u32 = 2748; -pub const DECIMALPOINT: u32 = 2749; -pub const RIGHTANGLEBRACKET: u32 = 2750; -pub const MARKER: u32 = 2751; -pub const ONEEIGHTH: u32 = 2755; -pub const THREEEIGHTHS: u32 = 2756; -pub const FIVEEIGHTHS: u32 = 2757; -pub const SEVENEIGHTHS: u32 = 2758; -pub const TRADEMARK: u32 = 2761; -pub const SIGNATUREMARK: u32 = 2762; -pub const TRADEMARKINCIRCLE: u32 = 2763; -pub const LEFTOPENTRIANGLE: u32 = 2764; -pub const RIGHTOPENTRIANGLE: u32 = 2765; -pub const EMOPENCIRCLE: u32 = 2766; -pub const EMOPENRECTANGLE: u32 = 2767; -pub const LEFTSINGLEQUOTEMARK: u32 = 2768; -pub const RIGHTSINGLEQUOTEMARK: u32 = 2769; -pub const LEFTDOUBLEQUOTEMARK: u32 = 2770; -pub const RIGHTDOUBLEQUOTEMARK: u32 = 2771; -pub const PRESCRIPTION: u32 = 2772; -pub const PERMILLE: u32 = 2773; -pub const MINUTES: u32 = 2774; -pub const SECONDS: u32 = 2775; -pub const LATINCROSS: u32 = 2777; -pub const HEXAGRAM: u32 = 2778; -pub const FILLEDRECTBULLET: u32 = 2779; -pub const FILLEDLEFTTRIBULLET: u32 = 2780; -pub const FILLEDRIGHTTRIBULLET: u32 = 2781; -pub const EMFILLEDCIRCLE: u32 = 2782; -pub const EMFILLEDRECT: u32 = 2783; -pub const ENOPENCIRCBULLET: u32 = 2784; -pub const ENOPENSQUAREBULLET: u32 = 2785; -pub const OPENRECTBULLET: u32 = 2786; -pub const OPENTRIBULLETUP: u32 = 2787; -pub const OPENTRIBULLETDOWN: u32 = 2788; -pub const OPENSTAR: u32 = 2789; -pub const ENFILLEDCIRCBULLET: u32 = 2790; -pub const ENFILLEDSQBULLET: u32 = 2791; -pub const FILLEDTRIBULLETUP: u32 = 2792; -pub const FILLEDTRIBULLETDOWN: u32 = 2793; -pub const LEFTPOINTER: u32 = 2794; -pub const RIGHTPOINTER: u32 = 2795; -pub const CLUB: u32 = 2796; -pub const DIAMOND: u32 = 2797; -pub const HEART: u32 = 2798; -pub const MALTESECROSS: u32 = 2800; -pub const DAGGER: u32 = 2801; -pub const DOUBLEDAGGER: u32 = 2802; -pub const CHECKMARK: u32 = 2803; -pub const BALLOTCROSS: u32 = 2804; -pub const MUSICALSHARP: u32 = 2805; -pub const MUSICALFLAT: u32 = 2806; -pub const MALESYMBOL: u32 = 2807; -pub const FEMALESYMBOL: u32 = 2808; -pub const TELEPHONE: u32 = 2809; -pub const TELEPHONERECORDER: u32 = 2810; -pub const PHONOGRAPHCOPYRIGHT: u32 = 2811; -pub const CARET: u32 = 2812; -pub const SINGLELOWQUOTEMARK: u32 = 2813; -pub const DOUBLELOWQUOTEMARK: u32 = 2814; -pub const CURSOR: u32 = 2815; -pub const LEFTCARET: u32 = 2979; -pub const RIGHTCARET: u32 = 2982; -pub const DOWNCARET: u32 = 2984; -pub const UPCARET: u32 = 2985; -pub const OVERBAR: u32 = 3008; -pub const DOWNTACK: u32 = 3010; -pub const UPSHOE: u32 = 3011; -pub const DOWNSTILE: u32 = 3012; -pub const UNDERBAR: u32 = 3014; -pub const JOT: u32 = 3018; -pub const QUAD: u32 = 3020; -pub const UPTACK: u32 = 3022; -pub const CIRCLE: u32 = 3023; -pub const UPSTILE: u32 = 3027; -pub const DOWNSHOE: u32 = 3030; -pub const RIGHTSHOE: u32 = 3032; -pub const LEFTSHOE: u32 = 3034; -pub const LEFTTACK: u32 = 3036; -pub const RIGHTTACK: u32 = 3068; -pub const HEBREW_DOUBLELOWLINE: u32 = 3295; -pub const HEBREW_ALEPH: u32 = 3296; -pub const HEBREW_BET: u32 = 3297; -pub const HEBREW_BETH: u32 = 3297; -pub const HEBREW_GIMEL: u32 = 3298; -pub const HEBREW_GIMMEL: u32 = 3298; -pub const HEBREW_DALET: u32 = 3299; -pub const HEBREW_DALETH: u32 = 3299; -pub const HEBREW_HE: u32 = 3300; -pub const HEBREW_WAW: u32 = 3301; -pub const HEBREW_ZAIN: u32 = 3302; -pub const HEBREW_ZAYIN: u32 = 3302; -pub const HEBREW_CHET: u32 = 3303; -pub const HEBREW_HET: u32 = 3303; -pub const HEBREW_TET: u32 = 3304; -pub const HEBREW_TETH: u32 = 3304; -pub const HEBREW_YOD: u32 = 3305; -pub const HEBREW_FINALKAPH: u32 = 3306; -pub const HEBREW_KAPH: u32 = 3307; -pub const HEBREW_LAMED: u32 = 3308; -pub const HEBREW_FINALMEM: u32 = 3309; -pub const HEBREW_MEM: u32 = 3310; -pub const HEBREW_FINALNUN: u32 = 3311; -pub const HEBREW_NUN: u32 = 3312; -pub const HEBREW_SAMECH: u32 = 3313; -pub const HEBREW_SAMEKH: u32 = 3313; -pub const HEBREW_AYIN: u32 = 3314; -pub const HEBREW_FINALPE: u32 = 3315; -pub const HEBREW_PE: u32 = 3316; -pub const HEBREW_FINALZADE: u32 = 3317; -pub const HEBREW_FINALZADI: u32 = 3317; -pub const HEBREW_ZADE: u32 = 3318; -pub const HEBREW_ZADI: u32 = 3318; -pub const HEBREW_QOPH: u32 = 3319; -pub const HEBREW_KUF: u32 = 3319; -pub const HEBREW_RESH: u32 = 3320; -pub const HEBREW_SHIN: u32 = 3321; -pub const HEBREW_TAW: u32 = 3322; -pub const HEBREW_TAF: u32 = 3322; -pub const HEBREW_SWITCH: u32 = 65406; -pub const THAI_KOKAI: u32 = 3489; -pub const THAI_KHOKHAI: u32 = 3490; -pub const THAI_KHOKHUAT: u32 = 3491; -pub const THAI_KHOKHWAI: u32 = 3492; -pub const THAI_KHOKHON: u32 = 3493; -pub const THAI_KHORAKHANG: u32 = 3494; -pub const THAI_NGONGU: u32 = 3495; -pub const THAI_CHOCHAN: u32 = 3496; -pub const THAI_CHOCHING: u32 = 3497; -pub const THAI_CHOCHANG: u32 = 3498; -pub const THAI_SOSO: u32 = 3499; -pub const THAI_CHOCHOE: u32 = 3500; -pub const THAI_YOYING: u32 = 3501; -pub const THAI_DOCHADA: u32 = 3502; -pub const THAI_TOPATAK: u32 = 3503; -pub const THAI_THOTHAN: u32 = 3504; -pub const THAI_THONANGMONTHO: u32 = 3505; -pub const THAI_THOPHUTHAO: u32 = 3506; -pub const THAI_NONEN: u32 = 3507; -pub const THAI_DODEK: u32 = 3508; -pub const THAI_TOTAO: u32 = 3509; -pub const THAI_THOTHUNG: u32 = 3510; -pub const THAI_THOTHAHAN: u32 = 3511; -pub const THAI_THOTHONG: u32 = 3512; -pub const THAI_NONU: u32 = 3513; -pub const THAI_BOBAIMAI: u32 = 3514; -pub const THAI_POPLA: u32 = 3515; -pub const THAI_PHOPHUNG: u32 = 3516; -pub const THAI_FOFA: u32 = 3517; -pub const THAI_PHOPHAN: u32 = 3518; -pub const THAI_FOFAN: u32 = 3519; -pub const THAI_PHOSAMPHAO: u32 = 3520; -pub const THAI_MOMA: u32 = 3521; -pub const THAI_YOYAK: u32 = 3522; -pub const THAI_RORUA: u32 = 3523; -pub const THAI_RU: u32 = 3524; -pub const THAI_LOLING: u32 = 3525; -pub const THAI_LU: u32 = 3526; -pub const THAI_WOWAEN: u32 = 3527; -pub const THAI_SOSALA: u32 = 3528; -pub const THAI_SORUSI: u32 = 3529; -pub const THAI_SOSUA: u32 = 3530; -pub const THAI_HOHIP: u32 = 3531; -pub const THAI_LOCHULA: u32 = 3532; -pub const THAI_OANG: u32 = 3533; -pub const THAI_HONOKHUK: u32 = 3534; -pub const THAI_PAIYANNOI: u32 = 3535; -pub const THAI_SARAA: u32 = 3536; -pub const THAI_MAIHANAKAT: u32 = 3537; -pub const THAI_SARAAA: u32 = 3538; -pub const THAI_SARAAM: u32 = 3539; -pub const THAI_SARAI: u32 = 3540; -pub const THAI_SARAII: u32 = 3541; -pub const THAI_SARAUE: u32 = 3542; -pub const THAI_SARAUEE: u32 = 3543; -pub const THAI_SARAU: u32 = 3544; -pub const THAI_SARAUU: u32 = 3545; -pub const THAI_PHINTHU: u32 = 3546; -pub const THAI_MAIHANAKAT_MAITHO: u32 = 3550; -pub const THAI_BAHT: u32 = 3551; -pub const THAI_SARAE: u32 = 3552; -pub const THAI_SARAAE: u32 = 3553; -pub const THAI_SARAO: u32 = 3554; -pub const THAI_SARAAIMAIMUAN: u32 = 3555; -pub const THAI_SARAAIMAIMALAI: u32 = 3556; -pub const THAI_LAKKHANGYAO: u32 = 3557; -pub const THAI_MAIYAMOK: u32 = 3558; -pub const THAI_MAITAIKHU: u32 = 3559; -pub const THAI_MAIEK: u32 = 3560; -pub const THAI_MAITHO: u32 = 3561; -pub const THAI_MAITRI: u32 = 3562; -pub const THAI_MAICHATTAWA: u32 = 3563; -pub const THAI_THANTHAKHAT: u32 = 3564; -pub const THAI_NIKHAHIT: u32 = 3565; -pub const THAI_LEKSUN: u32 = 3568; -pub const THAI_LEKNUNG: u32 = 3569; -pub const THAI_LEKSONG: u32 = 3570; -pub const THAI_LEKSAM: u32 = 3571; -pub const THAI_LEKSI: u32 = 3572; -pub const THAI_LEKHA: u32 = 3573; -pub const THAI_LEKHOK: u32 = 3574; -pub const THAI_LEKCHET: u32 = 3575; -pub const THAI_LEKPAET: u32 = 3576; -pub const THAI_LEKKAO: u32 = 3577; -pub const HANGUL: u32 = 65329; -pub const HANGUL_START: u32 = 65330; -pub const HANGUL_END: u32 = 65331; -pub const HANGUL_HANJA: u32 = 65332; -pub const HANGUL_JAMO: u32 = 65333; -pub const HANGUL_ROMAJA: u32 = 65334; -pub const HANGUL_CODEINPUT: u32 = 65335; -pub const HANGUL_JEONJA: u32 = 65336; -pub const HANGUL_BANJA: u32 = 65337; -pub const HANGUL_PRE_HANJA: u32 = 65338; -pub const HANGUL_POST_HANJA: u32 = 65339; -pub const HANGUL_SINGLE_CANDIDATE: u32 = 65340; -pub const HANGUL_MULTIPLE_CANDIDATE: u32 = 65341; -pub const HANGUL_PREVIOUS_CANDIDATE: u32 = 65342; -pub const HANGUL_SPECIAL: u32 = 65343; -pub const HANGUL_SWITCH: u32 = 65406; -pub const HANGUL_KIYEOG: u32 = 3745; -pub const HANGUL_SSANG_KIYEOG: u32 = 3746; -pub const HANGUL_KIYEOG_SIOS: u32 = 3747; -pub const HANGUL_NIEUN: u32 = 3748; -pub const HANGUL_NIEUN_JIEUJ: u32 = 3749; -pub const HANGUL_NIEUN_HIEUH: u32 = 3750; -pub const HANGUL_DIKEUD: u32 = 3751; -pub const HANGUL_SSANG_DIKEUD: u32 = 3752; -pub const HANGUL_RIEUL: u32 = 3753; -pub const HANGUL_RIEUL_KIYEOG: u32 = 3754; -pub const HANGUL_RIEUL_MIEUM: u32 = 3755; -pub const HANGUL_RIEUL_PIEUB: u32 = 3756; -pub const HANGUL_RIEUL_SIOS: u32 = 3757; -pub const HANGUL_RIEUL_TIEUT: u32 = 3758; -pub const HANGUL_RIEUL_PHIEUF: u32 = 3759; -pub const HANGUL_RIEUL_HIEUH: u32 = 3760; -pub const HANGUL_MIEUM: u32 = 3761; -pub const HANGUL_PIEUB: u32 = 3762; -pub const HANGUL_SSANG_PIEUB: u32 = 3763; -pub const HANGUL_PIEUB_SIOS: u32 = 3764; -pub const HANGUL_SIOS: u32 = 3765; -pub const HANGUL_SSANG_SIOS: u32 = 3766; -pub const HANGUL_IEUNG: u32 = 3767; -pub const HANGUL_JIEUJ: u32 = 3768; -pub const HANGUL_SSANG_JIEUJ: u32 = 3769; -pub const HANGUL_CIEUC: u32 = 3770; -pub const HANGUL_KHIEUQ: u32 = 3771; -pub const HANGUL_TIEUT: u32 = 3772; -pub const HANGUL_PHIEUF: u32 = 3773; -pub const HANGUL_HIEUH: u32 = 3774; -pub const HANGUL_A: u32 = 3775; -pub const HANGUL_AE: u32 = 3776; -pub const HANGUL_YA: u32 = 3777; -pub const HANGUL_YAE: u32 = 3778; -pub const HANGUL_EO: u32 = 3779; -pub const HANGUL_E: u32 = 3780; -pub const HANGUL_YEO: u32 = 3781; -pub const HANGUL_YE: u32 = 3782; -pub const HANGUL_O: u32 = 3783; -pub const HANGUL_WA: u32 = 3784; -pub const HANGUL_WAE: u32 = 3785; -pub const HANGUL_OE: u32 = 3786; -pub const HANGUL_YO: u32 = 3787; -pub const HANGUL_U: u32 = 3788; -pub const HANGUL_WEO: u32 = 3789; -pub const HANGUL_WE: u32 = 3790; -pub const HANGUL_WI: u32 = 3791; -pub const HANGUL_YU: u32 = 3792; -pub const HANGUL_EU: u32 = 3793; -pub const HANGUL_YI: u32 = 3794; -pub const HANGUL_I: u32 = 3795; -pub const HANGUL_J_KIYEOG: u32 = 3796; -pub const HANGUL_J_SSANG_KIYEOG: u32 = 3797; -pub const HANGUL_J_KIYEOG_SIOS: u32 = 3798; -pub const HANGUL_J_NIEUN: u32 = 3799; -pub const HANGUL_J_NIEUN_JIEUJ: u32 = 3800; -pub const HANGUL_J_NIEUN_HIEUH: u32 = 3801; -pub const HANGUL_J_DIKEUD: u32 = 3802; -pub const HANGUL_J_RIEUL: u32 = 3803; -pub const HANGUL_J_RIEUL_KIYEOG: u32 = 3804; -pub const HANGUL_J_RIEUL_MIEUM: u32 = 3805; -pub const HANGUL_J_RIEUL_PIEUB: u32 = 3806; -pub const HANGUL_J_RIEUL_SIOS: u32 = 3807; -pub const HANGUL_J_RIEUL_TIEUT: u32 = 3808; -pub const HANGUL_J_RIEUL_PHIEUF: u32 = 3809; -pub const HANGUL_J_RIEUL_HIEUH: u32 = 3810; -pub const HANGUL_J_MIEUM: u32 = 3811; -pub const HANGUL_J_PIEUB: u32 = 3812; -pub const HANGUL_J_PIEUB_SIOS: u32 = 3813; -pub const HANGUL_J_SIOS: u32 = 3814; -pub const HANGUL_J_SSANG_SIOS: u32 = 3815; -pub const HANGUL_J_IEUNG: u32 = 3816; -pub const HANGUL_J_JIEUJ: u32 = 3817; -pub const HANGUL_J_CIEUC: u32 = 3818; -pub const HANGUL_J_KHIEUQ: u32 = 3819; -pub const HANGUL_J_TIEUT: u32 = 3820; -pub const HANGUL_J_PHIEUF: u32 = 3821; -pub const HANGUL_J_HIEUH: u32 = 3822; -pub const HANGUL_RIEUL_YEORIN_HIEUH: u32 = 3823; -pub const HANGUL_SUNKYEONGEUM_MIEUM: u32 = 3824; -pub const HANGUL_SUNKYEONGEUM_PIEUB: u32 = 3825; -pub const HANGUL_PAN_SIOS: u32 = 3826; -pub const HANGUL_KKOGJI_DALRIN_IEUNG: u32 = 3827; -pub const HANGUL_SUNKYEONGEUM_PHIEUF: u32 = 3828; -pub const HANGUL_YEORIN_HIEUH: u32 = 3829; -pub const HANGUL_ARAE_A: u32 = 3830; -pub const HANGUL_ARAE_AE: u32 = 3831; -pub const HANGUL_J_PAN_SIOS: u32 = 3832; -pub const HANGUL_J_KKOGJI_DALRIN_IEUNG: u32 = 3833; -pub const HANGUL_J_YEORIN_HIEUH: u32 = 3834; -pub const KOREAN_WON: u32 = 3839; -pub const ARMENIAN_LIGATURE_EW: u32 = 16778631; -pub const ARMENIAN_FULL_STOP: u32 = 16778633; -pub const ARMENIAN_VERJAKET: u32 = 16778633; -pub const ARMENIAN_SEPARATION_MARK: u32 = 16778589; -pub const ARMENIAN_BUT: u32 = 16778589; -pub const ARMENIAN_HYPHEN: u32 = 16778634; -pub const ARMENIAN_YENTAMNA: u32 = 16778634; -pub const ARMENIAN_EXCLAM: u32 = 16778588; -pub const ARMENIAN_AMANAK: u32 = 16778588; -pub const ARMENIAN_ACCENT: u32 = 16778587; -pub const ARMENIAN_SHESHT: u32 = 16778587; -pub const ARMENIAN_QUESTION: u32 = 16778590; -pub const ARMENIAN_PARUYK: u32 = 16778590; -pub const ARMENIAN_APOSTROPHE: u32 = 16778586; -pub const GEORGIAN_AN: u32 = 16781520; -pub const GEORGIAN_BAN: u32 = 16781521; -pub const GEORGIAN_GAN: u32 = 16781522; -pub const GEORGIAN_DON: u32 = 16781523; -pub const GEORGIAN_EN: u32 = 16781524; -pub const GEORGIAN_VIN: u32 = 16781525; -pub const GEORGIAN_ZEN: u32 = 16781526; -pub const GEORGIAN_TAN: u32 = 16781527; -pub const GEORGIAN_IN: u32 = 16781528; -pub const GEORGIAN_KAN: u32 = 16781529; -pub const GEORGIAN_LAS: u32 = 16781530; -pub const GEORGIAN_MAN: u32 = 16781531; -pub const GEORGIAN_NAR: u32 = 16781532; -pub const GEORGIAN_ON: u32 = 16781533; -pub const GEORGIAN_PAR: u32 = 16781534; -pub const GEORGIAN_ZHAR: u32 = 16781535; -pub const GEORGIAN_RAE: u32 = 16781536; -pub const GEORGIAN_SAN: u32 = 16781537; -pub const GEORGIAN_TAR: u32 = 16781538; -pub const GEORGIAN_UN: u32 = 16781539; -pub const GEORGIAN_PHAR: u32 = 16781540; -pub const GEORGIAN_KHAR: u32 = 16781541; -pub const GEORGIAN_GHAN: u32 = 16781542; -pub const GEORGIAN_QAR: u32 = 16781543; -pub const GEORGIAN_SHIN: u32 = 16781544; -pub const GEORGIAN_CHIN: u32 = 16781545; -pub const GEORGIAN_CAN: u32 = 16781546; -pub const GEORGIAN_JIL: u32 = 16781547; -pub const GEORGIAN_CIL: u32 = 16781548; -pub const GEORGIAN_CHAR: u32 = 16781549; -pub const GEORGIAN_XAN: u32 = 16781550; -pub const GEORGIAN_JHAN: u32 = 16781551; -pub const GEORGIAN_HAE: u32 = 16781552; -pub const GEORGIAN_HE: u32 = 16781553; -pub const GEORGIAN_HIE: u32 = 16781554; -pub const GEORGIAN_WE: u32 = 16781555; -pub const GEORGIAN_HAR: u32 = 16781556; -pub const GEORGIAN_HOE: u32 = 16781557; -pub const GEORGIAN_FI: u32 = 16781558; -pub const COMBINING_TILDE: u32 = 16777987; -pub const COMBINING_GRAVE: u32 = 16777984; -pub const COMBINING_ACUTE: u32 = 16777985; -pub const COMBINING_HOOK: u32 = 16777993; -pub const COMBINING_BELOWDOT: u32 = 16778019; -pub const ECU_SIGN: u32 = 16785568; -pub const COLON_SIGN: u32 = 16785569; -pub const CRUZEIRO_SIGN: u32 = 16785570; -pub const FFRANC_SIGN: u32 = 16785571; -pub const LIRA_SIGN: u32 = 16785572; -pub const MILL_SIGN: u32 = 16785573; -pub const NAIRA_SIGN: u32 = 16785574; -pub const PESETA_SIGN: u32 = 16785575; -pub const RUPEE_SIGN: u32 = 16785576; -pub const WON_SIGN: u32 = 16785577; -pub const NEW_SHEQEL_SIGN: u32 = 16785578; -pub const DONG_SIGN: u32 = 16785579; -pub const EURO_SIGN: u32 = 8364; -pub const ZEROSUPERIOR: u32 = 16785520; -pub const FOURSUPERIOR: u32 = 16785524; -pub const FIVESUPERIOR: u32 = 16785525; -pub const SIXSUPERIOR: u32 = 16785526; -pub const SEVENSUPERIOR: u32 = 16785527; -pub const EIGHTSUPERIOR: u32 = 16785528; -pub const NINESUPERIOR: u32 = 16785529; -pub const ZEROSUBSCRIPT: u32 = 16785536; -pub const ONESUBSCRIPT: u32 = 16785537; -pub const TWOSUBSCRIPT: u32 = 16785538; -pub const THREESUBSCRIPT: u32 = 16785539; -pub const FOURSUBSCRIPT: u32 = 16785540; -pub const FIVESUBSCRIPT: u32 = 16785541; -pub const SIXSUBSCRIPT: u32 = 16785542; -pub const SEVENSUBSCRIPT: u32 = 16785543; -pub const EIGHTSUBSCRIPT: u32 = 16785544; -pub const NINESUBSCRIPT: u32 = 16785545; -pub const PARTDIFFERENTIAL: u32 = 16785922; -pub const EMPTYSET: u32 = 16785925; -pub const ELEMENTOF: u32 = 16785928; -pub const NOTELEMENTOF: u32 = 16785929; -pub const CONTAINSAS: u32 = 16785931; -pub const SQUAREROOT: u32 = 16785946; -pub const CUBEROOT: u32 = 16785947; -pub const FOURTHROOT: u32 = 16785948; -pub const DINTEGRAL: u32 = 16785964; -pub const TINTEGRAL: u32 = 16785965; -pub const BECAUSE: u32 = 16785973; -pub const APPROXEQ: u32 = 16785992; -pub const NOTAPPROXEQ: u32 = 16785991; -pub const NOTIDENTICAL: u32 = 16786018; -pub const STRICTEQ: u32 = 16786019; -pub const BRAILLE_DOT_1: u32 = 65521; -pub const BRAILLE_DOT_2: u32 = 65522; -pub const BRAILLE_DOT_3: u32 = 65523; -pub const BRAILLE_DOT_4: u32 = 65524; -pub const BRAILLE_DOT_5: u32 = 65525; -pub const BRAILLE_DOT_6: u32 = 65526; -pub const BRAILLE_DOT_7: u32 = 65527; -pub const BRAILLE_DOT_8: u32 = 65528; -pub const BRAILLE_DOT_9: u32 = 65529; -pub const BRAILLE_DOT_10: u32 = 65530; -pub const BRAILLE_BLANK: u32 = 16787456; -pub const BRAILLE_DOTS_1: u32 = 16787457; -pub const BRAILLE_DOTS_2: u32 = 16787458; -pub const BRAILLE_DOTS_12: u32 = 16787459; -pub const BRAILLE_DOTS_3: u32 = 16787460; -pub const BRAILLE_DOTS_13: u32 = 16787461; -pub const BRAILLE_DOTS_23: u32 = 16787462; -pub const BRAILLE_DOTS_123: u32 = 16787463; -pub const BRAILLE_DOTS_4: u32 = 16787464; -pub const BRAILLE_DOTS_14: u32 = 16787465; -pub const BRAILLE_DOTS_24: u32 = 16787466; -pub const BRAILLE_DOTS_124: u32 = 16787467; -pub const BRAILLE_DOTS_34: u32 = 16787468; -pub const BRAILLE_DOTS_134: u32 = 16787469; -pub const BRAILLE_DOTS_234: u32 = 16787470; -pub const BRAILLE_DOTS_1234: u32 = 16787471; -pub const BRAILLE_DOTS_5: u32 = 16787472; -pub const BRAILLE_DOTS_15: u32 = 16787473; -pub const BRAILLE_DOTS_25: u32 = 16787474; -pub const BRAILLE_DOTS_125: u32 = 16787475; -pub const BRAILLE_DOTS_35: u32 = 16787476; -pub const BRAILLE_DOTS_135: u32 = 16787477; -pub const BRAILLE_DOTS_235: u32 = 16787478; -pub const BRAILLE_DOTS_1235: u32 = 16787479; -pub const BRAILLE_DOTS_45: u32 = 16787480; -pub const BRAILLE_DOTS_145: u32 = 16787481; -pub const BRAILLE_DOTS_245: u32 = 16787482; -pub const BRAILLE_DOTS_1245: u32 = 16787483; -pub const BRAILLE_DOTS_345: u32 = 16787484; -pub const BRAILLE_DOTS_1345: u32 = 16787485; -pub const BRAILLE_DOTS_2345: u32 = 16787486; -pub const BRAILLE_DOTS_12345: u32 = 16787487; -pub const BRAILLE_DOTS_6: u32 = 16787488; -pub const BRAILLE_DOTS_16: u32 = 16787489; -pub const BRAILLE_DOTS_26: u32 = 16787490; -pub const BRAILLE_DOTS_126: u32 = 16787491; -pub const BRAILLE_DOTS_36: u32 = 16787492; -pub const BRAILLE_DOTS_136: u32 = 16787493; -pub const BRAILLE_DOTS_236: u32 = 16787494; -pub const BRAILLE_DOTS_1236: u32 = 16787495; -pub const BRAILLE_DOTS_46: u32 = 16787496; -pub const BRAILLE_DOTS_146: u32 = 16787497; -pub const BRAILLE_DOTS_246: u32 = 16787498; -pub const BRAILLE_DOTS_1246: u32 = 16787499; -pub const BRAILLE_DOTS_346: u32 = 16787500; -pub const BRAILLE_DOTS_1346: u32 = 16787501; -pub const BRAILLE_DOTS_2346: u32 = 16787502; -pub const BRAILLE_DOTS_12346: u32 = 16787503; -pub const BRAILLE_DOTS_56: u32 = 16787504; -pub const BRAILLE_DOTS_156: u32 = 16787505; -pub const BRAILLE_DOTS_256: u32 = 16787506; -pub const BRAILLE_DOTS_1256: u32 = 16787507; -pub const BRAILLE_DOTS_356: u32 = 16787508; -pub const BRAILLE_DOTS_1356: u32 = 16787509; -pub const BRAILLE_DOTS_2356: u32 = 16787510; -pub const BRAILLE_DOTS_12356: u32 = 16787511; -pub const BRAILLE_DOTS_456: u32 = 16787512; -pub const BRAILLE_DOTS_1456: u32 = 16787513; -pub const BRAILLE_DOTS_2456: u32 = 16787514; -pub const BRAILLE_DOTS_12456: u32 = 16787515; -pub const BRAILLE_DOTS_3456: u32 = 16787516; -pub const BRAILLE_DOTS_13456: u32 = 16787517; -pub const BRAILLE_DOTS_23456: u32 = 16787518; -pub const BRAILLE_DOTS_123456: u32 = 16787519; -pub const BRAILLE_DOTS_7: u32 = 16787520; -pub const BRAILLE_DOTS_17: u32 = 16787521; -pub const BRAILLE_DOTS_27: u32 = 16787522; -pub const BRAILLE_DOTS_127: u32 = 16787523; -pub const BRAILLE_DOTS_37: u32 = 16787524; -pub const BRAILLE_DOTS_137: u32 = 16787525; -pub const BRAILLE_DOTS_237: u32 = 16787526; -pub const BRAILLE_DOTS_1237: u32 = 16787527; -pub const BRAILLE_DOTS_47: u32 = 16787528; -pub const BRAILLE_DOTS_147: u32 = 16787529; -pub const BRAILLE_DOTS_247: u32 = 16787530; -pub const BRAILLE_DOTS_1247: u32 = 16787531; -pub const BRAILLE_DOTS_347: u32 = 16787532; -pub const BRAILLE_DOTS_1347: u32 = 16787533; -pub const BRAILLE_DOTS_2347: u32 = 16787534; -pub const BRAILLE_DOTS_12347: u32 = 16787535; -pub const BRAILLE_DOTS_57: u32 = 16787536; -pub const BRAILLE_DOTS_157: u32 = 16787537; -pub const BRAILLE_DOTS_257: u32 = 16787538; -pub const BRAILLE_DOTS_1257: u32 = 16787539; -pub const BRAILLE_DOTS_357: u32 = 16787540; -pub const BRAILLE_DOTS_1357: u32 = 16787541; -pub const BRAILLE_DOTS_2357: u32 = 16787542; -pub const BRAILLE_DOTS_12357: u32 = 16787543; -pub const BRAILLE_DOTS_457: u32 = 16787544; -pub const BRAILLE_DOTS_1457: u32 = 16787545; -pub const BRAILLE_DOTS_2457: u32 = 16787546; -pub const BRAILLE_DOTS_12457: u32 = 16787547; -pub const BRAILLE_DOTS_3457: u32 = 16787548; -pub const BRAILLE_DOTS_13457: u32 = 16787549; -pub const BRAILLE_DOTS_23457: u32 = 16787550; -pub const BRAILLE_DOTS_123457: u32 = 16787551; -pub const BRAILLE_DOTS_67: u32 = 16787552; -pub const BRAILLE_DOTS_167: u32 = 16787553; -pub const BRAILLE_DOTS_267: u32 = 16787554; -pub const BRAILLE_DOTS_1267: u32 = 16787555; -pub const BRAILLE_DOTS_367: u32 = 16787556; -pub const BRAILLE_DOTS_1367: u32 = 16787557; -pub const BRAILLE_DOTS_2367: u32 = 16787558; -pub const BRAILLE_DOTS_12367: u32 = 16787559; -pub const BRAILLE_DOTS_467: u32 = 16787560; -pub const BRAILLE_DOTS_1467: u32 = 16787561; -pub const BRAILLE_DOTS_2467: u32 = 16787562; -pub const BRAILLE_DOTS_12467: u32 = 16787563; -pub const BRAILLE_DOTS_3467: u32 = 16787564; -pub const BRAILLE_DOTS_13467: u32 = 16787565; -pub const BRAILLE_DOTS_23467: u32 = 16787566; -pub const BRAILLE_DOTS_123467: u32 = 16787567; -pub const BRAILLE_DOTS_567: u32 = 16787568; -pub const BRAILLE_DOTS_1567: u32 = 16787569; -pub const BRAILLE_DOTS_2567: u32 = 16787570; -pub const BRAILLE_DOTS_12567: u32 = 16787571; -pub const BRAILLE_DOTS_3567: u32 = 16787572; -pub const BRAILLE_DOTS_13567: u32 = 16787573; -pub const BRAILLE_DOTS_23567: u32 = 16787574; -pub const BRAILLE_DOTS_123567: u32 = 16787575; -pub const BRAILLE_DOTS_4567: u32 = 16787576; -pub const BRAILLE_DOTS_14567: u32 = 16787577; -pub const BRAILLE_DOTS_24567: u32 = 16787578; -pub const BRAILLE_DOTS_124567: u32 = 16787579; -pub const BRAILLE_DOTS_34567: u32 = 16787580; -pub const BRAILLE_DOTS_134567: u32 = 16787581; -pub const BRAILLE_DOTS_234567: u32 = 16787582; -pub const BRAILLE_DOTS_1234567: u32 = 16787583; -pub const BRAILLE_DOTS_8: u32 = 16787584; -pub const BRAILLE_DOTS_18: u32 = 16787585; -pub const BRAILLE_DOTS_28: u32 = 16787586; -pub const BRAILLE_DOTS_128: u32 = 16787587; -pub const BRAILLE_DOTS_38: u32 = 16787588; -pub const BRAILLE_DOTS_138: u32 = 16787589; -pub const BRAILLE_DOTS_238: u32 = 16787590; -pub const BRAILLE_DOTS_1238: u32 = 16787591; -pub const BRAILLE_DOTS_48: u32 = 16787592; -pub const BRAILLE_DOTS_148: u32 = 16787593; -pub const BRAILLE_DOTS_248: u32 = 16787594; -pub const BRAILLE_DOTS_1248: u32 = 16787595; -pub const BRAILLE_DOTS_348: u32 = 16787596; -pub const BRAILLE_DOTS_1348: u32 = 16787597; -pub const BRAILLE_DOTS_2348: u32 = 16787598; -pub const BRAILLE_DOTS_12348: u32 = 16787599; -pub const BRAILLE_DOTS_58: u32 = 16787600; -pub const BRAILLE_DOTS_158: u32 = 16787601; -pub const BRAILLE_DOTS_258: u32 = 16787602; -pub const BRAILLE_DOTS_1258: u32 = 16787603; -pub const BRAILLE_DOTS_358: u32 = 16787604; -pub const BRAILLE_DOTS_1358: u32 = 16787605; -pub const BRAILLE_DOTS_2358: u32 = 16787606; -pub const BRAILLE_DOTS_12358: u32 = 16787607; -pub const BRAILLE_DOTS_458: u32 = 16787608; -pub const BRAILLE_DOTS_1458: u32 = 16787609; -pub const BRAILLE_DOTS_2458: u32 = 16787610; -pub const BRAILLE_DOTS_12458: u32 = 16787611; -pub const BRAILLE_DOTS_3458: u32 = 16787612; -pub const BRAILLE_DOTS_13458: u32 = 16787613; -pub const BRAILLE_DOTS_23458: u32 = 16787614; -pub const BRAILLE_DOTS_123458: u32 = 16787615; -pub const BRAILLE_DOTS_68: u32 = 16787616; -pub const BRAILLE_DOTS_168: u32 = 16787617; -pub const BRAILLE_DOTS_268: u32 = 16787618; -pub const BRAILLE_DOTS_1268: u32 = 16787619; -pub const BRAILLE_DOTS_368: u32 = 16787620; -pub const BRAILLE_DOTS_1368: u32 = 16787621; -pub const BRAILLE_DOTS_2368: u32 = 16787622; -pub const BRAILLE_DOTS_12368: u32 = 16787623; -pub const BRAILLE_DOTS_468: u32 = 16787624; -pub const BRAILLE_DOTS_1468: u32 = 16787625; -pub const BRAILLE_DOTS_2468: u32 = 16787626; -pub const BRAILLE_DOTS_12468: u32 = 16787627; -pub const BRAILLE_DOTS_3468: u32 = 16787628; -pub const BRAILLE_DOTS_13468: u32 = 16787629; -pub const BRAILLE_DOTS_23468: u32 = 16787630; -pub const BRAILLE_DOTS_123468: u32 = 16787631; -pub const BRAILLE_DOTS_568: u32 = 16787632; -pub const BRAILLE_DOTS_1568: u32 = 16787633; -pub const BRAILLE_DOTS_2568: u32 = 16787634; -pub const BRAILLE_DOTS_12568: u32 = 16787635; -pub const BRAILLE_DOTS_3568: u32 = 16787636; -pub const BRAILLE_DOTS_13568: u32 = 16787637; -pub const BRAILLE_DOTS_23568: u32 = 16787638; -pub const BRAILLE_DOTS_123568: u32 = 16787639; -pub const BRAILLE_DOTS_4568: u32 = 16787640; -pub const BRAILLE_DOTS_14568: u32 = 16787641; -pub const BRAILLE_DOTS_24568: u32 = 16787642; -pub const BRAILLE_DOTS_124568: u32 = 16787643; -pub const BRAILLE_DOTS_34568: u32 = 16787644; -pub const BRAILLE_DOTS_134568: u32 = 16787645; -pub const BRAILLE_DOTS_234568: u32 = 16787646; -pub const BRAILLE_DOTS_1234568: u32 = 16787647; -pub const BRAILLE_DOTS_78: u32 = 16787648; -pub const BRAILLE_DOTS_178: u32 = 16787649; -pub const BRAILLE_DOTS_278: u32 = 16787650; -pub const BRAILLE_DOTS_1278: u32 = 16787651; -pub const BRAILLE_DOTS_378: u32 = 16787652; -pub const BRAILLE_DOTS_1378: u32 = 16787653; -pub const BRAILLE_DOTS_2378: u32 = 16787654; -pub const BRAILLE_DOTS_12378: u32 = 16787655; -pub const BRAILLE_DOTS_478: u32 = 16787656; -pub const BRAILLE_DOTS_1478: u32 = 16787657; -pub const BRAILLE_DOTS_2478: u32 = 16787658; -pub const BRAILLE_DOTS_12478: u32 = 16787659; -pub const BRAILLE_DOTS_3478: u32 = 16787660; -pub const BRAILLE_DOTS_13478: u32 = 16787661; -pub const BRAILLE_DOTS_23478: u32 = 16787662; -pub const BRAILLE_DOTS_123478: u32 = 16787663; -pub const BRAILLE_DOTS_578: u32 = 16787664; -pub const BRAILLE_DOTS_1578: u32 = 16787665; -pub const BRAILLE_DOTS_2578: u32 = 16787666; -pub const BRAILLE_DOTS_12578: u32 = 16787667; -pub const BRAILLE_DOTS_3578: u32 = 16787668; -pub const BRAILLE_DOTS_13578: u32 = 16787669; -pub const BRAILLE_DOTS_23578: u32 = 16787670; -pub const BRAILLE_DOTS_123578: u32 = 16787671; -pub const BRAILLE_DOTS_4578: u32 = 16787672; -pub const BRAILLE_DOTS_14578: u32 = 16787673; -pub const BRAILLE_DOTS_24578: u32 = 16787674; -pub const BRAILLE_DOTS_124578: u32 = 16787675; -pub const BRAILLE_DOTS_34578: u32 = 16787676; -pub const BRAILLE_DOTS_134578: u32 = 16787677; -pub const BRAILLE_DOTS_234578: u32 = 16787678; -pub const BRAILLE_DOTS_1234578: u32 = 16787679; -pub const BRAILLE_DOTS_678: u32 = 16787680; -pub const BRAILLE_DOTS_1678: u32 = 16787681; -pub const BRAILLE_DOTS_2678: u32 = 16787682; -pub const BRAILLE_DOTS_12678: u32 = 16787683; -pub const BRAILLE_DOTS_3678: u32 = 16787684; -pub const BRAILLE_DOTS_13678: u32 = 16787685; -pub const BRAILLE_DOTS_23678: u32 = 16787686; -pub const BRAILLE_DOTS_123678: u32 = 16787687; -pub const BRAILLE_DOTS_4678: u32 = 16787688; -pub const BRAILLE_DOTS_14678: u32 = 16787689; -pub const BRAILLE_DOTS_24678: u32 = 16787690; -pub const BRAILLE_DOTS_124678: u32 = 16787691; -pub const BRAILLE_DOTS_34678: u32 = 16787692; -pub const BRAILLE_DOTS_134678: u32 = 16787693; -pub const BRAILLE_DOTS_234678: u32 = 16787694; -pub const BRAILLE_DOTS_1234678: u32 = 16787695; -pub const BRAILLE_DOTS_5678: u32 = 16787696; -pub const BRAILLE_DOTS_15678: u32 = 16787697; -pub const BRAILLE_DOTS_25678: u32 = 16787698; -pub const BRAILLE_DOTS_125678: u32 = 16787699; -pub const BRAILLE_DOTS_35678: u32 = 16787700; -pub const BRAILLE_DOTS_135678: u32 = 16787701; -pub const BRAILLE_DOTS_235678: u32 = 16787702; -pub const BRAILLE_DOTS_1235678: u32 = 16787703; -pub const BRAILLE_DOTS_45678: u32 = 16787704; -pub const BRAILLE_DOTS_145678: u32 = 16787705; -pub const BRAILLE_DOTS_245678: u32 = 16787706; -pub const BRAILLE_DOTS_1245678: u32 = 16787707; -pub const BRAILLE_DOTS_345678: u32 = 16787708; -pub const BRAILLE_DOTS_1345678: u32 = 16787709; -pub const BRAILLE_DOTS_2345678: u32 = 16787710; -pub const BRAILLE_DOTS_12345678: u32 = 16787711; -pub const SINH_NG: u32 = 16780674; -pub const SINH_H2: u32 = 16780675; -pub const SINH_A: u32 = 16780677; -pub const SINH_AA: u32 = 16780678; -pub const SINH_AE: u32 = 16780679; -pub const SINH_AEE: u32 = 16780680; -pub const SINH_I: u32 = 16780681; -pub const SINH_II: u32 = 16780682; -pub const SINH_U: u32 = 16780683; -pub const SINH_UU: u32 = 16780684; -pub const SINH_RI: u32 = 16780685; -pub const SINH_RII: u32 = 16780686; -pub const SINH_LU: u32 = 16780687; -pub const SINH_LUU: u32 = 16780688; -pub const SINH_E: u32 = 16780689; -pub const SINH_EE: u32 = 16780690; -pub const SINH_AI: u32 = 16780691; -pub const SINH_O: u32 = 16780692; -pub const SINH_OO: u32 = 16780693; -pub const SINH_AU: u32 = 16780694; -pub const SINH_KA: u32 = 16780698; -pub const SINH_KHA: u32 = 16780699; -pub const SINH_GA: u32 = 16780700; -pub const SINH_GHA: u32 = 16780701; -pub const SINH_NG2: u32 = 16780702; -pub const SINH_NGA: u32 = 16780703; -pub const SINH_CA: u32 = 16780704; -pub const SINH_CHA: u32 = 16780705; -pub const SINH_JA: u32 = 16780706; -pub const SINH_JHA: u32 = 16780707; -pub const SINH_NYA: u32 = 16780708; -pub const SINH_JNYA: u32 = 16780709; -pub const SINH_NJA: u32 = 16780710; -pub const SINH_TTA: u32 = 16780711; -pub const SINH_TTHA: u32 = 16780712; -pub const SINH_DDA: u32 = 16780713; -pub const SINH_DDHA: u32 = 16780714; -pub const SINH_NNA: u32 = 16780715; -pub const SINH_NDDA: u32 = 16780716; -pub const SINH_THA: u32 = 16780717; -pub const SINH_THHA: u32 = 16780718; -pub const SINH_DHA: u32 = 16780719; -pub const SINH_DHHA: u32 = 16780720; -pub const SINH_NA: u32 = 16780721; -pub const SINH_NDHA: u32 = 16780723; -pub const SINH_PA: u32 = 16780724; -pub const SINH_PHA: u32 = 16780725; -pub const SINH_BA: u32 = 16780726; -pub const SINH_BHA: u32 = 16780727; -pub const SINH_MA: u32 = 16780728; -pub const SINH_MBA: u32 = 16780729; -pub const SINH_YA: u32 = 16780730; -pub const SINH_RA: u32 = 16780731; -pub const SINH_LA: u32 = 16780733; -pub const SINH_VA: u32 = 16780736; -pub const SINH_SHA: u32 = 16780737; -pub const SINH_SSHA: u32 = 16780738; -pub const SINH_SA: u32 = 16780739; -pub const SINH_HA: u32 = 16780740; -pub const SINH_LLA: u32 = 16780741; -pub const SINH_FA: u32 = 16780742; -pub const SINH_AL: u32 = 16780746; -pub const SINH_AA2: u32 = 16780751; -pub const SINH_AE2: u32 = 16780752; -pub const SINH_AEE2: u32 = 16780753; -pub const SINH_I2: u32 = 16780754; -pub const SINH_II2: u32 = 16780755; -pub const SINH_U2: u32 = 16780756; -pub const SINH_UU2: u32 = 16780758; -pub const SINH_RU2: u32 = 16780760; -pub const SINH_E2: u32 = 16780761; -pub const SINH_EE2: u32 = 16780762; -pub const SINH_AI2: u32 = 16780763; -pub const SINH_O2: u32 = 16780764; -pub const SINH_OO2: u32 = 16780765; -pub const SINH_AU2: u32 = 16780766; -pub const SINH_LU2: u32 = 16780767; -pub const SINH_RUU2: u32 = 16780786; -pub const SINH_LUU2: u32 = 16780787; -pub const SINH_KUNDDALIYA: u32 = 16780788; diff --git a/src/main.rs b/src/main.rs index b015a8d..fab4f4e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,16 +28,12 @@ use breadx::{ use lazy_static::lazy_static; -use tokio::sync::mpsc; - use tokio::sync::mpsc::unbounded_channel; mod config; mod msg_listener; mod x11; -mod keysymdef; - use x11::client::{may_not_exist, XcrabWindowManager}; use std::collections::HashMap; @@ -143,35 +139,67 @@ async fn main() -> Result<()> { conn.ungrab_server_async().await?; - let (send, mut recv) = unbounded_channel(); - let (result_send, result_recv) = mpsc::unbounded_channel(); - - tokio::spawn(msg_listener::listener_task( - CONFIG.msg.clone().unwrap_or_default().socket_path, - send, - result_recv, - )); - - let mask = ModMask { inner: 20 }; - let keymap = keymap(&mut conn).await.unwrap_or_default(); - let key_u32 = u32::from_str_radix("0078", 16).unwrap_or_default(); - let key: &u8 = keymap.get(&key_u32).ok_or_else(|| { - XcrabError::Custom("the keysym requested was not found in the keymap".to_string()) + let mut mask = ModMask::new(false, false, true, false, false, false, false, false, false); + let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; + let keymap = keymap(&mut keyboard_state); + let mut request_key = keymap.get(&120).ok_or_else(|| { + XcrabError::Custom("At least one letter could not be found in the keymap".to_string()) })?; + println!("got to this part"); + + for (&binds, _action) in &CONFIG.binds { + println!("started iteration"); + mask.set_control(binds.mods.control()); + mask.set_shift(binds.mods.shift()); + mask.set_One(binds.mods.mod1()); + mask.set_Four(binds.mods.mod4()); + for keysym in 97..122_u32 { + let keycode = keymap.get(&keysym).ok_or_else(|| { + XcrabError::Custom( + "At least one letter could not be found in the keymap".to_string(), + ) + })?; + if keyboard_state + .process_keycode(*keycode, KeyButMask::default()) + .ok_or_else(|| { + XcrabError::Custom( + "The keycode returned from the keymap could not be processed".to_string(), + ) + })? + .as_char() + .ok_or_else(|| { + XcrabError::Custom("The processed Key could not be cast as a char".to_string()) + })? + == binds.key + { + request_key = keycode; + } else { + dbg!(binds.key.clone()); + } + } + } + conn.exchange_request_async(GrabKeyRequest { req_type: 33, owner_events: false, length: 4, grab_window: root, modifiers: mask, - key: *key, + key: *request_key, pointer_mode: GrabMode::Async, keyboard_mode: GrabMode::Async, }) .await?; - // let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; + let (send, mut recv) = unbounded_channel(); + let (result_send, result_recv) = unbounded_channel(); + + tokio::spawn(msg_listener::listener_task( + CONFIG.msg.clone().unwrap_or_default().socket_path, + send, + result_recv, + )); loop { // biased mode makes select! poll the channel first in order to keep xcrab-msg from being @@ -179,7 +207,7 @@ async fn main() -> Result<()> { tokio::select! { biased; Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn, &result_send).await?, - Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root, &keymap,/* &mut keyboard_state */).await?, + Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root,&mut keyboard_state).await?, } } } @@ -189,8 +217,7 @@ async fn process_event( manager: &mut XcrabWindowManager, conn: &mut Dpy, root: Window, - keymap: &HashMap, - // keyboard_state: &mut KeyboardState, + keyboard_state: &mut KeyboardState, ) -> Result<()> { match ev { Event::MapRequest(ev) => { @@ -233,11 +260,14 @@ async fn process_event( } } Event::KeyPress(ev) => { - let keysym = u32::from_str_radix("0078", 16).unwrap_or_default(); - let key = keymap.get(&keysym).unwrap_or(&u8::MIN); - - if ev.detail == *key { - manager.destroy_focused_client(conn).await?; + if let Some(k) = keyboard_state.process_keycode(ev.detail, ev.state) { + if let Some(c) = k.as_char() { + for (&bind, action) in &CONFIG.binds { + if bind.key == c && bind.mods == ev.state { + action.eval(manager, conn).await?; + } + } + } } } _ => {} @@ -248,8 +278,7 @@ async fn process_event( // I will move this to x11/client.rs eventually // this is just ease of coding for now -async fn keymap(conn: &mut Dpy) -> Option> { - let mut state = KeyboardState::new_async(conn).await.ok()?; +fn keymap(state: &mut KeyboardState) -> HashMap { let mut map: HashMap = HashMap::new(); for keycode in 8..255_u8 { let key = state.process_keycode(keycode, KeyButMask::default()); @@ -260,5 +289,5 @@ async fn keymap(conn: &mut Dpy) -> Option>( drop(sender.send(buf)); // go back to ms word clippy - // we can unwrap here BECAUSE if the channel is closed then something's not right + // we can unwrap here because if the channel is closed then something's not right if let Err(e) = result_recv.recv().await.unwrap() { stream.write_all(format!("{}", e).as_bytes()).await?; } else { @@ -68,7 +68,7 @@ pub async fn on_recv( let res = { data.parse::() }; if let Ok(ref a) = res { - a.eval(manager, conn).await?; // Don't send these errors over the channel, BECAUSE they're + a.eval(manager, conn).await?; // Don't send these errors over the channel, because they're // xcrab errors, not msg errors } diff --git a/src/x11/client.rs b/src/x11/client.rs index 7aabca3..7d937ad 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -626,7 +626,7 @@ impl XcrabWindowManager { pub fn may_not_exist(res: breadx::Result) -> breadx::Result { match res { - // if its a `Window` error, that means it happened BECAUSE + // if its a `Window` error, that means it happened because // a window failed to exist, and we want to allow those Err(BreadError::XProtocol { error_code: ErrorCode(3), @@ -834,7 +834,7 @@ impl FramedWindow { async fn frame(conn: &mut Dpy, win: Window) -> Result { let root = conn.default_root(); - // here, we cant use `may_not_exist` BECAUSE we need the geometry + // here, we cant use `may_not_exist` because we need the geometry let geometry = win.geometry_immediate_async(conn).await?; let frame = conn -- 2.37.1 From 464f57f91d881c4e213bc2fac609850d1619a2c9 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 1 Aug 2022 12:59:02 -0500 Subject: [PATCH 09/13] lmao we can actually type now --- src/main.rs | 29 +++++++++---------------- src/x11/client.rs | 54 ++--------------------------------------------- 2 files changed, 12 insertions(+), 71 deletions(-) diff --git a/src/main.rs b/src/main.rs index fab4f4e..5b931ba 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,25 +142,18 @@ async fn main() -> Result<()> { let mut mask = ModMask::new(false, false, true, false, false, false, false, false, false); let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; let keymap = keymap(&mut keyboard_state); - let mut request_key = keymap.get(&120).ok_or_else(|| { + let mut request_key = *keymap.get(&120).ok_or_else(|| { XcrabError::Custom("At least one letter could not be found in the keymap".to_string()) })?; - println!("got to this part"); - - for (&binds, _action) in &CONFIG.binds { - println!("started iteration"); - mask.set_control(binds.mods.control()); - mask.set_shift(binds.mods.shift()); - mask.set_One(binds.mods.mod1()); - mask.set_Four(binds.mods.mod4()); + for &binds in CONFIG.binds.keys() { for keysym in 97..122_u32 { let keycode = keymap.get(&keysym).ok_or_else(|| { XcrabError::Custom( "At least one letter could not be found in the keymap".to_string(), ) })?; - if keyboard_state + let iter_char = keyboard_state .process_keycode(*keycode, KeyButMask::default()) .ok_or_else(|| { XcrabError::Custom( @@ -170,12 +163,10 @@ async fn main() -> Result<()> { .as_char() .ok_or_else(|| { XcrabError::Custom("The processed Key could not be cast as a char".to_string()) - })? - == binds.key - { - request_key = keycode; - } else { - dbg!(binds.key.clone()); + })?; + if iter_char == binds.key { + request_key = *keycode; + mask.inner = binds.mods.inner; } } } @@ -186,7 +177,7 @@ async fn main() -> Result<()> { length: 4, grab_window: root, modifiers: mask, - key: *request_key, + key: request_key, pointer_mode: GrabMode::Async, keyboard_mode: GrabMode::Async, }) @@ -207,7 +198,7 @@ async fn main() -> Result<()> { tokio::select! { biased; Some(s) = recv.recv() => msg_listener::on_recv(s, &mut manager, &mut conn, &result_send).await?, - Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root,&mut keyboard_state).await?, + Ok(ev) = conn.wait_for_event_async() => process_event(ev, &mut manager, &mut conn, root, &mut keyboard_state).await?, } } } @@ -263,7 +254,7 @@ async fn process_event( if let Some(k) = keyboard_state.process_keycode(ev.detail, ev.state) { if let Some(c) = k.as_char() { for (&bind, action) in &CONFIG.binds { - if bind.key == c && bind.mods == ev.state { + if bind.key == c && bind.mods.inner == 20 { action.eval(manager, conn).await?; } } diff --git a/src/x11/client.rs b/src/x11/client.rs index 7d937ad..0ca87ef 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -242,10 +242,7 @@ impl XcrabWindowManager { }; if let Some(focus) = self.focused { - let focused_key = self.clients.get(&focus).unwrap(); - let focused = self.rects.get(*focused_key).unwrap(); - let focused_frame = focused.unwrap_client().frame; - req.focus = focused_frame.input; + req.focus = focus; } conn.exchange_request_async(req).await?; @@ -640,7 +637,6 @@ pub fn may_not_exist(res: breadx::Result) -> breadx::Result { pub struct FramedWindow { pub frame: Window, pub win: Window, - pub input: Window, } impl FramedWindow { @@ -700,27 +696,12 @@ impl FramedWindow { .await, )?; - self.input - .configure_async( - conn, - ConfigureWindowParameters { - x: Some(0), - y: Some(0), - width, - height, - border_width: None, - ..Default::default() - }, - ) - .await?; - Ok(()) } async fn map(self, conn: &mut Dpy) -> Result<()> { may_not_exist(self.win.map_async(conn).await)?; self.frame.map_async(conn).await?; - self.input.map_async(conn).await?; Ok(()) } @@ -736,10 +717,6 @@ impl FramedWindow { // no longer related to us, remove from save set may_not_exist(self.win.change_save_set_async(conn, SetMode::Delete).await)?; - self.input.unmap_async(conn).await?; - - self.input.free_async(conn).await?; - self.frame.free_async(conn).await?; Ok(()) @@ -851,21 +828,6 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul ) .await?; - let input = conn - .create_window_async( - frame, - breadx::WindowClass::InputOnly, - None, - Some(conn.default_visual_id()), - 0, - 0, - geometry.width, - geometry.height, - 0, - WindowParameters::default(), - ) - .await?; - frame .set_event_mask_async( conn, @@ -876,21 +838,9 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul win.set_event_mask_async(conn, EventMask::BUTTON_PRESS) .await?; - input - .set_event_mask_async( - conn, - EventMask::BUTTON_PRESS - | EventMask::BUTTON_RELEASE - | EventMask::KEY_PRESS - | EventMask::KEY_RELEASE - | EventMask::ENTER_WINDOW - | EventMask::LEAVE_WINDOW, - ) - .await?; - may_not_exist(win.change_save_set_async(conn, SetMode::Insert).await)?; may_not_exist(win.reparent_async(conn, frame, 0, 0).await)?; - Ok(FramedWindow { frame, win, input }) + Ok(FramedWindow { frame, win }) } -- 2.37.1 From cfc03345152192483748f3c45922db293884e288 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 1 Aug 2022 19:54:02 -0500 Subject: [PATCH 10/13] the final commit I still have to add not crashing when there are no windows left (although it seems that only happens sometimes) I also have to add a few just-in-cases like completely discarding mod2 in the ModMask (a very difficult thing to do), as well as moving some functions around and commenting, but in most cases, xcrab should work! --- src/main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5b931ba..42be323 100644 --- a/src/main.rs +++ b/src/main.rs @@ -171,6 +171,8 @@ async fn main() -> Result<()> { } } + mask.set_Two(true); + conn.exchange_request_async(GrabKeyRequest { req_type: 33, owner_events: false, @@ -254,7 +256,7 @@ async fn process_event( if let Some(k) = keyboard_state.process_keycode(ev.detail, ev.state) { if let Some(c) = k.as_char() { for (&bind, action) in &CONFIG.binds { - if bind.key == c && bind.mods.inner == 20 { + if bind.key == c { action.eval(manager, conn).await?; } } -- 2.37.1 From eff8ef2f6e32580fe6f2a3e59ae9c0275d49f5d4 Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 1 Aug 2022 20:03:23 -0500 Subject: [PATCH 11/13] actual final commit --- src/main.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main.rs b/src/main.rs index 42be323..8e87d15 100644 --- a/src/main.rs +++ b/src/main.rs @@ -185,6 +185,20 @@ async fn main() -> Result<()> { }) .await?; + mask.set_Two(false); + + conn.exchange_request_async(GrabKeyRequest { + req_type: 33, + owner_events: false, + length: 4, + grab_window: root, + modifiers: mask, + key: request_key, + pointer_mode: GrabMode::Async, + keyboard_mode: GrabMode::Async, + }) + .await?; + let (send, mut recv) = unbounded_channel(); let (result_send, result_recv) = unbounded_channel(); -- 2.37.1 From a6059ab5331bde4bec1795d69224a3ecf623543f Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 1 Aug 2022 22:36:30 -0500 Subject: [PATCH 12/13] small changes to satisfy karx --- src/main.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8e87d15..76144f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,10 +89,10 @@ lazy_static! { impl Display for XcrabError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Self::Bread(be) => Display::fmt(&be, f)?, - Self::Io(ie) => Display::fmt(&ie, f)?, - Self::Toml(te) => Display::fmt(&te, f)?, - Self::Var(ve) => Display::fmt(&ve, f)?, + Self::Bread(be) => Display::fmt(be, f)?, + Self::Io(ie) => Display::fmt(ie, f)?, + Self::Toml(te) => Display::fmt(te, f)?, + Self::Var(ve) => Display::fmt(ve, f)?, Self::ClientDoesntExist => Display::fmt("client didn't exist", f)?, Self::Custom(fe) => Display::fmt(fe, f)?, }; @@ -219,6 +219,8 @@ async fn main() -> Result<()> { } } +#[allow(clippy::too_many_lines)] + async fn process_event( ev: Event, manager: &mut XcrabWindowManager, -- 2.37.1 From 043bbb63ff15c712faba961446614ab6668819db Mon Sep 17 00:00:00 2001 From: Akshat Deshpande Date: Mon, 1 Aug 2022 22:46:33 -0500 Subject: [PATCH 13/13] more small changes to satisfy karx --- src/main.rs | 20 +------------------- src/msg/config.rs | 9 +++++++++ src/msg/main.rs | 20 ++++++++++++++++++++ src/x11/client.rs | 23 ++++++++++++++++------- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/main.rs b/src/main.rs index 76144f0..1874b07 100644 --- a/src/main.rs +++ b/src/main.rs @@ -141,7 +141,7 @@ async fn main() -> Result<()> { let mut mask = ModMask::new(false, false, true, false, false, false, false, false, false); let mut keyboard_state = KeyboardState::new_async(&mut conn).await?; - let keymap = keymap(&mut keyboard_state); + let keymap = x11::client::keymap(&mut keyboard_state); let mut request_key = *keymap.get(&120).ok_or_else(|| { XcrabError::Custom("At least one letter could not be found in the keymap".to_string()) })?; @@ -220,7 +220,6 @@ async fn main() -> Result<()> { } #[allow(clippy::too_many_lines)] - async fn process_event( ev: Event, manager: &mut XcrabWindowManager, @@ -283,20 +282,3 @@ async fn process_event( } Ok(()) } - -// I will move this to x11/client.rs eventually -// this is just ease of coding for now - -fn keymap(state: &mut KeyboardState) -> HashMap { - let mut map: HashMap = HashMap::new(); - for keycode in 8..255_u8 { - let key = state.process_keycode(keycode, KeyButMask::default()); - let keysyms = state.lookup_keysyms(keycode); - if key != None { - for keysym in keysyms { - map.insert(*keysym, keycode); - } - } - } - map -} diff --git a/src/msg/config.rs b/src/msg/config.rs index f4a4d8d..d42c834 100644 --- a/src/msg/config.rs +++ b/src/msg/config.rs @@ -1,28 +1,34 @@ // Copyright (C) 2022 Infoshock Tech + // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. + // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. + // You should have received a copy of the GNU General Public License // along with this program. If not, see . use crate::Result; use serde::Deserialize; use std::path::PathBuf; + #[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Default, Deserialize)] // Dummy struct for deserializing the message config - we're using the same file for both binaries pub struct XcrabConfig { pub msg: XcrabMsgConfig, } + #[allow(clippy::module_name_repetitions)] #[derive(Clone, Debug, Deserialize)] pub struct XcrabMsgConfig { pub socket_path: PathBuf, } + impl Default for XcrabMsgConfig { fn default() -> Self { Self { @@ -30,15 +36,18 @@ impl Default for XcrabMsgConfig { } } } + fn load_file_inner() -> Result { let home_dir = get_home(); let contents = std::fs::read_to_string(format!("{}/.config/xcrab/config.toml", home_dir))?; let config: XcrabConfig = toml::from_str(&contents)?; Ok(config) } + pub fn load_file() -> XcrabConfig { load_file_inner().unwrap_or_default() } + fn get_home() -> String { std::env::var("HOME").expect("Error: $HOME variable was not set") } diff --git a/src/msg/main.rs b/src/msg/main.rs index 3497ffc..1cc8dd0 100644 --- a/src/msg/main.rs +++ b/src/msg/main.rs @@ -1,47 +1,67 @@ // Copyright (C) 2022 Infoshock Tech + // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. + // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. + // You should have received a copy of the GNU General Public License // along with this program. If not, see . + #![warn(clippy::pedantic)] + mod config; + use std::error::Error; use std::fmt::{Debug, Display, Formatter, Result as FmtResult}; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::UnixStream; + type Result = std::result::Result>; + struct CustomError(String); + impl Debug for CustomError { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { f.write_str(&self.0) } } + impl Display for CustomError { fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { f.write_str(&self.0) } } + impl Error for CustomError {} + #[tokio::main] async fn main() -> Result<()> { let msg = std::env::args().skip(1).collect::>().join(" "); + let conf = config::load_file(); + let path = conf.msg.socket_path; + let stream = UnixStream::connect(path).await?; + let (mut read, mut write) = stream.into_split(); + write.write_all(msg.as_bytes()).await?; drop(write); // Shutdown the writer half so that the write actually goes through // "Don't cross the streams!"" + let mut buf = String::new(); + read.read_to_string(&mut buf).await?; if !buf.is_empty() { return Err(CustomError(buf).into()); } + Ok(()) } diff --git a/src/x11/client.rs b/src/x11/client.rs index 0ca87ef..b1bb66a 100644 --- a/src/x11/client.rs +++ b/src/x11/client.rs @@ -13,15 +13,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use breadx::{ - auto::xproto::{ClientMessageEvent, InputFocus, SetInputFocusRequest}, - client_message_data::ClientMessageData, - prelude::{AsByteSequence, AsyncDisplayXprotoExt, PropertyType, SetMode}, - AsyncDisplay, AsyncDisplayExt, Atom, BreadError, ConfigureWindowParameters, ErrorCode, Event, - EventMask, Window, WindowParameters, XidType, -}; +use breadx::{auto::xproto::{ClientMessageEvent, InputFocus, SetInputFocusRequest}, client_message_data::ClientMessageData, prelude::{AsByteSequence, AsyncDisplayXprotoExt, PropertyType, SetMode}, AsyncDisplay, AsyncDisplayExt, Atom, BreadError, ConfigureWindowParameters, ErrorCode, Event, EventMask, Window, WindowParameters, XidType, KeyboardState}; use slotmap::{new_key_type, SlotMap}; use std::{collections::HashMap, future::Future, pin::Pin, slice}; +use breadx::auto::xproto::{KeyButMask, Keycode, Keysym}; use crate::{Result, XcrabError, CONFIG}; @@ -844,3 +839,17 @@ async fn frame(conn: &mut Dpy, win: Window) -> Resul Ok(FramedWindow { frame, win }) } + +pub fn keymap(state: &mut KeyboardState) -> HashMap { + let mut map: HashMap = HashMap::new(); + for keycode in 8..255_u8 { + let key = state.process_keycode(keycode, KeyButMask::default()); + let keysyms = state.lookup_keysyms(keycode); + if key != None { + for keysym in keysyms { + map.insert(*keysym, keycode); + } + } + } + map +} \ No newline at end of file -- 2.37.1