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 */