diff --git a/generate.zig b/generate.zig index aa37fb205214a92e7197841e148ea0a298cb3e5e..8452d7b016e5ee3294e88ef81d8479a28ab77746 100644 --- a/generate.zig +++ b/generate.zig @@ -7,6 +7,7 @@ const files = [_]type{ @import("./scripts/BidiMirroring.zig"), @import("./scripts/CJKRadicals.zig"), @import("./scripts/CaseFolding.zig"), + @import("./scripts/CompositionExclusions.zig"), }; pub fn main() !void { diff --git a/scripts/CompositionExclusions.zig b/scripts/CompositionExclusions.zig new file mode 100644 index 0000000000000000000000000000000000000000..7e002ba126d44c8b653e1801206d58419f865163 --- /dev/null +++ b/scripts/CompositionExclusions.zig @@ -0,0 +1,35 @@ +const std = @import("std"); +const common = @import("./_common.zig"); +const extras = @import("extras"); + +pub usingnamespace common.Main(struct { + pub const source_file = "CompositionExclusions"; + + pub const dest_file = "src/composition_exclusions.zig"; + + pub const dest_header = + \\pub const data = [_]u21{ + \\ + ; + + pub const dest_footer = + \\}; + \\ + ; + + pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !bool { + _ = alloc; + var it = std.mem.split(u8, line, " "); + try writer.print(" 0x{s}, // ", .{it.next().?}); + + while (it.next()) |item| { + if (item.len == 0) continue; + if (std.mem.eql(u8, item, "#")) { + try writer.writeAll(std.mem.trimLeft(u8, it.rest(), " ")); + try writer.writeAll("\n"); + break; + } + } + return true; + } +}); diff --git a/src/composition_exclusions.zig b/src/composition_exclusions.zig new file mode 100644 index 0000000000000000000000000000000000000000..ea9887814394ceba9ed0d8b8aaee0fc3e6342534 --- /dev/null +++ b/src/composition_exclusions.zig @@ -0,0 +1,90 @@ +// 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/CompositionExclusions.txt +// +// zig fmt: off + +pub const data = [_]u21{ + 0x0958, // DEVANAGARI LETTER QA + 0x0959, // DEVANAGARI LETTER KHHA + 0x095A, // DEVANAGARI LETTER GHHA + 0x095B, // DEVANAGARI LETTER ZA + 0x095C, // DEVANAGARI LETTER DDDHA + 0x095D, // DEVANAGARI LETTER RHA + 0x095E, // DEVANAGARI LETTER FA + 0x095F, // DEVANAGARI LETTER YYA + 0x09DC, // BENGALI LETTER RRA + 0x09DD, // BENGALI LETTER RHA + 0x09DF, // BENGALI LETTER YYA + 0x0A33, // GURMUKHI LETTER LLA + 0x0A36, // GURMUKHI LETTER SHA + 0x0A59, // GURMUKHI LETTER KHHA + 0x0A5A, // GURMUKHI LETTER GHHA + 0x0A5B, // GURMUKHI LETTER ZA + 0x0A5E, // GURMUKHI LETTER FA + 0x0B5C, // ORIYA LETTER RRA + 0x0B5D, // ORIYA LETTER RHA + 0x0F43, // TIBETAN LETTER GHA + 0x0F4D, // TIBETAN LETTER DDHA + 0x0F52, // TIBETAN LETTER DHA + 0x0F57, // TIBETAN LETTER BHA + 0x0F5C, // TIBETAN LETTER DZHA + 0x0F69, // TIBETAN LETTER KSSA + 0x0F76, // TIBETAN VOWEL SIGN VOCALIC R + 0x0F78, // TIBETAN VOWEL SIGN VOCALIC L + 0x0F93, // TIBETAN SUBJOINED LETTER GHA + 0x0F9D, // TIBETAN SUBJOINED LETTER DDHA + 0x0FA2, // TIBETAN SUBJOINED LETTER DHA + 0x0FA7, // TIBETAN SUBJOINED LETTER BHA + 0x0FAC, // TIBETAN SUBJOINED LETTER DZHA + 0x0FB9, // TIBETAN SUBJOINED LETTER KSSA + 0xFB1D, // HEBREW LETTER YOD WITH HIRIQ + 0xFB1F, // HEBREW LIGATURE YIDDISH YOD YOD PATAH + 0xFB2A, // HEBREW LETTER SHIN WITH SHIN DOT + 0xFB2B, // HEBREW LETTER SHIN WITH SIN DOT + 0xFB2C, // HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT + 0xFB2D, // HEBREW LETTER SHIN WITH DAGESH AND SIN DOT + 0xFB2E, // HEBREW LETTER ALEF WITH PATAH + 0xFB2F, // HEBREW LETTER ALEF WITH QAMATS + 0xFB30, // HEBREW LETTER ALEF WITH MAPIQ + 0xFB31, // HEBREW LETTER BET WITH DAGESH + 0xFB32, // HEBREW LETTER GIMEL WITH DAGESH + 0xFB33, // HEBREW LETTER DALET WITH DAGESH + 0xFB34, // HEBREW LETTER HE WITH MAPIQ + 0xFB35, // HEBREW LETTER VAV WITH DAGESH + 0xFB36, // HEBREW LETTER ZAYIN WITH DAGESH + 0xFB38, // HEBREW LETTER TET WITH DAGESH + 0xFB39, // HEBREW LETTER YOD WITH DAGESH + 0xFB3A, // HEBREW LETTER FINAL KAF WITH DAGESH + 0xFB3B, // HEBREW LETTER KAF WITH DAGESH + 0xFB3C, // HEBREW LETTER LAMED WITH DAGESH + 0xFB3E, // HEBREW LETTER MEM WITH DAGESH + 0xFB40, // HEBREW LETTER NUN WITH DAGESH + 0xFB41, // HEBREW LETTER SAMEKH WITH DAGESH + 0xFB43, // HEBREW LETTER FINAL PE WITH DAGESH + 0xFB44, // HEBREW LETTER PE WITH DAGESH + 0xFB46, // HEBREW LETTER TSADI WITH DAGESH + 0xFB47, // HEBREW LETTER QOF WITH DAGESH + 0xFB48, // HEBREW LETTER RESH WITH DAGESH + 0xFB49, // HEBREW LETTER SHIN WITH DAGESH + 0xFB4A, // HEBREW LETTER TAV WITH DAGESH + 0xFB4B, // HEBREW LETTER VAV WITH HOLAM + 0xFB4C, // HEBREW LETTER BET WITH RAFE + 0xFB4D, // HEBREW LETTER KAF WITH RAFE + 0xFB4E, // HEBREW LETTER PE WITH RAFE + 0x2ADC, // FORKING + 0x1D15E, // MUSICAL SYMBOL HALF NOTE + 0x1D15F, // MUSICAL SYMBOL QUARTER NOTE + 0x1D160, // MUSICAL SYMBOL EIGHTH NOTE + 0x1D161, // MUSICAL SYMBOL SIXTEENTH NOTE + 0x1D162, // MUSICAL SYMBOL THIRTY-SECOND NOTE + 0x1D163, // MUSICAL SYMBOL SIXTY-FOURTH NOTE + 0x1D164, // MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE + 0x1D1BB, // MUSICAL SYMBOL MINIMA + 0x1D1BC, // MUSICAL SYMBOL MINIMA BLACK + 0x1D1BD, // MUSICAL SYMBOL SEMIMINIMA WHITE + 0x1D1BE, // MUSICAL SYMBOL SEMIMINIMA BLACK + 0x1D1BF, // MUSICAL SYMBOL FUSA WHITE + 0x1D1C0, // MUSICAL SYMBOL FUSA BLACK +}; diff --git a/src/lib.zig b/src/lib.zig index b4a55cacc3ef502f5262b983be547ecdc5a8dbe3..8fa421dda24b498f0e9d92b80f1ac24cb2c3de8a 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -4,3 +4,4 @@ pub const bidi_mirroring = @import("./bidi_mirroring.zig"); pub const blocks = @import("./blocks.zig"); pub const cjk_radicals = @import("./cjk_radicals.zig"); pub const case_folding = @import("./case_folding.zig"); +pub const composition_exclusions = @import("./composition_exclusions.zig"); diff --git a/src/main.zig b/src/main.zig index 258cc71d7e6b2781d6b85180c5d02ee78b44c1ba..89a88da5efc433665044d0e16bf83b52e2f2e7a3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -12,6 +12,7 @@ pub fn main() !void { ucd.blocks, ucd.cjk_radicals, ucd.case_folding, + ucd.composition_exclusions, }; inline for (data) |b| {