changed format of the countryflags index file to json

This commit is contained in:
oy 2012-12-17 19:40:48 +01:00
parent 61b515f9be
commit f50b5d6059
3 changed files with 1097 additions and 830 deletions

1024
data/countryflags/index.json Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,769 +0,0 @@
##### country codes #####
##### custom #####
default
== -1
XEN
== 901
XNI
== 902
XSC
== 903
XWA
== 904
#south sudan, non official code#
SS
== 737
##### ISO 3166-1 based #####
AF
== 4
AX
== 248
AL
== 8
DZ
== 12
AS
== 16
AD
== 20
AO
== 24
AI
== 660
#AQ
#== 10
AG
== 28
AR
== 32
AM
== 51
AW
== 533
AU
== 36
AT
== 40
AZ
== 31
BS
== 44
BH
== 48
BD
== 50
BB
== 52
BY
== 112
BE
== 56
BZ
== 84
BJ
== 204
BM
== 60
BT
== 64
BO
== 68
#BQ
#== 535
BA
== 70
BW
== 72
#BV
#== 74
BR
== 76
IO
== 86
BN
== 96
BG
== 100
BF
== 854
BI
== 108
KH
== 116
CM
== 120
CA
== 124
CV
== 132
KY
== 136
CF
== 140
TD
== 148
CL
== 152
CN
== 156
CX
== 162
CC
== 166
CO
== 170
KM
== 174
CG
== 178
CD
== 180
CK
== 184
CR
== 188
CI
== 384
HR
== 191
CU
== 192
CW
== 531
CY
== 196
CZ
== 203
DK
== 208
DJ
== 262
DM
== 212
DO
== 214
EC
== 218
EG
== 818
SV
== 222
GQ
== 226
ER
== 232
EE
== 233
ET
== 231
FK
== 238
FO
== 234
FJ
== 242
FI
== 246
FR
== 250
GF
== 254
PF
== 258
TF
== 260
GA
== 266
GM
== 270
GE
== 268
DE
== 276
GH
== 288
GI
== 292
GR
== 300
GL
== 304
GD
== 308
GP
== 312
GU
== 316
GT
== 320
GG
== 831
GN
== 324
GW
== 624
GY
== 328
HT
== 332
#HM
#== 334
VA
== 336
HN
== 340
HK
== 344
HU
== 348
IS
== 352
IN
== 356
ID
== 360
IR
== 364
IQ
== 368
IE
== 372
IM
== 833
IL
== 376
IT
== 380
JM
== 388
JP
== 392
JE
== 832
JO
== 400
KZ
== 398
KE
== 404
KI
== 296
KP
== 408
KR
== 410
KW
== 414
KG
== 417
LA
== 418
LV
== 428
LB
== 422
LS
== 426
LR
== 430
LY
== 434
LI
== 438
LT
== 440
LU
== 442
MO
== 446
MK
== 807
MG
== 450
MW
== 454
MY
== 458
MV
== 462
ML
== 466
MT
== 470
MH
== 584
MQ
== 474
MR
== 478
MU
== 480
#YT
#== 175
MX
== 484
FM
== 583
MD
== 498
MC
== 492
MN
== 496
ME
== 499
MS
== 500
MA
== 504
MZ
== 508
MM
== 104
NA
== 516
NR
== 520
NP
== 524
NL
== 528
NC
== 540
NZ
== 554
NI
== 558
NE
== 562
NG
== 566
NU
== 570
NF
== 574
MP
== 580
NO
== 578
OM
== 512
PK
== 586
PW
== 585
#PS
#== 275
PA
== 591
PG
== 598
PY
== 600
PE
== 604
PH
== 608
PN
== 612
PL
== 616
PT
== 620
PR
== 630
QA
== 634
RE
== 638
RO
== 642
RU
== 643
RW
== 646
BL
== 652
SH
== 654
KN
== 659
LC
== 662
MF
== 663
PM
== 666
VC
== 670
WS
== 882
SM
== 674
ST
== 678
SA
== 682
SN
== 686
RS
== 688
SC
== 690
SL
== 694
SG
== 702
SX
== 534
SK
== 703
SI
== 705
SB
== 90
SO
== 706
ZA
== 710
GS
== 239
ES
== 724
LK
== 144
SD
== 736
SR
== 740
#SJ
#== 744
SZ
== 748
SE
== 752
CH
== 756
SY
== 760
TW
== 158
TJ
== 762
TZ
== 834
TH
== 764
TL
== 626
TG
== 768
TK
== 772
TO
== 776
TT
== 780
TN
== 788
TR
== 792
TM
== 795
TC
== 796
TV
== 798
UG
== 800
UA
== 804
AE
== 784
GB
== 826
US
== 840
#UM
#== 581
UY
== 858
UZ
== 860
VU
== 548
VE
== 862
VN
== 704
VG
== 92
VI
== 850
WF
== 876
EH
== 732
YE
== 887
ZM
== 894
ZW
== 716

View file

