Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
punycode: Update to v0.1.1.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathiasbynens authored and bnoordhuis committed Nov 13, 2011
1 parent 3421f43 commit 897208e
Showing 1 changed file with 25 additions and 21 deletions.
46 changes: 25 additions & 21 deletions lib/punycode.js
Expand Up @@ -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.',
Expand Down Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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;
});
}
Expand All @@ -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
*/
Expand Down

0 comments on commit 897208e

Please sign in to comment.