OpenTTD
newgrf_text.h
Go to the documentation of this file.
1 /* $Id: newgrf_text.h 27851 2017-04-09 21:58:07Z peter1138 $ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * 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.
6  * 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.
7  * 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/>.
8  */
9 
12 #ifndef NEWGRF_TEXT_H
13 #define NEWGRF_TEXT_H
14 
15 #include "string_type.h"
16 #include "strings_type.h"
17 #include "core/smallvec_type.hpp"
18 #include "table/control_codes.h"
19 
21 static const WChar NFO_UTF8_IDENTIFIER = 0x00DE;
22 
23 StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string);
24 StringID GetGRFStringID(uint32 grfid, StringID stringid);
25 const char *GetGRFStringFromGRFText(const struct GRFText *text);
26 const char *GetGRFStringPtr(uint16 stringid);
27 void CleanUpStrings();
28 void SetCurrentGrfLangID(byte language_id);
29 char *TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen = NULL, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID);
30 struct GRFText *DuplicateGRFText(struct GRFText *orig);
31 void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add);
32 void AddGRFTextToList(struct GRFText **list, byte langid, uint32 grfid, bool allow_newlines, const char *text_to_add);
33 void AddGRFTextToList(struct GRFText **list, const char *text_to_add);
34 void CleanUpGRFText(struct GRFText *grftext);
35 
36 bool CheckGrfLangID(byte lang_id, byte grf_version);
37 
38 void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = NULL);
40 void RewindTextRefStack();
43 void RestoreTextRefStackBackup(struct TextRefStack *backup);
44 uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, int64 *argv, uint argv_size, bool modify_argv);
45 
47 struct LanguageMap {
49  struct Mapping {
50  byte newgrf_id;
51  byte openttd_id;
52  };
53 
54  /* We need a vector and can't use SmallMap due to the fact that for "setting" a
55  * gender of a string or requesting a case for a substring we want to map from
56  * the NewGRF's internal ID to OpenTTD's ID whereas for the choice lists we map
57  * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this
58  * case a NewGRF developer/translator might want a different translation for
59  * both cases. Thus we are basically implementing a multi-map. */
63 
64  int GetMapping(int newgrf_id, bool gender) const;
65  int GetReverseMapping(int openttd_id, bool gender) const;
66  static const LanguageMap *GetLanguageMap(uint32 grfid, uint8 language_id);
67 };
68 
69 #endif /* NEWGRF_TEXT_H */
SmallVector< Mapping, 1 > case_map
Mapping of NewGRF and OpenTTD IDs for cases.
Definition: newgrf_text.h:61
struct TextRefStack * CreateTextRefStackBackup()
Create a backup of the current NewGRF text stack.
Control codes that are embedded in the translation strings.
int plural_form
The plural form used for this language.
Definition: newgrf_text.h:62
byte newgrf_id
NewGRF&#39;s internal ID for a case/gender.
Definition: newgrf_text.h:50
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:19
StringID GetGRFStringID(uint32 grfid, StringID stringid)
Returns the index for this stringid associated with its grfID.
const char * GetGRFStringPtr(uint16 stringid)
Get a C-string from a stringid set by a newgrf.
Simple vector template class.
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:2543
void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values=NULL)
Start using the TTDP compatible string code parsing.
Mapping between NewGRF and OpenTTD IDs.
Definition: newgrf_text.h:49
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:47
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:51
Element of the linked list.
Definition: newgrf_text.cpp:66
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:18
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.
char * TranslateTTDPatchCodes(uint32 grfid, uint8 language_id, bool allow_newlines, const char *str, int *olen=NULL, StringControlCode byte80=SCC_NEWGRF_PRINT_WORD_STRING_ID)
Translate TTDPatch string codes into something OpenTTD can handle (better).
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:21
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.
SmallVector< Mapping, 1 > gender_map
Mapping of NewGRF and OpenTTD IDs for genders.
Definition: newgrf_text.h:60
uint32 WChar
Type for wide characters, i.e.
Definition: string_type.h:35
Dynamic data of a loaded NewGRF.
Definition: newgrf.h:104