OpenTTD
newgrf_text.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * 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.
4  * 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.
5  * 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 <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef NEWGRF_TEXT_H
11 #define NEWGRF_TEXT_H
12 
13 #include "string_type.h"
14 #include "strings_type.h"
15 #include "core/smallvec_type.hpp"
16 #include "table/control_codes.h"
17 
19 static const WChar NFO_UTF8_IDENTIFIER = 0x00DE;
20 
21 StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string);
22 StringID GetGRFStringID(uint32 grfid, StringID stringid);
23 const char *GetGRFStringFromGRFText(const struct GRFText *text);
24 const char *GetGRFStringPtr(uint16 stringid);
25 void CleanUpStrings();
26 void SetCurrentGrfLangID(byte language_id);
27 char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = nullptr, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID);
28 struct GRFText *DuplicateGRFText(struct GRFText *orig);
29 void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add);
30 void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add);
31 void AddGRFTextToList(struct GRFText **list, const char *text_to_add);
32 void CleanUpGRFText(struct GRFText *grftext);
33 
34 bool CheckGrfLangID(byte lang_id, byte grf_version);
35 
36 void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = nullptr);
38 void RewindTextRefStack();
41 void RestoreTextRefStackBackup(struct TextRefStack *backup);
42 uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, int64 *argv, uint argv_size, bool modify_argv);
43 
45 struct LanguageMap {
47  struct Mapping {
48  byte newgrf_id;
49  byte openttd_id;
50  };
51 
52  /* We need a vector and can't use SmallMap due to the fact that for "setting" a
53  * gender of a string or requesting a case for a substring we want to map from
54  * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map
55  * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this
56  * case a NewGRF developer/translator might want a different translation for
57  * both cases. Thus we are basically implementing a multi-map. */
58  std::vector<Mapping> gender_map;
59  std::vector<Mapping> case_map;
61 
62  int GetMapping(int newgrf_id, bool gender) const;
63  int GetReverseMapping(int openttd_id, bool gender) const;
64  static const LanguageMap *GetLanguageMap(uint32 grfid, uint8 language_id);
65 };
66 
67 #endif /* NEWGRF_TEXT_H */
struct TextRefStack * CreateTextRefStackBackup()
Create a backup of the current NewGRF text stack.
std::vector< Mapping > case_map
Mapping of NewGRF and OpenTTD IDs for cases.
Definition: newgrf_text.h:59
Control codes that are embedded in the translation strings.
int plural_form
The plural form used for this language.
Definition: newgrf_text.h:60
byte newgrf_id
NewGRF&#39;s internal ID for a case/gender.
Definition: newgrf_text.h:48
Simple vector class that allows allocating an item without the need to copy this->data needlessly...
StringControlCode
List of string control codes used for string formatting, displaying, and by strgen to generate the la...
Definition: control_codes.h:17
StringID GetGRFStringID(uint32 grfid, StringID stringid)
Returns the index for this stringid associated with its grfID.
std::vector< Mapping > gender_map
Mapping of NewGRF and OpenTTD IDs for genders.
Definition: newgrf_text.h:58
const char * GetGRFStringPtr(uint16 stringid)
Get a C-string from a stringid set by a newgrf.
bool UsingNewGRFTextStack()
Check whether the NewGRF text stack is in use.
static const LanguageMap * GetLanguageMap(uint32 grfid, uint8 language_id)
Get the language map associated with a given NewGRF and language.
Definition: newgrf.cpp:2573
char * TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen=nullptr, StringControlCode byte80=SCC_NEWGRF_PRINT_WORD_STRING_ID)
Translate TTDPatch string codes into something OpenTTD can handle (better).
Mapping between NewGRF and OpenTTD IDs.
Definition: newgrf_text.h:47
void SetCurrentGrfLangID(byte language_id)
Equivalence Setter function between game and newgrf langID.
81: Read 2 bytes from the stack as String ID
void StopTextRefStackUsage()
Stop using the TTDP compatible string code parsing.
struct GRFText * DuplicateGRFText(struct GRFText *orig)
Create a copy of this GRFText list.
Mapping of language data between a NewGRF and OpenTTD.
Definition: newgrf_text.h:45
void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values=nullptr)
Start using the TTDP compatible string code parsing.
byte langid
The language associated with this GRFText.
StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string)
Add the new read string into our structure.
byte openttd_id
OpenTTD&#39;s internal ID for a case/gender.
Definition: newgrf_text.h:49
Element of the linked list.
Definition: newgrf_text.cpp:68
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
int GetReverseMapping(int openttd_id, bool gender) const
Get the mapping from OpenTTD&#39;s internal ID to the NewGRF supplied ID.
uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, int64 *argv, uint argv_size, bool modify_argv)
FormatString for NewGRF specific "magic" string control codes.
const char * GetGRFStringFromGRFText(const GRFText *text)
Get a C-string from a GRFText-list.
static const WChar NFO_UTF8_IDENTIFIER
This character, the thorn (&#39;รพ&#39;), indicates a unicode string to NFO.
Definition: newgrf_text.h:19
void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add)
Add a GRFText to a GRFText list.
int GetMapping(int newgrf_id, bool gender) const
Get the mapping from the NewGRF supplied ID to OpenTTD&#39;s internal ID.
void RestoreTextRefStackBackup(struct TextRefStack *backup)
Restore a copy of the text stack to the used stack.
void CleanUpGRFText(struct GRFText *grftext)
Delete all items of a linked GRFText list.
Types related to strings.
void CleanUpStrings()
House cleaning.
Types for strings.
uint32 WChar
Type for wide characters, i.e.
Definition: string_type.h:35
Dynamic data of a loaded NewGRF.
Definition: newgrf.h:105