From fee73f32539fb338135dcb06af2009c05c613525 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Jun 2024 08:29:20 +0100 Subject: [PATCH] Codechange: Split types out of newgrf_text.h --- src/CMakeLists.txt | 1 + src/newgrf_text.h | 40 +-------------------------------- src/newgrf_text_type.h | 50 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 src/newgrf_text_type.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b946e02a1..5f7847ff8a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -307,6 +307,7 @@ add_files( newgrf_storage.h newgrf_text.cpp newgrf_text.h + newgrf_text_type.h newgrf_town.cpp newgrf_town.h newgrf_townname.cpp diff --git a/src/newgrf_text.h b/src/newgrf_text.h index dfefac89ed..bcd27190c6 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -10,24 +10,9 @@ #ifndef NEWGRF_TEXT_H #define NEWGRF_TEXT_H -#include "string_type.h" +#include "newgrf_text_type.h" #include "strings_type.h" #include "table/control_codes.h" -#include - -/** This character, the thorn ('รพ'), indicates a unicode string to NFO. */ -static const char32_t NFO_UTF8_IDENTIFIER = 0x00DE; - -/** A GRF text with associated language ID. */ -struct GRFText { - uint8_t langid; ///< The language associated with this GRFText. - std::string text; ///< The actual (translated) text. -}; - -/** A GRF text with a list of translations. */ -typedef std::vector GRFTextList; -/** Reference counted wrapper around a GRFText pointer. */ -typedef std::shared_ptr GRFTextWrapper; StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string); StringID GetGRFStringID(uint32_t grfid, StringID stringid); @@ -49,27 +34,4 @@ bool UsingNewGRFTextStack(); struct TextRefStack *CreateTextRefStackBackup(); void RestoreTextRefStackBackup(struct TextRefStack *backup); -/** Mapping of language data between a NewGRF and OpenTTD. */ -struct LanguageMap { - /** Mapping between NewGRF and OpenTTD IDs. */ - struct Mapping { - uint8_t newgrf_id; ///< NewGRF's internal ID for a case/gender. - uint8_t openttd_id; ///< OpenTTD's internal ID for a case/gender. - }; - - /* We need a vector and can't use SmallMap due to the fact that for "setting" a - * gender of a string or requesting a case for a substring we want to map from - * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map - * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this - * case a NewGRF developer/translator might want a different translation for - * both cases. Thus we are basically implementing a multi-map. */ - std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. - std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. - int plural_form; ///< The plural form used for this language. - - int GetMapping(int newgrf_id, bool gender) const; - int GetReverseMapping(int openttd_id, bool gender) const; - static const LanguageMap *GetLanguageMap(uint32_t grfid, uint8_t language_id); -}; - #endif /* NEWGRF_TEXT_H */ diff --git a/src/newgrf_text_type.h b/src/newgrf_text_type.h new file mode 100644 index 0000000000..374046237a --- /dev/null +++ b/src/newgrf_text_type.h @@ -0,0 +1,50 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file newgrf_text_type.h Header of Action 04 "universal holder" structure */ + +#ifndef NEWGRF_TEXT_TYPE_H +#define NEWGRF_TEXT_TYPE_H + +/** This character (thorn) indicates a unicode string to NFO. */ +static const char32_t NFO_UTF8_IDENTIFIER = 0x00DE; + +/** A GRF text with associated language ID. */ +struct GRFText { + uint8_t langid; ///< The language associated with this GRFText. + std::string text; ///< The actual (translated) text. +}; + +/** A GRF text with a list of translations. */ +using GRFTextList = std::vector; +/** Reference counted wrapper around a GRFText pointer. */ +using GRFTextWrapper = std::shared_ptr; + +/** Mapping of language data between a NewGRF and OpenTTD. */ +struct LanguageMap { + /** Mapping between NewGRF and OpenTTD IDs. */ + struct Mapping { + uint8_t newgrf_id; ///< NewGRF's internal ID for a case/gender. + uint8_t openttd_id; ///< OpenTTD's internal ID for a case/gender. + }; + + /* We need a vector and can't use SmallMap due to the fact that for "setting" a + * gender of a string or requesting a case for a substring we want to map from + * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map + * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this + * case a NewGRF developer/translator might want a different translation for + * both cases. Thus we are basically implementing a multi-map. */ + std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. + std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. + int plural_form; ///< The plural form used for this language. + + int GetMapping(int newgrf_id, bool gender) const; + int GetReverseMapping(int openttd_id, bool gender) const; + static const LanguageMap *GetLanguageMap(uint32_t grfid, uint8_t language_id); +}; + +#endif /* NEWGRF_TEXT_TYPE_H */