punycode: Update to v0.1.1.
authorMathias Bynens <mathias@qiwi.be>
Sun, 13 Nov 2011 09:39:24 +0000 (10:39 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Sun, 13 Nov 2011 14:38:27 +0000 (15:38 +0100)
lib/punycode.js

index c2f0cf5..b6122a9 100644 (file)
        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);
        }
 
        /**
 
        /**
         * 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
        }
 
        /**
-        * 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
         */
        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;
                });
        }
 
        /** 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
                 */