diff options
Diffstat (limited to 'lib/punycode.js')
-rw-r--r-- | lib/punycode.js | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/lib/punycode.js b/lib/punycode.js index c2f0cf5ab..b6122a9ed 100644 --- a/lib/punycode.js +++ b/lib/punycode.js @@ -34,6 +34,10 @@ initialN = 128, // 0x80 delimiter = '-', // '\x2D' + /** Regular expressions */ + regexASCII = /[^\x20-\x7e]/, + regexPunycode = /^xn--/, + /** Error messages */ errors = { 'overflow': 'Overflow: input needs wider integers to process.', @@ -87,7 +91,7 @@ */ function mapDomain(string, fn) { var glue = '.'; - return map(string.toLowerCase().split(glue), fn).join(glue); + return map(string.split(glue), fn).join(glue); } /** @@ -196,6 +200,7 @@ /** * Converts a basic code point to lowercase is `flag` is falsy, or to + * uppercase if `flag` is truthy. The code point is unchanged if it's * caseless. The behavior is undefined if `codePoint` is not a basic code * point. * @private @@ -483,22 +488,6 @@ } /** - * Converts a Unicode string representing a domain name to Punycode. Only the - * non-ASCII parts of the domain name will be converted, i.e. it doesn't - * matter if you call it with a domain that's already in ASCII. - * @memberOf Punycode - * @param {String} domain The domain name to convert, as a Unicode string. - * @returns {String} The Punycode representation of the given domain name. - */ - function toASCII(domain) { - return mapDomain(domain, function(string) { - return string.match(/[^a-zA-Z0-9-]/) - ? 'xn--' + encode(string) - : string; - }); - } - - /** * Converts a Punycode string representing a domain name to Unicode. Only the * Punycoded parts of the domain name will be converted, i.e. it doesn't * matter if you call it on a string that has already been converted to @@ -510,8 +499,24 @@ */ function toUnicode(domain) { return mapDomain(domain, function(string) { - return string.match(/^xn--/) - ? decode(string.slice(4)) + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name to Punycode. Only the + * non-ASCII parts of the domain name will be converted, i.e. it doesn't + * matter if you call it with a domain that's already in ASCII. + * @memberOf Punycode + * @param {String} domain The domain name to convert, as a Unicode string. + * @returns {String} The Punycode representation of the given domain name. + */ + function toASCII(domain) { + return mapDomain(domain, function(string) { + return regexASCII.test(string) + ? 'xn--' + encode(string) : string; }); } @@ -520,11 +525,10 @@ /** Define the public API */ Punycode = { - 'version': '0.0.1337', + 'version': '0.1.1', /** * An object of methods to convert from JavaScript's internal character * representation to Unicode and back. - * @static * @memberOf Punycode * @type Object */ |