• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef icu4x_BidiClass_D_HPP
2 #define icu4x_BidiClass_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 BidiClass;
15 }
16 
17 
18 namespace icu4x {
19 namespace capi {
20     enum BidiClass {
21       BidiClass_LeftToRight = 0,
22       BidiClass_RightToLeft = 1,
23       BidiClass_EuropeanNumber = 2,
24       BidiClass_EuropeanSeparator = 3,
25       BidiClass_EuropeanTerminator = 4,
26       BidiClass_ArabicNumber = 5,
27       BidiClass_CommonSeparator = 6,
28       BidiClass_ParagraphSeparator = 7,
29       BidiClass_SegmentSeparator = 8,
30       BidiClass_WhiteSpace = 9,
31       BidiClass_OtherNeutral = 10,
32       BidiClass_LeftToRightEmbedding = 11,
33       BidiClass_LeftToRightOverride = 12,
34       BidiClass_ArabicLetter = 13,
35       BidiClass_RightToLeftEmbedding = 14,
36       BidiClass_RightToLeftOverride = 15,
37       BidiClass_PopDirectionalFormat = 16,
38       BidiClass_NonspacingMark = 17,
39       BidiClass_BoundaryNeutral = 18,
40       BidiClass_FirstStrongIsolate = 19,
41       BidiClass_LeftToRightIsolate = 20,
42       BidiClass_RightToLeftIsolate = 21,
43       BidiClass_PopDirectionalIsolate = 22,
44     };
45 
46     typedef struct BidiClass_option {union { BidiClass ok; }; bool is_ok; } BidiClass_option;
47 } // namespace capi
48 } // namespace
49 
50 namespace icu4x {
51 class BidiClass {
52 public:
53   enum Value {
54     LeftToRight = 0,
55     RightToLeft = 1,
56     EuropeanNumber = 2,
57     EuropeanSeparator = 3,
58     EuropeanTerminator = 4,
59     ArabicNumber = 5,
60     CommonSeparator = 6,
61     ParagraphSeparator = 7,
62     SegmentSeparator = 8,
63     WhiteSpace = 9,
64     OtherNeutral = 10,
65     LeftToRightEmbedding = 11,
66     LeftToRightOverride = 12,
67     ArabicLetter = 13,
68     RightToLeftEmbedding = 14,
69     RightToLeftOverride = 15,
70     PopDirectionalFormat = 16,
71     NonspacingMark = 17,
72     BoundaryNeutral = 18,
73     FirstStrongIsolate = 19,
74     LeftToRightIsolate = 20,
75     RightToLeftIsolate = 21,
76     PopDirectionalIsolate = 22,
77   };
78 
79   BidiClass() = default;
80   // Implicit conversions between enum and ::Value
BidiClass(Value v)81   constexpr BidiClass(Value v) : value(v) {}
operator Value() const82   constexpr operator Value() const { return value; }
83   // Prevent usage as boolean value
84   explicit operator bool() const = delete;
85 
86   inline static icu4x::BidiClass for_char(char32_t ch);
87 
88   inline std::optional<std::string_view> long_name();
89 
90   inline std::optional<std::string_view> short_name();
91 
92   inline uint8_t to_integer_value();
93 
94   inline static std::optional<icu4x::BidiClass> from_integer_value(uint8_t other);
95 
96   inline icu4x::capi::BidiClass AsFFI() const;
97   inline static icu4x::BidiClass FromFFI(icu4x::capi::BidiClass c_enum);
98 private:
99     Value value;
100 };
101 
102 } // namespace
103 #endif // icu4x_BidiClass_D_HPP
104