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);
39 void StopTextRefStackUsage();
40 void RewindTextRefStack();
41 bool UsingNewGRFTextStack();
42 struct TextRefStack *CreateTextRefStackBackup();
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. */
60 SmallVector<Mapping, 1> gender_map;
61 SmallVector<Mapping, 1> case_map;
62 int plural_form;
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 */
LanguageMap::case_map
SmallVector< Mapping, 1 > case_map
Mapping of NewGRF and OpenTTD IDs for cases.
Definition: newgrf_text.h:61
CreateTextRefStackBackup
struct TextRefStack * CreateTextRefStackBackup()
Create a backup of the current NewGRF text stack.
Definition: newgrf_text.cpp:900
control_codes.h
Control codes that are embedded in the translation strings.
LanguageMap::plural_form
int plural_form
The plural form used for this language.
Definition: newgrf_text.h:62
LanguageMap::Mapping::newgrf_id
byte newgrf_id
NewGRF&#39;s internal ID for a case/gender.
Definition: newgrf_text.h:50
smallvec_type.hpp
Simple vector class that allows allocating an item without the need to copy this->data needlessly...
StringControlCode
StringControlCode
List of string control codes used for string formatting, displaying, and by strgen to generate the la...
Definition: control_codes.h:19
GetGRFStringID
StringID GetGRFStringID(uint32 grfid, StringID stringid)
Returns the index for this stringid associated with its grfID.
Definition: newgrf_text.cpp:702
GetGRFStringPtr
const char * GetGRFStringPtr(uint16 stringid)
Get a C-string from a stringid set by a newgrf.
Definition: newgrf_text.cpp:742
SmallVector
Simple vector template class.
Definition: smallvec_type.hpp:29
UsingNewGRFTextStack
bool UsingNewGRFTextStack()
Check whether the NewGRF text stack is in use.
Definition: newgrf_text.cpp:891
LanguageMap::GetLanguageMap
static const LanguageMap * GetLanguageMap(uint32 grfid, uint8 language_id)
Get the language map associated with a given NewGRF and language.
Definition: newgrf.cpp:2543
StartTextRefStackUsage
void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values=NULL)
Start using the TTDP compatible string code parsing.
Definition: newgrf_text.cpp:933
LanguageMap::Mapping
Mapping between NewGRF and OpenTTD IDs.
Definition: newgrf_text.h:49
SetCurrentGrfLangID
void SetCurrentGrfLangID(byte language_id)
Equivalence Setter function between game and newgrf langID.
Definition: newgrf_text.cpp:761
SCC_NEWGRF_PRINT_WORD_STRING_ID
81: Read 2 bytes from the stack as String ID
Definition: control_codes.h:126
StopTextRefStackUsage
void StopTextRefStackUsage()
Stop using the TTDP compatible string code parsing.
Definition: newgrf_text.cpp:950
DuplicateGRFText
struct GRFText * DuplicateGRFText(struct GRFText *orig)
Create a copy of this GRFText list.
Definition: newgrf_text.cpp:631
LanguageMap
Mapping of language data between a NewGRF and OpenTTD.
Definition: newgrf_text.h:47
GRFText::langid
byte langid
The language associated with this GRFText.
Definition: newgrf_text.cpp:140
AddGRFString
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.
Definition: newgrf_text.cpp:645
LanguageMap::Mapping::openttd_id
byte openttd_id
OpenTTD&#39;s internal ID for a case/gender.
Definition: newgrf_text.h:51
GRFText
Element of the linked list.
Definition: newgrf_text.cpp:66
StringID
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:18
LanguageMap::GetReverseMapping
int GetReverseMapping(int openttd_id, bool gender) const
Get the mapping from OpenTTD&#39;s internal ID to the NewGRF supplied ID.
Definition: newgrf_text.cpp:183
RemapNewGRFStringControlCode
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.
Definition: newgrf_text.cpp:970
TranslateTTDPatchCodes
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).
Definition: newgrf_text.cpp:336
GetGRFStringFromGRFText
const char * GetGRFStringFromGRFText(const GRFText *text)
Get a C-string from a GRFText-list.
Definition: newgrf_text.cpp:721
NFO_UTF8_IDENTIFIER
static const WChar NFO_UTF8_IDENTIFIER
This character, the thorn (&#39;þ&#39;), indicates a unicode string to NFO.
Definition: newgrf_text.h:21
AddGRFTextToList
void AddGRFTextToList(struct GRFText **list, struct GRFText *text_to_add)
Add a GRFText to a GRFText list.
Definition: newgrf_text.cpp:578
LanguageMap::GetMapping
int GetMapping(int newgrf_id, bool gender) const
Get the mapping from the NewGRF supplied ID to OpenTTD&#39;s internal ID.
Definition: newgrf_text.cpp:168
RestoreTextRefStackBackup
void RestoreTextRefStackBackup(struct TextRefStack *backup)
Restore a copy of the text stack to the used stack.
Definition: newgrf_text.cpp:909
CleanUpGRFText
void CleanUpGRFText(struct GRFText *grftext)
Delete all items of a linked GRFText list.
Definition: newgrf_text.cpp:784
strings_type.h
Types related to strings.
CleanUpStrings
void CleanUpStrings()
House cleaning.
Definition: newgrf_text.cpp:797
string_type.h
Types for strings.
LanguageMap::gender_map
SmallVector< Mapping, 1 > gender_map
Mapping of NewGRF and OpenTTD IDs for genders.
Definition: newgrf_text.h:60
WChar
uint32 WChar
Type for wide characters, i.e.
Definition: string_type.h:35
TextRefStack
Definition: newgrf_text.cpp:811
GRFFile
Dynamic data of a loaded NewGRF.
Definition: newgrf.h:104