575 lines
9.9 KiB
JavaScript
575 lines
9.9 KiB
JavaScript
/*
|
|
* pgn4web javascript chessboard
|
|
* copyright (C) 2009-2013 Paolo Casaschi
|
|
* see README file and http://pgn4web.casaschi.net
|
|
* for credits, license and more details
|
|
*
|
|
* Huffman encoding/decoding derived from code at http://rumkin.com/tools/compression/compress_huff.php
|
|
*/
|
|
|
|
// version 1 of PGN encoding:
|
|
// encodedPGN = nnn$xxx0
|
|
// nnn = number representing bytes length of the decoded message
|
|
// $ = dollar char (delimiter for length info)
|
|
// xxx = encoded text (using LetterCodes below)
|
|
// 0 = zero char (version marker)
|
|
|
|
"use strict";
|
|
|
|
var encodingCharSet_dec;
|
|
var encodingCharSet_enc;
|
|
var encodingCharSet = encodingCharSet_dec = "$0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
|
|
var encodingVersion_dec;
|
|
var encodingVersion_enc;
|
|
var encodingVersion = encodingVersion_dec = 1;
|
|
var errorString;
|
|
|
|
if (((encodingCharSet_enc != undefined) && (encodingCharSet_enc != encodingCharSet_dec)) ||
|
|
((encodingVersion_enc != undefined) && (encodingVersion_enc != encodingVersion_dec))) {
|
|
errorString = "error: PGN encoding/decoding mismatch";
|
|
if (typeof myAlert == "function") { myAlert(errorString); }
|
|
else { alert(errorString); }
|
|
}
|
|
|
|
function DecodePGN(bytes) {
|
|
|
|
if (bytes.charAt(bytes.length - 1) != encodingCharSet.charAt(encodingVersion)) {
|
|
errorString = "error: PGN encoding version mismatch (e:" +
|
|
bytes.charAt(bytes.length - 1) + " d:" + encodingCharSet.charAt(encodingVersion) + ")";
|
|
if (typeof myAlert == "function") { myAlert(errorString); }
|
|
else { alert(errorString); }
|
|
}
|
|
|
|
var originalLength = parseInt(bytes.match(/^[0-9]*/), 10);
|
|
bytes = bytes.replace(/^[0-9]*\$/,"");
|
|
|
|
var l = new Array();
|
|
l[0] = -146;
|
|
l[1] = -111;
|
|
l[2] = -66;
|
|
l[3] = -55;
|
|
l[4] = -6;
|
|
l[5] = 46;
|
|
l[6] = -8;
|
|
l[7] = 66;
|
|
l[8] = -10;
|
|
l[9] = 105;
|
|
l[10] = -12;
|
|
l[11] = 107;
|
|
l[12] = -14;
|
|
l[13] = 44;
|
|
l[14] = -16;
|
|
l[15] = 85;
|
|
l[16] = -18;
|
|
l[17] = 106;
|
|
l[18] = -20;
|
|
l[19] = 62;
|
|
l[20] = -22;
|
|
l[21] = 89;
|
|
l[22] = -24;
|
|
l[23] = 38;
|
|
l[24] = -40;
|
|
l[25] = -33;
|
|
l[26] = -30;
|
|
l[27] = -29;
|
|
l[28] = 17;
|
|
l[29] = 18;
|
|
l[30] = -32;
|
|
l[31] = 15;
|
|
l[32] = 16;
|
|
l[33] = -37;
|
|
l[34] = -36;
|
|
l[35] = 21;
|
|
l[36] = 22;
|
|
l[37] = -39;
|
|
l[38] = 19;
|
|
l[39] = 20;
|
|
l[40] = -48;
|
|
l[41] = -45;
|
|
l[42] = -44;
|
|
l[43] = 7;
|
|
l[44] = 8;
|
|
l[45] = -47;
|
|
l[46] = 5;
|
|
l[47] = 6;
|
|
l[48] = -52;
|
|
l[49] = -51;
|
|
l[50] = 12;
|
|
l[51] = 14;
|
|
l[52] = -54;
|
|
l[53] = 9;
|
|
l[54] = 11;
|
|
l[55] = -57;
|
|
l[56] = 34;
|
|
l[57] = -59;
|
|
l[58] = 78;
|
|
l[59] = -61;
|
|
l[60] = 57;
|
|
l[61] = -63;
|
|
l[62] = 63;
|
|
l[63] = -65;
|
|
l[64] = 109;
|
|
l[65] = 119;
|
|
l[66] = -80;
|
|
l[67] = -69;
|
|
l[68] = 101;
|
|
l[69] = -71;
|
|
l[70] = 55;
|
|
l[71] = -73;
|
|
l[72] = 69;
|
|
l[73] = -75;
|
|
l[74] = 118;
|
|
l[75] = -77;
|
|
l[76] = 121;
|
|
l[77] = -79;
|
|
l[78] = 73;
|
|
l[79] = 123;
|
|
l[80] = -82;
|
|
l[81] = 49;
|
|
l[82] = -86;
|
|
l[83] = -85;
|
|
l[84] = 13;
|
|
l[85] = 40;
|
|
l[86] = -88;
|
|
l[87] = 45;
|
|
l[88] = -90;
|
|
l[89] = 68;
|
|
l[90] = -92;
|
|
l[91] = 84;
|
|
l[92] = -94;
|
|
l[93] = 125;
|
|
l[94] = -96;
|
|
l[95] = 39;
|
|
l[96] = -98;
|
|
l[97] = 58;
|
|
l[98] = -100;
|
|
l[99] = 36;
|
|
l[100] = -102;
|
|
l[101] = 92;
|
|
l[102] = -104;
|
|
l[103] = 124;
|
|
l[104] = -108;
|
|
l[105] = -107;
|
|
l[106] = 3;
|
|
l[107] = 4;
|
|
l[108] = -110;
|
|
l[109] = 0;
|
|
l[110] = 2;
|
|
l[111] = -129;
|
|
l[112] = -118;
|
|
l[113] = -115;
|
|
l[114] = 50;
|
|
l[115] = -117;
|
|
l[116] = 102;
|
|
l[117] = 103;
|
|
l[118] = -122;
|
|
l[119] = -121;
|
|
l[120] = 48;
|
|
l[121] = 110;
|
|
l[122] = -126;
|
|
l[123] = -125;
|
|
l[124] = 10;
|
|
l[125] = 1;
|
|
l[126] = -128;
|
|
l[127] = 79;
|
|
l[128] = 117;
|
|
l[129] = -137;
|
|
l[130] = -132;
|
|
l[131] = 51;
|
|
l[132] = -134;
|
|
l[133] = 98;
|
|
l[134] = -136;
|
|
l[135] = 47;
|
|
l[136] = 112;
|
|
l[137] = -141;
|
|
l[138] = -140;
|
|
l[139] = 56;
|
|
l[140] = 81;
|
|
l[141] = -143;
|
|
l[142] = 104;
|
|
l[143] = -145;
|
|
l[144] = 114;
|
|
l[145] = 115;
|
|
l[146] = -192;
|
|
l[147] = -153;
|
|
l[148] = -150;
|
|
l[149] = 32;
|
|
l[150] = -152;
|
|
l[151] = 91;
|
|
l[152] = 93;
|
|
l[153] = -157;
|
|
l[154] = -156;
|
|
l[155] = 99;
|
|
l[156] = 120;
|
|
l[157] = -159;
|
|
l[158] = 116;
|
|
l[159] = -161;
|
|
l[160] = 75;
|
|
l[161] = -163;
|
|
l[162] = 80;
|
|
l[163] = -165;
|
|
l[164] = 67;
|
|
l[165] = -167;
|
|
l[166] = 77;
|
|
l[167] = -169;
|
|
l[168] = 90;
|
|
l[169] = -171;
|
|
l[170] = 60;
|
|
l[171] = -173;
|
|
l[172] = 33;
|
|
l[173] = -175;
|
|
l[174] = 37;
|
|
l[175] = -177;
|
|
l[176] = 96;
|
|
l[177] = -185;
|
|
l[178] = -182;
|
|
l[179] = -181;
|
|
l[180] = 248;
|
|
l[181] = 249;
|
|
l[182] = -184;
|
|
l[183] = 246;
|
|
l[184] = 247;
|
|
l[185] = -189;
|
|
l[186] = -188;
|
|
l[187] = 252;
|
|
l[188] = 253;
|
|
l[189] = -191;
|
|
l[190] = 250;
|
|
l[191] = 251;
|
|
l[192] = -228;
|
|
l[193] = -225;
|
|
l[194] = -196;
|
|
l[195] = 52;
|
|
l[196] = -198;
|
|
l[197] = 108;
|
|
l[198] = -208;
|
|
l[199] = -201;
|
|
l[200] = 83;
|
|
l[201] = -205;
|
|
l[202] = -204;
|
|
l[203] = 61;
|
|
l[204] = 72;
|
|
l[205] = -207;
|
|
l[206] = 113;
|
|
l[207] = 122;
|
|
l[208] = -212;
|
|
l[209] = -211;
|
|
l[210] = 65;
|
|
l[211] = 70;
|
|
l[212] = -214;
|
|
l[213] = 71;
|
|
l[214] = -216;
|
|
l[215] = 76;
|
|
l[216] = -218;
|
|
l[217] = 74;
|
|
l[218] = -220;
|
|
l[219] = 88;
|
|
l[220] = -222;
|
|
l[221] = 64;
|
|
l[222] = -224;
|
|
l[223] = 42;
|
|
l[224] = 94;
|
|
l[225] = -227;
|
|
l[226] = 53;
|
|
l[227] = 100;
|
|
l[228] = -232;
|
|
l[229] = -231;
|
|
l[230] = 54;
|
|
l[231] = 82;
|
|
l[232] = -234;
|
|
l[233] = 97;
|
|
l[234] = -236;
|
|
l[235] = 111;
|
|
l[236] = -238;
|
|
l[237] = 43;
|
|
l[238] = -240;
|
|
l[239] = 87;
|
|
l[240] = -242;
|
|
l[241] = 41;
|
|
l[242] = -244;
|
|
l[243] = 86;
|
|
l[244] = -246;
|
|
l[245] = 35;
|
|
l[246] = -256;
|
|
l[247] = -249;
|
|
l[248] = 59;
|
|
l[249] = -251;
|
|
l[250] = 95;
|
|
l[251] = -253;
|
|
l[252] = 126;
|
|
l[253] = -255;
|
|
l[254] = 254;
|
|
l[255] = 255;
|
|
l[256] = -384;
|
|
l[257] = -321;
|
|
l[258] = -290;
|
|
l[259] = -275;
|
|
l[260] = -268;
|
|
l[261] = -265;
|
|
l[262] = -264;
|
|
l[263] = 160;
|
|
l[264] = 161;
|
|
l[265] = -267;
|
|
l[266] = 158;
|
|
l[267] = 159;
|
|
l[268] = -272;
|
|
l[269] = -271;
|
|
l[270] = 164;
|
|
l[271] = 165;
|
|
l[272] = -274;
|
|
l[273] = 162;
|
|
l[274] = 163;
|
|
l[275] = -283;
|
|
l[276] = -280;
|
|
l[277] = -279;
|
|
l[278] = 152;
|
|
l[279] = 153;
|
|
l[280] = -282;
|
|
l[281] = 150;
|
|
l[282] = 151;
|
|
l[283] = -287;
|
|
l[284] = -286;
|
|
l[285] = 156;
|
|
l[286] = 157;
|
|
l[287] = -289;
|
|
l[288] = 154;
|
|
l[289] = 155;
|
|
l[290] = -306;
|
|
l[291] = -299;
|
|
l[292] = -296;
|
|
l[293] = -295;
|
|
l[294] = 176;
|
|
l[295] = 177;
|
|
l[296] = -298;
|
|
l[297] = 174;
|
|
l[298] = 175;
|
|
l[299] = -303;
|
|
l[300] = -302;
|
|
l[301] = 180;
|
|
l[302] = 181;
|
|
l[303] = -305;
|
|
l[304] = 178;
|
|
l[305] = 179;
|
|
l[306] = -314;
|
|
l[307] = -311;
|
|
l[308] = -310;
|
|
l[309] = 168;
|
|
l[310] = 169;
|
|
l[311] = -313;
|
|
l[312] = 166;
|
|
l[313] = 167;
|
|
l[314] = -318;
|
|
l[315] = -317;
|
|
l[316] = 172;
|
|
l[317] = 173;
|
|
l[318] = -320;
|
|
l[319] = 170;
|
|
l[320] = 171;
|
|
l[321] = -353;
|
|
l[322] = -338;
|
|
l[323] = -331;
|
|
l[324] = -328;
|
|
l[325] = -327;
|
|
l[326] = 128;
|
|
l[327] = 129;
|
|
l[328] = -330;
|
|
l[329] = 31;
|
|
l[330] = 127;
|
|
l[331] = -335;
|
|
l[332] = -334;
|
|
l[333] = 132;
|
|
l[334] = 133;
|
|
l[335] = -337;
|
|
l[336] = 130;
|
|
l[337] = 131;
|
|
l[338] = -346;
|
|
l[339] = -343;
|
|
l[340] = -342;
|
|
l[341] = 25;
|
|
l[342] = 26;
|
|
l[343] = -345;
|
|
l[344] = 23;
|
|
l[345] = 24;
|
|
l[346] = -350;
|
|
l[347] = -349;
|
|
l[348] = 29;
|
|
l[349] = 30;
|
|
l[350] = -352;
|
|
l[351] = 27;
|
|
l[352] = 28;
|
|
l[353] = -369;
|
|
l[354] = -362;
|
|
l[355] = -359;
|
|
l[356] = -358;
|
|
l[357] = 144;
|
|
l[358] = 145;
|
|
l[359] = -361;
|
|
l[360] = 142;
|
|
l[361] = 143;
|
|
l[362] = -366;
|
|
l[363] = -365;
|
|
l[364] = 148;
|
|
l[365] = 149;
|
|
l[366] = -368;
|
|
l[367] = 146;
|
|
l[368] = 147;
|
|
l[369] = -377;
|
|
l[370] = -374;
|
|
l[371] = -373;
|
|
l[372] = 136;
|
|
l[373] = 137;
|
|
l[374] = -376;
|
|
l[375] = 134;
|
|
l[376] = 135;
|
|
l[377] = -381;
|
|
l[378] = -380;
|
|
l[379] = 140;
|
|
l[380] = 141;
|
|
l[381] = -383;
|
|
l[382] = 138;
|
|
l[383] = 139;
|
|
l[384] = -448;
|
|
l[385] = -417;
|
|
l[386] = -402;
|
|
l[387] = -395;
|
|
l[388] = -392;
|
|
l[389] = -391;
|
|
l[390] = 224;
|
|
l[391] = 225;
|
|
l[392] = -394;
|
|
l[393] = 222;
|
|
l[394] = 223;
|
|
l[395] = -399;
|
|
l[396] = -398;
|
|
l[397] = 228;
|
|
l[398] = 229;
|
|
l[399] = -401;
|
|
l[400] = 226;
|
|
l[401] = 227;
|
|
l[402] = -410;
|
|
l[403] = -407;
|
|
l[404] = -406;
|
|
l[405] = 216;
|
|
l[406] = 217;
|
|
l[407] = -409;
|
|
l[408] = 214;
|
|
l[409] = 215;
|
|
l[410] = -414;
|
|
l[411] = -413;
|
|
l[412] = 220;
|
|
l[413] = 221;
|
|
l[414] = -416;
|
|
l[415] = 218;
|
|
l[416] = 219;
|
|
l[417] = -433;
|
|
l[418] = -426;
|
|
l[419] = -423;
|
|
l[420] = -422;
|
|
l[421] = 240;
|
|
l[422] = 241;
|
|
l[423] = -425;
|
|
l[424] = 238;
|
|
l[425] = 239;
|
|
l[426] = -430;
|
|
l[427] = -429;
|
|
l[428] = 244;
|
|
l[429] = 245;
|
|
l[430] = -432;
|
|
l[431] = 242;
|
|
l[432] = 243;
|
|
l[433] = -441;
|
|
l[434] = -438;
|
|
l[435] = -437;
|
|
l[436] = 232;
|
|
l[437] = 233;
|
|
l[438] = -440;
|
|
l[439] = 230;
|
|
l[440] = 231;
|
|
l[441] = -445;
|
|
l[442] = -444;
|
|
l[443] = 236;
|
|
l[444] = 237;
|
|
l[445] = -447;
|
|
l[446] = 234;
|
|
l[447] = 235;
|
|
l[448] = -480;
|
|
l[449] = -465;
|
|
l[450] = -458;
|
|
l[451] = -455;
|
|
l[452] = -454;
|
|
l[453] = 192;
|
|
l[454] = 193;
|
|
l[455] = -457;
|
|
l[456] = 190;
|
|
l[457] = 191;
|
|
l[458] = -462;
|
|
l[459] = -461;
|
|
l[460] = 196;
|
|
l[461] = 197;
|
|
l[462] = -464;
|
|
l[463] = 194;
|
|
l[464] = 195;
|
|
l[465] = -473;
|
|
l[466] = -470;
|
|
l[467] = -469;
|
|
l[468] = 184;
|
|
l[469] = 185;
|
|
l[470] = -472;
|
|
l[471] = 182;
|
|
l[472] = 183;
|
|
l[473] = -477;
|
|
l[474] = -476;
|
|
l[475] = 188;
|
|
l[476] = 189;
|
|
l[477] = -479;
|
|
l[478] = 186;
|
|
l[479] = 187;
|
|
l[480] = -496;
|
|
l[481] = -489;
|
|
l[482] = -486;
|
|
l[483] = -485;
|
|
l[484] = 208;
|
|
l[485] = 209;
|
|
l[486] = -488;
|
|
l[487] = 206;
|
|
l[488] = 207;
|
|
l[489] = -493;
|
|
l[490] = -492;
|
|
l[491] = 212;
|
|
l[492] = 213;
|
|
l[493] = -495;
|
|
l[494] = 210;
|
|
l[495] = 211;
|
|
l[496] = -504;
|
|
l[497] = -501;
|
|
l[498] = -500;
|
|
l[499] = 200;
|
|
l[500] = 201;
|
|
l[501] = -503;
|
|
l[502] = 198;
|
|
l[503] = 199;
|
|
l[504] = -508;
|
|
l[505] = -507;
|
|
l[506] = 204;
|
|
l[507] = 205;
|
|
l[508] = -510;
|
|
l[509] = 202;
|
|
l[510] = 203;
|
|
|
|
var a=0, b=0, e=0, i, o="";
|
|
|
|
function B() { if (a===0) { b=encodingCharSet.indexOf(bytes.charAt(e++)); a=6; } return ((b>>--a)&0x01); }
|
|
|
|
while(originalLength>0) { i=0;
|
|
while(l[i]<0) {
|
|
if (B()) { i=-l[i]; }
|
|
else { i++; }
|
|
}
|
|
o+=String.fromCharCode(l[i]);
|
|
originalLength--;
|
|
}
|
|
|
|
return o;
|
|
}
|
|
|