OpenTTD
strgen.h
Go to the documentation of this file.
1 /* $Id: strgen.h 26511 2014-04-25 17:43:09Z rubidium $ */
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 STRGEN_H
13 #define STRGEN_H
14 
15 #include "../language.h"
16 
18 struct Case {
19  int caseidx;
20  char *string;
22 
23  Case(int caseidx, const char *string, Case *next);
24  ~Case();
25 };
26 
28 struct LangString {
29  char *name;
30  char *english;
31  char *translated;
32  uint16 hash_next;
33  uint16 index;
34  int line;
36 
37  LangString(const char *name, const char *english, int index, int line);
38  ~LangString();
39  void FreeTranslation();
40 };
41 
43 struct StringData {
45  uint16 *hash_heads;
46  size_t tabs;
47  size_t max_strings;
49 
50  StringData(size_t tabs);
51  ~StringData();
52  void FreeTranslation();
53  uint HashStr(const char *s) const;
54  void Add(const char *s, LangString *ls);
55  LangString *Find(const char *s);
56  uint VersionHashStr(uint hash, const char *s) const;
57  uint Version() const;
58  uint CountInUse(uint tab) const;
59 };
60 
62 struct StringReader {
64  const char *file;
65  bool master;
66  bool translation;
67 
68  StringReader(StringData &data, const char *file, bool master, bool translation);
69  virtual ~StringReader();
70  void HandleString(char *str);
71 
78  virtual char *ReadLine(char *buffer, const char *last) = 0;
79 
84  virtual void HandlePragma(char *str);
85 
89  virtual void ParseFile();
90 };
91 
93 struct HeaderWriter {
99  virtual void WriteStringID(const char *name, int stringid) = 0;
100 
105  virtual void Finalise(const StringData &data) = 0;
106 
108  virtual ~HeaderWriter() {};
109 
110  void WriteHeader(const StringData &data);
111 };
112 
120  virtual void WriteHeader(const LanguagePackHeader *header) = 0;
121 
127  virtual void Write(const byte *buffer, size_t length) = 0;
128 
132  virtual void Finalise() = 0;
133 
135  virtual ~LanguageWriter() {}
136 
137  virtual void WriteLength(uint length);
138  virtual void WriteLang(const StringData &data);
139 };
140 
141 void CDECL strgen_warning(const char *s, ...) WARN_FORMAT(1, 2);
142 void CDECL strgen_error(const char *s, ...) WARN_FORMAT(1, 2);
143 void NORETURN CDECL strgen_fatal(const char *s, ...) WARN_FORMAT(1, 2);
144 char *ParseWord(char **buf);
145 
146 extern const char *_file;
147 extern int _cur_line;
148 extern int _errors, _warnings, _show_todo;
150 
151 #endif /* STRGEN_H */
size_t max_strings
The maximum number of strings.
Definition: strgen.h:47
Container for the different cases of a string.
Definition: strgen.h:18
virtual ~LanguageWriter()
Especially destroy the subclasses.
Definition: strgen.h:135
int _cur_line
The current line we&#39;re parsing in the input file.
Definition: strgen_base.cpp:29
bool master
Are we reading the master file?
Definition: strgen.h:65
char * translated
Translated text.
Definition: strgen.h:31
Information about the currently known strings.
Definition: strgen.h:43
~Case()
Free everything we allocated.
Definition: strgen_base.cpp:48
char * english
English text.
Definition: strgen.h:30
bool translation
Are we reading a translation, implies !master. However, the base translation will have this false...
Definition: strgen.h:66
LangString ** strings
Array of all known strings.
Definition: strgen.h:44
Header of a language file.
Definition: language.h:26
int caseidx
The index of the case.
Definition: strgen.h:19
Information about a single string.
Definition: strgen.h:28
virtual ~HeaderWriter()
Especially destroy the subclasses.
Definition: strgen.h:108
char * name
Name of the string.
Definition: strgen.h:29
Case * next
The next, chained, case.
Definition: strgen.h:21
const char * file
The file we are reading.
Definition: strgen.h:64
LanguagePackHeader _lang
Header information about a language.
Definition: strgen_base.cpp:31
char * string
The translation of the case.
Definition: strgen.h:20
Case * translated_case
Cases of the translation.
Definition: strgen.h:35
const char * _file
The filename of the input, so we can refer to it in errors/warnings.
Definition: strgen_base.cpp:28
StringData & data
The data to fill during reading.
Definition: strgen.h:63
Base class for all language writers.
Definition: strgen.h:114
size_t tabs
The number of &#39;tabs&#39; of strings.
Definition: strgen.h:46
uint16 * hash_heads
Hash table for the strings.
Definition: strgen.h:45
int next_string_id
The next string ID to allocate.
Definition: strgen.h:48
uint16 hash_next
Next hash entry.
Definition: strgen.h:32
Base class for writing the header, i.e.
Definition: strgen.h:93
int line
Line of string in source-file.
Definition: strgen.h:34
uint16 index
The index in the language file.
Definition: strgen.h:33
Helper for reading strings.
Definition: strgen.h:62
Case(int caseidx, const char *string, Case *next)
Create a new case.
Definition: strgen_base.cpp:42