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;
- }
|