| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | var fs  = require("fs");var Iconv  = require("iconv").Iconv;var encodingFamilies = [    {        // Windows code pages        encodings: [1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258],        convert: function(cp) {            return {                name: "windows-"+cp,                aliases: ["win"+cp, "cp"+cp, ""+cp],            }        }    },    {        // ISO-8859 code pages        encodings: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16],        convert: function(i) {            return {                name: "iso-8859-"+i,                aliases: ["cp"+(28590+i), (28590+i)],            }        }    },    {        // IBM/DOS code pages        encodings: [437, 737, 775, 850, 852, 855, 857, 858, 860, 861, 862, 863, 864, 865, 866, 869],        convert: function(cp) {            return {                name: "CP"+cp,                aliases: ["ibm"+cp, ""+cp],            }        }    },    {        // Macintosh code pages        encodings: ["macCroatian", "macCyrillic", "macGreek",                     "macIceland", "macRoman", "macRomania",                     "macThai", "macTurkish", "macUkraine"],    },    {        // KOI8 code pages        encodings: ["KOI8-R", "KOI8-U"],    },];var encodings = {    // Aliases.    "ascii8bit": "ascii",    "usascii": "ascii",    "latin1": "iso88591",    "latin2": "iso88592",    "latin3": "iso88593",    "latin4": "iso88594",    "latin6": "iso885910",    "latin7": "iso885913",    "latin8": "iso885914",    "latin9": "iso885915",    "latin10": "iso885916",    "cp819": "iso88951",    "arabic": "iso88596",    "arabic8": "iso88596",    "greek" : "iso88597",    "greek8" : "iso88597",    "hebrew": "iso88598",    "hebrew8": "iso88598",    "turkish": "iso88599",    "turkish8": "iso88599",    "thai": "iso885911",    "thai8": "iso885911",    "tis620": "iso885911",    "windows874": "iso885911",    "win874": "iso885911",    "cp874": "iso885911",    "874": "iso885911",    "celtic": "iso885914",    "celtic8": "iso885914",    "cp20866": "koi8r",    "20866": "koi8r",    "ibm878": "koi8r",    "cp21866": "koi8u",    "21866": "koi8u",    "ibm1168": "koi8u",    };// Add all encodings from encodingFamilies.encodingFamilies.forEach(function(family){    family.encodings.forEach(function(encoding){        if (family.convert)            encoding = family.convert(encoding);        var encodingIconvName = encoding.name ? encoding.name : encoding;         var encodingName = encodingIconvName.replace(/[-_]/g, "").toLowerCase();        encodings[encodingName] = {            type: "singlebyte",            chars: generateCharsString(encodingIconvName)        };        if (encoding.aliases)            encoding.aliases.forEach(function(alias){                encodings[alias] = encodingName;            });    });});// Write encodings.fs.writeFileSync("encodings/singlebyte.js",     "module.exports = " + JSON.stringify(encodings, undefined, "  ") + ";");function generateCharsString(encoding) {    console.log("Generate encoding for " + encoding);    var iconvToUtf8 = new Iconv(encoding, "UTF-8");    var chars = "";    for (var b = 0x80; b < 0x100; b++) {        try {            var convertedChar = iconvToUtf8.convert(new Buffer([b])).toString();                        if (convertedChar.length != 1)                throw new Error("Single-byte encoding error: Must return single char.");        } catch (exception) {            if (exception.code === "EILSEQ") {                convertedChar = "\ufffd";            } else {                throw exception;            }        }        chars += convertedChar;    }    return chars;}
 |