[Pkg-javascript-commits] [node-encoding] 01/02: Imported Upstream version 0.1.12

Mathias Behrle mbehrle at moszumanska.debian.org
Sat Jul 23 13:33:52 UTC 2016


This is an automated email from the git hooks/post-receive script.

mbehrle pushed a commit to branch debian
in repository node-encoding.

commit a8bf2f651ea86dff081a8a7974d0773533b849bc
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Mon Jul 18 19:16:42 2016 +0200

    Imported Upstream version 0.1.12
---
 .gitignore          |   1 +
 .travis.yml         |  25 ++++++++++++
 LICENSE             |  16 ++++++++
 README.md           |  52 ++++++++++++++++++++++++
 lib/encoding.js     | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/iconv-loader.js |  14 +++++++
 package.json        |  19 +++++++++
 test/test.js        |  75 ++++++++++++++++++++++++++++++++++
 8 files changed, 315 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b512c09
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..abc4f48
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,25 @@
+language: node_js
+sudo: false
+node_js:
+  - "0.10"
+  - 0.12
+  - iojs
+  - 4
+  - 5
+env:
+  - CXX=g++-4.8
+addons:
+  apt:
+    sources:
+      - ubuntu-toolchain-r-test
+    packages:
+      - g++-4.8
+notifications:
+  email:
+    - andris at kreata.ee
+  webhooks:
+    urls:
+      - https://webhooks.gitter.im/e/0ed18fd9b3e529b3c2cc
+    on_success: change  # options: [always|never|change] default: always
+    on_failure: always  # options: [always|never|change] default: always
+    on_start: false     # default: false
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..33f5a9a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,16 @@
+Copyright (c) 2012-2014 Andris Reinman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..62e6bf8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,52 @@
+# Encoding
+
+**encoding** is a simple wrapper around [node-iconv](https://github.com/bnoordhuis/node-iconv) and [iconv-lite](https://github.com/ashtuchkin/iconv-lite/) to convert strings from one encoding to another. If node-iconv is not available for some reason,
+iconv-lite will be used instead of it as a fallback.
+
+[![Build Status](https://secure.travis-ci.org/andris9/encoding.svg)](http://travis-ci.org/andris9/Nodemailer)
+[![npm version](https://badge.fury.io/js/encoding.svg)](http://badge.fury.io/js/encoding)
+
+## Install
+
+Install through npm
+
+    npm install encoding
+
+## Usage
+
+Require the module
+
+    var encoding = require("encoding");
+
+Convert with encoding.convert()
+
+    var resultBuffer = encoding.convert(text, toCharset, fromCharset);
+
+Where
+
+  * **text** is either a Buffer or a String to be converted
+  * **toCharset** is the characterset to convert the string
+  * **fromCharset** (*optional*, defaults to UTF-8) is the source charset
+
+Output of the conversion is always a Buffer object.
+
+Example
+
+    var result = encoding.convert("ÕÄÖÜ", "Latin_1");
+    console.log(result); //<Buffer d5 c4 d6 dc>
+
+## iconv support
+
+By default only iconv-lite is bundled. If you need node-iconv support, you need to add it
+as an additional dependency for your project:
+
+    ...,
+    "dependencies":{
+        "encoding": "*",
+        "iconv": "*"
+    },
+    ...
+
+## License
+
+**MIT**
diff --git a/lib/encoding.js b/lib/encoding.js
new file mode 100644
index 0000000..cbea3ce
--- /dev/null
+++ b/lib/encoding.js
@@ -0,0 +1,113 @@
+'use strict';
+
+var iconvLite = require('iconv-lite');
+// Load Iconv from an external file to be able to disable Iconv for webpack
+// Add /\/iconv-loader$/ to webpack.IgnorePlugin to ignore it
+var Iconv = require('./iconv-loader');
+
+// Expose to the world
+module.exports.convert = convert;
+
+/**
+ * Convert encoding of an UTF-8 string or a buffer
+ *
+ * @param {String|Buffer} str String to be converted
+ * @param {String} to Encoding to be converted to
+ * @param {String} [from='UTF-8'] Encoding to be converted from
+ * @param {Boolean} useLite If set to ture, force to use iconvLite
+ * @return {Buffer} Encoded string
+ */
+function convert(str, to, from, useLite) {
+    from = checkEncoding(from || 'UTF-8');
+    to = checkEncoding(to || 'UTF-8');
+    str = str || '';
+
+    var result;
+
+    if (from !== 'UTF-8' && typeof str === 'string') {
+        str = new Buffer(str, 'binary');
+    }
+
+    if (from === to) {
+        if (typeof str === 'string') {
+            result = new Buffer(str);
+        } else {
+            result = str;
+        }
+    } else if (Iconv && !useLite) {
+        try {
+            result = convertIconv(str, to, from);
+        } catch (E) {
+            console.error(E);
+            try {
+                result = convertIconvLite(str, to, from);
+            } catch (E) {
+                console.error(E);
+                result = str;
+            }
+        }
+    } else {
+        try {
+            result = convertIconvLite(str, to, from);
+        } catch (E) {
+            console.error(E);
+            result = str;
+        }
+    }
+
+
+    if (typeof result === 'string') {
+        result = new Buffer(result, 'utf-8');
+    }
+
+    return result;
+}
+
+/**
+ * Convert encoding of a string with node-iconv (if available)
+ *
+ * @param {String|Buffer} str String to be converted
+ * @param {String} to Encoding to be converted to
+ * @param {String} [from='UTF-8'] Encoding to be converted from
+ * @return {Buffer} Encoded string
+ */
+function convertIconv(str, to, from) {
+    var response, iconv;
+    iconv = new Iconv(from, to + '//TRANSLIT//IGNORE');
+    response = iconv.convert(str);
+    return response.slice(0, response.length);
+}
+
+/**
+ * Convert encoding of astring with iconv-lite
+ *
+ * @param {String|Buffer} str String to be converted
+ * @param {String} to Encoding to be converted to
+ * @param {String} [from='UTF-8'] Encoding to be converted from
+ * @return {Buffer} Encoded string
+ */
+function convertIconvLite(str, to, from) {
+    if (to === 'UTF-8') {
+        return iconvLite.decode(str, from);
+    } else if (from === 'UTF-8') {
+        return iconvLite.encode(str, to);
+    } else {
+        return iconvLite.encode(iconvLite.decode(str, from), to);
+    }
+}
+
+/**
+ * Converts charset name if needed
+ *
+ * @param {String} name Character set
+ * @return {String} Character set name
+ */
+function checkEncoding(name) {
+    return (name || '').toString().trim().
+    replace(/^latin[\-_]?(\d+)$/i, 'ISO-8859-$1').
+    replace(/^win(?:dows)?[\-_]?(\d+)$/i, 'WINDOWS-$1').
+    replace(/^utf[\-_]?(\d+)$/i, 'UTF-$1').
+    replace(/^ks_c_5601\-1987$/i, 'CP949').
+    replace(/^us[\-_]?ascii$/i, 'ASCII').
+    toUpperCase();
+}
diff --git a/lib/iconv-loader.js b/lib/iconv-loader.js
new file mode 100644
index 0000000..8e925fd
--- /dev/null
+++ b/lib/iconv-loader.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var iconv_package;
+var Iconv;
+
+try {
+    // this is to fool browserify so it doesn't try (in vain) to install iconv.
+    iconv_package = 'iconv';
+    Iconv = require(iconv_package).Iconv;
+} catch (E) {
+    // node-iconv not present
+}
+
+module.exports = Iconv;
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..a8f7a2c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,19 @@
+{
+  "name": "encoding",
+  "version": "0.1.12",
+  "description": "Convert encodings, uses iconv by default and fallbacks to iconv-lite if needed",
+  "main": "lib/encoding.js",
+  "scripts": {
+    "test": "nodeunit test"
+  },
+  "repository": "https://github.com/andris9/encoding.git",
+  "author": "Andris Reinman",
+  "license": "MIT",
+  "dependencies": {
+    "iconv-lite": "~0.4.13"
+  },
+  "devDependencies": {
+    "iconv": "~2.1.11",
+    "nodeunit": "~0.9.1"
+  }
+}
diff --git a/test/test.js b/test/test.js
new file mode 100644
index 0000000..0de4dcb
--- /dev/null
+++ b/test/test.js
@@ -0,0 +1,75 @@
+'use strict';
+
+var Iconv = require('../lib/iconv-loader');
+var encoding = require('../lib/encoding');
+
+exports['General tests'] = {
+
+    'Iconv is available': function (test) {
+        test.ok(Iconv);
+        test.done();
+    },
+
+    'From UTF-8 to Latin_1 with Iconv': function (test) {
+        var input = 'ÕÄÖÜ',
+            expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]);
+        test.deepEqual(encoding.convert(input, 'latin1'), expected);
+        test.done();
+    },
+
+    'From Latin_1 to UTF-8 with Iconv': function (test) {
+        var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]),
+            expected = 'ÕÄÖÜ';
+        test.deepEqual(encoding.convert(input, 'utf-8', 'latin1').toString(), expected);
+        test.done();
+    },
+
+    'From UTF-8 to UTF-8 with Iconv': function (test) {
+        var input = 'ÕÄÖÜ',
+            expected = new Buffer('ÕÄÖÜ');
+        test.deepEqual(encoding.convert(input, 'utf-8', 'utf-8'), expected);
+        test.done();
+    },
+
+    'From Latin_13 to Latin_15 with Iconv': function (test) {
+        var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xd0]),
+            expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xA6]);
+        test.deepEqual(encoding.convert(input, 'latin_15', 'latin13'), expected);
+        test.done();
+    },
+
+    'From ISO-2022-JP to UTF-8 with Iconv': function (test) {
+        var input = new Buffer('GyRCM1g5OzU7PVEwdzgmPSQ4IUYkMnFKczlwGyhC', 'base64'),
+            expected = new Buffer('5a2m5qCh5oqA6KGT5ZOh56CU5L+u5qSc6KiO5Lya5aCx5ZGK', 'base64');
+        test.deepEqual(encoding.convert(input, 'utf-8', 'ISO-2022-JP'), expected);
+        test.done();
+    },
+
+    'From UTF-8 to Latin_1 with iconv-lite': function (test) {
+        var input = 'ÕÄÖÜ',
+            expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]);
+        test.deepEqual(encoding.convert(input, 'latin1', false, true), expected);
+        test.done();
+    },
+
+    'From Latin_1 to UTF-8 with iconv-lite': function (test) {
+        var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc]),
+            expected = 'ÕÄÖÜ';
+        test.deepEqual(encoding.convert(input, 'utf-8', 'latin1', true).toString(), expected);
+        test.done();
+    },
+
+    'From UTF-8 to UTF-8 with iconv-lite': function (test) {
+        var input = 'ÕÄÖÜ',
+            expected = new Buffer('ÕÄÖÜ');
+        test.deepEqual(encoding.convert(input, 'utf-8', 'utf-8', true), expected);
+        test.done();
+    },
+
+    'From Latin_13 to Latin_15 with iconv-lite': function (test) {
+        var input = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xd0]),
+            expected = new Buffer([0xd5, 0xc4, 0xd6, 0xdc, 0xA6]);
+        test.deepEqual(encoding.convert(input, 'latin_15', 'latin13', true), expected);
+        test.done();
+    }
+};

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-encoding.git



More information about the Pkg-javascript-commits mailing list