diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8be9efaa..717eefcd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Added โญ
+* Emoji support:
+ * 1216 different emojis.
+ * Works in any text.
+ * Great for button icons.
+ * The Demo app comes with a Font Book to explore the available glyphs.
* Wrapping layouts:
* `ui.horizontal_wrapped(|ui| ...)`: Add widgets on a row but wrap at `max_size`.
* `ui.horizontal_wrapped_for_text`: Like `horizontal_wrapped`, but with spacing made for embedding text.
@@ -22,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed ๐ง
* Changed default font to [Ubuntu-Light](https://fonts.google.com/specimen/Ubuntu).
+* Remove minimum button width
* Refactored `egui::Layout` substantially, changing its interface.
### Removed ๐ฅ
diff --git a/README.md b/README.md
index 7fe62213..7c60f9b5 100644
--- a/README.md
+++ b/README.md
@@ -209,5 +209,7 @@ Egui is under MIT OR Apache-2.0 license.
Fonts:
-* ProggyClean.ttf, Copyright (c) 2004, 2005 Tristan Grimmer. MIT License.
-* Ubuntu-Light.ttf by [Dalton Maag](http://www.daltonmaag.com/): [Ubuntu font licence](https://ubuntu.com/legal/font-licence)
+* `emoji-icon-font.ttf`: [Copyright (c) 2014 John Slegers](https://github.com/jslegers/emoji-icon-font) , MIT License
+* `NotoEmoji-Regular.ttf`: [google.com/get/noto](https://google.com/get/noto), [SIL Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL)
+* `ProggyClean.ttf`: Copyright (c) 2004, 2005 Tristan Grimmer. MIT License.
+* `Ubuntu-Light.ttf` by [Dalton Maag](http://www.daltonmaag.com/): [Ubuntu font licence](https://ubuntu.com/legal/font-licence)
diff --git a/TODO.md b/TODO.md
index fb4cb7f3..4de6c8a1 100644
--- a/TODO.md
+++ b/TODO.md
@@ -21,8 +21,6 @@ TODO-list for the Egui project. If you looking for something to do, look here.
* [/] Unicode
* [/] Text editing of unicode (needs more testing)
* [ ] Font with some more unicode characters
- * [ ] Emoji support (great for things like โถ๏ธโธโนโ ๏ธ)
- * [ ] Change text style/color and continue in same layout
* Menu bar (File, Edit, etc)
* [ ] Sub-menus
* [ ] Keyboard shortcuts
@@ -117,6 +115,8 @@ Ability to do a search for any widget. The search works even for collapsed regio
* Widgets
* [x] Label
+ * [x] Emoji support (great for things like โถ๏ธโธโนโ ๏ธ)
+ * [x] Change text style/color and continue in same layout
* [x] Button
* [x] Checkbox
* [x] Radiobutton
diff --git a/egui/fonts/NotoEmoji-Regular.ttf b/egui/fonts/NotoEmoji-Regular.ttf
new file mode 100644
index 00000000..19b7badf
Binary files /dev/null and b/egui/fonts/NotoEmoji-Regular.ttf differ
diff --git a/OFL.txt b/egui/fonts/OFL.txt
old mode 100755
new mode 100644
similarity index 69%
rename from OFL.txt
rename to egui/fonts/OFL.txt
index daa25d00..d952d62c
--- a/OFL.txt
+++ b/egui/fonts/OFL.txt
@@ -1,93 +1,92 @@
-Copyright 2011 The Comfortaa Project Authors (https://github.com/alexeiva/comfortaa), with Reserved Font Name "Comfortaa".
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
+This Font Software is licensed under the SIL Open Font License,
+Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font
+creation efforts of academic and linguistic communities, and to
+provide a free and open framework in which fonts may be shared and
+improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply to
+any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software
+components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to,
+deleting, or substituting -- in part or in whole -- any of the
+components of the Original Version, by changing formats or by porting
+the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed,
+modify, redistribute, and sell modified and unmodified copies of the
+Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in
+Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the
+corresponding Copyright Holder. This restriction only applies to the
+primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created using
+the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/egui/fonts/emoji-icon-font-mit-license.txt b/egui/fonts/emoji-icon-font-mit-license.txt
new file mode 100644
index 00000000..99016e12
--- /dev/null
+++ b/egui/fonts/emoji-icon-font-mit-license.txt
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2014 John Slegers
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/egui/fonts/emoji-icon-font.ttf b/egui/fonts/emoji-icon-font.ttf
new file mode 100644
index 00000000..80640832
Binary files /dev/null and b/egui/fonts/emoji-icon-font.ttf differ
diff --git a/egui/src/context.rs b/egui/src/context.rs
index e938c140..470e3677 100644
--- a/egui/src/context.rs
+++ b/egui/src/context.rs
@@ -587,13 +587,13 @@ impl Context {
pub fn settings_ui(&self, ui: &mut Ui) {
use crate::containers::*;
- CollapsingHeader::new("Style")
+ CollapsingHeader::new("๐ Style")
.default_open(true)
.show(ui, |ui| {
self.style_ui(ui);
});
- CollapsingHeader::new("Fonts")
+ CollapsingHeader::new("๐ Fonts")
.default_open(false)
.show(ui, |ui| {
let mut font_definitions = self.fonts().definitions().clone();
@@ -602,7 +602,7 @@ impl Context {
self.set_fonts(font_definitions);
});
- CollapsingHeader::new("Painting")
+ CollapsingHeader::new("โ Painting")
.default_open(true)
.show(ui, |ui| {
let mut tesselation_options = self.options.lock().tesselation_options;
@@ -625,11 +625,11 @@ impl Context {
.on_hover_text("Is Egui currently listening for text input");
ui.advance_cursor(16.0);
- CollapsingHeader::new("Input")
+ CollapsingHeader::new("๐ฅ Input")
.default_open(false)
.show(ui, |ui| ui.input().clone().ui(ui));
- CollapsingHeader::new("Paint stats")
+ CollapsingHeader::new("๐ Paint stats")
.default_open(true)
.show(ui, |ui| {
self.paint_stats.lock().ui(ui);
diff --git a/egui/src/demos/app.rs b/egui/src/demos/app.rs
index 3c9fcf61..1f8481ac 100644
--- a/egui/src/demos/app.rs
+++ b/egui/src/demos/app.rs
@@ -89,7 +89,7 @@ impl FrameHistory {
);
crate::demos::warn_if_debug_build(ui);
- crate::CollapsingHeader::new("CPU usage history")
+ crate::CollapsingHeader::new("๐ CPU usage history")
.default_open(false)
.show(ui, |ui| {
self.graph(ui);
@@ -304,7 +304,7 @@ impl app::App for DemoApp {
&mut integration_context.tex_allocator,
);
- crate::Window::new("Backend")
+ crate::Window::new("๐ป Backend")
.min_width(360.0)
.scroll(false)
.show(ctx, |ui| {
diff --git a/egui/src/demos/dancing_strings.rs b/egui/src/demos/dancing_strings.rs
index f699c2c3..19e48302 100644
--- a/egui/src/demos/dancing_strings.rs
+++ b/egui/src/demos/dancing_strings.rs
@@ -14,7 +14,7 @@ impl Default for DancingStrings {
impl Demo for DancingStrings {
fn name(&self) -> &str {
- "Dancing Strings"
+ "โซ Dancing Strings"
}
fn show(&mut self, ctx: &Arc, open: &mut bool) {
diff --git a/egui/src/demos/demo_windows.rs b/egui/src/demos/demo_windows.rs
index 03121777..a871ad31 100644
--- a/egui/src/demos/demo_windows.rs
+++ b/egui/src/demos/demo_windows.rs
@@ -37,6 +37,7 @@ impl Default for Demos {
fn default() -> Self {
Self {
demos: vec![
+ (false, Box::new(crate::demos::FontBook::default())),
(false, Box::new(crate::demos::DancingStrings::default())),
(false, Box::new(crate::demos::DragAndDropDemo::default())),
(false, Box::new(crate::demos::Tests::default())),
@@ -103,10 +104,12 @@ impl DemoWindows {
}
crate::SidePanel::left(Id::new("side_panel"), 200.0).show(ctx, |ui| {
- ui.heading("Egui Demo");
+ ui.heading("โ Egui Demo");
crate::demos::warn_if_debug_build(ui);
ui.label("Egui is an immediate mode GUI library written in Rust.");
- ui.add(crate::Hyperlink::new("https://github.com/emilk/egui").text("Egui home page"));
+ ui.add(crate::Hyperlink::new("https://github.com/emilk/egui").text("๎ค Egui home page"));
+
+ ui.label("Egui can be run on the web, or natively on ๎๏ฃฟ๐ง");
ui.separator();
ui.label(
@@ -117,7 +120,7 @@ impl DemoWindows {
}
ui.separator();
- ui.heading("Windows:");
+ ui.heading("๏ผณ Windows:");
ui.indent("windows", |ui| {
self.open_windows.checkboxes(ui);
self.demos.checkboxes(ui);
@@ -147,34 +150,34 @@ impl DemoWindows {
..
} = self;
- Window::new("Demo")
+ Window::new("โจ Demo")
.open(&mut open_windows.demo)
.scroll(true)
.show(ctx, |ui| {
demo_window.ui(ui);
});
- Window::new("Settings")
+ Window::new("๐ง Settings")
.open(&mut open_windows.settings)
.show(ctx, |ui| {
ctx.settings_ui(ui);
});
- Window::new("Inspection")
+ Window::new("๐ Inspection")
.open(&mut open_windows.inspection)
.scroll(true)
.show(ctx, |ui| {
ctx.inspection_ui(ui);
});
- Window::new("Memory")
+ Window::new("๐ Memory")
.open(&mut open_windows.memory)
.resizable(false)
.show(ctx, |ui| {
ctx.memory_ui(ui);
});
- Window::new("Color Test")
+ Window::new("๐จ Color Test")
.default_size([800.0, 1024.0])
.scroll(true)
.open(&mut open_windows.color_test)
@@ -299,18 +302,18 @@ impl OpenWindows {
color_test,
} = self;
ui.label("Egui:");
- ui.checkbox(settings, "Settings");
- ui.checkbox(inspection, "Inspection");
- ui.checkbox(memory, "Memory");
+ ui.checkbox(settings, "๐ง Settings");
+ ui.checkbox(inspection, "๐ Inspection");
+ ui.checkbox(memory, "๐ Memory");
ui.separator();
- ui.checkbox(demo, "Demo");
+ ui.checkbox(demo, "โจ Demo");
ui.separator();
- ui.checkbox(resize, "Resize examples");
- ui.checkbox(color_test, "Color test")
+ ui.checkbox(resize, "โ Resize examples");
+ ui.checkbox(color_test, "๐จ Color test")
.on_hover_text("For testing the integrations painter");
ui.separator();
ui.label("Misc:");
- ui.checkbox(fractal_clock, "Fractal Clock");
+ ui.checkbox(fractal_clock, "๐ Fractal Clock");
}
}
@@ -333,7 +336,7 @@ fn show_menu_bar(ui: &mut Ui, windows: &mut OpenWindows, seconds_since_midnight:
menu::menu(ui, "Windows", |ui| windows.checkboxes(ui));
menu::menu(ui, "About", |ui| {
ui.label("This is Egui");
- ui.add(Hyperlink::new("https://github.com/emilk/egui").text("Egui home page"));
+ ui.add(Hyperlink::new("https://github.com/emilk/egui").text("๎ค Egui home page"));
});
if let Some(time) = seconds_since_midnight {
diff --git a/egui/src/demos/drag_and_drop.rs b/egui/src/demos/drag_and_drop.rs
index 162e7dff..d7b4efdd 100644
--- a/egui/src/demos/drag_and_drop.rs
+++ b/egui/src/demos/drag_and_drop.rs
@@ -97,7 +97,7 @@ impl Default for DragAndDropDemo {
impl Demo for DragAndDropDemo {
fn name(&self) -> &str {
- "Drag and Drop"
+ "โ Drag and Drop"
}
fn show(&mut self, ctx: &std::sync::Arc, open: &mut bool) {
diff --git a/egui/src/demos/font_book.rs b/egui/src/demos/font_book.rs
new file mode 100644
index 00000000..0b961f1b
--- /dev/null
+++ b/egui/src/demos/font_book.rs
@@ -0,0 +1,105 @@
+use crate::*;
+
+pub struct FontBook {
+ standard: bool,
+ emojis: bool,
+ filter: String,
+ text_style: TextStyle,
+}
+
+impl Default for FontBook {
+ fn default() -> Self {
+ Self {
+ standard: false,
+ emojis: true,
+ filter: Default::default(),
+ text_style: TextStyle::Heading,
+ }
+ }
+}
+
+impl FontBook {
+ fn characters_ui(&self, ui: &mut Ui, characters: &[(u32, char, &str)]) {
+ for &(_, chr, name) in characters {
+ if !self.filter.is_empty() && !name.contains(&self.filter) {
+ continue;
+ }
+
+ let button = Button::new(chr).text_style(self.text_style).frame(false);
+
+ let tooltip_ui = |ui: &mut Ui| {
+ ui.add(Label::new(chr).text_style(self.text_style));
+ ui.label(format!("{}\nU+{:X}\n\nClick to copy", name, chr as u32));
+ };
+
+ if ui.add(button).on_hover_ui(tooltip_ui).clicked {
+ ui.output().copied_text = chr.to_string();
+ }
+ }
+ }
+}
+
+impl demos::Demo for FontBook {
+ fn name(&self) -> &str {
+ "๐ค Font Book"
+ }
+
+ fn show(&mut self, ctx: &std::sync::Arc, open: &mut bool) {
+ Window::new(self.name()).open(open).show(ctx, |ui| {
+ use demos::View;
+ self.ui(ui);
+ });
+ }
+}
+
+impl demos::View for FontBook {
+ fn ui(&mut self, ui: &mut Ui) {
+ use crate::demos::font_contents_emoji::FULL_EMOJI_LIST;
+ use crate::demos::font_contents_ubuntu::UBUNTU_FONT_CHARACTERS;
+
+ ui.label(format!(
+ "Egui supports {} standard characters and {} emojis.\nClick on a character to copy it.",
+ UBUNTU_FONT_CHARACTERS.len(),
+ FULL_EMOJI_LIST.len(),
+ ));
+
+ ui.separator();
+
+ ui.horizontal(|ui| {
+ ui.label("Text style:");
+ for style in TextStyle::all() {
+ ui.radio_value(&mut self.text_style, style, format!("{:?}", style));
+ }
+ });
+
+ ui.horizontal(|ui| {
+ ui.label("Show:");
+ ui.checkbox(&mut self.standard, "Standard");
+ ui.checkbox(&mut self.emojis, "Emojis");
+ });
+
+ ui.horizontal(|ui| {
+ ui.label("Filter:");
+ ui.text_edit_singleline(&mut self.filter);
+ self.filter = self.filter.to_lowercase();
+ if ui.button("๏ฝ").clicked {
+ self.filter.clear();
+ }
+ });
+
+ ui.separator();
+
+ crate::ScrollArea::auto_sized().show(ui, |ui| {
+ ui.horizontal_wrapped(|ui| {
+ ui.style_mut().spacing.item_spacing = Vec2::splat(2.0);
+
+ if self.standard {
+ self.characters_ui(ui, UBUNTU_FONT_CHARACTERS);
+ }
+ if self.emojis {
+ self.characters_ui(ui, FULL_EMOJI_LIST);
+ }
+ });
+ });
+ }
+}
diff --git a/egui/src/demos/font_contents_emoji.rs b/egui/src/demos/font_contents_emoji.rs
new file mode 100644
index 00000000..07bfd0fb
--- /dev/null
+++ b/egui/src/demos/font_contents_emoji.rs
@@ -0,0 +1,2754 @@
+/// A list of ~all~ most emojis available in `emoji-icon-font.ttf`
+///
+/// Also viewable at
+/// Source:
+#[rustfmt::skip]
+pub const EMOJI_ICON_FONT_LIST: &[(u32, char, &str)] = &[
+ (0xA9, 'ยฉ', "copyright"),
+ (0xAE, 'ยฎ', "registered"),
+ (0x2030, 'โฐ', "perthousand"),
+ (0x20AC, 'โฌ', "currency-euro"),
+ (0x211E, 'โ', "retrograde"),
+ (0x2126, 'โฆ', "omega"),
+ (0x2135, 'โต', "aleph"),
+ (0x21BA, 'โบ', "rotate-ccw"),
+ (0x21BB, 'โป', "rotate-cw"),
+ (0x221E, 'โ', "infinity"),
+ (0x2297, 'โ', "close"),
+ (0x229E, 'โ', "square-plus"),
+ (0x229F, 'โ', "square-minus"),
+ (0x2316, 'โ', "crosshairs"),
+ (0x2318, 'โ', "command"),
+ (0x231A, 'โ', "watch"),
+ (0x2328, 'โจ', "keyboard-wireless"),
+ (0x2386, 'โ', "enter"),
+ (0x2388, 'โ', "helm"),
+ (0x2397, 'โ', "previous-page"),
+ (0x2398, 'โ', "next-page"),
+ (0x2399, 'โ', "print-screen"),
+ (0x23CF, 'โ', "eject"),
+ (0x23E9, 'โฉ', "forward"),
+ (0x23EA, 'โช', "backward"),
+ (0x23ED, 'โญ', "last"),
+ (0x23EE, 'โฎ', "first"),
+ (0x23F0, 'โฐ', "alarm"),
+ (0x23F1, 'โฑ', "stopwatch"),
+ (0x23F3, 'โณ', "hourglass"),
+ (0x23F4, 'โด', "caret-left"),
+ (0x23F5, 'โต', "caret-right"),
+ (0x23F6, 'โถ', "caret-up"),
+ (0x23F7, 'โท', "caret-down"),
+ (0x23F8, 'โธ', "pause"),
+ (0x23F9, 'โน', "stop"),
+ (0x23FA, 'โบ', "circle"),
+ (0x2593, 'โ', "chessboard"),
+ (0x25A0, 'โ ', "square"),
+ (0x25A3, 'โฃ', "checkbox-partial"),
+ (0x25B6, 'โถ', "play"),
+ (0x25CB, 'โ', "circle-open"),
+ (0x25CE, 'โ', "bullseye"),
+ (0x25D1, 'โ', "contrast"),
+ (0x25D4, 'โ', "pie-chart-reverse"),
+ (0x25D5, 'โ', "pie-chart"),
+ (0x2600, 'โ', "sun"),
+ (0x2601, 'โ', "cloud"),
+ (0x2602, 'โ', "umbrella"),
+ (0x2603, 'โ', "snowman"),
+ (0x2604, 'โ', "comet"),
+ (0x2605, 'โ
', "star"),
+ (0x2606, 'โ', "star-open"),
+ (0x2609, 'โ', "record"),
+ (0x260E, 'โ', "phone"),
+ (0x2610, 'โ', "checkbox-unchecked"),
+ (0x2611, 'โ', "checkbox-checked"),
+ (0x2615, 'โ', "drink-coffee"),
+ (0x2618, 'โ', "shamrock"),
+ (0x261C, 'โ', "point-left"),
+ (0x261D, 'โ', "point-up"),
+ (0x261E, 'โ', "point-right"),
+ (0x261F, 'โ', "point-down"),
+ (0x2620, 'โ ', "skull-and-bones"),
+ (0x2622, 'โข', "radiation"),
+ (0x2623, 'โฃ', "biohazard"),
+ (0x2624, 'โค', "caduceus"),
+ (0x2625, 'โฅ', "ankh"),
+ (0x2626, 'โฆ', "cross-orthodox"),
+ (0x2627, 'โง', "chi-rho"),
+ (0x2628, 'โจ', "cross-of-lorraine"),
+ (0x2629, 'โฉ', "cross-of-jerusalem"),
+ (0x262A, 'โช', "star-and-crescent"),
+ (0x262B, 'โซ', "farsi"),
+ (0x262C, 'โฌ', "khanda"),
+ (0x262E, 'โฎ', "peace"),
+ (0x262F, 'โฏ', "tao"),
+ (0x2630, 'โฐ', "menu"),
+ (0x2638, 'โธ', "wheel-of-dharma"),
+ (0x2639, 'โน', "smiley-sad"),
+ (0x263A, 'โบ', "smiley"),
+ (0x2640, 'โ', "gender-female"),
+ (0x2642, 'โ', "gender-male"),
+ (0x2654, 'โ', "chess-white-king"),
+ (0x2655, 'โ', "chess-white-queen"),
+ (0x2656, 'โ', "chess-white-rook"),
+ (0x2657, 'โ', "chess-white-bishop"),
+ (0x2658, 'โ', "chess-white-knight"),
+ (0x2659, 'โ', "chess-white-pawn"),
+ (0x265A, 'โ', "chess-black-king"),
+ (0x265B, 'โ', "chess-black-queen"),
+ (0x265C, 'โ', "chess-black-rook"),
+ (0x265D, 'โ', "chess-black-bishop"),
+ (0x265E, 'โ', "chess-black-knight"),
+ (0x265F, 'โ', "chess-black-pawn"),
+ (0x2660, 'โ ', "spades"),
+ (0x2661, 'โก', "heart-open"),
+ (0x2663, 'โฃ', "clubs"),
+ (0x2665, 'โฅ', "heart"),
+ (0x2666, 'โฆ', "diamonds"),
+ (0x2669, 'โฉ', "music-quarter-note"),
+ (0x266A, 'โช', "music-eighth-note"),
+ (0x266B, 'โซ', "music-eigth-notes"),
+ (0x266C, 'โฌ', "music-sixteenth-notes"),
+ (0x267B, 'โป', "recycle"),
+ (0x267E, 'โพ', "permanent-paper"),
+ (0x267F, 'โฟ', "wheelchair"),
+ (0x2690, 'โ', "flag-open"),
+ (0x2691, 'โ', "flag"),
+ (0x2692, 'โ', "hammer-and-pick"),
+ (0x2693, 'โ', "anchor"),
+ (0x2694, 'โ', "crossed-swords"),
+ (0x2695, 'โ', "asclepius"),
+ (0x2696, 'โ', "scales"),
+ (0x2698, 'โ', "flower"),
+ (0x2699, 'โ', "gear"),
+ (0x269B, 'โ', "atom"),
+ (0x269C, 'โ', "fleur-de-lis"),
+ (0x26A0, 'โ ', "warning"),
+ (0x26A1, 'โก', "bolt"),
+ (0x26A2, 'โข', "gender-female-female"),
+ (0x26A3, 'โฃ', "gender-male-male"),
+ (0x26A4, 'โค', "gender-male-female"),
+ (0x26A6, 'โฆ', "gender-transgender"),
+ (0x26A7, 'โง', "gender-non-binary"),
+ (0x26B0, 'โฐ', "coffin"),
+ (0x26BD, 'โฝ', "football-soccer"),
+ (0x26BE, 'โพ', "baseball"),
+ (0x26C3, 'โ', "database"),
+ (0x26CF, 'โ', "pick"),
+ (0x26D3, 'โ', "dna"),
+ (0x26D4, 'โ', "no-entry"),
+ (0x26E4, 'โค', "pentagram"),
+ (0x26E7, 'โง', "pentagram-inverted"),
+ (0x26E8, 'โจ', "shield-with-cross"),
+ (0x26E9, 'โฉ', "temple"),
+ (0x26EA, 'โช', "church"),
+ (0x26ED, 'โญ', "gear-no-hub"),
+ (0x26F1, 'โฑ', "beach"),
+ (0x26F2, 'โฒ', "fountain"),
+ (0x26F6, 'โถ', "four-corners"),
+ (0x26F7, 'โท', "skier"),
+ (0x26F8, 'โธ', "ice-skater"),
+ (0x26FA, 'โบ', "tent"),
+ (0x26FC, 'โผ', "headstone"),
+ (0x26FD, 'โฝ', "fuel-pump"),
+ (0x2702, 'โ', "scissors"),
+ (0x2706, 'โ', "phone-location"),
+ (0x2707, 'โ', "film-reel"),
+ (0x2708, 'โ', "airplane"),
+ (0x2709, 'โ', "envelope"),
+ (0x270A, 'โ', "hand-fist"),
+ (0x270B, 'โ', "hand"),
+ (0x270F, 'โ', "pencil"),
+ (0x2714, 'โ', "check"),
+ (0x2716, 'โ', "multiply"),
+ (0x271A, 'โ', "plus"),
+ (0x271D, 'โ', "latin-cross"),
+ (0x271F, 'โ', "latin-cross-outline"),
+ (0x2720, 'โ ', "maltese-cross"),
+ (0x2721, 'โก', "star-of-david"),
+ (0x272A, 'โช', "star-circled"),
+ (0x2731, 'โฑ', "asterisk-six"),
+ (0x2734, 'โด', "star-eight-points"),
+ (0x273F, 'โฟ', "black-florette"),
+ (0x2740, 'โ', "florette"),
+ (0x2744, 'โ', "snowflake"),
+ (0x2765, 'โฅ', "heart-tilted"),
+ (0x2796, 'โ', "minus"),
+ (0x2797, 'โ', "divide"),
+ (0x27A1, 'โก', "arrow-right"),
+ (0x27F2, 'โฒ', "rotate-cw-side"),
+ (0x27F3, 'โณ', "rotate-ccw-side"),
+ (0x2B05, 'โฌ
', "arrow-left"),
+ (0x2B06, 'โฌ', "arrow-up"),
+ (0x2B07, 'โฌ', "arrow-down"),
+ (0x2B08, 'โฌ', "arrow-up-right"),
+ (0x2B09, 'โฌ', "arrow-up-left"),
+ (0x2B0A, 'โฌ', "arrow-down-right"),
+ (0x2B0B, 'โฌ', "arrow-down-left"),
+ (0x2B0C, 'โฌ', "arrow-left-right"),
+ (0x2B0D, 'โฌ', "arrow-up-down"),
+ (0x2B1F, 'โฌ', "pentagon"),
+ (0x2B23, 'โฌฃ', "hexagon"),
+ (0x2B88, 'โฎ', "circle-arrow-left"),
+ (0x2B89, 'โฎ', "circle-arrow-up"),
+ (0x2B8A, 'โฎ', "circle-arrow-right"),
+ (0x2B8B, 'โฎ', "circle-arrow-down"),
+ (0x2BA8, 'โฎจ', "arrow-reply"),
+ (0x2BA9, 'โฎฉ', "arrow-forward"),
+ (0x2BAA, 'โฎช', "arrow-undo"),
+ (0x2BAB, 'โฎซ', "arrow-redo"),
+ (0xE600, '๎', "web-dribbble"),
+ (0xE601, '๎', "web-stackoverflow"),
+ (0xE602, '๎', "web-vimeo"),
+ (0xE603, '๎', "web-twitter"),
+ (0xE604, '๎', "web-facebook"),
+ (0xE605, '๎
', "web-googleplus"),
+ (0xE606, '๎', "web-pinterest"),
+ (0xE607, '๎', "web-tumblr"),
+ (0xE608, '๎', "web-linkedin"),
+ (0xE60A, '๎', "web-stumbleupon"),
+ (0xE60B, '๎', "web-lastfm"),
+ (0xE60C, '๎', "web-rdio"),
+ (0xE60D, '๎', "web-spotify"),
+ (0xE60E, '๎', "web-qq"),
+ (0xE60F, '๎', "web-instagram"),
+ (0xE610, '๎', "web-dropbox"),
+ (0xE611, '๎', "web-evernote"),
+ (0xE612, '๎', "web-flattr"),
+ (0xE613, '๎', "web-skype"),
+ (0xE614, '๎', "web-renren"),
+ (0xE615, '๎', "web-sina-weibo"),
+ (0xE616, '๎', "web-paypal"),
+ (0xE617, '๎', "web-picasa"),
+ (0xE618, '๎', "os-android"),
+ (0xE619, '๎', "web-mixi"),
+ (0xE61A, '๎', "web-behance"),
+ (0xE61B, '๎', "web-circles"),
+ (0xE61C, '๎', "web-vk"),
+ (0xE61D, '๎', "web-smashing"),
+ (0xE61E, '๎', "web-forrst"),
+ (0xE61F, '๎', "os-windows"),
+ (0xE620, '๎ ', "web-flickr"),
+ (0xE621, '๎ก', "web-picassa"),
+ (0xE622, '๎ข', "web-deviantart"),
+ (0xE623, '๎ฃ', "web-steam"),
+ (0xE624, '๎ค', "web-github"),
+ (0xE625, '๎ฅ', "web-git"),
+ (0xE626, '๎ฆ', "web-blogger"),
+ (0xE627, '๎ง', "web-soundcloud"),
+ (0xE628, '๎จ', "web-reddit"),
+ (0xE629, '๎ฉ', "web-delicious"),
+ (0xE62A, '๎ช', "browser-chrome"),
+ (0xE62B, '๎ซ', "browser-firefox"),
+ (0xE62C, '๎ฌ', "browser-ie"),
+ (0xE62D, '๎ญ', "browser-opera"),
+ (0xE62E, '๎ฎ', "browser-safari"),
+ (0xE62F, '๎ฏ', "web-google-drive"),
+ (0xE630, '๎ฐ', "web-wordpress"),
+ (0xE631, '๎ฑ', "web-joomla"),
+ (0xE632, '๎ฒ', "lastfm"),
+ (0xE633, '๎ณ', "web-foursquare"),
+ (0xE634, '๎ด', "web-yelp"),
+ (0xE635, '๎ต', "web-drupal"),
+ (0xE636, '๎ถ', "youtube"),
+ (0xF189, '๏', "vk"),
+ (0xF1A6, '๏ฆ', "digg"),
+ (0xF1CA, '๏', "web-vine"),
+ (0xF8FF, '๏ฃฟ', "os-apple"),
+ (0xFE5C, '๏น', "brace-right"),
+ (0xFF01, '๏ผ', "exclamation-mark"),
+ (0xFF03, '๏ผ', "number"),
+ (0xFF04, '๏ผ', "currency-dollar"),
+ (0xFF05, '๏ผ
', "percent"),
+ (0xFF06, '๏ผ', "ampersand"),
+ (0xFF08, '๏ผ', "parenthesis-left"),
+ (0xFF09, '๏ผ', "parenthesis-right"),
+ (0xFF0A, '๏ผ', "asterisk-five"),
+ (0xFF10, '๏ผ', "digit-zero"),
+ (0xFF11, '๏ผ', "digit-one"),
+ (0xFF12, '๏ผ', "digit-two"),
+ (0xFF13, '๏ผ', "digit-three"),
+ (0xFF14, '๏ผ', "digit-four"),
+ (0xFF15, '๏ผ', "digit-five"),
+ (0xFF16, '๏ผ', "digit-six"),
+ (0xFF17, '๏ผ', "digit-seven"),
+ (0xFF18, '๏ผ', "digit-eight"),
+ (0xFF19, '๏ผ', "digit-nine"),
+ (0xFF1F, '๏ผ', "question-mark"),
+ (0xFF20, '๏ผ ', "at-symbol"),
+ (0xFF21, '๏ผก', "letter-A"),
+ (0xFF22, '๏ผข', "letter-B"),
+ (0xFF23, '๏ผฃ', "letter-C"),
+ (0xFF24, '๏ผค', "letter-D"),
+ (0xFF25, '๏ผฅ', "letter-E"),
+ (0xFF26, '๏ผฆ', "letter-F"),
+ (0xFF27, '๏ผง', "letter-G"),
+ (0xFF28, '๏ผจ', "letter-H"),
+ (0xFF29, '๏ผฉ', "letter-I"),
+ (0xFF2A, '๏ผช', "letter-J"),
+ (0xFF2B, '๏ผซ', "letter-K"),
+ (0xFF2C, '๏ผฌ', "letter-L"),
+ (0xFF2D, '๏ผญ', "letter-M"),
+ (0xFF2E, '๏ผฎ', "letter-N"),
+ (0xFF2F, '๏ผฏ', "letter-O"),
+ (0xFF30, '๏ผฐ', "letter-P"),
+ (0xFF31, '๏ผฑ', "letter-Q"),
+ (0xFF32, '๏ผฒ', "letter-R"),
+ (0xFF33, '๏ผณ', "stack-window"),
+ (0xFF34, '๏ผด', "letter-S"),
+ (0xFF35, '๏ผต', "letter-T"),
+ (0xFF36, '๏ผถ', "letter-U"),
+ (0xFF37, '๏ผท', "letter-V"),
+ (0xFF38, '๏ผธ', "letter-W"),
+ (0xFF39, '๏ผน', "letter-X"),
+ (0xFF3A, '๏ผบ', "letter-Z"),
+ (0xFF3B, '๏ผป', "square-bracket-left"),
+ (0xFF3C, '๏ผผ', "at"),
+ (0xFF3D, '๏ผฝ', "square-bracket-right"),
+ (0xFF41, '๏ฝ', "letter-a"),
+ (0xFF42, '๏ฝ', "letter-b"),
+ (0xFF43, '๏ฝ', "letter-c"),
+ (0xFF44, '๏ฝ', "letter-d"),
+ (0xFF45, '๏ฝ
', "letter-e"),
+ (0xFF46, '๏ฝ', "letter-f"),
+ (0xFF47, '๏ฝ', "letter-g"),
+ (0xFF48, '๏ฝ', "letter-h"),
+ (0xFF49, '๏ฝ', "letter-i"),
+ (0xFF4A, '๏ฝ', "letter-j"),
+ (0xFF4B, '๏ฝ', "letter-k"),
+ (0xFF4C, '๏ฝ', "letter-l"),
+ (0xFF4D, '๏ฝ', "letter-m"),
+ (0xFF4E, '๏ฝ', "letter-n"),
+ (0xFF4F, '๏ฝ', "letter-o"),
+ (0xFF50, '๏ฝ', "letter-p"),
+ (0xFF51, '๏ฝ', "letter-q"),
+ (0xFF52, '๏ฝ', "letter-r"),
+ (0xFF53, '๏ฝ', "letter-s"),
+ (0xFF54, '๏ฝ', "letter-t"),
+ (0xFF55, '๏ฝ', "letter-u"),
+ (0xFF56, '๏ฝ', "letter-v"),
+ (0xFF57, '๏ฝ', "letter-w"),
+ (0xFF58, '๏ฝ', "letter-x"),
+ (0xFF59, '๏ฝ', "letter-y"),
+ (0xFF5A, '๏ฝ', "letter-z"),
+ (0xFF5B, '๏ฝ', "brace-left"),
+ (0xFFE1, '๏ฟก', "currency-pound"),
+ (0xFFE5, '๏ฟฅ', "yen"),
+ (0x1D11E, '๐', "g-clef"),
+ (0x1F0A1, '๐ก', "ace-of-spades"),
+ (0x1F0B1, '๐ฑ', "ace-of-hearts"),
+ (0x1F0C1, '๐', "ace-of-diamonds"),
+ (0x1F0D1, '๐', "ace-of-clubs"),
+ (0x1F308, '๐', "rainbow"),
+ (0x1F30A, '๐', "water-wave"),
+ (0x1F30D, '๐', "globe2"),
+ (0x1F310, '๐', "globe-meridians"),
+ (0x1F311, '๐', "moon-new"),
+ (0x1F312, '๐', "moon-waxing-crescent"),
+ (0x1F313, '๐', "moon-first-quarter"),
+ (0x1F314, '๐', "moon-waxing-gibbous"),
+ (0x1F315, '๐', "moon-full"),
+ (0x1F316, '๐', "moon-waning-gibbous"),
+ (0x1F317, '๐', "moon-last-quarter"),
+ (0x1F318, '๐', "moon-waning-crescent"),
+ (0x1F320, '๐ ', "star-shooting"),
+ (0x1F332, '๐ฒ', "tree-pine"),
+ (0x1F333, '๐ณ', "tree"),
+ (0x1F334, '๐ด', "tree-palm"),
+ (0x1F335, '๐ต', "cactus"),
+ (0x1F33F, '๐ฟ', "herb"),
+ (0x1F340, '๐', "four-leaf-clover"),
+ (0x1F341, '๐', "maple-leaf"),
+ (0x1F342, '๐', "leaf"),
+ (0x1F344, '๐', "mushroom"),
+ (0x1F345, '๐
', "tomato3"),
+ (0x1F347, '๐', "grapes"),
+ (0x1F34B, '๐', "lemon"),
+ (0x1F34E, '๐', "apple"),
+ (0x1F350, '๐', "pear"),
+ (0x1F354, '๐', "food-hamburger"),
+ (0x1F355, '๐', "food-pizza"),
+ (0x1F357, '๐', "chicken-leg"),
+ (0x1F359, '๐', "rice-ball"),
+ (0x1F35A, '๐', "food-rice"),
+ (0x1F35C, '๐', "steaming-bowl"),
+ (0x1F35D, '๐', "food-spaghetti"),
+ (0x1F35E, '๐', "bread"),
+ (0x1F35F, '๐', "fries"),
+ (0x1F363, '๐ฃ', "sushi"),
+ (0x1F368, '๐จ', "food-ice-cream"),
+ (0x1F369, '๐ฉ', "donut"),
+ (0x1F36A, '๐ช', "gingerbread"),
+ (0x1F36C, '๐ฌ', "candy"),
+ (0x1F36D, '๐ญ', "lollipop"),
+ (0x1F372, '๐ฒ', "pot-food"),
+ (0x1F373, '๐ณ', "cooking"),
+ (0x1F374, '๐ด', "fork-knife"),
+ (0x1F377, '๐ท', "drink-wine"),
+ (0x1F378, '๐ธ', "drink-cocktail"),
+ (0x1F379, '๐น', "drink-tropical"),
+ (0x1F37A, '๐บ', "drink-beer"),
+ (0x1F37C, '๐ผ', "baby-bottle"),
+ (0x1F37D, '๐ฝ', "fork-knife-plate"),
+ (0x1F381, '๐', "gift"),
+ (0x1F382, '๐', "cake"),
+ (0x1F383, '๐', "jack-o-lantern"),
+ (0x1F384, '๐', "christmas-tree"),
+ (0x1F385, '๐
', "face-santa-claus"),
+ (0x1F386, '๐', "fireworks"),
+ (0x1F388, '๐', "balloon"),
+ (0x1F393, '๐', "graduation"),
+ (0x1F396, '๐', "medal-military"),
+ (0x1F39E, '๐', "film"),
+ (0x1F39F, '๐', "ticket"),
+ (0x1F3A1, '๐ก', "ferris-wheel"),
+ (0x1F3A2, '๐ข', "rollercoaster"),
+ (0x1F3A4, '๐ค', "microphone"),
+ (0x1F3A5, '๐ฅ', "camera-movie"),
+ (0x1F3A6, '๐ฆ', "cinema"),
+ (0x1F3A7, '๐ง', "headphone"),
+ (0x1F3A8, '๐จ', "palette"),
+ (0x1F3A9, '๐ฉ', "tophat"),
+ (0x1F3AA, '๐ช', "circus"),
+ (0x1F3AC, '๐ฌ', "movie"),
+ (0x1F3AD, '๐ญ', "performing-arts"),
+ (0x1F3AE, '๐ฎ', "videogame"),
+ (0x1F3AF, '๐ฏ', "target"),
+ (0x1F3B0, '๐ฐ', "slot-machine"),
+ (0x1F3B1, '๐ฑ', "billiards"),
+ (0x1F3B2, '๐ฒ', "die"),
+ (0x1F3B3, '๐ณ', "bowling"),
+ (0x1F3B7, '๐ท', "saxophone"),
+ (0x1F3B8, '๐ธ', "guitar"),
+ (0x1F3B9, '๐น', "piano"),
+ (0x1F3BA, '๐บ', "music-trumpet"),
+ (0x1F3BB, '๐ป', "music-violin"),
+ (0x1F3BE, '๐พ', "tennis"),
+ (0x1F3C1, '๐', "flag-checkered"),
+ (0x1F3C2, '๐', "snowboarding"),
+ (0x1F3C3, '๐', "running"),
+ (0x1F3C5, '๐
', "medal-sports"),
+ (0x1F3C6, '๐', "trophy"),
+ (0x1F3C8, '๐', "football-american"),
+ (0x1F3CA, '๐', "swimming"),
+ (0x1F3CB, '๐', "weighlifting"),
+ (0x1F3CD, '๐', "motorbike"),
+ (0x1F3E0, '๐ ', "home"),
+ (0x1F3E1, '๐ก', "volume-mute"),
+ (0x1F3E2, '๐ข', "building"),
+ (0x1F3E6, '๐ฆ', "bank"),
+ (0x1F3E8, '๐จ', "hotel"),
+ (0x1F3EA, '๐ช', "convenience-store"),
+ (0x1F3EB, '๐ซ', "school"),
+ (0x1F3ED, '๐ญ', "factory"),
+ (0x1F3F0, '๐ฐ', "castle"),
+ (0x1F3F7, '๐ท', "label"),
+ (0x1F404, '๐', "animal-cow"),
+ (0x1F407, '๐', "animal-rabbit"),
+ (0x1F408, '๐', "animal-cat"),
+ (0x1F40C, '๐', "animal-snail"),
+ (0x1F40D, '๐', "snake"),
+ (0x1F40E, '๐', "animal-horse"),
+ (0x1F410, '๐', "animal-goat"),
+ (0x1F413, '๐', "animal-rooster"),
+ (0x1F414, '๐', "food-chicken"),
+ (0x1F416, '๐', "animal-pig"),
+ (0x1F41B, '๐', "animal-bug"),
+ (0x1F41C, '๐', "animal-ant"),
+ (0x1F427, '๐ง', "linux"),
+ (0x1F42A, '๐ช', "animal-dromedary-camel"),
+ (0x1F42B, '๐ซ', "animal-bactrian-camel"),
+ (0x1F42C, '๐ฌ', "animal-dolphin"),
+ (0x1F431, '๐ฑ', "face-kitty"),
+ (0x1F435, '๐ต', "face-monkey"),
+ (0x1F436, '๐ถ', "face-chihuahua"),
+ (0x1F439, '๐น', "face-hamster"),
+ (0x1F43B, '๐ป', "face-bear"),
+ (0x1F43C, '๐ผ', "panda"),
+ (0x1F43E, '๐พ', "paw-prints"),
+ (0x1F441, '๐', "eye"),
+ (0x1F442, '๐', "ear"),
+ (0x1F44D, '๐', "thumbs-up"),
+ (0x1F44E, '๐', "thumbs-down"),
+ (0x1F451, '๐', "crown"),
+ (0x1F453, '๐', "eyeglasses"),
+ (0x1F454, '๐', "outfit-necktie"),
+ (0x1F455, '๐', "outfit-shirt"),
+ (0x1F457, '๐', "outfit-dress"),
+ (0x1F459, '๐', "outfit-bikini"),
+ (0x1F45B, '๐', "purse"),
+ (0x1F45C, '๐', "handbag"),
+ (0x1F460, '๐ ', "high-heeled-shoes"),
+ (0x1F461, '๐ก', "sandals"),
+ (0x1F463, '๐ฃ', "footprints"),
+ (0x1F464, '๐ค', "user"),
+ (0x1F465, '๐ฅ', "users"),
+ (0x1F466, '๐ฆ', "face-boy"),
+ (0x1F467, '๐ง', "face-girl"),
+ (0x1F468, '๐จ', "face-man"),
+ (0x1F469, '๐ฉ', "face-woman"),
+ (0x1F46A, '๐ช', "family"),
+ (0x1F46B, '๐ซ', "man-and-woman"),
+ (0x1F46C, '๐ฌ', "man-and-man"),
+ (0x1F46D, '๐ญ', "woman-and-woman"),
+ (0x1F473, '๐ณ', "face-man-with-turban"),
+ (0x1F474, '๐ด', "face-old-chinese-man"),
+ (0x1F476, '๐ถ', "face-baby"),
+ (0x1F477, '๐ท', "construction-worker"),
+ (0x1F478, '๐ธ', "face-princess"),
+ (0x1F47B, '๐ป', "ghost"),
+ (0x1F47D, '๐ฝ', "alien"),
+ (0x1F47F, '๐ฟ', "imp"),
+ (0x1F480, '๐', "skull"),
+ (0x1F481, '๐', "face-callcenter"),
+ (0x1F482, '๐', "guard"),
+ (0x1F483, '๐', "dancing"),
+ (0x1F484, '๐', "lipstick"),
+ (0x1F489, '๐', "syringe"),
+ (0x1F48A, '๐', "pill"),
+ (0x1F48B, '๐', "kiss"),
+ (0x1F48D, '๐', "ring"),
+ (0x1F48E, '๐', "diamond"),
+ (0x1F490, '๐', "bouquet"),
+ (0x1F493, '๐', "heart-beating"),
+ (0x1F494, '๐', "heart-broken"),
+ (0x1F495, '๐', "hearts"),
+ (0x1F498, '๐', "heart-with-arrow"),
+ (0x1F49D, '๐', "heart-ribbon"),
+ (0x1F4A1, '๐ก', "lightbulb"),
+ (0x1F4A3, '๐ฃ', "bomb"),
+ (0x1F4A5, '๐ฅ', "explosion"),
+ (0x1F4A7, '๐ง', "droplet"),
+ (0x1F4AC, '๐ฌ', "speech-bubble"),
+ (0x1F4B0, '๐ฐ', "money-bag"),
+ (0x1F4B1, '๐ฑ', "currency-exchange"),
+ (0x1F4B3, '๐ณ', "creditcard"),
+ (0x1F4B5, '๐ต', "banknote"),
+ (0x1F4BA, '๐บ', "chair"),
+ (0x1F4BB, '๐ป', "laptop"),
+ (0x1F4BC, '๐ผ', "suitcase"),
+ (0x1F4BE, '๐พ', "floppy"),
+ (0x1F4BF, '๐ฟ', "disk"),
+ (0x1F4C5, '๐
', "calendar-month"),
+ (0x1F4C6, '๐', "calendar-day"),
+ (0x1F4C8, '๐', "chart-up"),
+ (0x1F4C9, '๐', "chart-down"),
+ (0x1F4CA, '๐', "chart"),
+ (0x1F4CB, '๐', "clipboard"),
+ (0x1F4CC, '๐', "pushpin"),
+ (0x1F4CE, '๐', "paperclip"),
+ (0x1F4CF, '๐', "ruler2"),
+ (0x1F4D0, '๐', "ruler"),
+ (0x1F4D2, '๐', "addressbook"),
+ (0x1F4D3, '๐', "notebook"),
+ (0x1F4D5, '๐', "book"),
+ (0x1F4D6, '๐', "book-open"),
+ (0x1F4DA, '๐', "books"),
+ (0x1F4DE, '๐', "phone-receiver"),
+ (0x1F4DF, '๐', "pager"),
+ (0x1F4E1, '๐ก', "satellite-disk"),
+ (0x1F4E4, '๐ค', "outbox"),
+ (0x1F4E5, '๐ฅ', "inbox"),
+ (0x1F4F0, '๐ฐ', "newspaper"),
+ (0x1F4F1, '๐ฑ', "phone-mobile"),
+ (0x1F4F7, '๐ท', "photo-camera"),
+ (0x1F4F8, '๐ธ', "photo-camera-flash"),
+ (0x1F4F9, '๐น', "video-camera"),
+ (0x1F4FA, '๐บ', "television"),
+ (0x1F4FB, '๐ป', "radio"),
+ (0x1F4FD, '๐ฝ', "projector"),
+ (0x1F4FE, '๐พ', "music-player"),
+ (0x1F500, '๐', "shuffle"),
+ (0x1F501, '๐', "loop"),
+ (0x1F503, '๐', "loop-alt"),
+ (0x1F506, '๐', "brightness"),
+ (0x1F508, '๐', "volume"),
+ (0x1F509, '๐', "volume-low"),
+ (0x1F50A, '๐', "volume-high"),
+ (0x1F50B, '๐', "battery"),
+ (0x1F50C, '๐', "electric-cord"),
+ (0x1F50D, '๐', "search-left"),
+ (0x1F50E, '๐', "search-right"),
+ (0x1F50F, '๐', "lock"),
+ (0x1F511, '๐', "key"),
+ (0x1F513, '๐', "lock-open"),
+ (0x1F514, '๐', "bell"),
+ (0x1F516, '๐', "bookmark"),
+ (0x1F517, '๐', "link"),
+ (0x1F518, '๐', "radio-checked"),
+ (0x1F525, '๐ฅ', "fire"),
+ (0x1F526, '๐ฆ', "flashlight"),
+ (0x1F527, '๐ง', "wrench"),
+ (0x1F528, '๐จ', "hammer"),
+ (0x1F529, '๐ฉ', "nut-and-bolt"),
+ (0x1F52A, '๐ช', "knife"),
+ (0x1F52B, '๐ซ', "pistol"),
+ (0x1F52C, '๐ฌ', "microscope"),
+ (0x1F52D, '๐ญ', "telescope"),
+ (0x1F542, '๐', "cross-pommee"),
+ (0x1F548, '๐', "celtic-cross"),
+ (0x1F549, '๐', "om"),
+ (0x1F54A, '๐', "peace-dove"),
+ (0x1F553, '๐', "clock"),
+ (0x1F56B, '๐ซ', "bullhorn"),
+ (0x1F56F, '๐ฏ', "candle"),
+ (0x1F571, '๐ฑ', "death"),
+ (0x1F575, '๐ต', "spy"),
+ (0x1F576, '๐ถ', "sunglasses"),
+ (0x1F577, '๐ท', "spider"),
+ (0x1F578, '๐ธ', "spider7-web"),
+ (0x1F579, '๐น', "joystick"),
+ (0x1F583, '๐', "envelope-stamped"),
+ (0x1F58A, '๐', "pen"),
+ (0x1F5A5, '๐ฅ', "pc-desktop"),
+ (0x1F5A7, '๐ง', "computer-network"),
+ (0x1F5A9, '๐ฉ', "calculator"),
+ (0x1F5AD, '๐ญ', "tape"),
+ (0x1F5AE, '๐ฎ', "keyboard"),
+ (0x1F5B1, '๐ฑ', "mouse"),
+ (0x1F5B3, '๐ณ', "pc-old"),
+ (0x1F5B4, '๐ด', "hard-disk"),
+ (0x1F5B5, '๐ต', "monitor"),
+ (0x1F5B6, '๐ถ', "printer"),
+ (0x1F5B9, '๐น', "file-text"),
+ (0x1F5BB, '๐ป', "file-image"),
+ (0x1F5BC, '๐ผ', "picture"),
+ (0x1F5C0, '๐', "folder"),
+ (0x1F5C1, '๐', "folder-open"),
+ (0x1F5C4, '๐', "cabinet"),
+ (0x1F5CA, '๐', "notepad"),
+ (0x1F5CB, '๐', "file"),
+ (0x1F5D0, '๐', "copy"),
+ (0x1F5D1, '๐', "garbage-can"),
+ (0x1F5D5, '๐', "minimize"),
+ (0x1F5D6, '๐', "maximize-window"),
+ (0x1F5D9, '๐', "cancel"),
+ (0x1F5DB, '๐', "font-size"),
+ (0x1F5DD, '๐', "key-alt"),
+ (0x1F5E0, '๐ ', "chart-line"),
+ (0x1F5E1, '๐ก', "dagger"),
+ (0x1F5FA, '๐บ', "world-map"),
+ (0x1F603, '๐', "smiley-happy"),
+ (0x1F604, '๐', "smiley-grin"),
+ (0x1F608, '๐', "smiley-evil"),
+ (0x1F60E, '๐', "smiley-cool"),
+ (0x1F680, '๐', "rocket"),
+ (0x1F68C, '๐', "bus"),
+ (0x1F68D, '๐', "bus-front"),
+ (0x1F697, '๐', "car"),
+ (0x1F698, '๐', "car-front"),
+ (0x1F69A, '๐', "truck"),
+ (0x1F6A6, '๐ฆ', "traffic-light"),
+ (0x1F6AB, '๐ซ', "forbidden"),
+ (0x1F6AC, '๐ฌ', "smoking"),
+ (0x1F6AD, '๐ญ', "smoking-forbidden"),
+ (0x1F6B2, '๐ฒ', "bicycle"),
+ (0x1F6B4, '๐ด', "bicyclist"),
+ (0x1F6B6, '๐ถ', "pedestrian"),
+ (0x1F6BB, '๐ป', "restroom"),
+ (0x1F6BC, '๐ผ', "baby"),
+ (0x1F6C2, '๐', "passport-control"),
+ (0x1F6C5, '๐
', "left-luggage"),
+ (0x1F6E0, '๐ ', "hammer-wrench"),
+ (0x1F6E1, '๐ก', "shield"),
+];
+
+#[rustfmt::skip]
+pub const NOTO_EMOJI_LIST: &[(u32, char, &str)] = &[
+ (0xA9, 'ยฉ', "copyright sign"),
+ (0xAE, 'ยฎ', "registered sign"),
+ (0x203C, 'โผ', "double exclamation mark"),
+ (0x2049, 'โ', "exclamation question mark"),
+ (0x20E3, 'โฃ', "combining enclosing keycap"),
+ (0x2122, 'โข', "trade mark sign"),
+ (0x2139, 'โน', "information source"),
+ (0x2194, 'โ', "left right arrow"),
+ (0x2195, 'โ', "up down arrow"),
+ (0x2196, 'โ', "north west arrow"),
+ (0x2197, 'โ', "north east arrow"),
+ (0x2198, 'โ', "south east arrow"),
+ (0x2199, 'โ', "south west arrow"),
+ (0x21A9, 'โฉ', "leftwards arrow with hook"),
+ (0x21AA, 'โช', "rightwards arrow with hook"),
+ (0x231A, 'โ', "watch"),
+ (0x231B, 'โ', "hourglass"),
+ (0x23E9, 'โฉ', "black right-pointing double triangle"),
+ (0x23EA, 'โช', "black left-pointing double triangle"),
+ (0x23EB, 'โซ', "black up-pointing double triangle"),
+ (0x23EC, 'โฌ', "black down-pointing double triangle"),
+ (0x23F0, 'โฐ', "alarm clock"),
+ (0x23F3, 'โณ', "hourglass with flowing sand"),
+ (0x24C2, 'โ', "circled latin capital letter m"),
+ (0x25AA, 'โช', "black small square"),
+ (0x25AB, 'โซ', "white small square"),
+ (0x25B6, 'โถ', "black right-pointing triangle"),
+ (0x25C0, 'โ', "black left-pointing triangle"),
+ (0x25CA, 'โ', "lozenge"),
+ (0x25FB, 'โป', "white medium square"),
+ (0x25FC, 'โผ', "black medium square"),
+ (0x25FD, 'โฝ', "white medium small square"),
+ (0x25FE, 'โพ', "black medium small square"),
+ (0x2600, 'โ', "black sun with rays"),
+ (0x2601, 'โ', "cloud"),
+ (0x260E, 'โ', "black telephone"),
+ (0x2611, 'โ', "ballot box with check"),
+ (0x2614, 'โ', "umbrella with rain drops"),
+ (0x2615, 'โ', "hot beverage"),
+ (0x261D, 'โ', "white up pointing index"),
+ (0x263A, 'โบ', "white smiling face"),
+ (0x2648, 'โ', "aries"),
+ (0x2649, 'โ', "taurus"),
+ (0x264A, 'โ', "gemini"),
+ (0x264B, 'โ', "cancer"),
+ (0x264C, 'โ', "leo"),
+ (0x264D, 'โ', "virgo"),
+ (0x264E, 'โ', "libra"),
+ (0x264F, 'โ', "scorpius"),
+ (0x2650, 'โ', "sagittarius"),
+ (0x2651, 'โ', "capricorn"),
+ (0x2652, 'โ', "aquarius"),
+ (0x2653, 'โ', "pisces"),
+ (0x2660, 'โ ', "black spade suit"),
+ (0x2663, 'โฃ', "black club suit"),
+ (0x2665, 'โฅ', "black heart suit"),
+ (0x2666, 'โฆ', "black diamond suit"),
+ (0x2668, 'โจ', "hot springs"),
+ (0x267B, 'โป', "black universal recycling symbol"),
+ (0x267F, 'โฟ', "wheelchair symbol"),
+ (0x2693, 'โ', "anchor"),
+ (0x26A0, 'โ ', "warning sign"),
+ (0x26A1, 'โก', "high voltage sign"),
+ (0x26AA, 'โช', "medium white circle"),
+ (0x26AB, 'โซ', "medium black circle"),
+ (0x26BD, 'โฝ', "soccer ball"),
+ (0x26BE, 'โพ', "baseball"),
+ (0x26C4, 'โ', "snowman without snow"),
+ (0x26C5, 'โ
', "sun behind cloud"),
+ (0x26CE, 'โ', "ophiuchus"),
+ (0x26D4, 'โ', "no entry"),
+ (0x26EA, 'โช', "church"),
+ (0x26F2, 'โฒ', "fountain"),
+ (0x26F3, 'โณ', "flag in hole"),
+ (0x26F5, 'โต', "sailboat"),
+ (0x26FA, 'โบ', "tent"),
+ (0x26FD, 'โฝ', "fuel pump"),
+ (0x2702, 'โ', "black scissors"),
+ (0x2705, 'โ
', "white heavy check mark"),
+ (0x2708, 'โ', "airplane"),
+ (0x2709, 'โ', "envelope"),
+ (0x270A, 'โ', "raised fist"),
+ (0x270B, 'โ', "raised hand"),
+ (0x270C, 'โ', "victory hand"),
+ (0x270F, 'โ', "pencil"),
+ (0x2712, 'โ', "black nib"),
+ (0x2714, 'โ', "heavy check mark"),
+ (0x2716, 'โ', "heavy multiplication x"),
+ (0x2728, 'โจ', "sparkles"),
+ (0x2733, 'โณ', "eight spoked asterisk"),
+ (0x2734, 'โด', "eight pointed black star"),
+ (0x2744, 'โ', "snowflake"),
+ (0x2747, 'โ', "sparkle"),
+ (0x274C, 'โ', "cross mark"),
+ (0x274E, 'โ', "negative squared cross mark"),
+ (0x2753, 'โ', "black question mark ornament"),
+ (0x2754, 'โ', "white question mark ornament"),
+ (0x2755, 'โ', "white exclamation mark ornament"),
+ (0x2757, 'โ', "heavy exclamation mark symbol"),
+ (0x2764, 'โค', "heavy black heart"),
+ (0x2795, 'โ', "heavy plus sign"),
+ (0x2796, 'โ', "heavy minus sign"),
+ (0x2797, 'โ', "heavy division sign"),
+ (0x27A1, 'โก', "black rightwards arrow"),
+ (0x27B0, 'โฐ', "curly loop"),
+ (0x27BF, 'โฟ', "double curly loop"),
+ (0x2934, 'โคด', "arrow pointing rightwards then curving upwards"),
+ (0x2935, 'โคต', "arrow pointing rightwards then curving downwards"),
+ (0x2B05, 'โฌ
', "leftwards black arrow"),
+ (0x2B06, 'โฌ', "upwards black arrow"),
+ (0x2B07, 'โฌ', "downwards black arrow"),
+ (0x2B1B, 'โฌ', "black large square"),
+ (0x2B1C, 'โฌ', "white large square"),
+ (0x2B50, 'โญ', "white medium star"),
+ (0x2B55, 'โญ', "heavy large circle"),
+ (0x3030, 'ใฐ', "wavy dash"),
+ (0x303D, 'ใฝ', "part alternation mark"),
+ (0x3297, 'ใ', "circled ideograph congratulation"),
+ (0x3299, 'ใ', "circled ideograph secret"),
+ (0x1F004, '๐', "mahjong tile red dragon"),
+ (0x1F0CF, '๐', "playing card black joker"),
+ (0x1F170, '๐
ฐ', "negative squared latin capital letter a"),
+ (0x1F171, '๐
ฑ', "negative squared latin capital letter b"),
+ (0x1F17E, '๐
พ', "negative squared latin capital letter o"),
+ (0x1F17F, '๐
ฟ', "negative squared latin capital letter p"),
+ (0x1F18E, '๐', "negative squared ab"),
+ (0x1F191, '๐', "squared cl"),
+ (0x1F192, '๐', "squared cool"),
+ (0x1F193, '๐', "squared free"),
+ (0x1F194, '๐', "squared id"),
+ (0x1F195, '๐', "squared new"),
+ (0x1F196, '๐', "squared ng"),
+ (0x1F197, '๐', "squared ok"),
+ (0x1F198, '๐', "squared sos"),
+ (0x1F199, '๐', "squared up with exclamation mark"),
+ (0x1F19A, '๐', "squared vs"),
+ (0x1F1E6, '๐ฆ', "regional indicator symbol letter a"),
+ (0x1F1E7, '๐ง', "regional indicator symbol letter b"),
+ (0x1F1E8, '๐จ', "regional indicator symbol letter c"),
+ (0x1F1E9, '๐ฉ', "regional indicator symbol letter d"),
+ (0x1F1EA, '๐ช', "regional indicator symbol letter e"),
+ (0x1F1EB, '๐ซ', "regional indicator symbol letter f"),
+ (0x1F1EC, '๐ฌ', "regional indicator symbol letter g"),
+ (0x1F1ED, '๐ญ', "regional indicator symbol letter h"),
+ (0x1F1EE, '๐ฎ', "regional indicator symbol letter i"),
+ (0x1F1EF, '๐ฏ', "regional indicator symbol letter j"),
+ (0x1F1F0, '๐ฐ', "regional indicator symbol letter k"),
+ (0x1F1F1, '๐ฑ', "regional indicator symbol letter l"),
+ (0x1F1F2, '๐ฒ', "regional indicator symbol letter m"),
+ (0x1F1F3, '๐ณ', "regional indicator symbol letter n"),
+ (0x1F1F4, '๐ด', "regional indicator symbol letter o"),
+ (0x1F1F5, '๐ต', "regional indicator symbol letter p"),
+ (0x1F1F6, '๐ถ', "regional indicator symbol letter q"),
+ (0x1F1F7, '๐ท', "regional indicator symbol letter r"),
+ (0x1F1F8, '๐ธ', "regional indicator symbol letter s"),
+ (0x1F1F9, '๐น', "regional indicator symbol letter t"),
+ (0x1F1FA, '๐บ', "regional indicator symbol letter u"),
+ (0x1F1FB, '๐ป', "regional indicator symbol letter v"),
+ (0x1F1FC, '๐ผ', "regional indicator symbol letter w"),
+ (0x1F1FD, '๐ฝ', "regional indicator symbol letter x"),
+ (0x1F1FE, '๐พ', "regional indicator symbol letter y"),
+ (0x1F1FF, '๐ฟ', "regional indicator symbol letter z"),
+ (0x1F201, '๐', "squared katakana koko"),
+ (0x1F202, '๐', "squared katakana sa"),
+ (0x1F21A, '๐', "squared cjk unified ideograph-7121"),
+ (0x1F22F, '๐ฏ', "squared cjk unified ideograph-6307"),
+ (0x1F232, '๐ฒ', "squared cjk unified ideograph-7981"),
+ (0x1F233, '๐ณ', "squared cjk unified ideograph-7a7a"),
+ (0x1F234, '๐ด', "squared cjk unified ideograph-5408"),
+ (0x1F235, '๐ต', "squared cjk unified ideograph-6e80"),
+ (0x1F236, '๐ถ', "squared cjk unified ideograph-6709"),
+ (0x1F237, '๐ท', "squared cjk unified ideograph-6708"),
+ (0x1F238, '๐ธ', "squared cjk unified ideograph-7533"),
+ (0x1F239, '๐น', "squared cjk unified ideograph-5272"),
+ (0x1F23A, '๐บ', "squared cjk unified ideograph-55b6"),
+ (0x1F250, '๐', "circled ideograph advantage"),
+ (0x1F251, '๐', "circled ideograph accept"),
+ (0x1F300, '๐', "cyclone"),
+ (0x1F301, '๐', "foggy"),
+ (0x1F302, '๐', "closed umbrella"),
+ (0x1F303, '๐', "night with stars"),
+ (0x1F304, '๐', "sunrise over mountains"),
+ (0x1F305, '๐
', "sunrise"),
+ (0x1F306, '๐', "cityscape at dusk"),
+ (0x1F307, '๐', "sunset over buildings"),
+ (0x1F308, '๐', "rainbow"),
+ (0x1F309, '๐', "bridge at night"),
+ (0x1F30A, '๐', "water wave"),
+ (0x1F30B, '๐', "volcano"),
+ (0x1F30C, '๐', "milky way"),
+ (0x1F30D, '๐', "earth globe europe-africa"),
+ (0x1F30E, '๐', "earth globe americas"),
+ (0x1F30F, '๐', "earth globe asia-australia"),
+ (0x1F310, '๐', "globe with meridians"),
+ (0x1F311, '๐', "new moon symbol"),
+ (0x1F312, '๐', "waxing crescent moon symbol"),
+ (0x1F313, '๐', "first quarter moon symbol"),
+ (0x1F314, '๐', "waxing gibbous moon symbol"),
+ (0x1F315, '๐', "full moon symbol"),
+ (0x1F316, '๐', "waning gibbous moon symbol"),
+ (0x1F317, '๐', "last quarter moon symbol"),
+ (0x1F318, '๐', "waning crescent moon symbol"),
+ (0x1F319, '๐', "crescent moon"),
+ (0x1F31A, '๐', "new moon with face"),
+ (0x1F31B, '๐', "first quarter moon with face"),
+ (0x1F31C, '๐', "last quarter moon with face"),
+ (0x1F31D, '๐', "full moon with face"),
+ (0x1F31E, '๐', "sun with face"),
+ (0x1F31F, '๐', "glowing star"),
+ (0x1F320, '๐ ', "shooting star"),
+ (0x1F330, '๐ฐ', "chestnut"),
+ (0x1F331, '๐ฑ', "seedling"),
+ (0x1F332, '๐ฒ', "evergreen tree"),
+ (0x1F333, '๐ณ', "deciduous tree"),
+ (0x1F334, '๐ด', "palm tree"),
+ (0x1F335, '๐ต', "cactus"),
+ (0x1F337, '๐ท', "tulip"),
+ (0x1F338, '๐ธ', "cherry blossom"),
+ (0x1F339, '๐น', "rose"),
+ (0x1F33A, '๐บ', "hibiscus"),
+ (0x1F33B, '๐ป', "sunflower"),
+ (0x1F33C, '๐ผ', "blossom"),
+ (0x1F33D, '๐ฝ', "ear of maize"),
+ (0x1F33E, '๐พ', "ear of rice"),
+ (0x1F33F, '๐ฟ', "herb"),
+ (0x1F340, '๐', "four leaf clover"),
+ (0x1F341, '๐', "maple leaf"),
+ (0x1F342, '๐', "fallen leaf"),
+ (0x1F343, '๐', "leaf fluttering in wind"),
+ (0x1F344, '๐', "mushroom"),
+ (0x1F345, '๐
', "tomato"),
+ (0x1F346, '๐', "aubergine"),
+ (0x1F347, '๐', "grapes"),
+ (0x1F348, '๐', "melon"),
+ (0x1F349, '๐', "watermelon"),
+ (0x1F34A, '๐', "tangerine"),
+ (0x1F34B, '๐', "lemon"),
+ (0x1F34C, '๐', "banana"),
+ (0x1F34D, '๐', "pineapple"),
+ (0x1F34E, '๐', "red apple"),
+ (0x1F34F, '๐', "green apple"),
+ (0x1F350, '๐', "pear"),
+ (0x1F351, '๐', "peach"),
+ (0x1F352, '๐', "cherries"),
+ (0x1F353, '๐', "strawberry"),
+ (0x1F354, '๐', "hamburger"),
+ (0x1F355, '๐', "slice of pizza"),
+ (0x1F356, '๐', "meat on bone"),
+ (0x1F357, '๐', "poultry leg"),
+ (0x1F358, '๐', "rice cracker"),
+ (0x1F359, '๐', "rice ball"),
+ (0x1F35A, '๐', "cooked rice"),
+ (0x1F35B, '๐', "curry and rice"),
+ (0x1F35C, '๐', "steaming bowl"),
+ (0x1F35D, '๐', "spaghetti"),
+ (0x1F35E, '๐', "bread"),
+ (0x1F35F, '๐', "french fries"),
+ (0x1F360, '๐ ', "roasted sweet potato"),
+ (0x1F361, '๐ก', "dango"),
+ (0x1F362, '๐ข', "oden"),
+ (0x1F363, '๐ฃ', "sushi"),
+ (0x1F364, '๐ค', "fried shrimp"),
+ (0x1F365, '๐ฅ', "fish cake with swirl design"),
+ (0x1F366, '๐ฆ', "soft ice cream"),
+ (0x1F367, '๐ง', "shaved ice"),
+ (0x1F368, '๐จ', "ice cream"),
+ (0x1F369, '๐ฉ', "doughnut"),
+ (0x1F36A, '๐ช', "cookie"),
+ (0x1F36B, '๐ซ', "chocolate bar"),
+ (0x1F36C, '๐ฌ', "candy"),
+ (0x1F36D, '๐ญ', "lollipop"),
+ (0x1F36E, '๐ฎ', "custard"),
+ (0x1F36F, '๐ฏ', "honey pot"),
+ (0x1F370, '๐ฐ', "shortcake"),
+ (0x1F371, '๐ฑ', "bento box"),
+ (0x1F372, '๐ฒ', "pot of food"),
+ (0x1F373, '๐ณ', "cooking"),
+ (0x1F374, '๐ด', "fork and knife"),
+ (0x1F375, '๐ต', "teacup without handle"),
+ (0x1F376, '๐ถ', "sake bottle and cup"),
+ (0x1F377, '๐ท', "wine glass"),
+ (0x1F378, '๐ธ', "cocktail glass"),
+ (0x1F379, '๐น', "tropical drink"),
+ (0x1F37A, '๐บ', "beer mug"),
+ (0x1F37B, '๐ป', "clinking beer mugs"),
+ (0x1F37C, '๐ผ', "baby bottle"),
+ (0x1F380, '๐', "ribbon"),
+ (0x1F381, '๐', "wrapped present"),
+ (0x1F382, '๐', "birthday cake"),
+ (0x1F383, '๐', "jack-o-lantern"),
+ (0x1F384, '๐', "christmas tree"),
+ (0x1F385, '๐
', "father christmas"),
+ (0x1F386, '๐', "fireworks"),
+ (0x1F387, '๐', "firework sparkler"),
+ (0x1F388, '๐', "balloon"),
+ (0x1F389, '๐', "party popper"),
+ (0x1F38A, '๐', "confetti ball"),
+ (0x1F38B, '๐', "tanabata tree"),
+ (0x1F38C, '๐', "crossed flags"),
+ (0x1F38D, '๐', "pine decoration"),
+ (0x1F38E, '๐', "japanese dolls"),
+ (0x1F38F, '๐', "carp streamer"),
+ (0x1F390, '๐', "wind chime"),
+ (0x1F391, '๐', "moon viewing ceremony"),
+ (0x1F392, '๐', "school satchel"),
+ (0x1F393, '๐', "graduation cap"),
+ (0x1F3A0, '๐ ', "carousel horse"),
+ (0x1F3A1, '๐ก', "ferris wheel"),
+ (0x1F3A2, '๐ข', "roller coaster"),
+ (0x1F3A3, '๐ฃ', "fishing pole and fish"),
+ (0x1F3A4, '๐ค', "microphone"),
+ (0x1F3A5, '๐ฅ', "movie camera"),
+ (0x1F3A6, '๐ฆ', "cinema"),
+ (0x1F3A7, '๐ง', "headphone"),
+ (0x1F3A8, '๐จ', "artist palette"),
+ (0x1F3A9, '๐ฉ', "top hat"),
+ (0x1F3AA, '๐ช', "circus tent"),
+ (0x1F3AB, '๐ซ', "ticket"),
+ (0x1F3AC, '๐ฌ', "clapper board"),
+ (0x1F3AD, '๐ญ', "performing arts"),
+ (0x1F3AE, '๐ฎ', "video game"),
+ (0x1F3AF, '๐ฏ', "direct hit"),
+ (0x1F3B0, '๐ฐ', "slot machine"),
+ (0x1F3B1, '๐ฑ', "billiards"),
+ (0x1F3B2, '๐ฒ', "game die"),
+ (0x1F3B3, '๐ณ', "bowling"),
+ (0x1F3B4, '๐ด', "flower playing cards"),
+ (0x1F3B5, '๐ต', "musical note"),
+ (0x1F3B6, '๐ถ', "multiple musical notes"),
+ (0x1F3B7, '๐ท', "saxophone"),
+ (0x1F3B8, '๐ธ', "guitar"),
+ (0x1F3B9, '๐น', "musical keyboard"),
+ (0x1F3BA, '๐บ', "trumpet"),
+ (0x1F3BB, '๐ป', "violin"),
+ (0x1F3BC, '๐ผ', "musical score"),
+ (0x1F3BD, '๐ฝ', "running shirt with sash"),
+ (0x1F3BE, '๐พ', "tennis racquet and ball"),
+ (0x1F3BF, '๐ฟ', "ski and ski boot"),
+ (0x1F3C0, '๐', "basketball and hoop"),
+ (0x1F3C1, '๐', "chequered flag"),
+ (0x1F3C2, '๐', "snowboarder"),
+ (0x1F3C3, '๐', "runner"),
+ (0x1F3C4, '๐', "surfer"),
+ (0x1F3C6, '๐', "trophy"),
+ (0x1F3C7, '๐', "horse racing"),
+ (0x1F3C8, '๐', "american football"),
+ (0x1F3C9, '๐', "rugby football"),
+ (0x1F3CA, '๐', "swimmer"),
+ (0x1F3E0, '๐ ', "house building"),
+ (0x1F3E1, '๐ก', "house with garden"),
+ (0x1F3E2, '๐ข', "office building"),
+ (0x1F3E3, '๐ฃ', "japanese post office"),
+ (0x1F3E4, '๐ค', "european post office"),
+ (0x1F3E5, '๐ฅ', "hospital"),
+ (0x1F3E6, '๐ฆ', "bank"),
+ (0x1F3E7, '๐ง', "automated teller machine"),
+ (0x1F3E8, '๐จ', "hotel"),
+ (0x1F3E9, '๐ฉ', "love hotel"),
+ (0x1F3EA, '๐ช', "convenience store"),
+ (0x1F3EB, '๐ซ', "school"),
+ (0x1F3EC, '๐ฌ', "department store"),
+ (0x1F3ED, '๐ญ', "factory"),
+ (0x1F3EE, '๐ฎ', "izakaya lantern"),
+ (0x1F3EF, '๐ฏ', "japanese castle"),
+ (0x1F3F0, '๐ฐ', "european castle"),
+ (0x1F400, '๐', "rat"),
+ (0x1F401, '๐', "mouse"),
+ (0x1F402, '๐', "ox"),
+ (0x1F403, '๐', "water buffalo"),
+ (0x1F404, '๐', "cow"),
+ (0x1F405, '๐
', "tiger"),
+ (0x1F406, '๐', "leopard"),
+ (0x1F407, '๐', "rabbit"),
+ (0x1F408, '๐', "cat"),
+ (0x1F409, '๐', "dragon"),
+ (0x1F40A, '๐', "crocodile"),
+ (0x1F40B, '๐', "whale"),
+ (0x1F40C, '๐', "snail"),
+ (0x1F40D, '๐', "snake"),
+ (0x1F40E, '๐', "horse"),
+ (0x1F40F, '๐', "ram"),
+ (0x1F410, '๐', "goat"),
+ (0x1F411, '๐', "sheep"),
+ (0x1F412, '๐', "monkey"),
+ (0x1F413, '๐', "rooster"),
+ (0x1F414, '๐', "chicken"),
+ (0x1F415, '๐', "dog"),
+ (0x1F416, '๐', "pig"),
+ (0x1F417, '๐', "boar"),
+ (0x1F418, '๐', "elephant"),
+ (0x1F419, '๐', "octopus"),
+ (0x1F41A, '๐', "spiral shell"),
+ (0x1F41B, '๐', "bug"),
+ (0x1F41C, '๐', "ant"),
+ (0x1F41D, '๐', "honeybee"),
+ (0x1F41E, '๐', "lady beetle"),
+ (0x1F41F, '๐', "fish"),
+ (0x1F420, '๐ ', "tropical fish"),
+ (0x1F421, '๐ก', "blowfish"),
+ (0x1F422, '๐ข', "turtle"),
+ (0x1F423, '๐ฃ', "hatching chick"),
+ (0x1F424, '๐ค', "baby chick"),
+ (0x1F425, '๐ฅ', "front-facing baby chick"),
+ (0x1F426, '๐ฆ', "bird"),
+ (0x1F427, '๐ง', "penguin"),
+ (0x1F428, '๐จ', "koala"),
+ (0x1F429, '๐ฉ', "poodle"),
+ (0x1F42B, '๐ซ', "bactrian camel"),
+ (0x1F42C, '๐ฌ', "dolphin"),
+ (0x1F42D, '๐ญ', "mouse face"),
+ (0x1F42E, '๐ฎ', "cow face"),
+ (0x1F42F, '๐ฏ', "tiger face"),
+ (0x1F430, '๐ฐ', "rabbit face"),
+ (0x1F431, '๐ฑ', "cat face"),
+ (0x1F432, '๐ฒ', "dragon face"),
+ (0x1F433, '๐ณ', "spouting whale"),
+ (0x1F434, '๐ด', "horse face"),
+ (0x1F435, '๐ต', "monkey face"),
+ (0x1F436, '๐ถ', "dog face"),
+ (0x1F437, '๐ท', "pig face"),
+ (0x1F438, '๐ธ', "frog face"),
+ (0x1F439, '๐น', "hamster face"),
+ (0x1F43A, '๐บ', "wolf face"),
+ (0x1F43B, '๐ป', "bear face"),
+ (0x1F43C, '๐ผ', "panda face"),
+ (0x1F43D, '๐ฝ', "pig nose"),
+ (0x1F43E, '๐พ', "paw prints"),
+ (0x1F440, '๐', "eyes"),
+ (0x1F442, '๐', "ear"),
+ (0x1F443, '๐', "nose"),
+ (0x1F444, '๐', "mouth"),
+ (0x1F445, '๐
', "tongue"),
+ (0x1F446, '๐', "white up pointing backhand index"),
+ (0x1F447, '๐', "white down pointing backhand index"),
+ (0x1F448, '๐', "white left pointing backhand index"),
+ (0x1F449, '๐', "white right pointing backhand index"),
+ (0x1F44A, '๐', "fisted hand sign"),
+ (0x1F44B, '๐', "waving hand sign"),
+ (0x1F44C, '๐', "ok hand sign"),
+ (0x1F44D, '๐', "thumbs up sign"),
+ (0x1F44E, '๐', "thumbs down sign"),
+ (0x1F44F, '๐', "clapping hands sign"),
+ (0x1F450, '๐', "open hands sign"),
+ (0x1F451, '๐', "crown"),
+ (0x1F452, '๐', "womans hat"),
+ (0x1F453, '๐', "eyeglasses"),
+ (0x1F454, '๐', "necktie"),
+ (0x1F455, '๐', "t-shirt"),
+ (0x1F456, '๐', "jeans"),
+ (0x1F457, '๐', "dress"),
+ (0x1F458, '๐', "kimono"),
+ (0x1F459, '๐', "bikini"),
+ (0x1F45A, '๐', "womans clothes"),
+ (0x1F45B, '๐', "purse"),
+ (0x1F45C, '๐', "handbag"),
+ (0x1F45D, '๐', "pouch"),
+ (0x1F45E, '๐', "mans shoe"),
+ (0x1F45F, '๐', "athletic shoe"),
+ (0x1F460, '๐ ', "high-heeled shoe"),
+ (0x1F461, '๐ก', "womans sandal"),
+ (0x1F462, '๐ข', "womans boots"),
+ (0x1F463, '๐ฃ', "footprints"),
+ (0x1F464, '๐ค', "bust in silhouette"),
+ (0x1F465, '๐ฅ', "busts in silhouette"),
+ (0x1F466, '๐ฆ', "boy"),
+ (0x1F467, '๐ง', "girl"),
+ (0x1F468, '๐จ', "man"),
+ (0x1F469, '๐ฉ', "woman"),
+ (0x1F46A, '๐ช', "family"),
+ (0x1F46B, '๐ซ', "man and woman holding hands"),
+ (0x1F46C, '๐ฌ', "two men holding hands"),
+ (0x1F46D, '๐ญ', "two women holding hands"),
+ (0x1F46E, '๐ฎ', "police officer"),
+ (0x1F46F, '๐ฏ', "woman with bunny ears"),
+ (0x1F470, '๐ฐ', "bride with veil"),
+ (0x1F471, '๐ฑ', "person with blond hair"),
+ (0x1F472, '๐ฒ', "man with gua pi mao"),
+ (0x1F473, '๐ณ', "man with turban"),
+ (0x1F474, '๐ด', "older man"),
+ (0x1F475, '๐ต', "older woman"),
+ (0x1F476, '๐ถ', "baby"),
+ (0x1F477, '๐ท', "construction worker"),
+ (0x1F478, '๐ธ', "princess"),
+ (0x1F479, '๐น', "japanese ogre"),
+ (0x1F47A, '๐บ', "japanese goblin"),
+ (0x1F47B, '๐ป', "ghost"),
+ (0x1F47C, '๐ผ', "baby angel"),
+ (0x1F47D, '๐ฝ', "extraterrestrial alien"),
+ (0x1F47E, '๐พ', "alien monster"),
+ (0x1F47F, '๐ฟ', "imp"),
+ (0x1F480, '๐', "skull"),
+ (0x1F481, '๐', "information desk person"),
+ (0x1F482, '๐', "guardsman"),
+ (0x1F483, '๐', "dancer"),
+ (0x1F484, '๐', "lipstick"),
+ (0x1F485, '๐
', "nail polish"),
+ (0x1F486, '๐', "face massage"),
+ (0x1F487, '๐', "haircut"),
+ (0x1F488, '๐', "barber pole"),
+ (0x1F489, '๐', "syringe"),
+ (0x1F48A, '๐', "pill"),
+ (0x1F48B, '๐', "kiss mark"),
+ (0x1F48C, '๐', "love letter"),
+ (0x1F48D, '๐', "ring"),
+ (0x1F48E, '๐', "gem stone"),
+ (0x1F48F, '๐', "kiss"),
+ (0x1F490, '๐', "bouquet"),
+ (0x1F491, '๐', "couple with heart"),
+ (0x1F492, '๐', "wedding"),
+ (0x1F493, '๐', "beating heart"),
+ (0x1F494, '๐', "broken heart"),
+ (0x1F495, '๐', "two hearts"),
+ (0x1F496, '๐', "sparkling heart"),
+ (0x1F497, '๐', "growing heart"),
+ (0x1F498, '๐', "heart with arrow"),
+ (0x1F499, '๐', "blue heart"),
+ (0x1F49A, '๐', "green heart"),
+ (0x1F49B, '๐', "yellow heart"),
+ (0x1F49C, '๐', "purple heart"),
+ (0x1F49D, '๐', "heart with ribbon"),
+ (0x1F49E, '๐', "revolving hearts"),
+ (0x1F49F, '๐', "heart decoration"),
+ (0x1F4A0, '๐ ', "diamond shape with a dot inside"),
+ (0x1F4A1, '๐ก', "electric light bulb"),
+ (0x1F4A2, '๐ข', "anger symbol"),
+ (0x1F4A3, '๐ฃ', "bomb"),
+ (0x1F4A4, '๐ค', "sleeping symbol"),
+ (0x1F4A5, '๐ฅ', "collision symbol"),
+ (0x1F4A6, '๐ฆ', "splashing sweat symbol"),
+ (0x1F4A7, '๐ง', "droplet"),
+ (0x1F4A8, '๐จ', "dash symbol"),
+ (0x1F4A9, '๐ฉ', "pile of poo"),
+ (0x1F4AA, '๐ช', "flexed biceps"),
+ (0x1F4AB, '๐ซ', "dizzy symbol"),
+ (0x1F4AC, '๐ฌ', "speech balloon"),
+ (0x1F4AD, '๐ญ', "thought balloon"),
+ (0x1F4AE, '๐ฎ', "white flower"),
+ (0x1F4AF, '๐ฏ', "hundred points symbol"),
+ (0x1F4B0, '๐ฐ', "money bag"),
+ (0x1F4B1, '๐ฑ', "currency exchange"),
+ (0x1F4B2, '๐ฒ', "heavy dollar sign"),
+ (0x1F4B3, '๐ณ', "credit card"),
+ (0x1F4B4, '๐ด', "banknote with yen sign"),
+ (0x1F4B5, '๐ต', "banknote with dollar sign"),
+ (0x1F4B6, '๐ถ', "banknote with euro sign"),
+ (0x1F4B7, '๐ท', "banknote with pound sign"),
+ (0x1F4B8, '๐ธ', "money with wings"),
+ (0x1F4B9, '๐น', "chart with upwards trend and yen sign"),
+ (0x1F4BA, '๐บ', "seat"),
+ (0x1F4BB, '๐ป', "personal computer"),
+ (0x1F4BC, '๐ผ', "briefcase"),
+ (0x1F4BD, '๐ฝ', "minidisc"),
+ (0x1F4BE, '๐พ', "floppy disk"),
+ (0x1F4BF, '๐ฟ', "optical disc"),
+ (0x1F4C0, '๐', "dvd"),
+ (0x1F4C1, '๐', "file folder"),
+ (0x1F4C2, '๐', "open file folder"),
+ (0x1F4C3, '๐', "page with curl"),
+ (0x1F4C4, '๐', "page facing up"),
+ (0x1F4C5, '๐
', "calendar"),
+ (0x1F4C6, '๐', "tear-off calendar"),
+ (0x1F4C7, '๐', "card index"),
+ (0x1F4C8, '๐', "chart with upwards trend"),
+ (0x1F4C9, '๐', "chart with downwards trend"),
+ (0x1F4CA, '๐', "bar chart"),
+ (0x1F4CB, '๐', "clipboard"),
+ (0x1F4CC, '๐', "pushpin"),
+ (0x1F4CD, '๐', "round pushpin"),
+ (0x1F4CE, '๐', "paperclip"),
+ (0x1F4CF, '๐', "straight ruler"),
+ (0x1F4D0, '๐', "triangular ruler"),
+ (0x1F4D1, '๐', "bookmark tabs"),
+ (0x1F4D2, '๐', "ledger"),
+ (0x1F4D3, '๐', "notebook"),
+ (0x1F4D4, '๐', "notebook with decorative cover"),
+ (0x1F4D5, '๐', "closed book"),
+ (0x1F4D6, '๐', "open book"),
+ (0x1F4D7, '๐', "green book"),
+ (0x1F4D8, '๐', "blue book"),
+ (0x1F4D9, '๐', "orange book"),
+ (0x1F4DA, '๐', "books"),
+ (0x1F4DB, '๐', "name badge"),
+ (0x1F4DC, '๐', "scroll"),
+ (0x1F4DD, '๐', "memo"),
+ (0x1F4DE, '๐', "telephone receiver"),
+ (0x1F4DF, '๐', "pager"),
+ (0x1F4E0, '๐ ', "fax machine"),
+ (0x1F4E1, '๐ก', "satellite antenna"),
+ (0x1F4E2, '๐ข', "public address loudspeaker"),
+ (0x1F4E3, '๐ฃ', "cheering megaphone"),
+ (0x1F4E4, '๐ค', "outbox tray"),
+ (0x1F4E5, '๐ฅ', "inbox tray"),
+ (0x1F4E6, '๐ฆ', "package"),
+ (0x1F4E7, '๐ง', "e-mail symbol"),
+ (0x1F4E8, '๐จ', "incoming envelope"),
+ (0x1F4E9, '๐ฉ', "envelope with downwards arrow above"),
+ (0x1F4EA, '๐ช', "closed mailbox with lowered flag"),
+ (0x1F4EB, '๐ซ', "closed mailbox with raised flag"),
+ (0x1F4EC, '๐ฌ', "open mailbox with raised flag"),
+ (0x1F4ED, '๐ญ', "open mailbox with lowered flag"),
+ (0x1F4EE, '๐ฎ', "postbox"),
+ (0x1F4EF, '๐ฏ', "postal horn"),
+ (0x1F4F0, '๐ฐ', "newspaper"),
+ (0x1F4F1, '๐ฑ', "mobile phone"),
+ (0x1F4F2, '๐ฒ', "mobile phone with rightwards arrow at left"),
+ (0x1F4F3, '๐ณ', "vibration mode"),
+ (0x1F4F4, '๐ด', "mobile phone off"),
+ (0x1F4F5, '๐ต', "no mobile phones"),
+ (0x1F4F6, '๐ถ', "antenna with bars"),
+ (0x1F4F7, '๐ท', "camera"),
+ (0x1F4F9, '๐น', "video camera"),
+ (0x1F4FA, '๐บ', "television"),
+ (0x1F4FB, '๐ป', "radio"),
+ (0x1F4FC, '๐ผ', "videocassette"),
+ (0x1F500, '๐', "twisted rightwards arrows"),
+ (0x1F501, '๐', "clockwise rightwards and leftwards open circle arrows"),
+ (0x1F502, '๐', "clockwise rightwards and leftwards open circle arrows with circled one overlay"),
+ (0x1F503, '๐', "clockwise downwards and upwards open circle arrows"),
+ (0x1F504, '๐', "anticlockwise downwards and upwards open circle arrows"),
+ (0x1F505, '๐
', "low brightness symbol"),
+ (0x1F506, '๐', "high brightness symbol"),
+ (0x1F507, '๐', "speaker with cancellation stroke"),
+ (0x1F508, '๐', "speaker"),
+ (0x1F509, '๐', "speaker with one sound wave"),
+ (0x1F50A, '๐', "speaker with three sound waves"),
+ (0x1F50B, '๐', "battery"),
+ (0x1F50C, '๐', "electric plug"),
+ (0x1F50D, '๐', "left-pointing magnifying glass"),
+ (0x1F50E, '๐', "right-pointing magnifying glass"),
+ (0x1F50F, '๐', "lock with ink pen"),
+ (0x1F510, '๐', "closed lock with key"),
+ (0x1F511, '๐', "key"),
+ (0x1F512, '๐', "lock"),
+ (0x1F513, '๐', "open lock"),
+ (0x1F514, '๐', "bell"),
+ (0x1F515, '๐', "bell with cancellation stroke"),
+ (0x1F516, '๐', "bookmark"),
+ (0x1F517, '๐', "link symbol"),
+ (0x1F518, '๐', "radio button"),
+ (0x1F519, '๐', "back with leftwards arrow above"),
+ (0x1F51A, '๐', "end with leftwards arrow above"),
+ (0x1F51B, '๐', "on with exclamation mark with left right arrow above"),
+ (0x1F51C, '๐', "soon with rightwards arrow above"),
+ (0x1F51D, '๐', "top with upwards arrow above"),
+ (0x1F51E, '๐', "no one under eighteen symbol"),
+ (0x1F51F, '๐', "keycap ten"),
+ (0x1F520, '๐ ', "input symbol for latin capital letters"),
+ (0x1F521, '๐ก', "input symbol for latin small letters"),
+ (0x1F522, '๐ข', "input symbol for numbers"),
+ (0x1F523, '๐ฃ', "input symbol for symbols"),
+ (0x1F524, '๐ค', "input symbol for latin letters"),
+ (0x1F525, '๐ฅ', "fire"),
+ (0x1F526, '๐ฆ', "electric torch"),
+ (0x1F527, '๐ง', "wrench"),
+ (0x1F528, '๐จ', "hammer"),
+ (0x1F529, '๐ฉ', "nut and bolt"),
+ (0x1F52A, '๐ช', "hocho"),
+ (0x1F52B, '๐ซ', "pistol"),
+ (0x1F52C, '๐ฌ', "microscope"),
+ (0x1F52D, '๐ญ', "telescope"),
+ (0x1F52E, '๐ฎ', "crystal ball"),
+ (0x1F52F, '๐ฏ', "six pointed star with middle dot"),
+ (0x1F530, '๐ฐ', "japanese symbol for beginner"),
+ (0x1F531, '๐ฑ', "trident emblem"),
+ (0x1F532, '๐ฒ', "black square button"),
+ (0x1F533, '๐ณ', "white square button"),
+ (0x1F534, '๐ด', "large red circle"),
+ (0x1F535, '๐ต', "large blue circle"),
+ (0x1F536, '๐ถ', "large orange diamond"),
+ (0x1F537, '๐ท', "large blue diamond"),
+ (0x1F538, '๐ธ', "small orange diamond"),
+ (0x1F539, '๐น', "small blue diamond"),
+ (0x1F53A, '๐บ', "up-pointing red triangle"),
+ (0x1F53B, '๐ป', "down-pointing red triangle"),
+ (0x1F53C, '๐ผ', "up-pointing small red triangle"),
+ (0x1F53D, '๐ฝ', "down-pointing small red triangle"),
+ (0x1F550, '๐', "clock face one oclock"),
+ (0x1F551, '๐', "clock face two oclock"),
+ (0x1F552, '๐', "clock face three oclock"),
+ (0x1F553, '๐', "clock face four oclock"),
+ (0x1F554, '๐', "clock face five oclock"),
+ (0x1F555, '๐', "clock face six oclock"),
+ (0x1F556, '๐', "clock face seven oclock"),
+ (0x1F557, '๐', "clock face eight oclock"),
+ (0x1F558, '๐', "clock face nine oclock"),
+ (0x1F559, '๐', "clock face ten oclock"),
+ (0x1F55A, '๐', "clock face eleven oclock"),
+ (0x1F55B, '๐', "clock face twelve oclock"),
+ (0x1F55C, '๐', "clock face one-thirty"),
+ (0x1F55D, '๐', "clock face two-thirty"),
+ (0x1F55E, '๐', "clock face three-thirty"),
+ (0x1F55F, '๐', "clock face four-thirty"),
+ (0x1F560, '๐ ', "clock face five-thirty"),
+ (0x1F561, '๐ก', "clock face six-thirty"),
+ (0x1F562, '๐ข', "clock face seven-thirty"),
+ (0x1F563, '๐ฃ', "clock face eight-thirty"),
+ (0x1F564, '๐ค', "clock face nine-thirty"),
+ (0x1F565, '๐ฅ', "clock face ten-thirty"),
+ (0x1F566, '๐ฆ', "clock face eleven-thirty"),
+ (0x1F567, '๐ง', "clock face twelve-thirty"),
+ (0x1F5FB, '๐ป', "mount fuji"),
+ (0x1F5FC, '๐ผ', "tokyo tower"),
+ (0x1F5FD, '๐ฝ', "statue of liberty"),
+ (0x1F5FE, '๐พ', "silhouette of japan"),
+ (0x1F5FF, '๐ฟ', "moyai"),
+ (0x1F600, '๐', "grinning face"),
+ (0x1F601, '๐', "grinning face with smiling eyes"),
+ (0x1F602, '๐', "face with tears of joy"),
+ (0x1F603, '๐', "smiling face with open mouth"),
+ (0x1F604, '๐', "smiling face with open mouth and smiling eyes"),
+ (0x1F605, '๐
', "smiling face with open mouth and cold sweat"),
+ (0x1F606, '๐', "smiling face with open mouth and tightly-closed eyes"),
+ (0x1F607, '๐', "smiling face with halo"),
+ (0x1F608, '๐', "smiling face with horns"),
+ (0x1F609, '๐', "winking face"),
+ (0x1F60A, '๐', "smiling face with smiling eyes"),
+ (0x1F60B, '๐', "face savouring delicious food"),
+ (0x1F60C, '๐', "relieved face"),
+ (0x1F60D, '๐', "smiling face with heart-shaped eyes"),
+ (0x1F60E, '๐', "smiling face with sunglasses"),
+ (0x1F60F, '๐', "smirking face"),
+ (0x1F610, '๐', "neutral face"),
+ (0x1F611, '๐', "expressionless face"),
+ (0x1F612, '๐', "unamused face"),
+ (0x1F613, '๐', "face with cold sweat"),
+ (0x1F614, '๐', "pensive face"),
+ (0x1F615, '๐', "confused face"),
+ (0x1F616, '๐', "confounded face"),
+ (0x1F617, '๐', "kissing face"),
+ (0x1F618, '๐', "face throwing a kiss"),
+ (0x1F619, '๐', "kissing face with smiling eyes"),
+ (0x1F61A, '๐', "kissing face with closed eyes"),
+ (0x1F61B, '๐', "face with stuck-out tongue"),
+ (0x1F61C, '๐', "face with stuck-out tongue and winking eye"),
+ (0x1F61D, '๐', "face with stuck-out tongue and tightly-closed eyes"),
+ (0x1F61E, '๐', "disappointed face"),
+ (0x1F61F, '๐', "worried face"),
+ (0x1F620, '๐ ', "angry face"),
+ (0x1F621, '๐ก', "pouting face"),
+ (0x1F622, '๐ข', "crying face"),
+ (0x1F623, '๐ฃ', "persevering face"),
+ (0x1F624, '๐ค', "face with look of triumph"),
+ (0x1F625, '๐ฅ', "disappointed but relieved face"),
+ (0x1F626, '๐ฆ', "frowning face with open mouth"),
+ (0x1F627, '๐ง', "anguished face"),
+ (0x1F628, '๐จ', "fearful face"),
+ (0x1F629, '๐ฉ', "weary face"),
+ (0x1F62A, '๐ช', "sleepy face"),
+ (0x1F62B, '๐ซ', "tired face"),
+ (0x1F62C, '๐ฌ', "grimacing face"),
+ (0x1F62D, '๐ญ', "loudly crying face"),
+ (0x1F62E, '๐ฎ', "face with open mouth"),
+ (0x1F62F, '๐ฏ', "hushed face"),
+ (0x1F630, '๐ฐ', "face with open mouth and cold sweat"),
+ (0x1F631, '๐ฑ', "face screaming in fear"),
+ (0x1F632, '๐ฒ', "astonished face"),
+ (0x1F633, '๐ณ', "flushed face"),
+ (0x1F634, '๐ด', "sleeping face"),
+ (0x1F635, '๐ต', "dizzy face"),
+ (0x1F636, '๐ถ', "face without mouth"),
+ (0x1F637, '๐ท', "face with medical mask"),
+ (0x1F638, '๐ธ', "grinning cat face with smiling eyes"),
+ (0x1F639, '๐น', "cat face with tears of joy"),
+ (0x1F63A, '๐บ', "smiling cat face with open mouth"),
+ (0x1F63B, '๐ป', "smiling cat face with heart-shaped eyes"),
+ (0x1F63C, '๐ผ', "cat face with wry smile"),
+ (0x1F63D, '๐ฝ', "kissing cat face with closed eyes"),
+ (0x1F63E, '๐พ', "pouting cat face"),
+ (0x1F63F, '๐ฟ', "crying cat face"),
+ (0x1F640, '๐', "weary cat face"),
+ (0x1F645, '๐
', "face with no good gesture"),
+ (0x1F646, '๐', "face with ok gesture"),
+ (0x1F647, '๐', "person bowing deeply"),
+ (0x1F648, '๐', "see-no-evil monkey"),
+ (0x1F649, '๐', "hear-no-evil monkey"),
+ (0x1F64A, '๐', "speak-no-evil monkey"),
+ (0x1F64B, '๐', "happy person raising one hand"),
+ (0x1F64C, '๐', "person raising both hands in celebration"),
+ (0x1F64D, '๐', "person frowning"),
+ (0x1F64E, '๐', "person with pouting face"),
+ (0x1F64F, '๐', "person with folded hands"),
+ (0x1F680, '๐', "rocket"),
+ (0x1F681, '๐', "helicopter"),
+ (0x1F682, '๐', "steam locomotive"),
+ (0x1F683, '๐', "railway car"),
+ (0x1F684, '๐', "high-speed train"),
+ (0x1F685, '๐
', "high-speed train with bullet nose"),
+ (0x1F686, '๐', "train"),
+ (0x1F687, '๐', "metro"),
+ (0x1F688, '๐', "light rail"),
+ (0x1F689, '๐', "station"),
+ (0x1F68A, '๐', "tram"),
+ (0x1F68B, '๐', "tram car"),
+ (0x1F68C, '๐', "bus"),
+ (0x1F68D, '๐', "oncoming bus"),
+ (0x1F68E, '๐', "trolleybus"),
+ (0x1F68F, '๐', "bus stop"),
+ (0x1F690, '๐', "minibus"),
+ (0x1F691, '๐', "ambulance"),
+ (0x1F692, '๐', "fire engine"),
+ (0x1F693, '๐', "police car"),
+ (0x1F694, '๐', "oncoming police car"),
+ (0x1F695, '๐', "taxi"),
+ (0x1F696, '๐', "oncoming taxi"),
+ (0x1F697, '๐', "automobile"),
+ (0x1F699, '๐', "recreational vehicle"),
+ (0x1F69A, '๐', "delivery truck"),
+ (0x1F69B, '๐', "articulated lorry"),
+ (0x1F69C, '๐', "tractor"),
+ (0x1F69D, '๐', "monorail"),
+ (0x1F69E, '๐', "mountain railway"),
+ (0x1F69F, '๐', "suspension railway"),
+ (0x1F6A0, '๐ ', "mountain cableway"),
+ (0x1F6A1, '๐ก', "aerial tramway"),
+ (0x1F6A2, '๐ข', "ship"),
+ (0x1F6A3, '๐ฃ', "rowboat"),
+ (0x1F6A4, '๐ค', "speedboat"),
+ (0x1F6A5, '๐ฅ', "horizontal traffic light"),
+ (0x1F6A6, '๐ฆ', "vertical traffic light"),
+ (0x1F6A7, '๐ง', "construction sign"),
+ (0x1F6A8, '๐จ', "police cars revolving light"),
+ (0x1F6A9, '๐ฉ', "triangular flag on post"),
+ (0x1F6AA, '๐ช', "door"),
+ (0x1F6AB, '๐ซ', "no entry sign"),
+ (0x1F6AC, '๐ฌ', "smoking symbol"),
+ (0x1F6AD, '๐ญ', "no smoking symbol"),
+ (0x1F6AE, '๐ฎ', "put litter in its place symbol"),
+ (0x1F6AF, '๐ฏ', "do not litter symbol"),
+ (0x1F6B0, '๐ฐ', "potable water symbol"),
+ (0x1F6B1, '๐ฑ', "non-potable water symbol"),
+ (0x1F6B2, '๐ฒ', "bicycle"),
+ (0x1F6B3, '๐ณ', "no bicycles"),
+ (0x1F6B4, '๐ด', "bicyclist"),
+ (0x1F6B5, '๐ต', "mountain bicyclist"),
+ (0x1F6B6, '๐ถ', "pedestrian"),
+ (0x1F6B7, '๐ท', "no pedestrians"),
+ (0x1F6B8, '๐ธ', "children crossing"),
+ (0x1F6B9, '๐น', "mens symbol"),
+ (0x1F6BA, '๐บ', "womens symbol"),
+ (0x1F6BB, '๐ป', "restroom"),
+ (0x1F6BC, '๐ผ', "baby symbol"),
+ (0x1F6BD, '๐ฝ', "toilet"),
+ (0x1F6BE, '๐พ', "water closet"),
+ (0x1F6BF, '๐ฟ', "shower"),
+ (0x1F6C0, '๐', "bath"),
+ (0x1F6C1, '๐', "bathtub"),
+ (0x1F6C2, '๐', "passport control"),
+ (0x1F6C3, '๐', "customs"),
+ (0x1F6C4, '๐', "baggage claim"),
+ (0x1F6C5, '๐
', "left luggage"),
+ (0xFE4E5, '๓พฅ', "flag japan"),
+ (0xFE4E6, '๓พฆ', "flag usa"),
+ (0xFE4E7, '๓พง', "flag"),
+ (0xFE4E8, '๓พจ', "flag"),
+ (0xFE4E9, '๓พฉ', "flag"),
+ (0xFE4EA, '๓พช', "flag great britain"),
+ (0xFE4EB, '๓พซ', "flag"),
+ (0xFE4EC, '๓พฌ', "flag"),
+ (0xFE4ED, '๓พญ', "flag"),
+ (0xFE4EE, '๓พฎ', "flag south korea"),
+ (0xFE82C, '๓พ ฌ', "number sign in square"),
+ (0xFE82E, '๓พ ฎ', "digit one in square"),
+ (0xFE82F, '๓พ ฏ', "digit two in square"),
+ (0xFE830, '๓พ ฐ', "digit three in square"),
+ (0xFE831, '๓พ ฑ', "digit four in square"),
+ (0xFE832, '๓พ ฒ', "digit five in square"),
+ (0xFE833, '๓พ ณ', "digit six in square"),
+ (0xFE834, '๓พ ด', "digit seven in square"),
+ (0xFE835, '๓พ ต', "digit eight in square"),
+ (0xFE836, '๓พ ถ', "digit nine in square"),
+ (0xFE837, '๓พ ท', "digit zero in square"),
+];
+
+/// All emojis supported by Egui.
+/// The union of `emoji-icon-font.ttf` and `NotoEmoji-Regular.ttf`.
+#[rustfmt::skip]
+pub const FULL_EMOJI_LIST: &[(u32, char, &str)] = &[
+ (0xA9, 'ยฉ', "copyright sign"),
+ (0xAE, 'ยฎ', "registered sign"),
+ (0x2030, 'โฐ', "perthousand"),
+ (0x203C, 'โผ', "double exclamation mark"),
+ (0x2049, 'โ', "exclamation question mark"),
+ (0x20AC, 'โฌ', "currency-euro"),
+ (0x20E3, 'โฃ', "combining enclosing keycap"),
+ (0x211E, 'โ', "retrograde"),
+ (0x2122, 'โข', "trade mark sign"),
+ (0x2126, 'โฆ', "omega"),
+ (0x2135, 'โต', "aleph"),
+ (0x2139, 'โน', "information source"),
+ (0x2194, 'โ', "left right arrow"),
+ (0x2195, 'โ', "up down arrow"),
+ (0x2196, 'โ', "north west arrow"),
+ (0x2197, 'โ', "north east arrow"),
+ (0x2198, 'โ', "south east arrow"),
+ (0x2199, 'โ', "south west arrow"),
+ (0x21A9, 'โฉ', "leftwards arrow with hook"),
+ (0x21AA, 'โช', "rightwards arrow with hook"),
+ (0x21BA, 'โบ', "rotate-ccw"),
+ (0x21BB, 'โป', "rotate-cw"),
+ (0x221E, 'โ', "infinity"),
+ (0x2297, 'โ', "close"),
+ (0x229E, 'โ', "square-plus"),
+ (0x229F, 'โ', "square-minus"),
+ (0x2316, 'โ', "crosshairs"),
+ (0x2318, 'โ', "command"),
+ (0x231A, 'โ', "watch"),
+ (0x231B, 'โ', "hourglass"),
+ (0x2328, 'โจ', "keyboard-wireless"),
+ (0x2386, 'โ', "enter"),
+ (0x2388, 'โ', "helm"),
+ (0x2397, 'โ', "previous-page"),
+ (0x2398, 'โ', "next-page"),
+ (0x2399, 'โ', "print-screen"),
+ (0x23CF, 'โ', "eject"),
+ (0x23E9, 'โฉ', "black right-pointing double triangle / forward"),
+ (0x23EA, 'โช', "backward / black left-pointing double triangle"),
+ (0x23EB, 'โซ', "black up-pointing double triangle"),
+ (0x23EC, 'โฌ', "black down-pointing double triangle"),
+ (0x23ED, 'โญ', "last"),
+ (0x23EE, 'โฎ', "first"),
+ (0x23F0, 'โฐ', "alarm clock"),
+ (0x23F1, 'โฑ', "stopwatch"),
+ (0x23F3, 'โณ', "hourglass with flowing sand"),
+ (0x23F4, 'โด', "caret-left"),
+ (0x23F5, 'โต', "caret-right"),
+ (0x23F6, 'โถ', "caret-up"),
+ (0x23F7, 'โท', "caret-down"),
+ (0x23F8, 'โธ', "pause"),
+ (0x23F9, 'โน', "stop"),
+ (0x23FA, 'โบ', "circle"),
+ (0x24C2, 'โ', "circled latin capital letter m"),
+ (0x2593, 'โ', "chessboard"),
+ (0x25A0, 'โ ', "square"),
+ (0x25A3, 'โฃ', "checkbox-partial"),
+ (0x25AA, 'โช', "black small square"),
+ (0x25AB, 'โซ', "white small square"),
+ (0x25B6, 'โถ', "black right-pointing triangle / play"),
+ (0x25C0, 'โ', "black left-pointing triangle"),
+ (0x25CA, 'โ', "lozenge"),
+ (0x25CB, 'โ', "circle-open"),
+ (0x25CE, 'โ', "bullseye"),
+ (0x25D1, 'โ', "contrast"),
+ (0x25D4, 'โ', "pie-chart-reverse"),
+ (0x25D5, 'โ', "pie-chart"),
+ (0x25FB, 'โป', "white medium square"),
+ (0x25FC, 'โผ', "black medium square"),
+ (0x25FD, 'โฝ', "white medium small square"),
+ (0x25FE, 'โพ', "black medium small square"),
+ (0x2600, 'โ', "black sun with rays"),
+ (0x2601, 'โ', "cloud"),
+ (0x2602, 'โ', "umbrella"),
+ (0x2603, 'โ', "snowman"),
+ (0x2604, 'โ', "comet"),
+ (0x2605, 'โ
', "star"),
+ (0x2606, 'โ', "star-open"),
+ (0x2609, 'โ', "record"),
+ (0x260E, 'โ', "black telephone"),
+ (0x2610, 'โ', "checkbox-unchecked"),
+ (0x2611, 'โ', "ballot box with check / checkbox-checked"),
+ (0x2614, 'โ', "umbrella with rain drops"),
+ (0x2615, 'โ', "drink-coffee / hot beverage"),
+ (0x2618, 'โ', "shamrock"),
+ (0x261C, 'โ', "point-left"),
+ (0x261D, 'โ', "point-up / white up pointing index"),
+ (0x261E, 'โ', "point-right"),
+ (0x261F, 'โ', "point-down"),
+ (0x2620, 'โ ', "skull-and-bones"),
+ (0x2622, 'โข', "radiation"),
+ (0x2623, 'โฃ', "biohazard"),
+ (0x2624, 'โค', "caduceus"),
+ (0x2625, 'โฅ', "ankh"),
+ (0x2626, 'โฆ', "cross-orthodox"),
+ (0x2627, 'โง', "chi-rho"),
+ (0x2628, 'โจ', "cross-of-lorraine"),
+ (0x2629, 'โฉ', "cross-of-jerusalem"),
+ (0x262A, 'โช', "star-and-crescent"),
+ (0x262B, 'โซ', "farsi"),
+ (0x262C, 'โฌ', "khanda"),
+ (0x262E, 'โฎ', "peace"),
+ (0x262F, 'โฏ', "tao"),
+ (0x2630, 'โฐ', "menu"),
+ (0x2638, 'โธ', "wheel-of-dharma"),
+ (0x2639, 'โน', "smiley-sad"),
+ (0x263A, 'โบ', "smiley / white smiling face"),
+ (0x2640, 'โ', "gender-female"),
+ (0x2642, 'โ', "gender-male"),
+ (0x2648, 'โ', "aries"),
+ (0x2649, 'โ', "taurus"),
+ (0x264A, 'โ', "gemini"),
+ (0x264B, 'โ', "cancer"),
+ (0x264C, 'โ', "leo"),
+ (0x264D, 'โ', "virgo"),
+ (0x264E, 'โ', "libra"),
+ (0x264F, 'โ', "scorpius"),
+ (0x2650, 'โ', "sagittarius"),
+ (0x2651, 'โ', "capricorn"),
+ (0x2652, 'โ', "aquarius"),
+ (0x2653, 'โ', "pisces"),
+ (0x2654, 'โ', "chess-white-king"),
+ (0x2655, 'โ', "chess-white-queen"),
+ (0x2656, 'โ', "chess-white-rook"),
+ (0x2657, 'โ', "chess-white-bishop"),
+ (0x2658, 'โ', "chess-white-knight"),
+ (0x2659, 'โ', "chess-white-pawn"),
+ (0x265A, 'โ', "chess-black-king"),
+ (0x265B, 'โ', "chess-black-queen"),
+ (0x265C, 'โ', "chess-black-rook"),
+ (0x265D, 'โ', "chess-black-bishop"),
+ (0x265E, 'โ', "chess-black-knight"),
+ (0x265F, 'โ', "chess-black-pawn"),
+ (0x2660, 'โ ', "black spade suit / spades"),
+ (0x2661, 'โก', "heart-open"),
+ (0x2663, 'โฃ', "black club suit / clubs"),
+ (0x2665, 'โฅ', "black heart suit"),
+ (0x2666, 'โฆ', "black diamond suit / diamonds"),
+ (0x2668, 'โจ', "hot springs"),
+ (0x2669, 'โฉ', "music-quarter-note"),
+ (0x266A, 'โช', "music-eighth-note"),
+ (0x266B, 'โซ', "music-eigth-notes"),
+ (0x266C, 'โฌ', "music-sixteenth-notes"),
+ (0x267B, 'โป', "black universal recycling symbol / recycle"),
+ (0x267E, 'โพ', "permanent-paper"),
+ (0x267F, 'โฟ', "wheelchair symbol"),
+ (0x2690, 'โ', "flag-open"),
+ (0x2691, 'โ', "flag"),
+ (0x2692, 'โ', "hammer-and-pick"),
+ (0x2693, 'โ', "anchor"),
+ (0x2694, 'โ', "crossed-swords"),
+ (0x2695, 'โ', "asclepius"),
+ (0x2696, 'โ', "scales"),
+ (0x2698, 'โ', "flower"),
+ (0x2699, 'โ', "gear"),
+ (0x269B, 'โ', "atom"),
+ (0x269C, 'โ', "fleur-de-lis"),
+ (0x26A0, 'โ ', "warning sign"),
+ (0x26A1, 'โก', "bolt / high voltage sign"),
+ (0x26A2, 'โข', "gender-female-female"),
+ (0x26A3, 'โฃ', "gender-male-male"),
+ (0x26A4, 'โค', "gender-male-female"),
+ (0x26A6, 'โฆ', "gender-transgender"),
+ (0x26A7, 'โง', "gender-non-binary"),
+ (0x26AA, 'โช', "medium white circle"),
+ (0x26AB, 'โซ', "medium black circle"),
+ (0x26B0, 'โฐ', "coffin"),
+ (0x26BD, 'โฝ', "football-soccer / soccer ball"),
+ (0x26BE, 'โพ', "baseball"),
+ (0x26C3, 'โ', "database"),
+ (0x26C4, 'โ', "snowman without snow"),
+ (0x26C5, 'โ
', "sun behind cloud"),
+ (0x26CE, 'โ', "ophiuchus"),
+ (0x26CF, 'โ', "pick"),
+ (0x26D3, 'โ', "dna"),
+ (0x26D4, 'โ', "no entry / no-entry"),
+ (0x26E4, 'โค', "pentagram"),
+ (0x26E7, 'โง', "pentagram-inverted"),
+ (0x26E8, 'โจ', "shield-with-cross"),
+ (0x26E9, 'โฉ', "temple"),
+ (0x26EA, 'โช', "church"),
+ (0x26ED, 'โญ', "gear-no-hub"),
+ (0x26F1, 'โฑ', "beach"),
+ (0x26F2, 'โฒ', "fountain"),
+ (0x26F3, 'โณ', "flag in hole"),
+ (0x26F5, 'โต', "sailboat"),
+ (0x26F6, 'โถ', "four-corners"),
+ (0x26F7, 'โท', "skier"),
+ (0x26F8, 'โธ', "ice-skater"),
+ (0x26FA, 'โบ', "tent"),
+ (0x26FC, 'โผ', "headstone"),
+ (0x26FD, 'โฝ', "fuel pump / fuel-pump"),
+ (0x2702, 'โ', "black scissors"),
+ (0x2705, 'โ
', "white heavy check mark"),
+ (0x2706, 'โ', "phone-location"),
+ (0x2707, 'โ', "film-reel"),
+ (0x2708, 'โ', "airplane"),
+ (0x2709, 'โ', "envelope"),
+ (0x270A, 'โ', "hand-fist / raised fist"),
+ (0x270B, 'โ', "raised hand"),
+ (0x270C, 'โ', "victory hand"),
+ (0x270F, 'โ', "pencil"),
+ (0x2712, 'โ', "black nib"),
+ (0x2714, 'โ', "heavy check mark"),
+ (0x2716, 'โ', "heavy multiplication x / multiply"),
+ (0x271A, 'โ', "plus"),
+ (0x271D, 'โ', "latin-cross"),
+ (0x271F, 'โ', "latin-cross-outline"),
+ (0x2720, 'โ ', "maltese-cross"),
+ (0x2721, 'โก', "star-of-david"),
+ (0x2728, 'โจ', "sparkles"),
+ (0x272A, 'โช', "star-circled"),
+ (0x2731, 'โฑ', "asterisk-six"),
+ (0x2733, 'โณ', "eight spoked asterisk"),
+ (0x2734, 'โด', "eight pointed black star / star-eight-points"),
+ (0x273F, 'โฟ', "black-florette"),
+ (0x2740, 'โ', "florette"),
+ (0x2744, 'โ', "snowflake"),
+ (0x2747, 'โ', "sparkle"),
+ (0x274C, 'โ', "cross mark"),
+ (0x274E, 'โ', "negative squared cross mark"),
+ (0x2753, 'โ', "black question mark ornament"),
+ (0x2754, 'โ', "white question mark ornament"),
+ (0x2755, 'โ', "white exclamation mark ornament"),
+ (0x2757, 'โ', "heavy exclamation mark symbol"),
+ (0x2764, 'โค', "heavy black heart"),
+ (0x2765, 'โฅ', "heart-tilted"),
+ (0x2795, 'โ', "heavy plus sign"),
+ (0x2796, 'โ', "heavy minus sign"),
+ (0x2797, 'โ', "divide / heavy division sign"),
+ (0x27A1, 'โก', "arrow-right / black rightwards arrow"),
+ (0x27B0, 'โฐ', "curly loop"),
+ (0x27BF, 'โฟ', "double curly loop"),
+ (0x27F2, 'โฒ', "rotate-cw-side"),
+ (0x27F3, 'โณ', "rotate-ccw-side"),
+ (0x2934, 'โคด', "arrow pointing rightwards then curving upwards"),
+ (0x2935, 'โคต', "arrow pointing rightwards then curving downwards"),
+ (0x2B05, 'โฌ
', "arrow-left / leftwards black arrow"),
+ (0x2B06, 'โฌ', "arrow-up / upwards black arrow"),
+ (0x2B07, 'โฌ', "arrow-down / downwards black arrow"),
+ (0x2B08, 'โฌ', "arrow-up-right"),
+ (0x2B09, 'โฌ', "arrow-up-left"),
+ (0x2B0A, 'โฌ', "arrow-down-right"),
+ (0x2B0B, 'โฌ', "arrow-down-left"),
+ (0x2B0C, 'โฌ', "arrow-left-right"),
+ (0x2B0D, 'โฌ', "arrow-up-down"),
+ (0x2B1B, 'โฌ', "black large square"),
+ (0x2B1C, 'โฌ', "white large square"),
+ (0x2B1F, 'โฌ', "pentagon"),
+ (0x2B23, 'โฌฃ', "hexagon"),
+ (0x2B50, 'โญ', "white medium star"),
+ (0x2B55, 'โญ', "heavy large circle"),
+ (0x2B88, 'โฎ', "circle-arrow-left"),
+ (0x2B89, 'โฎ', "circle-arrow-up"),
+ (0x2B8A, 'โฎ', "circle-arrow-right"),
+ (0x2B8B, 'โฎ', "circle-arrow-down"),
+ (0x2BA8, 'โฎจ', "arrow-reply"),
+ (0x2BA9, 'โฎฉ', "arrow-forward"),
+ (0x2BAA, 'โฎช', "arrow-undo"),
+ (0x2BAB, 'โฎซ', "arrow-redo"),
+ (0x3030, 'ใฐ', "wavy dash"),
+ (0x303D, 'ใฝ', "part alternation mark"),
+ (0x3297, 'ใ', "circled ideograph congratulation"),
+ (0x3299, 'ใ', "circled ideograph secret"),
+ (0xFE5C, '๏น', "brace-right"),
+ (0xFF01, '๏ผ', "exclamation-mark"),
+ (0xFF03, '๏ผ', "number"),
+ (0xFF04, '๏ผ', "currency-dollar"),
+ (0xFF05, '๏ผ
', "percent"),
+ (0xFF06, '๏ผ', "ampersand"),
+ (0xFF08, '๏ผ', "parenthesis-left"),
+ (0xFF09, '๏ผ', "parenthesis-right"),
+ (0xFF0A, '๏ผ', "asterisk-five"),
+ (0xFF10, '๏ผ', "digit-zero"),
+ (0xFF11, '๏ผ', "digit-one"),
+ (0xFF12, '๏ผ', "digit-two"),
+ (0xFF13, '๏ผ', "digit-three"),
+ (0xFF14, '๏ผ', "digit-four"),
+ (0xFF15, '๏ผ', "digit-five"),
+ (0xFF16, '๏ผ', "digit-six"),
+ (0xFF17, '๏ผ', "digit-seven"),
+ (0xFF18, '๏ผ', "digit-eight"),
+ (0xFF19, '๏ผ', "digit-nine"),
+ (0xFF1F, '๏ผ', "question-mark"),
+ (0xFF20, '๏ผ ', "at-symbol"),
+ (0xFF21, '๏ผก', "letter-A"),
+ (0xFF22, '๏ผข', "letter-B"),
+ (0xFF23, '๏ผฃ', "letter-C"),
+ (0xFF24, '๏ผค', "letter-D"),
+ (0xFF25, '๏ผฅ', "letter-E"),
+ (0xFF26, '๏ผฆ', "letter-F"),
+ (0xFF27, '๏ผง', "letter-G"),
+ (0xFF28, '๏ผจ', "letter-H"),
+ (0xFF29, '๏ผฉ', "letter-I"),
+ (0xFF2A, '๏ผช', "letter-J"),
+ (0xFF2B, '๏ผซ', "letter-K"),
+ (0xFF2C, '๏ผฌ', "letter-L"),
+ (0xFF2D, '๏ผญ', "letter-M"),
+ (0xFF2E, '๏ผฎ', "letter-N"),
+ (0xFF2F, '๏ผฏ', "letter-O"),
+ (0xFF30, '๏ผฐ', "letter-P"),
+ (0xFF31, '๏ผฑ', "letter-Q"),
+ (0xFF32, '๏ผฒ', "letter-R"),
+ (0xFF33, '๏ผณ', "stack-window"),
+ (0xFF34, '๏ผด', "letter-S"),
+ (0xFF35, '๏ผต', "letter-T"),
+ (0xFF36, '๏ผถ', "letter-U"),
+ (0xFF37, '๏ผท', "letter-V"),
+ (0xFF38, '๏ผธ', "letter-W"),
+ (0xFF39, '๏ผน', "letter-X"),
+ (0xFF3A, '๏ผบ', "letter-Z"),
+ (0xFF3B, '๏ผป', "square-bracket-left"),
+ (0xFF3C, '๏ผผ', "at"),
+ (0xFF3D, '๏ผฝ', "square-bracket-right"),
+ (0xFF41, '๏ฝ', "letter-a"),
+ (0xFF42, '๏ฝ', "letter-b"),
+ (0xFF43, '๏ฝ', "letter-c"),
+ (0xFF44, '๏ฝ', "letter-d"),
+ (0xFF45, '๏ฝ
', "letter-e"),
+ (0xFF46, '๏ฝ', "letter-f"),
+ (0xFF47, '๏ฝ', "letter-g"),
+ (0xFF48, '๏ฝ', "letter-h"),
+ (0xFF49, '๏ฝ', "letter-i"),
+ (0xFF4A, '๏ฝ', "letter-j"),
+ (0xFF4B, '๏ฝ', "letter-k"),
+ (0xFF4C, '๏ฝ', "letter-l"),
+ (0xFF4D, '๏ฝ', "letter-m"),
+ (0xFF4E, '๏ฝ', "letter-n"),
+ (0xFF4F, '๏ฝ', "letter-o"),
+ (0xFF50, '๏ฝ', "letter-p"),
+ (0xFF51, '๏ฝ', "letter-q"),
+ (0xFF52, '๏ฝ', "letter-r"),
+ (0xFF53, '๏ฝ', "letter-s"),
+ (0xFF54, '๏ฝ', "letter-t"),
+ (0xFF55, '๏ฝ', "letter-u"),
+ (0xFF56, '๏ฝ', "letter-v"),
+ (0xFF57, '๏ฝ', "letter-w"),
+ (0xFF58, '๏ฝ', "letter-x"),
+ (0xFF59, '๏ฝ', "letter-y"),
+ (0xFF5A, '๏ฝ', "letter-z"),
+ (0xFF5B, '๏ฝ', "brace-left"),
+ (0xFFE1, '๏ฟก', "currency-pound"),
+ (0xFFE5, '๏ฟฅ', "yen"),
+ (0x1D11E, '๐', "g-clef"),
+ (0x1F004, '๐', "mahjong tile red dragon"),
+ (0x1F0A1, '๐ก', "ace-of-spades"),
+ (0x1F0B1, '๐ฑ', "ace-of-hearts"),
+ (0x1F0C1, '๐', "ace-of-diamonds"),
+ (0x1F0CF, '๐', "playing card black joker"),
+ (0x1F0D1, '๐', "ace-of-clubs"),
+ (0x1F170, '๐
ฐ', "negative squared latin capital letter a"),
+ (0x1F171, '๐
ฑ', "negative squared latin capital letter b"),
+ (0x1F17E, '๐
พ', "negative squared latin capital letter o"),
+ (0x1F17F, '๐
ฟ', "negative squared latin capital letter p"),
+ (0x1F18E, '๐', "negative squared ab"),
+ (0x1F191, '๐', "squared cl"),
+ (0x1F192, '๐', "squared cool"),
+ (0x1F193, '๐', "squared free"),
+ (0x1F194, '๐', "squared id"),
+ (0x1F195, '๐', "squared new"),
+ (0x1F196, '๐', "squared ng"),
+ (0x1F197, '๐', "squared ok"),
+ (0x1F198, '๐', "squared sos"),
+ (0x1F199, '๐', "squared up with exclamation mark"),
+ (0x1F19A, '๐', "squared vs"),
+ (0x1F1E6, '๐ฆ', "regional indicator symbol letter a"),
+ (0x1F1E7, '๐ง', "regional indicator symbol letter b"),
+ (0x1F1E8, '๐จ', "regional indicator symbol letter c"),
+ (0x1F1E9, '๐ฉ', "regional indicator symbol letter d"),
+ (0x1F1EA, '๐ช', "regional indicator symbol letter e"),
+ (0x1F1EB, '๐ซ', "regional indicator symbol letter f"),
+ (0x1F1EC, '๐ฌ', "regional indicator symbol letter g"),
+ (0x1F1ED, '๐ญ', "regional indicator symbol letter h"),
+ (0x1F1EE, '๐ฎ', "regional indicator symbol letter i"),
+ (0x1F1EF, '๐ฏ', "regional indicator symbol letter j"),
+ (0x1F1F0, '๐ฐ', "regional indicator symbol letter k"),
+ (0x1F1F1, '๐ฑ', "regional indicator symbol letter l"),
+ (0x1F1F2, '๐ฒ', "regional indicator symbol letter m"),
+ (0x1F1F3, '๐ณ', "regional indicator symbol letter n"),
+ (0x1F1F4, '๐ด', "regional indicator symbol letter o"),
+ (0x1F1F5, '๐ต', "regional indicator symbol letter p"),
+ (0x1F1F6, '๐ถ', "regional indicator symbol letter q"),
+ (0x1F1F7, '๐ท', "regional indicator symbol letter r"),
+ (0x1F1F8, '๐ธ', "regional indicator symbol letter s"),
+ (0x1F1F9, '๐น', "regional indicator symbol letter t"),
+ (0x1F1FA, '๐บ', "regional indicator symbol letter u"),
+ (0x1F1FB, '๐ป', "regional indicator symbol letter v"),
+ (0x1F1FC, '๐ผ', "regional indicator symbol letter w"),
+ (0x1F1FD, '๐ฝ', "regional indicator symbol letter x"),
+ (0x1F1FE, '๐พ', "regional indicator symbol letter y"),
+ (0x1F1FF, '๐ฟ', "regional indicator symbol letter z"),
+ (0x1F201, '๐', "squared katakana koko"),
+ (0x1F202, '๐', "squared katakana sa"),
+ (0x1F21A, '๐', "squared cjk unified ideograph-7121"),
+ (0x1F22F, '๐ฏ', "squared cjk unified ideograph-6307"),
+ (0x1F232, '๐ฒ', "squared cjk unified ideograph-7981"),
+ (0x1F233, '๐ณ', "squared cjk unified ideograph-7a7a"),
+ (0x1F234, '๐ด', "squared cjk unified ideograph-5408"),
+ (0x1F235, '๐ต', "squared cjk unified ideograph-6e80"),
+ (0x1F236, '๐ถ', "squared cjk unified ideograph-6709"),
+ (0x1F237, '๐ท', "squared cjk unified ideograph-6708"),
+ (0x1F238, '๐ธ', "squared cjk unified ideograph-7533"),
+ (0x1F239, '๐น', "squared cjk unified ideograph-5272"),
+ (0x1F23A, '๐บ', "squared cjk unified ideograph-55b6"),
+ (0x1F250, '๐', "circled ideograph advantage"),
+ (0x1F251, '๐', "circled ideograph accept"),
+ (0x1F300, '๐', "cyclone"),
+ (0x1F301, '๐', "foggy"),
+ (0x1F302, '๐', "closed umbrella"),
+ (0x1F303, '๐', "night with stars"),
+ (0x1F304, '๐', "sunrise over mountains"),
+ (0x1F305, '๐
', "sunrise"),
+ (0x1F306, '๐', "cityscape at dusk"),
+ (0x1F307, '๐', "sunset over buildings"),
+ (0x1F308, '๐', "rainbow"),
+ (0x1F309, '๐', "bridge at night"),
+ (0x1F30A, '๐', "water wave / water-wave"),
+ (0x1F30B, '๐', "volcano"),
+ (0x1F30C, '๐', "milky way"),
+ (0x1F30D, '๐', "earth globe europe-africa / globe2"),
+ (0x1F30E, '๐', "earth globe americas"),
+ (0x1F30F, '๐', "earth globe asia-australia"),
+ (0x1F310, '๐', "globe with meridians / globe-meridians"),
+ (0x1F311, '๐', "moon-new / new moon symbol"),
+ (0x1F312, '๐', "moon-waxing-crescent / waxing crescent moon symbol"),
+ (0x1F313, '๐', "first quarter moon symbol / moon-first-quarter"),
+ (0x1F314, '๐', "moon-waxing-gibbous / waxing gibbous moon symbol"),
+ (0x1F315, '๐', "full moon symbol / moon-full"),
+ (0x1F316, '๐', "moon-waning-gibbous / waning gibbous moon symbol"),
+ (0x1F317, '๐', "last quarter moon symbol / moon-last-quarter"),
+ (0x1F318, '๐', "moon-waning-crescent / waning crescent moon symbol"),
+ (0x1F319, '๐', "crescent moon"),
+ (0x1F31A, '๐', "new moon with face"),
+ (0x1F31B, '๐', "first quarter moon with face"),
+ (0x1F31C, '๐', "last quarter moon with face"),
+ (0x1F31D, '๐', "full moon with face"),
+ (0x1F31E, '๐', "sun with face"),
+ (0x1F31F, '๐', "glowing star"),
+ (0x1F320, '๐ ', "shooting star / star-shooting"),
+ (0x1F330, '๐ฐ', "chestnut"),
+ (0x1F331, '๐ฑ', "seedling"),
+ (0x1F332, '๐ฒ', "evergreen tree / tree-pine"),
+ (0x1F333, '๐ณ', "deciduous tree"),
+ (0x1F334, '๐ด', "palm tree / tree-palm"),
+ (0x1F335, '๐ต', "cactus"),
+ (0x1F337, '๐ท', "tulip"),
+ (0x1F338, '๐ธ', "cherry blossom"),
+ (0x1F339, '๐น', "rose"),
+ (0x1F33A, '๐บ', "hibiscus"),
+ (0x1F33B, '๐ป', "sunflower"),
+ (0x1F33C, '๐ผ', "blossom"),
+ (0x1F33D, '๐ฝ', "ear of maize"),
+ (0x1F33E, '๐พ', "ear of rice"),
+ (0x1F33F, '๐ฟ', "herb"),
+ (0x1F340, '๐', "four leaf clover / four-leaf-clover"),
+ (0x1F341, '๐', "maple leaf / maple-leaf"),
+ (0x1F342, '๐', "fallen leaf"),
+ (0x1F343, '๐', "leaf fluttering in wind"),
+ (0x1F344, '๐', "mushroom"),
+ (0x1F345, '๐
', "tomato3"),
+ (0x1F346, '๐', "aubergine"),
+ (0x1F347, '๐', "grapes"),
+ (0x1F348, '๐', "melon"),
+ (0x1F349, '๐', "watermelon"),
+ (0x1F34A, '๐', "tangerine"),
+ (0x1F34B, '๐', "lemon"),
+ (0x1F34C, '๐', "banana"),
+ (0x1F34D, '๐', "pineapple"),
+ (0x1F34E, '๐', "red apple"),
+ (0x1F34F, '๐', "green apple"),
+ (0x1F350, '๐', "pear"),
+ (0x1F351, '๐', "peach"),
+ (0x1F352, '๐', "cherries"),
+ (0x1F353, '๐', "strawberry"),
+ (0x1F354, '๐', "food-hamburger"),
+ (0x1F355, '๐', "food-pizza / slice of pizza"),
+ (0x1F356, '๐', "meat on bone"),
+ (0x1F357, '๐', "chicken-leg / poultry leg"),
+ (0x1F358, '๐', "rice cracker"),
+ (0x1F359, '๐', "rice ball / rice-ball"),
+ (0x1F35A, '๐', "cooked rice / food-rice"),
+ (0x1F35B, '๐', "curry and rice"),
+ (0x1F35C, '๐', "steaming bowl / steaming-bowl"),
+ (0x1F35D, '๐', "food-spaghetti"),
+ (0x1F35E, '๐', "bread"),
+ (0x1F35F, '๐', "french fries"),
+ (0x1F360, '๐ ', "roasted sweet potato"),
+ (0x1F361, '๐ก', "dango"),
+ (0x1F362, '๐ข', "oden"),
+ (0x1F363, '๐ฃ', "sushi"),
+ (0x1F364, '๐ค', "fried shrimp"),
+ (0x1F365, '๐ฅ', "fish cake with swirl design"),
+ (0x1F366, '๐ฆ', "soft ice cream"),
+ (0x1F367, '๐ง', "shaved ice"),
+ (0x1F368, '๐จ', "food-ice-cream / ice cream"),
+ (0x1F369, '๐ฉ', "donut / doughnut"),
+ (0x1F36A, '๐ช', "cookie / gingerbread"),
+ (0x1F36B, '๐ซ', "chocolate bar"),
+ (0x1F36C, '๐ฌ', "candy"),
+ (0x1F36D, '๐ญ', "lollipop"),
+ (0x1F36E, '๐ฎ', "custard"),
+ (0x1F36F, '๐ฏ', "honey pot"),
+ (0x1F370, '๐ฐ', "shortcake"),
+ (0x1F371, '๐ฑ', "bento box"),
+ (0x1F372, '๐ฒ', "pot of food / pot-food"),
+ (0x1F373, '๐ณ', "cooking"),
+ (0x1F374, '๐ด', "fork and knife / fork-knife"),
+ (0x1F375, '๐ต', "teacup without handle"),
+ (0x1F376, '๐ถ', "sake bottle and cup"),
+ (0x1F377, '๐ท', "drink-wine / wine glass"),
+ (0x1F378, '๐ธ', "cocktail glass / drink-cocktail"),
+ (0x1F379, '๐น', "drink-tropical / tropical drink"),
+ (0x1F37A, '๐บ', "beer mug / drink-beer"),
+ (0x1F37B, '๐ป', "clinking beer mugs"),
+ (0x1F37C, '๐ผ', "baby bottle / baby-bottle"),
+ (0x1F37D, '๐ฝ', "fork-knife-plate"),
+ (0x1F380, '๐', "ribbon"),
+ (0x1F381, '๐', "gift / wrapped present"),
+ (0x1F382, '๐', "birthday cake"),
+ (0x1F383, '๐', "jack-o-lantern"),
+ (0x1F384, '๐', "christmas tree / christmas-tree"),
+ (0x1F385, '๐
', "face-santa-claus / father christmas"),
+ (0x1F386, '๐', "fireworks"),
+ (0x1F387, '๐', "firework sparkler"),
+ (0x1F388, '๐', "balloon"),
+ (0x1F389, '๐', "party popper"),
+ (0x1F38A, '๐', "confetti ball"),
+ (0x1F38B, '๐', "tanabata tree"),
+ (0x1F38C, '๐', "crossed flags"),
+ (0x1F38D, '๐', "pine decoration"),
+ (0x1F38E, '๐', "japanese dolls"),
+ (0x1F38F, '๐', "carp streamer"),
+ (0x1F390, '๐', "wind chime"),
+ (0x1F391, '๐', "moon viewing ceremony"),
+ (0x1F392, '๐', "school satchel"),
+ (0x1F393, '๐', "graduation cap"),
+ (0x1F396, '๐', "medal-military"),
+ (0x1F39E, '๐', "film"),
+ (0x1F39F, '๐', "ticket"),
+ (0x1F3A0, '๐ ', "carousel horse"),
+ (0x1F3A1, '๐ก', "ferris wheel / ferris-wheel"),
+ (0x1F3A2, '๐ข', "roller coaster / rollercoaster"),
+ (0x1F3A3, '๐ฃ', "fishing pole and fish"),
+ (0x1F3A4, '๐ค', "microphone"),
+ (0x1F3A5, '๐ฅ', "camera-movie / movie camera"),
+ (0x1F3A6, '๐ฆ', "cinema"),
+ (0x1F3A7, '๐ง', "headphone"),
+ (0x1F3A8, '๐จ', "artist palette"),
+ (0x1F3A9, '๐ฉ', "top hat / tophat"),
+ (0x1F3AA, '๐ช', "circus tent"),
+ (0x1F3AB, '๐ซ', "ticket"),
+ (0x1F3AC, '๐ฌ', "clapper board / movie"),
+ (0x1F3AD, '๐ญ', "performing arts / performing-arts"),
+ (0x1F3AE, '๐ฎ', "video game / videogame"),
+ (0x1F3AF, '๐ฏ', "direct hit / target"),
+ (0x1F3B0, '๐ฐ', "slot machine / slot-machine"),
+ (0x1F3B1, '๐ฑ', "billiards"),
+ (0x1F3B2, '๐ฒ', "game die"),
+ (0x1F3B3, '๐ณ', "bowling"),
+ (0x1F3B4, '๐ด', "flower playing cards"),
+ (0x1F3B5, '๐ต', "musical note"),
+ (0x1F3B6, '๐ถ', "multiple musical notes"),
+ (0x1F3B7, '๐ท', "saxophone"),
+ (0x1F3B8, '๐ธ', "guitar"),
+ (0x1F3B9, '๐น', "musical keyboard / piano"),
+ (0x1F3BA, '๐บ', "music-trumpet"),
+ (0x1F3BB, '๐ป', "music-violin"),
+ (0x1F3BC, '๐ผ', "musical score"),
+ (0x1F3BD, '๐ฝ', "running shirt with sash"),
+ (0x1F3BE, '๐พ', "tennis racquet and ball"),
+ (0x1F3BF, '๐ฟ', "ski and ski boot"),
+ (0x1F3C0, '๐', "basketball and hoop"),
+ (0x1F3C1, '๐', "chequered flag / flag-checkered"),
+ (0x1F3C2, '๐', "snowboarder / snowboarding"),
+ (0x1F3C3, '๐', "runner / running"),
+ (0x1F3C4, '๐', "surfer"),
+ (0x1F3C5, '๐
', "medal-sports"),
+ (0x1F3C6, '๐', "trophy"),
+ (0x1F3C7, '๐', "horse racing"),
+ (0x1F3C8, '๐', "american football / football-american"),
+ (0x1F3C9, '๐', "rugby football"),
+ (0x1F3CA, '๐', "swimmer / swimming"),
+ (0x1F3CB, '๐', "weighlifting"),
+ (0x1F3CD, '๐', "motorbike"),
+ (0x1F3E0, '๐ ', "home / house building"),
+ (0x1F3E1, '๐ก', "house with garden / volume-mute"),
+ (0x1F3E2, '๐ข', "office building"),
+ (0x1F3E3, '๐ฃ', "japanese post office"),
+ (0x1F3E4, '๐ค', "european post office"),
+ (0x1F3E5, '๐ฅ', "hospital"),
+ (0x1F3E6, '๐ฆ', "bank"),
+ (0x1F3E7, '๐ง', "automated teller machine"),
+ (0x1F3E8, '๐จ', "hotel"),
+ (0x1F3E9, '๐ฉ', "love hotel"),
+ (0x1F3EA, '๐ช', "convenience store / convenience-store"),
+ (0x1F3EB, '๐ซ', "school"),
+ (0x1F3EC, '๐ฌ', "department store"),
+ (0x1F3ED, '๐ญ', "factory"),
+ (0x1F3EE, '๐ฎ', "izakaya lantern"),
+ (0x1F3EF, '๐ฏ', "japanese castle"),
+ (0x1F3F0, '๐ฐ', "european castle"),
+ (0x1F3F7, '๐ท', "label"),
+ (0x1F400, '๐', "rat"),
+ (0x1F401, '๐', "mouse"),
+ (0x1F402, '๐', "ox"),
+ (0x1F403, '๐', "water buffalo"),
+ (0x1F404, '๐', "animal-cow"),
+ (0x1F405, '๐
', "tiger"),
+ (0x1F406, '๐', "leopard"),
+ (0x1F407, '๐', "animal-rabbit"),
+ (0x1F408, '๐', "animal-cat"),
+ (0x1F409, '๐', "dragon"),
+ (0x1F40A, '๐', "crocodile"),
+ (0x1F40B, '๐', "whale"),
+ (0x1F40C, '๐', "animal-snail"),
+ (0x1F40D, '๐', "snake"),
+ (0x1F40E, '๐', "animal-horse"),
+ (0x1F40F, '๐', "ram"),
+ (0x1F410, '๐', "animal-goat"),
+ (0x1F411, '๐', "sheep"),
+ (0x1F412, '๐', "monkey"),
+ (0x1F413, '๐', "animal-rooster"),
+ (0x1F414, '๐', "food-chicken"),
+ (0x1F415, '๐', "dog"),
+ (0x1F416, '๐', "animal-pig"),
+ (0x1F417, '๐', "boar"),
+ (0x1F418, '๐', "elephant"),
+ (0x1F419, '๐', "octopus"),
+ (0x1F41A, '๐', "spiral shell"),
+ (0x1F41B, '๐', "animal-bug"),
+ (0x1F41C, '๐', "animal-ant"),
+ (0x1F41D, '๐', "honeybee"),
+ (0x1F41E, '๐', "lady beetle"),
+ (0x1F41F, '๐', "fish"),
+ (0x1F420, '๐ ', "tropical fish"),
+ (0x1F421, '๐ก', "blowfish"),
+ (0x1F422, '๐ข', "turtle"),
+ (0x1F423, '๐ฃ', "hatching chick"),
+ (0x1F424, '๐ค', "baby chick"),
+ (0x1F425, '๐ฅ', "front-facing baby chick"),
+ (0x1F426, '๐ฆ', "bird"),
+ (0x1F427, '๐ง', "linux / penguin"),
+ (0x1F428, '๐จ', "koala"),
+ (0x1F429, '๐ฉ', "poodle"),
+ (0x1F42A, '๐ช', "animal-dromedary-camel"),
+ (0x1F42B, '๐ซ', "animal-bactrian-camel / bactrian camel"),
+ (0x1F42C, '๐ฌ', "animal-dolphin"),
+ (0x1F42D, '๐ญ', "mouse face"),
+ (0x1F42E, '๐ฎ', "cow face"),
+ (0x1F42F, '๐ฏ', "tiger face"),
+ (0x1F430, '๐ฐ', "rabbit face"),
+ (0x1F431, '๐ฑ', "cat face / face-kitty"),
+ (0x1F432, '๐ฒ', "dragon face"),
+ (0x1F433, '๐ณ', "spouting whale"),
+ (0x1F434, '๐ด', "horse face"),
+ (0x1F435, '๐ต', "face-monkey / monkey face"),
+ (0x1F436, '๐ถ', "dog face / face-chihuahua"),
+ (0x1F437, '๐ท', "pig face"),
+ (0x1F438, '๐ธ', "frog face"),
+ (0x1F439, '๐น', "face-hamster / hamster face"),
+ (0x1F43A, '๐บ', "wolf face"),
+ (0x1F43B, '๐ป', "bear face / face-bear"),
+ (0x1F43C, '๐ผ', "panda face"),
+ (0x1F43D, '๐ฝ', "pig nose"),
+ (0x1F43E, '๐พ', "paw prints / paw-prints"),
+ (0x1F440, '๐', "eyes"),
+ (0x1F441, '๐', "eye"),
+ (0x1F442, '๐', "ear"),
+ (0x1F443, '๐', "nose"),
+ (0x1F444, '๐', "mouth"),
+ (0x1F445, '๐
', "tongue"),
+ (0x1F446, '๐', "white up pointing backhand index"),
+ (0x1F447, '๐', "white down pointing backhand index"),
+ (0x1F448, '๐', "white left pointing backhand index"),
+ (0x1F449, '๐', "white right pointing backhand index"),
+ (0x1F44A, '๐', "fisted hand sign"),
+ (0x1F44B, '๐', "waving hand sign"),
+ (0x1F44C, '๐', "ok hand sign"),
+ (0x1F44D, '๐', "thumbs up sign / thumbs-up"),
+ (0x1F44E, '๐', "thumbs down sign / thumbs-down"),
+ (0x1F44F, '๐', "clapping hands sign"),
+ (0x1F450, '๐', "open hands sign"),
+ (0x1F451, '๐', "crown"),
+ (0x1F452, '๐', "womans hat"),
+ (0x1F453, '๐', "eyeglasses"),
+ (0x1F454, '๐', "outfit-necktie"),
+ (0x1F455, '๐', "outfit-shirt"),
+ (0x1F456, '๐', "jeans"),
+ (0x1F457, '๐', "outfit-dress"),
+ (0x1F458, '๐', "kimono"),
+ (0x1F459, '๐', "outfit-bikini"),
+ (0x1F45A, '๐', "womans clothes"),
+ (0x1F45B, '๐', "purse"),
+ (0x1F45C, '๐', "handbag"),
+ (0x1F45D, '๐', "pouch"),
+ (0x1F45E, '๐', "mans shoe"),
+ (0x1F45F, '๐', "athletic shoe"),
+ (0x1F460, '๐ ', "high-heeled shoe / high-heeled-shoes"),
+ (0x1F461, '๐ก', "sandals / womans sandal"),
+ (0x1F462, '๐ข', "womans boots"),
+ (0x1F463, '๐ฃ', "footprints"),
+ (0x1F464, '๐ค', "bust in silhouette / user"),
+ (0x1F465, '๐ฅ', "busts in silhouette / users"),
+ (0x1F466, '๐ฆ', "face-boy"),
+ (0x1F467, '๐ง', "face-girl"),
+ (0x1F468, '๐จ', "face-man"),
+ (0x1F469, '๐ฉ', "face-woman"),
+ (0x1F46A, '๐ช', "family"),
+ (0x1F46B, '๐ซ', "man and woman holding hands / man-and-woman"),
+ (0x1F46C, '๐ฌ', "man-and-man / two men holding hands"),
+ (0x1F46D, '๐ญ', "two women holding hands / woman-and-woman"),
+ (0x1F46E, '๐ฎ', "police officer"),
+ (0x1F46F, '๐ฏ', "woman with bunny ears"),
+ (0x1F470, '๐ฐ', "bride with veil"),
+ (0x1F471, '๐ฑ', "person with blond hair"),
+ (0x1F472, '๐ฒ', "man with gua pi mao"),
+ (0x1F473, '๐ณ', "face-man-with-turban / man with turban"),
+ (0x1F474, '๐ด', "face-old-chinese-man / older man"),
+ (0x1F475, '๐ต', "older woman"),
+ (0x1F476, '๐ถ', "face-baby"),
+ (0x1F477, '๐ท', "construction worker / construction-worker"),
+ (0x1F478, '๐ธ', "face-princess"),
+ (0x1F479, '๐น', "japanese ogre"),
+ (0x1F47A, '๐บ', "japanese goblin"),
+ (0x1F47B, '๐ป', "ghost"),
+ (0x1F47C, '๐ผ', "baby angel"),
+ (0x1F47D, '๐ฝ', "extraterrestrial alien"),
+ (0x1F47E, '๐พ', "alien monster"),
+ (0x1F47F, '๐ฟ', "imp"),
+ (0x1F480, '๐', "skull"),
+ (0x1F481, '๐', "face-callcenter / information desk person"),
+ (0x1F482, '๐', "guardsman"),
+ (0x1F483, '๐', "dancer / dancing"),
+ (0x1F484, '๐', "lipstick"),
+ (0x1F485, '๐
', "nail polish"),
+ (0x1F486, '๐', "face massage"),
+ (0x1F487, '๐', "haircut"),
+ (0x1F488, '๐', "barber pole"),
+ (0x1F489, '๐', "syringe"),
+ (0x1F48A, '๐', "pill"),
+ (0x1F48B, '๐', "kiss mark"),
+ (0x1F48C, '๐', "love letter"),
+ (0x1F48D, '๐', "ring"),
+ (0x1F48E, '๐', "diamond / gem stone"),
+ (0x1F48F, '๐', "kiss"),
+ (0x1F490, '๐', "bouquet"),
+ (0x1F491, '๐', "couple with heart"),
+ (0x1F492, '๐', "wedding"),
+ (0x1F493, '๐', "beating heart / heart-beating"),
+ (0x1F494, '๐', "broken heart / heart-broken"),
+ (0x1F495, '๐', "two hearts"),
+ (0x1F496, '๐', "sparkling heart"),
+ (0x1F497, '๐', "growing heart"),
+ (0x1F498, '๐', "heart with arrow / heart-with-arrow"),
+ (0x1F499, '๐', "blue heart"),
+ (0x1F49A, '๐', "green heart"),
+ (0x1F49B, '๐', "yellow heart"),
+ (0x1F49C, '๐', "purple heart"),
+ (0x1F49D, '๐', "heart with ribbon / heart-ribbon"),
+ (0x1F49E, '๐', "revolving hearts"),
+ (0x1F49F, '๐', "heart decoration"),
+ (0x1F4A0, '๐ ', "diamond shape with a dot inside"),
+ (0x1F4A1, '๐ก', "electric light bulb / lightbulb"),
+ (0x1F4A2, '๐ข', "anger symbol"),
+ (0x1F4A3, '๐ฃ', "bomb"),
+ (0x1F4A4, '๐ค', "sleeping symbol"),
+ (0x1F4A5, '๐ฅ', "collision symbol / explosion"),
+ (0x1F4A6, '๐ฆ', "splashing sweat symbol"),
+ (0x1F4A7, '๐ง', "droplet"),
+ (0x1F4A8, '๐จ', "dash symbol"),
+ (0x1F4A9, '๐ฉ', "pile of poo"),
+ (0x1F4AA, '๐ช', "flexed biceps"),
+ (0x1F4AB, '๐ซ', "dizzy symbol"),
+ (0x1F4AC, '๐ฌ', "speech balloon / speech-bubble"),
+ (0x1F4AD, '๐ญ', "thought balloon"),
+ (0x1F4AE, '๐ฎ', "white flower"),
+ (0x1F4AF, '๐ฏ', "hundred points symbol"),
+ (0x1F4B0, '๐ฐ', "money bag / money-bag"),
+ (0x1F4B1, '๐ฑ', "currency exchange / currency-exchange"),
+ (0x1F4B2, '๐ฒ', "heavy dollar sign"),
+ (0x1F4B3, '๐ณ', "credit card / creditcard"),
+ (0x1F4B4, '๐ด', "banknote with yen sign"),
+ (0x1F4B5, '๐ต', "banknote with dollar sign"),
+ (0x1F4B6, '๐ถ', "banknote with euro sign"),
+ (0x1F4B7, '๐ท', "banknote with pound sign"),
+ (0x1F4B8, '๐ธ', "money with wings"),
+ (0x1F4B9, '๐น', "chart with upwards trend and yen sign"),
+ (0x1F4BA, '๐บ', "chair / seat"),
+ (0x1F4BB, '๐ป', "laptop / personal computer"),
+ (0x1F4BC, '๐ผ', "briefcase / suitcase"),
+ (0x1F4BD, '๐ฝ', "minidisc"),
+ (0x1F4BE, '๐พ', "floppy disk"),
+ (0x1F4BF, '๐ฟ', "disk / optical disc"),
+ (0x1F4C0, '๐', "dvd"),
+ (0x1F4C1, '๐', "file folder"),
+ (0x1F4C2, '๐', "open file folder"),
+ (0x1F4C3, '๐', "page with curl"),
+ (0x1F4C4, '๐', "page facing up"),
+ (0x1F4C5, '๐
', "calendar-month"),
+ (0x1F4C6, '๐', "calendar-day / tear-off calendar"),
+ (0x1F4C7, '๐', "card index"),
+ (0x1F4C8, '๐', "chart with upwards trend / chart-up"),
+ (0x1F4C9, '๐', "chart with downwards trend / chart-down"),
+ (0x1F4CA, '๐', "bar chart"),
+ (0x1F4CB, '๐', "clipboard"),
+ (0x1F4CC, '๐', "pushpin"),
+ (0x1F4CD, '๐', "round pushpin"),
+ (0x1F4CE, '๐', "paperclip"),
+ (0x1F4CF, '๐', "ruler2 / straight ruler"),
+ (0x1F4D0, '๐', "triangular ruler"),
+ (0x1F4D1, '๐', "bookmark tabs"),
+ (0x1F4D2, '๐', "addressbook / ledger"),
+ (0x1F4D3, '๐', "notebook"),
+ (0x1F4D4, '๐', "notebook with decorative cover"),
+ (0x1F4D5, '๐', "closed book"),
+ (0x1F4D6, '๐', "book-open / open book"),
+ (0x1F4D7, '๐', "green book"),
+ (0x1F4D8, '๐', "blue book"),
+ (0x1F4D9, '๐', "orange book"),
+ (0x1F4DA, '๐', "books"),
+ (0x1F4DB, '๐', "name badge"),
+ (0x1F4DC, '๐', "scroll"),
+ (0x1F4DD, '๐', "memo"),
+ (0x1F4DE, '๐', "phone-receiver / telephone receiver"),
+ (0x1F4DF, '๐', "pager"),
+ (0x1F4E0, '๐ ', "fax machine"),
+ (0x1F4E1, '๐ก', "satellite antenna / satellite-disk"),
+ (0x1F4E2, '๐ข', "public address loudspeaker"),
+ (0x1F4E3, '๐ฃ', "cheering megaphone"),
+ (0x1F4E4, '๐ค', "outbox tray"),
+ (0x1F4E5, '๐ฅ', "inbox tray"),
+ (0x1F4E6, '๐ฆ', "package"),
+ (0x1F4E7, '๐ง', "e-mail symbol"),
+ (0x1F4E8, '๐จ', "incoming envelope"),
+ (0x1F4E9, '๐ฉ', "envelope with downwards arrow above"),
+ (0x1F4EA, '๐ช', "closed mailbox with lowered flag"),
+ (0x1F4EB, '๐ซ', "closed mailbox with raised flag"),
+ (0x1F4EC, '๐ฌ', "open mailbox with raised flag"),
+ (0x1F4ED, '๐ญ', "open mailbox with lowered flag"),
+ (0x1F4EE, '๐ฎ', "postbox"),
+ (0x1F4EF, '๐ฏ', "postal horn"),
+ (0x1F4F0, '๐ฐ', "newspaper"),
+ (0x1F4F1, '๐ฑ', "mobile phone / phone-mobile"),
+ (0x1F4F2, '๐ฒ', "mobile phone with rightwards arrow at left"),
+ (0x1F4F3, '๐ณ', "vibration mode"),
+ (0x1F4F4, '๐ด', "mobile phone off"),
+ (0x1F4F5, '๐ต', "no mobile phones"),
+ (0x1F4F6, '๐ถ', "antenna with bars"),
+ (0x1F4F7, '๐ท', "photo-camera"),
+ (0x1F4F8, '๐ธ', "photo-camera-flash"),
+ (0x1F4F9, '๐น', "video camera / video-camera"),
+ (0x1F4FA, '๐บ', "television"),
+ (0x1F4FB, '๐ป', "radio"),
+ (0x1F4FC, '๐ผ', "videocassette"),
+ (0x1F4FD, '๐ฝ', "projector"),
+ (0x1F4FE, '๐พ', "music-player"),
+ (0x1F500, '๐', "shuffle / twisted rightwards arrows"),
+ (0x1F501, '๐', "clockwise rightwards and leftwards open circle arrows / loop"),
+ (0x1F502, '๐', "clockwise rightwards and leftwards open circle arrows with circled one overlay"),
+ (0x1F503, '๐', "clockwise downwards and upwards open circle arrows / loop-alt"),
+ (0x1F504, '๐', "anticlockwise downwards and upwards open circle arrows"),
+ (0x1F505, '๐
', "low brightness symbol"),
+ (0x1F506, '๐', "high brightness symbol"),
+ (0x1F507, '๐', "speaker with cancellation stroke"),
+ (0x1F508, '๐', "speaker / volume"),
+ (0x1F509, '๐', "speaker with one sound wave / volume-low"),
+ (0x1F50A, '๐', "speaker with three sound waves / volume-high"),
+ (0x1F50B, '๐', "battery"),
+ (0x1F50C, '๐', "electric plug / electric-cord"),
+ (0x1F50D, '๐', "left-pointing magnifying glass / search-left"),
+ (0x1F50E, '๐', "right-pointing magnifying glass / search-right"),
+ (0x1F50F, '๐', "lock with ink pen"),
+ (0x1F510, '๐', "closed lock with key"),
+ (0x1F511, '๐', "key"),
+ (0x1F512, '๐', "lock"),
+ (0x1F513, '๐', "lock-open / open lock"),
+ (0x1F514, '๐', "bell"),
+ (0x1F515, '๐', "bell with cancellation stroke"),
+ (0x1F516, '๐', "bookmark"),
+ (0x1F517, '๐', "link symbol"),
+ (0x1F518, '๐', "radio button / radio-checked"),
+ (0x1F519, '๐', "back with leftwards arrow above"),
+ (0x1F51A, '๐', "end with leftwards arrow above"),
+ (0x1F51B, '๐', "on with exclamation mark with left right arrow above"),
+ (0x1F51C, '๐', "soon with rightwards arrow above"),
+ (0x1F51D, '๐', "top with upwards arrow above"),
+ (0x1F51E, '๐', "no one under eighteen symbol"),
+ (0x1F51F, '๐', "keycap ten"),
+ (0x1F520, '๐ ', "input symbol for latin capital letters"),
+ (0x1F521, '๐ก', "input symbol for latin small letters"),
+ (0x1F522, '๐ข', "input symbol for numbers"),
+ (0x1F523, '๐ฃ', "input symbol for symbols"),
+ (0x1F524, '๐ค', "input symbol for latin letters"),
+ (0x1F525, '๐ฅ', "fire"),
+ (0x1F526, '๐ฆ', "electric torch / flashlight"),
+ (0x1F527, '๐ง', "wrench"),
+ (0x1F528, '๐จ', "hammer"),
+ (0x1F529, '๐ฉ', "nut and bolt / nut-and-bolt"),
+ (0x1F52A, '๐ช', "hocho / knife"),
+ (0x1F52B, '๐ซ', "pistol"),
+ (0x1F52C, '๐ฌ', "microscope"),
+ (0x1F52D, '๐ญ', "telescope"),
+ (0x1F52E, '๐ฎ', "crystal ball"),
+ (0x1F52F, '๐ฏ', "six pointed star with middle dot"),
+ (0x1F530, '๐ฐ', "japanese symbol for beginner"),
+ (0x1F531, '๐ฑ', "trident emblem"),
+ (0x1F532, '๐ฒ', "black square button"),
+ (0x1F533, '๐ณ', "white square button"),
+ (0x1F534, '๐ด', "large red circle"),
+ (0x1F535, '๐ต', "large blue circle"),
+ (0x1F536, '๐ถ', "large orange diamond"),
+ (0x1F537, '๐ท', "large blue diamond"),
+ (0x1F538, '๐ธ', "small orange diamond"),
+ (0x1F539, '๐น', "small blue diamond"),
+ (0x1F53A, '๐บ', "up-pointing red triangle"),
+ (0x1F53B, '๐ป', "down-pointing red triangle"),
+ (0x1F53C, '๐ผ', "up-pointing small red triangle"),
+ (0x1F53D, '๐ฝ', "down-pointing small red triangle"),
+ (0x1F542, '๐', "cross-pommee"),
+ (0x1F548, '๐', "celtic-cross"),
+ (0x1F549, '๐', "om"),
+ (0x1F54A, '๐', "peace-dove"),
+ (0x1F550, '๐', "clock face one oclock"),
+ (0x1F551, '๐', "clock face two oclock"),
+ (0x1F552, '๐', "clock face three oclock"),
+ (0x1F553, '๐', "clock face four oclock"),
+ (0x1F554, '๐', "clock face five oclock"),
+ (0x1F555, '๐', "clock face six oclock"),
+ (0x1F556, '๐', "clock face seven oclock"),
+ (0x1F557, '๐', "clock face eight oclock"),
+ (0x1F558, '๐', "clock face nine oclock"),
+ (0x1F559, '๐', "clock face ten oclock"),
+ (0x1F55A, '๐', "clock face eleven oclock"),
+ (0x1F55B, '๐', "clock face twelve oclock"),
+ (0x1F55C, '๐', "clock face one-thirty"),
+ (0x1F55D, '๐', "clock face two-thirty"),
+ (0x1F55E, '๐', "clock face three-thirty"),
+ (0x1F55F, '๐', "clock face four-thirty"),
+ (0x1F560, '๐ ', "clock face five-thirty"),
+ (0x1F561, '๐ก', "clock face six-thirty"),
+ (0x1F562, '๐ข', "clock face seven-thirty"),
+ (0x1F563, '๐ฃ', "clock face eight-thirty"),
+ (0x1F564, '๐ค', "clock face nine-thirty"),
+ (0x1F565, '๐ฅ', "clock face ten-thirty"),
+ (0x1F566, '๐ฆ', "clock face eleven-thirty"),
+ (0x1F567, '๐ง', "clock face twelve-thirty"),
+ (0x1F56B, '๐ซ', "bullhorn"),
+ (0x1F56F, '๐ฏ', "candle"),
+ (0x1F571, '๐ฑ', "death"),
+ (0x1F575, '๐ต', "spy"),
+ (0x1F576, '๐ถ', "sunglasses"),
+ (0x1F577, '๐ท', "spider"),
+ (0x1F578, '๐ธ', "spider7-web"),
+ (0x1F579, '๐น', "joystick"),
+ (0x1F583, '๐', "envelope-stamped"),
+ (0x1F58A, '๐', "pen"),
+ (0x1F5A5, '๐ฅ', "pc-desktop"),
+ (0x1F5A7, '๐ง', "computer-network"),
+ (0x1F5A9, '๐ฉ', "calculator"),
+ (0x1F5AD, '๐ญ', "tape"),
+ (0x1F5AE, '๐ฎ', "keyboard"),
+ (0x1F5B1, '๐ฑ', "mouse"),
+ (0x1F5B3, '๐ณ', "pc-old"),
+ (0x1F5B4, '๐ด', "hard-disk"),
+ (0x1F5B5, '๐ต', "monitor"),
+ (0x1F5B6, '๐ถ', "printer"),
+ (0x1F5B9, '๐น', "file-text"),
+ (0x1F5BB, '๐ป', "file-image"),
+ (0x1F5BC, '๐ผ', "picture"),
+ (0x1F5C0, '๐', "folder"),
+ (0x1F5C1, '๐', "folder-open"),
+ (0x1F5C4, '๐', "cabinet"),
+ (0x1F5CA, '๐', "notepad"),
+ (0x1F5CB, '๐', "file"),
+ (0x1F5D0, '๐', "copy"),
+ (0x1F5D1, '๐', "garbage-can"),
+ (0x1F5D5, '๐', "minimize"),
+ (0x1F5D6, '๐', "maximize-window"),
+ (0x1F5D9, '๐', "cancel"),
+ (0x1F5DB, '๐', "font-size"),
+ (0x1F5DD, '๐', "key-alt"),
+ (0x1F5E0, '๐ ', "chart-line"),
+ (0x1F5E1, '๐ก', "dagger"),
+ (0x1F5FA, '๐บ', "world-map"),
+ (0x1F5FB, '๐ป', "mount fuji"),
+ (0x1F5FC, '๐ผ', "tokyo tower"),
+ (0x1F5FD, '๐ฝ', "statue of liberty"),
+ (0x1F5FE, '๐พ', "silhouette of japan"),
+ (0x1F5FF, '๐ฟ', "moyai"),
+ (0x1F600, '๐', "grinning face"),
+ (0x1F601, '๐', "grinning face with smiling eyes"),
+ (0x1F602, '๐', "face with tears of joy"),
+ (0x1F603, '๐', "smiley-happy / smiling face with open mouth"),
+ (0x1F604, '๐', "smiley-grin / smiling face with open mouth and smiling eyes"),
+ (0x1F605, '๐
', "smiling face with open mouth and cold sweat"),
+ (0x1F606, '๐', "smiling face with open mouth and tightly-closed eyes"),
+ (0x1F607, '๐', "smiling face with halo"),
+ (0x1F608, '๐', "smiley-evil / smiling face with horns"),
+ (0x1F609, '๐', "winking face"),
+ (0x1F60A, '๐', "smiling face with smiling eyes"),
+ (0x1F60B, '๐', "face savouring delicious food"),
+ (0x1F60C, '๐', "relieved face"),
+ (0x1F60D, '๐', "smiling face with heart-shaped eyes"),
+ (0x1F60E, '๐', "smiley-cool / smiling face with sunglasses"),
+ (0x1F60F, '๐', "smirking face"),
+ (0x1F610, '๐', "neutral face"),
+ (0x1F611, '๐', "expressionless face"),
+ (0x1F612, '๐', "unamused face"),
+ (0x1F613, '๐', "face with cold sweat"),
+ (0x1F614, '๐', "pensive face"),
+ (0x1F615, '๐', "confused face"),
+ (0x1F616, '๐', "confounded face"),
+ (0x1F617, '๐', "kissing face"),
+ (0x1F618, '๐', "face throwing a kiss"),
+ (0x1F619, '๐', "kissing face with smiling eyes"),
+ (0x1F61A, '๐', "kissing face with closed eyes"),
+ (0x1F61B, '๐', "face with stuck-out tongue"),
+ (0x1F61C, '๐', "face with stuck-out tongue and winking eye"),
+ (0x1F61D, '๐', "face with stuck-out tongue and tightly-closed eyes"),
+ (0x1F61E, '๐', "disappointed face"),
+ (0x1F61F, '๐', "worried face"),
+ (0x1F620, '๐ ', "angry face"),
+ (0x1F621, '๐ก', "pouting face"),
+ (0x1F622, '๐ข', "crying face"),
+ (0x1F623, '๐ฃ', "persevering face"),
+ (0x1F624, '๐ค', "face with look of triumph"),
+ (0x1F625, '๐ฅ', "disappointed but relieved face"),
+ (0x1F626, '๐ฆ', "frowning face with open mouth"),
+ (0x1F627, '๐ง', "anguished face"),
+ (0x1F628, '๐จ', "fearful face"),
+ (0x1F629, '๐ฉ', "weary face"),
+ (0x1F62A, '๐ช', "sleepy face"),
+ (0x1F62B, '๐ซ', "tired face"),
+ (0x1F62C, '๐ฌ', "grimacing face"),
+ (0x1F62D, '๐ญ', "loudly crying face"),
+ (0x1F62E, '๐ฎ', "face with open mouth"),
+ (0x1F62F, '๐ฏ', "hushed face"),
+ (0x1F630, '๐ฐ', "face with open mouth and cold sweat"),
+ (0x1F631, '๐ฑ', "face screaming in fear"),
+ (0x1F632, '๐ฒ', "astonished face"),
+ (0x1F633, '๐ณ', "flushed face"),
+ (0x1F634, '๐ด', "sleeping face"),
+ (0x1F635, '๐ต', "dizzy face"),
+ (0x1F636, '๐ถ', "face without mouth"),
+ (0x1F637, '๐ท', "face with medical mask"),
+ (0x1F638, '๐ธ', "grinning cat face with smiling eyes"),
+ (0x1F639, '๐น', "cat face with tears of joy"),
+ (0x1F63A, '๐บ', "smiling cat face with open mouth"),
+ (0x1F63B, '๐ป', "smiling cat face with heart-shaped eyes"),
+ (0x1F63C, '๐ผ', "cat face with wry smile"),
+ (0x1F63D, '๐ฝ', "kissing cat face with closed eyes"),
+ (0x1F63E, '๐พ', "pouting cat face"),
+ (0x1F63F, '๐ฟ', "crying cat face"),
+ (0x1F640, '๐', "weary cat face"),
+ (0x1F645, '๐
', "face with no good gesture"),
+ (0x1F646, '๐', "face with ok gesture"),
+ (0x1F647, '๐', "person bowing deeply"),
+ (0x1F648, '๐', "see-no-evil monkey"),
+ (0x1F649, '๐', "hear-no-evil monkey"),
+ (0x1F64A, '๐', "speak-no-evil monkey"),
+ (0x1F64B, '๐', "happy person raising one hand"),
+ (0x1F64C, '๐', "person raising both hands in celebration"),
+ (0x1F64D, '๐', "person frowning"),
+ (0x1F64E, '๐', "person with pouting face"),
+ (0x1F64F, '๐', "person with folded hands"),
+ (0x1F680, '๐', "rocket"),
+ (0x1F681, '๐', "helicopter"),
+ (0x1F682, '๐', "steam locomotive"),
+ (0x1F683, '๐', "railway car"),
+ (0x1F684, '๐', "high-speed train"),
+ (0x1F685, '๐
', "high-speed train with bullet nose"),
+ (0x1F686, '๐', "train"),
+ (0x1F687, '๐', "metro"),
+ (0x1F688, '๐', "light rail"),
+ (0x1F689, '๐', "station"),
+ (0x1F68A, '๐', "tram"),
+ (0x1F68B, '๐', "tram car"),
+ (0x1F68C, '๐', "bus"),
+ (0x1F68D, '๐', "bus-front / oncoming bus"),
+ (0x1F68E, '๐', "trolleybus"),
+ (0x1F68F, '๐', "bus stop"),
+ (0x1F690, '๐', "minibus"),
+ (0x1F691, '๐', "ambulance"),
+ (0x1F692, '๐', "fire engine"),
+ (0x1F693, '๐', "police car"),
+ (0x1F694, '๐', "oncoming police car"),
+ (0x1F695, '๐', "taxi"),
+ (0x1F696, '๐', "oncoming taxi"),
+ (0x1F697, '๐', "automobile / car"),
+ (0x1F698, '๐', "car-front"),
+ (0x1F699, '๐', "recreational vehicle"),
+ (0x1F69A, '๐', "delivery truck"),
+ (0x1F69B, '๐', "articulated lorry"),
+ (0x1F69C, '๐', "tractor"),
+ (0x1F69D, '๐', "monorail"),
+ (0x1F69E, '๐', "mountain railway"),
+ (0x1F69F, '๐', "suspension railway"),
+ (0x1F6A0, '๐ ', "mountain cableway"),
+ (0x1F6A1, '๐ก', "aerial tramway"),
+ (0x1F6A2, '๐ข', "ship"),
+ (0x1F6A3, '๐ฃ', "rowboat"),
+ (0x1F6A4, '๐ค', "speedboat"),
+ (0x1F6A5, '๐ฅ', "horizontal traffic light"),
+ (0x1F6A6, '๐ฆ', "traffic-light / vertical traffic light"),
+ (0x1F6A7, '๐ง', "construction sign"),
+ (0x1F6A8, '๐จ', "police cars revolving light"),
+ (0x1F6A9, '๐ฉ', "triangular flag on post"),
+ (0x1F6AA, '๐ช', "door"),
+ (0x1F6AB, '๐ซ', "forbidden / no entry sign"),
+ (0x1F6AC, '๐ฌ', "smoking symbol"),
+ (0x1F6AD, '๐ญ', "no smoking symbol / smoking-forbidden"),
+ (0x1F6AE, '๐ฎ', "put litter in its place symbol"),
+ (0x1F6AF, '๐ฏ', "do not litter symbol"),
+ (0x1F6B0, '๐ฐ', "potable water symbol"),
+ (0x1F6B1, '๐ฑ', "non-potable water symbol"),
+ (0x1F6B2, '๐ฒ', "bicycle"),
+ (0x1F6B3, '๐ณ', "no bicycles"),
+ (0x1F6B4, '๐ด', "bicyclist"),
+ (0x1F6B5, '๐ต', "mountain bicyclist"),
+ (0x1F6B6, '๐ถ', "pedestrian"),
+ (0x1F6B7, '๐ท', "no pedestrians"),
+ (0x1F6B8, '๐ธ', "children crossing"),
+ (0x1F6B9, '๐น', "mens symbol"),
+ (0x1F6BA, '๐บ', "womens symbol"),
+ (0x1F6BB, '๐ป', "restroom"),
+ (0x1F6BC, '๐ผ', "baby symbol"),
+ (0x1F6BD, '๐ฝ', "toilet"),
+ (0x1F6BE, '๐พ', "water closet"),
+ (0x1F6BF, '๐ฟ', "shower"),
+ (0x1F6C0, '๐', "bath"),
+ (0x1F6C1, '๐', "bathtub"),
+ (0x1F6C2, '๐', "passport control / passport-control"),
+ (0x1F6C3, '๐', "customs"),
+ (0x1F6C4, '๐', "baggage claim"),
+ (0x1F6C5, '๐
', "left luggage / left-luggage"),
+ (0x1F6E0, '๐ ', "hammer-wrench"),
+ (0x1F6E1, '๐ก', "shield"),
+
+ // Private use area extensions:
+ (0xFE4E5, '๓พฅ', "flag japan"),
+ (0xFE4E6, '๓พฆ', "flag usa"),
+ (0xFE4E7, '๓พง', "flag"),
+ (0xFE4E8, '๓พจ', "flag"),
+ (0xFE4E9, '๓พฉ', "flag"),
+ (0xFE4EA, '๓พช', "flag great britain"),
+ (0xFE4EB, '๓พซ', "flag"),
+ (0xFE4EC, '๓พฌ', "flag"),
+ (0xFE4ED, '๓พญ', "flag"),
+ (0xFE4EE, '๓พฎ', "flag south korea"),
+ (0xFE82C, '๓พ ฌ', "number sign in square"),
+ (0xFE82E, '๓พ ฎ', "digit one in square"),
+ (0xFE82F, '๓พ ฏ', "digit two in square"),
+ (0xFE830, '๓พ ฐ', "digit three in square"),
+ (0xFE831, '๓พ ฑ', "digit four in square"),
+ (0xFE832, '๓พ ฒ', "digit five in square"),
+ (0xFE833, '๓พ ณ', "digit six in square"),
+ (0xFE834, '๓พ ด', "digit seven in square"),
+ (0xFE835, '๓พ ต', "digit eight in square"),
+ (0xFE836, '๓พ ถ', "digit nine in square"),
+ (0xFE837, '๓พ ท', "digit zero in square"),
+
+ // Web services / operating systems :/ browsers
+ (0xE600, '๎', "web-dribbble"),
+ (0xE601, '๎', "web-stackoverflow"),
+ (0xE602, '๎', "web-vimeo"),
+ (0xE603, '๎', "web-twitter"),
+ (0xE604, '๎', "web-facebook"),
+ (0xE605, '๎
', "web-googleplus"),
+ (0xE606, '๎', "web-pinterest"),
+ (0xE607, '๎', "web-tumblr"),
+ (0xE608, '๎', "web-linkedin"),
+ (0xE60A, '๎', "web-stumbleupon"),
+ (0xE60B, '๎', "web-lastfm"),
+ (0xE60C, '๎', "web-rdio"),
+ (0xE60D, '๎', "web-spotify"),
+ (0xE60E, '๎', "web-qq"),
+ (0xE60F, '๎', "web-instagram"),
+ (0xE610, '๎', "web-dropbox"),
+ (0xE611, '๎', "web-evernote"),
+ (0xE612, '๎', "web-flattr"),
+ (0xE613, '๎', "web-skype"),
+ (0xE614, '๎', "web-renren"),
+ (0xE615, '๎', "web-sina-weibo"),
+ (0xE616, '๎', "web-paypal"),
+ (0xE617, '๎', "web-picasa"),
+ (0xE618, '๎', "os-android"),
+ (0xE619, '๎', "web-mixi"),
+ (0xE61A, '๎', "web-behance"),
+ (0xE61B, '๎', "web-circles"),
+ (0xE61C, '๎', "web-vk"),
+ (0xE61D, '๎', "web-smashing"),
+ (0xE61E, '๎', "web-forrst"),
+ (0xE61F, '๎', "os-windows"),
+ (0xE620, '๎ ', "web-flickr"),
+ (0xE621, '๎ก', "web-picassa"),
+ (0xE622, '๎ข', "web-deviantart"),
+ (0xE623, '๎ฃ', "web-steam"),
+ (0xE624, '๎ค', "web-github"),
+ (0xE625, '๎ฅ', "web-git"),
+ (0xE626, '๎ฆ', "web-blogger"),
+ (0xE627, '๎ง', "web-soundcloud"),
+ (0xE628, '๎จ', "web-reddit"),
+ (0xE629, '๎ฉ', "web-delicious"),
+ (0xE62A, '๎ช', "browser-chrome"),
+ (0xE62B, '๎ซ', "browser-firefox"),
+ (0xE62C, '๎ฌ', "browser-ie"),
+ (0xE62D, '๎ญ', "browser-opera"),
+ (0xE62E, '๎ฎ', "browser-safari"),
+ (0xE62F, '๎ฏ', "web-google-drive"),
+ (0xE630, '๎ฐ', "web-wordpress"),
+ (0xE631, '๎ฑ', "web-joomla"),
+ (0xE632, '๎ฒ', "lastfm"),
+ (0xE633, '๎ณ', "web-foursquare"),
+ (0xE634, '๎ด', "web-yelp"),
+ (0xE635, '๎ต', "web-drupal"),
+ (0xE636, '๎ถ', "youtube"),
+ (0xF189, '๏', "vk"),
+ (0xF1A6, '๏ฆ', "digg"),
+ (0xF1CA, '๏', "web-vine"),
+ (0xF8FF, '๏ฃฟ', "os-apple"),
+];
diff --git a/egui/src/demos/font_contents_ubuntu.rs b/egui/src/demos/font_contents_ubuntu.rs
new file mode 100644
index 00000000..24531933
--- /dev/null
+++ b/egui/src/demos/font_contents_ubuntu.rs
@@ -0,0 +1,1191 @@
+/// A list of all codepoints available in `Ubuntu-Light.ttf`
+#[rustfmt::skip]
+pub const UBUNTU_FONT_CHARACTERS: &[(u32, char, &str)] = &[
+ (0x21, '!', "exclamation mark"),
+ (0x22, '"', "quotation mark"),
+ (0x23, '#', "number sign"),
+ (0x24, '$', "dollar sign"),
+ (0x25, '%', "percent sign"),
+ (0x26, '&', "ampersand"),
+ (0x27, '\'', "apostrophe"),
+ (0x28, '(', "left parenthesis"),
+ (0x29, ')', "right parenthesis"),
+ (0x2A, '*', "asterisk"),
+ (0x2B, '+', "plus sign"),
+ (0x2C, ',', "comma"),
+ (0x2D, '-', "hyphen-minus"),
+ (0x2E, '.', "full stop"),
+ (0x2F, '/', "solidus (slash)"),
+ (0x30, '0', "digit zero"),
+ (0x31, '1', "digit one"),
+ (0x32, '2', "digit two"),
+ (0x33, '3', "digit three"),
+ (0x34, '4', "digit four"),
+ (0x35, '5', "digit five"),
+ (0x36, '6', "digit six"),
+ (0x37, '7', "digit seven"),
+ (0x38, '8', "digit eight"),
+ (0x39, '9', "digit nine"),
+ (0x3A, ':', "colon"),
+ (0x3B, ';', "semicolon"),
+ (0x3C, '<', "less-than sign"),
+ (0x3D, '=', "equals sign"),
+ (0x3E, '>', "greater-than sign"),
+ (0x3F, '?', "question mark"),
+ (0x40, '@', "commercial at"),
+ (0x41, 'A', "latin capital letter a"),
+ (0x42, 'B', "latin capital letter b"),
+ (0x43, 'C', "latin capital letter c"),
+ (0x44, 'D', "latin capital letter d"),
+ (0x45, 'E', "latin capital letter e"),
+ (0x46, 'F', "latin capital letter f"),
+ (0x47, 'G', "latin capital letter g"),
+ (0x48, 'H', "latin capital letter h"),
+ (0x49, 'I', "latin capital letter i"),
+ (0x4A, 'J', "latin capital letter j"),
+ (0x4B, 'K', "latin capital letter k"),
+ (0x4C, 'L', "latin capital letter l"),
+ (0x4D, 'M', "latin capital letter m"),
+ (0x4E, 'N', "latin capital letter n"),
+ (0x4F, 'O', "latin capital letter o"),
+ (0x50, 'P', "latin capital letter p"),
+ (0x51, 'Q', "latin capital letter q"),
+ (0x52, 'R', "latin capital letter r"),
+ (0x53, 'S', "latin capital letter s"),
+ (0x54, 'T', "latin capital letter t"),
+ (0x55, 'U', "latin capital letter u"),
+ (0x56, 'V', "latin capital letter v"),
+ (0x57, 'W', "latin capital letter w"),
+ (0x58, 'X', "latin capital letter x"),
+ (0x59, 'Y', "latin capital letter y"),
+ (0x5A, 'Z', "latin capital letter z"),
+ (0x5B, '[', "left square bracket"),
+ (0x5C, '\\', "reverse solidus (backslash)"),
+ (0x5D, ']', "right square bracket"),
+ (0x5E, '^', "circumflex accent"),
+ (0x5F, '_', "low line"),
+ (0x60, '`', "grave accent"),
+ (0x61, 'a', "latin small letter a"),
+ (0x62, 'b', "latin small letter b"),
+ (0x63, 'c', "latin small letter c"),
+ (0x64, 'd', "latin small letter d"),
+ (0x65, 'e', "latin small letter e"),
+ (0x66, 'f', "latin small letter f"),
+ (0x67, 'g', "latin small letter g"),
+ (0x68, 'h', "latin small letter h"),
+ (0x69, 'i', "latin small letter i"),
+ (0x6A, 'j', "latin small letter j"),
+ (0x6B, 'k', "latin small letter k"),
+ (0x6C, 'l', "latin small letter l"),
+ (0x6D, 'm', "latin small letter m"),
+ (0x6E, 'n', "latin small letter n"),
+ (0x6F, 'o', "latin small letter o"),
+ (0x70, 'p', "latin small letter p"),
+ (0x71, 'q', "latin small letter q"),
+ (0x72, 'r', "latin small letter r"),
+ (0x73, 's', "latin small letter s"),
+ (0x74, 't', "latin small letter t"),
+ (0x75, 'u', "latin small letter u"),
+ (0x76, 'v', "latin small letter v"),
+ (0x77, 'w', "latin small letter w"),
+ (0x78, 'x', "latin small letter x"),
+ (0x79, 'y', "latin small letter y"),
+ (0x7A, 'z', "latin small letter z"),
+ (0x7B, '{', "left curly bracket"),
+ (0x7C, '|', "vertical line"),
+ (0x7D, '}', "right curly bracket"),
+ (0x7E, '~', "tilde"),
+ (0xA1, 'ยก', "inverted exclamation mark"),
+ (0xA2, 'ยข', "cent sign"),
+ (0xA3, 'ยฃ', "pound sign"),
+ (0xA4, 'ยค', "currency sign"),
+ (0xA5, 'ยฅ', "yen sign"),
+ (0xA6, 'ยฆ', "broken bar"),
+ (0xA7, 'ยง', "section sign"),
+ (0xA8, 'ยจ', "diaeresis"),
+ (0xA9, 'ยฉ', "copyright sign"),
+ (0xAA, 'ยช', "feminine ordinal indicator"),
+ (0xAB, 'ยซ', "left-pointing double angle quotation mark"),
+ (0xAC, 'ยฌ', "not sign"),
+ (0xAD, 'ยญ', "soft hyphen"),
+ (0xAE, 'ยฎ', "registered sign"),
+ (0xAF, 'ยฏ', "macron"),
+ (0xB0, 'ยฐ', "degree sign"),
+ (0xB1, 'ยฑ', "plus-minus sign"),
+ (0xB2, 'ยฒ', "superscript two"),
+ (0xB3, 'ยณ', "superscript three"),
+ (0xB4, 'ยด', "acute accent"),
+ (0xB5, 'ยต', "micro sign"),
+ (0xB6, 'ยถ', "pilcrow sign"),
+ (0xB7, 'ยท', "middle dot"),
+ (0xB8, 'ยธ', "cedilla"),
+ (0xB9, 'ยน', "superscript one"),
+ (0xBA, 'ยบ', "masculine ordinal indicator"),
+ (0xBB, 'ยป', "right-pointing double angle quotation mark"),
+ (0xBC, 'ยผ', "vulgar fraction one quarter"),
+ (0xBD, 'ยฝ', "vulgar fraction one half"),
+ (0xBE, 'ยพ', "vulgar fraction three quarters"),
+ (0xBF, 'ยฟ', "inverted question mark"),
+ (0xC0, 'ร', "latin capital letter a with grave"),
+ (0xC1, 'ร', "latin capital letter a with acute"),
+ (0xC2, 'ร', "latin capital letter a with circumflex"),
+ (0xC3, 'ร', "latin capital letter a with tilde"),
+ (0xC4, 'ร', "latin capital letter a with diaeresis"),
+ (0xC5, 'ร
', "latin capital letter a with ring above"),
+ (0xC6, 'ร', "latin capital letter ae"),
+ (0xC7, 'ร', "latin capital letter c with cedilla"),
+ (0xC8, 'ร', "latin capital letter e with grave"),
+ (0xC9, 'ร', "latin capital letter e with acute"),
+ (0xCA, 'ร', "latin capital letter e with circumflex"),
+ (0xCB, 'ร', "latin capital letter e with diaeresis"),
+ (0xCC, 'ร', "latin capital letter i with grave"),
+ (0xCD, 'ร', "latin capital letter i with acute"),
+ (0xCE, 'ร', "latin capital letter i with circumflex"),
+ (0xCF, 'ร', "latin capital letter i with diaeresis"),
+ (0xD0, 'ร', "latin capital letter eth"),
+ (0xD1, 'ร', "latin capital letter n with tilde"),
+ (0xD2, 'ร', "latin capital letter o with grave"),
+ (0xD3, 'ร', "latin capital letter o with acute"),
+ (0xD4, 'ร', "latin capital letter o with circumflex"),
+ (0xD5, 'ร', "latin capital letter o with tilde"),
+ (0xD6, 'ร', "latin capital letter o with diaeresis"),
+ (0xD7, 'ร', "multiplication sign"),
+ (0xD8, 'ร', "latin capital letter o with stroke"),
+ (0xD9, 'ร', "latin capital letter u with grave"),
+ (0xDA, 'ร', "latin capital letter u with acute"),
+ (0xDB, 'ร', "latin capital letter u with circumflex"),
+ (0xDC, 'ร', "latin capital letter u with diaeresis"),
+ (0xDD, 'ร', "latin capital letter y with acute"),
+ (0xDE, 'ร', "latin capital letter thorn"),
+ (0xDF, 'ร', "latin small letter sharp s"),
+ (0xE0, 'ร ', "latin small letter a with grave"),
+ (0xE1, 'รก', "latin small letter a with acute"),
+ (0xE2, 'รข', "latin small letter a with circumflex"),
+ (0xE3, 'รฃ', "latin small letter a with tilde"),
+ (0xE4, 'รค', "latin small letter a with diaeresis"),
+ (0xE5, 'รฅ', "latin small letter a with ring above"),
+ (0xE6, 'รฆ', "latin small letter ae"),
+ (0xE7, 'รง', "latin small letter c with cedilla"),
+ (0xE8, 'รจ', "latin small letter e with grave"),
+ (0xE9, 'รฉ', "latin small letter e with acute"),
+ (0xEA, 'รช', "latin small letter e with circumflex"),
+ (0xEB, 'รซ', "latin small letter e with diaeresis"),
+ (0xEC, 'รฌ', "latin small letter i with grave"),
+ (0xED, 'รญ', "latin small letter i with acute"),
+ (0xEE, 'รฎ', "latin small letter i with circumflex"),
+ (0xEF, 'รฏ', "latin small letter i with diaeresis"),
+ (0xF0, 'รฐ', "latin small letter eth"),
+ (0xF1, 'รฑ', "latin small letter n with tilde"),
+ (0xF2, 'รฒ', "latin small letter o with grave"),
+ (0xF3, 'รณ', "latin small letter o with acute"),
+ (0xF4, 'รด', "latin small letter o with circumflex"),
+ (0xF5, 'รต', "latin small letter o with tilde"),
+ (0xF6, 'รถ', "latin small letter o with diaeresis"),
+ (0xF7, 'รท', "division sign"),
+ (0xF8, 'รธ', "latin small letter o with stroke"),
+ (0xF9, 'รน', "latin small letter u with grave"),
+ (0xFA, 'รบ', "latin small letter u with acute"),
+ (0xFB, 'รป', "latin small letter u with circumflex"),
+ (0xFC, 'รผ', "latin small letter u with diaeresis"),
+ (0xFD, 'รฝ', "latin small letter y with acute"),
+ (0xFE, 'รพ', "latin small letter thorn"),
+ (0xFF, 'รฟ', "latin small letter y with diaeresis"),
+ (0x100, 'ฤ', "latin capital letter a with macron"),
+ (0x101, 'ฤ', "latin small letter a with macron"),
+ (0x102, 'ฤ', "latin capital letter a with breve"),
+ (0x103, 'ฤ', "latin small letter a with breve"),
+ (0x104, 'ฤ', "latin capital letter a with ogonek"),
+ (0x105, 'ฤ
', "latin small letter a with ogonek"),
+ (0x106, 'ฤ', "latin capital letter c with acute"),
+ (0x107, 'ฤ', "latin small letter c with acute"),
+ (0x108, 'ฤ', "latin capital letter c with circumflex"),
+ (0x109, 'ฤ', "latin small letter c with circumflex"),
+ (0x10A, 'ฤ', "latin capital letter c with dot above"),
+ (0x10B, 'ฤ', "latin small letter c with dot above"),
+ (0x10C, 'ฤ', "latin capital letter c with caron"),
+ (0x10D, 'ฤ', "latin small letter c with caron"),
+ (0x10E, 'ฤ', "latin capital letter d with caron"),
+ (0x10F, 'ฤ', "latin small letter d with caron"),
+ (0x110, 'ฤ', "latin capital letter d with stroke"),
+ (0x111, 'ฤ', "latin small letter d with stroke"),
+ (0x112, 'ฤ', "latin capital letter e with macron"),
+ (0x113, 'ฤ', "latin small letter e with macron"),
+ (0x114, 'ฤ', "latin capital letter e with breve"),
+ (0x115, 'ฤ', "latin small letter e with breve"),
+ (0x116, 'ฤ', "latin capital letter e with dot above"),
+ (0x117, 'ฤ', "latin small letter e with dot above"),
+ (0x118, 'ฤ', "latin capital letter e with ogonek"),
+ (0x119, 'ฤ', "latin small letter e with ogonek"),
+ (0x11A, 'ฤ', "latin capital letter e with caron"),
+ (0x11B, 'ฤ', "latin small letter e with caron"),
+ (0x11C, 'ฤ', "latin capital letter g with circumflex"),
+ (0x11D, 'ฤ', "latin small letter g with circumflex"),
+ (0x11E, 'ฤ', "latin capital letter g with breve"),
+ (0x11F, 'ฤ', "latin small letter g with breve"),
+ (0x120, 'ฤ ', "latin capital letter g with dot above"),
+ (0x121, 'ฤก', "latin small letter g with dot above"),
+ (0x122, 'ฤข', "latin capital letter g with cedilla"),
+ (0x123, 'ฤฃ', "latin small letter g with cedilla"),
+ (0x124, 'ฤค', "latin capital letter h with circumflex"),
+ (0x125, 'ฤฅ', "latin small letter h with circumflex"),
+ (0x126, 'ฤฆ', "latin capital letter h with stroke"),
+ (0x127, 'ฤง', "latin small letter h with stroke"),
+ (0x128, 'ฤจ', "latin capital letter i with tilde"),
+ (0x129, 'ฤฉ', "latin small letter i with tilde"),
+ (0x12A, 'ฤช', "latin capital letter i with macron"),
+ (0x12B, 'ฤซ', "latin small letter i with macron"),
+ (0x12C, 'ฤฌ', "latin capital letter i with breve"),
+ (0x12D, 'ฤญ', "latin small letter i with breve"),
+ (0x12E, 'ฤฎ', "latin capital letter i with ogonek"),
+ (0x12F, 'ฤฏ', "latin small letter i with ogonek"),
+ (0x130, 'ฤฐ', "latin capital letter i with dot above"),
+ (0x131, 'ฤฑ', "latin small letter dotless i"),
+ (0x132, 'ฤฒ', "latin capital ligature ij"),
+ (0x133, 'ฤณ', "latin small ligature ij"),
+ (0x134, 'ฤด', "latin capital letter j with circumflex"),
+ (0x135, 'ฤต', "latin small letter j with circumflex"),
+ (0x136, 'ฤถ', "latin capital letter k with cedilla"),
+ (0x137, 'ฤท', "latin small letter k with cedilla"),
+ (0x138, 'ฤธ', "latin small letter kra"),
+ (0x139, 'ฤน', "latin capital letter l with acute"),
+ (0x13A, 'ฤบ', "latin small letter l with acute"),
+ (0x13B, 'ฤป', "latin capital letter l with cedilla"),
+ (0x13C, 'ฤผ', "latin small letter l with cedilla"),
+ (0x13D, 'ฤฝ', "latin capital letter l with caron"),
+ (0x13E, 'ฤพ', "latin small letter l with caron"),
+ (0x13F, 'ฤฟ', "latin capital letter l with middle dot"),
+ (0x140, 'ล', "latin small letter l with middle dot"),
+ (0x141, 'ล', "latin capital letter l with stroke"),
+ (0x142, 'ล', "latin small letter l with stroke"),
+ (0x143, 'ล', "latin capital letter n with acute"),
+ (0x144, 'ล', "latin small letter n with acute"),
+ (0x145, 'ล
', "latin capital letter n with cedilla"),
+ (0x146, 'ล', "latin small letter n with cedilla"),
+ (0x147, 'ล', "latin capital letter n with caron"),
+ (0x148, 'ล', "latin small letter n with caron"),
+ (0x149, 'ล', "latin small letter n preceded by apostrophe"),
+ (0x14A, 'ล', "latin capital letter eng"),
+ (0x14B, 'ล', "latin small letter eng"),
+ (0x14C, 'ล', "latin capital letter o with macron"),
+ (0x14D, 'ล', "latin small letter o with macron"),
+ (0x14E, 'ล', "latin capital letter o with breve"),
+ (0x14F, 'ล', "latin small letter o with breve"),
+ (0x150, 'ล', "latin capital letter o with double acute"),
+ (0x151, 'ล', "latin small letter o with double acute"),
+ (0x152, 'ล', "latin capital ligature oe"),
+ (0x153, 'ล', "latin small ligature oe"),
+ (0x154, 'ล', "latin capital letter r with acute"),
+ (0x155, 'ล', "latin small letter r with acute"),
+ (0x156, 'ล', "latin capital letter r with cedilla"),
+ (0x157, 'ล', "latin small letter r with cedilla"),
+ (0x158, 'ล', "latin capital letter r with caron"),
+ (0x159, 'ล', "latin small letter r with caron"),
+ (0x15A, 'ล', "latin capital letter s with acute"),
+ (0x15B, 'ล', "latin small letter s with acute"),
+ (0x15C, 'ล', "latin capital letter s with circumflex"),
+ (0x15D, 'ล', "latin small letter s with circumflex"),
+ (0x15E, 'ล', "latin capital letter s with cedilla"),
+ (0x15F, 'ล', "latin small letter s with cedilla"),
+ (0x160, 'ล ', "latin capital letter s with caron"),
+ (0x161, 'ลก', "latin small letter s with caron"),
+ (0x162, 'ลข', "latin capital letter t with cedilla"),
+ (0x163, 'ลฃ', "latin small letter t with cedilla"),
+ (0x164, 'ลค', "latin capital letter t with caron"),
+ (0x165, 'ลฅ', "latin small letter t with caron"),
+ (0x166, 'ลฆ', "latin capital letter t with stroke"),
+ (0x167, 'ลง', "latin small letter t with stroke"),
+ (0x168, 'ลจ', "latin capital letter u with tilde"),
+ (0x169, 'ลฉ', "latin small letter u with tilde"),
+ (0x16A, 'ลช', "latin capital letter u with macron"),
+ (0x16B, 'ลซ', "latin small letter u with macron"),
+ (0x16C, 'ลฌ', "latin capital letter u with breve"),
+ (0x16D, 'ลญ', "latin small letter u with breve"),
+ (0x16E, 'ลฎ', "latin capital letter u with ring above"),
+ (0x16F, 'ลฏ', "latin small letter u with ring above"),
+ (0x170, 'ลฐ', "latin capital letter u with double acute"),
+ (0x171, 'ลฑ', "latin small letter u with double acute"),
+ (0x172, 'ลฒ', "latin capital letter u with ogonek"),
+ (0x173, 'ลณ', "latin small letter u with ogonek"),
+ (0x174, 'ลด', "latin capital letter w with circumflex"),
+ (0x175, 'ลต', "latin small letter w with circumflex"),
+ (0x176, 'ลถ', "latin capital letter y with circumflex"),
+ (0x177, 'ลท', "latin small letter y with circumflex"),
+ (0x178, 'ลธ', "latin capital letter y with diaeresis"),
+ (0x179, 'ลน', "latin capital letter z with acute"),
+ (0x17A, 'ลบ', "latin small letter z with acute"),
+ (0x17B, 'ลป', "latin capital letter z with dot above"),
+ (0x17C, 'ลผ', "latin small letter z with dot above"),
+ (0x17D, 'ลฝ', "latin capital letter z with caron"),
+ (0x17E, 'ลพ', "latin small letter z with caron"),
+ (0x17F, 'ลฟ', "latin small letter long s"),
+ (0x180, 'ฦ', "latin small letter b with stroke"),
+ (0x181, 'ฦ', "latin capital letter b with hook"),
+ (0x182, 'ฦ', "latin capital letter b with topbar"),
+ (0x183, 'ฦ', "latin small letter b with topbar"),
+ (0x184, 'ฦ', "latin capital letter tone six"),
+ (0x185, 'ฦ
', "latin small letter tone six"),
+ (0x186, 'ฦ', "latin capital letter open o"),
+ (0x187, 'ฦ', "latin capital letter c with hook"),
+ (0x188, 'ฦ', "latin small letter c with hook"),
+ (0x189, 'ฦ', "latin capital letter african d"),
+ (0x18A, 'ฦ', "latin capital letter d with hook"),
+ (0x18B, 'ฦ', "latin capital letter d with topbar"),
+ (0x18C, 'ฦ', "latin small letter d with topbar"),
+ (0x18D, 'ฦ', "latin small letter turned delta"),
+ (0x18E, 'ฦ', "latin capital letter reversed e"),
+ (0x18F, 'ฦ', "latin capital letter schwa"),
+ (0x190, 'ฦ', "latin capital letter open e"),
+ (0x191, 'ฦ', "latin capital letter f with hook"),
+ (0x192, 'ฦ', "latin small letter f with hook"),
+ (0x193, 'ฦ', "latin capital letter g with hook"),
+ (0x194, 'ฦ', "latin capital letter gamma"),
+ (0x195, 'ฦ', "latin small letter hv"),
+ (0x196, 'ฦ', "latin capital letter iota"),
+ (0x197, 'ฦ', "latin capital letter i with stroke"),
+ (0x198, 'ฦ', "latin capital letter k with hook"),
+ (0x199, 'ฦ', "latin small letter k with hook"),
+ (0x19A, 'ฦ', "latin small letter l with bar"),
+ (0x19B, 'ฦ', "latin small letter lambda with stroke"),
+ (0x19C, 'ฦ', "latin capital letter turned m"),
+ (0x19D, 'ฦ', "latin capital letter n with left hook"),
+ (0x19E, 'ฦ', "latin small letter n with long right leg"),
+ (0x19F, 'ฦ', "latin capital letter o with middle tilde"),
+ (0x1A0, 'ฦ ', "latin capital letter o with horn"),
+ (0x1A1, 'ฦก', "latin small letter o with horn"),
+ (0x1A2, 'ฦข', "latin capital letter oi"),
+ (0x1A3, 'ฦฃ', "latin small letter oi"),
+ (0x1A4, 'ฦค', "latin capital letter p with hook"),
+ (0x1A5, 'ฦฅ', "latin small letter p with hook"),
+ (0x1A6, 'ฦฆ', "latin letter yr"),
+ (0x1A7, 'ฦง', "latin capital letter tone two"),
+ (0x1A8, 'ฦจ', "latin small letter tone two"),
+ (0x1A9, 'ฦฉ', "latin capital letter esh"),
+ (0x1AA, 'ฦช', "latin letter reversed esh loop"),
+ (0x1AB, 'ฦซ', "latin small letter t with palatal hook"),
+ (0x1AC, 'ฦฌ', "latin capital letter t with hook"),
+ (0x1AD, 'ฦญ', "latin small letter t with hook"),
+ (0x1AE, 'ฦฎ', "latin capital letter t with retroflex hook"),
+ (0x1AF, 'ฦฏ', "latin capital letter u with horn"),
+ (0x1B0, 'ฦฐ', "latin small letter u with horn"),
+ (0x1B1, 'ฦฑ', "latin capital letter upsilon"),
+ (0x1B2, 'ฦฒ', "latin capital letter v with hook"),
+ (0x1B3, 'ฦณ', "latin capital letter y with hook"),
+ (0x1B4, 'ฦด', "latin small letter y with hook"),
+ (0x1B5, 'ฦต', "latin capital letter z with stroke"),
+ (0x1B6, 'ฦถ', "latin small letter z with stroke"),
+ (0x1B7, 'ฦท', "latin capital letter ezh"),
+ (0x1B8, 'ฦธ', "latin capital letter ezh reversed"),
+ (0x1B9, 'ฦน', "latin small letter ezh reversed"),
+ (0x1BA, 'ฦบ', "latin small letter ezh with tail"),
+ (0x1BB, 'ฦป', "latin letter two with stroke"),
+ (0x1BC, 'ฦผ', "latin capital letter tone five"),
+ (0x1BD, 'ฦฝ', "latin small letter tone five"),
+ (0x1BE, 'ฦพ', "latin letter inverted glottal stop with stroke"),
+ (0x1BF, 'ฦฟ', "latin letter wynn"),
+ (0x1C0, 'ว', "latin letter dental click"),
+ (0x1C1, 'ว', "latin letter lateral click"),
+ (0x1C2, 'ว', "latin letter alveolar click"),
+ (0x1C3, 'ว', "latin letter retroflex click"),
+ (0x1C4, 'ว', "latin capital letter dz with caron"),
+ (0x1C5, 'ว
', "latin capital letter d with small letter z with caron"),
+ (0x1C6, 'ว', "latin small letter dz with caron"),
+ (0x1C7, 'ว', "latin capital letter lj"),
+ (0x1C8, 'ว', "latin capital letter l with small letter j"),
+ (0x1C9, 'ว', "latin small letter lj"),
+ (0x1CA, 'ว', "latin capital letter nj"),
+ (0x1CB, 'ว', "latin capital letter n with small letter j"),
+ (0x1CC, 'ว', "latin small letter nj"),
+ (0x1CD, 'ว', "latin capital letter a with caron"),
+ (0x1CE, 'ว', "latin small letter a with caron"),
+ (0x1CF, 'ว', "latin capital letter i with caron"),
+ (0x1D0, 'ว', "latin small letter i with caron"),
+ (0x1D1, 'ว', "latin capital letter o with caron"),
+ (0x1D2, 'ว', "latin small letter o with caron"),
+ (0x1D3, 'ว', "latin capital letter u with caron"),
+ (0x1D4, 'ว', "latin small letter u with caron"),
+ (0x1D5, 'ว', "latin capital letter u with diaeresis and macron"),
+ (0x1D6, 'ว', "latin small letter u with diaeresis and macron"),
+ (0x1D7, 'ว', "latin capital letter u with diaeresis and acute"),
+ (0x1D8, 'ว', "latin small letter u with diaeresis and acute"),
+ (0x1D9, 'ว', "latin capital letter u with diaeresis and caron"),
+ (0x1DA, 'ว', "latin small letter u with diaeresis and caron"),
+ (0x1DB, 'ว', "latin capital letter u with diaeresis and grave"),
+ (0x1DC, 'ว', "latin small letter u with diaeresis and grave"),
+ (0x1DD, 'ว', "latin small letter turned e"),
+ (0x1DE, 'ว', "latin capital letter a with diaeresis and macron"),
+ (0x1DF, 'ว', "latin small letter a with diaeresis and macron"),
+ (0x1E0, 'ว ', "latin capital letter a with dot above and macron"),
+ (0x1E1, 'วก', "latin small letter a with dot above and macron"),
+ (0x1E2, 'วข', "latin capital letter ae with macron"),
+ (0x1E3, 'วฃ', "latin small letter ae with macron"),
+ (0x1E4, 'วค', "latin capital letter g with stroke"),
+ (0x1E5, 'วฅ', "latin small letter g with stroke"),
+ (0x1E6, 'วฆ', "latin capital letter g with caron"),
+ (0x1E7, 'วง', "latin small letter g with caron"),
+ (0x1E8, 'วจ', "latin capital letter k with caron"),
+ (0x1E9, 'วฉ', "latin small letter k with caron"),
+ (0x1EA, 'วช', "latin capital letter o with ogonek"),
+ (0x1EB, 'วซ', "latin small letter o with ogonek"),
+ (0x1EC, 'วฌ', "latin capital letter o with ogonek and macron"),
+ (0x1ED, 'วญ', "latin small letter o with ogonek and macron"),
+ (0x1EE, 'วฎ', "latin capital letter ezh with caron"),
+ (0x1EF, 'วฏ', "latin small letter ezh with caron"),
+ (0x1F0, 'วฐ', "latin small letter j with caron"),
+ (0x1F1, 'วฑ', "latin capital letter dz"),
+ (0x1F2, 'วฒ', "latin capital letter d with small letter z"),
+ (0x1F3, 'วณ', "latin small letter dz"),
+ (0x1F4, 'วด', "latin capital letter g with acute"),
+ (0x1F5, 'วต', "latin small letter g with acute"),
+ (0x1F6, 'วถ', "latin capital letter hwair"),
+ (0x1F7, 'วท', "latin capital letter wynn"),
+ (0x1F8, 'วธ', "latin capital letter n with grave"),
+ (0x1F9, 'วน', "latin small letter n with grave"),
+ (0x1FA, 'วบ', "latin capital letter a with ring above and acute"),
+ (0x1FB, 'วป', "latin small letter a with ring above and acute"),
+ (0x1FC, 'วผ', "latin capital letter ae with acute"),
+ (0x1FD, 'วฝ', "latin small letter ae with acute"),
+ (0x1FE, 'วพ', "latin capital letter o with stroke and acute"),
+ (0x1FF, 'วฟ', "latin small letter o with stroke and acute"),
+ (0x200, 'ศ', "latin capital letter a with double grave"),
+ (0x201, 'ศ', "latin small letter a with double grave"),
+ (0x202, 'ศ', "latin capital letter a with inverted breve"),
+ (0x203, 'ศ', "latin small letter a with inverted breve"),
+ (0x204, 'ศ', "latin capital letter e with double grave"),
+ (0x205, 'ศ
', "latin small letter e with double grave"),
+ (0x206, 'ศ', "latin capital letter e with inverted breve"),
+ (0x207, 'ศ', "latin small letter e with inverted breve"),
+ (0x208, 'ศ', "latin capital letter i with double grave"),
+ (0x209, 'ศ', "latin small letter i with double grave"),
+ (0x20A, 'ศ', "latin capital letter i with inverted breve"),
+ (0x20B, 'ศ', "latin small letter i with inverted breve"),
+ (0x20C, 'ศ', "latin capital letter o with double grave"),
+ (0x20D, 'ศ', "latin small letter o with double grave"),
+ (0x20E, 'ศ', "latin capital letter o with inverted breve"),
+ (0x20F, 'ศ', "latin small letter o with inverted breve"),
+ (0x210, 'ศ', "latin capital letter r with double grave"),
+ (0x211, 'ศ', "latin small letter r with double grave"),
+ (0x212, 'ศ', "latin capital letter r with inverted breve"),
+ (0x213, 'ศ', "latin small letter r with inverted breve"),
+ (0x214, 'ศ', "latin capital letter u with double grave"),
+ (0x215, 'ศ', "latin small letter u with double grave"),
+ (0x216, 'ศ', "latin capital letter u with inverted breve"),
+ (0x217, 'ศ', "latin small letter u with inverted breve"),
+ (0x218, 'ศ', "latin capital letter s with comma below"),
+ (0x219, 'ศ', "latin small letter s with comma below"),
+ (0x21A, 'ศ', "latin capital letter t with comma below"),
+ (0x21B, 'ศ', "latin small letter t with comma below"),
+ (0x21C, 'ศ', "latin capital letter yogh"),
+ (0x21D, 'ศ', "latin small letter yogh"),
+ (0x21E, 'ศ', "latin capital letter h with caron"),
+ (0x21F, 'ศ', "latin small letter h with caron"),
+ (0x220, 'ศ ', "latin capital letter n with long right leg"),
+ (0x221, 'ศก', "latin small letter d with curl"),
+ (0x222, 'ศข', "latin capital letter ou"),
+ (0x223, 'ศฃ', "latin small letter ou"),
+ (0x224, 'ศค', "latin capital letter z with hook"),
+ (0x225, 'ศฅ', "latin small letter z with hook"),
+ (0x226, 'ศฆ', "latin capital letter a with dot above"),
+ (0x227, 'ศง', "latin small letter a with dot above"),
+ (0x228, 'ศจ', "latin capital letter e with cedilla"),
+ (0x229, 'ศฉ', "latin small letter e with cedilla"),
+ (0x22A, 'ศช', "latin capital letter o with diaeresis and macron"),
+ (0x22B, 'ศซ', "latin small letter o with diaeresis and macron"),
+ (0x22C, 'ศฌ', "latin capital letter o with tilde and macron"),
+ (0x22D, 'ศญ', "latin small letter o with tilde and macron"),
+ (0x22E, 'ศฎ', "latin capital letter o with dot above"),
+ (0x22F, 'ศฏ', "latin small letter o with dot above"),
+ (0x230, 'ศฐ', "latin capital letter o with dot above and macron"),
+ (0x231, 'ศฑ', "latin small letter o with dot above and macron"),
+ (0x232, 'ศฒ', "latin capital letter y with macron"),
+ (0x233, 'ศณ', "latin small letter y with macron"),
+ (0x234, 'ศด', "latin small letter l with curl"),
+ (0x235, 'ศต', "latin small letter n with curl"),
+ (0x236, 'ศถ', "latin small letter t with curl"),
+ (0x237, 'ศท', "latin small letter dotless j"),
+ (0x238, 'ศธ', "latin small letter db digraph"),
+ (0x239, 'ศน', "latin small letter qp digraph"),
+ (0x23A, 'ศบ', "latin capital letter a with stroke"),
+ (0x23B, 'ศป', "latin capital letter c with stroke"),
+ (0x23C, 'ศผ', "latin small letter c with stroke"),
+ (0x23D, 'ศฝ', "latin capital letter l with bar"),
+ (0x23E, 'ศพ', "latin capital letter t with diagonal stroke"),
+ (0x23F, 'ศฟ', "latin small letter s with swash tail"),
+ (0x240, 'ษ', "latin small letter z with swash tail"),
+ (0x241, 'ษ', "latin capital letter glottal stop"),
+ (0x242, 'ษ', "latin small letter glottal stop"),
+ (0x243, 'ษ', "latin capital letter b with stroke"),
+ (0x244, 'ษ', "latin capital letter u bar"),
+ (0x245, 'ษ
', "latin capital letter turned v"),
+ (0x246, 'ษ', "latin capital letter e with stroke"),
+ (0x247, 'ษ', "latin small letter e with stroke"),
+ (0x248, 'ษ', "latin capital letter j with stroke"),
+ (0x249, 'ษ', "latin small letter j with stroke"),
+ (0x24A, 'ษ', "latin capital letter small q with hook tail"),
+ (0x24B, 'ษ', "latin small letter q with hook tail"),
+ (0x24C, 'ษ', "latin capital letter r with stroke"),
+ (0x24D, 'ษ', "latin small letter r with stroke"),
+ (0x24E, 'ษ', "latin capital letter y with stroke"),
+ (0x24F, 'ษ', "latin small letter y with stroke"),
+ (0x292, 'ส', "latin small letter ezh"),
+ (0x2BC, 'สผ', "modifier letter apostrophe"),
+ (0x2C6, 'ห', "modifier letter circumflex accent"),
+ (0x2C7, 'ห', "caron"),
+ (0x2C9, 'ห', "modifier letter macron"),
+ (0x2D8, 'ห', "breve"),
+ (0x2D9, 'ห', "dot above"),
+ (0x2DA, 'ห', "ring above"),
+ (0x2DB, 'ห', "ogonek"),
+ (0x2DC, 'ห', "small tilde"),
+ (0x2DD, 'ห', "double acute accent"),
+ (0x311, 'ฬ', "combining inverted breve"),
+ (0x384, 'ฮ', "greek tonos"),
+ (0x385, 'ฮ
', "greek dialytika tonos"),
+ (0x386, 'ฮ', "greek capital letter alpha with tonos"),
+ (0x388, 'ฮ', "greek capital letter epsilon with tonos"),
+ (0x389, 'ฮ', "greek capital letter eta with tonos"),
+ (0x38A, 'ฮ', "greek capital letter iota with tonos"),
+ (0x38C, 'ฮ', "greek capital letter omicron with tonos"),
+ (0x38E, 'ฮ', "greek capital letter upsilon with tonos"),
+ (0x38F, 'ฮ', "greek capital letter omega with tonos"),
+ (0x390, 'ฮ', "greek small letter iota with dialytika and tonos"),
+ (0x391, 'ฮ', "greek capital letter alpha"),
+ (0x392, 'ฮ', "greek capital letter beta"),
+ (0x393, 'ฮ', "greek capital letter gamma"),
+ (0x394, 'ฮ', "greek capital letter delta"),
+ (0x395, 'ฮ', "greek capital letter epsilon"),
+ (0x396, 'ฮ', "greek capital letter zeta"),
+ (0x397, 'ฮ', "greek capital letter eta"),
+ (0x398, 'ฮ', "greek capital letter theta"),
+ (0x399, 'ฮ', "greek capital letter iota"),
+ (0x39A, 'ฮ', "greek capital letter kappa"),
+ (0x39B, 'ฮ', "greek capital letter lamda"),
+ (0x39C, 'ฮ', "greek capital letter mu"),
+ (0x39D, 'ฮ', "greek capital letter nu"),
+ (0x39E, 'ฮ', "greek capital letter xi"),
+ (0x39F, 'ฮ', "greek capital letter omicron"),
+ (0x3A0, 'ฮ ', "greek capital letter pi"),
+ (0x3A1, 'ฮก', "greek capital letter rho"),
+ (0x3A3, 'ฮฃ', "greek capital letter sigma"),
+ (0x3A4, 'ฮค', "greek capital letter tau"),
+ (0x3A5, 'ฮฅ', "greek capital letter upsilon"),
+ (0x3A6, 'ฮฆ', "greek capital letter phi"),
+ (0x3A7, 'ฮง', "greek capital letter chi"),
+ (0x3A8, 'ฮจ', "greek capital letter psi"),
+ (0x3A9, 'ฮฉ', "greek capital letter omega"),
+ (0x3AA, 'ฮช', "greek capital letter iota with dialytika"),
+ (0x3AB, 'ฮซ', "greek capital letter upsilon with dialytika"),
+ (0x3AC, 'ฮฌ', "greek small letter alpha with tonos"),
+ (0x3AD, 'ฮญ', "greek small letter epsilon with tonos"),
+ (0x3AE, 'ฮฎ', "greek small letter eta with tonos"),
+ (0x3AF, 'ฮฏ', "greek small letter iota with tonos"),
+ (0x3B0, 'ฮฐ', "greek small letter upsilon with dialytika and tonos"),
+ (0x3B1, 'ฮฑ', "greek small letter alpha"),
+ (0x3B2, 'ฮฒ', "greek small letter beta"),
+ (0x3B3, 'ฮณ', "greek small letter gamma"),
+ (0x3B4, 'ฮด', "greek small letter delta"),
+ (0x3B5, 'ฮต', "greek small letter epsilon"),
+ (0x3B6, 'ฮถ', "greek small letter zeta"),
+ (0x3B7, 'ฮท', "greek small letter eta"),
+ (0x3B8, 'ฮธ', "greek small letter theta"),
+ (0x3B9, 'ฮน', "greek small letter iota"),
+ (0x3BA, 'ฮบ', "greek small letter kappa"),
+ (0x3BB, 'ฮป', "greek small letter lamda"),
+ (0x3BC, 'ฮผ', "greek small letter mu"),
+ (0x3BD, 'ฮฝ', "greek small letter nu"),
+ (0x3BE, 'ฮพ', "greek small letter xi"),
+ (0x3BF, 'ฮฟ', "greek small letter omicron"),
+ (0x3C0, 'ฯ', "greek small letter pi"),
+ (0x3C1, 'ฯ', "greek small letter rho"),
+ (0x3C2, 'ฯ', "greek small letter final sigma"),
+ (0x3C3, 'ฯ', "greek small letter sigma"),
+ (0x3C4, 'ฯ', "greek small letter tau"),
+ (0x3C5, 'ฯ
', "greek small letter upsilon"),
+ (0x3C6, 'ฯ', "greek small letter phi"),
+ (0x3C7, 'ฯ', "greek small letter chi"),
+ (0x3C8, 'ฯ', "greek small letter psi"),
+ (0x3C9, 'ฯ', "greek small letter omega"),
+ (0x3CA, 'ฯ', "greek small letter iota with dialytika"),
+ (0x3CB, 'ฯ', "greek small letter upsilon with dialytika"),
+ (0x3CC, 'ฯ', "greek small letter omicron with tonos"),
+ (0x3CD, 'ฯ', "greek small letter upsilon with tonos"),
+ (0x3CE, 'ฯ', "greek small letter omega with tonos"),
+ (0x400, 'ะ', "cyrillic capital letter ie with grave"),
+ (0x401, 'ะ', "cyrillic capital letter io"),
+ (0x402, 'ะ', "cyrillic capital letter dje"),
+ (0x403, 'ะ', "cyrillic capital letter gje"),
+ (0x404, 'ะ', "cyrillic capital letter ukrainian ie"),
+ (0x405, 'ะ
', "cyrillic capital letter dze"),
+ (0x406, 'ะ', "cyrillic capital letter byelorussian-ukrainian i"),
+ (0x407, 'ะ', "cyrillic capital letter yi"),
+ (0x408, 'ะ', "cyrillic capital letter je"),
+ (0x409, 'ะ', "cyrillic capital letter lje"),
+ (0x40A, 'ะ', "cyrillic capital letter nje"),
+ (0x40B, 'ะ', "cyrillic capital letter tshe"),
+ (0x40C, 'ะ', "cyrillic capital letter kje"),
+ (0x40D, 'ะ', "cyrillic capital letter i with grave"),
+ (0x40E, 'ะ', "cyrillic capital letter short u"),
+ (0x40F, 'ะ', "cyrillic capital letter dzhe"),
+ (0x410, 'ะ', "cyrillic capital letter a"),
+ (0x411, 'ะ', "cyrillic capital letter be"),
+ (0x412, 'ะ', "cyrillic capital letter ve"),
+ (0x413, 'ะ', "cyrillic capital letter ghe"),
+ (0x414, 'ะ', "cyrillic capital letter de"),
+ (0x415, 'ะ', "cyrillic capital letter ie"),
+ (0x416, 'ะ', "cyrillic capital letter zhe"),
+ (0x417, 'ะ', "cyrillic capital letter ze"),
+ (0x418, 'ะ', "cyrillic capital letter i"),
+ (0x419, 'ะ', "cyrillic capital letter short i"),
+ (0x41A, 'ะ', "cyrillic capital letter ka"),
+ (0x41B, 'ะ', "cyrillic capital letter el"),
+ (0x41C, 'ะ', "cyrillic capital letter em"),
+ (0x41D, 'ะ', "cyrillic capital letter en"),
+ (0x41E, 'ะ', "cyrillic capital letter o"),
+ (0x41F, 'ะ', "cyrillic capital letter pe"),
+ (0x420, 'ะ ', "cyrillic capital letter er"),
+ (0x421, 'ะก', "cyrillic capital letter es"),
+ (0x422, 'ะข', "cyrillic capital letter te"),
+ (0x423, 'ะฃ', "cyrillic capital letter u"),
+ (0x424, 'ะค', "cyrillic capital letter ef"),
+ (0x425, 'ะฅ', "cyrillic capital letter ha"),
+ (0x426, 'ะฆ', "cyrillic capital letter tse"),
+ (0x427, 'ะง', "cyrillic capital letter che"),
+ (0x428, 'ะจ', "cyrillic capital letter sha"),
+ (0x429, 'ะฉ', "cyrillic capital letter shcha"),
+ (0x42A, 'ะช', "cyrillic capital letter hard sign"),
+ (0x42B, 'ะซ', "cyrillic capital letter yeru"),
+ (0x42C, 'ะฌ', "cyrillic capital letter soft sign"),
+ (0x42D, 'ะญ', "cyrillic capital letter e"),
+ (0x42E, 'ะฎ', "cyrillic capital letter yu"),
+ (0x42F, 'ะฏ', "cyrillic capital letter ya"),
+ (0x430, 'ะฐ', "cyrillic small letter a"),
+ (0x431, 'ะฑ', "cyrillic small letter be"),
+ (0x432, 'ะฒ', "cyrillic small letter ve"),
+ (0x433, 'ะณ', "cyrillic small letter ghe"),
+ (0x434, 'ะด', "cyrillic small letter de"),
+ (0x435, 'ะต', "cyrillic small letter ie"),
+ (0x436, 'ะถ', "cyrillic small letter zhe"),
+ (0x437, 'ะท', "cyrillic small letter ze"),
+ (0x438, 'ะธ', "cyrillic small letter i"),
+ (0x439, 'ะน', "cyrillic small letter short i"),
+ (0x43A, 'ะบ', "cyrillic small letter ka"),
+ (0x43B, 'ะป', "cyrillic small letter el"),
+ (0x43C, 'ะผ', "cyrillic small letter em"),
+ (0x43D, 'ะฝ', "cyrillic small letter en"),
+ (0x43E, 'ะพ', "cyrillic small letter o"),
+ (0x43F, 'ะฟ', "cyrillic small letter pe"),
+ (0x440, 'ั', "cyrillic small letter er"),
+ (0x441, 'ั', "cyrillic small letter es"),
+ (0x442, 'ั', "cyrillic small letter te"),
+ (0x443, 'ั', "cyrillic small letter u"),
+ (0x444, 'ั', "cyrillic small letter ef"),
+ (0x445, 'ั
', "cyrillic small letter ha"),
+ (0x446, 'ั', "cyrillic small letter tse"),
+ (0x447, 'ั', "cyrillic small letter che"),
+ (0x448, 'ั', "cyrillic small letter sha"),
+ (0x449, 'ั', "cyrillic small letter shcha"),
+ (0x44A, 'ั', "cyrillic small letter hard sign"),
+ (0x44B, 'ั', "cyrillic small letter yeru"),
+ (0x44C, 'ั', "cyrillic small letter soft sign"),
+ (0x44D, 'ั', "cyrillic small letter e"),
+ (0x44E, 'ั', "cyrillic small letter yu"),
+ (0x44F, 'ั', "cyrillic small letter ya"),
+ (0x450, 'ั', "cyrillic small letter ie with grave"),
+ (0x451, 'ั', "cyrillic small letter io"),
+ (0x452, 'ั', "cyrillic small letter dje"),
+ (0x453, 'ั', "cyrillic small letter gje"),
+ (0x454, 'ั', "cyrillic small letter ukrainian ie"),
+ (0x455, 'ั', "cyrillic small letter dze"),
+ (0x456, 'ั', "cyrillic small letter byelorussian-ukrainian i"),
+ (0x457, 'ั', "cyrillic small letter yi"),
+ (0x458, 'ั', "cyrillic small letter je"),
+ (0x459, 'ั', "cyrillic small letter lje"),
+ (0x45A, 'ั', "cyrillic small letter nje"),
+ (0x45B, 'ั', "cyrillic small letter tshe"),
+ (0x45C, 'ั', "cyrillic small letter kje"),
+ (0x45D, 'ั', "cyrillic small letter i with grave"),
+ (0x45E, 'ั', "cyrillic small letter short u"),
+ (0x45F, 'ั', "cyrillic small letter dzhe"),
+ (0x462, 'ัข', "cyrillic capital letter yat"),
+ (0x463, 'ัฃ', "cyrillic small letter yat"),
+ (0x472, 'ัฒ', "cyrillic capital letter fita"),
+ (0x473, 'ัณ', "cyrillic small letter fita"),
+ (0x474, 'ัด', "cyrillic capital letter izhitsa"),
+ (0x475, 'ัต', "cyrillic small letter izhitsa"),
+ (0x48A, 'า', "cyrillic capital letter short i with tail"),
+ (0x48B, 'า', "cyrillic small letter short i with tail"),
+ (0x48C, 'า', "cyrillic capital letter semisoft sign"),
+ (0x48D, 'า', "cyrillic small letter semisoft sign"),
+ (0x48E, 'า', "cyrillic capital letter er with tick"),
+ (0x48F, 'า', "cyrillic small letter er with tick"),
+ (0x490, 'า', "cyrillic capital letter ghe with upturn"),
+ (0x491, 'า', "cyrillic small letter ghe with upturn"),
+ (0x492, 'า', "cyrillic capital letter ghe with stroke"),
+ (0x493, 'า', "cyrillic small letter ghe with stroke"),
+ (0x494, 'า', "cyrillic capital letter ghe with middle hook"),
+ (0x495, 'า', "cyrillic small letter ghe with middle hook"),
+ (0x496, 'า', "cyrillic capital letter zhe with descender"),
+ (0x497, 'า', "cyrillic small letter zhe with descender"),
+ (0x498, 'า', "cyrillic capital letter ze with descender"),
+ (0x499, 'า', "cyrillic small letter ze with descender"),
+ (0x49A, 'า', "cyrillic capital letter ka with descender"),
+ (0x49B, 'า', "cyrillic small letter ka with descender"),
+ (0x49C, 'า', "cyrillic capital letter ka with vertical stroke"),
+ (0x49D, 'า', "cyrillic small letter ka with vertical stroke"),
+ (0x49E, 'า', "cyrillic capital letter ka with stroke"),
+ (0x49F, 'า', "cyrillic small letter ka with stroke"),
+ (0x4A0, 'า ', "cyrillic capital letter bashkir ka"),
+ (0x4A1, 'าก', "cyrillic small letter bashkir ka"),
+ (0x4A2, 'าข', "cyrillic capital letter en with descender"),
+ (0x4A3, 'าฃ', "cyrillic small letter en with descender"),
+ (0x4A4, 'าค', "cyrillic capital ligature en ghe"),
+ (0x4A5, 'าฅ', "cyrillic small ligature en ghe"),
+ (0x4A6, 'าฆ', "cyrillic capital letter pe with middle hook"),
+ (0x4A7, 'าง', "cyrillic small letter pe with middle hook"),
+ (0x4A8, 'าจ', "cyrillic capital letter abkhasian ha"),
+ (0x4A9, 'าฉ', "cyrillic small letter abkhasian ha"),
+ (0x4AA, 'าช', "cyrillic capital letter es with descender"),
+ (0x4AB, 'าซ', "cyrillic small letter es with descender"),
+ (0x4AC, 'าฌ', "cyrillic capital letter te with descender"),
+ (0x4AD, 'าญ', "cyrillic small letter te with descender"),
+ (0x4AE, 'าฎ', "cyrillic capital letter straight u"),
+ (0x4AF, 'าฏ', "cyrillic small letter straight u"),
+ (0x4B0, 'าฐ', "cyrillic capital letter straight u with stroke"),
+ (0x4B1, 'าฑ', "cyrillic small letter straight u with stroke"),
+ (0x4B2, 'าฒ', "cyrillic capital letter ha with descender"),
+ (0x4B3, 'าณ', "cyrillic small letter ha with descender"),
+ (0x4B4, 'าด', "cyrillic capital ligature te tse"),
+ (0x4B5, 'าต', "cyrillic small ligature te tse"),
+ (0x4B6, 'าถ', "cyrillic capital letter che with descender"),
+ (0x4B7, 'าท', "cyrillic small letter che with descender"),
+ (0x4B8, 'าธ', "cyrillic capital letter che with vertical stroke"),
+ (0x4B9, 'าน', "cyrillic small letter che with vertical stroke"),
+ (0x4BA, 'าบ', "cyrillic capital letter shha"),
+ (0x4BB, 'าป', "cyrillic small letter shha"),
+ (0x4BC, 'าผ', "cyrillic capital letter abkhasian che"),
+ (0x4BD, 'าฝ', "cyrillic small letter abkhasian che"),
+ (0x4BE, 'าพ', "cyrillic capital letter abkhasian che with descender"),
+ (0x4BF, 'าฟ', "cyrillic small letter abkhasian che with descender"),
+ (0x4C0, 'ำ', "cyrillic letter palochka"),
+ (0x4C1, 'ำ', "cyrillic capital letter zhe with breve"),
+ (0x4C2, 'ำ', "cyrillic small letter zhe with breve"),
+ (0x4C3, 'ำ', "cyrillic capital letter ka with hook"),
+ (0x4C4, 'ำ', "cyrillic small letter ka with hook"),
+ (0x4C5, 'ำ
', "cyrillic capital letter el with tail"),
+ (0x4C6, 'ำ', "cyrillic small letter el with tail"),
+ (0x4C7, 'ำ', "cyrillic capital letter en with hook"),
+ (0x4C8, 'ำ', "cyrillic small letter en with hook"),
+ (0x4C9, 'ำ', "cyrillic capital letter en with tail"),
+ (0x4CA, 'ำ', "cyrillic small letter en with tail"),
+ (0x4CB, 'ำ', "cyrillic capital letter khakassian che"),
+ (0x4CC, 'ำ', "cyrillic small letter khakassian che"),
+ (0x4CD, 'ำ', "cyrillic capital letter em with tail"),
+ (0x4CE, 'ำ', "cyrillic small letter em with tail"),
+ (0x4CF, 'ำ', "cyrillic small letter palochka"),
+ (0x4D0, 'ำ', "cyrillic capital letter a with breve"),
+ (0x4D1, 'ำ', "cyrillic small letter a with breve"),
+ (0x4D2, 'ำ', "cyrillic capital letter a with diaeresis"),
+ (0x4D3, 'ำ', "cyrillic small letter a with diaeresis"),
+ (0x4D4, 'ำ', "cyrillic capital ligature a ie"),
+ (0x4D5, 'ำ', "cyrillic small ligature a ie"),
+ (0x4D6, 'ำ', "cyrillic capital letter ie with breve"),
+ (0x4D7, 'ำ', "cyrillic small letter ie with breve"),
+ (0x4D8, 'ำ', "cyrillic capital letter schwa"),
+ (0x4D9, 'ำ', "cyrillic small letter schwa"),
+ (0x4DA, 'ำ', "cyrillic capital letter schwa with diaeresis"),
+ (0x4DB, 'ำ', "cyrillic small letter schwa with diaeresis"),
+ (0x4DC, 'ำ', "cyrillic capital letter zhe with diaeresis"),
+ (0x4DD, 'ำ', "cyrillic small letter zhe with diaeresis"),
+ (0x4DE, 'ำ', "cyrillic capital letter ze with diaeresis"),
+ (0x4DF, 'ำ', "cyrillic small letter ze with diaeresis"),
+ (0x4E0, 'ำ ', "cyrillic capital letter abkhasian dze"),
+ (0x4E1, 'ำก', "cyrillic small letter abkhasian dze"),
+ (0x4E2, 'ำข', "cyrillic capital letter i with macron"),
+ (0x4E3, 'ำฃ', "cyrillic small letter i with macron"),
+ (0x4E4, 'ำค', "cyrillic capital letter i with diaeresis"),
+ (0x4E5, 'ำฅ', "cyrillic small letter i with diaeresis"),
+ (0x4E6, 'ำฆ', "cyrillic capital letter o with diaeresis"),
+ (0x4E7, 'ำง', "cyrillic small letter o with diaeresis"),
+ (0x4E8, 'ำจ', "cyrillic capital letter barred o"),
+ (0x4E9, 'ำฉ', "cyrillic small letter barred o"),
+ (0x4EA, 'ำช', "cyrillic capital letter barred o with diaeresis"),
+ (0x4EB, 'ำซ', "cyrillic small letter barred o with diaeresis"),
+ (0x4EC, 'ำฌ', "cyrillic capital letter e with diaeresis"),
+ (0x4ED, 'ำญ', "cyrillic small letter e with diaeresis"),
+ (0x4EE, 'ำฎ', "cyrillic capital letter u with macron"),
+ (0x4EF, 'ำฏ', "cyrillic small letter u with macron"),
+ (0x4F0, 'ำฐ', "cyrillic capital letter u with diaeresis"),
+ (0x4F1, 'ำฑ', "cyrillic small letter u with diaeresis"),
+ (0x4F2, 'ำฒ', "cyrillic capital letter u with double acute"),
+ (0x4F3, 'ำณ', "cyrillic small letter u with double acute"),
+ (0x4F4, 'ำด', "cyrillic capital letter che with diaeresis"),
+ (0x4F5, 'ำต', "cyrillic small letter che with diaeresis"),
+ (0x4F6, 'ำถ', "cyrillic capital letter ghe with descender"),
+ (0x4F7, 'ำท', "cyrillic small letter ghe with descender"),
+ (0x4F8, 'ำธ', "cyrillic capital letter yeru with diaeresis"),
+ (0x4F9, 'ำน', "cyrillic small letter yeru with diaeresis"),
+ (0x1E80, 'แบ', "latin capital letter w with grave"),
+ (0x1E81, 'แบ', "latin small letter w with grave"),
+ (0x1E82, 'แบ', "latin capital letter w with acute"),
+ (0x1E83, 'แบ', "latin small letter w with acute"),
+ (0x1E84, 'แบ', "latin capital letter w with diaeresis"),
+ (0x1E85, 'แบ
', "latin small letter w with diaeresis"),
+ (0x1EF2, 'แปฒ', "latin capital letter y with grave"),
+ (0x1EF3, 'แปณ', "latin small letter y with grave"),
+ (0x1F00, 'แผ', "greek small letter alpha with psili"),
+ (0x1F01, 'แผ', "greek small letter alpha with dasia"),
+ (0x1F02, 'แผ', "greek small letter alpha with psili and varia"),
+ (0x1F03, 'แผ', "greek small letter alpha with dasia and varia"),
+ (0x1F04, 'แผ', "greek small letter alpha with psili and oxia"),
+ (0x1F05, 'แผ
', "greek small letter alpha with dasia and oxia"),
+ (0x1F06, 'แผ', "greek small letter alpha with psili and perispomeni"),
+ (0x1F07, 'แผ', "greek small letter alpha with dasia and perispomeni"),
+ (0x1F08, 'แผ', "greek capital letter alpha with psili"),
+ (0x1F09, 'แผ', "greek capital letter alpha with dasia"),
+ (0x1F0A, 'แผ', "greek capital letter alpha with psili and varia"),
+ (0x1F0B, 'แผ', "greek capital letter alpha with dasia and varia"),
+ (0x1F0C, 'แผ', "greek capital letter alpha with psili and oxia"),
+ (0x1F0D, 'แผ', "greek capital letter alpha with dasia and oxia"),
+ (0x1F0E, 'แผ', "greek capital letter alpha with psili and perispomeni"),
+ (0x1F0F, 'แผ', "greek capital letter alpha with dasia and perispomeni"),
+ (0x1F10, 'แผ', "greek small letter epsilon with psili"),
+ (0x1F11, 'แผ', "greek small letter epsilon with dasia"),
+ (0x1F12, 'แผ', "greek small letter epsilon with psili and varia"),
+ (0x1F13, 'แผ', "greek small letter epsilon with dasia and varia"),
+ (0x1F14, 'แผ', "greek small letter epsilon with psili and oxia"),
+ (0x1F15, 'แผ', "greek small letter epsilon with dasia and oxia"),
+ (0x1F18, 'แผ', "greek capital letter epsilon with psili"),
+ (0x1F19, 'แผ', "greek capital letter epsilon with dasia"),
+ (0x1F1A, 'แผ', "greek capital letter epsilon with psili and varia"),
+ (0x1F1B, 'แผ', "greek capital letter epsilon with dasia and varia"),
+ (0x1F1C, 'แผ', "greek capital letter epsilon with psili and oxia"),
+ (0x1F1D, 'แผ', "greek capital letter epsilon with dasia and oxia"),
+ (0x1F20, 'แผ ', "greek small letter eta with psili"),
+ (0x1F21, 'แผก', "greek small letter eta with dasia"),
+ (0x1F22, 'แผข', "greek small letter eta with psili and varia"),
+ (0x1F23, 'แผฃ', "greek small letter eta with dasia and varia"),
+ (0x1F24, 'แผค', "greek small letter eta with psili and oxia"),
+ (0x1F25, 'แผฅ', "greek small letter eta with dasia and oxia"),
+ (0x1F26, 'แผฆ', "greek small letter eta with psili and perispomeni"),
+ (0x1F27, 'แผง', "greek small letter eta with dasia and perispomeni"),
+ (0x1F28, 'แผจ', "greek capital letter eta with psili"),
+ (0x1F29, 'แผฉ', "greek capital letter eta with dasia"),
+ (0x1F2A, 'แผช', "greek capital letter eta with psili and varia"),
+ (0x1F2B, 'แผซ', "greek capital letter eta with dasia and varia"),
+ (0x1F2C, 'แผฌ', "greek capital letter eta with psili and oxia"),
+ (0x1F2D, 'แผญ', "greek capital letter eta with dasia and oxia"),
+ (0x1F2E, 'แผฎ', "greek capital letter eta with psili and perispomeni"),
+ (0x1F2F, 'แผฏ', "greek capital letter eta with dasia and perispomeni"),
+ (0x1F30, 'แผฐ', "greek small letter iota with psili"),
+ (0x1F31, 'แผฑ', "greek small letter iota with dasia"),
+ (0x1F32, 'แผฒ', "greek small letter iota with psili and varia"),
+ (0x1F33, 'แผณ', "greek small letter iota with dasia and varia"),
+ (0x1F34, 'แผด', "greek small letter iota with psili and oxia"),
+ (0x1F35, 'แผต', "greek small letter iota with dasia and oxia"),
+ (0x1F36, 'แผถ', "greek small letter iota with psili and perispomeni"),
+ (0x1F37, 'แผท', "greek small letter iota with dasia and perispomeni"),
+ (0x1F38, 'แผธ', "greek capital letter iota with psili"),
+ (0x1F39, 'แผน', "greek capital letter iota with dasia"),
+ (0x1F3A, 'แผบ', "greek capital letter iota with psili and varia"),
+ (0x1F3B, 'แผป', "greek capital letter iota with dasia and varia"),
+ (0x1F3C, 'แผผ', "greek capital letter iota with psili and oxia"),
+ (0x1F3D, 'แผฝ', "greek capital letter iota with dasia and oxia"),
+ (0x1F3E, 'แผพ', "greek capital letter iota with psili and perispomeni"),
+ (0x1F3F, 'แผฟ', "greek capital letter iota with dasia and perispomeni"),
+ (0x1F40, 'แฝ', "greek small letter omicron with psili"),
+ (0x1F41, 'แฝ', "greek small letter omicron with dasia"),
+ (0x1F42, 'แฝ', "greek small letter omicron with psili and varia"),
+ (0x1F43, 'แฝ', "greek small letter omicron with dasia and varia"),
+ (0x1F44, 'แฝ', "greek small letter omicron with psili and oxia"),
+ (0x1F45, 'แฝ
', "greek small letter omicron with dasia and oxia"),
+ (0x1F48, 'แฝ', "greek capital letter omicron with psili"),
+ (0x1F49, 'แฝ', "greek capital letter omicron with dasia"),
+ (0x1F4A, 'แฝ', "greek capital letter omicron with psili and varia"),
+ (0x1F4B, 'แฝ', "greek capital letter omicron with dasia and varia"),
+ (0x1F4C, 'แฝ', "greek capital letter omicron with psili and oxia"),
+ (0x1F4D, 'แฝ', "greek capital letter omicron with dasia and oxia"),
+ (0x1F50, 'แฝ', "greek small letter upsilon with psili"),
+ (0x1F51, 'แฝ', "greek small letter upsilon with dasia"),
+ (0x1F52, 'แฝ', "greek small letter upsilon with psili and varia"),
+ (0x1F53, 'แฝ', "greek small letter upsilon with dasia and varia"),
+ (0x1F54, 'แฝ', "greek small letter upsilon with psili and oxia"),
+ (0x1F55, 'แฝ', "greek small letter upsilon with dasia and oxia"),
+ (0x1F56, 'แฝ', "greek small letter upsilon with psili and perispomeni"),
+ (0x1F57, 'แฝ', "greek small letter upsilon with dasia and perispomeni"),
+ (0x1F59, 'แฝ', "greek capital letter upsilon with dasia"),
+ (0x1F5B, 'แฝ', "greek capital letter upsilon with dasia and varia"),
+ (0x1F5D, 'แฝ', "greek capital letter upsilon with dasia and oxia"),
+ (0x1F5F, 'แฝ', "greek capital letter upsilon with dasia and perispomeni"),
+ (0x1F60, 'แฝ ', "greek small letter omega with psili"),
+ (0x1F61, 'แฝก', "greek small letter omega with dasia"),
+ (0x1F62, 'แฝข', "greek small letter omega with psili and varia"),
+ (0x1F63, 'แฝฃ', "greek small letter omega with dasia and varia"),
+ (0x1F64, 'แฝค', "greek small letter omega with psili and oxia"),
+ (0x1F65, 'แฝฅ', "greek small letter omega with dasia and oxia"),
+ (0x1F66, 'แฝฆ', "greek small letter omega with psili and perispomeni"),
+ (0x1F67, 'แฝง', "greek small letter omega with dasia and perispomeni"),
+ (0x1F68, 'แฝจ', "greek capital letter omega with psili"),
+ (0x1F69, 'แฝฉ', "greek capital letter omega with dasia"),
+ (0x1F6A, 'แฝช', "greek capital letter omega with psili and varia"),
+ (0x1F6B, 'แฝซ', "greek capital letter omega with dasia and varia"),
+ (0x1F6C, 'แฝฌ', "greek capital letter omega with psili and oxia"),
+ (0x1F6D, 'แฝญ', "greek capital letter omega with dasia and oxia"),
+ (0x1F6E, 'แฝฎ', "greek capital letter omega with psili and perispomeni"),
+ (0x1F6F, 'แฝฏ', "greek capital letter omega with dasia and perispomeni"),
+ (0x1F70, 'แฝฐ', "greek small letter alpha with varia"),
+ (0x1F71, 'แฝฑ', "greek small letter alpha with oxia"),
+ (0x1F72, 'แฝฒ', "greek small letter epsilon with varia"),
+ (0x1F73, 'แฝณ', "greek small letter epsilon with oxia"),
+ (0x1F74, 'แฝด', "greek small letter eta with varia"),
+ (0x1F75, 'แฝต', "greek small letter eta with oxia"),
+ (0x1F76, 'แฝถ', "greek small letter iota with varia"),
+ (0x1F77, 'แฝท', "greek small letter iota with oxia"),
+ (0x1F78, 'แฝธ', "greek small letter omicron with varia"),
+ (0x1F79, 'แฝน', "greek small letter omicron with oxia"),
+ (0x1F7A, 'แฝบ', "greek small letter upsilon with varia"),
+ (0x1F7B, 'แฝป', "greek small letter upsilon with oxia"),
+ (0x1F7C, 'แฝผ', "greek small letter omega with varia"),
+ (0x1F7D, 'แฝฝ', "greek small letter omega with oxia"),
+ (0x1F80, 'แพ', "greek small letter alpha with psili and ypogegrammeni"),
+ (0x1F81, 'แพ', "greek small letter alpha with dasia and ypogegrammeni"),
+ (0x1F82, 'แพ', "greek small letter alpha with psili and varia and ypogegrammeni"),
+ (0x1F83, 'แพ', "greek small letter alpha with dasia and varia and ypogegrammeni"),
+ (0x1F84, 'แพ', "greek small letter alpha with psili and oxia and ypogegrammeni"),
+ (0x1F85, 'แพ
', "greek small letter alpha with dasia and oxia and ypogegrammeni"),
+ (0x1F86, 'แพ', "greek small letter alpha with psili and perispomeni and ypogegrammeni"),
+ (0x1F87, 'แพ', "greek small letter alpha with dasia and perispomeni and ypogegrammeni"),
+ (0x1F88, 'แพ', "greek capital letter alpha with psili and prosgegrammeni"),
+ (0x1F89, 'แพ', "greek capital letter alpha with dasia and prosgegrammeni"),
+ (0x1F8A, 'แพ', "greek capital letter alpha with psili and varia and prosgegrammeni"),
+ (0x1F8B, 'แพ', "greek capital letter alpha with dasia and varia and prosgegrammeni"),
+ (0x1F8C, 'แพ', "greek capital letter alpha with psili and oxia and prosgegrammeni"),
+ (0x1F8D, 'แพ', "greek capital letter alpha with dasia and oxia and prosgegrammeni"),
+ (0x1F8E, 'แพ', "greek capital letter alpha with psili and perispomeni and prosgegrammeni"),
+ (0x1F8F, 'แพ', "greek capital letter alpha with dasia and perispomeni and prosgegrammeni"),
+ (0x1F90, 'แพ', "greek small letter eta with psili and ypogegrammeni"),
+ (0x1F91, 'แพ', "greek small letter eta with dasia and ypogegrammeni"),
+ (0x1F92, 'แพ', "greek small letter eta with psili and varia and ypogegrammeni"),
+ (0x1F93, 'แพ', "greek small letter eta with dasia and varia and ypogegrammeni"),
+ (0x1F94, 'แพ', "greek small letter eta with psili and oxia and ypogegrammeni"),
+ (0x1F95, 'แพ', "greek small letter eta with dasia and oxia and ypogegrammeni"),
+ (0x1F96, 'แพ', "greek small letter eta with psili and perispomeni and ypogegrammeni"),
+ (0x1F97, 'แพ', "greek small letter eta with dasia and perispomeni and ypogegrammeni"),
+ (0x1F98, 'แพ', "greek capital letter eta with psili and prosgegrammeni"),
+ (0x1F99, 'แพ', "greek capital letter eta with dasia and prosgegrammeni"),
+ (0x1F9A, 'แพ', "greek capital letter eta with psili and varia and prosgegrammeni"),
+ (0x1F9B, 'แพ', "greek capital letter eta with dasia and varia and prosgegrammeni"),
+ (0x1F9C, 'แพ', "greek capital letter eta with psili and oxia and prosgegrammeni"),
+ (0x1F9D, 'แพ', "greek capital letter eta with dasia and oxia and prosgegrammeni"),
+ (0x1F9E, 'แพ', "greek capital letter eta with psili and perispomeni and prosgegrammeni"),
+ (0x1F9F, 'แพ', "greek capital letter eta with dasia and perispomeni and prosgegrammeni"),
+ (0x1FA0, 'แพ ', "greek small letter omega with psili and ypogegrammeni"),
+ (0x1FA1, 'แพก', "greek small letter omega with dasia and ypogegrammeni"),
+ (0x1FA2, 'แพข', "greek small letter omega with psili and varia and ypogegrammeni"),
+ (0x1FA3, 'แพฃ', "greek small letter omega with dasia and varia and ypogegrammeni"),
+ (0x1FA4, 'แพค', "greek small letter omega with psili and oxia and ypogegrammeni"),
+ (0x1FA5, 'แพฅ', "greek small letter omega with dasia and oxia and ypogegrammeni"),
+ (0x1FA6, 'แพฆ', "greek small letter omega with psili and perispomeni and ypogegrammeni"),
+ (0x1FA7, 'แพง', "greek small letter omega with dasia and perispomeni and ypogegrammeni"),
+ (0x1FA8, 'แพจ', "greek capital letter omega with psili and prosgegrammeni"),
+ (0x1FA9, 'แพฉ', "greek capital letter omega with dasia and prosgegrammeni"),
+ (0x1FAA, 'แพช', "greek capital letter omega with psili and varia and prosgegrammeni"),
+ (0x1FAB, 'แพซ', "greek capital letter omega with dasia and varia and prosgegrammeni"),
+ (0x1FAC, 'แพฌ', "greek capital letter omega with psili and oxia and prosgegrammeni"),
+ (0x1FAD, 'แพญ', "greek capital letter omega with dasia and oxia and prosgegrammeni"),
+ (0x1FAE, 'แพฎ', "greek capital letter omega with psili and perispomeni and prosgegrammeni"),
+ (0x1FAF, 'แพฏ', "greek capital letter omega with dasia and perispomeni and prosgegrammeni"),
+ (0x1FB0, 'แพฐ', "greek small letter alpha with vrachy"),
+ (0x1FB1, 'แพฑ', "greek small letter alpha with macron"),
+ (0x1FB2, 'แพฒ', "greek small letter alpha with varia and ypogegrammeni"),
+ (0x1FB3, 'แพณ', "greek small letter alpha with ypogegrammeni"),
+ (0x1FB4, 'แพด', "greek small letter alpha with oxia and ypogegrammeni"),
+ (0x1FB6, 'แพถ', "greek small letter alpha with perispomeni"),
+ (0x1FB7, 'แพท', "greek small letter alpha with perispomeni and ypogegrammeni"),
+ (0x1FB8, 'แพธ', "greek capital letter alpha with vrachy"),
+ (0x1FB9, 'แพน', "greek capital letter alpha with macron"),
+ (0x1FBA, 'แพบ', "greek capital letter alpha with varia"),
+ (0x1FBB, 'แพป', "greek capital letter alpha with oxia"),
+ (0x1FBC, 'แพผ', "greek capital letter alpha with prosgegrammeni"),
+ (0x1FBD, 'แพฝ', "greek koronis"),
+ (0x1FBE, 'แพพ', "greek prosgegrammeni"),
+ (0x1FBF, 'แพฟ', "greek psili"),
+ (0x1FC0, 'แฟ', "greek perispomeni"),
+ (0x1FC1, 'แฟ', "greek dialytika and perispomeni"),
+ (0x1FC2, 'แฟ', "greek small letter eta with varia and ypogegrammeni"),
+ (0x1FC3, 'แฟ', "greek small letter eta with ypogegrammeni"),
+ (0x1FC4, 'แฟ', "greek small letter eta with oxia and ypogegrammeni"),
+ (0x1FC6, 'แฟ', "greek small letter eta with perispomeni"),
+ (0x1FC7, 'แฟ', "greek small letter eta with perispomeni and ypogegrammeni"),
+ (0x1FC8, 'แฟ', "greek capital letter epsilon with varia"),
+ (0x1FC9, 'แฟ', "greek capital letter epsilon with oxia"),
+ (0x1FCA, 'แฟ', "greek capital letter eta with varia"),
+ (0x1FCB, 'แฟ', "greek capital letter eta with oxia"),
+ (0x1FCC, 'แฟ', "greek capital letter eta with prosgegrammeni"),
+ (0x1FCD, 'แฟ', "greek psili and varia"),
+ (0x1FCE, 'แฟ', "greek psili and oxia"),
+ (0x1FCF, 'แฟ', "greek psili and perispomeni"),
+ (0x1FD0, 'แฟ', "greek small letter iota with vrachy"),
+ (0x1FD1, 'แฟ', "greek small letter iota with macron"),
+ (0x1FD2, 'แฟ', "greek small letter iota with dialytika and varia"),
+ (0x1FD3, 'แฟ', "greek small letter iota with dialytika and oxia"),
+ (0x1FD6, 'แฟ', "greek small letter iota with perispomeni"),
+ (0x1FD7, 'แฟ', "greek small letter iota with dialytika and perispomeni"),
+ (0x1FD8, 'แฟ', "greek capital letter iota with vrachy"),
+ (0x1FD9, 'แฟ', "greek capital letter iota with macron"),
+ (0x1FDA, 'แฟ', "greek capital letter iota with varia"),
+ (0x1FDB, 'แฟ', "greek capital letter iota with oxia"),
+ (0x1FDD, 'แฟ', "greek dasia and varia"),
+ (0x1FDE, 'แฟ', "greek dasia and oxia"),
+ (0x1FDF, 'แฟ', "greek dasia and perispomeni"),
+ (0x1FE0, 'แฟ ', "greek small letter upsilon with vrachy"),
+ (0x1FE1, 'แฟก', "greek small letter upsilon with macron"),
+ (0x1FE2, 'แฟข', "greek small letter upsilon with dialytika and varia"),
+ (0x1FE3, 'แฟฃ', "greek small letter upsilon with dialytika and oxia"),
+ (0x1FE4, 'แฟค', "greek small letter rho with psili"),
+ (0x1FE5, 'แฟฅ', "greek small letter rho with dasia"),
+ (0x1FE6, 'แฟฆ', "greek small letter upsilon with perispomeni"),
+ (0x1FE7, 'แฟง', "greek small letter upsilon with dialytika and perispomeni"),
+ (0x1FE8, 'แฟจ', "greek capital letter upsilon with vrachy"),
+ (0x1FE9, 'แฟฉ', "greek capital letter upsilon with macron"),
+ (0x1FEA, 'แฟช', "greek capital letter upsilon with varia"),
+ (0x1FEB, 'แฟซ', "greek capital letter upsilon with oxia"),
+ (0x1FEC, 'แฟฌ', "greek capital letter rho with dasia"),
+ (0x1FED, 'แฟญ', "greek dialytika and varia"),
+ (0x1FEE, 'แฟฎ', "greek dialytika and oxia"),
+ (0x1FEF, 'แฟฏ', "greek varia"),
+ (0x1FF2, 'แฟฒ', "greek small letter omega with varia and ypogegrammeni"),
+ (0x1FF3, 'แฟณ', "greek small letter omega with ypogegrammeni"),
+ (0x1FF4, 'แฟด', "greek small letter omega with oxia and ypogegrammeni"),
+ (0x1FF6, 'แฟถ', "greek small letter omega with perispomeni"),
+ (0x1FF7, 'แฟท', "greek small letter omega with perispomeni and ypogegrammeni"),
+ (0x1FF8, 'แฟธ', "greek capital letter omicron with varia"),
+ (0x1FF9, 'แฟน', "greek capital letter omicron with oxia"),
+ (0x1FFA, 'แฟบ', "greek capital letter omega with varia"),
+ (0x1FFB, 'แฟป', "greek capital letter omega with oxia"),
+ (0x1FFC, 'แฟผ', "greek capital letter omega with prosgegrammeni"),
+ (0x1FFD, 'แฟฝ', "greek oxia"),
+ (0x1FFE, 'แฟพ', "greek dasia"),
+ (0x2013, 'โ', "en dash"),
+ (0x2014, 'โ', "em dash"),
+ (0x2015, 'โ', "horizontal bar"),
+ (0x2018, 'โ', "left single quotation mark"),
+ (0x2019, 'โ', "right single quotation mark"),
+ (0x201A, 'โ', "single low-9 quotation mark"),
+ (0x201C, 'โ', "left double quotation mark"),
+ (0x201D, 'โ', "right double quotation mark"),
+ (0x201E, 'โ', "double low-9 quotation mark"),
+ (0x2020, 'โ ', "dagger"),
+ (0x2021, 'โก', "double dagger"),
+ (0x2022, 'โข', "bullet"),
+ (0x2026, 'โฆ', "horizontal ellipsis"),
+ (0x2030, 'โฐ', "per mille sign"),
+ (0x2039, 'โน', "single left-pointing angle quotation mark"),
+ (0x203A, 'โบ', "single right-pointing angle quotation mark"),
+ (0x2044, 'โ', "fraction slash"),
+ (0x2070, 'โฐ', "superscript zero"),
+ (0x2074, 'โด', "superscript four"),
+ (0x2075, 'โต', "superscript five"),
+ (0x2076, 'โถ', "superscript six"),
+ (0x2077, 'โท', "superscript seven"),
+ (0x2078, 'โธ', "superscript eight"),
+ (0x2079, 'โน', "superscript nine"),
+ (0x2080, 'โ', "subscript zero"),
+ (0x2081, 'โ', "subscript one"),
+ (0x2082, 'โ', "subscript two"),
+ (0x2083, 'โ', "subscript three"),
+ (0x2084, 'โ', "subscript four"),
+ (0x2085, 'โ
', "subscript five"),
+ (0x2086, 'โ', "subscript six"),
+ (0x2087, 'โ', "subscript seven"),
+ (0x2088, 'โ', "subscript eight"),
+ (0x2089, 'โ', "subscript nine"),
+ (0x20AC, 'โฌ', "euro sign"),
+ (0x20AE, 'โฎ', "tugrik sign"),
+ (0x20B4, 'โด', "hryvnia sign"),
+ (0x20B9, 'โน', "indian rupee sign"),
+ (0x2113, 'โ', "script small l"),
+ (0x2116, 'โ', "numero sign"),
+ (0x2122, 'โข', "trade mark sign"),
+ (0x2126, 'โฆ', "ohm sign"),
+ (0x212E, 'โฎ', "estimated symbol"),
+ (0x2153, 'โ
', "vulgar fraction one third"),
+ (0x2154, 'โ
', "vulgar fraction two thirds"),
+ (0x2155, 'โ
', "vulgar fraction one fifth"),
+ (0x2156, 'โ
', "vulgar fraction two fifths"),
+ (0x2157, 'โ
', "vulgar fraction three fifths"),
+ (0x2158, 'โ
', "vulgar fraction four fifths"),
+ (0x2159, 'โ
', "vulgar fraction one sixth"),
+ (0x215A, 'โ
', "vulgar fraction five sixths"),
+ (0x215B, 'โ
', "vulgar fraction one eighth"),
+ (0x215C, 'โ
', "vulgar fraction three eighths"),
+ (0x215D, 'โ
', "vulgar fraction five eighths"),
+ (0x215E, 'โ
', "vulgar fraction seven eighths"),
+ (0x2202, 'โ', "partial differential"),
+ (0x2206, 'โ', "increment"),
+ (0x220F, 'โ', "n-ary product"),
+ (0x2211, 'โ', "n-ary summation"),
+ (0x2212, 'โ', "minus sign"),
+ (0x2215, 'โ', "division slash"),
+ (0x2219, 'โ', "bullet operator"),
+ (0x221A, 'โ', "square root"),
+ (0x221E, 'โ', "infinity"),
+ (0x222B, 'โซ', "integral"),
+ (0x2248, 'โ', "almost equal to"),
+ (0x2260, 'โ ', "not equal to"),
+ (0x2264, 'โค', "less-than or equal to"),
+ (0x2265, 'โฅ', "greater-than or equal to"),
+ (0x25CA, 'โ', "lozenge"),
+ // (0xE0FF, '๎ฟ', "ubuntu logo large"),
+ // (0xEFFD, '๎ฟฝ', "0.830"),
+ (0xF000, '๏', "uniF000"),
+ (0xF001, '๏', "fi"),
+ (0xF002, '๏', "fl"),
+ // (0xF0FF, '๏ฟ', "ubuntu logo small"),
+ // (0xF200, '๏', "ubuntu"),
+ (0xF506, '๏', "oneseventh"),
+ (0xF507, '๏', "twosevenths"),
+ (0xF508, '๏', "threesevenths"),
+ (0xF509, '๏', "foursevenths"),
+ (0xF50A, '๏', "fivesevenths"),
+ (0xF50B, '๏', "sixsevenths"),
+ (0xF50C, '๏', "oneninth"),
+ (0xF50D, '๏', "twoninths"),
+ (0xF50E, '๏', "fourninths"),
+ (0xF50F, '๏', "fiveninths"),
+ (0xF510, '๏', "sevenninths"),
+ (0xF511, '๏', "eightninths"),
+ (0xF800, '๏ ', "zero.alt"),
+ (0xF801, '๏ ', "one.alt"),
+ (0xF802, '๏ ', "two.alt"),
+ (0xF803, '๏ ', "three.alt"),
+ (0xF804, '๏ ', "four.alt"),
+ (0xF805, '๏
', "five.alt"),
+ (0xF806, '๏ ', "six.alt"),
+ (0xF807, '๏ ', "seven.alt"),
+ (0xF808, '๏ ', "eight.alt"),
+ (0xF809, '๏ ', "nine.alt"),
+ (0xF80A, '๏ ', "zero.sups"),
+ (0xF80B, '๏ ', "one.sups"),
+ (0xF80C, '๏ ', "two.sups"),
+ (0xF80D, '๏ ', "three.sups"),
+ (0xF80E, '๏ ', "four.sups"),
+ (0xF80F, '๏ ', "five.sups"),
+ (0xF810, '๏ ', "six.sups"),
+ (0xF811, '๏ ', "seven.sups"),
+ (0xF812, '๏ ', "eight.sups"),
+ (0xF813, '๏ ', "nine.sups"),
+ (0xF814, '๏ ', "zero.sinf"),
+ (0xF815, '๏ ', "one.sinf"),
+ (0xF816, '๏ ', "two.sinf"),
+ (0xF817, '๏ ', "three.sinf"),
+ (0xF818, '๏ ', "four.sinf"),
+ (0xF819, '๏ ', "five.sinf"),
+ (0xF81A, '๏ ', "six.sinf"),
+ (0xF81B, '๏ ', "seven.sinf"),
+ (0xF81C, '๏ ', "eight.sinf"),
+ (0xF81D, '๏ ', "nine.sinf"),
+ (0xFB00, '๏ฌ', "latin small ligature ff"),
+ (0xFB01, '๏ฌ', "latin small ligature fi"),
+ (0xFB02, '๏ฌ', "latin small ligature fl"),
+ (0xFB03, '๏ฌ', "latin small ligature ffi"),
+ (0xFB04, '๏ฌ', "latin small ligature ffl"),
+];
diff --git a/egui/src/demos/fractal_clock.rs b/egui/src/demos/fractal_clock.rs
index 573d3a13..22035b71 100644
--- a/egui/src/demos/fractal_clock.rs
+++ b/egui/src/demos/fractal_clock.rs
@@ -37,7 +37,7 @@ impl FractalClock {
open: &mut bool,
seconds_since_midnight: Option,
) {
- Window::new("FractalClock")
+ Window::new("๐ Fractal Clock")
.open(open)
.default_size(vec2(512.0, 512.0))
.scroll(false)
diff --git a/egui/src/demos/mod.rs b/egui/src/demos/mod.rs
index d2040d32..5ead9200 100644
--- a/egui/src/demos/mod.rs
+++ b/egui/src/demos/mod.rs
@@ -7,6 +7,9 @@ mod dancing_strings;
pub mod demo_window;
mod demo_windows;
mod drag_and_drop;
+mod font_book;
+pub mod font_contents_emoji;
+pub mod font_contents_ubuntu;
mod fractal_clock;
mod sliders;
mod tests;
@@ -15,8 +18,8 @@ mod widgets;
pub use {
app::*, color_test::ColorTest, dancing_strings::DancingStrings, demo_window::DemoWindow,
- demo_windows::*, drag_and_drop::*, fractal_clock::FractalClock, sliders::Sliders, tests::Tests,
- widgets::Widgets,
+ demo_windows::*, drag_and_drop::*, font_book::FontBook, fractal_clock::FractalClock,
+ sliders::Sliders, tests::Tests, widgets::Widgets,
};
pub const LOREM_IPSUM: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
@@ -45,7 +48,7 @@ pub trait Demo {
pub fn warn_if_debug_build(ui: &mut crate::Ui) {
if crate::has_debug_assertions() {
ui.label(
- crate::Label::new("[Debug build]")
+ crate::Label::new("โผ Debug build โผ")
.small()
.text_color(crate::color::RED),
)
diff --git a/egui/src/demos/tests.rs b/egui/src/demos/tests.rs
index 09d2de36..45cd60ad 100644
--- a/egui/src/demos/tests.rs
+++ b/egui/src/demos/tests.rs
@@ -5,7 +5,7 @@ pub struct Tests {}
impl demos::Demo for Tests {
fn name(&self) -> &str {
- "Tests"
+ "๐ Tests"
}
fn show(&mut self, ctx: &std::sync::Arc, open: &mut bool) {
diff --git a/egui/src/input.rs b/egui/src/input.rs
index ff987310..5dd19bb0 100644
--- a/egui/src/input.rs
+++ b/egui/src/input.rs
@@ -410,7 +410,7 @@ impl InputState {
ui.style_mut().body_text_style = crate::paint::TextStyle::Monospace;
ui.collapsing("Raw Input", |ui| raw.ui(ui));
- crate::containers::CollapsingHeader::new("mouse")
+ crate::containers::CollapsingHeader::new("๐ฑ Mouse")
.default_open(true)
.show(ui, |ui| {
mouse.ui(ui);
diff --git a/egui/src/paint/font.rs b/egui/src/paint/font.rs
index 9c7bf5d0..7d53acbb 100644
--- a/egui/src/paint/font.rs
+++ b/egui/src/paint/font.rs
@@ -16,9 +16,9 @@ use super::texture_atlas::TextureAtlas;
// ----------------------------------------------------------------------------
-// const REPLACEMENT_CHAR: char = '\u{25A1}'; // โก white square Replaces a missing or unsupported Unicode character.
// const REPLACEMENT_CHAR: char = '\u{FFFD}'; // ๏ฟฝ REPLACEMENT CHARACTER
-const REPLACEMENT_CHAR: char = '?';
+// const REPLACEMENT_CHAR: char = '?';
+const REPLACEMENT_CHAR: char = 'โป'; // white medium square
#[derive(Clone, Copy, Debug)]
pub struct UvRect {
@@ -44,57 +44,49 @@ pub struct GlyphInfo {
pub uv_rect: Option,
}
+impl Default for GlyphInfo {
+ fn default() -> Self {
+ Self {
+ id: rusttype::GlyphId(0),
+ advance_width: 0.0,
+ uv_rect: None,
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+
+/// A specific font with a size.
/// The interface uses points as the unit for everything.
-pub struct Font {
- font: rusttype::Font<'static>,
+pub struct FontImpl {
+ rusttype_font: Arc>,
/// Maximum character height
scale_in_pixels: f32,
pixels_per_point: f32,
- replacement_glyph_info: GlyphInfo,
- glyph_infos: RwLock>,
+ glyph_info_cache: RwLock>, // TODO: standard Mutex
atlas: Arc>,
}
-impl Font {
+impl FontImpl {
pub fn new(
atlas: Arc>,
- font_data: &'static [u8],
- scale_in_points: f32,
pixels_per_point: f32,
- ) -> Font {
+ rusttype_font: Arc>,
+ scale_in_points: f32,
+ ) -> FontImpl {
assert!(scale_in_points > 0.0);
assert!(pixels_per_point > 0.0);
- let font = rusttype::Font::try_from_bytes(font_data).expect("Error constructing Font");
let scale_in_pixels = pixels_per_point * scale_in_points;
- let replacement_glyph_info = allocate_glyph(
- &mut atlas.lock(),
- REPLACEMENT_CHAR,
- &font,
+ let font = Self {
+ rusttype_font,
scale_in_pixels,
pixels_per_point,
- )
- .unwrap_or_else(|| {
- panic!(
- "Failed to find replacement character {:?}",
- REPLACEMENT_CHAR
- )
- });
-
- let font = Font {
- font,
- scale_in_pixels,
- pixels_per_point,
- replacement_glyph_info,
- glyph_infos: Default::default(),
+ glyph_info_cache: Default::default(),
atlas,
};
- font.glyph_infos
- .write()
- .insert(REPLACEMENT_CHAR, font.replacement_glyph_info);
-
// Preload the printable ASCII characters [32, 126] (which excludes control codes):
const FIRST_ASCII: usize = 32; // 32 == space
const LAST_ASCII: usize = 126;
@@ -106,8 +98,39 @@ impl Font {
font
}
- pub fn round_to_pixel(&self, point: f32) -> f32 {
- (point * self.pixels_per_point).round() / self.pixels_per_point
+ /// `\n` will result in `None`
+ fn glyph_info(&self, c: char) -> Option {
+ {
+ if let Some(glyph_info) = self.glyph_info_cache.read().get(&c) {
+ return Some(*glyph_info);
+ }
+ }
+
+ // Add new character:
+ let glyph = self.rusttype_font.glyph(c);
+ if glyph.id().0 == 0 {
+ None
+ } else {
+ let glyph_info = allocate_glyph(
+ &mut self.atlas.lock(),
+ glyph,
+ self.scale_in_pixels,
+ self.pixels_per_point,
+ );
+ self.glyph_info_cache.write().insert(c, glyph_info);
+ Some(glyph_info)
+ }
+ }
+
+ pub fn pair_kerning(
+ &self,
+ last_glyph_id: rusttype::GlyphId,
+ glyph_id: rusttype::GlyphId,
+ ) -> f32 {
+ let scale_in_pixels = Scale::uniform(self.scale_in_pixels);
+ self.rusttype_font
+ .pair_kerning(scale_in_pixels, last_glyph_id, glyph_id)
+ / self.pixels_per_point
}
/// Height of one row of text. In points
@@ -115,34 +138,121 @@ impl Font {
self.scale_in_pixels / self.pixels_per_point
}
+ pub fn pixels_per_point(&self) -> f32 {
+ self.pixels_per_point
+ }
+}
+
+type FontIndex = usize;
+
+// TODO: rename Layouter ?
+/// Wrapper over multiple `FontImpl` (commonly two: primary + emoji fallback)
+pub struct Font {
+ fonts: Vec>,
+ replacement_glyph: (FontIndex, GlyphInfo),
+ pixels_per_point: f32,
+ row_height: f32,
+ glyph_info_cache: RwLock>,
+}
+
+impl Font {
+ pub fn new(fonts: Vec>) -> Self {
+ assert!(!fonts.is_empty());
+ let pixels_per_point = fonts[0].pixels_per_point();
+ let row_height = fonts[0].row_height();
+
+ let mut slf = Self {
+ fonts,
+ replacement_glyph: Default::default(),
+ pixels_per_point,
+ row_height,
+ glyph_info_cache: Default::default(),
+ };
+ let replacement_glyph = slf
+ .glyph_info_no_cache(REPLACEMENT_CHAR)
+ .unwrap_or_else(|| {
+ panic!(
+ "Failed to find replacement character {:?}",
+ REPLACEMENT_CHAR
+ )
+ });
+ slf.replacement_glyph = replacement_glyph;
+ slf
+ }
+
+ pub fn round_to_pixel(&self, point: f32) -> f32 {
+ (point * self.pixels_per_point).round() / self.pixels_per_point
+ }
+
+ /// Height of one row of text. In points
+ pub fn row_height(&self) -> f32 {
+ self.row_height
+ }
+
pub fn uv_rect(&self, c: char) -> Option {
- self.glyph_infos.read().get(&c).and_then(|gi| gi.uv_rect)
+ self.glyph_info_cache
+ .read()
+ .get(&c)
+ .and_then(|gi| gi.1.uv_rect)
}
pub fn glyph_width(&self, c: char) -> f32 {
- self.glyph_info(c).advance_width
+ self.glyph_info(c).1.advance_width
}
- /// `\n` will (intentionally) show up as '?' (`REPLACEMENT_CHAR`)
- fn glyph_info(&self, c: char) -> GlyphInfo {
+ /// `\n` will (intentionally) show up as `REPLACEMENT_CHAR`
+ fn glyph_info(&self, c: char) -> (FontIndex, GlyphInfo) {
{
- if let Some(glyph_info) = self.glyph_infos.read().get(&c) {
+ if let Some(glyph_info) = self.glyph_info_cache.read().get(&c) {
return *glyph_info;
}
}
- // Add new character:
- let glyph_info = allocate_glyph(
- &mut self.atlas.lock(),
- c,
- &self.font,
- self.scale_in_pixels,
- self.pixels_per_point,
- );
- // debug_assert!(glyph_info.is_some(), "Failed to find {:?}", c);
- let glyph_info = glyph_info.unwrap_or(self.replacement_glyph_info);
- self.glyph_infos.write().insert(c, glyph_info);
- glyph_info
+ let font_index_glyph_info = self.glyph_info_no_cache(c);
+ let font_index_glyph_info = font_index_glyph_info.unwrap_or(self.replacement_glyph);
+ self.glyph_info_cache
+ .write()
+ .insert(c, font_index_glyph_info);
+ font_index_glyph_info
+ }
+
+ fn glyph_info_no_cache(&self, c: char) -> Option<(FontIndex, GlyphInfo)> {
+ for (font_index, font_impl) in self.fonts.iter().enumerate() {
+ if let Some(glyph_info) = font_impl.glyph_info(c) {
+ self.glyph_info_cache
+ .write()
+ .insert(c, (font_index, glyph_info));
+ return Some((font_index, glyph_info));
+ }
+ }
+ None
+ }
+
+ /// Typeset the given text onto one row.
+ /// Assumes there are no `\n` in the text.
+ /// Return `x_offsets`, one longer than the number of characters in the text.
+ fn layout_single_row_fragment(&self, text: &str) -> Vec {
+ let mut x_offsets = Vec::with_capacity(text.chars().count() + 1);
+ x_offsets.push(0.0);
+
+ let mut cursor_x_in_points = 0.0f32;
+ let mut last_glyph_id = None;
+
+ for c in text.chars() {
+ let (font_index, glyph_info) = self.glyph_info(c);
+ let font_impl = &self.fonts[font_index];
+
+ if let Some(last_glyph_id) = last_glyph_id {
+ cursor_x_in_points += font_impl.pair_kerning(last_glyph_id, glyph_info.id)
+ }
+ cursor_x_in_points += glyph_info.advance_width;
+ cursor_x_in_points = self.round_to_pixel(cursor_x_in_points);
+ last_glyph_id = Some(glyph_info.id);
+
+ x_offsets.push(cursor_x_in_points);
+ }
+
+ x_offsets
}
/// Typeset the given text onto one row.
@@ -240,37 +350,6 @@ impl Font {
galley
}
- /// Typeset the given text onto one row.
- /// Assumes there are no `\n` in the text.
- /// Return `x_offsets`, one longer than the number of characters in the text.
- fn layout_single_row_fragment(&self, text: &str) -> Vec {
- let scale_in_pixels = Scale::uniform(self.scale_in_pixels);
-
- let mut x_offsets = Vec::with_capacity(text.chars().count() + 1);
- x_offsets.push(0.0);
-
- let mut cursor_x_in_points = 0.0f32;
- let mut last_glyph_id = None;
-
- for c in text.chars() {
- let glyph = self.glyph_info(c);
-
- if let Some(last_glyph_id) = last_glyph_id {
- cursor_x_in_points +=
- self.font
- .pair_kerning(scale_in_pixels, last_glyph_id, glyph.id)
- / self.pixels_per_point
- }
- cursor_x_in_points += glyph.advance_width;
- cursor_x_in_points = self.round_to_pixel(cursor_x_in_points);
- last_glyph_id = Some(glyph.id);
-
- x_offsets.push(cursor_x_in_points);
- }
-
- x_offsets
- }
-
/// A paragraph is text with no line break character in it.
/// The text will be wrapped by the given `max_width_in_points`.
/// Always returns at least one row.
@@ -366,15 +445,11 @@ impl Font {
fn allocate_glyph(
atlas: &mut TextureAtlas,
- c: char,
- font: &rusttype::Font<'static>,
+ glyph: rusttype::Glyph<'static>,
scale_in_pixels: f32,
pixels_per_point: f32,
-) -> Option {
- let glyph = font.glyph(c);
- if glyph.id().0 == 0 {
- return None; // Failed to find a glyph for the character
- }
+) -> GlyphInfo {
+ assert!(glyph.id().0 != 0);
let glyph = glyph.scaled(Scale::uniform(scale_in_pixels));
let glyph = glyph.positioned(point(0.0, 0.0));
@@ -382,33 +457,36 @@ fn allocate_glyph(
let uv_rect = if let Some(bb) = glyph.pixel_bounding_box() {
let glyph_width = bb.width() as usize;
let glyph_height = bb.height() as usize;
- assert!(glyph_width >= 1);
- assert!(glyph_height >= 1);
- let glyph_pos = atlas.allocate((glyph_width, glyph_height));
+ if glyph_width == 0 || glyph_height == 0 {
+ None
+ } else {
+ let glyph_pos = atlas.allocate((glyph_width, glyph_height));
- let texture = atlas.texture_mut();
- glyph.draw(|x, y, v| {
- if v > 0.0 {
- let px = glyph_pos.0 + x as usize;
- let py = glyph_pos.1 + y as usize;
- texture[(px, py)] = (v * 255.0).round() as u8;
- }
- });
+ let texture = atlas.texture_mut();
+ glyph.draw(|x, y, v| {
+ if v > 0.0 {
+ let px = glyph_pos.0 + x as usize;
+ let py = glyph_pos.1 + y as usize;
+ texture[(px, py)] = (v * 255.0).round() as u8;
+ }
+ });
- let offset_y_in_pixels = scale_in_pixels as f32 + bb.min.y as f32 - 4.0 * pixels_per_point; // TODO: use font.v_metrics
- Some(UvRect {
- offset: vec2(
- bb.min.x as f32 / pixels_per_point,
- offset_y_in_pixels / pixels_per_point,
- ),
- size: vec2(glyph_width as f32, glyph_height as f32) / pixels_per_point,
- min: (glyph_pos.0 as u16, glyph_pos.1 as u16),
- max: (
- (glyph_pos.0 + glyph_width) as u16,
- (glyph_pos.1 + glyph_height) as u16,
- ),
- })
+ let offset_y_in_pixels =
+ scale_in_pixels as f32 + bb.min.y as f32 - 4.0 * pixels_per_point; // TODO: use font.v_metrics
+ Some(UvRect {
+ offset: vec2(
+ bb.min.x as f32 / pixels_per_point,
+ offset_y_in_pixels / pixels_per_point,
+ ),
+ size: vec2(glyph_width as f32, glyph_height as f32) / pixels_per_point,
+ min: (glyph_pos.0 as u16, glyph_pos.1 as u16),
+ max: (
+ (glyph_pos.0 + glyph_width) as u16,
+ (glyph_pos.1 + glyph_height) as u16,
+ ),
+ })
+ }
} else {
// No bounding box. Maybe a space?
None
@@ -416,9 +494,9 @@ fn allocate_glyph(
let advance_width_in_points = glyph.unpositioned().h_metrics().advance_width / pixels_per_point;
- Some(GlyphInfo {
+ GlyphInfo {
id: glyph.id(),
advance_width: advance_width_in_points,
uv_rect,
- })
+ }
}
diff --git a/egui/src/paint/fonts.rs b/egui/src/paint/fonts.rs
index c148059b..d795fa83 100644
--- a/egui/src/paint/fonts.rs
+++ b/egui/src/paint/fonts.rs
@@ -7,7 +7,7 @@ use std::{
use crate::mutex::Mutex;
use super::{
- font::Font,
+ font::{Font, FontImpl},
texture_atlas::{Texture, TextureAtlas},
};
@@ -23,6 +23,20 @@ pub enum TextStyle {
Monospace,
}
+impl TextStyle {
+ pub fn all() -> impl Iterator- {
+ [
+ TextStyle::Small,
+ TextStyle::Body,
+ TextStyle::Button,
+ TextStyle::Heading,
+ TextStyle::Monospace,
+ ]
+ .iter()
+ .copied()
+ }
+}
+
#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
// #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum FontFamily {
@@ -41,6 +55,9 @@ pub struct FontDefinitions {
/// Egui has built-in-default for these,
/// but you can override them if you like.
pub ttf_data: BTreeMap,
+
+ /// ttf data for emoji font(s), if any, in order of preference
+ pub emoji_ttf_data: Vec<&'static [u8]>,
}
impl Default for FontDefinitions {
@@ -70,6 +87,10 @@ impl FontDefinitions {
pixels_per_point,
fonts,
ttf_data,
+ emoji_ttf_data: vec![
+ include_bytes!("../../fonts/NotoEmoji-Regular.ttf"), // few, but good looking. Use as first priority
+ include_bytes!("../../fonts/emoji-icon-font.ttf"), // bigger and more: http://jslegers.github.io/emoji-icon-font/
+ ],
}
}
}
@@ -101,7 +122,9 @@ impl Fonts {
return;
}
- let mut atlas = TextureAtlas::new(512, 16); // TODO: better default?
+ // We want an atlas big enough to be able to include all the Emojis in the `TextStyle::Heading`,
+ // so we can show the Emoji picker demo window.
+ let mut atlas = TextureAtlas::new(2048, 64);
{
// Make the top left pixel fully white:
@@ -112,21 +135,33 @@ impl Fonts {
let atlas = Arc::new(Mutex::new(atlas));
- self.definitions = definitions.clone();
- let FontDefinitions {
- pixels_per_point,
- fonts,
- ttf_data,
- } = definitions;
- self.fonts = fonts
- .into_iter()
- .map(|(text_style, (family, size))| {
- let typeface_data = ttf_data
- .get(&family)
- .unwrap_or_else(|| panic!("Missing TTF data for {:?}", family));
- let font = Font::new(atlas.clone(), typeface_data, size, pixels_per_point);
+ self.definitions = definitions;
- (text_style, font)
+ let mut font_impl_cache = FontImplCache::new(atlas.clone(), &self.definitions);
+
+ self.fonts = self
+ .definitions
+ .fonts
+ .iter()
+ .map(|(&text_style, &(family, size))| {
+ let mut fonts = vec![];
+
+ fonts.push(font_impl_cache.font_impl(FontSource::Family(family), size));
+
+ if family == FontFamily::Monospace {
+ // monospace should have ubuntu as fallback (for โ etc):
+ fonts.push(
+ font_impl_cache
+ .font_impl(FontSource::Family(FontFamily::VariableWidth), size),
+ );
+ }
+
+ for index in 0..self.definitions.emoji_ttf_data.len() {
+ let emoji_font_impl = font_impl_cache.font_impl(FontSource::Emoji(index), size);
+ fonts.push(emoji_font_impl);
+ }
+
+ (text_style, Font::new(fonts))
})
.collect();
@@ -162,3 +197,79 @@ impl std::ops::Index for Fonts {
&self.fonts[&text_style]
}
}
+
+// ----------------------------------------------------------------------------
+
+#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
+pub enum FontSource {
+ Family(FontFamily),
+ /// Emoji fonts are numbered from hight priority (0) and onwards
+ Emoji(usize),
+}
+
+pub struct FontImplCache {
+ atlas: Arc>,
+ pixels_per_point: f32,
+ font_families: std::collections::BTreeMap>>,
+ emoji_fonts: Vec>>,
+
+ /// can't have f32 in a HashMap or BTreeMap,
+ /// so let's do a linear search
+ cache: Vec<(FontSource, f32, Arc)>,
+}
+
+impl FontImplCache {
+ pub fn new(atlas: Arc>, definitions: &super::FontDefinitions) -> Self {
+ let font_families = definitions
+ .ttf_data
+ .iter()
+ .map(|(family, ttf_data)| {
+ (
+ *family,
+ Arc::new(rusttype::Font::try_from_bytes(ttf_data).expect("Error parsing TTF")),
+ )
+ })
+ .collect();
+
+ let emoji_fonts = definitions
+ .emoji_ttf_data
+ .iter()
+ .map(|ttf_data| {
+ Arc::new(rusttype::Font::try_from_bytes(ttf_data).expect("Error parsing TTF"))
+ })
+ .collect();
+
+ Self {
+ atlas,
+ pixels_per_point: definitions.pixels_per_point,
+ font_families,
+ emoji_fonts,
+ cache: Default::default(),
+ }
+ }
+
+ pub fn rusttype_font(&self, source: FontSource) -> Arc> {
+ match source {
+ FontSource::Family(family) => self.font_families.get(&family).unwrap().clone(),
+ FontSource::Emoji(index) => self.emoji_fonts[index].clone(),
+ }
+ }
+
+ pub fn font_impl(&mut self, source: FontSource, scale_in_points: f32) -> Arc {
+ for entry in &self.cache {
+ if (entry.0, entry.1) == (source, scale_in_points) {
+ return entry.2.clone();
+ }
+ }
+
+ let font_impl = Arc::new(FontImpl::new(
+ self.atlas.clone(),
+ self.pixels_per_point,
+ self.rusttype_font(source),
+ scale_in_points,
+ ));
+ self.cache
+ .push((source, scale_in_points, font_impl.clone()));
+ font_impl
+ }
+}
diff --git a/egui/src/paint/galley.rs b/egui/src/paint/galley.rs
index 57f91f58..00f64c42 100644
--- a/egui/src/paint/galley.rs
+++ b/egui/src/paint/galley.rs
@@ -654,14 +654,11 @@ fn test_text_layout() {
}
}
- use crate::mutex::Mutex;
- use crate::paint::{font::Font, *};
+ use crate::paint::*;
let pixels_per_point = 1.0;
- let typeface_data = include_bytes!("../../fonts/ProggyClean.ttf");
- let atlas = TextureAtlas::new(512, 16);
- let atlas = std::sync::Arc::new(Mutex::new(atlas));
- let font = Font::new(atlas, typeface_data, 13.0, pixels_per_point);
+ let fonts = Fonts::from_definitions(FontDefinitions::with_pixels_per_point(pixels_per_point));
+ let font = &fonts[TextStyle::Monospace];
let galley = font.layout_multiline("".to_owned(), 1024.0);
assert_eq!(galley.rows.len(), 1);
diff --git a/egui/src/painter.rs b/egui/src/painter.rs
index 67fec0ef..532f841b 100644
--- a/egui/src/painter.rs
+++ b/egui/src/painter.rs
@@ -139,11 +139,10 @@ impl Painter {
self.text(rect.min, LEFT_TOP, text.into(), text_style, color);
}
- pub fn error(&self, pos: Pos2, text: impl Into) {
- let text = text.into();
+ pub fn error(&self, pos: Pos2, text: impl std::fmt::Display) {
let text_style = TextStyle::Monospace;
let font = &self.fonts()[text_style];
- let galley = font.layout_multiline(text, f32::INFINITY);
+ let galley = font.layout_multiline(format!("๐ฅ {}", text), f32::INFINITY);
let rect = anchor_rect(Rect::from_min_size(pos, galley.size), LEFT_TOP);
self.add(PaintCmd::Rect {
rect: rect.expand(2.0),
diff --git a/egui/src/style.rs b/egui/src/style.rs
index d95d13d8..9dc04ad1 100644
--- a/egui/src/style.rs
+++ b/egui/src/style.rs
@@ -355,9 +355,9 @@ impl Style {
ui.radio_value(body_text_style, value, format!("{:?}", value));
}
});
- ui.collapsing("Spacing", |ui| spacing.ui(ui));
- ui.collapsing("Interaction", |ui| interaction.ui(ui));
- ui.collapsing("Visuals", |ui| visuals.ui(ui));
+ ui.collapsing("๐ Spacing", |ui| spacing.ui(ui));
+ ui.collapsing("โ Interaction", |ui| interaction.ui(ui));
+ ui.collapsing("๐จ Visuals", |ui| visuals.ui(ui));
ui.add(Slider::f32(animation_time, 0.0..=1.0).text("animation_time"));
}
}
diff --git a/egui/src/widgets/mod.rs b/egui/src/widgets/mod.rs
index adb6e613..85faeb31 100644
--- a/egui/src/widgets/mod.rs
+++ b/egui/src/widgets/mod.rs
@@ -288,6 +288,7 @@ pub struct Button {
fill: Option,
sense: Sense,
small: bool,
+ frame: bool,
}
impl Button {
@@ -299,6 +300,7 @@ impl Button {
fill: Default::default(),
sense: Sense::click(),
small: false,
+ frame: true,
}
}
@@ -329,6 +331,12 @@ impl Button {
self
}
+ /// Turn off the frame
+ pub fn frame(mut self, frame: bool) -> Self {
+ self.frame = frame;
+ self
+ }
+
/// By default, buttons senses clicks.
/// Change this to a drag-button with `Sense::drag()`.
pub fn sense(mut self, sense: Sense) -> Self {
@@ -355,6 +363,7 @@ impl Widget for Button {
fill,
sense,
small,
+ frame,
} = self;
let mut button_padding = ui.style().spacing.button_padding;
@@ -363,32 +372,47 @@ impl Widget for Button {
}
let font = &ui.fonts()[text_style];
- let galley = font.layout_multiline(text, ui.available_width());
+
+ let single_line = ui.layout().is_horizontal();
+ let galley = if single_line {
+ font.layout_single_line(text)
+ } else {
+ font.layout_multiline(text, ui.available_width())
+ };
+
let mut desired_size = galley.size + 2.0 * button_padding;
if !small {
- desired_size = desired_size.at_least(ui.style().spacing.interact_size);
+ desired_size.y = desired_size.y.at_least(ui.style().spacing.interact_size.y);
}
let rect = ui.allocate_space(desired_size);
let id = ui.make_position_id();
let response = ui.interact(rect, id, sense);
- let visuals = ui.style().interact(&response);
- let text_cursor = ui
- .layout()
- .align_size_within_rect(galley.size, response.rect.shrink2(button_padding))
- .min;
- let fill = fill.unwrap_or(visuals.bg_fill);
- ui.painter().rect(
- response.rect,
- visuals.corner_radius,
- fill,
- visuals.bg_stroke,
- );
- let text_color = text_color
- .or(ui.style().visuals.override_text_color)
- .unwrap_or_else(|| visuals.text_color());
- ui.painter()
- .galley(text_cursor, galley, text_style, text_color);
+
+ if ui.clip_rect().intersects(rect) {
+ let visuals = ui.style().interact(&response);
+ let text_cursor = ui
+ .layout()
+ .align_size_within_rect(galley.size, response.rect.shrink2(button_padding))
+ .min;
+
+ if frame {
+ let fill = fill.unwrap_or(visuals.bg_fill);
+ ui.painter().rect(
+ response.rect,
+ visuals.corner_radius,
+ fill,
+ visuals.bg_stroke,
+ );
+ }
+
+ let text_color = text_color
+ .or(ui.style().visuals.override_text_color)
+ .unwrap_or_else(|| visuals.text_color());
+ ui.painter()
+ .galley(text_cursor, galley, text_style, text_color);
+ }
+
response
}
}
@@ -436,8 +460,12 @@ impl<'a> Widget for Checkbox<'a> {
let button_padding = spacing.button_padding;
let total_extra = button_padding + vec2(icon_width + icon_spacing, 0.0) + button_padding;
- let galley = font.layout_single_line(text);
- // let galley = font.layout_multiline(text, ui.available_width() - total_extra.x);
+ let single_line = ui.layout().is_horizontal();
+ let galley = if single_line {
+ font.layout_single_line(text)
+ } else {
+ font.layout_multiline(text, ui.available_width() - total_extra.x)
+ };
let mut desired_size = total_extra + galley.size;
desired_size = desired_size.at_least(spacing.interact_size);
@@ -526,7 +554,12 @@ impl Widget for RadioButton {
let button_padding = ui.style().spacing.button_padding;
let total_extra = button_padding + vec2(icon_width + icon_spacing, 0.0) + button_padding;
- let galley = font.layout_multiline(text, ui.available_width() - total_extra.x);
+ let single_line = ui.layout().is_horizontal();
+ let galley = if single_line {
+ font.layout_single_line(text)
+ } else {
+ font.layout_multiline(text, ui.available_width() - total_extra.x)
+ };
let mut desired_size = total_extra + galley.size;
desired_size = desired_size.at_least(ui.style().spacing.interact_size);