1 #ifndef icu4x_CanonicalCombiningClass_D_HPP 2 #define icu4x_CanonicalCombiningClass_D_HPP 3 4 #include <stdio.h> 5 #include <stdint.h> 6 #include <stddef.h> 7 #include <stdbool.h> 8 #include <memory> 9 #include <functional> 10 #include <optional> 11 #include "../diplomat_runtime.hpp" 12 13 namespace icu4x { 14 class CanonicalCombiningClass; 15 } 16 17 18 namespace icu4x { 19 namespace capi { 20 enum CanonicalCombiningClass { 21 CanonicalCombiningClass_NotReordered = 0, 22 CanonicalCombiningClass_Overlay = 1, 23 CanonicalCombiningClass_HanReading = 6, 24 CanonicalCombiningClass_Nukta = 7, 25 CanonicalCombiningClass_KanaVoicing = 8, 26 CanonicalCombiningClass_Virama = 9, 27 CanonicalCombiningClass_CCC10 = 10, 28 CanonicalCombiningClass_CCC11 = 11, 29 CanonicalCombiningClass_CCC12 = 12, 30 CanonicalCombiningClass_CCC13 = 13, 31 CanonicalCombiningClass_CCC14 = 14, 32 CanonicalCombiningClass_CCC15 = 15, 33 CanonicalCombiningClass_CCC16 = 16, 34 CanonicalCombiningClass_CCC17 = 17, 35 CanonicalCombiningClass_CCC18 = 18, 36 CanonicalCombiningClass_CCC19 = 19, 37 CanonicalCombiningClass_CCC20 = 20, 38 CanonicalCombiningClass_CCC21 = 21, 39 CanonicalCombiningClass_CCC22 = 22, 40 CanonicalCombiningClass_CCC23 = 23, 41 CanonicalCombiningClass_CCC24 = 24, 42 CanonicalCombiningClass_CCC25 = 25, 43 CanonicalCombiningClass_CCC26 = 26, 44 CanonicalCombiningClass_CCC27 = 27, 45 CanonicalCombiningClass_CCC28 = 28, 46 CanonicalCombiningClass_CCC29 = 29, 47 CanonicalCombiningClass_CCC30 = 30, 48 CanonicalCombiningClass_CCC31 = 31, 49 CanonicalCombiningClass_CCC32 = 32, 50 CanonicalCombiningClass_CCC33 = 33, 51 CanonicalCombiningClass_CCC34 = 34, 52 CanonicalCombiningClass_CCC35 = 35, 53 CanonicalCombiningClass_CCC36 = 36, 54 CanonicalCombiningClass_CCC84 = 84, 55 CanonicalCombiningClass_CCC91 = 91, 56 CanonicalCombiningClass_CCC103 = 103, 57 CanonicalCombiningClass_CCC107 = 107, 58 CanonicalCombiningClass_CCC118 = 118, 59 CanonicalCombiningClass_CCC122 = 122, 60 CanonicalCombiningClass_CCC129 = 129, 61 CanonicalCombiningClass_CCC130 = 130, 62 CanonicalCombiningClass_CCC132 = 132, 63 CanonicalCombiningClass_CCC133 = 133, 64 CanonicalCombiningClass_AttachedBelowLeft = 200, 65 CanonicalCombiningClass_AttachedBelow = 202, 66 CanonicalCombiningClass_AttachedAbove = 214, 67 CanonicalCombiningClass_AttachedAboveRight = 216, 68 CanonicalCombiningClass_BelowLeft = 218, 69 CanonicalCombiningClass_Below = 220, 70 CanonicalCombiningClass_BelowRight = 222, 71 CanonicalCombiningClass_Left = 224, 72 CanonicalCombiningClass_Right = 226, 73 CanonicalCombiningClass_AboveLeft = 228, 74 CanonicalCombiningClass_Above = 230, 75 CanonicalCombiningClass_AboveRight = 232, 76 CanonicalCombiningClass_DoubleBelow = 233, 77 CanonicalCombiningClass_DoubleAbove = 234, 78 CanonicalCombiningClass_IotaSubscript = 240, 79 }; 80 81 typedef struct CanonicalCombiningClass_option {union { CanonicalCombiningClass ok; }; bool is_ok; } CanonicalCombiningClass_option; 82 } // namespace capi 83 } // namespace 84 85 namespace icu4x { 86 class CanonicalCombiningClass { 87 public: 88 enum Value { 89 NotReordered = 0, 90 Overlay = 1, 91 HanReading = 6, 92 Nukta = 7, 93 KanaVoicing = 8, 94 Virama = 9, 95 CCC10 = 10, 96 CCC11 = 11, 97 CCC12 = 12, 98 CCC13 = 13, 99 CCC14 = 14, 100 CCC15 = 15, 101 CCC16 = 16, 102 CCC17 = 17, 103 CCC18 = 18, 104 CCC19 = 19, 105 CCC20 = 20, 106 CCC21 = 21, 107 CCC22 = 22, 108 CCC23 = 23, 109 CCC24 = 24, 110 CCC25 = 25, 111 CCC26 = 26, 112 CCC27 = 27, 113 CCC28 = 28, 114 CCC29 = 29, 115 CCC30 = 30, 116 CCC31 = 31, 117 CCC32 = 32, 118 CCC33 = 33, 119 CCC34 = 34, 120 CCC35 = 35, 121 CCC36 = 36, 122 CCC84 = 84, 123 CCC91 = 91, 124 CCC103 = 103, 125 CCC107 = 107, 126 CCC118 = 118, 127 CCC122 = 122, 128 CCC129 = 129, 129 CCC130 = 130, 130 CCC132 = 132, 131 CCC133 = 133, 132 AttachedBelowLeft = 200, 133 AttachedBelow = 202, 134 AttachedAbove = 214, 135 AttachedAboveRight = 216, 136 BelowLeft = 218, 137 Below = 220, 138 BelowRight = 222, 139 Left = 224, 140 Right = 226, 141 AboveLeft = 228, 142 Above = 230, 143 AboveRight = 232, 144 DoubleBelow = 233, 145 DoubleAbove = 234, 146 IotaSubscript = 240, 147 }; 148 149 CanonicalCombiningClass() = default; 150 // Implicit conversions between enum and ::Value CanonicalCombiningClass(Value v)151 constexpr CanonicalCombiningClass(Value v) : value(v) {} operator Value() const152 constexpr operator Value() const { return value; } 153 // Prevent usage as boolean value 154 explicit operator bool() const = delete; 155 156 inline static icu4x::CanonicalCombiningClass for_char(char32_t ch); 157 158 inline uint8_t to_integer_value(); 159 160 inline static std::optional<icu4x::CanonicalCombiningClass> from_integer_value(uint8_t other); 161 162 inline icu4x::capi::CanonicalCombiningClass AsFFI() const; 163 inline static icu4x::CanonicalCombiningClass FromFFI(icu4x::capi::CanonicalCombiningClass c_enum); 164 private: 165 Value value; 166 }; 167 168 } // namespace 169 #endif // icu4x_CanonicalCombiningClass_D_HPP 170