• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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