From b6f875d3682664a981dd91ce345c5f4be96069cd Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 22 Dec 2022 12:08:26 -0800 Subject: [PATCH] add Jamo, closes #20 --- generate.zig | 1 + scripts/Jamo.zig | 36 +++++++++++++++++++++ src/jamo.zig | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.zig | 1 + src/main.zig | 1 + 5 files changed, 120 insertions(+) create mode 100644 scripts/Jamo.zig create mode 100644 src/jamo.zig diff --git a/generate.zig b/generate.zig index 46665d91bde92509b2240e9eae264b0f5e2be1e0..72c045aabc791c60657b01a72443669f465b980b 100644 --- a/generate.zig +++ b/generate.zig @@ -16,6 +16,7 @@ const files = [_]type{ @import("./scripts/HangulSyllableType.zig"), @import("./scripts/IndicPositionalCategory.zig"), @import("./scripts/IndicSyllabicCategory.zig"), + @import("./scripts/Jamo.zig"), }; pub fn main() !void { diff --git a/scripts/Jamo.zig b/scripts/Jamo.zig new file mode 100644 index 0000000000000000000000000000000000000000..2d14d890d43ff6eb9b347d642e8358dfd180e2c3 --- /dev/null +++ b/scripts/Jamo.zig @@ -0,0 +1,36 @@ +const std = @import("std"); +const common = @import("./_common.zig"); + +pub usingnamespace common.Main(struct { + pub const source_file = "Jamo"; + + pub const dest_file = "src/jamo.zig"; + + pub const dest_header = + \\pub const Jamo = struct { + \\ code: u21, + \\ short_name: []const u8, + \\}; + \\ + \\pub const data = [_]Jamo{ + \\ + ; + + pub const dest_footer = + \\}; + \\ + ; + + pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !bool { + _ = alloc; + var it = std.mem.tokenize(u8, line, "; "); + + const first = it.next().?; + const next = it.next().?; + const actual = if (std.mem.eql(u8, next, "#")) "" else next; + + try writer.print(" .{{ .code = 0x{s}, .short_name = \"{}\" }},\n", .{ first, std.zig.fmtEscapes(actual) }); + + return true; + } +}); diff --git a/src/jamo.zig b/src/jamo.zig new file mode 100644 index 0000000000000000000000000000000000000000..4510d5063fdc83ca649fd15948defc12415736a3 --- /dev/null +++ b/src/jamo.zig @@ -0,0 +1,81 @@ +// This file is part of the Unicode Character Database +// For documentation, see http://www.unicode.org/reports/tr44/ +// +// Based on the source file: https://unicode.org/Public/13.0.0/ucd/Jamo.txt +// +// zig fmt: off + +pub const Jamo = struct { + code: u21, + short_name: []const u8, +}; + +pub const data = [_]Jamo{ + .{ .code = 0x1100, .short_name = "G" }, + .{ .code = 0x1101, .short_name = "GG" }, + .{ .code = 0x1102, .short_name = "N" }, + .{ .code = 0x1103, .short_name = "D" }, + .{ .code = 0x1104, .short_name = "DD" }, + .{ .code = 0x1105, .short_name = "R" }, + .{ .code = 0x1106, .short_name = "M" }, + .{ .code = 0x1107, .short_name = "B" }, + .{ .code = 0x1108, .short_name = "BB" }, + .{ .code = 0x1109, .short_name = "S" }, + .{ .code = 0x110A, .short_name = "SS" }, + .{ .code = 0x110B, .short_name = "" }, + .{ .code = 0x110C, .short_name = "J" }, + .{ .code = 0x110D, .short_name = "JJ" }, + .{ .code = 0x110E, .short_name = "C" }, + .{ .code = 0x110F, .short_name = "K" }, + .{ .code = 0x1110, .short_name = "T" }, + .{ .code = 0x1111, .short_name = "P" }, + .{ .code = 0x1112, .short_name = "H" }, + .{ .code = 0x1161, .short_name = "A" }, + .{ .code = 0x1162, .short_name = "AE" }, + .{ .code = 0x1163, .short_name = "YA" }, + .{ .code = 0x1164, .short_name = "YAE" }, + .{ .code = 0x1165, .short_name = "EO" }, + .{ .code = 0x1166, .short_name = "E" }, + .{ .code = 0x1167, .short_name = "YEO" }, + .{ .code = 0x1168, .short_name = "YE" }, + .{ .code = 0x1169, .short_name = "O" }, + .{ .code = 0x116A, .short_name = "WA" }, + .{ .code = 0x116B, .short_name = "WAE" }, + .{ .code = 0x116C, .short_name = "OE" }, + .{ .code = 0x116D, .short_name = "YO" }, + .{ .code = 0x116E, .short_name = "U" }, + .{ .code = 0x116F, .short_name = "WEO" }, + .{ .code = 0x1170, .short_name = "WE" }, + .{ .code = 0x1171, .short_name = "WI" }, + .{ .code = 0x1172, .short_name = "YU" }, + .{ .code = 0x1173, .short_name = "EU" }, + .{ .code = 0x1174, .short_name = "YI" }, + .{ .code = 0x1175, .short_name = "I" }, + .{ .code = 0x11A8, .short_name = "G" }, + .{ .code = 0x11A9, .short_name = "GG" }, + .{ .code = 0x11AA, .short_name = "GS" }, + .{ .code = 0x11AB, .short_name = "N" }, + .{ .code = 0x11AC, .short_name = "NJ" }, + .{ .code = 0x11AD, .short_name = "NH" }, + .{ .code = 0x11AE, .short_name = "D" }, + .{ .code = 0x11AF, .short_name = "L" }, + .{ .code = 0x11B0, .short_name = "LG" }, + .{ .code = 0x11B1, .short_name = "LM" }, + .{ .code = 0x11B2, .short_name = "LB" }, + .{ .code = 0x11B3, .short_name = "LS" }, + .{ .code = 0x11B4, .short_name = "LT" }, + .{ .code = 0x11B5, .short_name = "LP" }, + .{ .code = 0x11B6, .short_name = "LH" }, + .{ .code = 0x11B7, .short_name = "M" }, + .{ .code = 0x11B8, .short_name = "B" }, + .{ .code = 0x11B9, .short_name = "BS" }, + .{ .code = 0x11BA, .short_name = "S" }, + .{ .code = 0x11BB, .short_name = "SS" }, + .{ .code = 0x11BC, .short_name = "NG" }, + .{ .code = 0x11BD, .short_name = "J" }, + .{ .code = 0x11BE, .short_name = "C" }, + .{ .code = 0x11BF, .short_name = "K" }, + .{ .code = 0x11C0, .short_name = "T" }, + .{ .code = 0x11C1, .short_name = "P" }, + .{ .code = 0x11C2, .short_name = "H" }, +}; diff --git a/src/lib.zig b/src/lib.zig index 815dbe3b1b7413e9e5cf90141a2803138b09e79b..c8c63df0f008e267469d7fd9f0d07fc9c7002d21 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -17,3 +17,4 @@ pub const hangul_syllable_type = @import("./hangul_syllable_type.zig"); // Index.txt pub const indic_positional_category = @import("./indic_positional_category.zig"); pub const indic_syllabic_category = @import("./indic_syllabic_category.zig"); +pub const jamo = @import("./jamo.zig"); diff --git a/src/main.zig b/src/main.zig index ae0321956c4afe6678f3619f66f2970830a0f1b3..ade21414d0007db72d402cfb6942a1c83745969e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -21,6 +21,7 @@ pub fn main() !void { ucd.hangul_syllable_type, ucd.indic_positional_category, ucd.indic_syllabic_category, + ucd.jamo, }; inline for (data) |b| { -- 2.54.0