ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
ICU4XCaseMapper.hpp
Go to the documentation of this file.
1#ifndef ICU4XCaseMapper_HPP
2#define ICU4XCaseMapper_HPP
3#include <stdint.h>
4#include <stddef.h>
5#include <stdbool.h>
6#include <algorithm>
7#include <memory>
8#include <variant>
9#include <optional>
10#include "diplomat_runtime.hpp"
11
12#include "ICU4XCaseMapper.h"
13
15class ICU4XCaseMapper;
16#include "ICU4XError.hpp"
17class ICU4XLocale;
20
24struct ICU4XCaseMapperDeleter {
25 void operator()(capi::ICU4XCaseMapper* l) const noexcept {
26 capi::ICU4XCaseMapper_destroy(l);
27 }
28};
29
34 public:
35
42
48 template<typename W> diplomat::result<std::monostate, ICU4XError> lowercase_to_writeable(const std::string_view s, const ICU4XLocale& locale, W& write) const;
49
55 diplomat::result<std::string, ICU4XError> lowercase(const std::string_view s, const ICU4XLocale& locale) const;
56
62 template<typename W> diplomat::result<std::monostate, ICU4XError> uppercase_to_writeable(const std::string_view s, const ICU4XLocale& locale, W& write) const;
63
69 diplomat::result<std::string, ICU4XError> uppercase(const std::string_view s, const ICU4XLocale& locale) const;
70
80 template<typename W> diplomat::result<std::monostate, ICU4XError> titlecase_segment_with_only_case_data_v1_to_writeable(const std::string_view s, const ICU4XLocale& locale, ICU4XTitlecaseOptionsV1 options, W& write) const;
81
92
98 template<typename W> diplomat::result<std::monostate, ICU4XError> fold_to_writeable(const std::string_view s, W& write) const;
99
105 diplomat::result<std::string, ICU4XError> fold(const std::string_view s) const;
106
113 template<typename W> diplomat::result<std::monostate, ICU4XError> fold_turkic_to_writeable(const std::string_view s, W& write) const;
114
121 diplomat::result<std::string, ICU4XError> fold_turkic(const std::string_view s) const;
122
138 void add_case_closure_to(char32_t c, ICU4XCodePointSetBuilder& builder) const;
139
149 char32_t simple_lowercase(char32_t ch) const;
150
160 char32_t simple_uppercase(char32_t ch) const;
161
171 char32_t simple_titlecase(char32_t ch) const;
172
181 char32_t simple_fold(char32_t ch) const;
182
191 char32_t simple_fold_turkic(char32_t ch) const;
192 inline const capi::ICU4XCaseMapper* AsFFI() const { return this->inner.get(); }
193 inline capi::ICU4XCaseMapper* AsFFIMut() { return this->inner.get(); }
194 inline explicit ICU4XCaseMapper(capi::ICU4XCaseMapper* i) : inner(i) {}
195 ICU4XCaseMapper() = default;
196 ICU4XCaseMapper(ICU4XCaseMapper&&) noexcept = default;
197 ICU4XCaseMapper& operator=(ICU4XCaseMapper&& other) noexcept = default;
198 private:
199 std::unique_ptr<capi::ICU4XCaseMapper, ICU4XCaseMapperDeleter> inner;
200};
201
202#include "ICU4XDataProvider.hpp"
203#include "ICU4XLocale.hpp"
206
208 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_create(provider.AsFFI());
209 diplomat::result<ICU4XCaseMapper, ICU4XError> diplomat_result_out_value;
210 if (diplomat_result_raw_out_value.is_ok) {
211 diplomat_result_out_value = diplomat::Ok<ICU4XCaseMapper>(ICU4XCaseMapper(diplomat_result_raw_out_value.ok));
212 } else {
213 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
214 }
215 return diplomat_result_out_value;
216}
217template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XCaseMapper::lowercase_to_writeable(const std::string_view s, const ICU4XLocale& locale, W& write) const {
218 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
219 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_lowercase(this->inner.get(), s.data(), s.size(), locale.AsFFI(), &write_writer);
220 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
221 if (diplomat_result_raw_out_value.is_ok) {
222 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
223 } else {
224 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
225 }
226 return diplomat_result_out_value;
227}
228inline diplomat::result<std::string, ICU4XError> ICU4XCaseMapper::lowercase(const std::string_view s, const ICU4XLocale& locale) const {
229 std::string diplomat_writeable_string;
230 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
231 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_lowercase(this->inner.get(), s.data(), s.size(), locale.AsFFI(), &diplomat_writeable_out);
232 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
233 if (diplomat_result_raw_out_value.is_ok) {
234 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
235 } else {
236 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
237 }
238 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
239}
240template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XCaseMapper::uppercase_to_writeable(const std::string_view s, const ICU4XLocale& locale, W& write) const {
241 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
242 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_uppercase(this->inner.get(), s.data(), s.size(), locale.AsFFI(), &write_writer);
243 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
244 if (diplomat_result_raw_out_value.is_ok) {
245 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
246 } else {
247 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
248 }
249 return diplomat_result_out_value;
250}
251inline diplomat::result<std::string, ICU4XError> ICU4XCaseMapper::uppercase(const std::string_view s, const ICU4XLocale& locale) const {
252 std::string diplomat_writeable_string;
253 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
254 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_uppercase(this->inner.get(), s.data(), s.size(), locale.AsFFI(), &diplomat_writeable_out);
255 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
256 if (diplomat_result_raw_out_value.is_ok) {
257 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
258 } else {
259 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
260 }
261 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
262}
264 ICU4XTitlecaseOptionsV1 diplomat_wrapped_struct_options = options;
265 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
266 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_titlecase_segment_with_only_case_data_v1(this->inner.get(), s.data(), s.size(), locale.AsFFI(), capi::ICU4XTitlecaseOptionsV1{ .leading_adjustment = static_cast<capi::ICU4XLeadingAdjustment>(diplomat_wrapped_struct_options.leading_adjustment), .trailing_case = static_cast<capi::ICU4XTrailingCase>(diplomat_wrapped_struct_options.trailing_case) }, &write_writer);
267 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
268 if (diplomat_result_raw_out_value.is_ok) {
269 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
270 } else {
271 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
272 }
273 return diplomat_result_out_value;
274}
276 ICU4XTitlecaseOptionsV1 diplomat_wrapped_struct_options = options;
277 std::string diplomat_writeable_string;
278 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
279 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_titlecase_segment_with_only_case_data_v1(this->inner.get(), s.data(), s.size(), locale.AsFFI(), capi::ICU4XTitlecaseOptionsV1{ .leading_adjustment = static_cast<capi::ICU4XLeadingAdjustment>(diplomat_wrapped_struct_options.leading_adjustment), .trailing_case = static_cast<capi::ICU4XTrailingCase>(diplomat_wrapped_struct_options.trailing_case) }, &diplomat_writeable_out);
280 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
281 if (diplomat_result_raw_out_value.is_ok) {
282 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
283 } else {
284 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
285 }
286 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
287}
288template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XCaseMapper::fold_to_writeable(const std::string_view s, W& write) const {
289 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
290 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_fold(this->inner.get(), s.data(), s.size(), &write_writer);
291 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
292 if (diplomat_result_raw_out_value.is_ok) {
293 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
294 } else {
295 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
296 }
297 return diplomat_result_out_value;
298}
300 std::string diplomat_writeable_string;
301 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
302 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_fold(this->inner.get(), s.data(), s.size(), &diplomat_writeable_out);
303 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
304 if (diplomat_result_raw_out_value.is_ok) {
305 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
306 } else {
307 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
308 }
309 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
310}
311template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XCaseMapper::fold_turkic_to_writeable(const std::string_view s, W& write) const {
312 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
313 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_fold_turkic(this->inner.get(), s.data(), s.size(), &write_writer);
314 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
315 if (diplomat_result_raw_out_value.is_ok) {
316 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
317 } else {
318 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
319 }
320 return diplomat_result_out_value;
321}
323 std::string diplomat_writeable_string;
324 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
325 auto diplomat_result_raw_out_value = capi::ICU4XCaseMapper_fold_turkic(this->inner.get(), s.data(), s.size(), &diplomat_writeable_out);
326 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
327 if (diplomat_result_raw_out_value.is_ok) {
328 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
329 } else {
330 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
331 }
332 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
333}
334inline void ICU4XCaseMapper::add_case_closure_to(char32_t c, ICU4XCodePointSetBuilder& builder) const {
335 capi::ICU4XCaseMapper_add_case_closure_to(this->inner.get(), c, builder.AsFFIMut());
336}
337inline char32_t ICU4XCaseMapper::simple_lowercase(char32_t ch) const {
338 return capi::ICU4XCaseMapper_simple_lowercase(this->inner.get(), ch);
339}
340inline char32_t ICU4XCaseMapper::simple_uppercase(char32_t ch) const {
341 return capi::ICU4XCaseMapper_simple_uppercase(this->inner.get(), ch);
342}
343inline char32_t ICU4XCaseMapper::simple_titlecase(char32_t ch) const {
344 return capi::ICU4XCaseMapper_simple_titlecase(this->inner.get(), ch);
345}
346inline char32_t ICU4XCaseMapper::simple_fold(char32_t ch) const {
347 return capi::ICU4XCaseMapper_simple_fold(this->inner.get(), ch);
348}
349inline char32_t ICU4XCaseMapper::simple_fold_turkic(char32_t ch) const {
350 return capi::ICU4XCaseMapper_simple_fold_turkic(this->inner.get(), ch);
351}
352#endif
ICU4XError
Definition ICU4XError.hpp:23
Definition ICU4XCaseMapper.hpp:33
ICU4XCaseMapper(capi::ICU4XCaseMapper *i)
Definition ICU4XCaseMapper.hpp:194
diplomat::result< std::string, ICU4XError > fold(const std::string_view s) const
Definition ICU4XCaseMapper.hpp:299
ICU4XCaseMapper(ICU4XCaseMapper &&) noexcept=default
diplomat::result< std::monostate, ICU4XError > fold_to_writeable(const std::string_view s, W &write) const
Definition ICU4XCaseMapper.hpp:288
char32_t simple_fold(char32_t ch) const
Definition ICU4XCaseMapper.hpp:346
char32_t simple_lowercase(char32_t ch) const
Definition ICU4XCaseMapper.hpp:337
diplomat::result< std::monostate, ICU4XError > uppercase_to_writeable(const std::string_view s, const ICU4XLocale &locale, W &write) const
Definition ICU4XCaseMapper.hpp:240
diplomat::result< std::monostate, ICU4XError > titlecase_segment_with_only_case_data_v1_to_writeable(const std::string_view s, const ICU4XLocale &locale, ICU4XTitlecaseOptionsV1 options, W &write) const
Definition ICU4XCaseMapper.hpp:263
char32_t simple_fold_turkic(char32_t ch) const
Definition ICU4XCaseMapper.hpp:349
diplomat::result< std::string, ICU4XError > lowercase(const std::string_view s, const ICU4XLocale &locale) const
Definition ICU4XCaseMapper.hpp:228
diplomat::result< std::monostate, ICU4XError > lowercase_to_writeable(const std::string_view s, const ICU4XLocale &locale, W &write) const
Definition ICU4XCaseMapper.hpp:217
diplomat::result< std::string, ICU4XError > uppercase(const std::string_view s, const ICU4XLocale &locale) const
Definition ICU4XCaseMapper.hpp:251
char32_t simple_titlecase(char32_t ch) const
Definition ICU4XCaseMapper.hpp:343
void add_case_closure_to(char32_t c, ICU4XCodePointSetBuilder &builder) const
Definition ICU4XCaseMapper.hpp:334
diplomat::result< std::monostate, ICU4XError > fold_turkic_to_writeable(const std::string_view s, W &write) const
Definition ICU4XCaseMapper.hpp:311
static diplomat::result< ICU4XCaseMapper, ICU4XError > create(const ICU4XDataProvider &provider)
Definition ICU4XCaseMapper.hpp:207
ICU4XCaseMapper()=default
diplomat::result< std::string, ICU4XError > fold_turkic(const std::string_view s) const
Definition ICU4XCaseMapper.hpp:322
char32_t simple_uppercase(char32_t ch) const
Definition ICU4XCaseMapper.hpp:340
diplomat::result< std::string, ICU4XError > titlecase_segment_with_only_case_data_v1(const std::string_view s, const ICU4XLocale &locale, ICU4XTitlecaseOptionsV1 options) const
Definition ICU4XCaseMapper.hpp:275
Definition ICU4XCodePointSetBuilder.hpp:29
Definition ICU4XDataProvider.hpp:32
Definition ICU4XLocale.hpp:32
Definition diplomat_runtime.hpp:84
result< T2, E > replace_ok(T2 &&t)
Definition diplomat_runtime.hpp:125
capi::DiplomatWriteable WriteableFromString(std::string &string)
Definition diplomat_runtime.hpp:31
Definition ICU4XTitlecaseOptionsV1.hpp:22
Definition diplomat_runtime.hpp:69
Definition diplomat_runtime.hpp:55