From 170fe98cfbc15db2b16208b7f57c4d991032036a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Sat, 16 Mar 2019 21:54:04 +0200 Subject: [PATCH] Fixed: Character and string handling --- doomsday/apps/client/CMakeLists.txt | 6 +++--- doomsday/libs/core/include/de/data/string.h | 12 ++++++++++++ doomsday/libs/core/src/data/string.cpp | 2 ++ doomsday/libs/gui/CMakeLists.txt | 2 +- doomsday/libs/gui/src/text/font_richformat.cpp | 2 +- doomsday/tools/dshell/src/cursesapp.cpp | 2 +- 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/doomsday/apps/client/CMakeLists.txt b/doomsday/apps/client/CMakeLists.txt index 0f62c1e40a..8245b5df0a 100644 --- a/doomsday/apps/client/CMakeLists.txt +++ b/doomsday/apps/client/CMakeLists.txt @@ -327,9 +327,9 @@ if (APPLE AND NOT IOS) heretic hexen ) -# if (TARGET audio_fmod) -# deng_install_bundle_deps (client fmodex) -# endif () + if (TARGET audio_fmod) + deng_install_bundle_deps (client fmodex) + endif () # Plugins are bundled inside the client app. We'll run macdeployqt on the # installed app before the plugins are there so it won't do unnecessary diff --git a/doomsday/libs/core/include/de/data/string.h b/doomsday/libs/core/include/de/data/string.h index c5ee500dd4..8f434c8900 100644 --- a/doomsday/libs/core/include/de/data/string.h +++ b/doomsday/libs/core/include/de/data/string.h @@ -121,6 +121,18 @@ struct DE_PUBLIC mb_iterator { mb_iterator(const char *p) : cur{p}, start{p} {} mb_iterator(const char *p, const char *start) : cur{p}, start{start} {} mb_iterator(const String &str); + mb_iterator(const mb_iterator &other) + : cur(other.cur) + , start(other.start) + {} + + mb_iterator &operator=(const mb_iterator &other) + { + cur = other.cur; + start = other.start; + mb = other.mb; + return *this; + } operator const char *() const { return cur; } Char operator*() const; diff --git a/doomsday/libs/core/src/data/string.cpp b/doomsday/libs/core/src/data/string.cpp index 0304b6d293..a207911ac5 100644 --- a/doomsday/libs/core/src/data/string.cpp +++ b/doomsday/libs/core/src/data/string.cpp @@ -1171,6 +1171,8 @@ Char mb_iterator::operator*() const Char mb_iterator::decode(const char **end) const { + if (*cur == 0) return {}; + uint32_t ch = 0; int rc = decodeBytes_MultibyteChar(cur, strnlen(cur, 8), &ch); if (rc < 0) diff --git a/doomsday/libs/gui/CMakeLists.txt b/doomsday/libs/gui/CMakeLists.txt index 024add8bc1..ffad1d98b6 100644 --- a/doomsday/libs/gui/CMakeLists.txt +++ b/doomsday/libs/gui/CMakeLists.txt @@ -131,7 +131,7 @@ endif () deng_link_libraries (libgui PUBLIC DengComms) target_link_libraries (libgui - PUBLIC glbinding + PUBLIC glbinding::glbinding PRIVATE SDL2 SDL2_ttf stb assimp ) if (WIN32) diff --git a/doomsday/libs/gui/src/text/font_richformat.cpp b/doomsday/libs/gui/src/text/font_richformat.cpp index b23716ab38..7c76ebdcae 100644 --- a/doomsday/libs/gui/src/text/font_richformat.cpp +++ b/doomsday/libs/gui/src/text/font_richformat.cpp @@ -141,7 +141,7 @@ DE_PIMPL_NOREF(Font::RichFormat) break; case 'T': - stack.last().tabStop = de::max(-1, *iter - 'a'); + stack.last().tabStop = de::max(-1, int(*iter - 'a')); // Note: _E(T`): tabStop -1, i.e., switch to untabbed break; diff --git a/doomsday/tools/dshell/src/cursesapp.cpp b/doomsday/tools/dshell/src/cursesapp.cpp index cc5090b2ef..233dce9817 100644 --- a/doomsday/tools/dshell/src/cursesapp.cpp +++ b/doomsday/tools/dshell/src/cursesapp.cpp @@ -367,7 +367,7 @@ DE_PIMPL(CursesApp) } else { - keyStr.append(Char(key)); + keyStr.append(Char(uint32_t(key))); } }