diff options
author | Yuchen Pei <hi@ypei.me> | 2022-07-28 15:32:10 +1000 |
---|---|---|
committer | Yuchen Pei <hi@ypei.me> | 2022-07-28 15:32:10 +1000 |
commit | 5b10a10743b8459f64fe83e0ff420f69da79c9a4 (patch) | |
tree | c61904d688247790181d4955a4074b8c94302c03 /utilities/hash_script/node_modules/encoding/lib | |
parent | b98cb70b1bcd5b211aaa5d2675f96416911c0647 (diff) |
Moving scripts and utilities into a new utilities dir
Diffstat (limited to 'utilities/hash_script/node_modules/encoding/lib')
-rw-r--r-- | utilities/hash_script/node_modules/encoding/lib/encoding.js | 113 | ||||
-rw-r--r-- | utilities/hash_script/node_modules/encoding/lib/iconv-loader.js | 14 |
2 files changed, 127 insertions, 0 deletions
diff --git a/utilities/hash_script/node_modules/encoding/lib/encoding.js b/utilities/hash_script/node_modules/encoding/lib/encoding.js new file mode 100644 index 0000000..cbea3ce --- /dev/null +++ b/utilities/hash_script/node_modules/encoding/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/utilities/hash_script/node_modules/encoding/lib/iconv-loader.js b/utilities/hash_script/node_modules/encoding/lib/iconv-loader.js new file mode 100644 index 0000000..8e925fd --- /dev/null +++ b/utilities/hash_script/node_modules/encoding/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; |