Cleanup some code

This commit is contained in:
Kovid Goyal 2023-01-26 09:17:09 +05:30
parent a08b99f40f
commit 49e025b565
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -933,22 +933,20 @@ parse_cued_text(std::string_view src, Marks &marks, std::wstring_view dest) {
auto pos = src.find('\0'); auto pos = src.find('\0');
size_t limit = pos == std::string_view::npos ? src.size() : pos; size_t limit = pos == std::string_view::npos ? src.size() : pos;
if (limit) { if (limit) {
dest_pos += decode_into( dest_pos += decode_into(src.substr(0, limit), dest.substr(dest_pos, dest.size() - dest_pos));
std::string_view(src.data(), limit), src = src.substr(limit, src.size() - limit);
std::wstring_view(dest.data() + dest_pos, dest.size() - dest_pos));
src = std::string_view(src.data() + limit, src.size() - limit);
} }
if (pos != std::string_view::npos) { if (pos != std::string_view::npos) {
src = std::string_view(src.data() + 1, src.size() - 1); src = src.substr(1, src.size() - 1);
if (src.size() >= 4) { if (src.size() >= 4) {
uint32_t mark = *((uint32_t*)src.data()); uint32_t mark = *((uint32_t*)src.data());
marks.emplace_back(mark, (uint32_t)dest_pos); marks.emplace_back(mark, (uint32_t)dest_pos);
src = std::string_view(src.data() + 4, src.size() - 4); src = src.substr(4, src.size() - 4);
} }
} }
} }
*((wchar_t*)dest.data() + dest_pos) = 0; // ensure NULL termination *((wchar_t*)dest.data() + dest_pos) = 0; // ensure NULL termination
return std::wstring_view(dest.data(), dest_pos); return dest.substr(0, dest_pos);
} }
static void static void
@ -987,16 +985,16 @@ handle_speak(id_type cmd_id, std::vector<std::wstring_view> &parts) {
text = parse_cued_text(src, marks, dest); text = parse_cued_text(src, marks, dest);
} else { } else {
size_t n = decode_into(src, dest); size_t n = decode_into(src, dest);
*(buf.data() + n) = 0; // ensure null termination buf[n] = 0; // ensure null termination
text = std::wstring_view(buf.data(), n); text = std::wstring_view(buf.data(), n);
} }
} else { } else {
address = join(parts); address = join(parts);
if (address.size() == 0) throw std::string("Address missing"); if (address.size() == 0) throw std::string("Address missing");
buf.reserve(address.size() + 1); buf.reserve(address.size() + 1);
text = std::wstring_view(buf.data(), address.size() + 1); text = std::wstring_view(buf.data(), address.size());
memcpy(buf.data(), address.c_str(), address.size()); address.copy(buf.data(), address.size());
*(buf.data() + address.size()) = 0; // ensure null termination buf[address.size()] = 0; // null terminate
} }
sx.speak(cmd_id, text, is_ssml, is_cued, std::move(buf), std::move(marks)); sx.speak(cmd_id, text, is_ssml, is_cued, std::move(buf), std::move(marks));
} }