7#include "unicode_decomposition_type.hpp"
9#include "../algorithm.hpp"
14namespace hi::inline v1 {
16enum class unicode_normalization_mask {
17 decompose_canonical = 1 << to_underlying(unicode_decomposition_type::canonical),
18 decompose_font = 1 << to_underlying(unicode_decomposition_type::font),
19 decompose_no_break = 1 << to_underlying(unicode_decomposition_type::no_break),
20 decompose_arabic = 1 << to_underlying(unicode_decomposition_type::arabic),
21 decompose_circle = 1 << to_underlying(unicode_decomposition_type::circle),
22 decompose_math = 1 << to_underlying(unicode_decomposition_type::math),
23 decompose_asian = 1 << to_underlying(unicode_decomposition_type::asian),
24 decompose_compat = 1 << to_underlying(unicode_decomposition_type::compat),
28 decompose_hangul = 1 << 8,
32 compose_hangul = 1 << 9,
38 decompose_control = 1 << 10,
42 compose_CRLF = 1 << 11,
48 decompose_newline_to_PS = 1 << 12,
54 decompose_newline_to_LF = 1 << 13,
60 decompose_newline_to_CRLF = 1 << 14,
66 decompose_newline_to_SP = 1 << 15,
72 decompose_newline = decompose_newline_to_PS | decompose_newline_to_LF | decompose_newline_to_CRLF | decompose_newline_to_SP,
76 NFD = decompose_canonical | decompose_hangul | compose_hangul,
80 NFKD = NFD | decompose_font | decompose_no_break | decompose_arabic | decompose_circle | decompose_math | decompose_asian |
84[[nodiscard]]
constexpr unicode_normalization_mask decompose_newline_to(
char32_t new_line_char)
noexcept
86 switch (new_line_char) {
87 case U
'\n':
return unicode_normalization_mask::decompose_newline_to_LF;
88 case U
'\r':
return unicode_normalization_mask::decompose_newline_to_CRLF;
89 case U
'\u2029':
return unicode_normalization_mask::decompose_newline_to_PS;
90 case U
' ':
return unicode_normalization_mask::decompose_newline_to_SP;
91 default: hi_no_default();
95[[nodiscard]]
constexpr bool any(unicode_normalization_mask
const &rhs)
noexcept
97 return static_cast<bool>(to_underlying(rhs));
100[[nodiscard]]
constexpr unicode_normalization_mask
101operator|(unicode_normalization_mask
const &lhs, unicode_normalization_mask
const &rhs)
noexcept
103 return static_cast<unicode_normalization_mask
>(to_underlying(lhs) | to_underlying(rhs));
106[[nodiscard]]
constexpr unicode_normalization_mask
107operator&(unicode_normalization_mask
const &lhs, unicode_normalization_mask
const &rhs)
noexcept
109 return static_cast<unicode_normalization_mask
>(to_underlying(lhs) & to_underlying(rhs));
112[[nodiscard]]
constexpr unicode_normalization_mask
113operator&(unicode_normalization_mask
const &lhs, unicode_decomposition_type
const &rhs)
noexcept
115 return static_cast<unicode_normalization_mask
>(to_underlying(lhs) & (1 << to_underlying(rhs)));
126unicode_NFD(std::u32string_view text, unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFD)
noexcept;
136unicode_NFC(std::u32string_view text, unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFD)
noexcept;
145unicode_NFKD(std::u32string_view text, unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFKD)
noexcept;
154unicode_NFKC(std::u32string_view text, unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFKD)
noexcept;
constexpr alignment operator|(horizontal_alignment lhs, vertical_alignment rhs) noexcept
Combine vertical and horizontal alignment.
Definition alignment.hpp:200