Checking if emoji byte doesn't get out of bounds
parent
59040c53e4
commit
89afa8e149
|
@ -108,7 +108,8 @@ auto Language::update() -> void {
|
||||||
fmt::arg("short", layout_.short_name),
|
fmt::arg("short", layout_.short_name),
|
||||||
fmt::arg("shortDescription", layout_.short_description),
|
fmt::arg("shortDescription", layout_.short_description),
|
||||||
fmt::arg("long", layout_.full_name),
|
fmt::arg("long", layout_.full_name),
|
||||||
fmt::arg("variant", layout_.variant)));
|
fmt::arg("variant", layout_.variant),
|
||||||
|
fmt::arg("flag", layout_.country_flag())));
|
||||||
label_.set_tooltip_markup(tooltip_display_layout);
|
label_.set_tooltip_markup(tooltip_display_layout);
|
||||||
} else {
|
} else {
|
||||||
label_.set_tooltip_markup(display_layout);
|
label_.set_tooltip_markup(display_layout);
|
||||||
|
@ -215,9 +216,13 @@ Language::XKBContext::~XKBContext() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Language::Layout::country_flag() const {
|
std::string Language::Layout::country_flag() const {
|
||||||
static std::string result = "\xf0\x9f\x87\xff\xf0\x9f\x87\xff";
|
if (short_name.size() != 2) return "";
|
||||||
result[3] = short_name[0] - 0xbb;
|
unsigned char result[] = "\xf0\x9f\x87\x00\xf0\x9f\x87\x00";
|
||||||
result[7] = short_name[1] - 0xbb;
|
result[3] = short_name[0] + 0x45;
|
||||||
return result;
|
result[7] = short_name[1] + 0x45;
|
||||||
|
// Check if both emojis are in A-Z symbol bounds
|
||||||
|
if (result[3] < 0xa6 || result[3] > 0xbf) return "";
|
||||||
|
if (result[7] < 0xa6 || result[7] > 0xbf) return "";
|
||||||
|
return std::string{reinterpret_cast<char*>(result)};
|
||||||
}
|
}
|
||||||
} // namespace waybar::modules::sway
|
} // namespace waybar::modules::sway
|
||||||
|
|
Loading…
Reference in New Issue