File diff r18726:6d5849476f85 → r18727:ac3e3b151022
src/strings.cpp
Show inline comments
 
@@ -132,20 +132,20 @@ struct LanguagePack : public LanguagePac
 

	
 
static char **_langpack_offs;
 
static LanguagePack *_langpack;
 
static uint _langtab_num[32];   ///< Offset into langpack offs
 
static uint _langtab_start[32]; ///< Offset into langpack offs
 
static uint _langtab_num[TAB_COUNT];   ///< Offset into langpack offs
 
static uint _langtab_start[TAB_COUNT]; ///< Offset into langpack offs
 
static bool _keep_gender_data = false;  ///< Should we retain the gender data in the current string?
 

	
 

	
 
const char *GetStringPtr(StringID string)
 
{
 
	switch (GB(string, 11, 5)) {
 
	switch (GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS)) {
 
		/* GetGRFStringPtr doesn't handle 0xD4xx ids, we need to convert those to 0xD0xx. */
 
		case 26: return GetStringPtr(GetGRFStringID(0, 0xD000 + GB(string, 0, 10)));
 
		case 28: return GetGRFStringPtr(GB(string, 0, 11));
 
		case 29: return GetGRFStringPtr(GB(string, 0, 11) + 0x0800);
 
		case 30: return GetGRFStringPtr(GB(string, 0, 11) + 0x1000);
 
		default: return _langpack_offs[_langtab_start[string >> 11] + (string & 0x7FF)];
 
		case 26: return GetStringPtr(GetGRFStringID(0, 0xD000 + GB(string, TAB_SIZE_OFFSET, 10)));
 
		case 28: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS));
 
		case 29: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS) + 0x0800);
 
		case 30: return GetGRFStringPtr(GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS) + 0x1000);
 
		default: return _langpack_offs[_langtab_start[GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS)] + GB(string, TAB_SIZE_OFFSET, TAB_SIZE_BITS)];
 
	}
 
}
 

	
 
@@ -162,8 +162,8 @@ char *GetStringWithArgs(char *buffr, Str
 
{
 
	if (string == 0) return GetStringWithArgs(buffr, STR_UNDEFINED, args, last);
 

	
 
	uint index = GB(string,  0, 11);
 
	uint tab   = GB(string, 11,  5);
 
	uint index = GB(string, TAB_SIZE_OFFSET,  TAB_SIZE_BITS);
 
	uint tab   = GB(string, TAB_COUNT_OFFSET, TAB_COUNT_BITS);
 

	
 
	switch (tab) {
 
		case 4:
 
@@ -1536,13 +1536,13 @@ bool ReadLanguagePack(const LanguageMeta
 
	}
 

	
 
#if TTD_ENDIAN == TTD_BIG_ENDIAN
 
	for (uint i = 0; i < 32; i++) {
 
	for (uint i = 0; i < TAB_COUNT; i++) {
 
		lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]);
 
	}
 
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 

	
 
	uint count = 0;
 
	for (uint i = 0; i < 32; i++) {
 
	for (uint i = 0; i < TAB_COUNT; i++) {
 
		uint num = lang_pack->offsets[i];
 
		_langtab_start[i] = count;
 
		_langtab_num[i] = num;
 
@@ -1849,12 +1849,12 @@ class LanguagePackGlyphSearcher : public
 

	
 
	/* virtual */ const char *NextString()
 
	{
 
		if (this->i >= 32) return NULL;
 
		if (this->i >= TAB_COUNT) return NULL;
 

	
 
		const char *ret = _langpack_offs[_langtab_start[i] + j];
 

	
 
		this->j++;
 
		while (this->j >= _langtab_num[this->i] && this->i < 32) {
 
		while (this->j >= _langtab_num[this->i] && this->i < TAB_COUNT) {
 
			i++;
 
			j = 0;
 
		}