initialN = 128, // 0x80
delimiter = '-', // '\x2D'
+ /** Regular expressions */
+ regexASCII = /[^\x20-\x7e]/,
+ regexPunycode = /^xn--/,
+
/** Error messages */
errors = {
'overflow': 'Overflow: input needs wider integers to process.',
*/
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
*/