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 |
|