author | peter1138 |
Tue, 22 Jan 2008 07:27:06 +0000 | |
changeset 8374 | 7a1b6c89cb89 |
parent 8264 | b1e85998c7d3 |
child 8733 | e60ce9c3ae47 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
0 | 3 |
#include "../stdafx.h" |
8130
d2eb7d04f6e1
(svn r11691) -Codechange: move+rename helpers.hpp and only include it when it is really needed.
rubidium
parents:
8114
diff
changeset
|
4 |
#include "../core/alloc_func.hpp" |
8135
2373c1e0e9bc
(svn r11697) -Fix [FS#1585]: strgen did not (always) compile properly.
rubidium
parents:
8130
diff
changeset
|
5 |
#include "../core/endian_func.hpp" |
8214
971f861d5543
(svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents:
8135
diff
changeset
|
6 |
#include "../string_func.h" |
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8214
diff
changeset
|
7 |
#include "../table/control_codes.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8214
diff
changeset
|
8 |
|
0 | 9 |
#include <stdio.h> |
10 |
#include <string.h> |
|
11 |
#include <stdlib.h> |
|
12 |
#include <stdarg.h> |
|
13 |
||
2482
374f6395847d
(svn r3008) [ 1247535 ] Native Support for Win64 (compile&run only) (michi_cc)
Darkvater
parents:
2459
diff
changeset
|
14 |
#if (!defined(WIN32) && !defined(WIN64)) || defined(__CYGWIN__) |
0 | 15 |
#include <unistd.h> |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
16 |
#include <sys/types.h> |
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
17 |
#include <sys/stat.h> |
0 | 18 |
#endif |
19 |
||
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
20 |
#if defined WIN32 || defined __WATCOMC__ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
21 |
#include <direct.h> |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
22 |
#endif /* WIN32 || __WATCOMC__ */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
23 |
|
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
24 |
#ifdef __MORPHOS__ |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
25 |
#ifdef stderr |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
26 |
#undef stderr |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
27 |
#endif |
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
28 |
#define stderr stdout |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
29 |
#endif /* __MORPHOS__ */ |
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
30 |
|
0 | 31 |
/* Compiles a list of strings into a compiled string list */ |
32 |
||
33 |
typedef void (*ParseCmdProc)(char *buf, int value); |
|
34 |
||
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
35 |
struct LanguagePackHeader { |
0 | 36 |
uint32 ident; |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
37 |
uint32 version; // 32-bits of auto generated version info which is basically a hash of strings.h |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
38 |
char name[32]; // the international name of this language |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4379
diff
changeset
|
39 |
char own_name[32]; // the localized name of this language |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
40 |
char isocode[16]; // the ISO code for the language (not country code) |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
41 |
uint16 offsets[32]; // the offsets |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
42 |
byte plural_form; // plural form index |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
43 |
byte pad[3]; // pad header to be a multiple of 4 |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
44 |
}; |
0 | 45 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
46 |
struct CmdStruct { |
0 | 47 |
const char *cmd; |
48 |
ParseCmdProc proc; |
|
49 |
long value; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
50 |
int8 consumes; |
2087 | 51 |
byte flags; |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
52 |
}; |
0 | 53 |
|
2087 | 54 |
enum { |
55 |
C_DONTCOUNT = 1, |
|
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
56 |
C_CASE = 2, |
2087 | 57 |
}; |
58 |
||
59 |
||
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
60 |
struct Case { |
2087 | 61 |
int caseidx; |
62 |
char *string; |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
63 |
Case *next; |
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
64 |
}; |
2087 | 65 |
|
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
66 |
static bool _masterlang; |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
67 |
static bool _translated; |
2459
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
68 |
static const char* _file = "(unknown file)"; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
69 |
static int _cur_line; |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
70 |
static int _errors, _warnings, _show_todo; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
71 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
72 |
struct LangString { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
73 |
char *name; // Name of the string |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
74 |
char *english; // English text |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
75 |
char *translated; // Translated text |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
76 |
uint16 hash_next; // next hash entry |
2087 | 77 |
uint16 index; |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
78 |
int line; // line of string in source-file |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
79 |
Case *english_case; // cases for english |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
80 |
Case *translated_case; // cases for foreign |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
81 |
}; |
2087 | 82 |
|
83 |
static LangString *_strings[65536]; |
|
84 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
85 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
86 |
#define HASH_SIZE 32767 |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
87 |
static uint16 _hash_head[HASH_SIZE]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
88 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
89 |
static byte _put_buf[4096]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
90 |
static int _put_pos; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
91 |
static int _next_string_id; |
0 | 92 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
93 |
static uint32 _hash; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
94 |
static char _lang_name[32], _lang_ownname[32], _lang_isocode[16]; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
95 |
static byte _lang_pluralform; |
2087 | 96 |
#define MAX_NUM_GENDER 8 |
97 |
static char _genders[MAX_NUM_GENDER][8]; |
|
98 |
static int _numgenders; |
|
0 | 99 |
|
2087 | 100 |
// contains the name of all cases. |
101 |
#define MAX_NUM_CASES 50 |
|
102 |
static char _cases[MAX_NUM_CASES][16]; |
|
103 |
static int _numcases; |
|
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
104 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
105 |
// for each plural value, this is the number of plural forms. |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4077
diff
changeset
|
106 |
static const byte _plural_form_counts[] = { 2, 1, 2, 3, 3, 3, 3, 3, 4 }; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
107 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
108 |
static const char *_cur_ident; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
109 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
110 |
struct CmdPair { |
2087 | 111 |
const CmdStruct *a; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
112 |
const char *v; |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
113 |
}; |
2087 | 114 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
115 |
struct ParsedCommandStruct { |
2087 | 116 |
int np; |
117 |
CmdPair pairs[32]; |
|
118 |
const CmdStruct *cmd[32]; // ordered by param # |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
119 |
}; |
2087 | 120 |
|
121 |
// Used when generating some advanced commands. |
|
122 |
static ParsedCommandStruct _cur_pcs; |
|
123 |
static int _cur_argidx; |
|
124 |
||
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
125 |
static uint HashStr(const char *s) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
126 |
{ |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
127 |
uint hash = 0; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
128 |
for (; *s != '\0'; s++) hash = ROL(hash, 3) ^ *s; |
0 | 129 |
return hash % HASH_SIZE; |
130 |
} |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
131 |
|
2087 | 132 |
static void HashAdd(const char *s, LangString *ls) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
133 |
{ |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
134 |
uint hash = HashStr(s); |
2087 | 135 |
ls->hash_next = _hash_head[hash]; |
136 |
_hash_head[hash] = ls->index + 1; |
|
0 | 137 |
} |
138 |
||
2087 | 139 |
static LangString *HashFind(const char *s) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
140 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
141 |
int idx = _hash_head[HashStr(s)]; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
142 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
143 |
while (--idx >= 0) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
144 |
LangString* ls = _strings[idx]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
145 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
146 |
if (strcmp(ls->name, s) == 0) return ls; |
2087 | 147 |
idx = ls->hash_next; |
0 | 148 |
} |
2087 | 149 |
return NULL; |
0 | 150 |
} |
151 |
||
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
152 |
#ifdef _MSC_VER |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
153 |
# define LINE_NUM_FMT "(%d)" |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
154 |
#else |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
155 |
# define LINE_NUM_FMT ":%d" |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
156 |
#endif |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
157 |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
158 |
static void CDECL warning(const char *s, ...) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
159 |
{ |
0 | 160 |
char buf[1024]; |
161 |
va_list va; |
|
162 |
va_start(va, s); |
|
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
163 |
vsnprintf(buf, lengthof(buf), s, va); |
0 | 164 |
va_end(va); |
4447
486395ec1e06
(svn r6225) -Codechange: change the warning/error format of strgen to show up
Darkvater
parents:
4434
diff
changeset
|
165 |
fprintf(stderr, "%s" LINE_NUM_FMT ": warning: %s\n", _file, _cur_line, buf); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
166 |
_warnings++; |
0 | 167 |
} |
168 |
||
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
169 |
void CDECL error(const char *s, ...) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
170 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
171 |
char buf[1024]; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
172 |
va_list va; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
173 |
va_start(va, s); |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
174 |
vsnprintf(buf, lengthof(buf), s, va); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
175 |
va_end(va); |
4447
486395ec1e06
(svn r6225) -Codechange: change the warning/error format of strgen to show up
Darkvater
parents:
4434
diff
changeset
|
176 |
fprintf(stderr, "%s" LINE_NUM_FMT ": error: %s\n", _file, _cur_line, buf); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
177 |
_errors++; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
178 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
179 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
180 |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
181 |
static void NORETURN CDECL fatal(const char *s, ...) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
182 |
{ |
0 | 183 |
char buf[1024]; |
184 |
va_list va; |
|
185 |
va_start(va, s); |
|
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
186 |
vsnprintf(buf, lengthof(buf), s, va); |
0 | 187 |
va_end(va); |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3718
diff
changeset
|
188 |
fprintf(stderr, "%s" LINE_NUM_FMT ": FATAL: %s\n", _file, _cur_line, buf); |
0 | 189 |
exit(1); |
190 |
} |
|
191 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
192 |
static void PutByte(byte c) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
193 |
{ |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
194 |
if (_put_pos == lengthof(_put_buf)) fatal("Put buffer too small"); |
0 | 195 |
_put_buf[_put_pos++] = c; |
196 |
} |
|
197 |
||
198 |
||
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
199 |
static void PutUtf8(uint32 value) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
200 |
{ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
201 |
if (value < 0x80) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
202 |
PutByte(value); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
203 |
} else if (value < 0x800) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
204 |
PutByte(0xC0 + GB(value, 6, 5)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
205 |
PutByte(0x80 + GB(value, 0, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
206 |
} else if (value < 0x10000) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
207 |
PutByte(0xE0 + GB(value, 12, 4)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
208 |
PutByte(0x80 + GB(value, 6, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
209 |
PutByte(0x80 + GB(value, 0, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
210 |
} else if (value < 0x110000) { |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
211 |
PutByte(0xF0 + GB(value, 18, 3)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
212 |
PutByte(0x80 + GB(value, 12, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
213 |
PutByte(0x80 + GB(value, 6, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
214 |
PutByte(0x80 + GB(value, 0, 6)); |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
215 |
} else { |
5360
d87dfdb62e5a
(svn r7540) -Codechange: Print a summary of the number of errors/warnings of a language when strgen is run with the -w flag.
Darkvater
parents:
5111
diff
changeset
|
216 |
warning("Invalid unicode value U+0x%X", value); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
217 |
} |
0 | 218 |
} |
219 |
||
220 |
||
5111
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
221 |
size_t Utf8Validate(const char *s) |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
222 |
{ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
223 |
uint32 c; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
224 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7755
diff
changeset
|
225 |
if (!HasBit(s[0], 7)) { |
5111
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
226 |
/* 1 byte */ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
227 |
return 1; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
228 |
} else if (GB(s[0], 5, 3) == 6 && IsUtf8Part(s[1])) { |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
229 |
/* 2 bytes */ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
230 |
c = GB(s[0], 0, 5) << 6 | GB(s[1], 0, 6); |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
231 |
if (c >= 0x80) return 2; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
232 |
} else if (GB(s[0], 4, 4) == 14 && IsUtf8Part(s[1]) && IsUtf8Part(s[2])) { |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
233 |
/* 3 bytes */ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
234 |
c = GB(s[0], 0, 4) << 12 | GB(s[1], 0, 6) << 6 | GB(s[2], 0, 6); |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
235 |
if (c >= 0x800) return 3; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
236 |
} else if (GB(s[0], 3, 5) == 30 && IsUtf8Part(s[1]) && IsUtf8Part(s[2]) && IsUtf8Part(s[3])) { |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
237 |
/* 4 bytes */ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
238 |
c = GB(s[0], 0, 3) << 18 | GB(s[1], 0, 6) << 12 | GB(s[2], 0, 6) << 6 | GB(s[3], 0, 6); |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
239 |
if (c >= 0x10000 && c <= 0x10FFFF) return 4; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
240 |
} |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
241 |
|
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
242 |
return 0; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
243 |
} |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
244 |
|
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
245 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
246 |
static void EmitSingleChar(char *buf, int value) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
247 |
{ |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
248 |
if (*buf != '\0') warning("Ignoring trailing letters in command"); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
249 |
PutUtf8(value); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
250 |
} |
0 | 251 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
252 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
253 |
static void EmitSetX(char *buf, int value) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
254 |
{ |
0 | 255 |
char *err; |
256 |
int x = strtol(buf, &err, 0); |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
257 |
if (*err != 0) fatal("SetX param invalid"); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
258 |
PutUtf8(SCC_SETX); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
259 |
PutByte((byte)x); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
260 |
} |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
261 |
|
0 | 262 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
263 |
static void EmitSetXY(char *buf, int value) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
264 |
{ |
0 | 265 |
char *err; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
266 |
int x; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
267 |
int y; |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
268 |
|
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
269 |
x = strtol(buf, &err, 0); |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
270 |
if (*err != ' ') fatal("SetXY param invalid"); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
271 |
y = strtol(err + 1, &err, 0); |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
272 |
if (*err != 0) fatal("SetXY param invalid"); |
0 | 273 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
274 |
PutUtf8(SCC_SETXY); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
275 |
PutByte((byte)x); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
276 |
PutByte((byte)y); |
0 | 277 |
} |
278 |
||
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
279 |
// The plural specifier looks like |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
280 |
// {NUM} {PLURAL -1 passenger passengers} then it picks either passenger/passengers depending on the count in NUM |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
281 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
282 |
// This is encoded like |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
283 |
// CommandByte <ARG#> <NUM> {Length of each string} {each string} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
284 |
|
2087 | 285 |
bool ParseRelNum(char **buf, int *value) |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
286 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
287 |
const char* s = *buf; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
288 |
char* end; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
289 |
bool rel = false; |
2087 | 290 |
int v; |
291 |
||
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
292 |
while (*s == ' ' || *s == '\t') s++; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
293 |
if (*s == '+') { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
294 |
rel = true; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
295 |
s++; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
296 |
} |
2087 | 297 |
v = strtol(s, &end, 0); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
298 |
if (end == s) return false; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
299 |
if (rel || v < 0) { |
2087 | 300 |
*value += v; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
301 |
} else { |
2087 | 302 |
*value = v; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
303 |
} |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
304 |
*buf = end; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
305 |
return true; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
306 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
307 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
308 |
// Parse out the next word, or NULL |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
309 |
char *ParseWord(char **buf) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
310 |
{ |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
311 |
char *s = *buf, *r; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
312 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
313 |
while (*s == ' ' || *s == '\t') s++; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
314 |
if (*s == '\0') return NULL; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
315 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
316 |
if (*s == '"') { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
317 |
r = ++s; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
318 |
// parse until next " or NUL |
2952 | 319 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
320 |
if (*s == '\0') break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
321 |
if (*s == '"') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
322 |
*s++ = '\0'; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
323 |
break; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
324 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
325 |
s++; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
326 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
327 |
} else { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
328 |
// proceed until whitespace or NUL |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
329 |
r = s; |
2952 | 330 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
331 |
if (*s == '\0') break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
332 |
if (*s == ' ' || *s == '\t') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
333 |
*s++ = '\0'; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
334 |
break; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
335 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
336 |
s++; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
337 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
338 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
339 |
*buf = s; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
340 |
return r; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
341 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
342 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
343 |
// Forward declaration |
2087 | 344 |
static int TranslateArgumentIdx(int arg); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
345 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
346 |
static void EmitWordList(const char* const* words, uint nw) |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
347 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
348 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
349 |
uint j; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
350 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
351 |
PutByte(nw); |
2952 | 352 |
for (i = 0; i < nw; i++) PutByte(strlen(words[i])); |
353 |
for (i = 0; i < nw; i++) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
354 |
for (j = 0; words[i][j] != '\0'; j++) PutByte(words[i][j]); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
355 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
356 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
357 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
358 |
static void EmitPlural(char *buf, int value) |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
359 |
{ |
2087 | 360 |
int argidx = _cur_argidx; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
361 |
const char* words[5]; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
362 |
int nw = 0; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
363 |
|
2087 | 364 |
// Parse out the number, if one exists. Otherwise default to prev arg. |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
365 |
if (!ParseRelNum(&buf, &argidx)) argidx--; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
366 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
367 |
// Parse each string |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
368 |
for (nw = 0; nw < 5; nw++) { |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
369 |
words[nw] = ParseWord(&buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
370 |
if (words[nw] == NULL) break; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
371 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
372 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
373 |
if (nw == 0) |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
374 |
fatal("%s: No plural words", _cur_ident); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
375 |
|
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
376 |
if (_plural_form_counts[_lang_pluralform] != nw) { |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
377 |
if (_translated) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
378 |
fatal("%s: Invalid number of plural forms. Expecting %d, found %d.", _cur_ident, |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
379 |
_plural_form_counts[_lang_pluralform], nw); |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
380 |
} else { |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
381 |
if ((_show_todo & 2) != 0) warning("'%s' is untranslated. Tweaking english string to allow compilation for plural forms", _cur_ident); |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
382 |
if (nw > _plural_form_counts[_lang_pluralform]) { |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
383 |
nw = _plural_form_counts[_lang_pluralform]; |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
384 |
} else { |
2952 | 385 |
for (; nw < _plural_form_counts[_lang_pluralform]; nw++) { |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
386 |
words[nw] = words[nw - 1]; |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
387 |
} |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
388 |
} |
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
389 |
} |
2765
8fa792b6e525
(svn r3310) Fix a couple of warnings: Initialise all struct members, disambiguate cascaded if/else, remove an unused variable, use (void) for empty parameter lists
tron
parents:
2586
diff
changeset
|
390 |
} |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
391 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
392 |
PutUtf8(SCC_PLURAL_LIST); |
2087 | 393 |
PutByte(TranslateArgumentIdx(argidx)); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
394 |
EmitWordList(words, nw); |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
395 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
396 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
397 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
398 |
static void EmitGender(char *buf, int value) |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
399 |
{ |
2087 | 400 |
int argidx = _cur_argidx; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
401 |
uint nw; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
402 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
403 |
if (buf[0] == '=') { |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
404 |
buf++; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
405 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
406 |
// This is a {G=DER} command |
2952 | 407 |
for (nw = 0; ; nw++) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
408 |
if (nw >= 8) fatal("G argument '%s' invalid", buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
409 |
if (strcmp(buf, _genders[nw]) == 0) break; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
410 |
} |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
411 |
// now nw contains the gender index |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
412 |
PutUtf8(SCC_GENDER_INDEX); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
413 |
PutByte(nw); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
414 |
} else { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
415 |
const char* words[8]; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
416 |
|
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
417 |
// This is a {G 0 foo bar two} command. |
2087 | 418 |
// If no relative number exists, default to +0 |
419 |
if (!ParseRelNum(&buf, &argidx)) {} |
|
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
420 |
|
2952 | 421 |
for (nw = 0; nw < 8; nw++) { |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
422 |
words[nw] = ParseWord(&buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
423 |
if (words[nw] == NULL) break; |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
424 |
} |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
425 |
if (nw != _numgenders) fatal("Bad # of arguments for gender command"); |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
426 |
PutUtf8(SCC_GENDER_LIST); |
2087 | 427 |
PutByte(TranslateArgumentIdx(argidx)); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
428 |
EmitWordList(words, nw); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
429 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
430 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
431 |
|
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
432 |
|
0 | 433 |
static const CmdStruct _cmd_structs[] = { |
434 |
// Update position |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
435 |
{"SETX", EmitSetX, SCC_SETX, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
436 |
{"SETXY", EmitSetXY, SCC_SETXY, 0, 0}, |
0 | 437 |
|
438 |
// Font size |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
439 |
{"TINYFONT", EmitSingleChar, SCC_TINYFONT, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
440 |
{"BIGFONT", EmitSingleChar, SCC_BIGFONT, 0, 0}, |
0 | 441 |
|
442 |
// Colors |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
443 |
{"BLUE", EmitSingleChar, SCC_BLUE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
444 |
{"SILVER", EmitSingleChar, SCC_SILVER, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
445 |
{"GOLD", EmitSingleChar, SCC_GOLD, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
446 |
{"RED", EmitSingleChar, SCC_RED, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
447 |
{"PURPLE", EmitSingleChar, SCC_PURPLE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
448 |
{"LTBROWN", EmitSingleChar, SCC_LTBROWN, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
449 |
{"ORANGE", EmitSingleChar, SCC_ORANGE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
450 |
{"GREEN", EmitSingleChar, SCC_GREEN, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
451 |
{"YELLOW", EmitSingleChar, SCC_YELLOW, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
452 |
{"DKGREEN", EmitSingleChar, SCC_DKGREEN, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
453 |
{"CREAM", EmitSingleChar, SCC_CREAM, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
454 |
{"BROWN", EmitSingleChar, SCC_BROWN, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
455 |
{"WHITE", EmitSingleChar, SCC_WHITE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
456 |
{"LTBLUE", EmitSingleChar, SCC_LTBLUE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
457 |
{"GRAY", EmitSingleChar, SCC_GRAY, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
458 |
{"DKBLUE", EmitSingleChar, SCC_DKBLUE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
459 |
{"BLACK", EmitSingleChar, SCC_BLACK, 0, 0}, |
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
460 |
|
7005
7273ae18a911
(svn r10261) -Cleanup: we do not need CURRENCY64 and CURRCOMPACT64 anymore, because everything is already 64 bits by default.
rubidium
parents:
6643
diff
changeset
|
461 |
{"CURRCOMPACT", EmitSingleChar, SCC_CURRENCY_COMPACT, 1, 0}, // compact currency |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
462 |
{"REV", EmitSingleChar, SCC_REVISION, 0, 0}, // openttd revision string |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
463 |
{"SHORTCARGO", EmitSingleChar, SCC_CARGO_SHORT, 2, 0}, // short cargo description, only ### tons, or ### litres |
0 | 464 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
465 |
{"STRING1", EmitSingleChar, SCC_STRING1, 1, C_CASE}, // included string that consumes ONE argument |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
466 |
{"STRING2", EmitSingleChar, SCC_STRING2, 2, C_CASE}, // included string that consumes TWO arguments |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
467 |
{"STRING3", EmitSingleChar, SCC_STRING3, 3, C_CASE}, // included string that consumes THREE arguments |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
468 |
{"STRING4", EmitSingleChar, SCC_STRING4, 4, C_CASE}, // included string that consumes FOUR arguments |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
469 |
{"STRING5", EmitSingleChar, SCC_STRING5, 5, C_CASE}, // included string that consumes FIVE arguments |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
470 |
|
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
471 |
{"STATIONFEATURES", EmitSingleChar, SCC_STATION_FEATURES, 1, 0}, // station features string, icons of the features |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
472 |
{"INDUSTRY", EmitSingleChar, SCC_INDUSTRY_NAME, 1, 0}, // industry, takes an industry # |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
473 |
{"CARGO", EmitSingleChar, SCC_CARGO, 2, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
474 |
{"POWER", EmitSingleChar, SCC_POWER, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
475 |
{"VOLUME", EmitSingleChar, SCC_VOLUME, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
476 |
{"VOLUME_S", EmitSingleChar, SCC_VOLUME_SHORT, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
477 |
{"WEIGHT", EmitSingleChar, SCC_WEIGHT, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
478 |
{"WEIGHT_S", EmitSingleChar, SCC_WEIGHT_SHORT, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
479 |
{"FORCE", EmitSingleChar, SCC_FORCE, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
480 |
{"VELOCITY", EmitSingleChar, SCC_VELOCITY, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
481 |
|
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4379
diff
changeset
|
482 |
{"P", EmitPlural, 0, 0, C_DONTCOUNT}, // plural specifier |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4379
diff
changeset
|
483 |
{"G", EmitGender, 0, 0, C_DONTCOUNT}, // gender specifier |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
484 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
485 |
{"DATE_TINY", EmitSingleChar, SCC_DATE_TINY, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
486 |
{"DATE_SHORT", EmitSingleChar, SCC_DATE_SHORT, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
487 |
{"DATE_LONG", EmitSingleChar, SCC_DATE_LONG, 1, 0}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
488 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
489 |
{"SKIP", EmitSingleChar, SCC_SKIP, 1, 0}, |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
490 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
491 |
{"STRING", EmitSingleChar, SCC_STRING, 1, C_CASE}, |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
492 |
|
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
493 |
// Numbers |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
494 |
{"COMMA", EmitSingleChar, SCC_COMMA, 1, 0}, // Number with comma |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
495 |
{"NUM", EmitSingleChar, SCC_NUM, 1, 0}, // Signed number |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
496 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
497 |
{"CURRENCY", EmitSingleChar, SCC_CURRENCY, 1, 0}, |
2410
795225af3c72
(svn r2936) Move string commands to a non-printable range and remove stale comments
tron
parents:
2407
diff
changeset
|
498 |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
499 |
{"WAYPOINT", EmitSingleChar, SCC_WAYPOINT_NAME, 1, 0}, // waypoint name |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
500 |
{"STATION", EmitSingleChar, SCC_STATION_NAME, 1, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
501 |
{"TOWN", EmitSingleChar, SCC_TOWN_NAME, 1, 0}, |
6643
f81bee57bc09
(svn r9874) -Feature: advanced vehicle lists a.k.a. group interface. Now you can make groups of vehicles and perform all kinds of tasks on that given group. Original code by nycom and graphics by skidd13.
rubidium
parents:
6491
diff
changeset
|
502 |
{"GROUP", EmitSingleChar, SCC_GROUP_NAME, 1, 0}, |
7056
6daddeaa79df
(svn r10321) -Codechange: refer to sign text by index
peter1138
parents:
7049
diff
changeset
|
503 |
{"SIGN", EmitSingleChar, SCC_SIGN_NAME, 1, 0}, |
7059
c6d12e3de0dc
(svn r10324) -Codechange: reference engine names by index
peter1138
parents:
7058
diff
changeset
|
504 |
{"ENGINE", EmitSingleChar, SCC_ENGINE_NAME, 1, 0}, |
7049
0ebe47348074
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7025
diff
changeset
|
505 |
{"VEHICLE", EmitSingleChar, SCC_VEHICLE_NAME, 1, 0}, |
7058
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
506 |
{"COMPANY", EmitSingleChar, SCC_COMPANY_NAME, 1, 0}, |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
507 |
{"COMPANYNUM", EmitSingleChar, SCC_COMPANY_NUM, 1, 0}, |
8105bb13ce3d
(svn r10323) -Codechange: reference company name, number and player (president) name
peter1138
parents:
7056
diff
changeset
|
508 |
{"PLAYERNAME", EmitSingleChar, SCC_PLAYER_NAME, 1, 0}, |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
509 |
|
2087 | 510 |
// 0x9D is used for the pseudo command SETCASE |
511 |
// 0x9E is used for case switching |
|
512 |
||
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
513 |
{"", EmitSingleChar, '\n', 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
514 |
{"{", EmitSingleChar, '{', 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
515 |
{"UPARROW", EmitSingleChar, SCC_UPARROW, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
516 |
{"SMALLUPARROW", EmitSingleChar, SCC_SMALLUPARROW, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
517 |
{"SMALLDOWNARROW", EmitSingleChar, SCC_SMALLDOWNARROW, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
518 |
{"TRAIN", EmitSingleChar, SCC_TRAIN, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
519 |
{"LORRY", EmitSingleChar, SCC_LORRY, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
520 |
{"BUS", EmitSingleChar, SCC_BUS, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
521 |
{"PLANE", EmitSingleChar, SCC_PLANE, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
522 |
{"SHIP", EmitSingleChar, SCC_SHIP, 0, 0}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
523 |
{"NBSP", EmitSingleChar, 0xA0, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
524 |
{"CENT", EmitSingleChar, 0xA2, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
525 |
{"POUNDSIGN", EmitSingleChar, 0xA3, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
526 |
{"EURO", EmitSingleChar, 0x20AC, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
527 |
{"YENSIGN", EmitSingleChar, 0xA5, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
528 |
{"COPYRIGHT", EmitSingleChar, 0xA9, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
529 |
{"DOWNARROW", EmitSingleChar, SCC_DOWNARROW, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
530 |
{"CHECKMARK", EmitSingleChar, SCC_CHECKMARK, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
531 |
{"CROSS", EmitSingleChar, SCC_CROSS, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
532 |
{"REGISTERED", EmitSingleChar, 0xAE, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
533 |
{"RIGHTARROW", EmitSingleChar, SCC_RIGHTARROW, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
534 |
{"SMALLLEFTARROW", EmitSingleChar, SCC_LESSTHAN, 0, C_DONTCOUNT}, |
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
535 |
{"SMALLRIGHTARROW",EmitSingleChar, SCC_GREATERTHAN, 0, C_DONTCOUNT}, |
0 | 536 |
}; |
537 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
538 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
539 |
static const CmdStruct *FindCmd(const char *s, int len) |
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
540 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
541 |
const CmdStruct* cs; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
542 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
543 |
for (cs = _cmd_structs; cs != endof(_cmd_structs); cs++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
544 |
if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs; |
0 | 545 |
} |
546 |
return NULL; |
|
547 |
} |
|
548 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
549 |
static uint ResolveCaseName(const char *str, uint len) |
2087 | 550 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
551 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
552 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
553 |
for (i = 0; i < MAX_NUM_CASES; i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
554 |
if (memcmp(_cases[i], str, len) == 0 && _cases[i][len] == 0) return i + 1; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
555 |
} |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
556 |
fatal("Invalid case-name '%s'", str); |
2087 | 557 |
} |
558 |
||
0 | 559 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
560 |
// returns NULL on eof |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
561 |
// else returns command struct |
2087 | 562 |
static const CmdStruct *ParseCommandString(const char **str, char *param, int *argno, int *casei) |
0 | 563 |
{ |
2087 | 564 |
const char *s = *str, *start; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
565 |
const CmdStruct *cmd; |
2060
9f3855e81f4b
(svn r2569) Get rid of some dubious casts and thus warnings on 64bit machines
tron
parents:
2059
diff
changeset
|
566 |
byte c; |
0 | 567 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
568 |
*argno = -1; |
2087 | 569 |
*casei = -1; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
570 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
571 |
// Scan to the next command, exit if there's no next command. |
2952 | 572 |
for (; *s != '{'; s++) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
573 |
if (*s == '\0') return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
574 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
575 |
s++; // Skip past the { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
576 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
577 |
if (*s >= '0' && *s <= '9') { |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
578 |
char *end; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
579 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
580 |
*argno = strtoul(s, &end, 0); |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
581 |
if (*end != ':') fatal("missing arg #"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
582 |
s = end + 1; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
583 |
} |
0 | 584 |
|
585 |
// parse command name |
|
586 |
start = s; |
|
2087 | 587 |
do { |
0 | 588 |
c = *s++; |
2087 | 589 |
} while (c != '}' && c != ' ' && c != '=' && c != '.' && c != 0); |
0 | 590 |
|
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
591 |
cmd = FindCmd(start, s - start - 1); |
0 | 592 |
if (cmd == NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
593 |
error("Undefined command '%.*s'", s - start - 1, start); |
0 | 594 |
return NULL; |
595 |
} |
|
596 |
||
2087 | 597 |
if (c == '.') { |
598 |
const char *casep = s; |
|
599 |
||
600 |
if (!(cmd->flags & C_CASE)) |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
601 |
fatal("Command '%s' can't have a case", cmd->cmd); |
2087 | 602 |
|
603 |
do c = *s++; while (c != '}' && c != ' ' && c != '\0'); |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
604 |
*casei = ResolveCaseName(casep, s - casep - 1); |
2087 | 605 |
} |
606 |
||
607 |
if (c == '\0') { |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
608 |
error("Missing } from command '%s'", start); |
2087 | 609 |
return NULL; |
610 |
} |
|
611 |
||
612 |
||
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
613 |
if (c != '}') { |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
614 |
if (c == '=') s--; |
0 | 615 |
// copy params |
616 |
start = s; |
|
2952 | 617 |
for (;;) { |
0 | 618 |
c = *s++; |
619 |
if (c == '}') break; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
620 |
if (c == '\0') { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
621 |
error("Missing } from command '%s'", start); |
0 | 622 |
return NULL; |
623 |
} |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
624 |
if (s - start == 250) fatal("param command too long"); |
0 | 625 |
*param++ = c; |
626 |
} |
|
627 |
} |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
628 |
*param = '\0'; |
0 | 629 |
|
630 |
*str = s; |
|
631 |
||
632 |
return cmd; |
|
633 |
} |
|
634 |
||
635 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
636 |
static void HandlePragma(char *str) |
0 | 637 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
638 |
if (!memcmp(str, "id ", 3)) { |
0 | 639 |
_next_string_id = strtoul(str + 3, NULL, 0); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
640 |
} else if (!memcmp(str, "name ", 5)) { |
0 | 641 |
ttd_strlcpy(_lang_name, str + 5, sizeof(_lang_name)); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
642 |
} else if (!memcmp(str, "ownname ", 8)) { |
0 | 643 |
ttd_strlcpy(_lang_ownname, str + 8, sizeof(_lang_ownname)); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
644 |
} else if (!memcmp(str, "isocode ", 8)) { |
1376
d4e1dd8eb7e5
(svn r1880) [Codechange] Added isocodes to langfiles and support code to strgen (Lauri Nurmi)
miham
parents:
1097
diff
changeset
|
645 |
ttd_strlcpy(_lang_isocode, str + 8, sizeof(_lang_isocode)); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
646 |
} else if (!memcmp(str, "plural ", 7)) { |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
647 |
_lang_pluralform = atoi(str + 7); |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
648 |
if (_lang_pluralform >= lengthof(_plural_form_counts)) |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
649 |
fatal("Invalid pluralform %d", _lang_pluralform); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
650 |
} else if (!memcmp(str, "gender ", 7)) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
651 |
char* buf = str + 7; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
652 |
|
2952 | 653 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
654 |
const char* s = ParseWord(&buf); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
655 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
656 |
if (s == NULL) break; |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
657 |
if (_numgenders >= MAX_NUM_GENDER) fatal("Too many genders, max %d", MAX_NUM_GENDER); |
2087 | 658 |
ttd_strlcpy(_genders[_numgenders], s, sizeof(_genders[_numgenders])); |
2084
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
659 |
_numgenders++; |
65639f898a50
(svn r2594) Fix: [strgen] Misc updates to the string system.
ludde
parents:
2082
diff
changeset
|
660 |
} |
2087 | 661 |
} else if (!memcmp(str, "case ", 5)) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
662 |
char* buf = str + 5; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
663 |
|
2952 | 664 |
for (;;) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
665 |
const char* s = ParseWord(&buf); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
666 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
667 |
if (s == NULL) break; |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
668 |
if (_numcases >= MAX_NUM_CASES) fatal("Too many cases, max %d", MAX_NUM_CASES); |
2087 | 669 |
ttd_strlcpy(_cases[_numcases], s, sizeof(_cases[_numcases])); |
670 |
_numcases++; |
|
671 |
} |
|
0 | 672 |
} else { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
673 |
fatal("unknown pragma '%s'", str); |
0 | 674 |
} |
675 |
} |
|
676 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
677 |
static void ExtractCommandString(ParsedCommandStruct* p, const char* s, bool warnings) |
0 | 678 |
{ |
679 |
char param[100]; |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
680 |
int argno; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
681 |
int argidx = 0; |
2087 | 682 |
int casei; |
0 | 683 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
684 |
memset(p, 0, sizeof(*p)); |
0 | 685 |
|
2952 | 686 |
for (;;) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
687 |
// read until next command from a. |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
688 |
const CmdStruct* ar = ParseCommandString(&s, param, &argno, &casei); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
689 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
690 |
if (ar == NULL) break; |
0 | 691 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
692 |
// Sanity checking |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
693 |
if (argno != -1 && ar->consumes == 0) fatal("Non consumer param can't have a paramindex"); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
694 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
695 |
if (ar->consumes) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
696 |
if (argno != -1) argidx = argno; |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
697 |
if (argidx < 0 || argidx >= lengthof(p->cmd)) fatal("invalid param idx %d", argidx); |
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
698 |
if (p->cmd[argidx] != NULL && p->cmd[argidx] != ar) fatal("duplicate param idx %d", argidx); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
699 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
700 |
p->cmd[argidx++] = ar; |
2087 | 701 |
} else if (!(ar->flags & C_DONTCOUNT)) { // Ignore some of them |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
702 |
if (p->np >= lengthof(p->pairs)) fatal("too many commands in string, max %d", lengthof(p->pairs)); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
703 |
p->pairs[p->np].a = ar; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
704 |
p->pairs[p->np].v = param[0] != '\0' ? strdup(param) : ""; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
705 |
p->np++; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
706 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
707 |
} |
0 | 708 |
} |
709 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
710 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
711 |
static const CmdStruct *TranslateCmdForCompare(const CmdStruct *a) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
712 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
713 |
if (a == NULL) return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
714 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
715 |
if (strcmp(a->cmd, "STRING1") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
716 |
strcmp(a->cmd, "STRING2") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
717 |
strcmp(a->cmd, "STRING3") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
718 |
strcmp(a->cmd, "STRING4") == 0 || |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
719 |
strcmp(a->cmd, "STRING5") == 0) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
720 |
return FindCmd("STRING", 6); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
721 |
} |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
722 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
723 |
if (strcmp(a->cmd, "SKIP") == 0) return NULL; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
724 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
725 |
return a; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
726 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
727 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
728 |
|
2069
30294fb11fc1
(svn r2579) Change some strgen errors into warnings to prevent build from stopping.
ludde
parents:
2063
diff
changeset
|
729 |
static bool CheckCommandsMatch(char *a, char *b, const char *name) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
730 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
731 |
ParsedCommandStruct templ; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
732 |
ParsedCommandStruct lang; |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6248
diff
changeset
|
733 |
int i, j; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
734 |
bool result = true; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
735 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
736 |
ExtractCommandString(&templ, b, true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
737 |
ExtractCommandString(&lang, a, true); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
738 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
739 |
// For each string in templ, see if we find it in lang |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
740 |
if (templ.np != lang.np) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
741 |
warning("%s: template string and language string have a different # of commands", name); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
742 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
743 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
744 |
|
2952 | 745 |
for (i = 0; i < templ.np; i++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
746 |
// see if we find it in lang, and zero it out |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
747 |
bool found = false; |
2952 | 748 |
for (j = 0; j < lang.np; j++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
749 |
if (templ.pairs[i].a == lang.pairs[j].a && |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
750 |
strcmp(templ.pairs[i].v, lang.pairs[j].v) == 0) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
751 |
// it was found in both. zero it out from lang so we don't find it again |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
752 |
lang.pairs[j].a = NULL; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
753 |
found = true; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
754 |
break; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
755 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
756 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
757 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
758 |
if (!found) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
759 |
warning("%s: command '%s' exists in template file but not in language file", name, templ.pairs[i].a->cmd); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
760 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
761 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
762 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
763 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
764 |
// if we reach here, all non consumer commands match up. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
765 |
// Check if the non consumer commands match up also. |
2952 | 766 |
for (i = 0; i < lengthof(templ.cmd); i++) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
767 |
if (TranslateCmdForCompare(templ.cmd[i]) != TranslateCmdForCompare(lang.cmd[i])) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
768 |
warning("%s: Param idx #%d '%s' doesn't match with template command '%s'", name, i, |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
769 |
lang.cmd[i] == NULL ? "<empty>" : lang.cmd[i]->cmd, |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
770 |
templ.cmd[i] == NULL ? "<empty>" : templ.cmd[i]->cmd); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
771 |
result = false; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
772 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
773 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
774 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
775 |
return result; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
776 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
777 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
778 |
static void HandleString(char *str, bool master) |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
779 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
780 |
char *s,*t; |
2087 | 781 |
LangString *ent; |
782 |
char *casep; |
|
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
783 |
|
0 | 784 |
if (*str == '#') { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
785 |
if (str[1] == '#' && str[2] != '#') HandlePragma(str + 2); |
0 | 786 |
return; |
787 |
} |
|
788 |
||
789 |
// Ignore comments & blank lines |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
790 |
if (*str == ';' || *str == ' ' || *str == '\0') return; |
0 | 791 |
|
792 |
s = strchr(str, ':'); |
|
793 |
if (s == NULL) { |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
794 |
error("Line has no ':' delimiter"); |
0 | 795 |
return; |
796 |
} |
|
797 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
798 |
// Trim spaces. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
799 |
// After this str points to the command name, and s points to the command contents |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
800 |
for (t = s; t > str && (t[-1] == ' ' || t[-1] == '\t'); t--); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
801 |
*t = 0; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
802 |
s++; |
0 | 803 |
|
5111
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
804 |
/* Check string is valid UTF-8 */ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
805 |
{ |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
806 |
const char *tmp; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
807 |
for (tmp = s; *tmp != '\0';) { |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
808 |
size_t len = Utf8Validate(tmp); |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
809 |
if (len == 0) fatal("Invalid UTF-8 sequence in '%s'", s); |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
810 |
tmp += len; |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
811 |
} |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
812 |
} |
ee7472776a4d
(svn r7185) -Codechange: Make strgen validate strings for UTF-8 well-formed-ness-ness
peter1138
parents:
5108
diff
changeset
|
813 |
|
2087 | 814 |
// Check if the string has a case.. |
815 |
// The syntax for cases is IDENTNAME.case |
|
816 |
casep = strchr(str, '.'); |
|
817 |
if (casep) *casep++ = 0; |
|
818 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
819 |
// Check if this string already exists.. |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
820 |
ent = HashFind(str); |
0 | 821 |
|
822 |
if (master) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
823 |
if (ent != NULL && casep == NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
824 |
error("String name '%s' is used multiple times", str); |
0 | 825 |
return; |
826 |
} |
|
827 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
828 |
if (ent == NULL && casep != NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
829 |
error("Base string name '%s' doesn't exist yet. Define it before defining a case.", str); |
0 | 830 |
return; |
831 |
} |
|
832 |
||
2087 | 833 |
if (ent == NULL) { |
834 |
if (_strings[_next_string_id]) { |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
835 |
error("String ID 0x%X for '%s' already in use by '%s'", ent, str, _strings[_next_string_id]->name); |
2087 | 836 |
return; |
837 |
} |
|
838 |
||
839 |
// Allocate a new LangString |
|
5609
dc6a58930ba4
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5587
diff
changeset
|
840 |
ent = CallocT<LangString>(1); |
2087 | 841 |
_strings[_next_string_id] = ent; |
842 |
ent->index = _next_string_id++; |
|
843 |
ent->name = strdup(str); |
|
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
844 |
ent->line = _cur_line; |
2087 | 845 |
|
846 |
HashAdd(str, ent); |
|
847 |
} |
|
848 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
849 |
if (casep != NULL) { |
5609
dc6a58930ba4
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5587
diff
changeset
|
850 |
Case* c = MallocT<Case>(1); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
851 |
|
2087 | 852 |
c->caseidx = ResolveCaseName(casep, strlen(casep)); |
853 |
c->string = strdup(s); |
|
854 |
c->next = ent->english_case; |
|
855 |
ent->english_case = c; |
|
856 |
} else { |
|
857 |
ent->english = strdup(s); |
|
858 |
} |
|
859 |
||
0 | 860 |
} else { |
2087 | 861 |
if (ent == NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
862 |
warning("String name '%s' does not exist in master file", str); |
0 | 863 |
return; |
864 |
} |
|
865 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
866 |
if (ent->translated && casep == NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
867 |
error("String name '%s' is used multiple times", str); |
0 | 868 |
return; |
869 |
} |
|
870 |
||
2087 | 871 |
if (s[0] == ':' && s[1] == '\0' && casep == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
872 |
// Special syntax :: means we should just inherit the master string |
2087 | 873 |
ent->translated = strdup(ent->english); |
0 | 874 |
} else { |
2087 | 875 |
// make sure that the commands match |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
876 |
if (!CheckCommandsMatch(s, ent->english, str)) return; |
2087 | 877 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
878 |
if (casep != NULL) { |
5609
dc6a58930ba4
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5587
diff
changeset
|
879 |
Case* c = MallocT<Case>(1); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
880 |
|
2087 | 881 |
c->caseidx = ResolveCaseName(casep, strlen(casep)); |
882 |
c->string = strdup(s); |
|
883 |
c->next = ent->translated_case; |
|
884 |
ent->translated_case = c; |
|
885 |
} else { |
|
886 |
ent->translated = strdup(s); |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
887 |
} |
0 | 888 |
} |
889 |
} |
|
890 |
} |
|
891 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
892 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
893 |
static void rstrip(char *buf) |
0 | 894 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
895 |
int i = strlen(buf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
896 |
while (i > 0 && (buf[i - 1] == '\r' || buf[i - 1] == '\n' || buf[i - 1] == ' ')) i--; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
897 |
buf[i] = '\0'; |
0 | 898 |
} |
899 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
900 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
901 |
static void ParseFile(const char *file, bool english) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
902 |
{ |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
903 |
FILE *in; |
0 | 904 |
char buf[2048]; |
905 |
||
2459
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
906 |
_file = file; |
a2f63b331830
(svn r2985) Print warnings and errors in the canonical file:line: form to make life for IDEs easier (ln-)
tron
parents:
2418
diff
changeset
|
907 |
|
5725
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
908 |
/* For each new file we parse, reset the genders, and language codes */ |
2087 | 909 |
_numgenders = 0; |
5725
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
910 |
_lang_name[0] = _lang_ownname[0] = _lang_isocode[0] = '\0'; |
2087 | 911 |
// TODO:!! We can't reset the cases. In case the translated strings |
912 |
// derive some strings from english.... |
|
913 |
||
0 | 914 |
in = fopen(file, "r"); |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
915 |
if (in == NULL) fatal("Cannot open file"); |
0 | 916 |
_cur_line = 1; |
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6248
diff
changeset
|
917 |
while (fgets(buf, sizeof(buf), in) != NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
918 |
rstrip(buf); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
919 |
HandleString(buf, english); |
0 | 920 |
_cur_line++; |
921 |
} |
|
922 |
fclose(in); |
|
5725
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
923 |
|
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
924 |
if (StrEmpty(_lang_name) || StrEmpty(_lang_ownname) || StrEmpty(_lang_isocode)) { |
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
925 |
fatal("Language must include ##name, ##ownname and ##isocode"); |
0ec667093bc1
(svn r8253) -Codechange: Be more strict about language generation and fail any languages not having the mandatory ##name, ##ownname and ##isocode pragma's.
Darkvater
parents:
5609
diff
changeset
|
926 |
} |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
927 |
} |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
928 |
|
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
929 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
930 |
static uint32 MyHashStr(uint32 hash, const char *s) |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
931 |
{ |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
932 |
for (; *s != '\0'; s++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
933 |
hash = ROL(hash, 3) ^ *s; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
934 |
hash = (hash & 1 ? hash >> 1 ^ 0xDEADBEEF : hash >> 1); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
935 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
936 |
return hash; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
937 |
} |
0 | 938 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
939 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
940 |
// make a hash of the file to get a unique "version number" |
6247 | 941 |
static void MakeHashOfStrings() |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
942 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
943 |
uint32 hash = 0; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
944 |
uint i; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
945 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
946 |
for (i = 0; i != lengthof(_strings); i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
947 |
const LangString* ls = _strings[i]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
948 |
|
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
949 |
if (ls != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
950 |
const CmdStruct* cs; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
951 |
const char* s; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
952 |
char buf[256]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
953 |
int argno; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
954 |
int casei; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
955 |
|
2087 | 956 |
s = ls->name; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
957 |
hash ^= i * 0x717239; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
958 |
hash = (hash & 1 ? hash >> 1 ^ 0xDEADBEEF : hash >> 1); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
959 |
hash = MyHashStr(hash, s + 1); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
960 |
|
2087 | 961 |
s = ls->english; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
962 |
while ((cs = ParseCommandString(&s, buf, &argno, &casei)) != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
963 |
if (cs->flags & C_DONTCOUNT) continue; |
2087 | 964 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
965 |
hash ^= (cs - _cmd_structs) * 0x1234567; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
3900
diff
changeset
|
966 |
hash = (hash & 1 ? hash >> 1 ^ 0xF00BAA4 : hash >> 1); |
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
967 |
} |
0 | 968 |
} |
969 |
} |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
970 |
_hash = hash; |
0 | 971 |
} |
972 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
973 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
974 |
static uint CountInUse(uint grp) |
2059
6446d0b23ddc
(svn r2568) Small cleanup in strgen: static, bracing, ...
tron
parents:
2057
diff
changeset
|
975 |
{ |
0 | 976 |
int i; |
977 |
||
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
978 |
for (i = 0x800; --i >= 0;) if (_strings[(grp << 11) + i] != NULL) break; |
0 | 979 |
return i + 1; |
980 |
} |
|
981 |
||
982 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
983 |
bool CompareFiles(const char *n1, const char *n2) |
0 | 984 |
{ |
985 |
FILE *f1, *f2; |
|
986 |
char b1[4096]; |
|
987 |
char b2[4096]; |
|
988 |
size_t l1, l2; |
|
989 |
||
990 |
f2 = fopen(n2, "rb"); |
|
991 |
if (f2 == NULL) return false; |
|
992 |
||
993 |
f1 = fopen(n1, "rb"); |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
994 |
if (f1 == NULL) fatal("can't open %s", n1); |
0 | 995 |
|
996 |
do { |
|
997 |
l1 = fread(b1, 1, sizeof(b1), f1); |
|
998 |
l2 = fread(b2, 1, sizeof(b2), f2); |
|
999 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1000 |
if (l1 != l2 || memcmp(b1, b2, l1)) { |
0 | 1001 |
fclose(f2); |
1002 |
fclose(f1); |
|
1003 |
return false; |
|
1004 |
} |
|
1005 |
} while (l1); |
|
1006 |
||
1007 |
fclose(f2); |
|
1008 |
fclose(f1); |
|
1009 |
return true; |
|
1010 |
} |
|
1011 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1012 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1013 |
static void WriteStringsH(const char *filename) |
0 | 1014 |
{ |
1015 |
FILE *out; |
|
1016 |
int i; |
|
1017 |
int next = -1; |
|
1018 |
||
1019 |
out = fopen("tmp.xxx", "w"); |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1020 |
if (out == NULL) fatal("can't open tmp.xxx"); |
0 | 1021 |
|
7393
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1022 |
fprintf(out, "/* This file is automatically generated. Do not modify */\n\n"); |
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1023 |
fprintf(out, "#ifndef TABLE_STRINGS_H\n"); |
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1024 |
fprintf(out, "#define TABLE_STRINGS_H\n"); |
0 | 1025 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1026 |
for (i = 0; i != lengthof(_strings); i++) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1027 |
if (_strings[i] != NULL) { |
7393
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1028 |
if (next != i) fprintf(out, "\n"); |
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1029 |
fprintf(out, "static const StringID %s = 0x%X;\n", _strings[i]->name, i); |
0 | 1030 |
next = i + 1; |
1031 |
} |
|
1032 |
} |
|
1033 |
||
7755
7038d5001e0a
(svn r11293) -Fix: newgrf defined industry news messages use TTD format for args, which is not the same as our. So we must detect those strings and pass them the right params
glx
parents:
7393
diff
changeset
|
1034 |
fprintf(out, "\nstatic const StringID STR_LAST_STRINGID = 0x%X;\n", next - 1); |
7038d5001e0a
(svn r11293) -Fix: newgrf defined industry news messages use TTD format for args, which is not the same as our. So we must detect those strings and pass them the right params
glx
parents:
7393
diff
changeset
|
1035 |
|
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1036 |
fprintf(out, |
0 | 1037 |
"\nenum {\n" |
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
1038 |
"\tLANGUAGE_PACK_IDENT = 0x474E414C, // Big Endian value for 'LANG' (LE is 0x 4C 41 4E 47)\n" |
0 | 1039 |
"\tLANGUAGE_PACK_VERSION = 0x%X,\n" |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1040 |
"};\n", (uint)_hash |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1041 |
); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1042 |
|
7393
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1043 |
fprintf(out, "\n#endif /* TABLE_STRINGS_H */\n"); |
f3d27c82fec3
(svn r10762) -Codechange: Change enum StringIDEnum { to static const StringID = for
peter1138
parents:
7110
diff
changeset
|
1044 |
|
0 | 1045 |
fclose(out); |
1046 |
||
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1047 |
if (CompareFiles("tmp.xxx", filename)) { |
0 | 1048 |
// files are equal. tmp.xxx is not needed |
1049 |
unlink("tmp.xxx"); |
|
1050 |
} else { |
|
1051 |
// else rename tmp.xxx into filename |
|
2482
374f6395847d
(svn r3008) [ 1247535 ] Native Support for Win64 (compile&run only) (michi_cc)
Darkvater
parents:
2459
diff
changeset
|
1052 |
#if defined(WIN32) || defined(WIN64) |
0 | 1053 |
unlink(filename); |
1054 |
#endif |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1055 |
if (rename("tmp.xxx", filename) == -1) fatal("rename() failed"); |
0 | 1056 |
} |
1057 |
} |
|
1058 |
||
2087 | 1059 |
static int TranslateArgumentIdx(int argidx) |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1060 |
{ |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1061 |
int i, sum; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1062 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1063 |
if (argidx < 0 || argidx >= lengthof(_cur_pcs.cmd)) |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1064 |
fatal("invalid argidx %d", argidx); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1065 |
|
2952 | 1066 |
for (i = sum = 0; i < argidx; i++) { |
2374
e4443eab6293
(svn r2900) Fix a bug, which incremented the counter of a loop twice and therefore calculated wrong argument indices
tron
parents:
2353
diff
changeset
|
1067 |
const CmdStruct *cs = _cur_pcs.cmd[i]; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1068 |
sum += (cs != NULL) ? cs->consumes : 1; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1069 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1070 |
|
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1071 |
return sum; |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1072 |
} |
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1073 |
|
6247 | 1074 |
static void PutArgidxCommand() |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1075 |
{ |
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
1076 |
PutUtf8(SCC_ARG_INDEX); |
2087 | 1077 |
PutByte(TranslateArgumentIdx(_cur_argidx)); |
1078 |
} |
|
1079 |
||
1080 |
||
1081 |
static void PutCommandString(const char *str) |
|
1082 |
{ |
|
1083 |
const CmdStruct *cs; |
|
1084 |
char param[256]; |
|
1085 |
int argno; |
|
1086 |
int casei; |
|
1087 |
||
1088 |
_cur_argidx = 0; |
|
1089 |
||
1090 |
while (*str != '\0') { |
|
1091 |
// Process characters as they are until we encounter a { |
|
1092 |
if (*str != '{') { |
|
1093 |
PutByte(*str++); |
|
1094 |
continue; |
|
1095 |
} |
|
1096 |
cs = ParseCommandString(&str, param, &argno, &casei); |
|
1097 |
if (cs == NULL) break; |
|
1098 |
||
1099 |
if (casei != -1) { |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
1100 |
PutUtf8(SCC_SETCASE); // {SETCASE} |
2087 | 1101 |
PutByte(casei); |
1102 |
} |
|
1103 |
||
1104 |
// For params that consume values, we need to handle the argindex properly |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1105 |
if (cs->consumes > 0) { |
2087 | 1106 |
// Check if we need to output a move-param command |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1107 |
if (argno != -1 && argno != _cur_argidx) { |
2087 | 1108 |
_cur_argidx = argno; |
1109 |
PutArgidxCommand(); |
|
1110 |
} |
|
1111 |
||
1112 |
// Output the one from the master string... it's always accurate. |
|
1113 |
cs = _cur_pcs.cmd[_cur_argidx++]; |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1114 |
if (cs == NULL) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1115 |
fatal("%s: No argument exists at position %d", _cur_ident, _cur_argidx - 1); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1116 |
} |
2087 | 1117 |
} |
1118 |
||
1119 |
cs->proc(param, cs->value); |
|
1120 |
} |
|
1121 |
} |
|
1122 |
||
1123 |
static void WriteLength(FILE *f, uint length) |
|
1124 |
{ |
|
1125 |
if (length < 0xC0) { |
|
1126 |
fputc(length, f); |
|
1127 |
} else if (length < 0x4000) { |
|
1128 |
fputc((length >> 8) | 0xC0, f); |
|
1129 |
fputc(length & 0xFF, f); |
|
1130 |
} else { |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1131 |
fatal("string too long"); |
2087 | 1132 |
} |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1133 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1134 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1135 |
|
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1136 |
static void WriteLangfile(const char *filename) |
0 | 1137 |
{ |
1138 |
FILE *f; |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1139 |
uint in_use[32]; |
0 | 1140 |
LanguagePackHeader hdr; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1141 |
uint i; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1142 |
uint j; |
0 | 1143 |
|
1144 |
f = fopen(filename, "wb"); |
|
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1145 |
if (f == NULL) fatal("can't open %s", filename); |
0 | 1146 |
|
1147 |
memset(&hdr, 0, sizeof(hdr)); |
|
2952 | 1148 |
for (i = 0; i != 32; i++) { |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1149 |
uint n = CountInUse(i); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1150 |
|
0 | 1151 |
in_use[i] = n; |
1152 |
hdr.offsets[i] = TO_LE16(n); |
|
1153 |
} |
|
1154 |
||
222
b88456001397
(svn r223) -Fix: Const correctness and miscellaneous fixes. Thank you Tron for your diligent fixing of warnings (and some possibly bugs) (Tron)
darkvater
parents:
181
diff
changeset
|
1155 |
// see line 655: fprintf(..."\tLANGUAGE_PACK_IDENT = 0x474E414C,...) |
181
0b95567f2d0f
(svn r182) -Fix: [1024380] strgen diff (Warning fix + MorphOS fix). Removes the longest standing warning on compilation of strgen (tokai)
darkvater
parents:
0
diff
changeset
|
1156 |
hdr.ident = TO_LE32(0x474E414C); // Big Endian value for 'LANG' |
0 | 1157 |
hdr.version = TO_LE32(_hash); |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1158 |
hdr.plural_form = _lang_pluralform; |
0 | 1159 |
strcpy(hdr.name, _lang_name); |
1160 |
strcpy(hdr.own_name, _lang_ownname); |
|
1376
d4e1dd8eb7e5
(svn r1880) [Codechange] Added isocodes to langfiles and support code to strgen (Lauri Nurmi)
miham
parents:
1097
diff
changeset
|
1161 |
strcpy(hdr.isocode, _lang_isocode); |
0 | 1162 |
|
1163 |
fwrite(&hdr, sizeof(hdr), 1, f); |
|
1164 |
||
2952 | 1165 |
for (i = 0; i != 32; i++) { |
1166 |
for (j = 0; j != in_use[i]; j++) { |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1167 |
const LangString* ls = _strings[(i << 11) + j]; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1168 |
const Case* casep; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1169 |
const char* cmdp; |
0 | 1170 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1171 |
// For undefined strings, just set that it's an empty string |
2087 | 1172 |
if (ls == NULL) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1173 |
WriteLength(f, 0); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1174 |
continue; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1175 |
} |
0 | 1176 |
|
2087 | 1177 |
_cur_ident = ls->name; |
2566
75ae28a03460
(svn r3103) - Fix: [ 1339000 ] Fix: strgen and plural forms fatal error for untranslated strings. (glx). Also output the correct lines for these warnings, for missing strings the lines correspond with the ones in english.txt
Darkvater
parents:
2482
diff
changeset
|
1178 |
_cur_line = ls->line; |
2082
1e289843fe0b
(svn r2592) Feature: [strgen] New way to specify plural forms.
ludde
parents:
2069
diff
changeset
|
1179 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1180 |
// Produce a message if a string doesn't have a translation. |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1181 |
if (_show_todo > 0 && ls->translated == NULL) { |
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1182 |
if ((_show_todo & 2) != 0) { |
4922
dec2c076d5a7
(svn r6898) -Fix: lowercase Error/Warning/Fatal for strgen and remove static on error() so strgen
Darkvater
parents:
4464
diff
changeset
|
1183 |
warning("'%s' is untranslated", ls->name); |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1184 |
} |
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1185 |
if ((_show_todo & 1) != 0) { |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1186 |
const char *s = "<TODO> "; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1187 |
while (*s != '\0') PutByte(*s++); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1188 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1189 |
} |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1190 |
|
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1191 |
// Extract the strings and stuff from the english command string |
2087 | 1192 |
ExtractCommandString(&_cur_pcs, ls->english, false); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1193 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1194 |
if (ls->translated_case != NULL || ls->translated != NULL) { |
2087 | 1195 |
casep = ls->translated_case; |
1196 |
cmdp = ls->translated; |
|
1197 |
} else { |
|
1198 |
casep = ls->english_case; |
|
1199 |
cmdp = ls->english; |
|
1200 |
} |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1201 |
|
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1202 |
_translated = _masterlang || (cmdp != ls->english); |
2585
fa2f94aa9de2
(svn r3122) - Fix (regression): recent change to strgen which 'fixed' all strings with wrong plural forms. Thanks for glx for pointing this out (after I changed his original patch which was correct..whohoo braindeadness; here I come)
Darkvater
parents:
2566
diff
changeset
|
1203 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1204 |
if (casep != NULL) { |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1205 |
const Case* c; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1206 |
uint num; |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1207 |
|
2087 | 1208 |
// Need to output a case-switch. |
1209 |
// It has this format |
|
1210 |
// <0x9E> <NUM CASES> <CASE1> <LEN1> <STRING1> <CASE2> <LEN2> <STRING2> <CASE3> <LEN3> <STRING3> <STRINGDEFAULT> |
|
1211 |
// Each LEN is printed using 2 bytes in big endian order. |
|
5108
aeaef6fe53b7
(svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents:
4922
diff
changeset
|
1212 |
PutUtf8(SCC_SWITCH_CASE); |
2087 | 1213 |
// Count the number of cases |
2952 | 1214 |
for (num = 0, c = casep; c; c = c->next) num++; |
2087 | 1215 |
PutByte(num); |
1216 |
||
1217 |
// Write each case |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1218 |
for (c = casep; c != NULL; c = c->next) { |
2087 | 1219 |
int pos; |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1220 |
|
2087 | 1221 |
PutByte(c->caseidx); |
1222 |
// Make some space for the 16-bit length |
|
1223 |
pos = _put_pos; |
|
1224 |
PutByte(0); |
|
1225 |
PutByte(0); |
|
1226 |
// Write string |
|
1227 |
PutCommandString(c->string); |
|
1228 |
PutByte(0); // terminate with a zero |
|
1229 |
// Fill in the length |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1230 |
_put_buf[pos + 0] = GB(_put_pos - (pos + 2), 8, 8); |
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1231 |
_put_buf[pos + 1] = GB(_put_pos - (pos + 2), 0, 8); |
0 | 1232 |
} |
2087 | 1233 |
} |
0 | 1234 |
|
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1235 |
if (cmdp != NULL) PutCommandString(cmdp); |
0 | 1236 |
|
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1237 |
WriteLength(f, _put_pos); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1238 |
fwrite(_put_buf, 1, _put_pos, f); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1239 |
_put_pos = 0; |
0 | 1240 |
} |
1241 |
} |
|
1242 |
||
1243 |
fputc(0, f); |
|
1244 |
fclose(f); |
|
1245 |
} |
|
1246 |
||
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1247 |
/** Multi-OS mkdirectory function */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1248 |
static inline void ottd_mkdir(const char *directory) |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1249 |
{ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1250 |
#if defined(WIN32) || defined(__WATCOMC__) |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1251 |
mkdir(directory); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1252 |
#else |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1253 |
mkdir(directory, 0755); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1254 |
#endif |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1255 |
} |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1256 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1257 |
/** Create a path consisting of an already existing path, a possible |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1258 |
* path seperator and the filename. The seperator is only appended if the path |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1259 |
* does not already end with a seperator */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1260 |
static inline char *mkpath(char *buf, size_t buflen, const char *path, const char *file) |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1261 |
{ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1262 |
char *p; |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1263 |
ttd_strlcpy(buf, path, buflen); // copy directory into buffer |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1264 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1265 |
p = strchr(buf, '\0'); // add path seperator if necessary |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1266 |
if (p[-1] != PATHSEPCHAR && (size_t)(p - buf) + 1 < buflen) *p++ = PATHSEPCHAR; |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1267 |
ttd_strlcpy(p, file, buflen - (size_t)(p - buf)); // catenate filename at end of buffer |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1268 |
return buf; |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1269 |
} |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1270 |
|
5503
036e83e9083a
(svn r7796) -Fix (r7759): cygwin does not need to rewrite the paths for strgen.
rubidium
parents:
5475
diff
changeset
|
1271 |
#if defined(__MINGW32__) |
4379
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1272 |
/** |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1273 |
* On MingW, it is common that both / as \ are accepted in the |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1274 |
* params. To go with those flow, we rewrite all incoming / |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1275 |
* simply to \, so internally we can safely assume \. |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1276 |
*/ |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1277 |
static inline char *replace_pathsep(char *s) |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1278 |
{ |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1279 |
char *c; |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1280 |
|
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1281 |
for (c = s; *c != '\0'; c++) if (*c == '/') *c = '\\'; |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1282 |
return s; |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1283 |
} |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1284 |
#else |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1285 |
static inline char *replace_pathsep(char *s) { return s; } |
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1286 |
#endif |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1287 |
|
250
733e18ca6e93
(svn r251) -Project ready for 0.3.4 release. Updated installer, readme and fileinformation
darkvater
parents:
236
diff
changeset
|
1288 |
int CDECL main(int argc, char* argv[]) |
0 | 1289 |
{ |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1290 |
char pathbuf[256]; |
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1291 |
const char *src_dir = "."; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1292 |
const char *dest_dir = NULL; |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1293 |
|
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1294 |
while (argc > 1 && *argv[1] == '-') { |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1295 |
if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) { |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1296 |
puts("$Revision$"); |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1297 |
return 0; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1298 |
} |
0 | 1299 |
|
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1300 |
if (strcmp(argv[1], "-t") == 0 || strcmp(argv[1], "--todo") == 0) { |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1301 |
_show_todo |= 1; |
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1302 |
argc--, argv++; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1303 |
continue; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1304 |
} |
0 | 1305 |
|
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1306 |
if (strcmp(argv[1], "-w") == 0 || strcmp(argv[1], "--warning") == 0) { |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1307 |
_show_todo |= 2; |
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1308 |
argc--, argv++; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1309 |
continue; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1310 |
} |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1311 |
|
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1312 |
if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1313 |
puts( |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1314 |
"strgen - $Revision$\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1315 |
" -v | --version print version information and exit\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1316 |
" -t | --todo replace any untranslated strings with '<TODO>'\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1317 |
" -w | --warning print a warning for any untranslated strings\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1318 |
" -h | -? | --help print this help message and exit\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1319 |
" -s | --source_dir search for english.txt in the specified directory\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1320 |
" -d | --dest_dir put output file in the specified directory, create if needed\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1321 |
" Run without parameters and strgen will search for english.txt and parse it,\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1322 |
" creating strings.h. Passing an argument, strgen will translate that language\n" |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1323 |
" file using english.txt as a reference and output <language>.lng." |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1324 |
); |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1325 |
return 0; |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1326 |
} |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1327 |
|
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1328 |
if (argc > 2 && (strcmp(argv[1], "-s") == 0 || strcmp(argv[1], "--source_dir") == 0)) { |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1329 |
src_dir = replace_pathsep(argv[2]); |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1330 |
argc -= 2, argv += 2; |
4464
08e89a8faa09
(svn r6247) -Fix(r6244): invalid arguments caused infinite loop
glx
parents:
4461
diff
changeset
|
1331 |
continue; |
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1332 |
} |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1333 |
|
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1334 |
if (argc > 2 && (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "--dest_dir") == 0)) { |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1335 |
dest_dir = replace_pathsep(argv[2]); |
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1336 |
argc -= 2, argv += 2; |
4464
08e89a8faa09
(svn r6247) -Fix(r6244): invalid arguments caused infinite loop
glx
parents:
4461
diff
changeset
|
1337 |
continue; |
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1338 |
} |
4464
08e89a8faa09
(svn r6247) -Fix(r6244): invalid arguments caused infinite loop
glx
parents:
4461
diff
changeset
|
1339 |
|
08e89a8faa09
(svn r6247) -Fix(r6244): invalid arguments caused infinite loop
glx
parents:
4461
diff
changeset
|
1340 |
fprintf(stderr, "Invalid arguments\n"); |
08e89a8faa09
(svn r6247) -Fix(r6244): invalid arguments caused infinite loop
glx
parents:
4461
diff
changeset
|
1341 |
return 0; |
0 | 1342 |
} |
1343 |
||
4461
905cb9ca6fe5
(svn r6244) -Fix: allow any order for strgen parameters
glx
parents:
4447
diff
changeset
|
1344 |
if (dest_dir == NULL) dest_dir = src_dir; // if dest_dir is not specified, it equals src_dir |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1345 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1346 |
/* strgen has two modes of operation. If no (free) arguments are passed |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1347 |
* strgen generates strings.h to the destination directory. If it is supplied |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1348 |
* with a (free) parameter the program will translate that language to destination |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1349 |
* directory. As input english.txt is parsed from the source directory */ |
0 | 1350 |
if (argc == 1) { |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1351 |
mkpath(pathbuf, lengthof(pathbuf), src_dir, "english.txt"); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1352 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1353 |
/* parse master file */ |
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1354 |
_masterlang = true; |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1355 |
ParseFile(pathbuf, true); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1356 |
MakeHashOfStrings(); |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1357 |
if (_errors) return 1; |
0 | 1358 |
|
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1359 |
/* write strings.h */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1360 |
ottd_mkdir(dest_dir); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1361 |
mkpath(pathbuf, lengthof(pathbuf), dest_dir, "strings.h"); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1362 |
WriteStringsH(pathbuf); |
3015
f91a1b8fba79
(svn r3595) Several small cleanups, the only notable are some additional symbolic names for a few ISO8859 characters
tron
parents:
2952
diff
changeset
|
1363 |
} else if (argc == 2) { |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1364 |
char *r; |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1365 |
|
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1366 |
mkpath(pathbuf, lengthof(pathbuf), src_dir, "english.txt"); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1367 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1368 |
/* parse master file and check if target file is correct */ |
2586
1c0f0b67a70d
(svn r3123) eh, don't press enter after typing text, previous patch wasn't finished. Now strgen really behaves correctly. Thanks again glx
Darkvater
parents:
2585
diff
changeset
|
1369 |
_masterlang = false; |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1370 |
ParseFile(pathbuf, true); |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1371 |
MakeHashOfStrings(); |
4379
96eb926dcc1d
(svn r6117) -Fix r6097: on mingw it is normal that both / as \ are accepted as input
truelight
parents:
4373
diff
changeset
|
1372 |
ParseFile(replace_pathsep(argv[1]), false); // target file |
2063
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1373 |
if (_errors) return 1; |
ae866a12f2df
(svn r2572) - Codechange: [string] Changed string system so it's not as dependent on decode_parameters
ludde
parents:
2060
diff
changeset
|
1374 |
|
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1375 |
/* get the targetfile, strip any directories and append to destination path */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1376 |
r = strrchr(argv[1], PATHSEPCHAR); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1377 |
mkpath(pathbuf, lengthof(pathbuf), dest_dir, (r != NULL) ? &r[1] : argv[1]); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1378 |
|
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1379 |
/* rename the .txt (input-extension) to .lng */ |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1380 |
r = strrchr(pathbuf, '.'); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1381 |
if (r == NULL || strcmp(r, ".txt") != 0) r = strchr(pathbuf, '\0'); |
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1382 |
ttd_strlcpy(r, ".lng", (size_t)(r - pathbuf)); |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1383 |
WriteLangfile(pathbuf); |
5360
d87dfdb62e5a
(svn r7540) -Codechange: Print a summary of the number of errors/warnings of a language when strgen is run with the -w flag.
Darkvater
parents:
5111
diff
changeset
|
1384 |
|
d87dfdb62e5a
(svn r7540) -Codechange: Print a summary of the number of errors/warnings of a language when strgen is run with the -w flag.
Darkvater
parents:
5111
diff
changeset
|
1385 |
/* if showing warnings, print a summary of the language */ |
7110
bda0a45e30e5
(svn r10382) -Fix (strgen): it was not possible to use --warning and --todo at the same time.
rubidium
parents:
7059
diff
changeset
|
1386 |
if ((_show_todo & 2) != 0) { |
5442
577bf6b7da95
(svn r7693) -Codechange (r7540): print a newline after the summary (strgen).
Darkvater
parents:
5360
diff
changeset
|
1387 |
fprintf(stdout, "%d warnings and %d errors for %s\n", _warnings, _errors, pathbuf); |
5360
d87dfdb62e5a
(svn r7540) -Codechange: Print a summary of the number of errors/warnings of a language when strgen is run with the -w flag.
Darkvater
parents:
5111
diff
changeset
|
1388 |
} |
0 | 1389 |
} else { |
4370
5beb8896ae3d
(svn r6089) -Backport r6088: added -s (source) and -d (destination) to strgen (Darkvater)
truelight
parents:
4344
diff
changeset
|
1390 |
fprintf(stderr, "Invalid arguments\n"); |
0 | 1391 |
} |
1392 |
||
1393 |
return 0; |
|
1394 |
} |