@ -7,88 +7,100 @@
#include <engine/graphics.h>
#include <engine/storage.h>
#include <engine/textrender.h>
#include <engine/external/json-parser/json.h>
#include <engine/shared/config.h>
#include <engine/shared/linereader.h>
#include "countryflags.h"
void CCountryFlags::LoadCountryflagsIndexfile()
{
IOHANDLE File = Storage()->OpenFile("countryflags/index.txt", IOFLAG_READ, IStorage::TYPE_ALL);
// read file data into buffer
IOHANDLE File = Storage()->OpenFile("countryflags/index.json", IOFLAG_READ, IStorage::TYPE_ALL);
if(!File)
{
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", "couldn't open index file");
return;
}
int FileSize = (int)io_length(File);
char *pFileData = (char *)mem_alloc(FileSize+1, 1);
io_read(File, pFileData, FileSize);
pFileData[FileSize] = 0;
io_close(File);
char aOrigin[128];
CLineReader LineReader;
LineReader.Init(File);
char *pLine;
while((pLine = LineReader.Get()))
// parse json data
json_settings JsonSettings;
mem_zero(&JsonSettings, sizeof(JsonSettings));
char aError[256];
json_value *pJsonData = json_parse_ex(&JsonSettings, pFileData, aError);
if(pJsonData == 0)
{
if(!str_length(pLine) || pLine[0] == '#') // skip empty lines and comments
continue;
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aError);
return;
}
str_copy(aOrigin, pLine, sizeof(aOrigin));
char *pReplacement = LineReader.Get();
if(!pReplacement)
// extract data
const json_value &rInit = (*pJsonData)["country codes"];
if(rInit.type == json_object)
{
enum
{
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", "unexpected end of index file");
break;
}
if(pReplacement[0] != '=' || pReplacement[1] != '=' || pReplacement[2] != ' ')
NUM_INDICES = 2,
};
char *paIndices[NUM_INDICES] = {"custom", "ISO 3166-1"};
for(int Index = 0; Index < NUM_INDICES; ++Index)
{
char aBuf[128];
str_format(aBuf, sizeof(aBuf), "malform replacement for index '%s'", aOrigin);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aBuf);
continue;
}
int CountryCode = str_toint(pReplacement+3);
if(CountryCode < CODE_LB || CountryCode > CODE_UB)
{
char aBuf[128];
str_format(aBuf, sizeof(aBuf), "country code '%i' not within valid code range [%i..%i]", CountryCode, CODE_LB, CODE_UB);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aBuf);
continue;
}
// load the graphic file
char aBuf[128];
CImageInfo Info;
if(g_Config.m_ClLoadCountryFlags)
{
str_format(aBuf, sizeof(aBuf), "countryflags/%s.png", aOrigin);
if(!Graphics()->LoadPNG(&Info, aBuf, IStorage::TYPE_ALL))
const json_value &rStart = rInit[paIndices[Index]];
if(rStart.type == json_array)
{
char aMsg[128];
str_format(aMsg, sizeof(aMsg), "failed to load '%s'", aBuf);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aMsg);
continue;
for(int i = 0; i < rStart.u.array.length; ++i)
{
char aBuf[64];
// validate country code
int CountryCode = (long)rStart[i]["code"];
if(CountryCode < CODE_LB || CountryCode > CODE_UB)
{
str_format(aBuf, sizeof(aBuf), "country code '%i' not within valid code range [%i..%i]", CountryCode, CODE_LB, CODE_UB);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aBuf);
continue;
}
// add entry
const char *pCountryName = rStart[i]["id"];
CCountryFlag CountryFlag;
CountryFlag.m_CountryCode = CountryCode;
str_copy(CountryFlag.m_aCountryCodeString, pCountryName, sizeof(CountryFlag.m_aCountryCodeString));
if(g_Config.m_ClLoadCountryFlags)
{
// load the graphic file
CImageInfo Info;
str_format(aBuf, sizeof(aBuf), "countryflags/%s.png", pCountryName);
if(!Graphics()->LoadPNG(&Info, aBuf, IStorage::TYPE_ALL))
{
char aMsg[64];
str_format(aMsg, sizeof(aMsg), "failed to load '%s'", aBuf);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aMsg);
continue;
}
CountryFlag.m_Texture = Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0);
mem_free(Info.m_pData);
}
m_aCountryFlags.add_unsorted(CountryFlag);
// print message
if(g_Config.m_Debug)
{
str_format(aBuf, sizeof(aBuf), "loaded country flag '%s'", pCountryName);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aBuf);
}
}
}
}
// add entry
CCountryFlag CountryFlag;
CountryFlag.m_CountryCode = CountryCode;
str_copy(CountryFlag.m_aCountryCodeString, aOrigin, sizeof(CountryFlag.m_aCountryCodeString));
if(g_Config.m_ClLoadCountryFlags)
{
CountryFlag.m_Texture = Graphics()->LoadTextureRaw(Info.m_Width, Info.m_Height, Info.m_Format, Info.m_pData, Info.m_Format, 0);
mem_free(Info.m_pData);
}
if(g_Config.m_Debug)
{
str_format(aBuf, sizeof(aBuf), "loaded country flag '%s'", aOrigin);
Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "countryflags", aBuf);
}
m_aCountryFlags.add_unsorted(CountryFlag);
}
io_close(File);
// clean up
json_value_free(pJsonData);
m_aCountryFlags.sort_range();
// find index of default item