1 |
dpavlin |
1 |
|
2 |
|
|
// locale in which to sort (basically a alphabet in correct dictionary sort order) |
3 |
|
|
var _lc_locale = '_0123456789aAáÁãÃâÂäı¡bBcCçÇèÈæÆdDïÏðÐeEéÉìÌëËêÊfFgGhHiIíÍîÎjJkKlLåŵ¥³£mMnNñÑòÒoOóÓôÔöÖõÕpPqQrRàÀøØsS¶¦ºªß¹©tT»«þÞuUúÚùÙüÜûÛvVwWxXyYýÝzZ¼¬¿¯¾®'; |
4 |
|
|
|
5 |
|
|
// produce equivavlent of alphabet in native JavaScript sort order |
6 |
|
|
var _lc_native = _lc_locale.split("").sort().join(""); |
7 |
|
|
|
8 |
|
|
function lc_debug(msg) { |
9 |
|
|
// comment out to disable debug |
10 |
|
|
//return; |
11 |
|
|
document.write('<div style="color: gray; font-size: small;">'+msg+'</div>'); |
12 |
|
|
} |
13 |
|
|
|
14 |
|
|
// create character remapping array |
15 |
|
|
var _lc_l2n_arr = new Array(); |
16 |
|
|
var r = 0; |
17 |
|
|
for (var i=0; i < _lc_locale.length; i++) { |
18 |
|
|
if (_lc_locale.charAt(i) != _lc_native.charAt(i)) { |
19 |
|
|
_lc_l2n_arr[_lc_locale.charAt(i)] = _lc_native.charAt(i); |
20 |
|
|
r++; |
21 |
|
|
} |
22 |
|
|
} |
23 |
|
|
|
24 |
|
|
lc_debug( |
25 |
|
|
"_lc_native:"+_lc_native+"<br>"+ |
26 |
|
|
"_lc_locale:"+_lc_locale+"<br>"+ |
27 |
|
|
"remapped "+r+" characters from table of "+_lc_locale.length+"/"+_lc_native.length+" locale/native characters<br>" |
28 |
|
|
); |
29 |
|
|
|
30 |
|
|
// comment out following line to disable caching of locale terms |
31 |
|
|
var _lc_cache = new Array(); |
32 |
|
|
|
33 |
|
|
// convert string to correct sort order according to locale |
34 |
|
|
function _lc(str) { |
35 |
|
|
if (_lc_cache && _lc_cache[str]) { |
36 |
|
|
return _lc_cache[str]; |
37 |
|
|
} else { |
38 |
|
|
var out = ''; |
39 |
|
|
for (var i=0; i <= str.length; i++) { |
40 |
|
|
var c = str.charAt(i); |
41 |
|
|
if (_lc_l2n_arr[c]) { |
42 |
|
|
out += _lc_l2n_arr[c]; |
43 |
|
|
} else { |
44 |
|
|
out += c; |
45 |
|
|
} |
46 |
|
|
} |
47 |
|
|
if (_lc_cache) _lc_cache[str] = out; |
48 |
|
|
return out; |
49 |
|
|
} |
50 |
|
|
} |
51 |
|
|
|
52 |
|
|
// sort function with locale support |
53 |
|
|
function _lc_sort(a,b) { |
54 |
|
|
var a_l = _lc(a); |
55 |
|
|
var b_l = _lc(b); |
56 |
|
|
|
57 |
|
|
lc_debug(a+' '+( a_l < b_l ? '<' : ( a_l == b_l ? '==' : '>' ) )+' '+b+' [ '+a_l+' '+b_l+' ]'); |
58 |
|
|
|
59 |
|
|
if (a_l < b_l) { |
60 |
|
|
return -1; |
61 |
|
|
} else if (a_l == b_l) { |
62 |
|
|
return 0; |
63 |
|
|
} else { |
64 |
|
|
return 1; |
65 |
|
|
} |
66 |
|
|
} |
67 |
|
|
|