diff --git a/src/base_media_base.h b/src/base_media_base.h index 2c645ccfae..d390bf3dbd 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -47,7 +47,7 @@ template struct BaseSetTraits; */ template struct BaseSet { - typedef std::unordered_map TranslatedStrings; + typedef std::unordered_map> TranslatedStrings; /** Number of files in this set */ static constexpr size_t NUM_FILES = BaseSetTraits::num_files; @@ -107,7 +107,7 @@ struct BaseSet { * @param isocode the isocode to search for * @return the description */ - const std::string &GetDescription(const std::string &isocode) const + const std::string &GetDescription(std::string_view isocode) const { if (!isocode.empty()) { /* First the full ISO code */ diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 48b25e556c..3c7eeeb58a 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -302,22 +302,22 @@ void MacOSResetScriptCache(FontSize size) } /** Register an external font file with the CoreText system. */ -void MacOSRegisterExternalFont(const char *file_path) +void MacOSRegisterExternalFont(std::string_view file_path) { if (!MacOSVersionIsAtLeast(10, 6, 0)) return; - CFAutoRelease path(CFStringCreateWithCString(kCFAllocatorDefault, file_path, kCFStringEncodingUTF8)); + CFAutoRelease path(CFStringCreateWithBytes(kCFAllocatorDefault, reinterpret_cast(file_path.data()), file_path.size(), kCFStringEncodingUTF8, false)); CFAutoRelease url(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, path.get(), kCFURLPOSIXPathStyle, false)); CTFontManagerRegisterFontsForURL(url.get(), kCTFontManagerScopeProcess, nullptr); } /** Store current language locale as a CoreFoundation locale. */ -void MacOSSetCurrentLocaleName(const char *iso_code) +void MacOSSetCurrentLocaleName(std::string_view iso_code) { if (!MacOSVersionIsAtLeast(10, 5, 0)) return; - CFAutoRelease iso(CFStringCreateWithCString(kCFAllocatorDefault, iso_code, kCFStringEncodingUTF8)); + CFAutoRelease iso(CFStringCreateWithBytes(kCFAllocatorDefault, reinterpret_cast(iso_code.data()), iso_code.size(), kCFStringEncodingUTF8, false)); _osx_locale.reset(CFLocaleCreate(kCFAllocatorDefault, iso.get())); } diff --git a/src/os/macosx/string_osx.h b/src/os/macosx/string_osx.h index 03bc549f83..b1f25496f8 100644 --- a/src/os/macosx/string_osx.h +++ b/src/os/macosx/string_osx.h @@ -82,10 +82,10 @@ public: }; void MacOSResetScriptCache(FontSize size); -void MacOSSetCurrentLocaleName(const char *iso_code); +void MacOSSetCurrentLocaleName(std::string_view iso_code); int MacOSStringCompare(std::string_view s1, std::string_view s2); int MacOSStringContains(const std::string_view str, const std::string_view value, bool case_insensitive); -void MacOSRegisterExternalFont(const char *file_path); +void MacOSRegisterExternalFont(std::string_view file_path); #endif /* STRING_OSX_H */ diff --git a/src/strings.cpp b/src/strings.cpp index de391cdb27..22c481c78e 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -457,10 +457,10 @@ std::string GetStringWithArgs(StringID string, std::span args) return result; } -static const char *GetDecimalSeparator() +static std::string_view GetDecimalSeparator() { - const char *decimal_separator = _settings_game.locale.digit_decimal_separator.c_str(); - if (StrEmpty(decimal_separator)) decimal_separator = _langpack.langpack->digit_decimal_separator; + std::string_view decimal_separator = _settings_game.locale.digit_decimal_separator; + if (decimal_separator.empty()) decimal_separator = _langpack.langpack->digit_decimal_separator; return decimal_separator; } @@ -470,7 +470,7 @@ static const char *GetDecimalSeparator() * @param number the number to write down * @param separator the thousands-separator to use */ -static void FormatNumber(StringBuilder &builder, int64_t number, const char *separator) +static void FormatNumber(StringBuilder &builder, int64_t number, std::string_view separator) { static const int max_digits = 20; uint64_t divisor = 10000000000000000000ULL; @@ -500,8 +500,8 @@ static void FormatNumber(StringBuilder &builder, int64_t number, const char *sep static void FormatCommaNumber(StringBuilder &builder, int64_t number) { - const char *separator = _settings_game.locale.digit_group_separator.c_str(); - if (StrEmpty(separator)) separator = _langpack.langpack->digit_group_separator; + std::string_view separator = _settings_game.locale.digit_group_separator; + if (separator.empty()) separator = _langpack.langpack->digit_group_separator; FormatNumber(builder, number, separator); } @@ -529,8 +529,8 @@ static void FormatBytes(StringBuilder &builder, int64_t number) { assert(number >= 0); - /* 1 2^10 2^20 2^30 2^40 2^50 2^60 */ - const char * const iec_prefixes[] = {"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei"}; + /* 1 2^10 2^20 2^30 2^40 2^50 2^60 */ + const std::string_view iec_prefixes[] = {"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei"}; uint id = 1; while (number >= 1024 * 1024) { number /= 1024; @@ -620,9 +620,9 @@ static void FormatGenericCurrency(StringBuilder &builder, const CurrencySpec *sp } } - const char *separator = _settings_game.locale.digit_group_separator_currency.c_str(); - if (StrEmpty(separator)) separator = GetCurrency().separator.c_str(); - if (StrEmpty(separator)) separator = _langpack.langpack->digit_group_separator_currency; + std::string_view separator = _settings_game.locale.digit_group_separator_currency; + if (separator.empty()) separator = GetCurrency().separator; + if (separator.empty()) separator = _langpack.langpack->digit_group_separator_currency; FormatNumber(builder, number, separator); if (number_str != STR_NULL) { FormatString(builder, GetStringPtr(number_str), {}); @@ -1808,7 +1808,7 @@ static void StationGetSpecialString(StringBuilder &builder, StationFacilities x) if (x.Test(StationFacility::Airport)) builder.PutUtf8(SCC_PLANE); } -static const char * const _silly_company_names[] = { +static const std::string_view _silly_company_names[] = { "Bloggs Brothers", "Tiny Transport Ltd.", "Express Travel", @@ -1824,7 +1824,7 @@ static const char * const _silly_company_names[] = { "Getout & Pushit Ltd." }; -static const char * const _surname_list[] = { +static const std::string_view _surname_list[] = { "Adams", "Allan", "Baker", @@ -1856,7 +1856,7 @@ static const char * const _surname_list[] = { "Watkins" }; -static const char * const _silly_surname_list[] = { +static const std::string_view _silly_surname_list[] = { "Grumpy", "Dozy", "Speedy", @@ -1876,7 +1876,7 @@ static const char _initial_name_letters[] = { 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', }; -static std::span GetSurnameOptions() +static std::span GetSurnameOptions() { if (_settings_game.game_creation.landscape == LandscapeType::Toyland) return _silly_surname_list; return _surname_list; @@ -1887,7 +1887,7 @@ static std::span GetSurnameOptions() * @param seed The seed the surname was generated from. * @return The surname. */ -static const char *GetSurname(uint32_t seed) +static std::string_view GetSurname(uint32_t seed) { auto surname_options = GetSurnameOptions(); return surname_options[surname_options.size() * GB(seed, 16, 8) >> 8]; @@ -2037,7 +2037,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) #endif #ifdef WITH_COCOA - extern void MacOSSetCurrentLocaleName(const char *iso_code); + extern void MacOSSetCurrentLocaleName(std::string_view iso_code); MacOSSetCurrentLocaleName(_current_language->isocode); #endif @@ -2220,7 +2220,7 @@ void InitializeLanguagePacks() * Get the ISO language code of the currently loaded language. * @return the ISO code. */ -const char *GetCurrentLanguageIsoCode() +std::string_view GetCurrentLanguageIsoCode() { return _langpack.langpack->isocode; } @@ -2297,7 +2297,7 @@ class LanguagePackGlyphSearcher : public MissingGlyphSearcher { return false; } - void SetFontNames([[maybe_unused]] FontCacheSettings *settings, [[maybe_unused]] const char *font_name, [[maybe_unused]] const void *os_data) override + void SetFontNames([[maybe_unused]] FontCacheSettings *settings, [[maybe_unused]] std::string_view font_name, [[maybe_unused]] const void *os_data) override { #if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) settings->small.font = font_name; diff --git a/src/strings_func.h b/src/strings_func.h index 7f53eeec1e..f813dc0fb5 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -96,7 +96,7 @@ uint64_t GetParamMaxDigits(uint count, FontSize size = FS_NORMAL); extern TextDirection _current_text_dir; ///< Text direction of the currently selected language void InitializeLanguagePacks(); -const char *GetCurrentLanguageIsoCode(); +std::string_view GetCurrentLanguageIsoCode(); std::string_view GetListSeparator(); /** @@ -189,7 +189,7 @@ public: * @param font_name The new font name. * @param os_data Opaque pointer to OS-specific data. */ - virtual void SetFontNames(struct FontCacheSettings *settings, const char *font_name, const void *os_data = nullptr) = 0; + virtual void SetFontNames(struct FontCacheSettings *settings, std::string_view font_name, const void *os_data = nullptr) = 0; bool FindMissingGlyphs(); }; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 0ac1f3a3da..d03edf5ca8 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -656,7 +656,7 @@ void TextfileWindow::ScrollToLine(size_t line) return true; } -/* virtual */ void TextfileWindow::SetFontNames([[maybe_unused]] FontCacheSettings *settings, [[maybe_unused]] const char *font_name, [[maybe_unused]] const void *os_data) +/* virtual */ void TextfileWindow::SetFontNames([[maybe_unused]] FontCacheSettings *settings, [[maybe_unused]] std::string_view font_name, [[maybe_unused]] const void *os_data) { #if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) settings->mono.font = font_name; diff --git a/src/textfile_gui.h b/src/textfile_gui.h index d0b35dacba..4c6df055e3 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -35,7 +35,7 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { FontSize DefaultSize() override; std::optional NextString() override; bool Monospace() override; - void SetFontNames(FontCacheSettings *settings, const char *font_name, const void *os_data) override; + void SetFontNames(FontCacheSettings *settings, std::string_view font_name, const void *os_data) override; void ScrollToLine(size_t line); virtual void LoadTextfile(const std::string &textfile, Subdirectory dir);