mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
core: add locale aware formatting function to std::string
We had locale aware formatting functions that generated QStrings. Create an alternative that creates std::string, since we want that in the core. This commit is unfortunate for two reasons: - The function is called "casprintf()" for analogy with the QString version. However, the non locale aware function is called "format_string_std()" for analogy with "format_string()". Ultimately these names should be unified. Probably, once there are no membuffer users left. - This does UTF-16->UTF-8->UTF-16 roundtrips. The core formatting functions should render UTF-8 and only convert to UTF-16, in the UI layer. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
fe68870079
commit
8b51ff7ded
2 changed files with 11 additions and 0 deletions
|
@ -407,3 +407,13 @@ extern "C" void put_vformat_loc(struct membuffer *b, const char *fmt, va_list ar
|
|||
memcpy(b->buffer + b->len, data, utf8_size);
|
||||
b->len += utf8_size;
|
||||
}
|
||||
|
||||
// TODO: Avoid back-and-forth conversion between UTF16 and UTF8.
|
||||
std::string casprintf_loc(const char *cformat, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, cformat);
|
||||
QByteArray utf8 = vqasprintf_loc(cformat, ap).toUtf8();
|
||||
va_end(ap);
|
||||
return std::string(utf8.constData(), utf8.size());
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <QString>
|
||||
__printf(1, 2) QString qasprintf_loc(const char *cformat, ...);
|
||||
__printf(1, 0) QString vqasprintf_loc(const char *cformat, va_list ap);
|
||||
__printf(1, 2) std::string casprintf_loc(const char *cformat, ...);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
Loading…
Reference in a new issue