From 897208e06dbad5e07bb592af4ed6746aef68554e Mon Sep 17 00:00:00 2001 From: Mathias Bynens Date: Sun, 13 Nov 2011 10:39:24 +0100 Subject: punycode: Update to v0.1.1. --- lib/punycode.js | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'lib/punycode.js') 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 @@ -482,22 +487,6 @@ return output.join(''); } - /** - * 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 @@ -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 */ -- cgit v1.2.1