| #include "duktape.h" |
| #include "duk_codepage_conv.h" |
| |
| /* http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT */ |
| unsigned int cp1252[256] = { |
| (unsigned int) 0x0000, |
| (unsigned int) 0x0001, |
| (unsigned int) 0x0002, |
| (unsigned int) 0x0003, |
| (unsigned int) 0x0004, |
| (unsigned int) 0x0005, |
| (unsigned int) 0x0006, |
| (unsigned int) 0x0007, |
| (unsigned int) 0x0008, |
| (unsigned int) 0x0009, |
| (unsigned int) 0x000A, |
| (unsigned int) 0x000B, |
| (unsigned int) 0x000C, |
| (unsigned int) 0x000D, |
| (unsigned int) 0x000E, |
| (unsigned int) 0x000F, |
| (unsigned int) 0x0010, |
| (unsigned int) 0x0011, |
| (unsigned int) 0x0012, |
| (unsigned int) 0x0013, |
| (unsigned int) 0x0014, |
| (unsigned int) 0x0015, |
| (unsigned int) 0x0016, |
| (unsigned int) 0x0017, |
| (unsigned int) 0x0018, |
| (unsigned int) 0x0019, |
| (unsigned int) 0x001A, |
| (unsigned int) 0x001B, |
| (unsigned int) 0x001C, |
| (unsigned int) 0x001D, |
| (unsigned int) 0x001E, |
| (unsigned int) 0x001F, |
| (unsigned int) 0x0020, |
| (unsigned int) 0x0021, |
| (unsigned int) 0x0022, |
| (unsigned int) 0x0023, |
| (unsigned int) 0x0024, |
| (unsigned int) 0x0025, |
| (unsigned int) 0x0026, |
| (unsigned int) 0x0027, |
| (unsigned int) 0x0028, |
| (unsigned int) 0x0029, |
| (unsigned int) 0x002A, |
| (unsigned int) 0x002B, |
| (unsigned int) 0x002C, |
| (unsigned int) 0x002D, |
| (unsigned int) 0x002E, |
| (unsigned int) 0x002F, |
| (unsigned int) 0x0030, |
| (unsigned int) 0x0031, |
| (unsigned int) 0x0032, |
| (unsigned int) 0x0033, |
| (unsigned int) 0x0034, |
| (unsigned int) 0x0035, |
| (unsigned int) 0x0036, |
| (unsigned int) 0x0037, |
| (unsigned int) 0x0038, |
| (unsigned int) 0x0039, |
| (unsigned int) 0x003A, |
| (unsigned int) 0x003B, |
| (unsigned int) 0x003C, |
| (unsigned int) 0x003D, |
| (unsigned int) 0x003E, |
| (unsigned int) 0x003F, |
| (unsigned int) 0x0040, |
| (unsigned int) 0x0041, |
| (unsigned int) 0x0042, |
| (unsigned int) 0x0043, |
| (unsigned int) 0x0044, |
| (unsigned int) 0x0045, |
| (unsigned int) 0x0046, |
| (unsigned int) 0x0047, |
| (unsigned int) 0x0048, |
| (unsigned int) 0x0049, |
| (unsigned int) 0x004A, |
| (unsigned int) 0x004B, |
| (unsigned int) 0x004C, |
| (unsigned int) 0x004D, |
| (unsigned int) 0x004E, |
| (unsigned int) 0x004F, |
| (unsigned int) 0x0050, |
| (unsigned int) 0x0051, |
| (unsigned int) 0x0052, |
| (unsigned int) 0x0053, |
| (unsigned int) 0x0054, |
| (unsigned int) 0x0055, |
| (unsigned int) 0x0056, |
| (unsigned int) 0x0057, |
| (unsigned int) 0x0058, |
| (unsigned int) 0x0059, |
| (unsigned int) 0x005A, |
| (unsigned int) 0x005B, |
| (unsigned int) 0x005C, |
| (unsigned int) 0x005D, |
| (unsigned int) 0x005E, |
| (unsigned int) 0x005F, |
| (unsigned int) 0x0060, |
| (unsigned int) 0x0061, |
| (unsigned int) 0x0062, |
| (unsigned int) 0x0063, |
| (unsigned int) 0x0064, |
| (unsigned int) 0x0065, |
| (unsigned int) 0x0066, |
| (unsigned int) 0x0067, |
| (unsigned int) 0x0068, |
| (unsigned int) 0x0069, |
| (unsigned int) 0x006A, |
| (unsigned int) 0x006B, |
| (unsigned int) 0x006C, |
| (unsigned int) 0x006D, |
| (unsigned int) 0x006E, |
| (unsigned int) 0x006F, |
| (unsigned int) 0x0070, |
| (unsigned int) 0x0071, |
| (unsigned int) 0x0072, |
| (unsigned int) 0x0073, |
| (unsigned int) 0x0074, |
| (unsigned int) 0x0075, |
| (unsigned int) 0x0076, |
| (unsigned int) 0x0077, |
| (unsigned int) 0x0078, |
| (unsigned int) 0x0079, |
| (unsigned int) 0x007A, |
| (unsigned int) 0x007B, |
| (unsigned int) 0x007C, |
| (unsigned int) 0x007D, |
| (unsigned int) 0x007E, |
| (unsigned int) 0x007F, |
| (unsigned int) 0x20AC, |
| (unsigned int) 0xFFFD, /* undefined */ |
| (unsigned int) 0x201A, |
| (unsigned int) 0x0192, |
| (unsigned int) 0x201E, |
| (unsigned int) 0x2026, |
| (unsigned int) 0x2020, |
| (unsigned int) 0x2021, |
| (unsigned int) 0x02C6, |
| (unsigned int) 0x2030, |
| (unsigned int) 0x0160, |
| (unsigned int) 0x2039, |
| (unsigned int) 0x0152, |
| (unsigned int) 0xFFFD, /* undefined */ |
| (unsigned int) 0x017D, |
| (unsigned int) 0xFFFD, /* undefined */ |
| (unsigned int) 0xFFFD, /* undefined */ |
| (unsigned int) 0x2018, |
| (unsigned int) 0x2019, |
| (unsigned int) 0x201C, |
| (unsigned int) 0x201D, |
| (unsigned int) 0x2022, |
| (unsigned int) 0x2013, |
| (unsigned int) 0x2014, |
| (unsigned int) 0x02DC, |
| (unsigned int) 0x2122, |
| (unsigned int) 0x0161, |
| (unsigned int) 0x203A, |
| (unsigned int) 0x0153, |
| (unsigned int) 0xFFFD, /* undefined */ |
| (unsigned int) 0x017E, |
| (unsigned int) 0x0178, |
| (unsigned int) 0x00A0, |
| (unsigned int) 0x00A1, |
| (unsigned int) 0x00A2, |
| (unsigned int) 0x00A3, |
| (unsigned int) 0x00A4, |
| (unsigned int) 0x00A5, |
| (unsigned int) 0x00A6, |
| (unsigned int) 0x00A7, |
| (unsigned int) 0x00A8, |
| (unsigned int) 0x00A9, |
| (unsigned int) 0x00AA, |
| (unsigned int) 0x00AB, |
| (unsigned int) 0x00AC, |
| (unsigned int) 0x00AD, |
| (unsigned int) 0x00AE, |
| (unsigned int) 0x00AF, |
| (unsigned int) 0x00B0, |
| (unsigned int) 0x00B1, |
| (unsigned int) 0x00B2, |
| (unsigned int) 0x00B3, |
| (unsigned int) 0x00B4, |
| (unsigned int) 0x00B5, |
| (unsigned int) 0x00B6, |
| (unsigned int) 0x00B7, |
| (unsigned int) 0x00B8, |
| (unsigned int) 0x00B9, |
| (unsigned int) 0x00BA, |
| (unsigned int) 0x00BB, |
| (unsigned int) 0x00BC, |
| (unsigned int) 0x00BD, |
| (unsigned int) 0x00BE, |
| (unsigned int) 0x00BF, |
| (unsigned int) 0x00C0, |
| (unsigned int) 0x00C1, |
| (unsigned int) 0x00C2, |
| (unsigned int) 0x00C3, |
| (unsigned int) 0x00C4, |
| (unsigned int) 0x00C5, |
| (unsigned int) 0x00C6, |
| (unsigned int) 0x00C7, |
| (unsigned int) 0x00C8, |
| (unsigned int) 0x00C9, |
| (unsigned int) 0x00CA, |
| (unsigned int) 0x00CB, |
| (unsigned int) 0x00CC, |
| (unsigned int) 0x00CD, |
| (unsigned int) 0x00CE, |
| (unsigned int) 0x00CF, |
| (unsigned int) 0x00D0, |
| (unsigned int) 0x00D1, |
| (unsigned int) 0x00D2, |
| (unsigned int) 0x00D3, |
| (unsigned int) 0x00D4, |
| (unsigned int) 0x00D5, |
| (unsigned int) 0x00D6, |
| (unsigned int) 0x00D7, |
| (unsigned int) 0x00D8, |
| (unsigned int) 0x00D9, |
| (unsigned int) 0x00DA, |
| (unsigned int) 0x00DB, |
| (unsigned int) 0x00DC, |
| (unsigned int) 0x00DD, |
| (unsigned int) 0x00DE, |
| (unsigned int) 0x00DF, |
| (unsigned int) 0x00E0, |
| (unsigned int) 0x00E1, |
| (unsigned int) 0x00E2, |
| (unsigned int) 0x00E3, |
| (unsigned int) 0x00E4, |
| (unsigned int) 0x00E5, |
| (unsigned int) 0x00E6, |
| (unsigned int) 0x00E7, |
| (unsigned int) 0x00E8, |
| (unsigned int) 0x00E9, |
| (unsigned int) 0x00EA, |
| (unsigned int) 0x00EB, |
| (unsigned int) 0x00EC, |
| (unsigned int) 0x00ED, |
| (unsigned int) 0x00EE, |
| (unsigned int) 0x00EF, |
| (unsigned int) 0x00F0, |
| (unsigned int) 0x00F1, |
| (unsigned int) 0x00F2, |
| (unsigned int) 0x00F3, |
| (unsigned int) 0x00F4, |
| (unsigned int) 0x00F5, |
| (unsigned int) 0x00F6, |
| (unsigned int) 0x00F7, |
| (unsigned int) 0x00F8, |
| (unsigned int) 0x00F9, |
| (unsigned int) 0x00FA, |
| (unsigned int) 0x00FB, |
| (unsigned int) 0x00FC, |
| (unsigned int) 0x00FD, |
| (unsigned int) 0x00FE, |
| (unsigned int) 0x00FF |
| }; |
| |
| /* Exercise all 3 byte lengths: any ASCII character is 1 byte, 0xFC maps to |
| * U+00FC which is 2 bytes, and 0x80 maps to U+20AC which is 3 bytes. |
| */ |
| static const char *example_source = "print('Hello w\xfcrld - \x80');"; |
| |
| /* Example: compile and run test source encoded in Windows codepage 1252. */ |
| int main(int argc, char *argv[]) { |
| duk_context *ctx; |
| |
| (void) argc; (void) argv; |
| |
| ctx = duk_create_heap_default(); |
| if (!ctx) { |
| printf("Failed to create Duktape heap.\n"); |
| return 1; |
| } |
| |
| duk_decode_string_codepage(ctx, example_source, strlen(example_source), cp1252); |
| duk_eval_noresult(ctx); |
| |
| duk_destroy_heap(ctx); |
| return 0; |
| } |