Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef STRGEN_H
00013 #define STRGEN_H
00014
00016 struct Case {
00017 int caseidx;
00018 char *string;
00019 Case *next;
00020
00021 Case(int caseidx, const char *string, Case *next);
00022 ~Case();
00023 };
00024
00026 struct LangString {
00027 char *name;
00028 char *english;
00029 char *translated;
00030 uint16 hash_next;
00031 uint16 index;
00032 int line;
00033 Case *translated_case;
00034
00035 LangString(const char *name, const char *english, int index, int line);
00036 ~LangString();
00037 void FreeTranslation();
00038 };
00039
00041 struct StringData {
00042 LangString **strings;
00043 uint16 *hash_heads;
00044 size_t tabs;
00045 size_t max_strings;
00046 int next_string_id;
00047
00048 StringData(size_t tabs);
00049 ~StringData();
00050 void FreeTranslation();
00051 uint HashStr(const char *s) const;
00052 void Add(const char *s, LangString *ls);
00053 LangString *Find(const char *s);
00054 uint VersionHashStr(uint hash, const char *s) const;
00055 uint Version() const;
00056 uint CountInUse(uint tab) const;
00057 };
00058
00060 struct StringReader {
00061 StringData &data;
00062 const char *file;
00063 bool master;
00064 bool translation;
00065
00066 StringReader(StringData &data, const char *file, bool master, bool translation);
00067 virtual ~StringReader();
00068 void HandleString(char *str);
00069
00076 virtual char *ReadLine(char *buffer, size_t size) = 0;
00077
00082 virtual void HandlePragma(char *str) = 0;
00083
00087 virtual void ParseFile();
00088 };
00089
00091 struct HeaderWriter {
00097 virtual void WriteStringID(const char *name, int stringid) = 0;
00098
00103 virtual void Finalise(const StringData &data) = 0;
00104
00106 virtual ~HeaderWriter() {};
00107
00108 void WriteHeader(const StringData &data);
00109 };
00110
00112 struct LanguageWriter {
00118 virtual void WriteHeader(const LanguagePackHeader *header) = 0;
00119
00125 virtual void Write(const byte *buffer, size_t length) = 0;
00126
00130 virtual void Finalise() = 0;
00131
00133 virtual ~LanguageWriter() {}
00134
00135 virtual void WriteLength(uint length);
00136 virtual void WriteLang(const StringData &data);
00137 };
00138
00139 void CDECL strgen_warning(const char *s, ...) WARN_FORMAT(1, 2);
00140 void CDECL strgen_error(const char *s, ...) WARN_FORMAT(1, 2);
00141 void NORETURN CDECL strgen_fatal(const char *s, ...) WARN_FORMAT(1, 2);
00142 char *ParseWord(char **buf);
00143
00144 extern const char *_file;
00145 extern int _cur_line;
00146 extern int _errors, _warnings, _show_todo;
00147 extern LanguagePackHeader _lang;
00148
00149 #endif