summaryrefslogtreecommitdiff
path: root/lib/punycode.js
diff options
context:
space:
mode:
authorMathias Bynens <mathias@qiwi.be>2011-11-13 10:39:24 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2011-11-13 15:38:27 +0100
commit897208e06dbad5e07bb592af4ed6746aef68554e (patch)
tree876f4b345780255bf70d30c143078e18befa0255 /lib/punycode.js
parent3421f433519411c290c732c64dadbb6547e42235 (diff)
downloadnode-897208e06dbad5e07bb592af4ed6746aef68554e.tar.gz
punycode: Update to v0.1.1.
Diffstat (limited to 'lib/punycode.js')
-rw-r--r--lib/punycode.js46
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
*/