13 return static_cast<char16_t>(
value - (u
'a' - u
'A'));
19 std::u16string_view
value,
36 output.push_back(
static_cast<char16_t>(
40 [[
nodiscard]] std::expected<std::u16string, std::string>
46 value > std::numeric_limits<rules::PlayerNumber>::max())
47 return std::unexpected(
48 "legacy message player number is outside the portable range");
50 return std::unexpected(
51 "legacy message requires a player-name resolver");
57 std::expected<std::u16string, std::string>
60 std::u16string result;
61 result.reserve(
text.size());
63 if constexpr (
sizeof(
wchar_t) == 2)
72 return std::unexpected(
73 "truncated UTF-16 surrogate pair");
75 static_cast<std::uint32_t
>(
text[
index + 1]);
77 return std::unexpected(
78 "invalid UTF-16 surrogate pair");
79 result.push_back(
static_cast<char16_t>(
value));
80 result.push_back(
static_cast<char16_t>(
low));
85 return std::unexpected(
86 "isolated UTF-16 low surrogate");
87 result.push_back(
static_cast<char16_t>(
value));
95 static_cast<std::uint32_t
>(
value);
98 return std::unexpected(
99 "invalid wide-character Unicode code point");
102 result.push_back(
static_cast<char16_t>(
codePoint));
107 result.push_back(
static_cast<char16_t>(
109 result.push_back(
static_cast<char16_t>(
116 std::expected<std::u16string, std::string>
126 for (std::size_t
index = 0;
164 if (!player)
return std::unexpected(player.error());
174 return std::unexpected(
175 "legacy message requires a square-name resolver");
178 if (!square)
return std::unexpected(square.error());
189 static_cast<std::uint64_t
>(
arguments.numberE) >
190 std::numeric_limits<std::uint32_t>::max())
191 return std::unexpected(
192 "legacy property set is outside the 32-bit range");
194 return std::unexpected(
195 "legacy message requires a property-set resolver");
196 const auto properties =
resolvers.propertySetNames(
197 static_cast<std::uint32_t
>(
arguments.numberE));
199 return std::unexpected(properties.error());
std::deque< Bytes > output
std::expected< std::u16string, std::string > wideToUtf16(std::wstring_view text)
std::expected< std::u16string, std::string > formatLegacyMessage(std::u16string_view pattern, const LegacyFormatArguments &arguments, const LegacyFormatResolvers &resolvers, std::size_t limit)
std::uint8_t PlayerNumber
constexpr std::size_t SquareCount