1 #ifndef icu4x_LineBreak_D_HPP 2 #define icu4x_LineBreak_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 LineBreak; 15 } 16 17 18 namespace icu4x { 19 namespace capi { 20 enum LineBreak { 21 LineBreak_Unknown = 0, 22 LineBreak_Ambiguous = 1, 23 LineBreak_Alphabetic = 2, 24 LineBreak_BreakBoth = 3, 25 LineBreak_BreakAfter = 4, 26 LineBreak_BreakBefore = 5, 27 LineBreak_MandatoryBreak = 6, 28 LineBreak_ContingentBreak = 7, 29 LineBreak_ClosePunctuation = 8, 30 LineBreak_CombiningMark = 9, 31 LineBreak_CarriageReturn = 10, 32 LineBreak_Exclamation = 11, 33 LineBreak_Glue = 12, 34 LineBreak_Hyphen = 13, 35 LineBreak_Ideographic = 14, 36 LineBreak_Inseparable = 15, 37 LineBreak_InfixNumeric = 16, 38 LineBreak_LineFeed = 17, 39 LineBreak_Nonstarter = 18, 40 LineBreak_Numeric = 19, 41 LineBreak_OpenPunctuation = 20, 42 LineBreak_PostfixNumeric = 21, 43 LineBreak_PrefixNumeric = 22, 44 LineBreak_Quotation = 23, 45 LineBreak_ComplexContext = 24, 46 LineBreak_Surrogate = 25, 47 LineBreak_Space = 26, 48 LineBreak_BreakSymbols = 27, 49 LineBreak_ZWSpace = 28, 50 LineBreak_NextLine = 29, 51 LineBreak_WordJoiner = 30, 52 LineBreak_H2 = 31, 53 LineBreak_H3 = 32, 54 LineBreak_JL = 33, 55 LineBreak_JT = 34, 56 LineBreak_JV = 35, 57 LineBreak_CloseParenthesis = 36, 58 LineBreak_ConditionalJapaneseStarter = 37, 59 LineBreak_HebrewLetter = 38, 60 LineBreak_RegionalIndicator = 39, 61 LineBreak_EBase = 40, 62 LineBreak_EModifier = 41, 63 LineBreak_ZWJ = 42, 64 LineBreak_Aksara = 43, 65 LineBreak_AksaraPrebase = 44, 66 LineBreak_AksaraStart = 45, 67 LineBreak_ViramaFinal = 46, 68 LineBreak_Virama = 47, 69 }; 70 71 typedef struct LineBreak_option {union { LineBreak ok; }; bool is_ok; } LineBreak_option; 72 } // namespace capi 73 } // namespace 74 75 namespace icu4x { 76 class LineBreak { 77 public: 78 enum Value { 79 Unknown = 0, 80 Ambiguous = 1, 81 Alphabetic = 2, 82 BreakBoth = 3, 83 BreakAfter = 4, 84 BreakBefore = 5, 85 MandatoryBreak = 6, 86 ContingentBreak = 7, 87 ClosePunctuation = 8, 88 CombiningMark = 9, 89 CarriageReturn = 10, 90 Exclamation = 11, 91 Glue = 12, 92 Hyphen = 13, 93 Ideographic = 14, 94 Inseparable = 15, 95 InfixNumeric = 16, 96 LineFeed = 17, 97 Nonstarter = 18, 98 Numeric = 19, 99 OpenPunctuation = 20, 100 PostfixNumeric = 21, 101 PrefixNumeric = 22, 102 Quotation = 23, 103 ComplexContext = 24, 104 Surrogate = 25, 105 Space = 26, 106 BreakSymbols = 27, 107 ZWSpace = 28, 108 NextLine = 29, 109 WordJoiner = 30, 110 H2 = 31, 111 H3 = 32, 112 JL = 33, 113 JT = 34, 114 JV = 35, 115 CloseParenthesis = 36, 116 ConditionalJapaneseStarter = 37, 117 HebrewLetter = 38, 118 RegionalIndicator = 39, 119 EBase = 40, 120 EModifier = 41, 121 ZWJ = 42, 122 Aksara = 43, 123 AksaraPrebase = 44, 124 AksaraStart = 45, 125 ViramaFinal = 46, 126 Virama = 47, 127 }; 128 129 LineBreak() = default; 130 // Implicit conversions between enum and ::Value LineBreak(Value v)131 constexpr LineBreak(Value v) : value(v) {} operator Value() const132 constexpr operator Value() const { return value; } 133 // Prevent usage as boolean value 134 explicit operator bool() const = delete; 135 136 inline static icu4x::LineBreak for_char(char32_t ch); 137 138 inline std::optional<std::string_view> long_name(); 139 140 inline std::optional<std::string_view> short_name(); 141 142 inline uint8_t to_integer_value(); 143 144 inline static std::optional<icu4x::LineBreak> from_integer_value(uint8_t other); 145 146 inline icu4x::capi::LineBreak AsFFI() const; 147 inline static icu4x::LineBreak FromFFI(icu4x::capi::LineBreak c_enum); 148 private: 149 Value value; 150 }; 151 152 } // namespace 153 #endif // icu4x_LineBreak_D_HPP 154