├── .gitignore ├── .gitattributes ├── licenses.txt ├── zig.mod ├── src ├── named_sequences_prov.zig ├── main.zig ├── composition_exclusions.zig ├── jamo.zig ├── lib.zig ├── property_aliases.zig ├── bidi_brackets.zig ├── equivalent_unified_ideograph.zig ├── special_casing.zig ├── cjk_radicals.zig ├── bidi_mirroring.zig ├── blocks.zig └── name_aliases.zig ├── scripts ├── Scripts.zig ├── LineBreak.zig ├── CompositionExclusions.zig ├── VerticalOrientation.zig ├── BidiMirroring.zig ├── emoji.zig ├── Jamo.zig ├── Blocks.zig ├── NamedSequences.zig ├── NamedSequencesProv.zig ├── PropertyAliases.zig ├── BidiBrackets.zig ├── EquivalentUnifiedIdeograph.zig ├── NameAliases.zig ├── EastAsianWidth.zig ├── HangulSyllableType.zig ├── CJKRadicals.zig ├── EmojiSources.zig ├── DerivedAge.zig ├── IndicSyllabicCategory.zig ├── IndicPositionalCategory.zig ├── SpecialCasing.zig ├── PropertyValueAliases.zig ├── CaseFolding.zig ├── ScriptExtensions.zig ├── DerivedCoreProperties.zig ├── PropList.zig ├── UnicodeData.zig ├── _common.zig └── ArabicShaping.zig ├── README.md ├── LICENSE ├── test.zig └── generate.zig /.gitignore: -------------------------------------------------------------------------------- 1 | zig-cache 2 | .zig-cache 3 | zig-out 4 | deps.zig 5 | .zigmod 6 | zigmod.lock 7 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | *.zig text eol=lf 4 | zig.mod text eol=lf 5 | zigmod.* text eol=lf 6 | zig.mod linguist-language=YAML 7 | -------------------------------------------------------------------------------- /licenses.txt: -------------------------------------------------------------------------------- 1 | MIT: 2 | = https://spdx.org/licenses/MIT 3 | - This 4 | - git https://github.com/nektro/iguanaTLS 5 | - git https://github.com/nektro/zfetch 6 | - git https://github.com/nektro/zig-ansi 7 | - git https://github.com/nektro/zig-extras 8 | - git https://github.com/nektro/zig-fmt-valueliteral 9 | - git https://github.com/truemedian/hzzp 10 | -------------------------------------------------------------------------------- /zig.mod: -------------------------------------------------------------------------------- 1 | id: iws1u5qg29z5f3k0r4ckm02k5zhy1risxzy8c9pnlqueemcw 2 | name: unicode-ucd 3 | main: src/lib.zig 4 | license: MIT 5 | description: Zig bindings for the Unicode Character Database 6 | root_dependencies: 7 | - src: git https://github.com/nektro/zfetch 8 | - src: git https://github.com/nektro/zig-ansi 9 | - src: git https://github.com/nektro/zig-fmt-valueliteral 10 | -------------------------------------------------------------------------------- /src/named_sequences_prov.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/NamedSequencesProv.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const NamedSequence = struct { 9 | name: []const u8, 10 | sequence: []const u21, 11 | }; 12 | 13 | pub const data = [_]NamedSequence{ 14 | }; 15 | -------------------------------------------------------------------------------- /scripts/Scripts.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "Scripts"; 6 | 7 | pub const dest_file = "src/scripts.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const Scripts = struct { 13 | \\ from: u21, 14 | \\ to: u21, 15 | \\ script: ucd.ScriptLong, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]Scripts{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub usingnamespace common.RangeEnum("script"); 28 | }); 29 | -------------------------------------------------------------------------------- /scripts/LineBreak.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "LineBreak"; 6 | 7 | pub const dest_file = "src/line_break.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const LineBreak = struct { 13 | \\ from: u21, 14 | \\ to: u21, 15 | \\ category: ucd.LineBreak, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]LineBreak{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub usingnamespace common.RangeEnum("category"); 28 | }); 29 | -------------------------------------------------------------------------------- /scripts/CompositionExclusions.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | const extras = @import("extras"); 4 | 5 | pub usingnamespace common.Main(struct { 6 | pub const source_file = "CompositionExclusions"; 7 | 8 | pub const dest_file = "src/composition_exclusions.zig"; 9 | 10 | pub const dest_header = 11 | \\pub const data = [_]u21{ 12 | \\ 13 | ; 14 | 15 | pub const dest_footer = 16 | \\}; 17 | \\ 18 | ; 19 | 20 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 21 | _ = alloc; 22 | var it = std.mem.splitScalar(u8, line, ' '); 23 | try writer.print(" 0x{s},\n", .{it.next().?}); 24 | } 25 | }); 26 | -------------------------------------------------------------------------------- /scripts/VerticalOrientation.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "VerticalOrientation"; 6 | 7 | pub const dest_file = "src/vertical_orientation.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const VerticalOrientation = struct { 13 | \\ from: u21, 14 | \\ to: u21, 15 | \\ orientation: ucd.VerticalOrientation, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]VerticalOrientation{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub usingnamespace common.RangeEnum("orientation"); 28 | }); 29 | -------------------------------------------------------------------------------- /scripts/BidiMirroring.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "BidiMirroring"; 6 | 7 | pub const dest_file = "src/bidi_mirroring.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Mirroring = struct { 11 | \\ codepoint: u21, 12 | \\ mirror: u21, 13 | \\}; 14 | \\ 15 | \\pub const data = [_]Mirroring{ 16 | \\ 17 | ; 18 | 19 | pub const dest_footer = 20 | \\}; 21 | \\ 22 | ; 23 | 24 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 25 | _ = alloc; 26 | var it = std.mem.tokenizeAny(u8, line, "; #"); 27 | const c = it.next().?; 28 | const m = it.next().?; 29 | 30 | try writer.print(" .{{ .codepoint = 0x{s}, .mirror = 0x{s} }},\n", .{ c, m }); 31 | } 32 | }); 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # zig-unicode-ucd 2 | 3 | ![loc](https://sloc.xyz/github/nektro/zig-unicode-ucd) 4 | [![license](https://img.shields.io/github/license/nektro/zig-unicode-ucd.svg)](https://github.com/nektro/zig-unicode-ucd/blob/master/LICENSE) 5 | [![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro) 6 | [![Zig](https://img.shields.io/badge/Zig-0.14-f7a41d)](https://ziglang.org/) 7 | [![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod) 8 | 9 | Zig bindings for the Unicode Character Database 10 | 11 | Last updated as of Unicode 17.0.0 12 | 13 | http://www.unicode.org/reports/tr44/ 14 | 15 | https://www.unicode.org/versions/latest/ 16 | 17 | ## Development 18 | 19 | ``` 20 | zig build run -Dstep=generate 21 | zig build run -Dstep=run 22 | ``` 23 | 24 | ## License 25 | 26 | Code here is MIT 27 | 28 | Source data files are https://www.unicode.org/license.html 29 | -------------------------------------------------------------------------------- /scripts/emoji.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "emoji/emoji-data"; 6 | 7 | pub const dest_file = "src/emoji.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Emoji = struct { 11 | \\ from: u21, 12 | \\ to: u21, 13 | \\ category: Category, 14 | \\ 15 | \\ pub const Category = enum { 16 | \\ Emoji, 17 | \\ Emoji_Presentation, 18 | \\ Emoji_Modifier, 19 | \\ Emoji_Modifier_Base, 20 | \\ Emoji_Component, 21 | \\ Extended_Pictographic, 22 | \\ }; 23 | \\}; 24 | \\ 25 | \\pub const data = [_]Emoji{ 26 | \\ 27 | ; 28 | 29 | pub const dest_footer = 30 | \\}; 31 | \\ 32 | ; 33 | 34 | pub usingnamespace common.RangeEnum("category"); 35 | }); 36 | -------------------------------------------------------------------------------- /scripts/Jamo.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "Jamo"; 6 | 7 | pub const dest_file = "src/jamo.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Jamo = struct { 11 | \\ code: u21, 12 | \\ short_name: []const u8, 13 | \\}; 14 | \\ 15 | \\pub const data = [_]Jamo{ 16 | \\ 17 | ; 18 | 19 | pub const dest_footer = 20 | \\}; 21 | \\ 22 | ; 23 | 24 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 25 | _ = alloc; 26 | var it = std.mem.tokenizeAny(u8, line, "; "); 27 | 28 | const first = it.next().?; 29 | const next = it.next().?; 30 | const actual = if (std.mem.eql(u8, next, "#")) "" else next; 31 | 32 | try writer.print(" .{{ .code = 0x{s}, .short_name = \"{}\" }},\n", .{ first, std.zig.fmtEscapes(actual) }); 33 | } 34 | }); 35 | -------------------------------------------------------------------------------- /scripts/Blocks.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "Blocks"; 6 | 7 | pub const dest_file = "src/blocks.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Block = struct { 11 | \\ from: u21, 12 | \\ to: u21, 13 | \\ name: []const u8, 14 | \\}; 15 | \\ 16 | \\pub const data = [_]Block{ 17 | \\ 18 | ; 19 | 20 | pub const dest_footer = 21 | \\}; 22 | \\ 23 | ; 24 | 25 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 26 | _ = alloc; 27 | 28 | var it1 = std.mem.splitSequence(u8, line, "; "); 29 | var it2 = std.mem.splitSequence(u8, it1.next().?, ".."); 30 | const from = it2.next().?; 31 | const to = it2.next().?; 32 | const name = it1.next().?; 33 | 34 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s}, .name = \"{s}\" }},\n", .{ from, to, name }); 35 | } 36 | }); 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Meghan Denny 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /scripts/NamedSequences.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "NamedSequences"; 6 | 7 | pub const dest_file = "src/named_sequences.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const NamedSequence = struct { 11 | \\ name: []const u8, 12 | \\ sequence: []const u21, 13 | \\}; 14 | \\ 15 | \\pub const data = [_]NamedSequence{ 16 | \\ 17 | ; 18 | 19 | pub const dest_footer = 20 | \\}; 21 | \\ 22 | ; 23 | 24 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 25 | _ = alloc; 26 | var it = std.mem.splitScalar(u8, line, ';'); 27 | 28 | try writer.print(" .{{ .name = \"{}\", .sequence = &[_]u21{{", .{std.zig.fmtEscapes(it.next().?)}); 29 | 30 | var jt = std.mem.tokenizeScalar(u8, it.next().?, ' '); 31 | while (jt.next()) |jtem| { 32 | try writer.print(" 0x{s},", .{jtem}); 33 | } 34 | try writer.writeAll(" } },\n"); 35 | } 36 | }); 37 | -------------------------------------------------------------------------------- /scripts/NamedSequencesProv.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "NamedSequencesProv"; 6 | 7 | pub const dest_file = "src/named_sequences_prov.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const NamedSequence = struct { 11 | \\ name: []const u8, 12 | \\ sequence: []const u21, 13 | \\}; 14 | \\ 15 | \\pub const data = [_]NamedSequence{ 16 | \\ 17 | ; 18 | 19 | pub const dest_footer = 20 | \\}; 21 | \\ 22 | ; 23 | 24 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 25 | _ = alloc; 26 | var it = std.mem.splitScalar(u8, line, ';'); 27 | 28 | try writer.print(" .{{ .name = \"{}\", .sequence = &[_]u21{{", .{std.zig.fmtEscapes(it.next().?)}); 29 | 30 | var jt = std.mem.tokenizeScalar(u8, it.next().?, ' '); 31 | while (jt.next()) |jtem| { 32 | try writer.print(" 0x{s},", .{jtem}); 33 | } 34 | try writer.writeAll(" } },\n"); 35 | } 36 | }); 37 | -------------------------------------------------------------------------------- /test.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const ucd = @import("unicode-ucd"); 3 | 4 | test { 5 | _ = &ucd.arabic_shaping.data; 6 | _ = &ucd.bidi_brackets.data; 7 | _ = &ucd.bidi_mirroring.data; 8 | _ = &ucd.blocks.data; 9 | _ = &ucd.cjk_radicals.data; 10 | _ = &ucd.case_folding.data; 11 | _ = &ucd.composition_exclusions.data; 12 | _ = &ucd.derived_age.data; 13 | _ = &ucd.derived_core_properties.data; 14 | _ = &ucd.east_asian_width.data; 15 | _ = &ucd.emoji_sources.data; 16 | _ = &ucd.equivalent_unified_ideograph.data; 17 | _ = &ucd.hangul_syllable_type.data; 18 | _ = &ucd.indic_positional_category.data; 19 | _ = &ucd.indic_syllabic_category.data; 20 | _ = &ucd.jamo.data; 21 | _ = &ucd.line_break.data; 22 | _ = &ucd.name_aliases.data; 23 | _ = &ucd.named_sequences.data; 24 | _ = &ucd.named_sequences_prov.data; 25 | _ = &ucd.prop_list.data; 26 | _ = &ucd.scripts.data; 27 | _ = &ucd.vertical_orientation.data; 28 | _ = &ucd.emoji.data; 29 | _ = &ucd.script_extensions.data; 30 | _ = &ucd.property_aliases.data; 31 | _ = &ucd.property_value_aliases.data; 32 | _ = &ucd.unicode_data.data; 33 | _ = &ucd.special_casing.data; 34 | } 35 | -------------------------------------------------------------------------------- /scripts/PropertyAliases.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "PropertyAliases"; 6 | 7 | pub const dest_file = "src/property_aliases.zig"; 8 | 9 | pub const dest_header = 10 | \\const std = @import("std"); 11 | \\ 12 | \\pub const data = [_][2][]const u8{ 13 | \\ 14 | ; 15 | 16 | pub const dest_footer = 17 | \\}; 18 | ; 19 | 20 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 21 | _ = alloc; 22 | const end = std.mem.indexOfScalar(u8, line, '#') orelse line.len; 23 | var it = std.mem.tokenizeAny(u8, line[0..end], "; "); 24 | 25 | const short = it.next().?; 26 | const long = it.next().?; 27 | try writer.print(" .{{ \"{}\", \"{}\" }},\n", .{ 28 | std.zig.fmtEscapes(short), 29 | std.zig.fmtEscapes(long), 30 | }); 31 | while (it.next()) |more| { 32 | try writer.print(" .{{ \"{}\", \"{}\" }},\n", .{ 33 | std.zig.fmtEscapes(more), 34 | std.zig.fmtEscapes(long), 35 | }); 36 | } 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /src/main.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | const ucd = @import("unicode-ucd"); 4 | 5 | pub fn main() !void { 6 | std.log.info("All your codebase are belong to us.", .{}); 7 | 8 | const data = .{ 9 | ucd.arabic_shaping, 10 | ucd.bidi_brackets, 11 | ucd.bidi_mirroring, 12 | ucd.blocks, 13 | ucd.cjk_radicals, 14 | ucd.case_folding, 15 | ucd.composition_exclusions, 16 | ucd.derived_age, 17 | ucd.derived_core_properties, 18 | ucd.east_asian_width, 19 | ucd.emoji_sources, 20 | ucd.equivalent_unified_ideograph, 21 | ucd.hangul_syllable_type, 22 | ucd.indic_positional_category, 23 | ucd.indic_syllabic_category, 24 | ucd.jamo, 25 | ucd.line_break, 26 | ucd.name_aliases, 27 | ucd.named_sequences, 28 | ucd.named_sequences_prov, 29 | ucd.prop_list, 30 | ucd.scripts, 31 | ucd.vertical_orientation, 32 | ucd.emoji, 33 | ucd.script_extensions, 34 | ucd.property_aliases, 35 | ucd.property_value_aliases, 36 | ucd.unicode_data, 37 | ucd.special_casing, 38 | }; 39 | 40 | inline for (data) |b| { 41 | _ = b.data; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /scripts/BidiBrackets.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "BidiBrackets"; 6 | 7 | pub const dest_file = "src/bidi_brackets.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const BracketPairing = struct { 11 | \\ codepoint: u21, 12 | \\ pair: u21, 13 | \\ type: Type, 14 | \\ 15 | \\ pub const Type = enum { 16 | \\ o, 17 | \\ c, 18 | \\ n, 19 | \\ }; 20 | \\}; 21 | \\ 22 | \\pub const data = [_]BracketPairing{ 23 | \\ 24 | ; 25 | 26 | pub const dest_footer = 27 | \\}; 28 | \\ 29 | ; 30 | 31 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 32 | _ = alloc; 33 | 34 | var it = std.mem.splitScalar(u8, line, ';'); 35 | const a = std.mem.trim(u8, it.next().?, " "); 36 | const b = std.mem.trim(u8, it.next().?, " "); 37 | const c = std.mem.trim(u8, it.next().?, " "); 38 | 39 | try writer.print(" .{{ .codepoint = 0x{s}, .pair = 0x{s}, .type = .{s} }},\n", .{ a, b, c[0..1] }); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /scripts/EquivalentUnifiedIdeograph.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "EquivalentUnifiedIdeograph"; 6 | 7 | pub const dest_file = "src/equivalent_unified_ideograph.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const data = [_][2]u21{ 11 | \\ 12 | ; 13 | 14 | pub const dest_footer = 15 | \\}; 16 | \\ 17 | ; 18 | 19 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 20 | _ = alloc; 21 | var it = std.mem.tokenizeAny(u8, line, "; "); 22 | 23 | const first = it.next().?; 24 | const next = it.next().?; 25 | 26 | if (std.mem.indexOf(u8, first, "..")) |index| { 27 | const start = try std.fmt.parseInt(u21, first[0..index], 16); 28 | const end = try std.fmt.parseInt(u21, first[index + 2 ..], 16); 29 | var i = start; 30 | while (i <= end) : (i += 1) { 31 | try writer.print(" .{{ 0x{X}, 0x{s} }},\n", .{ i, next }); 32 | } 33 | } else { 34 | try writer.print(" .{{ 0x{s}, 0x{s} }},\n", .{ first, next }); 35 | } 36 | } 37 | }); 38 | -------------------------------------------------------------------------------- /scripts/NameAliases.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "NameAliases"; 6 | 7 | pub const dest_file = "src/name_aliases.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const NameAlias = struct { 11 | \\ code: u21, 12 | \\ alias: []const u8, 13 | \\ type: Type, 14 | \\ 15 | \\ pub const Type = enum { 16 | \\ correction, 17 | \\ control, 18 | \\ alternate, 19 | \\ figment, 20 | \\ abbreviation, 21 | \\ }; 22 | \\}; 23 | \\ 24 | \\pub const data = [_]NameAlias{ 25 | \\ 26 | ; 27 | 28 | pub const dest_footer = 29 | \\}; 30 | \\ 31 | ; 32 | 33 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 34 | _ = alloc; 35 | var it = std.mem.splitScalar(u8, line, ';'); 36 | 37 | try writer.print(" .{{ .code = 0x{s}, .alias = \"{}\", .type = .{s} }},\n", .{ 38 | it.next().?, 39 | std.zig.fmtEscapes(it.next().?), 40 | it.next().?, 41 | }); 42 | } 43 | }); 44 | -------------------------------------------------------------------------------- /scripts/EastAsianWidth.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "EastAsianWidth"; 6 | 7 | pub const dest_file = "src/east_asian_width.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const EastAsianWidth = struct { 13 | \\ from: u21, 14 | \\ to: u21, 15 | \\ prop: ucd.EastAsianWidth, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]EastAsianWidth{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 28 | _ = alloc; 29 | var it = std.mem.tokenizeAny(u8, line, "; "); 30 | 31 | { 32 | const range = it.next().?; 33 | if (std.mem.indexOf(u8, range, "..")) |index| { 34 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range[0..index], range[index + 2 ..] }); 35 | } else { 36 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range, range }); 37 | } 38 | } 39 | { 40 | const prop = it.next().?; 41 | try writer.print(" .prop = .{s} }},\n", .{prop}); 42 | } 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /scripts/HangulSyllableType.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "HangulSyllableType"; 6 | 7 | pub const dest_file = "src/hangul_syllable_type.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const HangulSyllableType = struct { 13 | \\ from: u21, 14 | \\ to: u21, 15 | \\ prop: ucd.HangulSyllableType, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]HangulSyllableType{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 28 | _ = alloc; 29 | var it = std.mem.tokenizeAny(u8, line, "; "); 30 | 31 | { 32 | const range = it.next().?; 33 | if (std.mem.indexOf(u8, range, "..")) |index| { 34 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range[0..index], range[index + 2 ..] }); 35 | } else { 36 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range, range }); 37 | } 38 | } 39 | { 40 | const prop = it.next().?; 41 | try writer.print(" .prop = .{s} }},\n", .{prop}); 42 | } 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /scripts/CJKRadicals.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "CJKRadicals"; 6 | 7 | pub const dest_file = "src/cjk_radicals.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const CJKRadical = struct { 11 | \\ number: u8, 12 | \\ simplified: bool, 13 | \\ character: ?u21, 14 | \\ ideograph: u21, 15 | \\}; 16 | \\ 17 | \\pub const data = [_]CJKRadical{ 18 | \\ 19 | ; 20 | 21 | pub const dest_footer = 22 | \\}; 23 | \\ 24 | ; 25 | 26 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 27 | _ = alloc; 28 | var it = std.mem.splitSequence(u8, line, "; "); 29 | var n = it.next().?; 30 | const s = std.mem.endsWith(u8, n, "'"); 31 | const c = it.next().?; 32 | const i = it.next().?; 33 | n = std.mem.trimRight(u8, n, "'"); 34 | 35 | try writer.writeAll(" .{"); 36 | try writer.print(" .number = {s},", .{n}); 37 | try writer.print(" .simplified = {},", .{s}); 38 | try writer.writeAll(" .character ="); 39 | if (common.nullify(c)) |res| try common.printCodepoint(writer, res) else try writer.writeAll(" null,"); 40 | try writer.print(" .ideograph = 0x{s}", .{i}); 41 | try writer.writeAll(" },\n"); 42 | } 43 | }); 44 | -------------------------------------------------------------------------------- /scripts/EmojiSources.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "EmojiSources"; 6 | 7 | pub const dest_file = "src/emoji_sources.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const ShiftJISMap = struct { 11 | \\ code: u21, 12 | \\ docomo: u21, 13 | \\ kddi: u21, 14 | \\ softbank: u21, 15 | \\}; 16 | \\ 17 | \\pub const data = [_]ShiftJISMap{ 18 | \\ 19 | ; 20 | 21 | pub const dest_footer = 22 | \\}; 23 | \\ 24 | ; 25 | 26 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 27 | _ = alloc; 28 | if (std.mem.count(u8, line, " ") > 0) return; 29 | var it = std.mem.splitScalar(u8, line, ';'); 30 | const code = it.next().?; 31 | // FIXME remove @as and temp vars after switch off stage1 32 | const docomo = common.nullify(it.next().?) orelse @as([]const u8, "0"); 33 | const kddi = common.nullify(it.next().?) orelse @as([]const u8, "0"); 34 | const softbank = common.nullify(it.next().?) orelse @as([]const u8, "0"); 35 | 36 | try writer.print(" .{{ .code = 0x{s}, .docomo = 0x{s}, .kddi = 0x{s}, .softbank = 0x{s} }},\n", .{ 37 | code, 38 | docomo, 39 | kddi, 40 | softbank, 41 | }); 42 | } 43 | }); 44 | -------------------------------------------------------------------------------- /scripts/DerivedAge.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "DerivedAge"; 6 | 7 | pub const dest_file = "src/derived_age.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Age = struct { 11 | \\ from: u21, 12 | \\ to: u21, 13 | \\ since: [2]u8, 14 | \\}; 15 | \\ 16 | \\pub const data = [_]Age{ 17 | \\ 18 | ; 19 | 20 | pub const dest_footer = 21 | \\}; 22 | \\ 23 | ; 24 | 25 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 26 | _ = alloc; 27 | var it = std.mem.tokenizeAny(u8, line, "; "); 28 | 29 | { 30 | const range = it.next().?; 31 | if (std.mem.indexOf(u8, range, "..")) |index| { 32 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range[0..index], range[index + 2 ..] }); 33 | } else { 34 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range, range }); 35 | } 36 | } 37 | { 38 | const added = it.next().?; 39 | var jt = std.mem.splitScalar(u8, added, '.'); 40 | const major = jt.next().?; 41 | const minor = jt.next().?; 42 | try writer.print(" .since = .{{ {s},{s} }} }},\n", .{ major, minor }); 43 | } 44 | } 45 | }); 46 | -------------------------------------------------------------------------------- /scripts/IndicSyllabicCategory.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "IndicSyllabicCategory"; 6 | 7 | pub const dest_file = "src/indic_syllabic_category.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const IndicSyllabicCategory = struct { 13 | \\ code: u21, 14 | \\ category: ucd.IndicSyllabicCategory, 15 | \\}; 16 | \\ 17 | \\pub const data = [_]IndicSyllabicCategory{ 18 | \\ 19 | ; 20 | 21 | pub const dest_footer = 22 | \\}; 23 | \\ 24 | ; 25 | 26 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 27 | _ = alloc; 28 | var it = std.mem.tokenizeAny(u8, line, "; "); 29 | 30 | const first = it.next().?; 31 | const next = it.next().?; 32 | 33 | if (std.mem.indexOf(u8, first, "..")) |index| { 34 | const start = try std.fmt.parseInt(u21, first[0..index], 16); 35 | const end = try std.fmt.parseInt(u21, first[index + 2 ..], 16); 36 | var i = start; 37 | while (i <= end) : (i += 1) { 38 | try writer.print(" .{{ .code = 0x{X}, .category = .{s} }},\n", .{ i, next }); 39 | } 40 | } else { 41 | try writer.print(" .{{ .code = 0x{s}, .category = .{s} }},\n", .{ first, next }); 42 | } 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /scripts/IndicPositionalCategory.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "IndicPositionalCategory"; 6 | 7 | pub const dest_file = "src/indic_positional_category.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const IndicPositionalCategory = struct { 13 | \\ code: u21, 14 | \\ category: ucd.IndicPositionalCategory, 15 | \\}; 16 | \\ 17 | \\pub const data = [_]IndicPositionalCategory{ 18 | \\ 19 | ; 20 | 21 | pub const dest_footer = 22 | \\}; 23 | \\ 24 | ; 25 | 26 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 27 | _ = alloc; 28 | var it = std.mem.tokenizeAny(u8, line, "; "); 29 | 30 | const first = it.next().?; 31 | const next = it.next().?; 32 | 33 | if (std.mem.indexOf(u8, first, "..")) |index| { 34 | const start = try std.fmt.parseInt(u21, first[0..index], 16); 35 | const end = try std.fmt.parseInt(u21, first[index + 2 ..], 16); 36 | var i = start; 37 | while (i <= end) : (i += 1) { 38 | try writer.print(" .{{ .code = 0x{X}, .category = .{s} }},\n", .{ i, next }); 39 | } 40 | } else { 41 | try writer.print(" .{{ .code = 0x{s}, .category = .{s} }},\n", .{ first, next }); 42 | } 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /scripts/SpecialCasing.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "SpecialCasing"; 6 | 7 | pub const dest_file = "src/special_casing.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const SpecialCasing = struct { 11 | \\ code: u21, 12 | \\ lower: []const u21, 13 | \\ title: []const u21, 14 | \\ upper: []const u21, 15 | \\ condition: []const u8, 16 | \\}; 17 | \\ 18 | \\pub const data = [_]SpecialCasing{ 19 | \\ 20 | ; 21 | 22 | pub const dest_footer = 23 | \\}; 24 | \\ 25 | ; 26 | 27 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 28 | _ = alloc; 29 | const end = std.mem.indexOfScalar(u8, line, '#') orelse line.len; 30 | var it = std.mem.splitSequence(u8, line[0..end], "; "); 31 | 32 | try writer.writeAll(" .{"); 33 | try writer.writeAll(" .code ="); 34 | try common.printCodepoint(writer, it.next().?); 35 | try writer.writeAll(" .lower ="); 36 | try common.printSeq(writer, it.next().?); 37 | try writer.writeAll(" .title ="); 38 | try common.printSeq(writer, it.next().?); 39 | try writer.writeAll(" .upper ="); 40 | try common.printSeq(writer, it.next().?); 41 | try writer.print(" .condition = \"{}\"", .{std.zig.fmtEscapes(it.next().?)}); 42 | try writer.writeAll(" },\n"); 43 | } 44 | }); 45 | -------------------------------------------------------------------------------- /generate.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | const files = [_]type{ 4 | @import("./scripts/ArabicShaping.zig"), 5 | @import("./scripts/BidiBrackets.zig"), 6 | @import("./scripts/BidiMirroring.zig"), 7 | @import("./scripts/Blocks.zig"), 8 | @import("./scripts/CaseFolding.zig"), 9 | @import("./scripts/CJKRadicals.zig"), 10 | @import("./scripts/CompositionExclusions.zig"), 11 | @import("./scripts/DerivedAge.zig"), 12 | @import("./scripts/DerivedCoreProperties.zig"), 13 | @import("./scripts/EastAsianWidth.zig"), 14 | @import("./scripts/EmojiSources.zig"), 15 | @import("./scripts/EquivalentUnifiedIdeograph.zig"), 16 | @import("./scripts/HangulSyllableType.zig"), 17 | @import("./scripts/IndicPositionalCategory.zig"), 18 | @import("./scripts/IndicSyllabicCategory.zig"), 19 | @import("./scripts/Jamo.zig"), 20 | @import("./scripts/LineBreak.zig"), 21 | @import("./scripts/NameAliases.zig"), 22 | @import("./scripts/NamedSequences.zig"), 23 | @import("./scripts/NamedSequencesProv.zig"), 24 | @import("./scripts/PropertyAliases.zig"), 25 | @import("./scripts/PropertyValueAliases.zig"), 26 | @import("./scripts/PropList.zig"), 27 | @import("./scripts/ScriptExtensions.zig"), 28 | @import("./scripts/Scripts.zig"), 29 | @import("./scripts/SpecialCasing.zig"), 30 | @import("./scripts/UnicodeData.zig"), 31 | @import("./scripts/VerticalOrientation.zig"), 32 | @import("./scripts/emoji.zig"), 33 | }; 34 | 35 | pub fn main() !void { 36 | inline for (files) |f| { 37 | try f.do(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/composition_exclusions.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/CompositionExclusions.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const data = [_]u21{ 9 | 0x0958, 10 | 0x0959, 11 | 0x095A, 12 | 0x095B, 13 | 0x095C, 14 | 0x095D, 15 | 0x095E, 16 | 0x095F, 17 | 0x09DC, 18 | 0x09DD, 19 | 0x09DF, 20 | 0x0A33, 21 | 0x0A36, 22 | 0x0A59, 23 | 0x0A5A, 24 | 0x0A5B, 25 | 0x0A5E, 26 | 0x0B5C, 27 | 0x0B5D, 28 | 0x0F43, 29 | 0x0F4D, 30 | 0x0F52, 31 | 0x0F57, 32 | 0x0F5C, 33 | 0x0F69, 34 | 0x0F76, 35 | 0x0F78, 36 | 0x0F93, 37 | 0x0F9D, 38 | 0x0FA2, 39 | 0x0FA7, 40 | 0x0FAC, 41 | 0x0FB9, 42 | 0xFB1D, 43 | 0xFB1F, 44 | 0xFB2A, 45 | 0xFB2B, 46 | 0xFB2C, 47 | 0xFB2D, 48 | 0xFB2E, 49 | 0xFB2F, 50 | 0xFB30, 51 | 0xFB31, 52 | 0xFB32, 53 | 0xFB33, 54 | 0xFB34, 55 | 0xFB35, 56 | 0xFB36, 57 | 0xFB38, 58 | 0xFB39, 59 | 0xFB3A, 60 | 0xFB3B, 61 | 0xFB3C, 62 | 0xFB3E, 63 | 0xFB40, 64 | 0xFB41, 65 | 0xFB43, 66 | 0xFB44, 67 | 0xFB46, 68 | 0xFB47, 69 | 0xFB48, 70 | 0xFB49, 71 | 0xFB4A, 72 | 0xFB4B, 73 | 0xFB4C, 74 | 0xFB4D, 75 | 0xFB4E, 76 | 0x2ADC, 77 | 0x1D15E, 78 | 0x1D15F, 79 | 0x1D160, 80 | 0x1D161, 81 | 0x1D162, 82 | 0x1D163, 83 | 0x1D164, 84 | 0x1D1BB, 85 | 0x1D1BC, 86 | 0x1D1BD, 87 | 0x1D1BE, 88 | 0x1D1BF, 89 | 0x1D1C0, 90 | }; 91 | -------------------------------------------------------------------------------- /scripts/PropertyValueAliases.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | const extras = @import("extras"); 4 | 5 | pub usingnamespace common.Main(struct { 6 | pub const source_file = "PropertyValueAliases"; 7 | 8 | pub const dest_file = "src/property_value_aliases.zig"; 9 | 10 | pub const dest_header = 11 | \\const std = @import("std"); 12 | \\ 13 | \\pub const data = [_][3][:0]const u8{ 14 | \\ 15 | ; 16 | 17 | pub const dest_footer = 18 | \\}; 19 | ; 20 | 21 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 22 | _ = alloc; 23 | const end = std.mem.indexOfScalar(u8, line, '#') orelse line.len; 24 | var it = std.mem.tokenizeAny(u8, line[0..end], "; "); 25 | 26 | var vals = [_][]const u8{ 27 | it.next().?, 28 | it.next().?, 29 | it.next().?, 30 | }; 31 | flip(std.fmt.parseInt(u32, vals[1], 10)) catch { 32 | vals[1] = vals[2]; 33 | vals[2] = it.next().?; 34 | }; 35 | 36 | try writer.print(" .{{ \"{}\", \"{}\", \"{}\" }},\n", .{ 37 | std.zig.fmtEscapes(vals[0]), 38 | std.zig.fmtEscapes(vals[1]), 39 | std.zig.fmtEscapes(vals[2]), 40 | }); 41 | 42 | while (it.next()) |more| { 43 | try writer.print(" .{{ \"{}\", \"{}\", \"{}\" }},\n", .{ 44 | std.zig.fmtEscapes(vals[0]), 45 | std.zig.fmtEscapes(more), 46 | std.zig.fmtEscapes(vals[2]), 47 | }); 48 | } 49 | } 50 | }); 51 | 52 | fn flip(foo: anytype) !void { 53 | _ = foo catch return; 54 | return error.ExpectedError; 55 | } 56 | -------------------------------------------------------------------------------- /scripts/CaseFolding.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "CaseFolding"; 6 | 7 | pub const dest_file = "src/case_folding.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const CaseFolding = struct { 11 | \\ code: u21, 12 | \\ status: Status, 13 | \\ mapping: Mapping, 14 | \\ 15 | \\ pub const Status = enum { 16 | \\ C, 17 | \\ F, 18 | \\ S, 19 | \\ T, 20 | \\ }; 21 | \\ 22 | \\ pub const Mapping = union(Status) { 23 | \\ C: u21, 24 | \\ F: []const u21, 25 | \\ S: u21, 26 | \\ T: u21, 27 | \\ }; 28 | \\}; 29 | \\ 30 | \\pub const data = [_]CaseFolding{ 31 | \\ 32 | ; 33 | 34 | pub const dest_footer = 35 | \\}; 36 | \\ 37 | ; 38 | 39 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 40 | _ = alloc; 41 | var it = std.mem.splitSequence(u8, line, "; "); 42 | const code = it.next().?; 43 | const status = it.next().?; 44 | try writer.print(" .{{ .code = 0x{s}, .status = .{s}, .mapping = .{{ .{s} =", .{ code, status, status }); 45 | 46 | switch (std.meta.stringToEnum(enum { C, F, S, T }, status) orelse @panic(status)) { 47 | .C, .S, .T => { 48 | const mapping = it.next().?; 49 | try writer.print(" 0x{s}", .{mapping}); 50 | }, 51 | .F => { 52 | const mapping = it.next().?; 53 | var jt = std.mem.splitScalar(u8, mapping, ' '); 54 | try writer.writeAll(" &[_]u21{"); 55 | while (jt.next()) |jtem| { 56 | try writer.print("0x{s},", .{jtem}); 57 | } 58 | try writer.writeAll("}"); 59 | }, 60 | } 61 | try writer.writeAll(" } },\n"); 62 | } 63 | }); 64 | -------------------------------------------------------------------------------- /scripts/ScriptExtensions.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "ScriptExtensions"; 6 | 7 | pub const dest_file = "src/script_extensions.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const ScriptExtension = struct { 13 | \\ code: u21, 14 | \\ scripts: []const ucd.Script, 15 | \\}; 16 | \\ 17 | \\pub const data = [_]ScriptExtension{ 18 | \\ 19 | ; 20 | 21 | pub const dest_footer = 22 | \\}; 23 | \\ 24 | ; 25 | 26 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 27 | _ = alloc; 28 | var it = std.mem.tokenizeAny(u8, line, "; "); 29 | 30 | const first = it.next().?; 31 | 32 | if (std.mem.indexOf(u8, first, "..")) |index| { 33 | const start = try std.fmt.parseInt(u21, first[0..index], 16); 34 | const end = try std.fmt.parseInt(u21, first[index + 2 ..], 16); 35 | var i = start; 36 | while (i <= end) : (i += 1) { 37 | try writer.print(" .{{ .code = 0x{X}, .scripts = {} }},\n", .{ i, fmtScripts(untilComment(it.rest())) }); 38 | } 39 | } else { 40 | try writer.print(" .{{ .code = 0x{s}, .scripts = {} }},\n", .{ first, fmtScripts(untilComment(it.rest())) }); 41 | } 42 | } 43 | }); 44 | 45 | fn untilComment(input: []const u8) []const u8 { 46 | return input[0..std.mem.indexOfScalar(u8, input, '#').?]; 47 | } 48 | 49 | fn fmtScripts(bytes: []const u8) std.fmt.Formatter(formatScripts) { 50 | return .{ .data = bytes }; 51 | } 52 | 53 | fn formatScripts(bytes: []const u8, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void { 54 | _ = fmt; 55 | _ = options; 56 | try writer.writeAll("&.{"); 57 | var it = std.mem.splitScalar(u8, bytes, ' '); 58 | while (it.next()) |item| { 59 | if (item.len == 0) continue; 60 | try writer.print(" .{s},", .{item}); 61 | } 62 | try writer.writeAll(" }"); 63 | } 64 | -------------------------------------------------------------------------------- /scripts/DerivedCoreProperties.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "DerivedCoreProperties"; 6 | 7 | pub const dest_file = "src/derived_core_properties.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const CoreProperty = struct { 11 | \\ from: u21, 12 | \\ to: u21, 13 | \\ property: Property, 14 | \\ 15 | \\ pub const Property = enum { 16 | \\ Math, 17 | \\ Alphabetic, 18 | \\ Lowercase, 19 | \\ Uppercase, 20 | \\ Cased, 21 | \\ Case_Ignorable, 22 | \\ Changes_When_Lowercased, 23 | \\ Changes_When_Uppercased, 24 | \\ Changes_When_Titlecased, 25 | \\ Changes_When_Casefolded, 26 | \\ Changes_When_Casemapped, 27 | \\ ID_Start, 28 | \\ ID_Continue, 29 | \\ XID_Start, 30 | \\ XID_Continue, 31 | \\ Default_Ignorable_Code_Point, 32 | \\ Grapheme_Extend, 33 | \\ Grapheme_Base, 34 | \\ Grapheme_Link, 35 | \\ InCB, 36 | \\ }; 37 | \\}; 38 | \\ 39 | \\pub const data = [_]CoreProperty{ 40 | \\ 41 | ; 42 | 43 | pub const dest_footer = 44 | \\}; 45 | \\ 46 | ; 47 | 48 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 49 | _ = alloc; 50 | var it = std.mem.tokenizeAny(u8, line, "; "); 51 | 52 | { 53 | const range = it.next().?; 54 | if (std.mem.indexOf(u8, range, "..")) |index| { 55 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range[0..index], range[index + 2 ..] }); 56 | } else { 57 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s},", .{ range, range }); 58 | } 59 | } 60 | { 61 | const prop = it.next().?; 62 | try writer.print(" .property = .{s} }},\n", .{prop}); 63 | } 64 | } 65 | }); 66 | -------------------------------------------------------------------------------- /scripts/PropList.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "PropList"; 6 | 7 | pub const dest_file = "src/prop_list.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const PropList = struct { 11 | \\ from: u21, 12 | \\ to: u21, 13 | \\ property: Property, 14 | \\ 15 | \\ pub const Property = enum { 16 | \\ White_Space, 17 | \\ Bidi_Control, 18 | \\ Join_Control, 19 | \\ Dash, 20 | \\ Hyphen, 21 | \\ Quotation_Mark, 22 | \\ Terminal_Punctuation, 23 | \\ Other_Math, 24 | \\ Hex_Digit, 25 | \\ ASCII_Hex_Digit, 26 | \\ Other_Alphabetic, 27 | \\ Ideographic, 28 | \\ Diacritic, 29 | \\ Extender, 30 | \\ Other_Lowercase, 31 | \\ Other_Uppercase, 32 | \\ Noncharacter_Code_Point, 33 | \\ Other_Grapheme_Extend, 34 | \\ IDS_Binary_Operator, 35 | \\ IDS_Trinary_Operator, 36 | \\ Radical, 37 | \\ Unified_Ideograph, 38 | \\ Other_Default_Ignorable_Code_Point, 39 | \\ Deprecated, 40 | \\ Soft_Dotted, 41 | \\ Logical_Order_Exception, 42 | \\ Other_ID_Start, 43 | \\ Other_ID_Continue, 44 | \\ Sentence_Terminal, 45 | \\ Variation_Selector, 46 | \\ Pattern_White_Space, 47 | \\ Pattern_Syntax, 48 | \\ Prepended_Concatenation_Mark, 49 | \\ Regional_Indicator, 50 | \\ IDS_Unary_Operator, 51 | \\ ID_Compat_Math_Continue, 52 | \\ ID_Compat_Math_Start, 53 | \\ Modifier_Combining_Mark, 54 | \\ }; 55 | \\}; 56 | \\ 57 | \\pub const data = [_]PropList{ 58 | \\ 59 | ; 60 | 61 | pub const dest_footer = 62 | \\}; 63 | \\ 64 | ; 65 | 66 | pub usingnamespace common.RangeEnum("property"); 67 | }); 68 | -------------------------------------------------------------------------------- /scripts/UnicodeData.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "UnicodeData"; 6 | 7 | pub const dest_file = "src/unicode_data.zig"; 8 | 9 | pub const dest_header = 10 | \\const ucd = @import("./lib.zig"); 11 | \\ 12 | \\pub const Codepoint = struct { 13 | \\ u21, // U+ code 14 | \\ []const u8, // name 15 | \\ ucd.GeneralCategory, 16 | \\ u8, // Canonical_Combining_Class 17 | \\ ucd.BidiClass, 18 | \\ bool, // decomposes, see UCA 19 | \\ []const u8, // Numeric_Type=Decimal value 20 | \\ []const u8, // Numeric_Type=Digit value 21 | \\ []const u8, // Numeric_Type=Numeric value 22 | \\ bool, // Bidi_Mirrored? 23 | \\ ?u21, // Simple_Uppercase_Mapping 24 | \\ ?u21, // Simple_Lowercase_Mapping 25 | \\ ?u21, // Simple_Titlecase_Mapping 26 | \\}; 27 | \\ 28 | \\pub const data = [_]Codepoint{ 29 | \\ 30 | ; 31 | 32 | pub const dest_footer = 33 | \\}; 34 | \\ 35 | ; 36 | 37 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 38 | _ = alloc; 39 | var it = std.mem.splitScalar(u8, line, ';'); 40 | 41 | try writer.writeAll(" .{"); 42 | try writer.print(" 0x{s},", .{it.next().?}); 43 | try writer.print(" \"{}\",", .{std.zig.fmtEscapes(it.next().?)}); 44 | try writer.print(" .{s},", .{it.next().?}); 45 | try writer.print(" {s},", .{it.next().?}); 46 | try writer.print(" .{s},", .{it.next().?}); 47 | try writer.print(" {},", .{std.mem.startsWith(u8, it.next().?, "<")}); 48 | try writer.print(" \"{}\",", .{std.zig.fmtEscapes(it.next().?)}); 49 | try writer.print(" \"{}\",", .{std.zig.fmtEscapes(it.next().?)}); 50 | try writer.print(" \"{}\",", .{std.zig.fmtEscapes(it.next().?)}); 51 | try writer.print(" {},", .{std.mem.eql(u8, it.next().?, "Y")}); 52 | _ = it.next().?; // [skip] Unicode_1_Name (Obsolete as of 6.2.0) 53 | _ = it.next().?; // [skip] ISO_Comment (Obsolete as of 5.2.0; Deprecated and Stabilized as of 6.0.0) 54 | if (common.nullify(it.next())) |res| try writer.print(" 0x{s},", .{res}) else try writer.writeAll(" null,"); 55 | if (common.nullify(it.next())) |res| try writer.print(" 0x{s},", .{res}) else try writer.writeAll(" null,"); 56 | if (common.nullify(it.next())) |res| try writer.print(" 0x{s},", .{res}) else try writer.writeAll(" null,"); 57 | 58 | try writer.writeAll(" },\n"); 59 | } 60 | }); 61 | -------------------------------------------------------------------------------- /src/jamo.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/Jamo.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const Jamo = struct { 9 | code: u21, 10 | short_name: []const u8, 11 | }; 12 | 13 | pub const data = [_]Jamo{ 14 | .{ .code = 0x1100, .short_name = "G" }, 15 | .{ .code = 0x1101, .short_name = "GG" }, 16 | .{ .code = 0x1102, .short_name = "N" }, 17 | .{ .code = 0x1103, .short_name = "D" }, 18 | .{ .code = 0x1104, .short_name = "DD" }, 19 | .{ .code = 0x1105, .short_name = "R" }, 20 | .{ .code = 0x1106, .short_name = "M" }, 21 | .{ .code = 0x1107, .short_name = "B" }, 22 | .{ .code = 0x1108, .short_name = "BB" }, 23 | .{ .code = 0x1109, .short_name = "S" }, 24 | .{ .code = 0x110A, .short_name = "SS" }, 25 | .{ .code = 0x110B, .short_name = "" }, 26 | .{ .code = 0x110C, .short_name = "J" }, 27 | .{ .code = 0x110D, .short_name = "JJ" }, 28 | .{ .code = 0x110E, .short_name = "C" }, 29 | .{ .code = 0x110F, .short_name = "K" }, 30 | .{ .code = 0x1110, .short_name = "T" }, 31 | .{ .code = 0x1111, .short_name = "P" }, 32 | .{ .code = 0x1112, .short_name = "H" }, 33 | .{ .code = 0x1161, .short_name = "A" }, 34 | .{ .code = 0x1162, .short_name = "AE" }, 35 | .{ .code = 0x1163, .short_name = "YA" }, 36 | .{ .code = 0x1164, .short_name = "YAE" }, 37 | .{ .code = 0x1165, .short_name = "EO" }, 38 | .{ .code = 0x1166, .short_name = "E" }, 39 | .{ .code = 0x1167, .short_name = "YEO" }, 40 | .{ .code = 0x1168, .short_name = "YE" }, 41 | .{ .code = 0x1169, .short_name = "O" }, 42 | .{ .code = 0x116A, .short_name = "WA" }, 43 | .{ .code = 0x116B, .short_name = "WAE" }, 44 | .{ .code = 0x116C, .short_name = "OE" }, 45 | .{ .code = 0x116D, .short_name = "YO" }, 46 | .{ .code = 0x116E, .short_name = "U" }, 47 | .{ .code = 0x116F, .short_name = "WEO" }, 48 | .{ .code = 0x1170, .short_name = "WE" }, 49 | .{ .code = 0x1171, .short_name = "WI" }, 50 | .{ .code = 0x1172, .short_name = "YU" }, 51 | .{ .code = 0x1173, .short_name = "EU" }, 52 | .{ .code = 0x1174, .short_name = "YI" }, 53 | .{ .code = 0x1175, .short_name = "I" }, 54 | .{ .code = 0x11A8, .short_name = "G" }, 55 | .{ .code = 0x11A9, .short_name = "GG" }, 56 | .{ .code = 0x11AA, .short_name = "GS" }, 57 | .{ .code = 0x11AB, .short_name = "N" }, 58 | .{ .code = 0x11AC, .short_name = "NJ" }, 59 | .{ .code = 0x11AD, .short_name = "NH" }, 60 | .{ .code = 0x11AE, .short_name = "D" }, 61 | .{ .code = 0x11AF, .short_name = "L" }, 62 | .{ .code = 0x11B0, .short_name = "LG" }, 63 | .{ .code = 0x11B1, .short_name = "LM" }, 64 | .{ .code = 0x11B2, .short_name = "LB" }, 65 | .{ .code = 0x11B3, .short_name = "LS" }, 66 | .{ .code = 0x11B4, .short_name = "LT" }, 67 | .{ .code = 0x11B5, .short_name = "LP" }, 68 | .{ .code = 0x11B6, .short_name = "LH" }, 69 | .{ .code = 0x11B7, .short_name = "M" }, 70 | .{ .code = 0x11B8, .short_name = "B" }, 71 | .{ .code = 0x11B9, .short_name = "BS" }, 72 | .{ .code = 0x11BA, .short_name = "S" }, 73 | .{ .code = 0x11BB, .short_name = "SS" }, 74 | .{ .code = 0x11BC, .short_name = "NG" }, 75 | .{ .code = 0x11BD, .short_name = "J" }, 76 | .{ .code = 0x11BE, .short_name = "C" }, 77 | .{ .code = 0x11BF, .short_name = "K" }, 78 | .{ .code = 0x11C0, .short_name = "T" }, 79 | .{ .code = 0x11C1, .short_name = "P" }, 80 | .{ .code = 0x11C2, .short_name = "H" }, 81 | }; 82 | -------------------------------------------------------------------------------- /src/lib.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | pub const arabic_shaping = @import("./arabic_shaping.zig"); 4 | pub const bidi_brackets = @import("./bidi_brackets.zig"); 5 | pub const bidi_mirroring = @import("./bidi_mirroring.zig"); 6 | pub const blocks = @import("./blocks.zig"); 7 | pub const cjk_radicals = @import("./cjk_radicals.zig"); 8 | pub const case_folding = @import("./case_folding.zig"); 9 | pub const composition_exclusions = @import("./composition_exclusions.zig"); 10 | pub const derived_age = @import("./derived_age.zig"); 11 | pub const derived_core_properties = @import("./derived_core_properties.zig"); 12 | // DerivedNormalizationProps.txt 13 | pub const east_asian_width = @import("./east_asian_width.zig"); 14 | pub const emoji_sources = @import("./emoji_sources.zig"); 15 | pub const equivalent_unified_ideograph = @import("./equivalent_unified_ideograph.zig"); 16 | pub const hangul_syllable_type = @import("./hangul_syllable_type.zig"); 17 | // Index.txt // not likely very useful for us 18 | pub const indic_positional_category = @import("./indic_positional_category.zig"); 19 | pub const indic_syllabic_category = @import("./indic_syllabic_category.zig"); 20 | pub const jamo = @import("./jamo.zig"); 21 | pub const line_break = @import("./line_break.zig"); 22 | pub const name_aliases = @import("./name_aliases.zig"); 23 | pub const named_sequences = @import("./named_sequences.zig"); 24 | pub const named_sequences_prov = @import("./named_sequences_prov.zig"); 25 | pub const prop_list = @import("./prop_list.zig"); 26 | pub const property_aliases = @import("./property_aliases.zig"); 27 | pub const property_value_aliases = @import("./property_value_aliases.zig"); 28 | pub const script_extensions = @import("./script_extensions.zig"); 29 | pub const scripts = @import("./scripts.zig"); 30 | pub const special_casing = @import("./special_casing.zig"); 31 | // StandardizedVariants.txt 32 | // USourceData.txt 33 | pub const unicode_data = @import("./unicode_data.zig"); 34 | pub const vertical_orientation = @import("./vertical_orientation.zig"); 35 | pub const emoji = @import("./emoji.zig"); 36 | 37 | /// https://www.unicode.org/reports/tr44/#General_Category_Values 38 | pub const GeneralCategory = DerivedPropertyEnum("gc"); 39 | 40 | /// https://www.unicode.org/reports/tr44/#Bidi_Class_Values 41 | pub const BidiClass = DerivedPropertyEnum("bc"); 42 | 43 | pub const Script = DerivedPropertyEnum("sc"); 44 | pub const ScriptLong = DerivedPropertyLongEnum("sc"); 45 | pub const IndicSyllabicCategory = DerivedPropertyEnum("InSC"); 46 | pub const HangulSyllableType = DerivedPropertyEnum("hst"); 47 | pub const EastAsianWidth = DerivedPropertyEnum("ea"); 48 | pub const VerticalOrientation = DerivedPropertyEnum("vo"); 49 | pub const LineBreak = DerivedPropertyEnum("lb"); 50 | pub const IndicPositionalCategory = DerivedPropertyEnum("InPC"); 51 | 52 | fn DerivedPropertyEnum(comptime prop: []const u8) type { 53 | var fields: []const std.builtin.Type.EnumField = &.{}; 54 | @setEvalBranchQuota(10_000); 55 | for (property_value_aliases.data) |item| { 56 | if (std.mem.eql(u8, item[0], prop)) { 57 | fields = fields ++ &[_]std.builtin.Type.EnumField{.{ 58 | .name = item[1], 59 | .value = fields.len, 60 | }}; 61 | } 62 | } 63 | return @Type(.{ .@"enum" = .{ 64 | .tag_type = std.math.IntFittingRange(0, fields.len - 1), 65 | .fields = fields, 66 | .decls = &.{}, 67 | .is_exhaustive = true, 68 | } }); 69 | } 70 | 71 | fn DerivedPropertyLongEnum(comptime prop: []const u8) type { 72 | var fields: []const std.builtin.Type.EnumField = &.{}; 73 | @setEvalBranchQuota(10_000); 74 | for (property_value_aliases.data) |item| { 75 | if (!std.mem.eql(u8, item[0], prop)) continue; 76 | if (fields.len > 0 and std.mem.eql(u8, fields[fields.len - 1].name, item[2])) continue; 77 | fields = fields ++ &[_]std.builtin.Type.EnumField{.{ 78 | .name = item[2], 79 | .value = fields.len, 80 | }}; 81 | } 82 | return @Type(.{ .@"enum" = .{ 83 | .tag_type = std.math.IntFittingRange(0, fields.len - 1), 84 | .fields = fields, 85 | .decls = &.{}, 86 | .is_exhaustive = true, 87 | } }); 88 | } 89 | -------------------------------------------------------------------------------- /scripts/_common.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const zfetch = @import("zfetch"); 3 | const fmtValueLiteral = @import("fmt-valueliteral").fmtValueLiteral; 4 | const ansi = @import("ansi"); 5 | 6 | pub const version = "17.0.0"; 7 | 8 | pub fn Main(comptime T: type) type { 9 | comptime std.debug.assert(@hasDecl(T, "source_file")); 10 | comptime std.debug.assert(@hasDecl(T, "dest_file")); 11 | comptime std.debug.assert(@hasDecl(T, "dest_header")); 12 | comptime std.debug.assert(@hasDecl(T, "dest_footer")); 13 | comptime std.debug.assert(@hasDecl(T, "exec")); 14 | return struct { 15 | pub fn do() !void { 16 | var gpa = std.heap.GeneralPurposeAllocator(.{}){}; 17 | const alloc = gpa.allocator(); 18 | defer _ = gpa.deinit(); 19 | 20 | const max_size = std.math.maxInt(usize); 21 | const source_url = "https://unicode.org/Public/" ++ version ++ "/ucd/" ++ T.source_file ++ ".txt"; 22 | 23 | // 24 | std.log.info("{s}", .{T.dest_file}); 25 | 26 | const file = try std.fs.cwd().createFile(T.dest_file, .{}); 27 | defer file.close(); 28 | var bufw = std.io.bufferedWriter(file.writer()); 29 | const w = bufw.writer(); 30 | 31 | try w.writeAll( 32 | \\// This file is part of the Unicode Character Database 33 | \\// For documentation, see http://www.unicode.org/reports/tr44/ 34 | \\// 35 | \\ 36 | ); 37 | try w.print( 38 | \\// Based on the source file: {s} 39 | \\// 40 | \\// zig fmt: off 41 | \\ 42 | \\ 43 | , .{source_url}); 44 | try w.writeAll(T.dest_header); 45 | 46 | const req = try zfetch.Request.init(alloc, source_url, null); 47 | defer req.deinit(); 48 | try req.do(.GET, null, null); 49 | const r = req.reader(); 50 | 51 | var line_num: usize = 1; 52 | std.debug.print("0", .{}); 53 | 54 | var arena = std.heap.ArenaAllocator.init(alloc); 55 | defer arena.deinit(); 56 | while (true) { 57 | const line = r.readUntilDelimiterAlloc(alloc, '\n', max_size) catch |err| switch (err) { 58 | error.EndOfStream => break, 59 | else => |e| return e, 60 | }; 61 | defer alloc.free(line); 62 | 63 | if (line.len == 0) { 64 | continue; 65 | } 66 | if (line[0] == '#') { 67 | continue; 68 | } 69 | 70 | try T.exec(arena.allocator(), line, w); 71 | 72 | std.debug.print("{s}", .{ansi.csi.CursorHorzAbs(1)}); 73 | std.debug.print("{s}", .{ansi.csi.EraseInLine(0)}); 74 | std.debug.print("{d}", .{line_num}); 75 | line_num += 1; 76 | } 77 | std.debug.print("\n", .{}); 78 | try w.writeAll(T.dest_footer); 79 | try bufw.flush(); 80 | } 81 | }; 82 | } 83 | 84 | pub fn nullify(input: ?[]const u8) ?[]const u8 { 85 | if (input == null) return null; 86 | if (input.?.len == 0) return null; 87 | return input; 88 | } 89 | 90 | pub fn RangeEnum(comptime prop: []const u8) type { 91 | return struct { 92 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 93 | _ = alloc; 94 | var it = std.mem.tokenizeAny(u8, line, "; "); 95 | 96 | const first = it.next().?; 97 | const next = std.mem.trimRight(u8, it.next().?, "#"); 98 | 99 | if (std.mem.indexOf(u8, first, "..")) |index| { 100 | const start = first[0..index]; 101 | const end = first[index + 2 ..]; 102 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s}, .{s} = .{s} }},\n", .{ start, end, prop, next }); 103 | } else { 104 | try writer.print(" .{{ .from = 0x{s}, .to = 0x{s}, .{s} = .{s} }},\n", .{ first, first, prop, next }); 105 | } 106 | } 107 | }; 108 | } 109 | 110 | pub fn printCodepoint(writer: anytype, input: []const u8) !void { 111 | try writer.print(" 0x{s},", .{input}); 112 | } 113 | 114 | pub fn printSeq(writer: anytype, input: []const u8) !void { 115 | var jt = std.mem.tokenizeScalar(u8, input, ' '); 116 | try writer.writeAll(" &.{"); 117 | while (jt.next()) |jtem| { 118 | try printCodepoint(writer, jtem); 119 | } 120 | try writer.writeAll(" },"); 121 | } 122 | -------------------------------------------------------------------------------- /scripts/ArabicShaping.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | const common = @import("./_common.zig"); 3 | 4 | pub usingnamespace common.Main(struct { 5 | pub const source_file = "ArabicShaping"; 6 | 7 | pub const dest_file = "src/arabic_shaping.zig"; 8 | 9 | pub const dest_header = 10 | \\pub const Shaping = struct { 11 | \\ codepoint: u21, 12 | \\ schematic_name: []const u8, 13 | \\ joining_type: Joining.Type, 14 | \\ joining_group: Joining.Group, 15 | \\}; 16 | \\ 17 | \\pub const Joining = struct { 18 | \\ pub const Type = enum { 19 | \\ U, 20 | \\ D, 21 | \\ R, 22 | \\ C, 23 | \\ T, 24 | \\ L, 25 | \\ }; 26 | \\ 27 | \\ pub const Group = enum { 28 | \\ No_Joining_Group, 29 | \\ YEH, 30 | \\ ALEF, 31 | \\ WAW, 32 | \\ BEH, 33 | \\ TEH_MARBUTA, 34 | \\ HAH, 35 | \\ DAL, 36 | \\ REH, 37 | \\ SEEN, 38 | \\ SAD, 39 | \\ TAH, 40 | \\ AIN, 41 | \\ GAF, 42 | \\ FARSI_YEH, 43 | \\ FEH, 44 | \\ QAF, 45 | \\ KAF, 46 | \\ LAM, 47 | \\ MEEM, 48 | \\ NOON, 49 | \\ HEH, 50 | \\ SWASH_KAF, 51 | \\ NYA, 52 | \\ KNOTTED_HEH, 53 | \\ HEH_GOAL, 54 | \\ TEH_MARBUTA_GOAL, 55 | \\ YEH_WITH_TAIL, 56 | \\ YEH_BARREE, 57 | \\ ALAPH, 58 | \\ BETH, 59 | \\ GAMAL, 60 | \\ DALATH_RISH, 61 | \\ HE, 62 | \\ SYRIAC_WAW, 63 | \\ ZAIN, 64 | \\ HETH, 65 | \\ TETH, 66 | \\ YUDH, 67 | \\ YUDH_HE, 68 | \\ KAPH, 69 | \\ LAMADH, 70 | \\ MIM, 71 | \\ NUN, 72 | \\ SEMKATH, 73 | \\ FINAL_SEMKATH, 74 | \\ E, 75 | \\ PE, 76 | \\ REVERSED_PE, 77 | \\ SADHE, 78 | \\ QAPH, 79 | \\ SHIN, 80 | \\ TAW, 81 | \\ ZHAIN, 82 | \\ KHAPH, 83 | \\ FE, 84 | \\ BURUSHASKI_YEH_BARREE, 85 | \\ MALAYALAM_NGA, 86 | \\ MALAYALAM_JA, 87 | \\ MALAYALAM_NYA, 88 | \\ MALAYALAM_TTA, 89 | \\ MALAYALAM_NNA, 90 | \\ MALAYALAM_NNNA, 91 | \\ MALAYALAM_BHA, 92 | \\ MALAYALAM_RA, 93 | \\ MALAYALAM_LLA, 94 | \\ MALAYALAM_LLLA, 95 | \\ MALAYALAM_SSA, 96 | \\ ROHINGYA_YEH, 97 | \\ STRAIGHT_WAW, 98 | \\ AFRICAN_FEH, 99 | \\ AFRICAN_QAF, 100 | \\ AFRICAN_NOON, 101 | \\ MANICHAEAN_ALEPH, 102 | \\ MANICHAEAN_BETH, 103 | \\ MANICHAEAN_GIMEL, 104 | \\ MANICHAEAN_DALETH, 105 | \\ MANICHAEAN_WAW, 106 | \\ MANICHAEAN_ZAYIN, 107 | \\ MANICHAEAN_HETH, 108 | \\ MANICHAEAN_TETH, 109 | \\ MANICHAEAN_YODH, 110 | \\ MANICHAEAN_KAPH, 111 | \\ MANICHAEAN_LAMEDH, 112 | \\ MANICHAEAN_DHAMEDH, 113 | \\ MANICHAEAN_THAMEDH, 114 | \\ MANICHAEAN_MEM, 115 | \\ MANICHAEAN_NUN, 116 | \\ MANICHAEAN_SAMEKH, 117 | \\ MANICHAEAN_AYIN, 118 | \\ MANICHAEAN_PE, 119 | \\ MANICHAEAN_SADHE, 120 | \\ MANICHAEAN_QOPH, 121 | \\ MANICHAEAN_RESH, 122 | \\ MANICHAEAN_TAW, 123 | \\ MANICHAEAN_ONE, 124 | \\ MANICHAEAN_FIVE, 125 | \\ MANICHAEAN_TEN, 126 | \\ MANICHAEAN_TWENTY, 127 | \\ MANICHAEAN_HUNDRED, 128 | \\ HANIFI_ROHINGYA_PA, 129 | \\ HANIFI_ROHINGYA_KINNA_YA, 130 | \\ THIN_YEH, 131 | \\ VERTICAL_TAIL, 132 | \\ KASHMIRI_YEH, 133 | \\ THIN_NOON, 134 | \\ }; 135 | \\}; 136 | \\ 137 | \\pub const data = [_]Shaping{ 138 | \\ 139 | ; 140 | 141 | pub const dest_footer = 142 | \\}; 143 | \\ 144 | ; 145 | 146 | pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !void { 147 | var it = std.mem.splitScalar(u8, line, ';'); 148 | const c = std.mem.trim(u8, it.next().?, " "); 149 | const n = std.mem.trim(u8, it.next().?, " "); 150 | const t = std.mem.trim(u8, it.next().?, " "); 151 | const g = std.mem.trim(u8, it.next().?, " "); 152 | const g2 = try std.mem.replaceOwned(u8, alloc, g, " ", "_"); 153 | 154 | try writer.print(" .{{ .codepoint = 0x{s}, .schematic_name = \"{s}\", .joining_type = .{s}, .joining_group = .{s} }},\n", .{ c, n, t, g2 }); 155 | } 156 | }); 157 | -------------------------------------------------------------------------------- /src/property_aliases.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/PropertyAliases.txt 5 | // 6 | // zig fmt: off 7 | 8 | const std = @import("std"); 9 | 10 | pub const data = [_][2][]const u8{ 11 | .{ "cjkAccountingNumeric", "kAccountingNumeric" }, 12 | .{ "cjkOtherNumeric", "kOtherNumeric" }, 13 | .{ "cjkPrimaryNumeric", "kPrimaryNumeric" }, 14 | .{ "nv", "Numeric_Value" }, 15 | .{ "bmg", "Bidi_Mirroring_Glyph" }, 16 | .{ "bpb", "Bidi_Paired_Bracket" }, 17 | .{ "cf", "Case_Folding" }, 18 | .{ "cjkCompatibilityVariant", "kCompatibilityVariant" }, 19 | .{ "dm", "Decomposition_Mapping" }, 20 | .{ "EqUIdeo", "Equivalent_Unified_Ideograph" }, 21 | .{ "FC_NFKC", "FC_NFKC_Closure" }, 22 | .{ "lc", "Lowercase_Mapping" }, 23 | .{ "NFKC_CF", "NFKC_Casefold" }, 24 | .{ "NFKC_SCF", "NFKC_Simple_Casefold" }, 25 | .{ "scf", "Simple_Case_Folding" }, 26 | .{ "sfc", "Simple_Case_Folding" }, 27 | .{ "slc", "Simple_Lowercase_Mapping" }, 28 | .{ "stc", "Simple_Titlecase_Mapping" }, 29 | .{ "suc", "Simple_Uppercase_Mapping" }, 30 | .{ "tc", "Titlecase_Mapping" }, 31 | .{ "uc", "Uppercase_Mapping" }, 32 | .{ "cjkIICore", "kIICore" }, 33 | .{ "cjkIRG_GSource", "kIRG_GSource" }, 34 | .{ "cjkIRG_HSource", "kIRG_HSource" }, 35 | .{ "cjkIRG_JSource", "kIRG_JSource" }, 36 | .{ "cjkIRG_KPSource", "kIRG_KPSource" }, 37 | .{ "cjkIRG_KSource", "kIRG_KSource" }, 38 | .{ "cjkIRG_MSource", "kIRG_MSource" }, 39 | .{ "cjkIRG_SSource", "kIRG_SSource" }, 40 | .{ "cjkIRG_TSource", "kIRG_TSource" }, 41 | .{ "cjkIRG_UKSource", "kIRG_UKSource" }, 42 | .{ "cjkIRG_USource", "kIRG_USource" }, 43 | .{ "cjkIRG_VSource", "kIRG_VSource" }, 44 | .{ "cjkMandarin", "kMandarin" }, 45 | .{ "cjkRSUnicode", "kRSUnicode" }, 46 | .{ "Unicode_Radical_Stroke", "kRSUnicode" }, 47 | .{ "URS", "kRSUnicode" }, 48 | .{ "cjkTotalStrokes", "kTotalStrokes" }, 49 | .{ "cjkUnihanCore2020", "kUnihanCore2020" }, 50 | .{ "isc", "ISO_Comment" }, 51 | .{ "JSN", "Jamo_Short_Name" }, 52 | .{ "kEH_Cat", "kEH_Cat" }, 53 | .{ "kEH_Desc", "kEH_Desc" }, 54 | .{ "kEH_HG", "kEH_HG" }, 55 | .{ "kEH_IFAO", "kEH_IFAO" }, 56 | .{ "kEH_JSesh", "kEH_JSesh" }, 57 | .{ "na", "Name" }, 58 | .{ "na1", "Unicode_1_Name" }, 59 | .{ "Name_Alias", "Name_Alias" }, 60 | .{ "scx", "Script_Extensions" }, 61 | .{ "age", "Age" }, 62 | .{ "blk", "Block" }, 63 | .{ "sc", "Script" }, 64 | .{ "bc", "Bidi_Class" }, 65 | .{ "bpt", "Bidi_Paired_Bracket_Type" }, 66 | .{ "ccc", "Canonical_Combining_Class" }, 67 | .{ "dt", "Decomposition_Type" }, 68 | .{ "ea", "East_Asian_Width" }, 69 | .{ "gc", "General_Category" }, 70 | .{ "GCB", "Grapheme_Cluster_Break" }, 71 | .{ "hst", "Hangul_Syllable_Type" }, 72 | .{ "InCB", "Indic_Conjunct_Break" }, 73 | .{ "InPC", "Indic_Positional_Category" }, 74 | .{ "InSC", "Indic_Syllabic_Category" }, 75 | .{ "jg", "Joining_Group" }, 76 | .{ "jt", "Joining_Type" }, 77 | .{ "lb", "Line_Break" }, 78 | .{ "NFC_QC", "NFC_Quick_Check" }, 79 | .{ "NFD_QC", "NFD_Quick_Check" }, 80 | .{ "NFKC_QC", "NFKC_Quick_Check" }, 81 | .{ "NFKD_QC", "NFKD_Quick_Check" }, 82 | .{ "nt", "Numeric_Type" }, 83 | .{ "SB", "Sentence_Break" }, 84 | .{ "vo", "Vertical_Orientation" }, 85 | .{ "WB", "Word_Break" }, 86 | .{ "AHex", "ASCII_Hex_Digit" }, 87 | .{ "Alpha", "Alphabetic" }, 88 | .{ "Bidi_C", "Bidi_Control" }, 89 | .{ "Bidi_M", "Bidi_Mirrored" }, 90 | .{ "Cased", "Cased" }, 91 | .{ "CE", "Composition_Exclusion" }, 92 | .{ "CI", "Case_Ignorable" }, 93 | .{ "Comp_Ex", "Full_Composition_Exclusion" }, 94 | .{ "CWCF", "Changes_When_Casefolded" }, 95 | .{ "CWCM", "Changes_When_Casemapped" }, 96 | .{ "CWKCF", "Changes_When_NFKC_Casefolded" }, 97 | .{ "CWL", "Changes_When_Lowercased" }, 98 | .{ "CWT", "Changes_When_Titlecased" }, 99 | .{ "CWU", "Changes_When_Uppercased" }, 100 | .{ "Dash", "Dash" }, 101 | .{ "Dep", "Deprecated" }, 102 | .{ "DI", "Default_Ignorable_Code_Point" }, 103 | .{ "Dia", "Diacritic" }, 104 | .{ "EBase", "Emoji_Modifier_Base" }, 105 | .{ "EComp", "Emoji_Component" }, 106 | .{ "EMod", "Emoji_Modifier" }, 107 | .{ "Emoji", "Emoji" }, 108 | .{ "EPres", "Emoji_Presentation" }, 109 | .{ "Ext", "Extender" }, 110 | .{ "ExtPict", "Extended_Pictographic" }, 111 | .{ "Gr_Base", "Grapheme_Base" }, 112 | .{ "Gr_Ext", "Grapheme_Extend" }, 113 | .{ "Gr_Link", "Grapheme_Link" }, 114 | .{ "Hex", "Hex_Digit" }, 115 | .{ "Hyphen", "Hyphen" }, 116 | .{ "ID_Compat_Math_Continue", "ID_Compat_Math_Continue" }, 117 | .{ "ID_Compat_Math_Start", "ID_Compat_Math_Start" }, 118 | .{ "IDC", "ID_Continue" }, 119 | .{ "Ideo", "Ideographic" }, 120 | .{ "IDS", "ID_Start" }, 121 | .{ "IDSB", "IDS_Binary_Operator" }, 122 | .{ "IDST", "IDS_Trinary_Operator" }, 123 | .{ "IDSU", "IDS_Unary_Operator" }, 124 | .{ "Join_C", "Join_Control" }, 125 | .{ "kEH_NoMirror", "kEH_NoMirror" }, 126 | .{ "kEH_NoRotate", "kEH_NoRotate" }, 127 | .{ "LOE", "Logical_Order_Exception" }, 128 | .{ "Lower", "Lowercase" }, 129 | .{ "Math", "Math" }, 130 | .{ "MCM", "Modifier_Combining_Mark" }, 131 | .{ "NChar", "Noncharacter_Code_Point" }, 132 | .{ "OAlpha", "Other_Alphabetic" }, 133 | .{ "ODI", "Other_Default_Ignorable_Code_Point" }, 134 | .{ "OGr_Ext", "Other_Grapheme_Extend" }, 135 | .{ "OIDC", "Other_ID_Continue" }, 136 | .{ "OIDS", "Other_ID_Start" }, 137 | .{ "OLower", "Other_Lowercase" }, 138 | .{ "OMath", "Other_Math" }, 139 | .{ "OUpper", "Other_Uppercase" }, 140 | .{ "Pat_Syn", "Pattern_Syntax" }, 141 | .{ "Pat_WS", "Pattern_White_Space" }, 142 | .{ "PCM", "Prepended_Concatenation_Mark" }, 143 | .{ "QMark", "Quotation_Mark" }, 144 | .{ "Radical", "Radical" }, 145 | .{ "RI", "Regional_Indicator" }, 146 | .{ "SD", "Soft_Dotted" }, 147 | .{ "STerm", "Sentence_Terminal" }, 148 | .{ "Term", "Terminal_Punctuation" }, 149 | .{ "UIdeo", "Unified_Ideograph" }, 150 | .{ "Upper", "Uppercase" }, 151 | .{ "VS", "Variation_Selector" }, 152 | .{ "WSpace", "White_Space" }, 153 | .{ "space", "White_Space" }, 154 | .{ "XIDC", "XID_Continue" }, 155 | .{ "XIDS", "XID_Start" }, 156 | .{ "XO_NFC", "Expands_On_NFC" }, 157 | .{ "XO_NFD", "Expands_On_NFD" }, 158 | .{ "XO_NFKC", "Expands_On_NFKC" }, 159 | .{ "XO_NFKD", "Expands_On_NFKD" }, 160 | }; -------------------------------------------------------------------------------- /src/bidi_brackets.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/BidiBrackets.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const BracketPairing = struct { 9 | codepoint: u21, 10 | pair: u21, 11 | type: Type, 12 | 13 | pub const Type = enum { 14 | o, 15 | c, 16 | n, 17 | }; 18 | }; 19 | 20 | pub const data = [_]BracketPairing{ 21 | .{ .codepoint = 0x0028, .pair = 0x0029, .type = .o }, 22 | .{ .codepoint = 0x0029, .pair = 0x0028, .type = .c }, 23 | .{ .codepoint = 0x005B, .pair = 0x005D, .type = .o }, 24 | .{ .codepoint = 0x005D, .pair = 0x005B, .type = .c }, 25 | .{ .codepoint = 0x007B, .pair = 0x007D, .type = .o }, 26 | .{ .codepoint = 0x007D, .pair = 0x007B, .type = .c }, 27 | .{ .codepoint = 0x0F3A, .pair = 0x0F3B, .type = .o }, 28 | .{ .codepoint = 0x0F3B, .pair = 0x0F3A, .type = .c }, 29 | .{ .codepoint = 0x0F3C, .pair = 0x0F3D, .type = .o }, 30 | .{ .codepoint = 0x0F3D, .pair = 0x0F3C, .type = .c }, 31 | .{ .codepoint = 0x169B, .pair = 0x169C, .type = .o }, 32 | .{ .codepoint = 0x169C, .pair = 0x169B, .type = .c }, 33 | .{ .codepoint = 0x2045, .pair = 0x2046, .type = .o }, 34 | .{ .codepoint = 0x2046, .pair = 0x2045, .type = .c }, 35 | .{ .codepoint = 0x207D, .pair = 0x207E, .type = .o }, 36 | .{ .codepoint = 0x207E, .pair = 0x207D, .type = .c }, 37 | .{ .codepoint = 0x208D, .pair = 0x208E, .type = .o }, 38 | .{ .codepoint = 0x208E, .pair = 0x208D, .type = .c }, 39 | .{ .codepoint = 0x2308, .pair = 0x2309, .type = .o }, 40 | .{ .codepoint = 0x2309, .pair = 0x2308, .type = .c }, 41 | .{ .codepoint = 0x230A, .pair = 0x230B, .type = .o }, 42 | .{ .codepoint = 0x230B, .pair = 0x230A, .type = .c }, 43 | .{ .codepoint = 0x2329, .pair = 0x232A, .type = .o }, 44 | .{ .codepoint = 0x232A, .pair = 0x2329, .type = .c }, 45 | .{ .codepoint = 0x2768, .pair = 0x2769, .type = .o }, 46 | .{ .codepoint = 0x2769, .pair = 0x2768, .type = .c }, 47 | .{ .codepoint = 0x276A, .pair = 0x276B, .type = .o }, 48 | .{ .codepoint = 0x276B, .pair = 0x276A, .type = .c }, 49 | .{ .codepoint = 0x276C, .pair = 0x276D, .type = .o }, 50 | .{ .codepoint = 0x276D, .pair = 0x276C, .type = .c }, 51 | .{ .codepoint = 0x276E, .pair = 0x276F, .type = .o }, 52 | .{ .codepoint = 0x276F, .pair = 0x276E, .type = .c }, 53 | .{ .codepoint = 0x2770, .pair = 0x2771, .type = .o }, 54 | .{ .codepoint = 0x2771, .pair = 0x2770, .type = .c }, 55 | .{ .codepoint = 0x2772, .pair = 0x2773, .type = .o }, 56 | .{ .codepoint = 0x2773, .pair = 0x2772, .type = .c }, 57 | .{ .codepoint = 0x2774, .pair = 0x2775, .type = .o }, 58 | .{ .codepoint = 0x2775, .pair = 0x2774, .type = .c }, 59 | .{ .codepoint = 0x27C5, .pair = 0x27C6, .type = .o }, 60 | .{ .codepoint = 0x27C6, .pair = 0x27C5, .type = .c }, 61 | .{ .codepoint = 0x27E6, .pair = 0x27E7, .type = .o }, 62 | .{ .codepoint = 0x27E7, .pair = 0x27E6, .type = .c }, 63 | .{ .codepoint = 0x27E8, .pair = 0x27E9, .type = .o }, 64 | .{ .codepoint = 0x27E9, .pair = 0x27E8, .type = .c }, 65 | .{ .codepoint = 0x27EA, .pair = 0x27EB, .type = .o }, 66 | .{ .codepoint = 0x27EB, .pair = 0x27EA, .type = .c }, 67 | .{ .codepoint = 0x27EC, .pair = 0x27ED, .type = .o }, 68 | .{ .codepoint = 0x27ED, .pair = 0x27EC, .type = .c }, 69 | .{ .codepoint = 0x27EE, .pair = 0x27EF, .type = .o }, 70 | .{ .codepoint = 0x27EF, .pair = 0x27EE, .type = .c }, 71 | .{ .codepoint = 0x2983, .pair = 0x2984, .type = .o }, 72 | .{ .codepoint = 0x2984, .pair = 0x2983, .type = .c }, 73 | .{ .codepoint = 0x2985, .pair = 0x2986, .type = .o }, 74 | .{ .codepoint = 0x2986, .pair = 0x2985, .type = .c }, 75 | .{ .codepoint = 0x2987, .pair = 0x2988, .type = .o }, 76 | .{ .codepoint = 0x2988, .pair = 0x2987, .type = .c }, 77 | .{ .codepoint = 0x2989, .pair = 0x298A, .type = .o }, 78 | .{ .codepoint = 0x298A, .pair = 0x2989, .type = .c }, 79 | .{ .codepoint = 0x298B, .pair = 0x298C, .type = .o }, 80 | .{ .codepoint = 0x298C, .pair = 0x298B, .type = .c }, 81 | .{ .codepoint = 0x298D, .pair = 0x2990, .type = .o }, 82 | .{ .codepoint = 0x298E, .pair = 0x298F, .type = .c }, 83 | .{ .codepoint = 0x298F, .pair = 0x298E, .type = .o }, 84 | .{ .codepoint = 0x2990, .pair = 0x298D, .type = .c }, 85 | .{ .codepoint = 0x2991, .pair = 0x2992, .type = .o }, 86 | .{ .codepoint = 0x2992, .pair = 0x2991, .type = .c }, 87 | .{ .codepoint = 0x2993, .pair = 0x2994, .type = .o }, 88 | .{ .codepoint = 0x2994, .pair = 0x2993, .type = .c }, 89 | .{ .codepoint = 0x2995, .pair = 0x2996, .type = .o }, 90 | .{ .codepoint = 0x2996, .pair = 0x2995, .type = .c }, 91 | .{ .codepoint = 0x2997, .pair = 0x2998, .type = .o }, 92 | .{ .codepoint = 0x2998, .pair = 0x2997, .type = .c }, 93 | .{ .codepoint = 0x29D8, .pair = 0x29D9, .type = .o }, 94 | .{ .codepoint = 0x29D9, .pair = 0x29D8, .type = .c }, 95 | .{ .codepoint = 0x29DA, .pair = 0x29DB, .type = .o }, 96 | .{ .codepoint = 0x29DB, .pair = 0x29DA, .type = .c }, 97 | .{ .codepoint = 0x29FC, .pair = 0x29FD, .type = .o }, 98 | .{ .codepoint = 0x29FD, .pair = 0x29FC, .type = .c }, 99 | .{ .codepoint = 0x2E22, .pair = 0x2E23, .type = .o }, 100 | .{ .codepoint = 0x2E23, .pair = 0x2E22, .type = .c }, 101 | .{ .codepoint = 0x2E24, .pair = 0x2E25, .type = .o }, 102 | .{ .codepoint = 0x2E25, .pair = 0x2E24, .type = .c }, 103 | .{ .codepoint = 0x2E26, .pair = 0x2E27, .type = .o }, 104 | .{ .codepoint = 0x2E27, .pair = 0x2E26, .type = .c }, 105 | .{ .codepoint = 0x2E28, .pair = 0x2E29, .type = .o }, 106 | .{ .codepoint = 0x2E29, .pair = 0x2E28, .type = .c }, 107 | .{ .codepoint = 0x2E55, .pair = 0x2E56, .type = .o }, 108 | .{ .codepoint = 0x2E56, .pair = 0x2E55, .type = .c }, 109 | .{ .codepoint = 0x2E57, .pair = 0x2E58, .type = .o }, 110 | .{ .codepoint = 0x2E58, .pair = 0x2E57, .type = .c }, 111 | .{ .codepoint = 0x2E59, .pair = 0x2E5A, .type = .o }, 112 | .{ .codepoint = 0x2E5A, .pair = 0x2E59, .type = .c }, 113 | .{ .codepoint = 0x2E5B, .pair = 0x2E5C, .type = .o }, 114 | .{ .codepoint = 0x2E5C, .pair = 0x2E5B, .type = .c }, 115 | .{ .codepoint = 0x3008, .pair = 0x3009, .type = .o }, 116 | .{ .codepoint = 0x3009, .pair = 0x3008, .type = .c }, 117 | .{ .codepoint = 0x300A, .pair = 0x300B, .type = .o }, 118 | .{ .codepoint = 0x300B, .pair = 0x300A, .type = .c }, 119 | .{ .codepoint = 0x300C, .pair = 0x300D, .type = .o }, 120 | .{ .codepoint = 0x300D, .pair = 0x300C, .type = .c }, 121 | .{ .codepoint = 0x300E, .pair = 0x300F, .type = .o }, 122 | .{ .codepoint = 0x300F, .pair = 0x300E, .type = .c }, 123 | .{ .codepoint = 0x3010, .pair = 0x3011, .type = .o }, 124 | .{ .codepoint = 0x3011, .pair = 0x3010, .type = .c }, 125 | .{ .codepoint = 0x3014, .pair = 0x3015, .type = .o }, 126 | .{ .codepoint = 0x3015, .pair = 0x3014, .type = .c }, 127 | .{ .codepoint = 0x3016, .pair = 0x3017, .type = .o }, 128 | .{ .codepoint = 0x3017, .pair = 0x3016, .type = .c }, 129 | .{ .codepoint = 0x3018, .pair = 0x3019, .type = .o }, 130 | .{ .codepoint = 0x3019, .pair = 0x3018, .type = .c }, 131 | .{ .codepoint = 0x301A, .pair = 0x301B, .type = .o }, 132 | .{ .codepoint = 0x301B, .pair = 0x301A, .type = .c }, 133 | .{ .codepoint = 0xFE59, .pair = 0xFE5A, .type = .o }, 134 | .{ .codepoint = 0xFE5A, .pair = 0xFE59, .type = .c }, 135 | .{ .codepoint = 0xFE5B, .pair = 0xFE5C, .type = .o }, 136 | .{ .codepoint = 0xFE5C, .pair = 0xFE5B, .type = .c }, 137 | .{ .codepoint = 0xFE5D, .pair = 0xFE5E, .type = .o }, 138 | .{ .codepoint = 0xFE5E, .pair = 0xFE5D, .type = .c }, 139 | .{ .codepoint = 0xFF08, .pair = 0xFF09, .type = .o }, 140 | .{ .codepoint = 0xFF09, .pair = 0xFF08, .type = .c }, 141 | .{ .codepoint = 0xFF3B, .pair = 0xFF3D, .type = .o }, 142 | .{ .codepoint = 0xFF3D, .pair = 0xFF3B, .type = .c }, 143 | .{ .codepoint = 0xFF5B, .pair = 0xFF5D, .type = .o }, 144 | .{ .codepoint = 0xFF5D, .pair = 0xFF5B, .type = .c }, 145 | .{ .codepoint = 0xFF5F, .pair = 0xFF60, .type = .o }, 146 | .{ .codepoint = 0xFF60, .pair = 0xFF5F, .type = .c }, 147 | .{ .codepoint = 0xFF62, .pair = 0xFF63, .type = .o }, 148 | .{ .codepoint = 0xFF63, .pair = 0xFF62, .type = .c }, 149 | }; 150 | -------------------------------------------------------------------------------- /src/equivalent_unified_ideograph.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/EquivalentUnifiedIdeograph.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const data = [_][2]u21{ 9 | .{ 0x2E81, 0x5382 }, 10 | .{ 0x2E82, 0x4E5B }, 11 | .{ 0x2E83, 0x4E5A }, 12 | .{ 0x2E84, 0x4E59 }, 13 | .{ 0x2E85, 0x4EBB }, 14 | .{ 0x2E86, 0x5182 }, 15 | .{ 0x2E87, 0x20628 }, 16 | .{ 0x2E88, 0x5200 }, 17 | .{ 0x2E89, 0x5202 }, 18 | .{ 0x2E8A, 0x535C }, 19 | .{ 0x2E8B, 0x353E }, 20 | .{ 0x2E8C, 0x5C0F }, 21 | .{ 0x2E8D, 0x5C0F }, 22 | .{ 0x2E8E, 0x5140 }, 23 | .{ 0x2E8F, 0x5C23 }, 24 | .{ 0x2E90, 0x5C22 }, 25 | .{ 0x2E91, 0x21BC2 }, 26 | .{ 0x2E92, 0x5DF3 }, 27 | .{ 0x2E93, 0x5E7A }, 28 | .{ 0x2E94, 0x5F51 }, 29 | .{ 0x2E95, 0x2B739 }, 30 | .{ 0x2E96, 0x5FC4 }, 31 | .{ 0x2E97, 0x5FC3 }, 32 | .{ 0x2E98, 0x624C }, 33 | .{ 0x2E99, 0x6535 }, 34 | .{ 0x2E9B, 0x65E1 }, 35 | .{ 0x2E9C, 0x65E5 }, 36 | .{ 0x2E9D, 0x6708 }, 37 | .{ 0x2E9E, 0x6B7A }, 38 | .{ 0x2E9F, 0x6BCD }, 39 | .{ 0x2EA0, 0x6C11 }, 40 | .{ 0x2EA1, 0x6C35 }, 41 | .{ 0x2EA2, 0x6C3A }, 42 | .{ 0x2EA3, 0x706C }, 43 | .{ 0x2EA4, 0x722B }, 44 | .{ 0x2EA5, 0x722B }, 45 | .{ 0x2EA6, 0x4E2C }, 46 | .{ 0x2EA7, 0x725B }, 47 | .{ 0x2EA8, 0x72AD }, 48 | .{ 0x2EA9, 0x738B }, 49 | .{ 0x2EAA, 0x24D14 }, 50 | .{ 0x2EAB, 0x76EE }, 51 | .{ 0x2EAC, 0x793A }, 52 | .{ 0x2EAD, 0x793B }, 53 | .{ 0x2EAE, 0x25AD7 }, 54 | .{ 0x2EAF, 0x7CF9 }, 55 | .{ 0x2EB0, 0x7E9F }, 56 | .{ 0x2EB1, 0x7F53 }, 57 | .{ 0x2EB2, 0x7F52 }, 58 | .{ 0x2EB3, 0x34C1 }, 59 | .{ 0x2EB4, 0x5197 }, 60 | .{ 0x2EB5, 0x2626B }, 61 | .{ 0x2EB6, 0x7F8A }, 62 | .{ 0x2EB7, 0x2634C }, 63 | .{ 0x2EB8, 0x2634B }, 64 | .{ 0x2EB9, 0x8002 }, 65 | .{ 0x2EBA, 0x8080 }, 66 | .{ 0x2EBB, 0x807F }, 67 | .{ 0x2EBC, 0x8089 }, 68 | .{ 0x2EBD, 0x26951 }, 69 | .{ 0x2EBE, 0x8279 }, 70 | .{ 0x2EBF, 0x8279 }, 71 | .{ 0x2EC0, 0x8279 }, 72 | .{ 0x2EC1, 0x864E }, 73 | .{ 0x2EC2, 0x8864 }, 74 | .{ 0x2EC3, 0x8980 }, 75 | .{ 0x2EC4, 0x897F }, 76 | .{ 0x2EC5, 0x89C1 }, 77 | .{ 0x2EC6, 0x89D2 }, 78 | .{ 0x2EC7, 0x278B2 }, 79 | .{ 0x2EC8, 0x8BA0 }, 80 | .{ 0x2EC9, 0x8D1D }, 81 | .{ 0x2ECA, 0x27FB7 }, 82 | .{ 0x2ECB, 0x8F66 }, 83 | .{ 0x2ECC, 0x8FB6 }, 84 | .{ 0x2ECD, 0x8FB6 }, 85 | .{ 0x2ECE, 0x8FB6 }, 86 | .{ 0x2ECF, 0x9091 }, 87 | .{ 0x2ED0, 0x9485 }, 88 | .{ 0x2ED1, 0x9577 }, 89 | .{ 0x2ED2, 0x9578 }, 90 | .{ 0x2ED3, 0x957F }, 91 | .{ 0x2ED4, 0x95E8 }, 92 | .{ 0x2ED5, 0x28E0F }, 93 | .{ 0x2ED6, 0x961D }, 94 | .{ 0x2ED7, 0x96E8 }, 95 | .{ 0x2ED8, 0x9752 }, 96 | .{ 0x2ED9, 0x97E6 }, 97 | .{ 0x2EDA, 0x9875 }, 98 | .{ 0x2EDB, 0x98CE }, 99 | .{ 0x2EDC, 0x98DE }, 100 | .{ 0x2EDD, 0x98DF }, 101 | .{ 0x2EDE, 0x2967F }, 102 | .{ 0x2EDF, 0x98E0 }, 103 | .{ 0x2EE0, 0x9963 }, 104 | .{ 0x2EE1, 0x29810 }, 105 | .{ 0x2EE2, 0x9A6C }, 106 | .{ 0x2EE3, 0x9AA8 }, 107 | .{ 0x2EE4, 0x9B3C }, 108 | .{ 0x2EE5, 0x9C7C }, 109 | .{ 0x2EE6, 0x9E1F }, 110 | .{ 0x2EE7, 0x5364 }, 111 | .{ 0x2EE8, 0x9EA6 }, 112 | .{ 0x2EE9, 0x9EC4 }, 113 | .{ 0x2EEA, 0x9EFE }, 114 | .{ 0x2EEB, 0x6589 }, 115 | .{ 0x2EEC, 0x9F50 }, 116 | .{ 0x2EED, 0x6B6F }, 117 | .{ 0x2EEE, 0x9F7F }, 118 | .{ 0x2EEF, 0x7ADC }, 119 | .{ 0x2EF0, 0x9F99 }, 120 | .{ 0x2EF1, 0x9F9C }, 121 | .{ 0x2EF2, 0x4E80 }, 122 | .{ 0x2EF3, 0x9F9F }, 123 | .{ 0x2F00, 0x4E00 }, 124 | .{ 0x2F01, 0x4E28 }, 125 | .{ 0x2F02, 0x4E36 }, 126 | .{ 0x2F03, 0x4E3F }, 127 | .{ 0x2F04, 0x4E59 }, 128 | .{ 0x2F05, 0x4E85 }, 129 | .{ 0x2F06, 0x4E8C }, 130 | .{ 0x2F07, 0x4EA0 }, 131 | .{ 0x2F08, 0x4EBA }, 132 | .{ 0x2F09, 0x513F }, 133 | .{ 0x2F0A, 0x5165 }, 134 | .{ 0x2F0B, 0x516B }, 135 | .{ 0x2F0C, 0x5182 }, 136 | .{ 0x2F0D, 0x5196 }, 137 | .{ 0x2F0E, 0x51AB }, 138 | .{ 0x2F0F, 0x51E0 }, 139 | .{ 0x2F10, 0x51F5 }, 140 | .{ 0x2F11, 0x5200 }, 141 | .{ 0x2F12, 0x529B }, 142 | .{ 0x2F13, 0x52F9 }, 143 | .{ 0x2F14, 0x5315 }, 144 | .{ 0x2F15, 0x531A }, 145 | .{ 0x2F16, 0x5338 }, 146 | .{ 0x2F17, 0x5341 }, 147 | .{ 0x2F18, 0x535C }, 148 | .{ 0x2F19, 0x5369 }, 149 | .{ 0x2F1A, 0x5382 }, 150 | .{ 0x2F1B, 0x53B6 }, 151 | .{ 0x2F1C, 0x53C8 }, 152 | .{ 0x2F1D, 0x53E3 }, 153 | .{ 0x2F1E, 0x56D7 }, 154 | .{ 0x2F1F, 0x571F }, 155 | .{ 0x2F20, 0x58EB }, 156 | .{ 0x2F21, 0x5902 }, 157 | .{ 0x2F22, 0x590A }, 158 | .{ 0x2F23, 0x5915 }, 159 | .{ 0x2F24, 0x5927 }, 160 | .{ 0x2F25, 0x5973 }, 161 | .{ 0x2F26, 0x5B50 }, 162 | .{ 0x2F27, 0x5B80 }, 163 | .{ 0x2F28, 0x5BF8 }, 164 | .{ 0x2F29, 0x5C0F }, 165 | .{ 0x2F2A, 0x5C22 }, 166 | .{ 0x2F2B, 0x5C38 }, 167 | .{ 0x2F2C, 0x5C6E }, 168 | .{ 0x2F2D, 0x5C71 }, 169 | .{ 0x2F2E, 0x5DDB }, 170 | .{ 0x2F2F, 0x5DE5 }, 171 | .{ 0x2F30, 0x5DF1 }, 172 | .{ 0x2F31, 0x5DFE }, 173 | .{ 0x2F32, 0x5E72 }, 174 | .{ 0x2F33, 0x5E7A }, 175 | .{ 0x2F34, 0x5E7F }, 176 | .{ 0x2F35, 0x5EF4 }, 177 | .{ 0x2F36, 0x5EFE }, 178 | .{ 0x2F37, 0x5F0B }, 179 | .{ 0x2F38, 0x5F13 }, 180 | .{ 0x2F39, 0x5F50 }, 181 | .{ 0x2F3A, 0x5F61 }, 182 | .{ 0x2F3B, 0x5F73 }, 183 | .{ 0x2F3C, 0x5FC3 }, 184 | .{ 0x2F3D, 0x6208 }, 185 | .{ 0x2F3E, 0x6236 }, 186 | .{ 0x2F3F, 0x624B }, 187 | .{ 0x2F40, 0x652F }, 188 | .{ 0x2F41, 0x6534 }, 189 | .{ 0x2F42, 0x6587 }, 190 | .{ 0x2F43, 0x6597 }, 191 | .{ 0x2F44, 0x65A4 }, 192 | .{ 0x2F45, 0x65B9 }, 193 | .{ 0x2F46, 0x65E0 }, 194 | .{ 0x2F47, 0x65E5 }, 195 | .{ 0x2F48, 0x66F0 }, 196 | .{ 0x2F49, 0x6708 }, 197 | .{ 0x2F4A, 0x6728 }, 198 | .{ 0x2F4B, 0x6B20 }, 199 | .{ 0x2F4C, 0x6B62 }, 200 | .{ 0x2F4D, 0x6B79 }, 201 | .{ 0x2F4E, 0x6BB3 }, 202 | .{ 0x2F4F, 0x6BCB }, 203 | .{ 0x2F50, 0x6BD4 }, 204 | .{ 0x2F51, 0x6BDB }, 205 | .{ 0x2F52, 0x6C0F }, 206 | .{ 0x2F53, 0x6C14 }, 207 | .{ 0x2F54, 0x6C34 }, 208 | .{ 0x2F55, 0x706B }, 209 | .{ 0x2F56, 0x722A }, 210 | .{ 0x2F57, 0x7236 }, 211 | .{ 0x2F58, 0x723B }, 212 | .{ 0x2F59, 0x723F }, 213 | .{ 0x2F5A, 0x7247 }, 214 | .{ 0x2F5B, 0x7259 }, 215 | .{ 0x2F5C, 0x725B }, 216 | .{ 0x2F5D, 0x72AC }, 217 | .{ 0x2F5E, 0x7384 }, 218 | .{ 0x2F5F, 0x7389 }, 219 | .{ 0x2F60, 0x74DC }, 220 | .{ 0x2F61, 0x74E6 }, 221 | .{ 0x2F62, 0x7518 }, 222 | .{ 0x2F63, 0x751F }, 223 | .{ 0x2F64, 0x7528 }, 224 | .{ 0x2F65, 0x7530 }, 225 | .{ 0x2F66, 0x758B }, 226 | .{ 0x2F67, 0x7592 }, 227 | .{ 0x2F68, 0x7676 }, 228 | .{ 0x2F69, 0x767D }, 229 | .{ 0x2F6A, 0x76AE }, 230 | .{ 0x2F6B, 0x76BF }, 231 | .{ 0x2F6C, 0x76EE }, 232 | .{ 0x2F6D, 0x77DB }, 233 | .{ 0x2F6E, 0x77E2 }, 234 | .{ 0x2F6F, 0x77F3 }, 235 | .{ 0x2F70, 0x793A }, 236 | .{ 0x2F71, 0x79B8 }, 237 | .{ 0x2F72, 0x79BE }, 238 | .{ 0x2F73, 0x7A74 }, 239 | .{ 0x2F74, 0x7ACB }, 240 | .{ 0x2F75, 0x7AF9 }, 241 | .{ 0x2F76, 0x7C73 }, 242 | .{ 0x2F77, 0x7CF8 }, 243 | .{ 0x2F78, 0x7F36 }, 244 | .{ 0x2F79, 0x7F51 }, 245 | .{ 0x2F7A, 0x7F8A }, 246 | .{ 0x2F7B, 0x7FBD }, 247 | .{ 0x2F7C, 0x8001 }, 248 | .{ 0x2F7D, 0x800C }, 249 | .{ 0x2F7E, 0x8012 }, 250 | .{ 0x2F7F, 0x8033 }, 251 | .{ 0x2F80, 0x807F }, 252 | .{ 0x2F81, 0x8089 }, 253 | .{ 0x2F82, 0x81E3 }, 254 | .{ 0x2F83, 0x81EA }, 255 | .{ 0x2F84, 0x81F3 }, 256 | .{ 0x2F85, 0x81FC }, 257 | .{ 0x2F86, 0x820C }, 258 | .{ 0x2F87, 0x821B }, 259 | .{ 0x2F88, 0x821F }, 260 | .{ 0x2F89, 0x826E }, 261 | .{ 0x2F8A, 0x8272 }, 262 | .{ 0x2F8B, 0x8278 }, 263 | .{ 0x2F8C, 0x864D }, 264 | .{ 0x2F8D, 0x866B }, 265 | .{ 0x2F8E, 0x8840 }, 266 | .{ 0x2F8F, 0x884C }, 267 | .{ 0x2F90, 0x8863 }, 268 | .{ 0x2F91, 0x897E }, 269 | .{ 0x2F92, 0x898B }, 270 | .{ 0x2F93, 0x89D2 }, 271 | .{ 0x2F94, 0x8A00 }, 272 | .{ 0x2F95, 0x8C37 }, 273 | .{ 0x2F96, 0x8C46 }, 274 | .{ 0x2F97, 0x8C55 }, 275 | .{ 0x2F98, 0x8C78 }, 276 | .{ 0x2F99, 0x8C9D }, 277 | .{ 0x2F9A, 0x8D64 }, 278 | .{ 0x2F9B, 0x8D70 }, 279 | .{ 0x2F9C, 0x8DB3 }, 280 | .{ 0x2F9D, 0x8EAB }, 281 | .{ 0x2F9E, 0x8ECA }, 282 | .{ 0x2F9F, 0x8F9B }, 283 | .{ 0x2FA0, 0x8FB0 }, 284 | .{ 0x2FA1, 0x8FB5 }, 285 | .{ 0x2FA2, 0x9091 }, 286 | .{ 0x2FA3, 0x9149 }, 287 | .{ 0x2FA4, 0x91C6 }, 288 | .{ 0x2FA5, 0x91CC }, 289 | .{ 0x2FA6, 0x91D1 }, 290 | .{ 0x2FA7, 0x9577 }, 291 | .{ 0x2FA8, 0x9580 }, 292 | .{ 0x2FA9, 0x961C }, 293 | .{ 0x2FAA, 0x96B6 }, 294 | .{ 0x2FAB, 0x96B9 }, 295 | .{ 0x2FAC, 0x96E8 }, 296 | .{ 0x2FAD, 0x9751 }, 297 | .{ 0x2FAE, 0x975E }, 298 | .{ 0x2FAF, 0x9762 }, 299 | .{ 0x2FB0, 0x9769 }, 300 | .{ 0x2FB1, 0x97CB }, 301 | .{ 0x2FB2, 0x97ED }, 302 | .{ 0x2FB3, 0x97F3 }, 303 | .{ 0x2FB4, 0x9801 }, 304 | .{ 0x2FB5, 0x98A8 }, 305 | .{ 0x2FB6, 0x98DB }, 306 | .{ 0x2FB7, 0x98DF }, 307 | .{ 0x2FB8, 0x9996 }, 308 | .{ 0x2FB9, 0x9999 }, 309 | .{ 0x2FBA, 0x99AC }, 310 | .{ 0x2FBB, 0x9AA8 }, 311 | .{ 0x2FBC, 0x9AD8 }, 312 | .{ 0x2FBD, 0x9ADF }, 313 | .{ 0x2FBE, 0x9B25 }, 314 | .{ 0x2FBF, 0x9B2F }, 315 | .{ 0x2FC0, 0x9B32 }, 316 | .{ 0x2FC1, 0x9B3C }, 317 | .{ 0x2FC2, 0x9B5A }, 318 | .{ 0x2FC3, 0x9CE5 }, 319 | .{ 0x2FC4, 0x9E75 }, 320 | .{ 0x2FC5, 0x9E7F }, 321 | .{ 0x2FC6, 0x9EA5 }, 322 | .{ 0x2FC7, 0x9EBB }, 323 | .{ 0x2FC8, 0x9EC3 }, 324 | .{ 0x2FC9, 0x9ECD }, 325 | .{ 0x2FCA, 0x9ED1 }, 326 | .{ 0x2FCB, 0x9EF9 }, 327 | .{ 0x2FCC, 0x9EFD }, 328 | .{ 0x2FCD, 0x9F0E }, 329 | .{ 0x2FCE, 0x9F13 }, 330 | .{ 0x2FCF, 0x9F20 }, 331 | .{ 0x2FD0, 0x9F3B }, 332 | .{ 0x2FD1, 0x9F4A }, 333 | .{ 0x2FD2, 0x9F52 }, 334 | .{ 0x2FD3, 0x9F8D }, 335 | .{ 0x2FD4, 0x9F9C }, 336 | .{ 0x2FD5, 0x9FA0 }, 337 | .{ 0x31C6, 0x200CC }, 338 | .{ 0x31CF, 0x4E40 }, 339 | .{ 0x31D0, 0x4E00 }, 340 | .{ 0x31D1, 0x4E28 }, 341 | .{ 0x31D2, 0x4E3F }, 342 | .{ 0x31D3, 0x4E3F }, 343 | .{ 0x31D4, 0x4E36 }, 344 | .{ 0x31D5, 0x200CD }, 345 | .{ 0x31D6, 0x4E5B }, 346 | .{ 0x31D7, 0x200CA }, 347 | .{ 0x31D8, 0x200CE }, 348 | .{ 0x31D9, 0x2010C }, 349 | .{ 0x31DA, 0x4E85 }, 350 | .{ 0x31DB, 0x21FE8 }, 351 | .{ 0x31DC, 0x200CB }, 352 | .{ 0x31DD, 0x4E40 }, 353 | .{ 0x31DE, 0x200D1 }, 354 | .{ 0x31DF, 0x4E5A }, 355 | .{ 0x31E0, 0x4E59 }, 356 | .{ 0x31E1, 0x2010E }, 357 | }; 358 | -------------------------------------------------------------------------------- /src/special_casing.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/SpecialCasing.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const SpecialCasing = struct { 9 | code: u21, 10 | lower: []const u21, 11 | title: []const u21, 12 | upper: []const u21, 13 | condition: []const u8, 14 | }; 15 | 16 | pub const data = [_]SpecialCasing{ 17 | .{ .code = 0x00DF, .lower = &.{ 0x00DF, }, .title = &.{ 0x0053, 0x0073, }, .upper = &.{ 0x0053, 0x0053, }, .condition = "" }, 18 | .{ .code = 0x0130, .lower = &.{ 0x0069, 0x0307, }, .title = &.{ 0x0130, }, .upper = &.{ 0x0130, }, .condition = "" }, 19 | .{ .code = 0xFB00, .lower = &.{ 0xFB00, }, .title = &.{ 0x0046, 0x0066, }, .upper = &.{ 0x0046, 0x0046, }, .condition = "" }, 20 | .{ .code = 0xFB01, .lower = &.{ 0xFB01, }, .title = &.{ 0x0046, 0x0069, }, .upper = &.{ 0x0046, 0x0049, }, .condition = "" }, 21 | .{ .code = 0xFB02, .lower = &.{ 0xFB02, }, .title = &.{ 0x0046, 0x006C, }, .upper = &.{ 0x0046, 0x004C, }, .condition = "" }, 22 | .{ .code = 0xFB03, .lower = &.{ 0xFB03, }, .title = &.{ 0x0046, 0x0066, 0x0069, }, .upper = &.{ 0x0046, 0x0046, 0x0049, }, .condition = "" }, 23 | .{ .code = 0xFB04, .lower = &.{ 0xFB04, }, .title = &.{ 0x0046, 0x0066, 0x006C, }, .upper = &.{ 0x0046, 0x0046, 0x004C, }, .condition = "" }, 24 | .{ .code = 0xFB05, .lower = &.{ 0xFB05, }, .title = &.{ 0x0053, 0x0074, }, .upper = &.{ 0x0053, 0x0054, }, .condition = "" }, 25 | .{ .code = 0xFB06, .lower = &.{ 0xFB06, }, .title = &.{ 0x0053, 0x0074, }, .upper = &.{ 0x0053, 0x0054, }, .condition = "" }, 26 | .{ .code = 0x0587, .lower = &.{ 0x0587, }, .title = &.{ 0x0535, 0x0582, }, .upper = &.{ 0x0535, 0x0552, }, .condition = "" }, 27 | .{ .code = 0xFB13, .lower = &.{ 0xFB13, }, .title = &.{ 0x0544, 0x0576, }, .upper = &.{ 0x0544, 0x0546, }, .condition = "" }, 28 | .{ .code = 0xFB14, .lower = &.{ 0xFB14, }, .title = &.{ 0x0544, 0x0565, }, .upper = &.{ 0x0544, 0x0535, }, .condition = "" }, 29 | .{ .code = 0xFB15, .lower = &.{ 0xFB15, }, .title = &.{ 0x0544, 0x056B, }, .upper = &.{ 0x0544, 0x053B, }, .condition = "" }, 30 | .{ .code = 0xFB16, .lower = &.{ 0xFB16, }, .title = &.{ 0x054E, 0x0576, }, .upper = &.{ 0x054E, 0x0546, }, .condition = "" }, 31 | .{ .code = 0xFB17, .lower = &.{ 0xFB17, }, .title = &.{ 0x0544, 0x056D, }, .upper = &.{ 0x0544, 0x053D, }, .condition = "" }, 32 | .{ .code = 0x0149, .lower = &.{ 0x0149, }, .title = &.{ 0x02BC, 0x004E, }, .upper = &.{ 0x02BC, 0x004E, }, .condition = "" }, 33 | .{ .code = 0x0390, .lower = &.{ 0x0390, }, .title = &.{ 0x0399, 0x0308, 0x0301, }, .upper = &.{ 0x0399, 0x0308, 0x0301, }, .condition = "" }, 34 | .{ .code = 0x03B0, .lower = &.{ 0x03B0, }, .title = &.{ 0x03A5, 0x0308, 0x0301, }, .upper = &.{ 0x03A5, 0x0308, 0x0301, }, .condition = "" }, 35 | .{ .code = 0x01F0, .lower = &.{ 0x01F0, }, .title = &.{ 0x004A, 0x030C, }, .upper = &.{ 0x004A, 0x030C, }, .condition = "" }, 36 | .{ .code = 0x1E96, .lower = &.{ 0x1E96, }, .title = &.{ 0x0048, 0x0331, }, .upper = &.{ 0x0048, 0x0331, }, .condition = "" }, 37 | .{ .code = 0x1E97, .lower = &.{ 0x1E97, }, .title = &.{ 0x0054, 0x0308, }, .upper = &.{ 0x0054, 0x0308, }, .condition = "" }, 38 | .{ .code = 0x1E98, .lower = &.{ 0x1E98, }, .title = &.{ 0x0057, 0x030A, }, .upper = &.{ 0x0057, 0x030A, }, .condition = "" }, 39 | .{ .code = 0x1E99, .lower = &.{ 0x1E99, }, .title = &.{ 0x0059, 0x030A, }, .upper = &.{ 0x0059, 0x030A, }, .condition = "" }, 40 | .{ .code = 0x1E9A, .lower = &.{ 0x1E9A, }, .title = &.{ 0x0041, 0x02BE, }, .upper = &.{ 0x0041, 0x02BE, }, .condition = "" }, 41 | .{ .code = 0x1F50, .lower = &.{ 0x1F50, }, .title = &.{ 0x03A5, 0x0313, }, .upper = &.{ 0x03A5, 0x0313, }, .condition = "" }, 42 | .{ .code = 0x1F52, .lower = &.{ 0x1F52, }, .title = &.{ 0x03A5, 0x0313, 0x0300, }, .upper = &.{ 0x03A5, 0x0313, 0x0300, }, .condition = "" }, 43 | .{ .code = 0x1F54, .lower = &.{ 0x1F54, }, .title = &.{ 0x03A5, 0x0313, 0x0301, }, .upper = &.{ 0x03A5, 0x0313, 0x0301, }, .condition = "" }, 44 | .{ .code = 0x1F56, .lower = &.{ 0x1F56, }, .title = &.{ 0x03A5, 0x0313, 0x0342, }, .upper = &.{ 0x03A5, 0x0313, 0x0342, }, .condition = "" }, 45 | .{ .code = 0x1FB6, .lower = &.{ 0x1FB6, }, .title = &.{ 0x0391, 0x0342, }, .upper = &.{ 0x0391, 0x0342, }, .condition = "" }, 46 | .{ .code = 0x1FC6, .lower = &.{ 0x1FC6, }, .title = &.{ 0x0397, 0x0342, }, .upper = &.{ 0x0397, 0x0342, }, .condition = "" }, 47 | .{ .code = 0x1FD2, .lower = &.{ 0x1FD2, }, .title = &.{ 0x0399, 0x0308, 0x0300, }, .upper = &.{ 0x0399, 0x0308, 0x0300, }, .condition = "" }, 48 | .{ .code = 0x1FD3, .lower = &.{ 0x1FD3, }, .title = &.{ 0x0399, 0x0308, 0x0301, }, .upper = &.{ 0x0399, 0x0308, 0x0301, }, .condition = "" }, 49 | .{ .code = 0x1FD6, .lower = &.{ 0x1FD6, }, .title = &.{ 0x0399, 0x0342, }, .upper = &.{ 0x0399, 0x0342, }, .condition = "" }, 50 | .{ .code = 0x1FD7, .lower = &.{ 0x1FD7, }, .title = &.{ 0x0399, 0x0308, 0x0342, }, .upper = &.{ 0x0399, 0x0308, 0x0342, }, .condition = "" }, 51 | .{ .code = 0x1FE2, .lower = &.{ 0x1FE2, }, .title = &.{ 0x03A5, 0x0308, 0x0300, }, .upper = &.{ 0x03A5, 0x0308, 0x0300, }, .condition = "" }, 52 | .{ .code = 0x1FE3, .lower = &.{ 0x1FE3, }, .title = &.{ 0x03A5, 0x0308, 0x0301, }, .upper = &.{ 0x03A5, 0x0308, 0x0301, }, .condition = "" }, 53 | .{ .code = 0x1FE4, .lower = &.{ 0x1FE4, }, .title = &.{ 0x03A1, 0x0313, }, .upper = &.{ 0x03A1, 0x0313, }, .condition = "" }, 54 | .{ .code = 0x1FE6, .lower = &.{ 0x1FE6, }, .title = &.{ 0x03A5, 0x0342, }, .upper = &.{ 0x03A5, 0x0342, }, .condition = "" }, 55 | .{ .code = 0x1FE7, .lower = &.{ 0x1FE7, }, .title = &.{ 0x03A5, 0x0308, 0x0342, }, .upper = &.{ 0x03A5, 0x0308, 0x0342, }, .condition = "" }, 56 | .{ .code = 0x1FF6, .lower = &.{ 0x1FF6, }, .title = &.{ 0x03A9, 0x0342, }, .upper = &.{ 0x03A9, 0x0342, }, .condition = "" }, 57 | .{ .code = 0x1F80, .lower = &.{ 0x1F80, }, .title = &.{ 0x1F88, }, .upper = &.{ 0x1F08, 0x0399, }, .condition = "" }, 58 | .{ .code = 0x1F81, .lower = &.{ 0x1F81, }, .title = &.{ 0x1F89, }, .upper = &.{ 0x1F09, 0x0399, }, .condition = "" }, 59 | .{ .code = 0x1F82, .lower = &.{ 0x1F82, }, .title = &.{ 0x1F8A, }, .upper = &.{ 0x1F0A, 0x0399, }, .condition = "" }, 60 | .{ .code = 0x1F83, .lower = &.{ 0x1F83, }, .title = &.{ 0x1F8B, }, .upper = &.{ 0x1F0B, 0x0399, }, .condition = "" }, 61 | .{ .code = 0x1F84, .lower = &.{ 0x1F84, }, .title = &.{ 0x1F8C, }, .upper = &.{ 0x1F0C, 0x0399, }, .condition = "" }, 62 | .{ .code = 0x1F85, .lower = &.{ 0x1F85, }, .title = &.{ 0x1F8D, }, .upper = &.{ 0x1F0D, 0x0399, }, .condition = "" }, 63 | .{ .code = 0x1F86, .lower = &.{ 0x1F86, }, .title = &.{ 0x1F8E, }, .upper = &.{ 0x1F0E, 0x0399, }, .condition = "" }, 64 | .{ .code = 0x1F87, .lower = &.{ 0x1F87, }, .title = &.{ 0x1F8F, }, .upper = &.{ 0x1F0F, 0x0399, }, .condition = "" }, 65 | .{ .code = 0x1F88, .lower = &.{ 0x1F80, }, .title = &.{ 0x1F88, }, .upper = &.{ 0x1F08, 0x0399, }, .condition = "" }, 66 | .{ .code = 0x1F89, .lower = &.{ 0x1F81, }, .title = &.{ 0x1F89, }, .upper = &.{ 0x1F09, 0x0399, }, .condition = "" }, 67 | .{ .code = 0x1F8A, .lower = &.{ 0x1F82, }, .title = &.{ 0x1F8A, }, .upper = &.{ 0x1F0A, 0x0399, }, .condition = "" }, 68 | .{ .code = 0x1F8B, .lower = &.{ 0x1F83, }, .title = &.{ 0x1F8B, }, .upper = &.{ 0x1F0B, 0x0399, }, .condition = "" }, 69 | .{ .code = 0x1F8C, .lower = &.{ 0x1F84, }, .title = &.{ 0x1F8C, }, .upper = &.{ 0x1F0C, 0x0399, }, .condition = "" }, 70 | .{ .code = 0x1F8D, .lower = &.{ 0x1F85, }, .title = &.{ 0x1F8D, }, .upper = &.{ 0x1F0D, 0x0399, }, .condition = "" }, 71 | .{ .code = 0x1F8E, .lower = &.{ 0x1F86, }, .title = &.{ 0x1F8E, }, .upper = &.{ 0x1F0E, 0x0399, }, .condition = "" }, 72 | .{ .code = 0x1F8F, .lower = &.{ 0x1F87, }, .title = &.{ 0x1F8F, }, .upper = &.{ 0x1F0F, 0x0399, }, .condition = "" }, 73 | .{ .code = 0x1F90, .lower = &.{ 0x1F90, }, .title = &.{ 0x1F98, }, .upper = &.{ 0x1F28, 0x0399, }, .condition = "" }, 74 | .{ .code = 0x1F91, .lower = &.{ 0x1F91, }, .title = &.{ 0x1F99, }, .upper = &.{ 0x1F29, 0x0399, }, .condition = "" }, 75 | .{ .code = 0x1F92, .lower = &.{ 0x1F92, }, .title = &.{ 0x1F9A, }, .upper = &.{ 0x1F2A, 0x0399, }, .condition = "" }, 76 | .{ .code = 0x1F93, .lower = &.{ 0x1F93, }, .title = &.{ 0x1F9B, }, .upper = &.{ 0x1F2B, 0x0399, }, .condition = "" }, 77 | .{ .code = 0x1F94, .lower = &.{ 0x1F94, }, .title = &.{ 0x1F9C, }, .upper = &.{ 0x1F2C, 0x0399, }, .condition = "" }, 78 | .{ .code = 0x1F95, .lower = &.{ 0x1F95, }, .title = &.{ 0x1F9D, }, .upper = &.{ 0x1F2D, 0x0399, }, .condition = "" }, 79 | .{ .code = 0x1F96, .lower = &.{ 0x1F96, }, .title = &.{ 0x1F9E, }, .upper = &.{ 0x1F2E, 0x0399, }, .condition = "" }, 80 | .{ .code = 0x1F97, .lower = &.{ 0x1F97, }, .title = &.{ 0x1F9F, }, .upper = &.{ 0x1F2F, 0x0399, }, .condition = "" }, 81 | .{ .code = 0x1F98, .lower = &.{ 0x1F90, }, .title = &.{ 0x1F98, }, .upper = &.{ 0x1F28, 0x0399, }, .condition = "" }, 82 | .{ .code = 0x1F99, .lower = &.{ 0x1F91, }, .title = &.{ 0x1F99, }, .upper = &.{ 0x1F29, 0x0399, }, .condition = "" }, 83 | .{ .code = 0x1F9A, .lower = &.{ 0x1F92, }, .title = &.{ 0x1F9A, }, .upper = &.{ 0x1F2A, 0x0399, }, .condition = "" }, 84 | .{ .code = 0x1F9B, .lower = &.{ 0x1F93, }, .title = &.{ 0x1F9B, }, .upper = &.{ 0x1F2B, 0x0399, }, .condition = "" }, 85 | .{ .code = 0x1F9C, .lower = &.{ 0x1F94, }, .title = &.{ 0x1F9C, }, .upper = &.{ 0x1F2C, 0x0399, }, .condition = "" }, 86 | .{ .code = 0x1F9D, .lower = &.{ 0x1F95, }, .title = &.{ 0x1F9D, }, .upper = &.{ 0x1F2D, 0x0399, }, .condition = "" }, 87 | .{ .code = 0x1F9E, .lower = &.{ 0x1F96, }, .title = &.{ 0x1F9E, }, .upper = &.{ 0x1F2E, 0x0399, }, .condition = "" }, 88 | .{ .code = 0x1F9F, .lower = &.{ 0x1F97, }, .title = &.{ 0x1F9F, }, .upper = &.{ 0x1F2F, 0x0399, }, .condition = "" }, 89 | .{ .code = 0x1FA0, .lower = &.{ 0x1FA0, }, .title = &.{ 0x1FA8, }, .upper = &.{ 0x1F68, 0x0399, }, .condition = "" }, 90 | .{ .code = 0x1FA1, .lower = &.{ 0x1FA1, }, .title = &.{ 0x1FA9, }, .upper = &.{ 0x1F69, 0x0399, }, .condition = "" }, 91 | .{ .code = 0x1FA2, .lower = &.{ 0x1FA2, }, .title = &.{ 0x1FAA, }, .upper = &.{ 0x1F6A, 0x0399, }, .condition = "" }, 92 | .{ .code = 0x1FA3, .lower = &.{ 0x1FA3, }, .title = &.{ 0x1FAB, }, .upper = &.{ 0x1F6B, 0x0399, }, .condition = "" }, 93 | .{ .code = 0x1FA4, .lower = &.{ 0x1FA4, }, .title = &.{ 0x1FAC, }, .upper = &.{ 0x1F6C, 0x0399, }, .condition = "" }, 94 | .{ .code = 0x1FA5, .lower = &.{ 0x1FA5, }, .title = &.{ 0x1FAD, }, .upper = &.{ 0x1F6D, 0x0399, }, .condition = "" }, 95 | .{ .code = 0x1FA6, .lower = &.{ 0x1FA6, }, .title = &.{ 0x1FAE, }, .upper = &.{ 0x1F6E, 0x0399, }, .condition = "" }, 96 | .{ .code = 0x1FA7, .lower = &.{ 0x1FA7, }, .title = &.{ 0x1FAF, }, .upper = &.{ 0x1F6F, 0x0399, }, .condition = "" }, 97 | .{ .code = 0x1FA8, .lower = &.{ 0x1FA0, }, .title = &.{ 0x1FA8, }, .upper = &.{ 0x1F68, 0x0399, }, .condition = "" }, 98 | .{ .code = 0x1FA9, .lower = &.{ 0x1FA1, }, .title = &.{ 0x1FA9, }, .upper = &.{ 0x1F69, 0x0399, }, .condition = "" }, 99 | .{ .code = 0x1FAA, .lower = &.{ 0x1FA2, }, .title = &.{ 0x1FAA, }, .upper = &.{ 0x1F6A, 0x0399, }, .condition = "" }, 100 | .{ .code = 0x1FAB, .lower = &.{ 0x1FA3, }, .title = &.{ 0x1FAB, }, .upper = &.{ 0x1F6B, 0x0399, }, .condition = "" }, 101 | .{ .code = 0x1FAC, .lower = &.{ 0x1FA4, }, .title = &.{ 0x1FAC, }, .upper = &.{ 0x1F6C, 0x0399, }, .condition = "" }, 102 | .{ .code = 0x1FAD, .lower = &.{ 0x1FA5, }, .title = &.{ 0x1FAD, }, .upper = &.{ 0x1F6D, 0x0399, }, .condition = "" }, 103 | .{ .code = 0x1FAE, .lower = &.{ 0x1FA6, }, .title = &.{ 0x1FAE, }, .upper = &.{ 0x1F6E, 0x0399, }, .condition = "" }, 104 | .{ .code = 0x1FAF, .lower = &.{ 0x1FA7, }, .title = &.{ 0x1FAF, }, .upper = &.{ 0x1F6F, 0x0399, }, .condition = "" }, 105 | .{ .code = 0x1FB3, .lower = &.{ 0x1FB3, }, .title = &.{ 0x1FBC, }, .upper = &.{ 0x0391, 0x0399, }, .condition = "" }, 106 | .{ .code = 0x1FBC, .lower = &.{ 0x1FB3, }, .title = &.{ 0x1FBC, }, .upper = &.{ 0x0391, 0x0399, }, .condition = "" }, 107 | .{ .code = 0x1FC3, .lower = &.{ 0x1FC3, }, .title = &.{ 0x1FCC, }, .upper = &.{ 0x0397, 0x0399, }, .condition = "" }, 108 | .{ .code = 0x1FCC, .lower = &.{ 0x1FC3, }, .title = &.{ 0x1FCC, }, .upper = &.{ 0x0397, 0x0399, }, .condition = "" }, 109 | .{ .code = 0x1FF3, .lower = &.{ 0x1FF3, }, .title = &.{ 0x1FFC, }, .upper = &.{ 0x03A9, 0x0399, }, .condition = "" }, 110 | .{ .code = 0x1FFC, .lower = &.{ 0x1FF3, }, .title = &.{ 0x1FFC, }, .upper = &.{ 0x03A9, 0x0399, }, .condition = "" }, 111 | .{ .code = 0x1FB2, .lower = &.{ 0x1FB2, }, .title = &.{ 0x1FBA, 0x0345, }, .upper = &.{ 0x1FBA, 0x0399, }, .condition = "" }, 112 | .{ .code = 0x1FB4, .lower = &.{ 0x1FB4, }, .title = &.{ 0x0386, 0x0345, }, .upper = &.{ 0x0386, 0x0399, }, .condition = "" }, 113 | .{ .code = 0x1FC2, .lower = &.{ 0x1FC2, }, .title = &.{ 0x1FCA, 0x0345, }, .upper = &.{ 0x1FCA, 0x0399, }, .condition = "" }, 114 | .{ .code = 0x1FC4, .lower = &.{ 0x1FC4, }, .title = &.{ 0x0389, 0x0345, }, .upper = &.{ 0x0389, 0x0399, }, .condition = "" }, 115 | .{ .code = 0x1FF2, .lower = &.{ 0x1FF2, }, .title = &.{ 0x1FFA, 0x0345, }, .upper = &.{ 0x1FFA, 0x0399, }, .condition = "" }, 116 | .{ .code = 0x1FF4, .lower = &.{ 0x1FF4, }, .title = &.{ 0x038F, 0x0345, }, .upper = &.{ 0x038F, 0x0399, }, .condition = "" }, 117 | .{ .code = 0x1FB7, .lower = &.{ 0x1FB7, }, .title = &.{ 0x0391, 0x0342, 0x0345, }, .upper = &.{ 0x0391, 0x0342, 0x0399, }, .condition = "" }, 118 | .{ .code = 0x1FC7, .lower = &.{ 0x1FC7, }, .title = &.{ 0x0397, 0x0342, 0x0345, }, .upper = &.{ 0x0397, 0x0342, 0x0399, }, .condition = "" }, 119 | .{ .code = 0x1FF7, .lower = &.{ 0x1FF7, }, .title = &.{ 0x03A9, 0x0342, 0x0345, }, .upper = &.{ 0x03A9, 0x0342, 0x0399, }, .condition = "" }, 120 | .{ .code = 0x03A3, .lower = &.{ 0x03C2, }, .title = &.{ 0x03A3, }, .upper = &.{ 0x03A3, }, .condition = "Final_Sigma" }, 121 | .{ .code = 0x0307, .lower = &.{ 0x0307, }, .title = &.{ }, .upper = &.{ }, .condition = "lt After_Soft_Dotted" }, 122 | .{ .code = 0x0049, .lower = &.{ 0x0069, 0x0307, }, .title = &.{ 0x0049, }, .upper = &.{ 0x0049, }, .condition = "lt More_Above" }, 123 | .{ .code = 0x004A, .lower = &.{ 0x006A, 0x0307, }, .title = &.{ 0x004A, }, .upper = &.{ 0x004A, }, .condition = "lt More_Above" }, 124 | .{ .code = 0x012E, .lower = &.{ 0x012F, 0x0307, }, .title = &.{ 0x012E, }, .upper = &.{ 0x012E, }, .condition = "lt More_Above" }, 125 | .{ .code = 0x00CC, .lower = &.{ 0x0069, 0x0307, 0x0300, }, .title = &.{ 0x00CC, }, .upper = &.{ 0x00CC, }, .condition = "lt" }, 126 | .{ .code = 0x00CD, .lower = &.{ 0x0069, 0x0307, 0x0301, }, .title = &.{ 0x00CD, }, .upper = &.{ 0x00CD, }, .condition = "lt" }, 127 | .{ .code = 0x0128, .lower = &.{ 0x0069, 0x0307, 0x0303, }, .title = &.{ 0x0128, }, .upper = &.{ 0x0128, }, .condition = "lt" }, 128 | .{ .code = 0x0130, .lower = &.{ 0x0069, }, .title = &.{ 0x0130, }, .upper = &.{ 0x0130, }, .condition = "tr" }, 129 | .{ .code = 0x0130, .lower = &.{ 0x0069, }, .title = &.{ 0x0130, }, .upper = &.{ 0x0130, }, .condition = "az" }, 130 | .{ .code = 0x0307, .lower = &.{ }, .title = &.{ 0x0307, }, .upper = &.{ 0x0307, }, .condition = "tr After_I" }, 131 | .{ .code = 0x0307, .lower = &.{ }, .title = &.{ 0x0307, }, .upper = &.{ 0x0307, }, .condition = "az After_I" }, 132 | .{ .code = 0x0049, .lower = &.{ 0x0131, }, .title = &.{ 0x0049, }, .upper = &.{ 0x0049, }, .condition = "tr Not_Before_Dot" }, 133 | .{ .code = 0x0049, .lower = &.{ 0x0131, }, .title = &.{ 0x0049, }, .upper = &.{ 0x0049, }, .condition = "az Not_Before_Dot" }, 134 | .{ .code = 0x0069, .lower = &.{ 0x0069, }, .title = &.{ 0x0130, }, .upper = &.{ 0x0130, }, .condition = "tr" }, 135 | .{ .code = 0x0069, .lower = &.{ 0x0069, }, .title = &.{ 0x0130, }, .upper = &.{ 0x0130, }, .condition = "az" }, 136 | }; 137 | -------------------------------------------------------------------------------- /src/cjk_radicals.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/CJKRadicals.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const CJKRadical = struct { 9 | number: u8, 10 | simplified: bool, 11 | character: ?u21, 12 | ideograph: u21, 13 | }; 14 | 15 | pub const data = [_]CJKRadical{ 16 | .{ .number = 1, .simplified = false, .character = 0x2F00, .ideograph = 0x4E00 }, 17 | .{ .number = 2, .simplified = false, .character = 0x2F01, .ideograph = 0x4E28 }, 18 | .{ .number = 3, .simplified = false, .character = 0x2F02, .ideograph = 0x4E36 }, 19 | .{ .number = 4, .simplified = false, .character = 0x2F03, .ideograph = 0x4E3F }, 20 | .{ .number = 5, .simplified = false, .character = 0x2F04, .ideograph = 0x4E59 }, 21 | .{ .number = 6, .simplified = false, .character = 0x2F05, .ideograph = 0x4E85 }, 22 | .{ .number = 7, .simplified = false, .character = 0x2F06, .ideograph = 0x4E8C }, 23 | .{ .number = 8, .simplified = false, .character = 0x2F07, .ideograph = 0x4EA0 }, 24 | .{ .number = 9, .simplified = false, .character = 0x2F08, .ideograph = 0x4EBA }, 25 | .{ .number = 10, .simplified = false, .character = 0x2F09, .ideograph = 0x513F }, 26 | .{ .number = 11, .simplified = false, .character = 0x2F0A, .ideograph = 0x5165 }, 27 | .{ .number = 12, .simplified = false, .character = 0x2F0B, .ideograph = 0x516B }, 28 | .{ .number = 13, .simplified = false, .character = 0x2F0C, .ideograph = 0x5182 }, 29 | .{ .number = 14, .simplified = false, .character = 0x2F0D, .ideograph = 0x5196 }, 30 | .{ .number = 15, .simplified = false, .character = 0x2F0E, .ideograph = 0x51AB }, 31 | .{ .number = 16, .simplified = false, .character = 0x2F0F, .ideograph = 0x51E0 }, 32 | .{ .number = 17, .simplified = false, .character = 0x2F10, .ideograph = 0x51F5 }, 33 | .{ .number = 18, .simplified = false, .character = 0x2F11, .ideograph = 0x5200 }, 34 | .{ .number = 19, .simplified = false, .character = 0x2F12, .ideograph = 0x529B }, 35 | .{ .number = 20, .simplified = false, .character = 0x2F13, .ideograph = 0x52F9 }, 36 | .{ .number = 21, .simplified = false, .character = 0x2F14, .ideograph = 0x5315 }, 37 | .{ .number = 22, .simplified = false, .character = 0x2F15, .ideograph = 0x531A }, 38 | .{ .number = 23, .simplified = false, .character = 0x2F16, .ideograph = 0x5338 }, 39 | .{ .number = 24, .simplified = false, .character = 0x2F17, .ideograph = 0x5341 }, 40 | .{ .number = 25, .simplified = false, .character = 0x2F18, .ideograph = 0x535C }, 41 | .{ .number = 26, .simplified = false, .character = 0x2F19, .ideograph = 0x5369 }, 42 | .{ .number = 27, .simplified = false, .character = 0x2F1A, .ideograph = 0x5382 }, 43 | .{ .number = 28, .simplified = false, .character = 0x2F1B, .ideograph = 0x53B6 }, 44 | .{ .number = 29, .simplified = false, .character = 0x2F1C, .ideograph = 0x53C8 }, 45 | .{ .number = 30, .simplified = false, .character = 0x2F1D, .ideograph = 0x53E3 }, 46 | .{ .number = 31, .simplified = false, .character = 0x2F1E, .ideograph = 0x56D7 }, 47 | .{ .number = 32, .simplified = false, .character = 0x2F1F, .ideograph = 0x571F }, 48 | .{ .number = 33, .simplified = false, .character = 0x2F20, .ideograph = 0x58EB }, 49 | .{ .number = 34, .simplified = false, .character = 0x2F21, .ideograph = 0x5902 }, 50 | .{ .number = 35, .simplified = false, .character = 0x2F22, .ideograph = 0x590A }, 51 | .{ .number = 36, .simplified = false, .character = 0x2F23, .ideograph = 0x5915 }, 52 | .{ .number = 37, .simplified = false, .character = 0x2F24, .ideograph = 0x5927 }, 53 | .{ .number = 38, .simplified = false, .character = 0x2F25, .ideograph = 0x5973 }, 54 | .{ .number = 39, .simplified = false, .character = 0x2F26, .ideograph = 0x5B50 }, 55 | .{ .number = 40, .simplified = false, .character = 0x2F27, .ideograph = 0x5B80 }, 56 | .{ .number = 41, .simplified = false, .character = 0x2F28, .ideograph = 0x5BF8 }, 57 | .{ .number = 42, .simplified = false, .character = 0x2F29, .ideograph = 0x5C0F }, 58 | .{ .number = 43, .simplified = false, .character = 0x2F2A, .ideograph = 0x5C22 }, 59 | .{ .number = 44, .simplified = false, .character = 0x2F2B, .ideograph = 0x5C38 }, 60 | .{ .number = 45, .simplified = false, .character = 0x2F2C, .ideograph = 0x5C6E }, 61 | .{ .number = 46, .simplified = false, .character = 0x2F2D, .ideograph = 0x5C71 }, 62 | .{ .number = 47, .simplified = false, .character = 0x2F2E, .ideograph = 0x5DDB }, 63 | .{ .number = 48, .simplified = false, .character = 0x2F2F, .ideograph = 0x5DE5 }, 64 | .{ .number = 49, .simplified = false, .character = 0x2F30, .ideograph = 0x5DF1 }, 65 | .{ .number = 50, .simplified = false, .character = 0x2F31, .ideograph = 0x5DFE }, 66 | .{ .number = 51, .simplified = false, .character = 0x2F32, .ideograph = 0x5E72 }, 67 | .{ .number = 52, .simplified = false, .character = 0x2F33, .ideograph = 0x5E7A }, 68 | .{ .number = 53, .simplified = false, .character = 0x2F34, .ideograph = 0x5E7F }, 69 | .{ .number = 54, .simplified = false, .character = 0x2F35, .ideograph = 0x5EF4 }, 70 | .{ .number = 55, .simplified = false, .character = 0x2F36, .ideograph = 0x5EFE }, 71 | .{ .number = 56, .simplified = false, .character = 0x2F37, .ideograph = 0x5F0B }, 72 | .{ .number = 57, .simplified = false, .character = 0x2F38, .ideograph = 0x5F13 }, 73 | .{ .number = 58, .simplified = false, .character = 0x2F39, .ideograph = 0x5F50 }, 74 | .{ .number = 59, .simplified = false, .character = 0x2F3A, .ideograph = 0x5F61 }, 75 | .{ .number = 60, .simplified = false, .character = 0x2F3B, .ideograph = 0x5F73 }, 76 | .{ .number = 61, .simplified = false, .character = 0x2F3C, .ideograph = 0x5FC3 }, 77 | .{ .number = 62, .simplified = false, .character = 0x2F3D, .ideograph = 0x6208 }, 78 | .{ .number = 63, .simplified = false, .character = 0x2F3E, .ideograph = 0x6236 }, 79 | .{ .number = 64, .simplified = false, .character = 0x2F3F, .ideograph = 0x624B }, 80 | .{ .number = 65, .simplified = false, .character = 0x2F40, .ideograph = 0x652F }, 81 | .{ .number = 66, .simplified = false, .character = 0x2F41, .ideograph = 0x6534 }, 82 | .{ .number = 67, .simplified = false, .character = 0x2F42, .ideograph = 0x6587 }, 83 | .{ .number = 68, .simplified = false, .character = 0x2F43, .ideograph = 0x6597 }, 84 | .{ .number = 69, .simplified = false, .character = 0x2F44, .ideograph = 0x65A4 }, 85 | .{ .number = 70, .simplified = false, .character = 0x2F45, .ideograph = 0x65B9 }, 86 | .{ .number = 71, .simplified = false, .character = 0x2F46, .ideograph = 0x65E0 }, 87 | .{ .number = 72, .simplified = false, .character = 0x2F47, .ideograph = 0x65E5 }, 88 | .{ .number = 73, .simplified = false, .character = 0x2F48, .ideograph = 0x66F0 }, 89 | .{ .number = 74, .simplified = false, .character = 0x2F49, .ideograph = 0x6708 }, 90 | .{ .number = 75, .simplified = false, .character = 0x2F4A, .ideograph = 0x6728 }, 91 | .{ .number = 76, .simplified = false, .character = 0x2F4B, .ideograph = 0x6B20 }, 92 | .{ .number = 77, .simplified = false, .character = 0x2F4C, .ideograph = 0x6B62 }, 93 | .{ .number = 78, .simplified = false, .character = 0x2F4D, .ideograph = 0x6B79 }, 94 | .{ .number = 79, .simplified = false, .character = 0x2F4E, .ideograph = 0x6BB3 }, 95 | .{ .number = 80, .simplified = false, .character = 0x2F4F, .ideograph = 0x6BCB }, 96 | .{ .number = 81, .simplified = false, .character = 0x2F50, .ideograph = 0x6BD4 }, 97 | .{ .number = 82, .simplified = false, .character = 0x2F51, .ideograph = 0x6BDB }, 98 | .{ .number = 83, .simplified = false, .character = 0x2F52, .ideograph = 0x6C0F }, 99 | .{ .number = 84, .simplified = false, .character = 0x2F53, .ideograph = 0x6C14 }, 100 | .{ .number = 85, .simplified = false, .character = 0x2F54, .ideograph = 0x6C34 }, 101 | .{ .number = 86, .simplified = false, .character = 0x2F55, .ideograph = 0x706B }, 102 | .{ .number = 87, .simplified = false, .character = 0x2F56, .ideograph = 0x722A }, 103 | .{ .number = 88, .simplified = false, .character = 0x2F57, .ideograph = 0x7236 }, 104 | .{ .number = 89, .simplified = false, .character = 0x2F58, .ideograph = 0x723B }, 105 | .{ .number = 90, .simplified = false, .character = 0x2F59, .ideograph = 0x723F }, 106 | .{ .number = 90, .simplified = true, .character = 0x2EA6, .ideograph = 0x4E2C }, 107 | .{ .number = 91, .simplified = false, .character = 0x2F5A, .ideograph = 0x7247 }, 108 | .{ .number = 92, .simplified = false, .character = 0x2F5B, .ideograph = 0x7259 }, 109 | .{ .number = 93, .simplified = false, .character = 0x2F5C, .ideograph = 0x725B }, 110 | .{ .number = 94, .simplified = false, .character = 0x2F5D, .ideograph = 0x72AC }, 111 | .{ .number = 95, .simplified = false, .character = 0x2F5E, .ideograph = 0x7384 }, 112 | .{ .number = 96, .simplified = false, .character = 0x2F5F, .ideograph = 0x7389 }, 113 | .{ .number = 97, .simplified = false, .character = 0x2F60, .ideograph = 0x74DC }, 114 | .{ .number = 98, .simplified = false, .character = 0x2F61, .ideograph = 0x74E6 }, 115 | .{ .number = 99, .simplified = false, .character = 0x2F62, .ideograph = 0x7518 }, 116 | .{ .number = 100, .simplified = false, .character = 0x2F63, .ideograph = 0x751F }, 117 | .{ .number = 101, .simplified = false, .character = 0x2F64, .ideograph = 0x7528 }, 118 | .{ .number = 102, .simplified = false, .character = 0x2F65, .ideograph = 0x7530 }, 119 | .{ .number = 103, .simplified = false, .character = 0x2F66, .ideograph = 0x758B }, 120 | .{ .number = 104, .simplified = false, .character = 0x2F67, .ideograph = 0x7592 }, 121 | .{ .number = 105, .simplified = false, .character = 0x2F68, .ideograph = 0x7676 }, 122 | .{ .number = 106, .simplified = false, .character = 0x2F69, .ideograph = 0x767D }, 123 | .{ .number = 107, .simplified = false, .character = 0x2F6A, .ideograph = 0x76AE }, 124 | .{ .number = 108, .simplified = false, .character = 0x2F6B, .ideograph = 0x76BF }, 125 | .{ .number = 109, .simplified = false, .character = 0x2F6C, .ideograph = 0x76EE }, 126 | .{ .number = 110, .simplified = false, .character = 0x2F6D, .ideograph = 0x77DB }, 127 | .{ .number = 111, .simplified = false, .character = 0x2F6E, .ideograph = 0x77E2 }, 128 | .{ .number = 112, .simplified = false, .character = 0x2F6F, .ideograph = 0x77F3 }, 129 | .{ .number = 113, .simplified = false, .character = 0x2F70, .ideograph = 0x793A }, 130 | .{ .number = 114, .simplified = false, .character = 0x2F71, .ideograph = 0x79B8 }, 131 | .{ .number = 115, .simplified = false, .character = 0x2F72, .ideograph = 0x79BE }, 132 | .{ .number = 116, .simplified = false, .character = 0x2F73, .ideograph = 0x7A74 }, 133 | .{ .number = 117, .simplified = false, .character = 0x2F74, .ideograph = 0x7ACB }, 134 | .{ .number = 118, .simplified = false, .character = 0x2F75, .ideograph = 0x7AF9 }, 135 | .{ .number = 119, .simplified = false, .character = 0x2F76, .ideograph = 0x7C73 }, 136 | .{ .number = 120, .simplified = false, .character = 0x2F77, .ideograph = 0x7CF8 }, 137 | .{ .number = 120, .simplified = true, .character = 0x2EB0, .ideograph = 0x7E9F }, 138 | .{ .number = 121, .simplified = false, .character = 0x2F78, .ideograph = 0x7F36 }, 139 | .{ .number = 122, .simplified = false, .character = 0x2F79, .ideograph = 0x7F51 }, 140 | .{ .number = 123, .simplified = false, .character = 0x2F7A, .ideograph = 0x7F8A }, 141 | .{ .number = 124, .simplified = false, .character = 0x2F7B, .ideograph = 0x7FBD }, 142 | .{ .number = 125, .simplified = false, .character = 0x2F7C, .ideograph = 0x8001 }, 143 | .{ .number = 126, .simplified = false, .character = 0x2F7D, .ideograph = 0x800C }, 144 | .{ .number = 127, .simplified = false, .character = 0x2F7E, .ideograph = 0x8012 }, 145 | .{ .number = 128, .simplified = false, .character = 0x2F7F, .ideograph = 0x8033 }, 146 | .{ .number = 129, .simplified = false, .character = 0x2F80, .ideograph = 0x807F }, 147 | .{ .number = 130, .simplified = false, .character = 0x2F81, .ideograph = 0x8089 }, 148 | .{ .number = 131, .simplified = false, .character = 0x2F82, .ideograph = 0x81E3 }, 149 | .{ .number = 132, .simplified = false, .character = 0x2F83, .ideograph = 0x81EA }, 150 | .{ .number = 133, .simplified = false, .character = 0x2F84, .ideograph = 0x81F3 }, 151 | .{ .number = 134, .simplified = false, .character = 0x2F85, .ideograph = 0x81FC }, 152 | .{ .number = 135, .simplified = false, .character = 0x2F86, .ideograph = 0x820C }, 153 | .{ .number = 136, .simplified = false, .character = 0x2F87, .ideograph = 0x821B }, 154 | .{ .number = 137, .simplified = false, .character = 0x2F88, .ideograph = 0x821F }, 155 | .{ .number = 138, .simplified = false, .character = 0x2F89, .ideograph = 0x826E }, 156 | .{ .number = 139, .simplified = false, .character = 0x2F8A, .ideograph = 0x8272 }, 157 | .{ .number = 140, .simplified = false, .character = 0x2F8B, .ideograph = 0x8278 }, 158 | .{ .number = 141, .simplified = false, .character = 0x2F8C, .ideograph = 0x864D }, 159 | .{ .number = 142, .simplified = false, .character = 0x2F8D, .ideograph = 0x866B }, 160 | .{ .number = 143, .simplified = false, .character = 0x2F8E, .ideograph = 0x8840 }, 161 | .{ .number = 144, .simplified = false, .character = 0x2F8F, .ideograph = 0x884C }, 162 | .{ .number = 145, .simplified = false, .character = 0x2F90, .ideograph = 0x8863 }, 163 | .{ .number = 146, .simplified = false, .character = 0x2F91, .ideograph = 0x897E }, 164 | .{ .number = 147, .simplified = false, .character = 0x2F92, .ideograph = 0x898B }, 165 | .{ .number = 147, .simplified = true, .character = 0x2EC5, .ideograph = 0x89C1 }, 166 | .{ .number = 148, .simplified = false, .character = 0x2F93, .ideograph = 0x89D2 }, 167 | .{ .number = 149, .simplified = false, .character = 0x2F94, .ideograph = 0x8A00 }, 168 | .{ .number = 149, .simplified = true, .character = 0x2EC8, .ideograph = 0x8BA0 }, 169 | .{ .number = 150, .simplified = false, .character = 0x2F95, .ideograph = 0x8C37 }, 170 | .{ .number = 151, .simplified = false, .character = 0x2F96, .ideograph = 0x8C46 }, 171 | .{ .number = 152, .simplified = false, .character = 0x2F97, .ideograph = 0x8C55 }, 172 | .{ .number = 153, .simplified = false, .character = 0x2F98, .ideograph = 0x8C78 }, 173 | .{ .number = 154, .simplified = false, .character = 0x2F99, .ideograph = 0x8C9D }, 174 | .{ .number = 154, .simplified = true, .character = 0x2EC9, .ideograph = 0x8D1D }, 175 | .{ .number = 155, .simplified = false, .character = 0x2F9A, .ideograph = 0x8D64 }, 176 | .{ .number = 156, .simplified = false, .character = 0x2F9B, .ideograph = 0x8D70 }, 177 | .{ .number = 157, .simplified = false, .character = 0x2F9C, .ideograph = 0x8DB3 }, 178 | .{ .number = 158, .simplified = false, .character = 0x2F9D, .ideograph = 0x8EAB }, 179 | .{ .number = 159, .simplified = false, .character = 0x2F9E, .ideograph = 0x8ECA }, 180 | .{ .number = 159, .simplified = true, .character = 0x2ECB, .ideograph = 0x8F66 }, 181 | .{ .number = 160, .simplified = false, .character = 0x2F9F, .ideograph = 0x8F9B }, 182 | .{ .number = 161, .simplified = false, .character = 0x2FA0, .ideograph = 0x8FB0 }, 183 | .{ .number = 162, .simplified = false, .character = 0x2FA1, .ideograph = 0x8FB5 }, 184 | .{ .number = 163, .simplified = false, .character = 0x2FA2, .ideograph = 0x9091 }, 185 | .{ .number = 164, .simplified = false, .character = 0x2FA3, .ideograph = 0x9149 }, 186 | .{ .number = 165, .simplified = false, .character = 0x2FA4, .ideograph = 0x91C6 }, 187 | .{ .number = 166, .simplified = false, .character = 0x2FA5, .ideograph = 0x91CC }, 188 | .{ .number = 167, .simplified = false, .character = 0x2FA6, .ideograph = 0x91D1 }, 189 | .{ .number = 167, .simplified = true, .character = 0x2ED0, .ideograph = 0x9485 }, 190 | .{ .number = 168, .simplified = false, .character = 0x2FA7, .ideograph = 0x9577 }, 191 | .{ .number = 168, .simplified = true, .character = 0x2ED3, .ideograph = 0x957F }, 192 | .{ .number = 169, .simplified = false, .character = 0x2FA8, .ideograph = 0x9580 }, 193 | .{ .number = 169, .simplified = true, .character = 0x2ED4, .ideograph = 0x95E8 }, 194 | .{ .number = 170, .simplified = false, .character = 0x2FA9, .ideograph = 0x961C }, 195 | .{ .number = 171, .simplified = false, .character = 0x2FAA, .ideograph = 0x96B6 }, 196 | .{ .number = 172, .simplified = false, .character = 0x2FAB, .ideograph = 0x96B9 }, 197 | .{ .number = 173, .simplified = false, .character = 0x2FAC, .ideograph = 0x96E8 }, 198 | .{ .number = 174, .simplified = false, .character = 0x2FAD, .ideograph = 0x9751 }, 199 | .{ .number = 175, .simplified = false, .character = 0x2FAE, .ideograph = 0x975E }, 200 | .{ .number = 176, .simplified = false, .character = 0x2FAF, .ideograph = 0x9762 }, 201 | .{ .number = 177, .simplified = false, .character = 0x2FB0, .ideograph = 0x9769 }, 202 | .{ .number = 178, .simplified = false, .character = 0x2FB1, .ideograph = 0x97CB }, 203 | .{ .number = 178, .simplified = true, .character = 0x2ED9, .ideograph = 0x97E6 }, 204 | .{ .number = 179, .simplified = false, .character = 0x2FB2, .ideograph = 0x97ED }, 205 | .{ .number = 180, .simplified = false, .character = 0x2FB3, .ideograph = 0x97F3 }, 206 | .{ .number = 181, .simplified = false, .character = 0x2FB4, .ideograph = 0x9801 }, 207 | .{ .number = 181, .simplified = true, .character = 0x2EDA, .ideograph = 0x9875 }, 208 | .{ .number = 182, .simplified = false, .character = 0x2FB5, .ideograph = 0x98A8 }, 209 | .{ .number = 182, .simplified = true, .character = 0x2EDB, .ideograph = 0x98CE }, 210 | .{ .number = 182, .simplified = true, .character = null, .ideograph = 0x322C4 }, 211 | .{ .number = 183, .simplified = false, .character = 0x2FB6, .ideograph = 0x98DB }, 212 | .{ .number = 183, .simplified = true, .character = 0x2EDC, .ideograph = 0x98DE }, 213 | .{ .number = 184, .simplified = false, .character = 0x2FB7, .ideograph = 0x98DF }, 214 | .{ .number = 184, .simplified = true, .character = 0x2EE0, .ideograph = 0x9963 }, 215 | .{ .number = 185, .simplified = false, .character = 0x2FB8, .ideograph = 0x9996 }, 216 | .{ .number = 186, .simplified = false, .character = 0x2FB9, .ideograph = 0x9999 }, 217 | .{ .number = 187, .simplified = false, .character = 0x2FBA, .ideograph = 0x99AC }, 218 | .{ .number = 187, .simplified = true, .character = 0x2EE2, .ideograph = 0x9A6C }, 219 | .{ .number = 188, .simplified = false, .character = 0x2FBB, .ideograph = 0x9AA8 }, 220 | .{ .number = 189, .simplified = false, .character = 0x2FBC, .ideograph = 0x9AD8 }, 221 | .{ .number = 190, .simplified = false, .character = 0x2FBD, .ideograph = 0x9ADF }, 222 | .{ .number = 191, .simplified = false, .character = 0x2FBE, .ideograph = 0x9B25 }, 223 | .{ .number = 192, .simplified = false, .character = 0x2FBF, .ideograph = 0x9B2F }, 224 | .{ .number = 193, .simplified = false, .character = 0x2FC0, .ideograph = 0x9B32 }, 225 | .{ .number = 194, .simplified = false, .character = 0x2FC1, .ideograph = 0x9B3C }, 226 | .{ .number = 195, .simplified = false, .character = 0x2FC2, .ideograph = 0x9B5A }, 227 | .{ .number = 195, .simplified = true, .character = 0x2EE5, .ideograph = 0x9C7C }, 228 | .{ .number = 196, .simplified = false, .character = 0x2FC3, .ideograph = 0x9CE5 }, 229 | .{ .number = 196, .simplified = true, .character = 0x2EE6, .ideograph = 0x9E1F }, 230 | .{ .number = 197, .simplified = false, .character = 0x2FC4, .ideograph = 0x9E75 }, 231 | .{ .number = 197, .simplified = true, .character = 0x2EE7, .ideograph = 0x5364 }, 232 | .{ .number = 198, .simplified = false, .character = 0x2FC5, .ideograph = 0x9E7F }, 233 | .{ .number = 199, .simplified = false, .character = 0x2FC6, .ideograph = 0x9EA5 }, 234 | .{ .number = 199, .simplified = true, .character = 0x2EE8, .ideograph = 0x9EA6 }, 235 | .{ .number = 200, .simplified = false, .character = 0x2FC7, .ideograph = 0x9EBB }, 236 | .{ .number = 201, .simplified = false, .character = 0x2FC8, .ideograph = 0x9EC3 }, 237 | .{ .number = 201, .simplified = true, .character = 0x2EE9, .ideograph = 0x9EC4 }, 238 | .{ .number = 202, .simplified = false, .character = 0x2FC9, .ideograph = 0x9ECD }, 239 | .{ .number = 203, .simplified = false, .character = 0x2FCA, .ideograph = 0x9ED1 }, 240 | .{ .number = 204, .simplified = false, .character = 0x2FCB, .ideograph = 0x9EF9 }, 241 | .{ .number = 205, .simplified = false, .character = 0x2FCC, .ideograph = 0x9EFD }, 242 | .{ .number = 205, .simplified = true, .character = 0x2EEA, .ideograph = 0x9EFE }, 243 | .{ .number = 206, .simplified = false, .character = 0x2FCD, .ideograph = 0x9F0E }, 244 | .{ .number = 207, .simplified = false, .character = 0x2FCE, .ideograph = 0x9F13 }, 245 | .{ .number = 208, .simplified = false, .character = 0x2FCF, .ideograph = 0x9F20 }, 246 | .{ .number = 208, .simplified = true, .character = null, .ideograph = 0x9F21 }, 247 | .{ .number = 209, .simplified = false, .character = 0x2FD0, .ideograph = 0x9F3B }, 248 | .{ .number = 210, .simplified = false, .character = 0x2FD1, .ideograph = 0x9F4A }, 249 | .{ .number = 210, .simplified = true, .character = 0x2EEC, .ideograph = 0x9F50 }, 250 | .{ .number = 210, .simplified = true, .character = 0x2EEB, .ideograph = 0x6589 }, 251 | .{ .number = 211, .simplified = false, .character = 0x2FD2, .ideograph = 0x9F52 }, 252 | .{ .number = 211, .simplified = true, .character = 0x2EEE, .ideograph = 0x9F7F }, 253 | .{ .number = 211, .simplified = true, .character = 0x2EED, .ideograph = 0x6B6F }, 254 | .{ .number = 212, .simplified = false, .character = 0x2FD3, .ideograph = 0x9F8D }, 255 | .{ .number = 212, .simplified = true, .character = 0x2EF0, .ideograph = 0x9F99 }, 256 | .{ .number = 212, .simplified = true, .character = 0x2EEF, .ideograph = 0x7ADC }, 257 | .{ .number = 212, .simplified = true, .character = null, .ideograph = 0x31DE5 }, 258 | .{ .number = 213, .simplified = false, .character = 0x2FD4, .ideograph = 0x9F9C }, 259 | .{ .number = 213, .simplified = true, .character = 0x2EF3, .ideograph = 0x9F9F }, 260 | .{ .number = 213, .simplified = true, .character = 0x2EF2, .ideograph = 0x4E80 }, 261 | .{ .number = 214, .simplified = false, .character = 0x2FD5, .ideograph = 0x9FA0 }, 262 | }; 263 | -------------------------------------------------------------------------------- /src/bidi_mirroring.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/BidiMirroring.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const Mirroring = struct { 9 | codepoint: u21, 10 | mirror: u21, 11 | }; 12 | 13 | pub const data = [_]Mirroring{ 14 | .{ .codepoint = 0x0028, .mirror = 0x0029 }, 15 | .{ .codepoint = 0x0029, .mirror = 0x0028 }, 16 | .{ .codepoint = 0x003C, .mirror = 0x003E }, 17 | .{ .codepoint = 0x003E, .mirror = 0x003C }, 18 | .{ .codepoint = 0x005B, .mirror = 0x005D }, 19 | .{ .codepoint = 0x005D, .mirror = 0x005B }, 20 | .{ .codepoint = 0x007B, .mirror = 0x007D }, 21 | .{ .codepoint = 0x007D, .mirror = 0x007B }, 22 | .{ .codepoint = 0x00AB, .mirror = 0x00BB }, 23 | .{ .codepoint = 0x00BB, .mirror = 0x00AB }, 24 | .{ .codepoint = 0x0F3A, .mirror = 0x0F3B }, 25 | .{ .codepoint = 0x0F3B, .mirror = 0x0F3A }, 26 | .{ .codepoint = 0x0F3C, .mirror = 0x0F3D }, 27 | .{ .codepoint = 0x0F3D, .mirror = 0x0F3C }, 28 | .{ .codepoint = 0x169B, .mirror = 0x169C }, 29 | .{ .codepoint = 0x169C, .mirror = 0x169B }, 30 | .{ .codepoint = 0x2039, .mirror = 0x203A }, 31 | .{ .codepoint = 0x203A, .mirror = 0x2039 }, 32 | .{ .codepoint = 0x2045, .mirror = 0x2046 }, 33 | .{ .codepoint = 0x2046, .mirror = 0x2045 }, 34 | .{ .codepoint = 0x207D, .mirror = 0x207E }, 35 | .{ .codepoint = 0x207E, .mirror = 0x207D }, 36 | .{ .codepoint = 0x208D, .mirror = 0x208E }, 37 | .{ .codepoint = 0x208E, .mirror = 0x208D }, 38 | .{ .codepoint = 0x2208, .mirror = 0x220B }, 39 | .{ .codepoint = 0x2209, .mirror = 0x220C }, 40 | .{ .codepoint = 0x220A, .mirror = 0x220D }, 41 | .{ .codepoint = 0x220B, .mirror = 0x2208 }, 42 | .{ .codepoint = 0x220C, .mirror = 0x2209 }, 43 | .{ .codepoint = 0x220D, .mirror = 0x220A }, 44 | .{ .codepoint = 0x2215, .mirror = 0x29F5 }, 45 | .{ .codepoint = 0x221F, .mirror = 0x2BFE }, 46 | .{ .codepoint = 0x2220, .mirror = 0x29A3 }, 47 | .{ .codepoint = 0x2221, .mirror = 0x299B }, 48 | .{ .codepoint = 0x2222, .mirror = 0x29A0 }, 49 | .{ .codepoint = 0x2224, .mirror = 0x2AEE }, 50 | .{ .codepoint = 0x223C, .mirror = 0x223D }, 51 | .{ .codepoint = 0x223D, .mirror = 0x223C }, 52 | .{ .codepoint = 0x2243, .mirror = 0x22CD }, 53 | .{ .codepoint = 0x2245, .mirror = 0x224C }, 54 | .{ .codepoint = 0x224C, .mirror = 0x2245 }, 55 | .{ .codepoint = 0x2252, .mirror = 0x2253 }, 56 | .{ .codepoint = 0x2253, .mirror = 0x2252 }, 57 | .{ .codepoint = 0x2254, .mirror = 0x2255 }, 58 | .{ .codepoint = 0x2255, .mirror = 0x2254 }, 59 | .{ .codepoint = 0x2264, .mirror = 0x2265 }, 60 | .{ .codepoint = 0x2265, .mirror = 0x2264 }, 61 | .{ .codepoint = 0x2266, .mirror = 0x2267 }, 62 | .{ .codepoint = 0x2267, .mirror = 0x2266 }, 63 | .{ .codepoint = 0x2268, .mirror = 0x2269 }, 64 | .{ .codepoint = 0x2269, .mirror = 0x2268 }, 65 | .{ .codepoint = 0x226A, .mirror = 0x226B }, 66 | .{ .codepoint = 0x226B, .mirror = 0x226A }, 67 | .{ .codepoint = 0x226E, .mirror = 0x226F }, 68 | .{ .codepoint = 0x226F, .mirror = 0x226E }, 69 | .{ .codepoint = 0x2270, .mirror = 0x2271 }, 70 | .{ .codepoint = 0x2271, .mirror = 0x2270 }, 71 | .{ .codepoint = 0x2272, .mirror = 0x2273 }, 72 | .{ .codepoint = 0x2273, .mirror = 0x2272 }, 73 | .{ .codepoint = 0x2274, .mirror = 0x2275 }, 74 | .{ .codepoint = 0x2275, .mirror = 0x2274 }, 75 | .{ .codepoint = 0x2276, .mirror = 0x2277 }, 76 | .{ .codepoint = 0x2277, .mirror = 0x2276 }, 77 | .{ .codepoint = 0x2278, .mirror = 0x2279 }, 78 | .{ .codepoint = 0x2279, .mirror = 0x2278 }, 79 | .{ .codepoint = 0x227A, .mirror = 0x227B }, 80 | .{ .codepoint = 0x227B, .mirror = 0x227A }, 81 | .{ .codepoint = 0x227C, .mirror = 0x227D }, 82 | .{ .codepoint = 0x227D, .mirror = 0x227C }, 83 | .{ .codepoint = 0x227E, .mirror = 0x227F }, 84 | .{ .codepoint = 0x227F, .mirror = 0x227E }, 85 | .{ .codepoint = 0x2280, .mirror = 0x2281 }, 86 | .{ .codepoint = 0x2281, .mirror = 0x2280 }, 87 | .{ .codepoint = 0x2282, .mirror = 0x2283 }, 88 | .{ .codepoint = 0x2283, .mirror = 0x2282 }, 89 | .{ .codepoint = 0x2284, .mirror = 0x2285 }, 90 | .{ .codepoint = 0x2285, .mirror = 0x2284 }, 91 | .{ .codepoint = 0x2286, .mirror = 0x2287 }, 92 | .{ .codepoint = 0x2287, .mirror = 0x2286 }, 93 | .{ .codepoint = 0x2288, .mirror = 0x2289 }, 94 | .{ .codepoint = 0x2289, .mirror = 0x2288 }, 95 | .{ .codepoint = 0x228A, .mirror = 0x228B }, 96 | .{ .codepoint = 0x228B, .mirror = 0x228A }, 97 | .{ .codepoint = 0x228F, .mirror = 0x2290 }, 98 | .{ .codepoint = 0x2290, .mirror = 0x228F }, 99 | .{ .codepoint = 0x2291, .mirror = 0x2292 }, 100 | .{ .codepoint = 0x2292, .mirror = 0x2291 }, 101 | .{ .codepoint = 0x2298, .mirror = 0x29B8 }, 102 | .{ .codepoint = 0x22A2, .mirror = 0x22A3 }, 103 | .{ .codepoint = 0x22A3, .mirror = 0x22A2 }, 104 | .{ .codepoint = 0x22A6, .mirror = 0x2ADE }, 105 | .{ .codepoint = 0x22A8, .mirror = 0x2AE4 }, 106 | .{ .codepoint = 0x22A9, .mirror = 0x2AE3 }, 107 | .{ .codepoint = 0x22AB, .mirror = 0x2AE5 }, 108 | .{ .codepoint = 0x22B0, .mirror = 0x22B1 }, 109 | .{ .codepoint = 0x22B1, .mirror = 0x22B0 }, 110 | .{ .codepoint = 0x22B2, .mirror = 0x22B3 }, 111 | .{ .codepoint = 0x22B3, .mirror = 0x22B2 }, 112 | .{ .codepoint = 0x22B4, .mirror = 0x22B5 }, 113 | .{ .codepoint = 0x22B5, .mirror = 0x22B4 }, 114 | .{ .codepoint = 0x22B6, .mirror = 0x22B7 }, 115 | .{ .codepoint = 0x22B7, .mirror = 0x22B6 }, 116 | .{ .codepoint = 0x22B8, .mirror = 0x27DC }, 117 | .{ .codepoint = 0x22C9, .mirror = 0x22CA }, 118 | .{ .codepoint = 0x22CA, .mirror = 0x22C9 }, 119 | .{ .codepoint = 0x22CB, .mirror = 0x22CC }, 120 | .{ .codepoint = 0x22CC, .mirror = 0x22CB }, 121 | .{ .codepoint = 0x22CD, .mirror = 0x2243 }, 122 | .{ .codepoint = 0x22D0, .mirror = 0x22D1 }, 123 | .{ .codepoint = 0x22D1, .mirror = 0x22D0 }, 124 | .{ .codepoint = 0x22D6, .mirror = 0x22D7 }, 125 | .{ .codepoint = 0x22D7, .mirror = 0x22D6 }, 126 | .{ .codepoint = 0x22D8, .mirror = 0x22D9 }, 127 | .{ .codepoint = 0x22D9, .mirror = 0x22D8 }, 128 | .{ .codepoint = 0x22DA, .mirror = 0x22DB }, 129 | .{ .codepoint = 0x22DB, .mirror = 0x22DA }, 130 | .{ .codepoint = 0x22DC, .mirror = 0x22DD }, 131 | .{ .codepoint = 0x22DD, .mirror = 0x22DC }, 132 | .{ .codepoint = 0x22DE, .mirror = 0x22DF }, 133 | .{ .codepoint = 0x22DF, .mirror = 0x22DE }, 134 | .{ .codepoint = 0x22E0, .mirror = 0x22E1 }, 135 | .{ .codepoint = 0x22E1, .mirror = 0x22E0 }, 136 | .{ .codepoint = 0x22E2, .mirror = 0x22E3 }, 137 | .{ .codepoint = 0x22E3, .mirror = 0x22E2 }, 138 | .{ .codepoint = 0x22E4, .mirror = 0x22E5 }, 139 | .{ .codepoint = 0x22E5, .mirror = 0x22E4 }, 140 | .{ .codepoint = 0x22E6, .mirror = 0x22E7 }, 141 | .{ .codepoint = 0x22E7, .mirror = 0x22E6 }, 142 | .{ .codepoint = 0x22E8, .mirror = 0x22E9 }, 143 | .{ .codepoint = 0x22E9, .mirror = 0x22E8 }, 144 | .{ .codepoint = 0x22EA, .mirror = 0x22EB }, 145 | .{ .codepoint = 0x22EB, .mirror = 0x22EA }, 146 | .{ .codepoint = 0x22EC, .mirror = 0x22ED }, 147 | .{ .codepoint = 0x22ED, .mirror = 0x22EC }, 148 | .{ .codepoint = 0x22F0, .mirror = 0x22F1 }, 149 | .{ .codepoint = 0x22F1, .mirror = 0x22F0 }, 150 | .{ .codepoint = 0x22F2, .mirror = 0x22FA }, 151 | .{ .codepoint = 0x22F3, .mirror = 0x22FB }, 152 | .{ .codepoint = 0x22F4, .mirror = 0x22FC }, 153 | .{ .codepoint = 0x22F6, .mirror = 0x22FD }, 154 | .{ .codepoint = 0x22F7, .mirror = 0x22FE }, 155 | .{ .codepoint = 0x22FA, .mirror = 0x22F2 }, 156 | .{ .codepoint = 0x22FB, .mirror = 0x22F3 }, 157 | .{ .codepoint = 0x22FC, .mirror = 0x22F4 }, 158 | .{ .codepoint = 0x22FD, .mirror = 0x22F6 }, 159 | .{ .codepoint = 0x22FE, .mirror = 0x22F7 }, 160 | .{ .codepoint = 0x2308, .mirror = 0x2309 }, 161 | .{ .codepoint = 0x2309, .mirror = 0x2308 }, 162 | .{ .codepoint = 0x230A, .mirror = 0x230B }, 163 | .{ .codepoint = 0x230B, .mirror = 0x230A }, 164 | .{ .codepoint = 0x2329, .mirror = 0x232A }, 165 | .{ .codepoint = 0x232A, .mirror = 0x2329 }, 166 | .{ .codepoint = 0x2768, .mirror = 0x2769 }, 167 | .{ .codepoint = 0x2769, .mirror = 0x2768 }, 168 | .{ .codepoint = 0x276A, .mirror = 0x276B }, 169 | .{ .codepoint = 0x276B, .mirror = 0x276A }, 170 | .{ .codepoint = 0x276C, .mirror = 0x276D }, 171 | .{ .codepoint = 0x276D, .mirror = 0x276C }, 172 | .{ .codepoint = 0x276E, .mirror = 0x276F }, 173 | .{ .codepoint = 0x276F, .mirror = 0x276E }, 174 | .{ .codepoint = 0x2770, .mirror = 0x2771 }, 175 | .{ .codepoint = 0x2771, .mirror = 0x2770 }, 176 | .{ .codepoint = 0x2772, .mirror = 0x2773 }, 177 | .{ .codepoint = 0x2773, .mirror = 0x2772 }, 178 | .{ .codepoint = 0x2774, .mirror = 0x2775 }, 179 | .{ .codepoint = 0x2775, .mirror = 0x2774 }, 180 | .{ .codepoint = 0x27C3, .mirror = 0x27C4 }, 181 | .{ .codepoint = 0x27C4, .mirror = 0x27C3 }, 182 | .{ .codepoint = 0x27C5, .mirror = 0x27C6 }, 183 | .{ .codepoint = 0x27C6, .mirror = 0x27C5 }, 184 | .{ .codepoint = 0x27C8, .mirror = 0x27C9 }, 185 | .{ .codepoint = 0x27C9, .mirror = 0x27C8 }, 186 | .{ .codepoint = 0x27CB, .mirror = 0x27CD }, 187 | .{ .codepoint = 0x27CD, .mirror = 0x27CB }, 188 | .{ .codepoint = 0x27D5, .mirror = 0x27D6 }, 189 | .{ .codepoint = 0x27D6, .mirror = 0x27D5 }, 190 | .{ .codepoint = 0x27DC, .mirror = 0x22B8 }, 191 | .{ .codepoint = 0x27DD, .mirror = 0x27DE }, 192 | .{ .codepoint = 0x27DE, .mirror = 0x27DD }, 193 | .{ .codepoint = 0x27E2, .mirror = 0x27E3 }, 194 | .{ .codepoint = 0x27E3, .mirror = 0x27E2 }, 195 | .{ .codepoint = 0x27E4, .mirror = 0x27E5 }, 196 | .{ .codepoint = 0x27E5, .mirror = 0x27E4 }, 197 | .{ .codepoint = 0x27E6, .mirror = 0x27E7 }, 198 | .{ .codepoint = 0x27E7, .mirror = 0x27E6 }, 199 | .{ .codepoint = 0x27E8, .mirror = 0x27E9 }, 200 | .{ .codepoint = 0x27E9, .mirror = 0x27E8 }, 201 | .{ .codepoint = 0x27EA, .mirror = 0x27EB }, 202 | .{ .codepoint = 0x27EB, .mirror = 0x27EA }, 203 | .{ .codepoint = 0x27EC, .mirror = 0x27ED }, 204 | .{ .codepoint = 0x27ED, .mirror = 0x27EC }, 205 | .{ .codepoint = 0x27EE, .mirror = 0x27EF }, 206 | .{ .codepoint = 0x27EF, .mirror = 0x27EE }, 207 | .{ .codepoint = 0x2983, .mirror = 0x2984 }, 208 | .{ .codepoint = 0x2984, .mirror = 0x2983 }, 209 | .{ .codepoint = 0x2985, .mirror = 0x2986 }, 210 | .{ .codepoint = 0x2986, .mirror = 0x2985 }, 211 | .{ .codepoint = 0x2987, .mirror = 0x2988 }, 212 | .{ .codepoint = 0x2988, .mirror = 0x2987 }, 213 | .{ .codepoint = 0x2989, .mirror = 0x298A }, 214 | .{ .codepoint = 0x298A, .mirror = 0x2989 }, 215 | .{ .codepoint = 0x298B, .mirror = 0x298C }, 216 | .{ .codepoint = 0x298C, .mirror = 0x298B }, 217 | .{ .codepoint = 0x298D, .mirror = 0x2990 }, 218 | .{ .codepoint = 0x298E, .mirror = 0x298F }, 219 | .{ .codepoint = 0x298F, .mirror = 0x298E }, 220 | .{ .codepoint = 0x2990, .mirror = 0x298D }, 221 | .{ .codepoint = 0x2991, .mirror = 0x2992 }, 222 | .{ .codepoint = 0x2992, .mirror = 0x2991 }, 223 | .{ .codepoint = 0x2993, .mirror = 0x2994 }, 224 | .{ .codepoint = 0x2994, .mirror = 0x2993 }, 225 | .{ .codepoint = 0x2995, .mirror = 0x2996 }, 226 | .{ .codepoint = 0x2996, .mirror = 0x2995 }, 227 | .{ .codepoint = 0x2997, .mirror = 0x2998 }, 228 | .{ .codepoint = 0x2998, .mirror = 0x2997 }, 229 | .{ .codepoint = 0x299B, .mirror = 0x2221 }, 230 | .{ .codepoint = 0x29A0, .mirror = 0x2222 }, 231 | .{ .codepoint = 0x29A3, .mirror = 0x2220 }, 232 | .{ .codepoint = 0x29A4, .mirror = 0x29A5 }, 233 | .{ .codepoint = 0x29A5, .mirror = 0x29A4 }, 234 | .{ .codepoint = 0x29A8, .mirror = 0x29A9 }, 235 | .{ .codepoint = 0x29A9, .mirror = 0x29A8 }, 236 | .{ .codepoint = 0x29AA, .mirror = 0x29AB }, 237 | .{ .codepoint = 0x29AB, .mirror = 0x29AA }, 238 | .{ .codepoint = 0x29AC, .mirror = 0x29AD }, 239 | .{ .codepoint = 0x29AD, .mirror = 0x29AC }, 240 | .{ .codepoint = 0x29AE, .mirror = 0x29AF }, 241 | .{ .codepoint = 0x29AF, .mirror = 0x29AE }, 242 | .{ .codepoint = 0x29B8, .mirror = 0x2298 }, 243 | .{ .codepoint = 0x29C0, .mirror = 0x29C1 }, 244 | .{ .codepoint = 0x29C1, .mirror = 0x29C0 }, 245 | .{ .codepoint = 0x29C4, .mirror = 0x29C5 }, 246 | .{ .codepoint = 0x29C5, .mirror = 0x29C4 }, 247 | .{ .codepoint = 0x29CF, .mirror = 0x29D0 }, 248 | .{ .codepoint = 0x29D0, .mirror = 0x29CF }, 249 | .{ .codepoint = 0x29D1, .mirror = 0x29D2 }, 250 | .{ .codepoint = 0x29D2, .mirror = 0x29D1 }, 251 | .{ .codepoint = 0x29D4, .mirror = 0x29D5 }, 252 | .{ .codepoint = 0x29D5, .mirror = 0x29D4 }, 253 | .{ .codepoint = 0x29D8, .mirror = 0x29D9 }, 254 | .{ .codepoint = 0x29D9, .mirror = 0x29D8 }, 255 | .{ .codepoint = 0x29DA, .mirror = 0x29DB }, 256 | .{ .codepoint = 0x29DB, .mirror = 0x29DA }, 257 | .{ .codepoint = 0x29E8, .mirror = 0x29E9 }, 258 | .{ .codepoint = 0x29E9, .mirror = 0x29E8 }, 259 | .{ .codepoint = 0x29F5, .mirror = 0x2215 }, 260 | .{ .codepoint = 0x29F8, .mirror = 0x29F9 }, 261 | .{ .codepoint = 0x29F9, .mirror = 0x29F8 }, 262 | .{ .codepoint = 0x29FC, .mirror = 0x29FD }, 263 | .{ .codepoint = 0x29FD, .mirror = 0x29FC }, 264 | .{ .codepoint = 0x2A2B, .mirror = 0x2A2C }, 265 | .{ .codepoint = 0x2A2C, .mirror = 0x2A2B }, 266 | .{ .codepoint = 0x2A2D, .mirror = 0x2A2E }, 267 | .{ .codepoint = 0x2A2E, .mirror = 0x2A2D }, 268 | .{ .codepoint = 0x2A34, .mirror = 0x2A35 }, 269 | .{ .codepoint = 0x2A35, .mirror = 0x2A34 }, 270 | .{ .codepoint = 0x2A3C, .mirror = 0x2A3D }, 271 | .{ .codepoint = 0x2A3D, .mirror = 0x2A3C }, 272 | .{ .codepoint = 0x2A64, .mirror = 0x2A65 }, 273 | .{ .codepoint = 0x2A65, .mirror = 0x2A64 }, 274 | .{ .codepoint = 0x2A79, .mirror = 0x2A7A }, 275 | .{ .codepoint = 0x2A7A, .mirror = 0x2A79 }, 276 | .{ .codepoint = 0x2A7B, .mirror = 0x2A7C }, 277 | .{ .codepoint = 0x2A7C, .mirror = 0x2A7B }, 278 | .{ .codepoint = 0x2A7D, .mirror = 0x2A7E }, 279 | .{ .codepoint = 0x2A7E, .mirror = 0x2A7D }, 280 | .{ .codepoint = 0x2A7F, .mirror = 0x2A80 }, 281 | .{ .codepoint = 0x2A80, .mirror = 0x2A7F }, 282 | .{ .codepoint = 0x2A81, .mirror = 0x2A82 }, 283 | .{ .codepoint = 0x2A82, .mirror = 0x2A81 }, 284 | .{ .codepoint = 0x2A83, .mirror = 0x2A84 }, 285 | .{ .codepoint = 0x2A84, .mirror = 0x2A83 }, 286 | .{ .codepoint = 0x2A85, .mirror = 0x2A86 }, 287 | .{ .codepoint = 0x2A86, .mirror = 0x2A85 }, 288 | .{ .codepoint = 0x2A87, .mirror = 0x2A88 }, 289 | .{ .codepoint = 0x2A88, .mirror = 0x2A87 }, 290 | .{ .codepoint = 0x2A89, .mirror = 0x2A8A }, 291 | .{ .codepoint = 0x2A8A, .mirror = 0x2A89 }, 292 | .{ .codepoint = 0x2A8B, .mirror = 0x2A8C }, 293 | .{ .codepoint = 0x2A8C, .mirror = 0x2A8B }, 294 | .{ .codepoint = 0x2A8D, .mirror = 0x2A8E }, 295 | .{ .codepoint = 0x2A8E, .mirror = 0x2A8D }, 296 | .{ .codepoint = 0x2A8F, .mirror = 0x2A90 }, 297 | .{ .codepoint = 0x2A90, .mirror = 0x2A8F }, 298 | .{ .codepoint = 0x2A91, .mirror = 0x2A92 }, 299 | .{ .codepoint = 0x2A92, .mirror = 0x2A91 }, 300 | .{ .codepoint = 0x2A93, .mirror = 0x2A94 }, 301 | .{ .codepoint = 0x2A94, .mirror = 0x2A93 }, 302 | .{ .codepoint = 0x2A95, .mirror = 0x2A96 }, 303 | .{ .codepoint = 0x2A96, .mirror = 0x2A95 }, 304 | .{ .codepoint = 0x2A97, .mirror = 0x2A98 }, 305 | .{ .codepoint = 0x2A98, .mirror = 0x2A97 }, 306 | .{ .codepoint = 0x2A99, .mirror = 0x2A9A }, 307 | .{ .codepoint = 0x2A9A, .mirror = 0x2A99 }, 308 | .{ .codepoint = 0x2A9B, .mirror = 0x2A9C }, 309 | .{ .codepoint = 0x2A9C, .mirror = 0x2A9B }, 310 | .{ .codepoint = 0x2A9D, .mirror = 0x2A9E }, 311 | .{ .codepoint = 0x2A9E, .mirror = 0x2A9D }, 312 | .{ .codepoint = 0x2A9F, .mirror = 0x2AA0 }, 313 | .{ .codepoint = 0x2AA0, .mirror = 0x2A9F }, 314 | .{ .codepoint = 0x2AA1, .mirror = 0x2AA2 }, 315 | .{ .codepoint = 0x2AA2, .mirror = 0x2AA1 }, 316 | .{ .codepoint = 0x2AA6, .mirror = 0x2AA7 }, 317 | .{ .codepoint = 0x2AA7, .mirror = 0x2AA6 }, 318 | .{ .codepoint = 0x2AA8, .mirror = 0x2AA9 }, 319 | .{ .codepoint = 0x2AA9, .mirror = 0x2AA8 }, 320 | .{ .codepoint = 0x2AAA, .mirror = 0x2AAB }, 321 | .{ .codepoint = 0x2AAB, .mirror = 0x2AAA }, 322 | .{ .codepoint = 0x2AAC, .mirror = 0x2AAD }, 323 | .{ .codepoint = 0x2AAD, .mirror = 0x2AAC }, 324 | .{ .codepoint = 0x2AAF, .mirror = 0x2AB0 }, 325 | .{ .codepoint = 0x2AB0, .mirror = 0x2AAF }, 326 | .{ .codepoint = 0x2AB1, .mirror = 0x2AB2 }, 327 | .{ .codepoint = 0x2AB2, .mirror = 0x2AB1 }, 328 | .{ .codepoint = 0x2AB3, .mirror = 0x2AB4 }, 329 | .{ .codepoint = 0x2AB4, .mirror = 0x2AB3 }, 330 | .{ .codepoint = 0x2AB5, .mirror = 0x2AB6 }, 331 | .{ .codepoint = 0x2AB6, .mirror = 0x2AB5 }, 332 | .{ .codepoint = 0x2AB7, .mirror = 0x2AB8 }, 333 | .{ .codepoint = 0x2AB8, .mirror = 0x2AB7 }, 334 | .{ .codepoint = 0x2AB9, .mirror = 0x2ABA }, 335 | .{ .codepoint = 0x2ABA, .mirror = 0x2AB9 }, 336 | .{ .codepoint = 0x2ABB, .mirror = 0x2ABC }, 337 | .{ .codepoint = 0x2ABC, .mirror = 0x2ABB }, 338 | .{ .codepoint = 0x2ABD, .mirror = 0x2ABE }, 339 | .{ .codepoint = 0x2ABE, .mirror = 0x2ABD }, 340 | .{ .codepoint = 0x2ABF, .mirror = 0x2AC0 }, 341 | .{ .codepoint = 0x2AC0, .mirror = 0x2ABF }, 342 | .{ .codepoint = 0x2AC1, .mirror = 0x2AC2 }, 343 | .{ .codepoint = 0x2AC2, .mirror = 0x2AC1 }, 344 | .{ .codepoint = 0x2AC3, .mirror = 0x2AC4 }, 345 | .{ .codepoint = 0x2AC4, .mirror = 0x2AC3 }, 346 | .{ .codepoint = 0x2AC5, .mirror = 0x2AC6 }, 347 | .{ .codepoint = 0x2AC6, .mirror = 0x2AC5 }, 348 | .{ .codepoint = 0x2AC7, .mirror = 0x2AC8 }, 349 | .{ .codepoint = 0x2AC8, .mirror = 0x2AC7 }, 350 | .{ .codepoint = 0x2AC9, .mirror = 0x2ACA }, 351 | .{ .codepoint = 0x2ACA, .mirror = 0x2AC9 }, 352 | .{ .codepoint = 0x2ACB, .mirror = 0x2ACC }, 353 | .{ .codepoint = 0x2ACC, .mirror = 0x2ACB }, 354 | .{ .codepoint = 0x2ACD, .mirror = 0x2ACE }, 355 | .{ .codepoint = 0x2ACE, .mirror = 0x2ACD }, 356 | .{ .codepoint = 0x2ACF, .mirror = 0x2AD0 }, 357 | .{ .codepoint = 0x2AD0, .mirror = 0x2ACF }, 358 | .{ .codepoint = 0x2AD1, .mirror = 0x2AD2 }, 359 | .{ .codepoint = 0x2AD2, .mirror = 0x2AD1 }, 360 | .{ .codepoint = 0x2AD3, .mirror = 0x2AD4 }, 361 | .{ .codepoint = 0x2AD4, .mirror = 0x2AD3 }, 362 | .{ .codepoint = 0x2AD5, .mirror = 0x2AD6 }, 363 | .{ .codepoint = 0x2AD6, .mirror = 0x2AD5 }, 364 | .{ .codepoint = 0x2ADE, .mirror = 0x22A6 }, 365 | .{ .codepoint = 0x2AE3, .mirror = 0x22A9 }, 366 | .{ .codepoint = 0x2AE4, .mirror = 0x22A8 }, 367 | .{ .codepoint = 0x2AE5, .mirror = 0x22AB }, 368 | .{ .codepoint = 0x2AEC, .mirror = 0x2AED }, 369 | .{ .codepoint = 0x2AED, .mirror = 0x2AEC }, 370 | .{ .codepoint = 0x2AEE, .mirror = 0x2224 }, 371 | .{ .codepoint = 0x2AF7, .mirror = 0x2AF8 }, 372 | .{ .codepoint = 0x2AF8, .mirror = 0x2AF7 }, 373 | .{ .codepoint = 0x2AF9, .mirror = 0x2AFA }, 374 | .{ .codepoint = 0x2AFA, .mirror = 0x2AF9 }, 375 | .{ .codepoint = 0x2BFE, .mirror = 0x221F }, 376 | .{ .codepoint = 0x2E02, .mirror = 0x2E03 }, 377 | .{ .codepoint = 0x2E03, .mirror = 0x2E02 }, 378 | .{ .codepoint = 0x2E04, .mirror = 0x2E05 }, 379 | .{ .codepoint = 0x2E05, .mirror = 0x2E04 }, 380 | .{ .codepoint = 0x2E09, .mirror = 0x2E0A }, 381 | .{ .codepoint = 0x2E0A, .mirror = 0x2E09 }, 382 | .{ .codepoint = 0x2E0C, .mirror = 0x2E0D }, 383 | .{ .codepoint = 0x2E0D, .mirror = 0x2E0C }, 384 | .{ .codepoint = 0x2E1C, .mirror = 0x2E1D }, 385 | .{ .codepoint = 0x2E1D, .mirror = 0x2E1C }, 386 | .{ .codepoint = 0x2E20, .mirror = 0x2E21 }, 387 | .{ .codepoint = 0x2E21, .mirror = 0x2E20 }, 388 | .{ .codepoint = 0x2E22, .mirror = 0x2E23 }, 389 | .{ .codepoint = 0x2E23, .mirror = 0x2E22 }, 390 | .{ .codepoint = 0x2E24, .mirror = 0x2E25 }, 391 | .{ .codepoint = 0x2E25, .mirror = 0x2E24 }, 392 | .{ .codepoint = 0x2E26, .mirror = 0x2E27 }, 393 | .{ .codepoint = 0x2E27, .mirror = 0x2E26 }, 394 | .{ .codepoint = 0x2E28, .mirror = 0x2E29 }, 395 | .{ .codepoint = 0x2E29, .mirror = 0x2E28 }, 396 | .{ .codepoint = 0x2E55, .mirror = 0x2E56 }, 397 | .{ .codepoint = 0x2E56, .mirror = 0x2E55 }, 398 | .{ .codepoint = 0x2E57, .mirror = 0x2E58 }, 399 | .{ .codepoint = 0x2E58, .mirror = 0x2E57 }, 400 | .{ .codepoint = 0x2E59, .mirror = 0x2E5A }, 401 | .{ .codepoint = 0x2E5A, .mirror = 0x2E59 }, 402 | .{ .codepoint = 0x2E5B, .mirror = 0x2E5C }, 403 | .{ .codepoint = 0x2E5C, .mirror = 0x2E5B }, 404 | .{ .codepoint = 0x3008, .mirror = 0x3009 }, 405 | .{ .codepoint = 0x3009, .mirror = 0x3008 }, 406 | .{ .codepoint = 0x300A, .mirror = 0x300B }, 407 | .{ .codepoint = 0x300B, .mirror = 0x300A }, 408 | .{ .codepoint = 0x300C, .mirror = 0x300D }, 409 | .{ .codepoint = 0x300D, .mirror = 0x300C }, 410 | .{ .codepoint = 0x300E, .mirror = 0x300F }, 411 | .{ .codepoint = 0x300F, .mirror = 0x300E }, 412 | .{ .codepoint = 0x3010, .mirror = 0x3011 }, 413 | .{ .codepoint = 0x3011, .mirror = 0x3010 }, 414 | .{ .codepoint = 0x3014, .mirror = 0x3015 }, 415 | .{ .codepoint = 0x3015, .mirror = 0x3014 }, 416 | .{ .codepoint = 0x3016, .mirror = 0x3017 }, 417 | .{ .codepoint = 0x3017, .mirror = 0x3016 }, 418 | .{ .codepoint = 0x3018, .mirror = 0x3019 }, 419 | .{ .codepoint = 0x3019, .mirror = 0x3018 }, 420 | .{ .codepoint = 0x301A, .mirror = 0x301B }, 421 | .{ .codepoint = 0x301B, .mirror = 0x301A }, 422 | .{ .codepoint = 0xFE59, .mirror = 0xFE5A }, 423 | .{ .codepoint = 0xFE5A, .mirror = 0xFE59 }, 424 | .{ .codepoint = 0xFE5B, .mirror = 0xFE5C }, 425 | .{ .codepoint = 0xFE5C, .mirror = 0xFE5B }, 426 | .{ .codepoint = 0xFE5D, .mirror = 0xFE5E }, 427 | .{ .codepoint = 0xFE5E, .mirror = 0xFE5D }, 428 | .{ .codepoint = 0xFE64, .mirror = 0xFE65 }, 429 | .{ .codepoint = 0xFE65, .mirror = 0xFE64 }, 430 | .{ .codepoint = 0xFF08, .mirror = 0xFF09 }, 431 | .{ .codepoint = 0xFF09, .mirror = 0xFF08 }, 432 | .{ .codepoint = 0xFF1C, .mirror = 0xFF1E }, 433 | .{ .codepoint = 0xFF1E, .mirror = 0xFF1C }, 434 | .{ .codepoint = 0xFF3B, .mirror = 0xFF3D }, 435 | .{ .codepoint = 0xFF3D, .mirror = 0xFF3B }, 436 | .{ .codepoint = 0xFF5B, .mirror = 0xFF5D }, 437 | .{ .codepoint = 0xFF5D, .mirror = 0xFF5B }, 438 | .{ .codepoint = 0xFF5F, .mirror = 0xFF60 }, 439 | .{ .codepoint = 0xFF60, .mirror = 0xFF5F }, 440 | .{ .codepoint = 0xFF62, .mirror = 0xFF63 }, 441 | .{ .codepoint = 0xFF63, .mirror = 0xFF62 }, 442 | }; 443 | -------------------------------------------------------------------------------- /src/blocks.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/Blocks.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const Block = struct { 9 | from: u21, 10 | to: u21, 11 | name: []const u8, 12 | }; 13 | 14 | pub const data = [_]Block{ 15 | .{ .from = 0x0000, .to = 0x007F, .name = "Basic Latin" }, 16 | .{ .from = 0x0080, .to = 0x00FF, .name = "Latin-1 Supplement" }, 17 | .{ .from = 0x0100, .to = 0x017F, .name = "Latin Extended-A" }, 18 | .{ .from = 0x0180, .to = 0x024F, .name = "Latin Extended-B" }, 19 | .{ .from = 0x0250, .to = 0x02AF, .name = "IPA Extensions" }, 20 | .{ .from = 0x02B0, .to = 0x02FF, .name = "Spacing Modifier Letters" }, 21 | .{ .from = 0x0300, .to = 0x036F, .name = "Combining Diacritical Marks" }, 22 | .{ .from = 0x0370, .to = 0x03FF, .name = "Greek and Coptic" }, 23 | .{ .from = 0x0400, .to = 0x04FF, .name = "Cyrillic" }, 24 | .{ .from = 0x0500, .to = 0x052F, .name = "Cyrillic Supplement" }, 25 | .{ .from = 0x0530, .to = 0x058F, .name = "Armenian" }, 26 | .{ .from = 0x0590, .to = 0x05FF, .name = "Hebrew" }, 27 | .{ .from = 0x0600, .to = 0x06FF, .name = "Arabic" }, 28 | .{ .from = 0x0700, .to = 0x074F, .name = "Syriac" }, 29 | .{ .from = 0x0750, .to = 0x077F, .name = "Arabic Supplement" }, 30 | .{ .from = 0x0780, .to = 0x07BF, .name = "Thaana" }, 31 | .{ .from = 0x07C0, .to = 0x07FF, .name = "NKo" }, 32 | .{ .from = 0x0800, .to = 0x083F, .name = "Samaritan" }, 33 | .{ .from = 0x0840, .to = 0x085F, .name = "Mandaic" }, 34 | .{ .from = 0x0860, .to = 0x086F, .name = "Syriac Supplement" }, 35 | .{ .from = 0x0870, .to = 0x089F, .name = "Arabic Extended-B" }, 36 | .{ .from = 0x08A0, .to = 0x08FF, .name = "Arabic Extended-A" }, 37 | .{ .from = 0x0900, .to = 0x097F, .name = "Devanagari" }, 38 | .{ .from = 0x0980, .to = 0x09FF, .name = "Bengali" }, 39 | .{ .from = 0x0A00, .to = 0x0A7F, .name = "Gurmukhi" }, 40 | .{ .from = 0x0A80, .to = 0x0AFF, .name = "Gujarati" }, 41 | .{ .from = 0x0B00, .to = 0x0B7F, .name = "Oriya" }, 42 | .{ .from = 0x0B80, .to = 0x0BFF, .name = "Tamil" }, 43 | .{ .from = 0x0C00, .to = 0x0C7F, .name = "Telugu" }, 44 | .{ .from = 0x0C80, .to = 0x0CFF, .name = "Kannada" }, 45 | .{ .from = 0x0D00, .to = 0x0D7F, .name = "Malayalam" }, 46 | .{ .from = 0x0D80, .to = 0x0DFF, .name = "Sinhala" }, 47 | .{ .from = 0x0E00, .to = 0x0E7F, .name = "Thai" }, 48 | .{ .from = 0x0E80, .to = 0x0EFF, .name = "Lao" }, 49 | .{ .from = 0x0F00, .to = 0x0FFF, .name = "Tibetan" }, 50 | .{ .from = 0x1000, .to = 0x109F, .name = "Myanmar" }, 51 | .{ .from = 0x10A0, .to = 0x10FF, .name = "Georgian" }, 52 | .{ .from = 0x1100, .to = 0x11FF, .name = "Hangul Jamo" }, 53 | .{ .from = 0x1200, .to = 0x137F, .name = "Ethiopic" }, 54 | .{ .from = 0x1380, .to = 0x139F, .name = "Ethiopic Supplement" }, 55 | .{ .from = 0x13A0, .to = 0x13FF, .name = "Cherokee" }, 56 | .{ .from = 0x1400, .to = 0x167F, .name = "Unified Canadian Aboriginal Syllabics" }, 57 | .{ .from = 0x1680, .to = 0x169F, .name = "Ogham" }, 58 | .{ .from = 0x16A0, .to = 0x16FF, .name = "Runic" }, 59 | .{ .from = 0x1700, .to = 0x171F, .name = "Tagalog" }, 60 | .{ .from = 0x1720, .to = 0x173F, .name = "Hanunoo" }, 61 | .{ .from = 0x1740, .to = 0x175F, .name = "Buhid" }, 62 | .{ .from = 0x1760, .to = 0x177F, .name = "Tagbanwa" }, 63 | .{ .from = 0x1780, .to = 0x17FF, .name = "Khmer" }, 64 | .{ .from = 0x1800, .to = 0x18AF, .name = "Mongolian" }, 65 | .{ .from = 0x18B0, .to = 0x18FF, .name = "Unified Canadian Aboriginal Syllabics Extended" }, 66 | .{ .from = 0x1900, .to = 0x194F, .name = "Limbu" }, 67 | .{ .from = 0x1950, .to = 0x197F, .name = "Tai Le" }, 68 | .{ .from = 0x1980, .to = 0x19DF, .name = "New Tai Lue" }, 69 | .{ .from = 0x19E0, .to = 0x19FF, .name = "Khmer Symbols" }, 70 | .{ .from = 0x1A00, .to = 0x1A1F, .name = "Buginese" }, 71 | .{ .from = 0x1A20, .to = 0x1AAF, .name = "Tai Tham" }, 72 | .{ .from = 0x1AB0, .to = 0x1AFF, .name = "Combining Diacritical Marks Extended" }, 73 | .{ .from = 0x1B00, .to = 0x1B7F, .name = "Balinese" }, 74 | .{ .from = 0x1B80, .to = 0x1BBF, .name = "Sundanese" }, 75 | .{ .from = 0x1BC0, .to = 0x1BFF, .name = "Batak" }, 76 | .{ .from = 0x1C00, .to = 0x1C4F, .name = "Lepcha" }, 77 | .{ .from = 0x1C50, .to = 0x1C7F, .name = "Ol Chiki" }, 78 | .{ .from = 0x1C80, .to = 0x1C8F, .name = "Cyrillic Extended-C" }, 79 | .{ .from = 0x1C90, .to = 0x1CBF, .name = "Georgian Extended" }, 80 | .{ .from = 0x1CC0, .to = 0x1CCF, .name = "Sundanese Supplement" }, 81 | .{ .from = 0x1CD0, .to = 0x1CFF, .name = "Vedic Extensions" }, 82 | .{ .from = 0x1D00, .to = 0x1D7F, .name = "Phonetic Extensions" }, 83 | .{ .from = 0x1D80, .to = 0x1DBF, .name = "Phonetic Extensions Supplement" }, 84 | .{ .from = 0x1DC0, .to = 0x1DFF, .name = "Combining Diacritical Marks Supplement" }, 85 | .{ .from = 0x1E00, .to = 0x1EFF, .name = "Latin Extended Additional" }, 86 | .{ .from = 0x1F00, .to = 0x1FFF, .name = "Greek Extended" }, 87 | .{ .from = 0x2000, .to = 0x206F, .name = "General Punctuation" }, 88 | .{ .from = 0x2070, .to = 0x209F, .name = "Superscripts and Subscripts" }, 89 | .{ .from = 0x20A0, .to = 0x20CF, .name = "Currency Symbols" }, 90 | .{ .from = 0x20D0, .to = 0x20FF, .name = "Combining Diacritical Marks for Symbols" }, 91 | .{ .from = 0x2100, .to = 0x214F, .name = "Letterlike Symbols" }, 92 | .{ .from = 0x2150, .to = 0x218F, .name = "Number Forms" }, 93 | .{ .from = 0x2190, .to = 0x21FF, .name = "Arrows" }, 94 | .{ .from = 0x2200, .to = 0x22FF, .name = "Mathematical Operators" }, 95 | .{ .from = 0x2300, .to = 0x23FF, .name = "Miscellaneous Technical" }, 96 | .{ .from = 0x2400, .to = 0x243F, .name = "Control Pictures" }, 97 | .{ .from = 0x2440, .to = 0x245F, .name = "Optical Character Recognition" }, 98 | .{ .from = 0x2460, .to = 0x24FF, .name = "Enclosed Alphanumerics" }, 99 | .{ .from = 0x2500, .to = 0x257F, .name = "Box Drawing" }, 100 | .{ .from = 0x2580, .to = 0x259F, .name = "Block Elements" }, 101 | .{ .from = 0x25A0, .to = 0x25FF, .name = "Geometric Shapes" }, 102 | .{ .from = 0x2600, .to = 0x26FF, .name = "Miscellaneous Symbols" }, 103 | .{ .from = 0x2700, .to = 0x27BF, .name = "Dingbats" }, 104 | .{ .from = 0x27C0, .to = 0x27EF, .name = "Miscellaneous Mathematical Symbols-A" }, 105 | .{ .from = 0x27F0, .to = 0x27FF, .name = "Supplemental Arrows-A" }, 106 | .{ .from = 0x2800, .to = 0x28FF, .name = "Braille Patterns" }, 107 | .{ .from = 0x2900, .to = 0x297F, .name = "Supplemental Arrows-B" }, 108 | .{ .from = 0x2980, .to = 0x29FF, .name = "Miscellaneous Mathematical Symbols-B" }, 109 | .{ .from = 0x2A00, .to = 0x2AFF, .name = "Supplemental Mathematical Operators" }, 110 | .{ .from = 0x2B00, .to = 0x2BFF, .name = "Miscellaneous Symbols and Arrows" }, 111 | .{ .from = 0x2C00, .to = 0x2C5F, .name = "Glagolitic" }, 112 | .{ .from = 0x2C60, .to = 0x2C7F, .name = "Latin Extended-C" }, 113 | .{ .from = 0x2C80, .to = 0x2CFF, .name = "Coptic" }, 114 | .{ .from = 0x2D00, .to = 0x2D2F, .name = "Georgian Supplement" }, 115 | .{ .from = 0x2D30, .to = 0x2D7F, .name = "Tifinagh" }, 116 | .{ .from = 0x2D80, .to = 0x2DDF, .name = "Ethiopic Extended" }, 117 | .{ .from = 0x2DE0, .to = 0x2DFF, .name = "Cyrillic Extended-A" }, 118 | .{ .from = 0x2E00, .to = 0x2E7F, .name = "Supplemental Punctuation" }, 119 | .{ .from = 0x2E80, .to = 0x2EFF, .name = "CJK Radicals Supplement" }, 120 | .{ .from = 0x2F00, .to = 0x2FDF, .name = "Kangxi Radicals" }, 121 | .{ .from = 0x2FF0, .to = 0x2FFF, .name = "Ideographic Description Characters" }, 122 | .{ .from = 0x3000, .to = 0x303F, .name = "CJK Symbols and Punctuation" }, 123 | .{ .from = 0x3040, .to = 0x309F, .name = "Hiragana" }, 124 | .{ .from = 0x30A0, .to = 0x30FF, .name = "Katakana" }, 125 | .{ .from = 0x3100, .to = 0x312F, .name = "Bopomofo" }, 126 | .{ .from = 0x3130, .to = 0x318F, .name = "Hangul Compatibility Jamo" }, 127 | .{ .from = 0x3190, .to = 0x319F, .name = "Kanbun" }, 128 | .{ .from = 0x31A0, .to = 0x31BF, .name = "Bopomofo Extended" }, 129 | .{ .from = 0x31C0, .to = 0x31EF, .name = "CJK Strokes" }, 130 | .{ .from = 0x31F0, .to = 0x31FF, .name = "Katakana Phonetic Extensions" }, 131 | .{ .from = 0x3200, .to = 0x32FF, .name = "Enclosed CJK Letters and Months" }, 132 | .{ .from = 0x3300, .to = 0x33FF, .name = "CJK Compatibility" }, 133 | .{ .from = 0x3400, .to = 0x4DBF, .name = "CJK Unified Ideographs Extension A" }, 134 | .{ .from = 0x4DC0, .to = 0x4DFF, .name = "Yijing Hexagram Symbols" }, 135 | .{ .from = 0x4E00, .to = 0x9FFF, .name = "CJK Unified Ideographs" }, 136 | .{ .from = 0xA000, .to = 0xA48F, .name = "Yi Syllables" }, 137 | .{ .from = 0xA490, .to = 0xA4CF, .name = "Yi Radicals" }, 138 | .{ .from = 0xA4D0, .to = 0xA4FF, .name = "Lisu" }, 139 | .{ .from = 0xA500, .to = 0xA63F, .name = "Vai" }, 140 | .{ .from = 0xA640, .to = 0xA69F, .name = "Cyrillic Extended-B" }, 141 | .{ .from = 0xA6A0, .to = 0xA6FF, .name = "Bamum" }, 142 | .{ .from = 0xA700, .to = 0xA71F, .name = "Modifier Tone Letters" }, 143 | .{ .from = 0xA720, .to = 0xA7FF, .name = "Latin Extended-D" }, 144 | .{ .from = 0xA800, .to = 0xA82F, .name = "Syloti Nagri" }, 145 | .{ .from = 0xA830, .to = 0xA83F, .name = "Common Indic Number Forms" }, 146 | .{ .from = 0xA840, .to = 0xA87F, .name = "Phags-pa" }, 147 | .{ .from = 0xA880, .to = 0xA8DF, .name = "Saurashtra" }, 148 | .{ .from = 0xA8E0, .to = 0xA8FF, .name = "Devanagari Extended" }, 149 | .{ .from = 0xA900, .to = 0xA92F, .name = "Kayah Li" }, 150 | .{ .from = 0xA930, .to = 0xA95F, .name = "Rejang" }, 151 | .{ .from = 0xA960, .to = 0xA97F, .name = "Hangul Jamo Extended-A" }, 152 | .{ .from = 0xA980, .to = 0xA9DF, .name = "Javanese" }, 153 | .{ .from = 0xA9E0, .to = 0xA9FF, .name = "Myanmar Extended-B" }, 154 | .{ .from = 0xAA00, .to = 0xAA5F, .name = "Cham" }, 155 | .{ .from = 0xAA60, .to = 0xAA7F, .name = "Myanmar Extended-A" }, 156 | .{ .from = 0xAA80, .to = 0xAADF, .name = "Tai Viet" }, 157 | .{ .from = 0xAAE0, .to = 0xAAFF, .name = "Meetei Mayek Extensions" }, 158 | .{ .from = 0xAB00, .to = 0xAB2F, .name = "Ethiopic Extended-A" }, 159 | .{ .from = 0xAB30, .to = 0xAB6F, .name = "Latin Extended-E" }, 160 | .{ .from = 0xAB70, .to = 0xABBF, .name = "Cherokee Supplement" }, 161 | .{ .from = 0xABC0, .to = 0xABFF, .name = "Meetei Mayek" }, 162 | .{ .from = 0xAC00, .to = 0xD7AF, .name = "Hangul Syllables" }, 163 | .{ .from = 0xD7B0, .to = 0xD7FF, .name = "Hangul Jamo Extended-B" }, 164 | .{ .from = 0xD800, .to = 0xDB7F, .name = "High Surrogates" }, 165 | .{ .from = 0xDB80, .to = 0xDBFF, .name = "High Private Use Surrogates" }, 166 | .{ .from = 0xDC00, .to = 0xDFFF, .name = "Low Surrogates" }, 167 | .{ .from = 0xE000, .to = 0xF8FF, .name = "Private Use Area" }, 168 | .{ .from = 0xF900, .to = 0xFAFF, .name = "CJK Compatibility Ideographs" }, 169 | .{ .from = 0xFB00, .to = 0xFB4F, .name = "Alphabetic Presentation Forms" }, 170 | .{ .from = 0xFB50, .to = 0xFDFF, .name = "Arabic Presentation Forms-A" }, 171 | .{ .from = 0xFE00, .to = 0xFE0F, .name = "Variation Selectors" }, 172 | .{ .from = 0xFE10, .to = 0xFE1F, .name = "Vertical Forms" }, 173 | .{ .from = 0xFE20, .to = 0xFE2F, .name = "Combining Half Marks" }, 174 | .{ .from = 0xFE30, .to = 0xFE4F, .name = "CJK Compatibility Forms" }, 175 | .{ .from = 0xFE50, .to = 0xFE6F, .name = "Small Form Variants" }, 176 | .{ .from = 0xFE70, .to = 0xFEFF, .name = "Arabic Presentation Forms-B" }, 177 | .{ .from = 0xFF00, .to = 0xFFEF, .name = "Halfwidth and Fullwidth Forms" }, 178 | .{ .from = 0xFFF0, .to = 0xFFFF, .name = "Specials" }, 179 | .{ .from = 0x10000, .to = 0x1007F, .name = "Linear B Syllabary" }, 180 | .{ .from = 0x10080, .to = 0x100FF, .name = "Linear B Ideograms" }, 181 | .{ .from = 0x10100, .to = 0x1013F, .name = "Aegean Numbers" }, 182 | .{ .from = 0x10140, .to = 0x1018F, .name = "Ancient Greek Numbers" }, 183 | .{ .from = 0x10190, .to = 0x101CF, .name = "Ancient Symbols" }, 184 | .{ .from = 0x101D0, .to = 0x101FF, .name = "Phaistos Disc" }, 185 | .{ .from = 0x10280, .to = 0x1029F, .name = "Lycian" }, 186 | .{ .from = 0x102A0, .to = 0x102DF, .name = "Carian" }, 187 | .{ .from = 0x102E0, .to = 0x102FF, .name = "Coptic Epact Numbers" }, 188 | .{ .from = 0x10300, .to = 0x1032F, .name = "Old Italic" }, 189 | .{ .from = 0x10330, .to = 0x1034F, .name = "Gothic" }, 190 | .{ .from = 0x10350, .to = 0x1037F, .name = "Old Permic" }, 191 | .{ .from = 0x10380, .to = 0x1039F, .name = "Ugaritic" }, 192 | .{ .from = 0x103A0, .to = 0x103DF, .name = "Old Persian" }, 193 | .{ .from = 0x10400, .to = 0x1044F, .name = "Deseret" }, 194 | .{ .from = 0x10450, .to = 0x1047F, .name = "Shavian" }, 195 | .{ .from = 0x10480, .to = 0x104AF, .name = "Osmanya" }, 196 | .{ .from = 0x104B0, .to = 0x104FF, .name = "Osage" }, 197 | .{ .from = 0x10500, .to = 0x1052F, .name = "Elbasan" }, 198 | .{ .from = 0x10530, .to = 0x1056F, .name = "Caucasian Albanian" }, 199 | .{ .from = 0x10570, .to = 0x105BF, .name = "Vithkuqi" }, 200 | .{ .from = 0x105C0, .to = 0x105FF, .name = "Todhri" }, 201 | .{ .from = 0x10600, .to = 0x1077F, .name = "Linear A" }, 202 | .{ .from = 0x10780, .to = 0x107BF, .name = "Latin Extended-F" }, 203 | .{ .from = 0x10800, .to = 0x1083F, .name = "Cypriot Syllabary" }, 204 | .{ .from = 0x10840, .to = 0x1085F, .name = "Imperial Aramaic" }, 205 | .{ .from = 0x10860, .to = 0x1087F, .name = "Palmyrene" }, 206 | .{ .from = 0x10880, .to = 0x108AF, .name = "Nabataean" }, 207 | .{ .from = 0x108E0, .to = 0x108FF, .name = "Hatran" }, 208 | .{ .from = 0x10900, .to = 0x1091F, .name = "Phoenician" }, 209 | .{ .from = 0x10920, .to = 0x1093F, .name = "Lydian" }, 210 | .{ .from = 0x10940, .to = 0x1095F, .name = "Sidetic" }, 211 | .{ .from = 0x10980, .to = 0x1099F, .name = "Meroitic Hieroglyphs" }, 212 | .{ .from = 0x109A0, .to = 0x109FF, .name = "Meroitic Cursive" }, 213 | .{ .from = 0x10A00, .to = 0x10A5F, .name = "Kharoshthi" }, 214 | .{ .from = 0x10A60, .to = 0x10A7F, .name = "Old South Arabian" }, 215 | .{ .from = 0x10A80, .to = 0x10A9F, .name = "Old North Arabian" }, 216 | .{ .from = 0x10AC0, .to = 0x10AFF, .name = "Manichaean" }, 217 | .{ .from = 0x10B00, .to = 0x10B3F, .name = "Avestan" }, 218 | .{ .from = 0x10B40, .to = 0x10B5F, .name = "Inscriptional Parthian" }, 219 | .{ .from = 0x10B60, .to = 0x10B7F, .name = "Inscriptional Pahlavi" }, 220 | .{ .from = 0x10B80, .to = 0x10BAF, .name = "Psalter Pahlavi" }, 221 | .{ .from = 0x10C00, .to = 0x10C4F, .name = "Old Turkic" }, 222 | .{ .from = 0x10C80, .to = 0x10CFF, .name = "Old Hungarian" }, 223 | .{ .from = 0x10D00, .to = 0x10D3F, .name = "Hanifi Rohingya" }, 224 | .{ .from = 0x10D40, .to = 0x10D8F, .name = "Garay" }, 225 | .{ .from = 0x10E60, .to = 0x10E7F, .name = "Rumi Numeral Symbols" }, 226 | .{ .from = 0x10E80, .to = 0x10EBF, .name = "Yezidi" }, 227 | .{ .from = 0x10EC0, .to = 0x10EFF, .name = "Arabic Extended-C" }, 228 | .{ .from = 0x10F00, .to = 0x10F2F, .name = "Old Sogdian" }, 229 | .{ .from = 0x10F30, .to = 0x10F6F, .name = "Sogdian" }, 230 | .{ .from = 0x10F70, .to = 0x10FAF, .name = "Old Uyghur" }, 231 | .{ .from = 0x10FB0, .to = 0x10FDF, .name = "Chorasmian" }, 232 | .{ .from = 0x10FE0, .to = 0x10FFF, .name = "Elymaic" }, 233 | .{ .from = 0x11000, .to = 0x1107F, .name = "Brahmi" }, 234 | .{ .from = 0x11080, .to = 0x110CF, .name = "Kaithi" }, 235 | .{ .from = 0x110D0, .to = 0x110FF, .name = "Sora Sompeng" }, 236 | .{ .from = 0x11100, .to = 0x1114F, .name = "Chakma" }, 237 | .{ .from = 0x11150, .to = 0x1117F, .name = "Mahajani" }, 238 | .{ .from = 0x11180, .to = 0x111DF, .name = "Sharada" }, 239 | .{ .from = 0x111E0, .to = 0x111FF, .name = "Sinhala Archaic Numbers" }, 240 | .{ .from = 0x11200, .to = 0x1124F, .name = "Khojki" }, 241 | .{ .from = 0x11280, .to = 0x112AF, .name = "Multani" }, 242 | .{ .from = 0x112B0, .to = 0x112FF, .name = "Khudawadi" }, 243 | .{ .from = 0x11300, .to = 0x1137F, .name = "Grantha" }, 244 | .{ .from = 0x11380, .to = 0x113FF, .name = "Tulu-Tigalari" }, 245 | .{ .from = 0x11400, .to = 0x1147F, .name = "Newa" }, 246 | .{ .from = 0x11480, .to = 0x114DF, .name = "Tirhuta" }, 247 | .{ .from = 0x11580, .to = 0x115FF, .name = "Siddham" }, 248 | .{ .from = 0x11600, .to = 0x1165F, .name = "Modi" }, 249 | .{ .from = 0x11660, .to = 0x1167F, .name = "Mongolian Supplement" }, 250 | .{ .from = 0x11680, .to = 0x116CF, .name = "Takri" }, 251 | .{ .from = 0x116D0, .to = 0x116FF, .name = "Myanmar Extended-C" }, 252 | .{ .from = 0x11700, .to = 0x1174F, .name = "Ahom" }, 253 | .{ .from = 0x11800, .to = 0x1184F, .name = "Dogra" }, 254 | .{ .from = 0x118A0, .to = 0x118FF, .name = "Warang Citi" }, 255 | .{ .from = 0x11900, .to = 0x1195F, .name = "Dives Akuru" }, 256 | .{ .from = 0x119A0, .to = 0x119FF, .name = "Nandinagari" }, 257 | .{ .from = 0x11A00, .to = 0x11A4F, .name = "Zanabazar Square" }, 258 | .{ .from = 0x11A50, .to = 0x11AAF, .name = "Soyombo" }, 259 | .{ .from = 0x11AB0, .to = 0x11ABF, .name = "Unified Canadian Aboriginal Syllabics Extended-A" }, 260 | .{ .from = 0x11AC0, .to = 0x11AFF, .name = "Pau Cin Hau" }, 261 | .{ .from = 0x11B00, .to = 0x11B5F, .name = "Devanagari Extended-A" }, 262 | .{ .from = 0x11B60, .to = 0x11B7F, .name = "Sharada Supplement" }, 263 | .{ .from = 0x11BC0, .to = 0x11BFF, .name = "Sunuwar" }, 264 | .{ .from = 0x11C00, .to = 0x11C6F, .name = "Bhaiksuki" }, 265 | .{ .from = 0x11C70, .to = 0x11CBF, .name = "Marchen" }, 266 | .{ .from = 0x11D00, .to = 0x11D5F, .name = "Masaram Gondi" }, 267 | .{ .from = 0x11D60, .to = 0x11DAF, .name = "Gunjala Gondi" }, 268 | .{ .from = 0x11DB0, .to = 0x11DEF, .name = "Tolong Siki" }, 269 | .{ .from = 0x11EE0, .to = 0x11EFF, .name = "Makasar" }, 270 | .{ .from = 0x11F00, .to = 0x11F5F, .name = "Kawi" }, 271 | .{ .from = 0x11FB0, .to = 0x11FBF, .name = "Lisu Supplement" }, 272 | .{ .from = 0x11FC0, .to = 0x11FFF, .name = "Tamil Supplement" }, 273 | .{ .from = 0x12000, .to = 0x123FF, .name = "Cuneiform" }, 274 | .{ .from = 0x12400, .to = 0x1247F, .name = "Cuneiform Numbers and Punctuation" }, 275 | .{ .from = 0x12480, .to = 0x1254F, .name = "Early Dynastic Cuneiform" }, 276 | .{ .from = 0x12F90, .to = 0x12FFF, .name = "Cypro-Minoan" }, 277 | .{ .from = 0x13000, .to = 0x1342F, .name = "Egyptian Hieroglyphs" }, 278 | .{ .from = 0x13430, .to = 0x1345F, .name = "Egyptian Hieroglyph Format Controls" }, 279 | .{ .from = 0x13460, .to = 0x143FF, .name = "Egyptian Hieroglyphs Extended-A" }, 280 | .{ .from = 0x14400, .to = 0x1467F, .name = "Anatolian Hieroglyphs" }, 281 | .{ .from = 0x16100, .to = 0x1613F, .name = "Gurung Khema" }, 282 | .{ .from = 0x16800, .to = 0x16A3F, .name = "Bamum Supplement" }, 283 | .{ .from = 0x16A40, .to = 0x16A6F, .name = "Mro" }, 284 | .{ .from = 0x16A70, .to = 0x16ACF, .name = "Tangsa" }, 285 | .{ .from = 0x16AD0, .to = 0x16AFF, .name = "Bassa Vah" }, 286 | .{ .from = 0x16B00, .to = 0x16B8F, .name = "Pahawh Hmong" }, 287 | .{ .from = 0x16D40, .to = 0x16D7F, .name = "Kirat Rai" }, 288 | .{ .from = 0x16E40, .to = 0x16E9F, .name = "Medefaidrin" }, 289 | .{ .from = 0x16EA0, .to = 0x16EDF, .name = "Beria Erfe" }, 290 | .{ .from = 0x16F00, .to = 0x16F9F, .name = "Miao" }, 291 | .{ .from = 0x16FE0, .to = 0x16FFF, .name = "Ideographic Symbols and Punctuation" }, 292 | .{ .from = 0x17000, .to = 0x187FF, .name = "Tangut" }, 293 | .{ .from = 0x18800, .to = 0x18AFF, .name = "Tangut Components" }, 294 | .{ .from = 0x18B00, .to = 0x18CFF, .name = "Khitan Small Script" }, 295 | .{ .from = 0x18D00, .to = 0x18D7F, .name = "Tangut Supplement" }, 296 | .{ .from = 0x18D80, .to = 0x18DFF, .name = "Tangut Components Supplement" }, 297 | .{ .from = 0x1AFF0, .to = 0x1AFFF, .name = "Kana Extended-B" }, 298 | .{ .from = 0x1B000, .to = 0x1B0FF, .name = "Kana Supplement" }, 299 | .{ .from = 0x1B100, .to = 0x1B12F, .name = "Kana Extended-A" }, 300 | .{ .from = 0x1B130, .to = 0x1B16F, .name = "Small Kana Extension" }, 301 | .{ .from = 0x1B170, .to = 0x1B2FF, .name = "Nushu" }, 302 | .{ .from = 0x1BC00, .to = 0x1BC9F, .name = "Duployan" }, 303 | .{ .from = 0x1BCA0, .to = 0x1BCAF, .name = "Shorthand Format Controls" }, 304 | .{ .from = 0x1CC00, .to = 0x1CEBF, .name = "Symbols for Legacy Computing Supplement" }, 305 | .{ .from = 0x1CEC0, .to = 0x1CEFF, .name = "Miscellaneous Symbols Supplement" }, 306 | .{ .from = 0x1CF00, .to = 0x1CFCF, .name = "Znamenny Musical Notation" }, 307 | .{ .from = 0x1D000, .to = 0x1D0FF, .name = "Byzantine Musical Symbols" }, 308 | .{ .from = 0x1D100, .to = 0x1D1FF, .name = "Musical Symbols" }, 309 | .{ .from = 0x1D200, .to = 0x1D24F, .name = "Ancient Greek Musical Notation" }, 310 | .{ .from = 0x1D2C0, .to = 0x1D2DF, .name = "Kaktovik Numerals" }, 311 | .{ .from = 0x1D2E0, .to = 0x1D2FF, .name = "Mayan Numerals" }, 312 | .{ .from = 0x1D300, .to = 0x1D35F, .name = "Tai Xuan Jing Symbols" }, 313 | .{ .from = 0x1D360, .to = 0x1D37F, .name = "Counting Rod Numerals" }, 314 | .{ .from = 0x1D400, .to = 0x1D7FF, .name = "Mathematical Alphanumeric Symbols" }, 315 | .{ .from = 0x1D800, .to = 0x1DAAF, .name = "Sutton SignWriting" }, 316 | .{ .from = 0x1DF00, .to = 0x1DFFF, .name = "Latin Extended-G" }, 317 | .{ .from = 0x1E000, .to = 0x1E02F, .name = "Glagolitic Supplement" }, 318 | .{ .from = 0x1E030, .to = 0x1E08F, .name = "Cyrillic Extended-D" }, 319 | .{ .from = 0x1E100, .to = 0x1E14F, .name = "Nyiakeng Puachue Hmong" }, 320 | .{ .from = 0x1E290, .to = 0x1E2BF, .name = "Toto" }, 321 | .{ .from = 0x1E2C0, .to = 0x1E2FF, .name = "Wancho" }, 322 | .{ .from = 0x1E4D0, .to = 0x1E4FF, .name = "Nag Mundari" }, 323 | .{ .from = 0x1E5D0, .to = 0x1E5FF, .name = "Ol Onal" }, 324 | .{ .from = 0x1E6C0, .to = 0x1E6FF, .name = "Tai Yo" }, 325 | .{ .from = 0x1E7E0, .to = 0x1E7FF, .name = "Ethiopic Extended-B" }, 326 | .{ .from = 0x1E800, .to = 0x1E8DF, .name = "Mende Kikakui" }, 327 | .{ .from = 0x1E900, .to = 0x1E95F, .name = "Adlam" }, 328 | .{ .from = 0x1EC70, .to = 0x1ECBF, .name = "Indic Siyaq Numbers" }, 329 | .{ .from = 0x1ED00, .to = 0x1ED4F, .name = "Ottoman Siyaq Numbers" }, 330 | .{ .from = 0x1EE00, .to = 0x1EEFF, .name = "Arabic Mathematical Alphabetic Symbols" }, 331 | .{ .from = 0x1F000, .to = 0x1F02F, .name = "Mahjong Tiles" }, 332 | .{ .from = 0x1F030, .to = 0x1F09F, .name = "Domino Tiles" }, 333 | .{ .from = 0x1F0A0, .to = 0x1F0FF, .name = "Playing Cards" }, 334 | .{ .from = 0x1F100, .to = 0x1F1FF, .name = "Enclosed Alphanumeric Supplement" }, 335 | .{ .from = 0x1F200, .to = 0x1F2FF, .name = "Enclosed Ideographic Supplement" }, 336 | .{ .from = 0x1F300, .to = 0x1F5FF, .name = "Miscellaneous Symbols and Pictographs" }, 337 | .{ .from = 0x1F600, .to = 0x1F64F, .name = "Emoticons" }, 338 | .{ .from = 0x1F650, .to = 0x1F67F, .name = "Ornamental Dingbats" }, 339 | .{ .from = 0x1F680, .to = 0x1F6FF, .name = "Transport and Map Symbols" }, 340 | .{ .from = 0x1F700, .to = 0x1F77F, .name = "Alchemical Symbols" }, 341 | .{ .from = 0x1F780, .to = 0x1F7FF, .name = "Geometric Shapes Extended" }, 342 | .{ .from = 0x1F800, .to = 0x1F8FF, .name = "Supplemental Arrows-C" }, 343 | .{ .from = 0x1F900, .to = 0x1F9FF, .name = "Supplemental Symbols and Pictographs" }, 344 | .{ .from = 0x1FA00, .to = 0x1FA6F, .name = "Chess Symbols" }, 345 | .{ .from = 0x1FA70, .to = 0x1FAFF, .name = "Symbols and Pictographs Extended-A" }, 346 | .{ .from = 0x1FB00, .to = 0x1FBFF, .name = "Symbols for Legacy Computing" }, 347 | .{ .from = 0x20000, .to = 0x2A6DF, .name = "CJK Unified Ideographs Extension B" }, 348 | .{ .from = 0x2A700, .to = 0x2B73F, .name = "CJK Unified Ideographs Extension C" }, 349 | .{ .from = 0x2B740, .to = 0x2B81F, .name = "CJK Unified Ideographs Extension D" }, 350 | .{ .from = 0x2B820, .to = 0x2CEAF, .name = "CJK Unified Ideographs Extension E" }, 351 | .{ .from = 0x2CEB0, .to = 0x2EBEF, .name = "CJK Unified Ideographs Extension F" }, 352 | .{ .from = 0x2EBF0, .to = 0x2EE5F, .name = "CJK Unified Ideographs Extension I" }, 353 | .{ .from = 0x2F800, .to = 0x2FA1F, .name = "CJK Compatibility Ideographs Supplement" }, 354 | .{ .from = 0x30000, .to = 0x3134F, .name = "CJK Unified Ideographs Extension G" }, 355 | .{ .from = 0x31350, .to = 0x323AF, .name = "CJK Unified Ideographs Extension H" }, 356 | .{ .from = 0x323B0, .to = 0x3347F, .name = "CJK Unified Ideographs Extension J" }, 357 | .{ .from = 0xE0000, .to = 0xE007F, .name = "Tags" }, 358 | .{ .from = 0xE0100, .to = 0xE01EF, .name = "Variation Selectors Supplement" }, 359 | .{ .from = 0xF0000, .to = 0xFFFFF, .name = "Supplementary Private Use Area-A" }, 360 | .{ .from = 0x100000, .to = 0x10FFFF, .name = "Supplementary Private Use Area-B" }, 361 | }; 362 | -------------------------------------------------------------------------------- /src/name_aliases.zig: -------------------------------------------------------------------------------- 1 | // This file is part of the Unicode Character Database 2 | // For documentation, see http://www.unicode.org/reports/tr44/ 3 | // 4 | // Based on the source file: https://unicode.org/Public/17.0.0/ucd/NameAliases.txt 5 | // 6 | // zig fmt: off 7 | 8 | pub const NameAlias = struct { 9 | code: u21, 10 | alias: []const u8, 11 | type: Type, 12 | 13 | pub const Type = enum { 14 | correction, 15 | control, 16 | alternate, 17 | figment, 18 | abbreviation, 19 | }; 20 | }; 21 | 22 | pub const data = [_]NameAlias{ 23 | .{ .code = 0x0000, .alias = "NULL", .type = .control }, 24 | .{ .code = 0x0000, .alias = "NUL", .type = .abbreviation }, 25 | .{ .code = 0x0001, .alias = "START OF HEADING", .type = .control }, 26 | .{ .code = 0x0001, .alias = "SOH", .type = .abbreviation }, 27 | .{ .code = 0x0002, .alias = "START OF TEXT", .type = .control }, 28 | .{ .code = 0x0002, .alias = "STX", .type = .abbreviation }, 29 | .{ .code = 0x0003, .alias = "END OF TEXT", .type = .control }, 30 | .{ .code = 0x0003, .alias = "ETX", .type = .abbreviation }, 31 | .{ .code = 0x0004, .alias = "END OF TRANSMISSION", .type = .control }, 32 | .{ .code = 0x0004, .alias = "EOT", .type = .abbreviation }, 33 | .{ .code = 0x0005, .alias = "ENQUIRY", .type = .control }, 34 | .{ .code = 0x0005, .alias = "ENQ", .type = .abbreviation }, 35 | .{ .code = 0x0006, .alias = "ACKNOWLEDGE", .type = .control }, 36 | .{ .code = 0x0006, .alias = "ACK", .type = .abbreviation }, 37 | .{ .code = 0x0007, .alias = "ALERT", .type = .control }, 38 | .{ .code = 0x0007, .alias = "BEL", .type = .abbreviation }, 39 | .{ .code = 0x0008, .alias = "BACKSPACE", .type = .control }, 40 | .{ .code = 0x0008, .alias = "BS", .type = .abbreviation }, 41 | .{ .code = 0x0009, .alias = "CHARACTER TABULATION", .type = .control }, 42 | .{ .code = 0x0009, .alias = "HORIZONTAL TABULATION", .type = .control }, 43 | .{ .code = 0x0009, .alias = "HT", .type = .abbreviation }, 44 | .{ .code = 0x0009, .alias = "TAB", .type = .abbreviation }, 45 | .{ .code = 0x000A, .alias = "LINE FEED", .type = .control }, 46 | .{ .code = 0x000A, .alias = "NEW LINE", .type = .control }, 47 | .{ .code = 0x000A, .alias = "END OF LINE", .type = .control }, 48 | .{ .code = 0x000A, .alias = "LF", .type = .abbreviation }, 49 | .{ .code = 0x000A, .alias = "NL", .type = .abbreviation }, 50 | .{ .code = 0x000A, .alias = "EOL", .type = .abbreviation }, 51 | .{ .code = 0x000B, .alias = "LINE TABULATION", .type = .control }, 52 | .{ .code = 0x000B, .alias = "VERTICAL TABULATION", .type = .control }, 53 | .{ .code = 0x000B, .alias = "VT", .type = .abbreviation }, 54 | .{ .code = 0x000C, .alias = "FORM FEED", .type = .control }, 55 | .{ .code = 0x000C, .alias = "FF", .type = .abbreviation }, 56 | .{ .code = 0x000D, .alias = "CARRIAGE RETURN", .type = .control }, 57 | .{ .code = 0x000D, .alias = "CR", .type = .abbreviation }, 58 | .{ .code = 0x000E, .alias = "SHIFT OUT", .type = .control }, 59 | .{ .code = 0x000E, .alias = "LOCKING-SHIFT ONE", .type = .control }, 60 | .{ .code = 0x000E, .alias = "SO", .type = .abbreviation }, 61 | .{ .code = 0x000F, .alias = "SHIFT IN", .type = .control }, 62 | .{ .code = 0x000F, .alias = "LOCKING-SHIFT ZERO", .type = .control }, 63 | .{ .code = 0x000F, .alias = "SI", .type = .abbreviation }, 64 | .{ .code = 0x0010, .alias = "DATA LINK ESCAPE", .type = .control }, 65 | .{ .code = 0x0010, .alias = "DLE", .type = .abbreviation }, 66 | .{ .code = 0x0011, .alias = "DEVICE CONTROL ONE", .type = .control }, 67 | .{ .code = 0x0011, .alias = "DC1", .type = .abbreviation }, 68 | .{ .code = 0x0012, .alias = "DEVICE CONTROL TWO", .type = .control }, 69 | .{ .code = 0x0012, .alias = "DC2", .type = .abbreviation }, 70 | .{ .code = 0x0013, .alias = "DEVICE CONTROL THREE", .type = .control }, 71 | .{ .code = 0x0013, .alias = "DC3", .type = .abbreviation }, 72 | .{ .code = 0x0014, .alias = "DEVICE CONTROL FOUR", .type = .control }, 73 | .{ .code = 0x0014, .alias = "DC4", .type = .abbreviation }, 74 | .{ .code = 0x0015, .alias = "NEGATIVE ACKNOWLEDGE", .type = .control }, 75 | .{ .code = 0x0015, .alias = "NAK", .type = .abbreviation }, 76 | .{ .code = 0x0016, .alias = "SYNCHRONOUS IDLE", .type = .control }, 77 | .{ .code = 0x0016, .alias = "SYN", .type = .abbreviation }, 78 | .{ .code = 0x0017, .alias = "END OF TRANSMISSION BLOCK", .type = .control }, 79 | .{ .code = 0x0017, .alias = "ETB", .type = .abbreviation }, 80 | .{ .code = 0x0018, .alias = "CANCEL", .type = .control }, 81 | .{ .code = 0x0018, .alias = "CAN", .type = .abbreviation }, 82 | .{ .code = 0x0019, .alias = "END OF MEDIUM", .type = .control }, 83 | .{ .code = 0x0019, .alias = "EOM", .type = .abbreviation }, 84 | .{ .code = 0x0019, .alias = "EM", .type = .abbreviation }, 85 | .{ .code = 0x001A, .alias = "SUBSTITUTE", .type = .control }, 86 | .{ .code = 0x001A, .alias = "SUB", .type = .abbreviation }, 87 | .{ .code = 0x001B, .alias = "ESCAPE", .type = .control }, 88 | .{ .code = 0x001B, .alias = "ESC", .type = .abbreviation }, 89 | .{ .code = 0x001C, .alias = "INFORMATION SEPARATOR FOUR", .type = .control }, 90 | .{ .code = 0x001C, .alias = "FILE SEPARATOR", .type = .control }, 91 | .{ .code = 0x001C, .alias = "FS", .type = .abbreviation }, 92 | .{ .code = 0x001D, .alias = "INFORMATION SEPARATOR THREE", .type = .control }, 93 | .{ .code = 0x001D, .alias = "GROUP SEPARATOR", .type = .control }, 94 | .{ .code = 0x001D, .alias = "GS", .type = .abbreviation }, 95 | .{ .code = 0x001E, .alias = "INFORMATION SEPARATOR TWO", .type = .control }, 96 | .{ .code = 0x001E, .alias = "RECORD SEPARATOR", .type = .control }, 97 | .{ .code = 0x001E, .alias = "RS", .type = .abbreviation }, 98 | .{ .code = 0x001F, .alias = "INFORMATION SEPARATOR ONE", .type = .control }, 99 | .{ .code = 0x001F, .alias = "UNIT SEPARATOR", .type = .control }, 100 | .{ .code = 0x001F, .alias = "US", .type = .abbreviation }, 101 | .{ .code = 0x0020, .alias = "SP", .type = .abbreviation }, 102 | .{ .code = 0x007F, .alias = "DELETE", .type = .control }, 103 | .{ .code = 0x007F, .alias = "DEL", .type = .abbreviation }, 104 | .{ .code = 0x0080, .alias = "PADDING CHARACTER", .type = .figment }, 105 | .{ .code = 0x0080, .alias = "PAD", .type = .abbreviation }, 106 | .{ .code = 0x0081, .alias = "HIGH OCTET PRESET", .type = .figment }, 107 | .{ .code = 0x0081, .alias = "HOP", .type = .abbreviation }, 108 | .{ .code = 0x0082, .alias = "BREAK PERMITTED HERE", .type = .control }, 109 | .{ .code = 0x0082, .alias = "BPH", .type = .abbreviation }, 110 | .{ .code = 0x0083, .alias = "NO BREAK HERE", .type = .control }, 111 | .{ .code = 0x0083, .alias = "NBH", .type = .abbreviation }, 112 | .{ .code = 0x0084, .alias = "INDEX", .type = .control }, 113 | .{ .code = 0x0084, .alias = "IND", .type = .abbreviation }, 114 | .{ .code = 0x0085, .alias = "NEXT LINE", .type = .control }, 115 | .{ .code = 0x0085, .alias = "NEL", .type = .abbreviation }, 116 | .{ .code = 0x0086, .alias = "START OF SELECTED AREA", .type = .control }, 117 | .{ .code = 0x0086, .alias = "SSA", .type = .abbreviation }, 118 | .{ .code = 0x0087, .alias = "END OF SELECTED AREA", .type = .control }, 119 | .{ .code = 0x0087, .alias = "ESA", .type = .abbreviation }, 120 | .{ .code = 0x0088, .alias = "CHARACTER TABULATION SET", .type = .control }, 121 | .{ .code = 0x0088, .alias = "HORIZONTAL TABULATION SET", .type = .control }, 122 | .{ .code = 0x0088, .alias = "HTS", .type = .abbreviation }, 123 | .{ .code = 0x0089, .alias = "CHARACTER TABULATION WITH JUSTIFICATION", .type = .control }, 124 | .{ .code = 0x0089, .alias = "HORIZONTAL TABULATION WITH JUSTIFICATION", .type = .control }, 125 | .{ .code = 0x0089, .alias = "HTJ", .type = .abbreviation }, 126 | .{ .code = 0x008A, .alias = "LINE TABULATION SET", .type = .control }, 127 | .{ .code = 0x008A, .alias = "VERTICAL TABULATION SET", .type = .control }, 128 | .{ .code = 0x008A, .alias = "VTS", .type = .abbreviation }, 129 | .{ .code = 0x008B, .alias = "PARTIAL LINE FORWARD", .type = .control }, 130 | .{ .code = 0x008B, .alias = "PARTIAL LINE DOWN", .type = .control }, 131 | .{ .code = 0x008B, .alias = "PLD", .type = .abbreviation }, 132 | .{ .code = 0x008C, .alias = "PARTIAL LINE BACKWARD", .type = .control }, 133 | .{ .code = 0x008C, .alias = "PARTIAL LINE UP", .type = .control }, 134 | .{ .code = 0x008C, .alias = "PLU", .type = .abbreviation }, 135 | .{ .code = 0x008D, .alias = "REVERSE LINE FEED", .type = .control }, 136 | .{ .code = 0x008D, .alias = "REVERSE INDEX", .type = .control }, 137 | .{ .code = 0x008D, .alias = "RI", .type = .abbreviation }, 138 | .{ .code = 0x008E, .alias = "SINGLE SHIFT TWO", .type = .control }, 139 | .{ .code = 0x008E, .alias = "SINGLE-SHIFT-2", .type = .control }, 140 | .{ .code = 0x008E, .alias = "SS2", .type = .abbreviation }, 141 | .{ .code = 0x008F, .alias = "SINGLE SHIFT THREE", .type = .control }, 142 | .{ .code = 0x008F, .alias = "SINGLE-SHIFT-3", .type = .control }, 143 | .{ .code = 0x008F, .alias = "SS3", .type = .abbreviation }, 144 | .{ .code = 0x0090, .alias = "DEVICE CONTROL STRING", .type = .control }, 145 | .{ .code = 0x0090, .alias = "DCS", .type = .abbreviation }, 146 | .{ .code = 0x0091, .alias = "PRIVATE USE ONE", .type = .control }, 147 | .{ .code = 0x0091, .alias = "PRIVATE USE-1", .type = .control }, 148 | .{ .code = 0x0091, .alias = "PU1", .type = .abbreviation }, 149 | .{ .code = 0x0092, .alias = "PRIVATE USE TWO", .type = .control }, 150 | .{ .code = 0x0092, .alias = "PRIVATE USE-2", .type = .control }, 151 | .{ .code = 0x0092, .alias = "PU2", .type = .abbreviation }, 152 | .{ .code = 0x0093, .alias = "SET TRANSMIT STATE", .type = .control }, 153 | .{ .code = 0x0093, .alias = "STS", .type = .abbreviation }, 154 | .{ .code = 0x0094, .alias = "CANCEL CHARACTER", .type = .control }, 155 | .{ .code = 0x0094, .alias = "CCH", .type = .abbreviation }, 156 | .{ .code = 0x0095, .alias = "MESSAGE WAITING", .type = .control }, 157 | .{ .code = 0x0095, .alias = "MW", .type = .abbreviation }, 158 | .{ .code = 0x0096, .alias = "START OF GUARDED AREA", .type = .control }, 159 | .{ .code = 0x0096, .alias = "START OF PROTECTED AREA", .type = .control }, 160 | .{ .code = 0x0096, .alias = "SPA", .type = .abbreviation }, 161 | .{ .code = 0x0097, .alias = "END OF GUARDED AREA", .type = .control }, 162 | .{ .code = 0x0097, .alias = "END OF PROTECTED AREA", .type = .control }, 163 | .{ .code = 0x0097, .alias = "EPA", .type = .abbreviation }, 164 | .{ .code = 0x0098, .alias = "START OF STRING", .type = .control }, 165 | .{ .code = 0x0098, .alias = "SOS", .type = .abbreviation }, 166 | .{ .code = 0x0099, .alias = "SINGLE GRAPHIC CHARACTER INTRODUCER", .type = .figment }, 167 | .{ .code = 0x0099, .alias = "SGC", .type = .abbreviation }, 168 | .{ .code = 0x009A, .alias = "SINGLE CHARACTER INTRODUCER", .type = .control }, 169 | .{ .code = 0x009A, .alias = "SCI", .type = .abbreviation }, 170 | .{ .code = 0x009B, .alias = "CONTROL SEQUENCE INTRODUCER", .type = .control }, 171 | .{ .code = 0x009B, .alias = "CSI", .type = .abbreviation }, 172 | .{ .code = 0x009C, .alias = "STRING TERMINATOR", .type = .control }, 173 | .{ .code = 0x009C, .alias = "ST", .type = .abbreviation }, 174 | .{ .code = 0x009D, .alias = "OPERATING SYSTEM COMMAND", .type = .control }, 175 | .{ .code = 0x009D, .alias = "OSC", .type = .abbreviation }, 176 | .{ .code = 0x009E, .alias = "PRIVACY MESSAGE", .type = .control }, 177 | .{ .code = 0x009E, .alias = "PM", .type = .abbreviation }, 178 | .{ .code = 0x009F, .alias = "APPLICATION PROGRAM COMMAND", .type = .control }, 179 | .{ .code = 0x009F, .alias = "APC", .type = .abbreviation }, 180 | .{ .code = 0x00A0, .alias = "NBSP", .type = .abbreviation }, 181 | .{ .code = 0x00AD, .alias = "SHY", .type = .abbreviation }, 182 | .{ .code = 0x01A2, .alias = "LATIN CAPITAL LETTER GHA", .type = .correction }, 183 | .{ .code = 0x01A3, .alias = "LATIN SMALL LETTER GHA", .type = .correction }, 184 | .{ .code = 0x034F, .alias = "CGJ", .type = .abbreviation }, 185 | .{ .code = 0x0616, .alias = "ARABIC SMALL HIGH LIGATURE ALEF WITH YEH BARREE", .type = .correction }, 186 | .{ .code = 0x061C, .alias = "ALM", .type = .abbreviation }, 187 | .{ .code = 0x0709, .alias = "SYRIAC SUBLINEAR COLON SKEWED LEFT", .type = .correction }, 188 | .{ .code = 0x0CDE, .alias = "KANNADA LETTER LLLA", .type = .correction }, 189 | .{ .code = 0x0E9D, .alias = "LAO LETTER FO FON", .type = .correction }, 190 | .{ .code = 0x0E9F, .alias = "LAO LETTER FO FAY", .type = .correction }, 191 | .{ .code = 0x0EA3, .alias = "LAO LETTER RO", .type = .correction }, 192 | .{ .code = 0x0EA5, .alias = "LAO LETTER LO", .type = .correction }, 193 | .{ .code = 0x0FD0, .alias = "TIBETAN MARK BKA- SHOG GI MGO RGYAN", .type = .correction }, 194 | .{ .code = 0x11EC, .alias = "HANGUL JONGSEONG YESIEUNG-KIYEOK", .type = .correction }, 195 | .{ .code = 0x11ED, .alias = "HANGUL JONGSEONG YESIEUNG-SSANGKIYEOK", .type = .correction }, 196 | .{ .code = 0x11EE, .alias = "HANGUL JONGSEONG SSANGYESIEUNG", .type = .correction }, 197 | .{ .code = 0x11EF, .alias = "HANGUL JONGSEONG YESIEUNG-KHIEUKH", .type = .correction }, 198 | .{ .code = 0x180B, .alias = "FVS1", .type = .abbreviation }, 199 | .{ .code = 0x180C, .alias = "FVS2", .type = .abbreviation }, 200 | .{ .code = 0x180D, .alias = "FVS3", .type = .abbreviation }, 201 | .{ .code = 0x180E, .alias = "MVS", .type = .abbreviation }, 202 | .{ .code = 0x180F, .alias = "FVS4", .type = .abbreviation }, 203 | .{ .code = 0x1BBD, .alias = "SUNDANESE LETTER ARCHAIC I", .type = .correction }, 204 | .{ .code = 0x200B, .alias = "ZWSP", .type = .abbreviation }, 205 | .{ .code = 0x200C, .alias = "ZWNJ", .type = .abbreviation }, 206 | .{ .code = 0x200D, .alias = "ZWJ", .type = .abbreviation }, 207 | .{ .code = 0x200E, .alias = "LRM", .type = .abbreviation }, 208 | .{ .code = 0x200F, .alias = "RLM", .type = .abbreviation }, 209 | .{ .code = 0x202A, .alias = "LRE", .type = .abbreviation }, 210 | .{ .code = 0x202B, .alias = "RLE", .type = .abbreviation }, 211 | .{ .code = 0x202C, .alias = "PDF", .type = .abbreviation }, 212 | .{ .code = 0x202D, .alias = "LRO", .type = .abbreviation }, 213 | .{ .code = 0x202E, .alias = "RLO", .type = .abbreviation }, 214 | .{ .code = 0x202F, .alias = "NNBSP", .type = .abbreviation }, 215 | .{ .code = 0x205F, .alias = "MMSP", .type = .abbreviation }, 216 | .{ .code = 0x2060, .alias = "WJ", .type = .abbreviation }, 217 | .{ .code = 0x2066, .alias = "LRI", .type = .abbreviation }, 218 | .{ .code = 0x2067, .alias = "RLI", .type = .abbreviation }, 219 | .{ .code = 0x2068, .alias = "FSI", .type = .abbreviation }, 220 | .{ .code = 0x2069, .alias = "PDI", .type = .abbreviation }, 221 | .{ .code = 0x2118, .alias = "WEIERSTRASS ELLIPTIC FUNCTION", .type = .correction }, 222 | .{ .code = 0x2448, .alias = "MICR ON US SYMBOL", .type = .correction }, 223 | .{ .code = 0x2449, .alias = "MICR DASH SYMBOL", .type = .correction }, 224 | .{ .code = 0x2B7A, .alias = "LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE", .type = .correction }, 225 | .{ .code = 0x2B7C, .alias = "RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE", .type = .correction }, 226 | .{ .code = 0xA015, .alias = "YI SYLLABLE ITERATION MARK", .type = .correction }, 227 | .{ .code = 0xAA6E, .alias = "MYANMAR LETTER KHAMTI LLA", .type = .correction }, 228 | .{ .code = 0xFE00, .alias = "VS1", .type = .abbreviation }, 229 | .{ .code = 0xFE01, .alias = "VS2", .type = .abbreviation }, 230 | .{ .code = 0xFE02, .alias = "VS3", .type = .abbreviation }, 231 | .{ .code = 0xFE03, .alias = "VS4", .type = .abbreviation }, 232 | .{ .code = 0xFE04, .alias = "VS5", .type = .abbreviation }, 233 | .{ .code = 0xFE05, .alias = "VS6", .type = .abbreviation }, 234 | .{ .code = 0xFE06, .alias = "VS7", .type = .abbreviation }, 235 | .{ .code = 0xFE07, .alias = "VS8", .type = .abbreviation }, 236 | .{ .code = 0xFE08, .alias = "VS9", .type = .abbreviation }, 237 | .{ .code = 0xFE09, .alias = "VS10", .type = .abbreviation }, 238 | .{ .code = 0xFE0A, .alias = "VS11", .type = .abbreviation }, 239 | .{ .code = 0xFE0B, .alias = "VS12", .type = .abbreviation }, 240 | .{ .code = 0xFE0C, .alias = "VS13", .type = .abbreviation }, 241 | .{ .code = 0xFE0D, .alias = "VS14", .type = .abbreviation }, 242 | .{ .code = 0xFE0E, .alias = "VS15", .type = .abbreviation }, 243 | .{ .code = 0xFE0F, .alias = "VS16", .type = .abbreviation }, 244 | .{ .code = 0xFE18, .alias = "PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRACKET", .type = .correction }, 245 | .{ .code = 0xFEFF, .alias = "BYTE ORDER MARK", .type = .alternate }, 246 | .{ .code = 0xFEFF, .alias = "BOM", .type = .abbreviation }, 247 | .{ .code = 0xFEFF, .alias = "ZWNBSP", .type = .abbreviation }, 248 | .{ .code = 0x122D4, .alias = "CUNEIFORM SIGN NU11 TENU", .type = .correction }, 249 | .{ .code = 0x122D5, .alias = "CUNEIFORM SIGN NU11 OVER NU11 BUR OVER BUR", .type = .correction }, 250 | .{ .code = 0x12327, .alias = "CUNEIFORM SIGN KALAM", .type = .correction }, 251 | .{ .code = 0x1680B, .alias = "BAMUM LETTER PHASE-A MAEMGBIEE", .type = .correction }, 252 | .{ .code = 0x16881, .alias = "BAMUM LETTER PHASE-B PUNGGAAM", .type = .correction }, 253 | .{ .code = 0x1688E, .alias = "BAMUM LETTER PHASE-B NGGOM", .type = .correction }, 254 | .{ .code = 0x168DC, .alias = "BAMUM LETTER PHASE-C SHETFON", .type = .correction }, 255 | .{ .code = 0x1697D, .alias = "BAMUM LETTER PHASE-E NGGOP", .type = .correction }, 256 | .{ .code = 0x16E56, .alias = "MEDEFAIDRIN CAPITAL LETTER H", .type = .correction }, 257 | .{ .code = 0x16E57, .alias = "MEDEFAIDRIN CAPITAL LETTER NG", .type = .correction }, 258 | .{ .code = 0x16E76, .alias = "MEDEFAIDRIN SMALL LETTER H", .type = .correction }, 259 | .{ .code = 0x16E77, .alias = "MEDEFAIDRIN SMALL LETTER NG", .type = .correction }, 260 | .{ .code = 0x1B001, .alias = "HENTAIGANA LETTER E-1", .type = .correction }, 261 | .{ .code = 0x1D0C5, .alias = "BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS", .type = .correction }, 262 | .{ .code = 0x1E899, .alias = "MENDE KIKAKUI SYLLABLE M172 MBO", .type = .correction }, 263 | .{ .code = 0x1E89A, .alias = "MENDE KIKAKUI SYLLABLE M174 MBOO", .type = .correction }, 264 | .{ .code = 0xE0100, .alias = "VS17", .type = .abbreviation }, 265 | .{ .code = 0xE0101, .alias = "VS18", .type = .abbreviation }, 266 | .{ .code = 0xE0102, .alias = "VS19", .type = .abbreviation }, 267 | .{ .code = 0xE0103, .alias = "VS20", .type = .abbreviation }, 268 | .{ .code = 0xE0104, .alias = "VS21", .type = .abbreviation }, 269 | .{ .code = 0xE0105, .alias = "VS22", .type = .abbreviation }, 270 | .{ .code = 0xE0106, .alias = "VS23", .type = .abbreviation }, 271 | .{ .code = 0xE0107, .alias = "VS24", .type = .abbreviation }, 272 | .{ .code = 0xE0108, .alias = "VS25", .type = .abbreviation }, 273 | .{ .code = 0xE0109, .alias = "VS26", .type = .abbreviation }, 274 | .{ .code = 0xE010A, .alias = "VS27", .type = .abbreviation }, 275 | .{ .code = 0xE010B, .alias = "VS28", .type = .abbreviation }, 276 | .{ .code = 0xE010C, .alias = "VS29", .type = .abbreviation }, 277 | .{ .code = 0xE010D, .alias = "VS30", .type = .abbreviation }, 278 | .{ .code = 0xE010E, .alias = "VS31", .type = .abbreviation }, 279 | .{ .code = 0xE010F, .alias = "VS32", .type = .abbreviation }, 280 | .{ .code = 0xE0110, .alias = "VS33", .type = .abbreviation }, 281 | .{ .code = 0xE0111, .alias = "VS34", .type = .abbreviation }, 282 | .{ .code = 0xE0112, .alias = "VS35", .type = .abbreviation }, 283 | .{ .code = 0xE0113, .alias = "VS36", .type = .abbreviation }, 284 | .{ .code = 0xE0114, .alias = "VS37", .type = .abbreviation }, 285 | .{ .code = 0xE0115, .alias = "VS38", .type = .abbreviation }, 286 | .{ .code = 0xE0116, .alias = "VS39", .type = .abbreviation }, 287 | .{ .code = 0xE0117, .alias = "VS40", .type = .abbreviation }, 288 | .{ .code = 0xE0118, .alias = "VS41", .type = .abbreviation }, 289 | .{ .code = 0xE0119, .alias = "VS42", .type = .abbreviation }, 290 | .{ .code = 0xE011A, .alias = "VS43", .type = .abbreviation }, 291 | .{ .code = 0xE011B, .alias = "VS44", .type = .abbreviation }, 292 | .{ .code = 0xE011C, .alias = "VS45", .type = .abbreviation }, 293 | .{ .code = 0xE011D, .alias = "VS46", .type = .abbreviation }, 294 | .{ .code = 0xE011E, .alias = "VS47", .type = .abbreviation }, 295 | .{ .code = 0xE011F, .alias = "VS48", .type = .abbreviation }, 296 | .{ .code = 0xE0120, .alias = "VS49", .type = .abbreviation }, 297 | .{ .code = 0xE0121, .alias = "VS50", .type = .abbreviation }, 298 | .{ .code = 0xE0122, .alias = "VS51", .type = .abbreviation }, 299 | .{ .code = 0xE0123, .alias = "VS52", .type = .abbreviation }, 300 | .{ .code = 0xE0124, .alias = "VS53", .type = .abbreviation }, 301 | .{ .code = 0xE0125, .alias = "VS54", .type = .abbreviation }, 302 | .{ .code = 0xE0126, .alias = "VS55", .type = .abbreviation }, 303 | .{ .code = 0xE0127, .alias = "VS56", .type = .abbreviation }, 304 | .{ .code = 0xE0128, .alias = "VS57", .type = .abbreviation }, 305 | .{ .code = 0xE0129, .alias = "VS58", .type = .abbreviation }, 306 | .{ .code = 0xE012A, .alias = "VS59", .type = .abbreviation }, 307 | .{ .code = 0xE012B, .alias = "VS60", .type = .abbreviation }, 308 | .{ .code = 0xE012C, .alias = "VS61", .type = .abbreviation }, 309 | .{ .code = 0xE012D, .alias = "VS62", .type = .abbreviation }, 310 | .{ .code = 0xE012E, .alias = "VS63", .type = .abbreviation }, 311 | .{ .code = 0xE012F, .alias = "VS64", .type = .abbreviation }, 312 | .{ .code = 0xE0130, .alias = "VS65", .type = .abbreviation }, 313 | .{ .code = 0xE0131, .alias = "VS66", .type = .abbreviation }, 314 | .{ .code = 0xE0132, .alias = "VS67", .type = .abbreviation }, 315 | .{ .code = 0xE0133, .alias = "VS68", .type = .abbreviation }, 316 | .{ .code = 0xE0134, .alias = "VS69", .type = .abbreviation }, 317 | .{ .code = 0xE0135, .alias = "VS70", .type = .abbreviation }, 318 | .{ .code = 0xE0136, .alias = "VS71", .type = .abbreviation }, 319 | .{ .code = 0xE0137, .alias = "VS72", .type = .abbreviation }, 320 | .{ .code = 0xE0138, .alias = "VS73", .type = .abbreviation }, 321 | .{ .code = 0xE0139, .alias = "VS74", .type = .abbreviation }, 322 | .{ .code = 0xE013A, .alias = "VS75", .type = .abbreviation }, 323 | .{ .code = 0xE013B, .alias = "VS76", .type = .abbreviation }, 324 | .{ .code = 0xE013C, .alias = "VS77", .type = .abbreviation }, 325 | .{ .code = 0xE013D, .alias = "VS78", .type = .abbreviation }, 326 | .{ .code = 0xE013E, .alias = "VS79", .type = .abbreviation }, 327 | .{ .code = 0xE013F, .alias = "VS80", .type = .abbreviation }, 328 | .{ .code = 0xE0140, .alias = "VS81", .type = .abbreviation }, 329 | .{ .code = 0xE0141, .alias = "VS82", .type = .abbreviation }, 330 | .{ .code = 0xE0142, .alias = "VS83", .type = .abbreviation }, 331 | .{ .code = 0xE0143, .alias = "VS84", .type = .abbreviation }, 332 | .{ .code = 0xE0144, .alias = "VS85", .type = .abbreviation }, 333 | .{ .code = 0xE0145, .alias = "VS86", .type = .abbreviation }, 334 | .{ .code = 0xE0146, .alias = "VS87", .type = .abbreviation }, 335 | .{ .code = 0xE0147, .alias = "VS88", .type = .abbreviation }, 336 | .{ .code = 0xE0148, .alias = "VS89", .type = .abbreviation }, 337 | .{ .code = 0xE0149, .alias = "VS90", .type = .abbreviation }, 338 | .{ .code = 0xE014A, .alias = "VS91", .type = .abbreviation }, 339 | .{ .code = 0xE014B, .alias = "VS92", .type = .abbreviation }, 340 | .{ .code = 0xE014C, .alias = "VS93", .type = .abbreviation }, 341 | .{ .code = 0xE014D, .alias = "VS94", .type = .abbreviation }, 342 | .{ .code = 0xE014E, .alias = "VS95", .type = .abbreviation }, 343 | .{ .code = 0xE014F, .alias = "VS96", .type = .abbreviation }, 344 | .{ .code = 0xE0150, .alias = "VS97", .type = .abbreviation }, 345 | .{ .code = 0xE0151, .alias = "VS98", .type = .abbreviation }, 346 | .{ .code = 0xE0152, .alias = "VS99", .type = .abbreviation }, 347 | .{ .code = 0xE0153, .alias = "VS100", .type = .abbreviation }, 348 | .{ .code = 0xE0154, .alias = "VS101", .type = .abbreviation }, 349 | .{ .code = 0xE0155, .alias = "VS102", .type = .abbreviation }, 350 | .{ .code = 0xE0156, .alias = "VS103", .type = .abbreviation }, 351 | .{ .code = 0xE0157, .alias = "VS104", .type = .abbreviation }, 352 | .{ .code = 0xE0158, .alias = "VS105", .type = .abbreviation }, 353 | .{ .code = 0xE0159, .alias = "VS106", .type = .abbreviation }, 354 | .{ .code = 0xE015A, .alias = "VS107", .type = .abbreviation }, 355 | .{ .code = 0xE015B, .alias = "VS108", .type = .abbreviation }, 356 | .{ .code = 0xE015C, .alias = "VS109", .type = .abbreviation }, 357 | .{ .code = 0xE015D, .alias = "VS110", .type = .abbreviation }, 358 | .{ .code = 0xE015E, .alias = "VS111", .type = .abbreviation }, 359 | .{ .code = 0xE015F, .alias = "VS112", .type = .abbreviation }, 360 | .{ .code = 0xE0160, .alias = "VS113", .type = .abbreviation }, 361 | .{ .code = 0xE0161, .alias = "VS114", .type = .abbreviation }, 362 | .{ .code = 0xE0162, .alias = "VS115", .type = .abbreviation }, 363 | .{ .code = 0xE0163, .alias = "VS116", .type = .abbreviation }, 364 | .{ .code = 0xE0164, .alias = "VS117", .type = .abbreviation }, 365 | .{ .code = 0xE0165, .alias = "VS118", .type = .abbreviation }, 366 | .{ .code = 0xE0166, .alias = "VS119", .type = .abbreviation }, 367 | .{ .code = 0xE0167, .alias = "VS120", .type = .abbreviation }, 368 | .{ .code = 0xE0168, .alias = "VS121", .type = .abbreviation }, 369 | .{ .code = 0xE0169, .alias = "VS122", .type = .abbreviation }, 370 | .{ .code = 0xE016A, .alias = "VS123", .type = .abbreviation }, 371 | .{ .code = 0xE016B, .alias = "VS124", .type = .abbreviation }, 372 | .{ .code = 0xE016C, .alias = "VS125", .type = .abbreviation }, 373 | .{ .code = 0xE016D, .alias = "VS126", .type = .abbreviation }, 374 | .{ .code = 0xE016E, .alias = "VS127", .type = .abbreviation }, 375 | .{ .code = 0xE016F, .alias = "VS128", .type = .abbreviation }, 376 | .{ .code = 0xE0170, .alias = "VS129", .type = .abbreviation }, 377 | .{ .code = 0xE0171, .alias = "VS130", .type = .abbreviation }, 378 | .{ .code = 0xE0172, .alias = "VS131", .type = .abbreviation }, 379 | .{ .code = 0xE0173, .alias = "VS132", .type = .abbreviation }, 380 | .{ .code = 0xE0174, .alias = "VS133", .type = .abbreviation }, 381 | .{ .code = 0xE0175, .alias = "VS134", .type = .abbreviation }, 382 | .{ .code = 0xE0176, .alias = "VS135", .type = .abbreviation }, 383 | .{ .code = 0xE0177, .alias = "VS136", .type = .abbreviation }, 384 | .{ .code = 0xE0178, .alias = "VS137", .type = .abbreviation }, 385 | .{ .code = 0xE0179, .alias = "VS138", .type = .abbreviation }, 386 | .{ .code = 0xE017A, .alias = "VS139", .type = .abbreviation }, 387 | .{ .code = 0xE017B, .alias = "VS140", .type = .abbreviation }, 388 | .{ .code = 0xE017C, .alias = "VS141", .type = .abbreviation }, 389 | .{ .code = 0xE017D, .alias = "VS142", .type = .abbreviation }, 390 | .{ .code = 0xE017E, .alias = "VS143", .type = .abbreviation }, 391 | .{ .code = 0xE017F, .alias = "VS144", .type = .abbreviation }, 392 | .{ .code = 0xE0180, .alias = "VS145", .type = .abbreviation }, 393 | .{ .code = 0xE0181, .alias = "VS146", .type = .abbreviation }, 394 | .{ .code = 0xE0182, .alias = "VS147", .type = .abbreviation }, 395 | .{ .code = 0xE0183, .alias = "VS148", .type = .abbreviation }, 396 | .{ .code = 0xE0184, .alias = "VS149", .type = .abbreviation }, 397 | .{ .code = 0xE0185, .alias = "VS150", .type = .abbreviation }, 398 | .{ .code = 0xE0186, .alias = "VS151", .type = .abbreviation }, 399 | .{ .code = 0xE0187, .alias = "VS152", .type = .abbreviation }, 400 | .{ .code = 0xE0188, .alias = "VS153", .type = .abbreviation }, 401 | .{ .code = 0xE0189, .alias = "VS154", .type = .abbreviation }, 402 | .{ .code = 0xE018A, .alias = "VS155", .type = .abbreviation }, 403 | .{ .code = 0xE018B, .alias = "VS156", .type = .abbreviation }, 404 | .{ .code = 0xE018C, .alias = "VS157", .type = .abbreviation }, 405 | .{ .code = 0xE018D, .alias = "VS158", .type = .abbreviation }, 406 | .{ .code = 0xE018E, .alias = "VS159", .type = .abbreviation }, 407 | .{ .code = 0xE018F, .alias = "VS160", .type = .abbreviation }, 408 | .{ .code = 0xE0190, .alias = "VS161", .type = .abbreviation }, 409 | .{ .code = 0xE0191, .alias = "VS162", .type = .abbreviation }, 410 | .{ .code = 0xE0192, .alias = "VS163", .type = .abbreviation }, 411 | .{ .code = 0xE0193, .alias = "VS164", .type = .abbreviation }, 412 | .{ .code = 0xE0194, .alias = "VS165", .type = .abbreviation }, 413 | .{ .code = 0xE0195, .alias = "VS166", .type = .abbreviation }, 414 | .{ .code = 0xE0196, .alias = "VS167", .type = .abbreviation }, 415 | .{ .code = 0xE0197, .alias = "VS168", .type = .abbreviation }, 416 | .{ .code = 0xE0198, .alias = "VS169", .type = .abbreviation }, 417 | .{ .code = 0xE0199, .alias = "VS170", .type = .abbreviation }, 418 | .{ .code = 0xE019A, .alias = "VS171", .type = .abbreviation }, 419 | .{ .code = 0xE019B, .alias = "VS172", .type = .abbreviation }, 420 | .{ .code = 0xE019C, .alias = "VS173", .type = .abbreviation }, 421 | .{ .code = 0xE019D, .alias = "VS174", .type = .abbreviation }, 422 | .{ .code = 0xE019E, .alias = "VS175", .type = .abbreviation }, 423 | .{ .code = 0xE019F, .alias = "VS176", .type = .abbreviation }, 424 | .{ .code = 0xE01A0, .alias = "VS177", .type = .abbreviation }, 425 | .{ .code = 0xE01A1, .alias = "VS178", .type = .abbreviation }, 426 | .{ .code = 0xE01A2, .alias = "VS179", .type = .abbreviation }, 427 | .{ .code = 0xE01A3, .alias = "VS180", .type = .abbreviation }, 428 | .{ .code = 0xE01A4, .alias = "VS181", .type = .abbreviation }, 429 | .{ .code = 0xE01A5, .alias = "VS182", .type = .abbreviation }, 430 | .{ .code = 0xE01A6, .alias = "VS183", .type = .abbreviation }, 431 | .{ .code = 0xE01A7, .alias = "VS184", .type = .abbreviation }, 432 | .{ .code = 0xE01A8, .alias = "VS185", .type = .abbreviation }, 433 | .{ .code = 0xE01A9, .alias = "VS186", .type = .abbreviation }, 434 | .{ .code = 0xE01AA, .alias = "VS187", .type = .abbreviation }, 435 | .{ .code = 0xE01AB, .alias = "VS188", .type = .abbreviation }, 436 | .{ .code = 0xE01AC, .alias = "VS189", .type = .abbreviation }, 437 | .{ .code = 0xE01AD, .alias = "VS190", .type = .abbreviation }, 438 | .{ .code = 0xE01AE, .alias = "VS191", .type = .abbreviation }, 439 | .{ .code = 0xE01AF, .alias = "VS192", .type = .abbreviation }, 440 | .{ .code = 0xE01B0, .alias = "VS193", .type = .abbreviation }, 441 | .{ .code = 0xE01B1, .alias = "VS194", .type = .abbreviation }, 442 | .{ .code = 0xE01B2, .alias = "VS195", .type = .abbreviation }, 443 | .{ .code = 0xE01B3, .alias = "VS196", .type = .abbreviation }, 444 | .{ .code = 0xE01B4, .alias = "VS197", .type = .abbreviation }, 445 | .{ .code = 0xE01B5, .alias = "VS198", .type = .abbreviation }, 446 | .{ .code = 0xE01B6, .alias = "VS199", .type = .abbreviation }, 447 | .{ .code = 0xE01B7, .alias = "VS200", .type = .abbreviation }, 448 | .{ .code = 0xE01B8, .alias = "VS201", .type = .abbreviation }, 449 | .{ .code = 0xE01B9, .alias = "VS202", .type = .abbreviation }, 450 | .{ .code = 0xE01BA, .alias = "VS203", .type = .abbreviation }, 451 | .{ .code = 0xE01BB, .alias = "VS204", .type = .abbreviation }, 452 | .{ .code = 0xE01BC, .alias = "VS205", .type = .abbreviation }, 453 | .{ .code = 0xE01BD, .alias = "VS206", .type = .abbreviation }, 454 | .{ .code = 0xE01BE, .alias = "VS207", .type = .abbreviation }, 455 | .{ .code = 0xE01BF, .alias = "VS208", .type = .abbreviation }, 456 | .{ .code = 0xE01C0, .alias = "VS209", .type = .abbreviation }, 457 | .{ .code = 0xE01C1, .alias = "VS210", .type = .abbreviation }, 458 | .{ .code = 0xE01C2, .alias = "VS211", .type = .abbreviation }, 459 | .{ .code = 0xE01C3, .alias = "VS212", .type = .abbreviation }, 460 | .{ .code = 0xE01C4, .alias = "VS213", .type = .abbreviation }, 461 | .{ .code = 0xE01C5, .alias = "VS214", .type = .abbreviation }, 462 | .{ .code = 0xE01C6, .alias = "VS215", .type = .abbreviation }, 463 | .{ .code = 0xE01C7, .alias = "VS216", .type = .abbreviation }, 464 | .{ .code = 0xE01C8, .alias = "VS217", .type = .abbreviation }, 465 | .{ .code = 0xE01C9, .alias = "VS218", .type = .abbreviation }, 466 | .{ .code = 0xE01CA, .alias = "VS219", .type = .abbreviation }, 467 | .{ .code = 0xE01CB, .alias = "VS220", .type = .abbreviation }, 468 | .{ .code = 0xE01CC, .alias = "VS221", .type = .abbreviation }, 469 | .{ .code = 0xE01CD, .alias = "VS222", .type = .abbreviation }, 470 | .{ .code = 0xE01CE, .alias = "VS223", .type = .abbreviation }, 471 | .{ .code = 0xE01CF, .alias = "VS224", .type = .abbreviation }, 472 | .{ .code = 0xE01D0, .alias = "VS225", .type = .abbreviation }, 473 | .{ .code = 0xE01D1, .alias = "VS226", .type = .abbreviation }, 474 | .{ .code = 0xE01D2, .alias = "VS227", .type = .abbreviation }, 475 | .{ .code = 0xE01D3, .alias = "VS228", .type = .abbreviation }, 476 | .{ .code = 0xE01D4, .alias = "VS229", .type = .abbreviation }, 477 | .{ .code = 0xE01D5, .alias = "VS230", .type = .abbreviation }, 478 | .{ .code = 0xE01D6, .alias = "VS231", .type = .abbreviation }, 479 | .{ .code = 0xE01D7, .alias = "VS232", .type = .abbreviation }, 480 | .{ .code = 0xE01D8, .alias = "VS233", .type = .abbreviation }, 481 | .{ .code = 0xE01D9, .alias = "VS234", .type = .abbreviation }, 482 | .{ .code = 0xE01DA, .alias = "VS235", .type = .abbreviation }, 483 | .{ .code = 0xE01DB, .alias = "VS236", .type = .abbreviation }, 484 | .{ .code = 0xE01DC, .alias = "VS237", .type = .abbreviation }, 485 | .{ .code = 0xE01DD, .alias = "VS238", .type = .abbreviation }, 486 | .{ .code = 0xE01DE, .alias = "VS239", .type = .abbreviation }, 487 | .{ .code = 0xE01DF, .alias = "VS240", .type = .abbreviation }, 488 | .{ .code = 0xE01E0, .alias = "VS241", .type = .abbreviation }, 489 | .{ .code = 0xE01E1, .alias = "VS242", .type = .abbreviation }, 490 | .{ .code = 0xE01E2, .alias = "VS243", .type = .abbreviation }, 491 | .{ .code = 0xE01E3, .alias = "VS244", .type = .abbreviation }, 492 | .{ .code = 0xE01E4, .alias = "VS245", .type = .abbreviation }, 493 | .{ .code = 0xE01E5, .alias = "VS246", .type = .abbreviation }, 494 | .{ .code = 0xE01E6, .alias = "VS247", .type = .abbreviation }, 495 | .{ .code = 0xE01E7, .alias = "VS248", .type = .abbreviation }, 496 | .{ .code = 0xE01E8, .alias = "VS249", .type = .abbreviation }, 497 | .{ .code = 0xE01E9, .alias = "VS250", .type = .abbreviation }, 498 | .{ .code = 0xE01EA, .alias = "VS251", .type = .abbreviation }, 499 | .{ .code = 0xE01EB, .alias = "VS252", .type = .abbreviation }, 500 | .{ .code = 0xE01EC, .alias = "VS253", .type = .abbreviation }, 501 | .{ .code = 0xE01ED, .alias = "VS254", .type = .abbreviation }, 502 | .{ .code = 0xE01EE, .alias = "VS255", .type = .abbreviation }, 503 | .{ .code = 0xE01EF, .alias = "VS256", .type = .abbreviation }, 504 | }; 505 | --------------------------------------------------------------------------------