1 #ifndef icu4x_GraphemeClusterBreak_D_HPP 2 #define icu4x_GraphemeClusterBreak_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 GraphemeClusterBreak; 15 } 16 17 18 namespace icu4x { 19 namespace capi { 20 enum GraphemeClusterBreak { 21 GraphemeClusterBreak_Other = 0, 22 GraphemeClusterBreak_Control = 1, 23 GraphemeClusterBreak_CR = 2, 24 GraphemeClusterBreak_Extend = 3, 25 GraphemeClusterBreak_L = 4, 26 GraphemeClusterBreak_LF = 5, 27 GraphemeClusterBreak_LV = 6, 28 GraphemeClusterBreak_LVT = 7, 29 GraphemeClusterBreak_T = 8, 30 GraphemeClusterBreak_V = 9, 31 GraphemeClusterBreak_SpacingMark = 10, 32 GraphemeClusterBreak_Prepend = 11, 33 GraphemeClusterBreak_RegionalIndicator = 12, 34 GraphemeClusterBreak_EBase = 13, 35 GraphemeClusterBreak_EBaseGAZ = 14, 36 GraphemeClusterBreak_EModifier = 15, 37 GraphemeClusterBreak_GlueAfterZwj = 16, 38 GraphemeClusterBreak_ZWJ = 17, 39 }; 40 41 typedef struct GraphemeClusterBreak_option {union { GraphemeClusterBreak ok; }; bool is_ok; } GraphemeClusterBreak_option; 42 } // namespace capi 43 } // namespace 44 45 namespace icu4x { 46 class GraphemeClusterBreak { 47 public: 48 enum Value { 49 Other = 0, 50 Control = 1, 51 CR = 2, 52 Extend = 3, 53 L = 4, 54 LF = 5, 55 LV = 6, 56 LVT = 7, 57 T = 8, 58 V = 9, 59 SpacingMark = 10, 60 Prepend = 11, 61 RegionalIndicator = 12, 62 EBase = 13, 63 EBaseGAZ = 14, 64 EModifier = 15, 65 GlueAfterZwj = 16, 66 ZWJ = 17, 67 }; 68 69 GraphemeClusterBreak() = default; 70 // Implicit conversions between enum and ::Value GraphemeClusterBreak(Value v)71 constexpr GraphemeClusterBreak(Value v) : value(v) {} operator Value() const72 constexpr operator Value() const { return value; } 73 // Prevent usage as boolean value 74 explicit operator bool() const = delete; 75 76 inline static icu4x::GraphemeClusterBreak for_char(char32_t ch); 77 78 inline uint8_t to_integer_value(); 79 80 inline static std::optional<icu4x::GraphemeClusterBreak> from_integer_value(uint8_t other); 81 82 inline icu4x::capi::GraphemeClusterBreak AsFFI() const; 83 inline static icu4x::GraphemeClusterBreak FromFFI(icu4x::capi::GraphemeClusterBreak c_enum); 84 private: 85 Value value; 86 }; 87 88 } // namespace 89 #endif // icu4x_GraphemeClusterBreak_D_HPP 90