Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: lib/punycode.js

Issue 29350076: Issue 4350 - Update punycode.js to 2.0.0 (Closed)
Left Patch Set: Created Aug. 23, 2016, 3:29 p.m.
Right Patch Set: Addressed feedback Created Aug. 23, 2016, 4:49 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /*
2 * Copyright (C) 2011-2016 Mathias Bynens <https://mathiasbynens.be/>
3 * Copyright (C) 2016 Eyeo GmbH (Minor modifications for compatibility.)
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
1 'use strict'; 25 'use strict';
2 26
3 /** Highest positive signed 32-bit float value */ 27 /** Highest positive signed 32-bit float value */
4 const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 28 const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
5 29
6 /** Bootstring parameters */ 30 /** Bootstring parameters */
7 const base = 36; 31 const base = 36;
8 const tMin = 1; 32 const tMin = 1;
9 const tMax = 26; 33 const tMax = 26;
10 const skew = 38; 34 const skew = 38;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } 147 }
124 148
125 /** 149 /**
126 * Creates a string based on an array of numeric code points. 150 * Creates a string based on an array of numeric code points.
127 * @see `punycode.ucs2.decode` 151 * @see `punycode.ucs2.decode`
128 * @memberOf punycode.ucs2 152 * @memberOf punycode.ucs2
129 * @name encode 153 * @name encode
130 * @param {Array} codePoints The array of numeric code points. 154 * @param {Array} codePoints The array of numeric code points.
131 * @returns {String} The new Unicode string (UCS-2). 155 * @returns {String} The new Unicode string (UCS-2).
132 */ 156 */
133 const ucs2encode = array => String.fromCodePoint(...array); 157 const ucs2encode = array => String.fromCodePoint.apply(null, array);
134 158
135 /** 159 /**
136 * Converts a basic code point into a digit/integer. 160 * Converts a basic code point into a digit/integer.
137 * @see `digitToBasic()` 161 * @see `digitToBasic()`
138 * @private 162 * @private
139 * @param {Number} codePoint The basic numeric code point value. 163 * @param {Number} codePoint The basic numeric code point value.
140 * @returns {Number} The numeric value of a basic code point (for use in 164 * @returns {Number} The numeric value of a basic code point (for use in
141 * representing integers) in the range `0` to `base - 1`, or `base` if 165 * representing integers) in the range `0` to `base - 1`, or `base` if
142 * the code point does not represent a value. 166 * the code point does not represent a value.
143 */ 167 */
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 291 }
268 292
269 n += floor(i / out); 293 n += floor(i / out);
270 i %= out; 294 i %= out;
271 295
272 // Insert `n` at position `i` of the output. 296 // Insert `n` at position `i` of the output.
273 output.splice(i++, 0, n); 297 output.splice(i++, 0, n);
274 298
275 } 299 }
276 300
277 » return String.fromCodePoint(...output); 301 » return String.fromCodePoint.apply(null, output);
278 }; 302 };
279 303
280 /** 304 /**
281 * Converts a string of Unicode symbols (e.g. a domain name label) to a 305 * Converts a string of Unicode symbols (e.g. a domain name label) to a
282 * Punycode string of ASCII-only symbols. 306 * Punycode string of ASCII-only symbols.
283 * @memberOf punycode 307 * @memberOf punycode
284 * @param {String} input The string of Unicode symbols. 308 * @param {String} input The string of Unicode symbols.
285 * @returns {String} The resulting Punycode string of ASCII-only symbols. 309 * @returns {String} The resulting Punycode string of ASCII-only symbols.
286 */ 310 */
287 const encode = function(input) { 311 const encode = function(input) {
288 const output = []; 312 const output = [];
289 313
290 // Convert the input in UCS-2 to an array of Unicode code points. 314 // Convert the input in UCS-2 to an array of Unicode code points.
291 input = ucs2decode(input); 315 input = ucs2decode(input);
292 316
293 // Cache the length. 317 // Cache the length.
294 let inputLength = input.length; 318 let inputLength = input.length;
295 319
296 // Initialize the state. 320 // Initialize the state.
297 let n = initialN; 321 let n = initialN;
298 let delta = 0; 322 let delta = 0;
299 let bias = initialBias; 323 let bias = initialBias;
300 324
301 // Handle the basic code points. 325 // Handle the basic code points.
302 » for (const currentValue of input) { 326 » for (let currentValue of input) {
303 if (currentValue < 0x80) { 327 if (currentValue < 0x80) {
304 output.push(stringFromCharCode(currentValue)); 328 output.push(stringFromCharCode(currentValue));
305 } 329 }
306 } 330 }
307 331
308 let basicLength = output.length; 332 let basicLength = output.length;
309 let handledCPCount = basicLength; 333 let handledCPCount = basicLength;
310 334
311 // `handledCPCount` is the number of code points that have been handled; 335 // `handledCPCount` is the number of code points that have been handled;
312 // `basicLength` is the number of basic code points. 336 // `basicLength` is the number of basic code points.
313 337
314 // Finish the basic string with a delimiter unless it's empty. 338 // Finish the basic string with a delimiter unless it's empty.
315 if (basicLength) { 339 if (basicLength) {
316 output.push(delimiter); 340 output.push(delimiter);
317 } 341 }
318 342
319 // Main encoding loop: 343 // Main encoding loop:
320 while (handledCPCount < inputLength) { 344 while (handledCPCount < inputLength) {
321 345
322 // All non-basic code points < n have been handled already. Find the next 346 // All non-basic code points < n have been handled already. Find the next
323 // larger one: 347 // larger one:
324 let m = maxInt; 348 let m = maxInt;
325 » » for (const currentValue of input) { 349 » » for (let currentValue of input) {
326 if (currentValue >= n && currentValue < m) { 350 if (currentValue >= n && currentValue < m) {
327 m = currentValue; 351 m = currentValue;
328 } 352 }
329 } 353 }
330 354
331 // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, 355 // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
332 // but guard against overflow. 356 // but guard against overflow.
333 const handledCPCountPlusOne = handledCPCount + 1; 357 const handledCPCountPlusOne = handledCPCount + 1;
334 if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { 358 if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
335 error('overflow'); 359 error('overflow');
336 } 360 }
337 361
338 delta += (m - n) * handledCPCountPlusOne; 362 delta += (m - n) * handledCPCountPlusOne;
339 n = m; 363 n = m;
340 364
341 » » for (const currentValue of input) { 365 » » for (let currentValue of input) {
342 if (currentValue < n && ++delta > maxInt) { 366 if (currentValue < n && ++delta > maxInt) {
343 error('overflow'); 367 error('overflow');
344 } 368 }
345 if (currentValue == n) { 369 if (currentValue == n) {
346 // Represent delta as a generalized variable-len gth integer. 370 // Represent delta as a generalized variable-len gth integer.
347 let q = delta; 371 let q = delta;
348 for (let k = base; /* no condition */; k += base ) { 372 for (let k = base; /* no condition */; k += base ) {
349 const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); 373 const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
350 if (q < t) { 374 if (q < t) {
351 break; 375 break;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 return mapDomain(input, function(string) { 430 return mapDomain(input, function(string) {
407 return regexNonASCII.test(string) 431 return regexNonASCII.test(string)
408 ? 'xn--' + encode(string) 432 ? 'xn--' + encode(string)
409 : string; 433 : string;
410 }); 434 });
411 }; 435 };
412 436
413 /*--------------------------------------------------------------------------*/ 437 /*--------------------------------------------------------------------------*/
414 438
415 /** Define the public API */ 439 /** Define the public API */
416 const punycode = { 440 exports = {
417 /** 441 /**
418 * A string representing the current Punycode.js version number. 442 * A string representing the current Punycode.js version number.
419 * @memberOf punycode 443 * @memberOf punycode
420 * @type String 444 * @type String
421 */ 445 */
422 'version': '2.0.0', 446 'version': '2.0.0',
423 /** 447 /**
424 * An object of methods to convert from JavaScript's internal character 448 * An object of methods to convert from JavaScript's internal character
425 * representation (UCS-2) to Unicode code points, and back. 449 * representation (UCS-2) to Unicode code points, and back.
426 * @see <https://mathiasbynens.be/notes/javascript-encoding> 450 * @see <https://mathiasbynens.be/notes/javascript-encoding>
427 * @memberOf punycode 451 * @memberOf punycode
428 * @type Object 452 * @type Object
429 */ 453 */
430 'ucs2': { 454 'ucs2': {
431 'decode': ucs2decode, 455 'decode': ucs2decode,
432 'encode': ucs2encode 456 'encode': ucs2encode
433 }, 457 },
434 'decode': decode, 458 'decode': decode,
435 'encode': encode, 459 'encode': encode,
436 'toASCII': toASCII, 460 'toASCII': toASCII,
437 'toUnicode': toUnicode 461 'toUnicode': toUnicode
438 }; 462 };
439
440 module.exports = punycode;
LEFTRIGHT
« no previous file | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld