HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
iso_15924_intf.hpp
1// Copyright Take Vos 2021-2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "../utility/utility.hpp"
8#include "../macros.hpp"
9#include <string_view>
10#include <cstdint>
11#include <format>
12
13hi_export_module(hikogui.i18n.iso_15924 : intf);
14
15namespace hi { inline namespace v1 {
16
20hi_export class iso_15924 {
21public:
22 constexpr iso_15924() noexcept : _v(0) {}
23 constexpr iso_15924(iso_15924 const&) noexcept = default;
24 constexpr iso_15924(iso_15924&&) noexcept = default;
25 constexpr iso_15924& operator=(iso_15924 const&) noexcept = default;
26 constexpr iso_15924& operator=(iso_15924&&) noexcept = default;
27
28 constexpr iso_15924(std::integral auto number) : _v(0)
29 {
30 hi_check_bounds(number, 0, 1000);
32 }
33
34 constexpr iso_15924(std::string_view code4);
35
38 [[nodiscard]] constexpr static iso_15924 wildcard() noexcept
39 {
40 return iso_15924{0};
41 }
42
47 [[nodiscard]] constexpr static iso_15924 common() noexcept
48 {
49 return iso_15924{998};
50 }
51
54 [[nodiscard]] constexpr static iso_15924 uncoded() noexcept
55 {
56 return iso_15924{999};
57 }
58
59 [[nodiscard]] constexpr static iso_15924 inherited() noexcept
60 {
61 return iso_15924{994};
62 }
63
64 constexpr iso_15924(intrinsic_t, uint16_t v) noexcept : _v(v)
65 {
66 hi_axiom_bounds(_v, 0, 1000);
67 }
68
69 [[nodiscard]] constexpr uint16_t const& intrinsic() const noexcept
70 {
71 return _v;
72 }
73
74 [[nodiscard]] constexpr uint16_t& intrinsic() noexcept
75 {
76 return _v;
77 }
78
79 [[nodiscard]] constexpr bool empty() const noexcept
80 {
81 return _v == 0;
82 }
83
84 constexpr explicit operator bool() const noexcept
85 {
86 return not empty();
87 }
88
91 [[nodiscard]] constexpr uint16_t number() const noexcept
92 {
93 return _v;
94 }
95
99
103
104 [[nodiscard]] constexpr friend std::string to_string(iso_15924 const &rhs) noexcept
105 {
106 return rhs.code4();
107 }
108
111 [[nodiscard]] constexpr bool left_to_right() const noexcept;
112
115
123 {
124 return lhs.empty() or lhs == rhs;
125 }
126
127private:
128 uint16_t _v;
129};
130
131}} // namespace hi::inline v1
132
133hi_export template<>
134struct std::hash<hi::iso_15924> {
135 [[nodiscard]] size_t operator()(hi::iso_15924 const& rhs) const noexcept
136 {
137 return std::hash<uint16_t>{}(rhs.number());
138 }
139};
STL namespace.
DOXYGEN BUG.
Definition algorithm.hpp:16
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
ISO-15924 script code.
Definition iso_15924_intf.hpp:20
constexpr bool left_to_right() const noexcept
Is this script written left-to-right.
Definition iso_15924_impl.hpp:346
static constexpr iso_15924 common() noexcept
Common script is used for characters that are common in different scripts.
Definition iso_15924_intf.hpp:47
constexpr uint16_t number() const noexcept
Get the iso-15924 numeric value.
Definition iso_15924_intf.hpp:91
constexpr std::string code4_open_type() const noexcept
Get the 4-letter code used by open-type.
Definition iso_15924_impl.hpp:340
static constexpr iso_15924 wildcard() noexcept
When any script is allowed.
Definition iso_15924_intf.hpp:38
constexpr friend bool matches(iso_15924 const &lhs, iso_15924 const &rhs) noexcept
Check if rhs matches with lhs.
Definition iso_15924_intf.hpp:122
static constexpr iso_15924 uncoded() noexcept
Used when the script was not encoded with the text.
Definition iso_15924_intf.hpp:54
constexpr std::string code4() const noexcept
Get the iso-15924 4-letter code.
Definition iso_15924_impl.hpp:334
T operator()(T... args)