| 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 | pub const derived_normalization_props = @import("./derived_normalization_props.zig"); |
| 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 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 | |
| 66 | fn 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 | } |