1const std = @import("std");
2
3pub const arabic_shaping = @import("./arabic_shaping.zig");
4pub const bidi_brackets = @import("./bidi_brackets.zig");
5pub const bidi_mirroring = @import("./bidi_mirroring.zig");
6pub const blocks = @import("./blocks.zig");
7pub const cjk_radicals = @import("./cjk_radicals.zig");
8pub const case_folding = @import("./case_folding.zig");
9pub const composition_exclusions = @import("./composition_exclusions.zig");
10pub const derived_age = @import("./derived_age.zig");
11pub const derived_core_properties = @import("./derived_core_properties.zig");
12pub const derived_normalization_props = @import("./derived_normalization_props.zig");
13pub const east_asian_width = @import("./east_asian_width.zig");
14pub const emoji_sources = @import("./emoji_sources.zig");
15pub const equivalent_unified_ideograph = @import("./equivalent_unified_ideograph.zig");
16pub const hangul_syllable_type = @import("./hangul_syllable_type.zig");
17// Index.txt // not likely very useful for us
18pub const indic_positional_category = @import("./indic_positional_category.zig");
19pub const indic_syllabic_category = @import("./indic_syllabic_category.zig");
20pub const jamo = @import("./jamo.zig");
21pub const line_break = @import("./line_break.zig");
22pub const name_aliases = @import("./name_aliases.zig");
23pub const named_sequences = @import("./named_sequences.zig");
24pub const named_sequences_prov = @import("./named_sequences_prov.zig");
25pub const prop_list = @import("./prop_list.zig");
26pub const property_aliases = @import("./property_aliases.zig");
27pub const property_value_aliases = @import("./property_value_aliases.zig");
28pub const script_extensions = @import("./script_extensions.zig");
29pub const scripts = @import("./scripts.zig");
30pub const special_casing = @import("./special_casing.zig");
31// StandardizedVariants.txt
32// USourceData.txt
33pub const unicode_data = @import("./unicode_data.zig");
34pub const vertical_orientation = @import("./vertical_orientation.zig");
35pub const emoji = @import("./emoji.zig");
36
37/// https://www.unicode.org/reports/tr44/#General_Category_Values
38pub const GeneralCategory = DerivedPropertyEnum("gc");
39
40/// https://www.unicode.org/reports/tr44/#Bidi_Class_Values
41pub const BidiClass = DerivedPropertyEnum("bc");
42
43pub const Script = DerivedPropertyEnum("sc");
44pub const ScriptLong = DerivedPropertyLongEnum("sc");
45pub const IndicSyllabicCategory = DerivedPropertyEnum("InSC");
46pub const HangulSyllableType = DerivedPropertyEnum("hst");
47pub const EastAsianWidth = DerivedPropertyEnum("ea");
48pub const VerticalOrientation = DerivedPropertyEnum("vo");
49pub const LineBreak = DerivedPropertyEnum("lb");
50pub const IndicPositionalCategory = DerivedPropertyEnum("InPC");
51
52fn DerivedPropertyEnum(comptime prop: []const u8) type {
53 var len: usize = 0;
54 var names: []const []const u8 = &.{};
55 @setEvalBranchQuota(10_000);
56 for (property_value_aliases.data) |item| {
57 if (std.mem.eql(u8, item[0], prop)) {
58 len += 1;
59 names = names ++ &[_][]const u8{item[1]};
60 }
61 }
62 const Tag = std.math.IntFittingRange(0, names.len - 1);
63 return @Enum(Tag, .exhaustive, names, &std.simd.iota(Tag, names.len));
64}
65
66fn DerivedPropertyLongEnum(comptime prop: []const u8) type {
67 var len: usize = 0;
68 var names: []const []const u8 = &.{};
69 @setEvalBranchQuota(10_000);
70 for (property_value_aliases.data) |item| {
71 if (!std.mem.eql(u8, item[0], prop)) continue;
72 if (len > 0 and std.mem.eql(u8, names[len - 1], item[2])) continue;
73 len += 1;
74 names = names ++ &[_][]const u8{item[2]};
75 }
76 const Tag = std.math.IntFittingRange(0, names.len - 1);
77 return @Enum(Tag, .exhaustive, names, &std.simd.iota(Tag, names.len));
78}