Blame view

node_modules/natural-compare/index.js 1.27 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  
  
  
  /*
   * @version    1.4.0
   * @date       2015-10-26
   * @stability  3 - Stable
   * @author     Lauri Rooden (https://github.com/litejs/natural-compare-lite)
   * @license    MIT License
   */
  
  
  var naturalCompare = function(a, b) {
  	var i, codeA
  	, codeB = 1
  	, posA = 0
  	, posB = 0
  	, alphabet = String.alphabet
  
  	function getCode(str, pos, code) {
  		if (code) {
  			for (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i;
  			return +str.slice(pos - 1, i)
  		}
  		code = alphabet && alphabet.indexOf(str.charAt(pos))
  		return code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code
  			: code < 46 ? 65               // -
  			: code < 48 ? code - 1
  			: code < 58 ? code + 18        // 0-9
  			: code < 65 ? code - 11
  			: code < 91 ? code + 11        // A-Z
  			: code < 97 ? code - 37
  			: code < 123 ? code + 5        // a-z
  			: code - 63
  	}
  
  
  	if ((a+="") != (b+="")) for (;codeB;) {
  		codeA = getCode(a, posA++)
  		codeB = getCode(b, posB++)
  
  		if (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) {
  			codeA = getCode(a, posA, posA)
  			codeB = getCode(b, posB, posA = i)
  			posB = i
  		}
  
  		if (codeA != codeB) return (codeA < codeB) ? -1 : 1
  	}
  	return 0
  }
  
  try {
  	module.exports = naturalCompare;
  } catch (e) {
  	String.naturalCompare = naturalCompare;
  }