|
var unicode = { |
|
letters: { |
|
singles: [ |
|
170,181,186,748,750,886,887,902,908,1369,1646,1647,1749,1765,1766,1774, |
|
1775,1791,1808,1969,2036,2037,2042,2365,2384,2417,2418,2447,2448,2482, |
|
2493,2510,2524,2525,2544,2545,2575,2576,2610,2611,2613,2614,2616,2617, |
|
2654,2738,2739,2749,2768,2784,2785,2831,2832,2866,2867,2877,2908,2909, |
|
2929,2947,2969,2970,2972,2974,2975,2979,2980,3024,3133,3160,3161,3168, |
|
3169,3261,3294,3296,3297,3389,3424,3425,3517,3634,3635,3713,3714,3716, |
|
3719,3720,3722,3725,3749,3751,3754,3755,3762,3763,3773,3782,3804,3805, |
|
3840,4159,4193,4197,4198,4238,4348,4696,4800,6103,6108,6314,7086,7087, |
|
8025,8027,8029,8126,8305,8319,8450,8455,8469,8484,8486,8488,8526,11631, |
|
11823,13312,19893,19968,40899,42508,42891,42892,65392,65438,65439 |
|
], |
|
ranges: [ |
|
65,90,97,122,192,214,216,246,248,705,710,721,736,740,880,884,890,893,904, |
|
906,910,929,931,1013,1015,1153,1162,1315,1329,1366,1377,1415,1488,1514, |
|
1520,1522,1569,1610,1649,1747,1786,1788,1810,1839,1869,1957,1994,2026, |
|
2308,2361,2392,2401,2427,2431,2437,2444,2451,2472,2474,2480,2486,2489, |
|
2527,2529,2565,2570,2579,2600,2602,2608,2649,2652,2674,2676,2693,2701, |
|
2703,2705,2707,2728,2730,2736,2741,2745,2821,2828,2835,2856,2858,2864, |
|
2869,2873,2911,2913,2949,2954,2958,2960,2962,2965,2984,2986,2990,3001, |
|
3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3205,3212,3214,3216, |
|
3218,3240,3242,3251,3253,3257,3333,3340,3342,3344,3346,3368,3370,3385, |
|
3450,3455,3461,3478,3482,3505,3507,3515,3520,3526,3585,3632,3648,3654, |
|
3732,3735,3737,3743,3745,3747,3757,3760,3776,3780,3904,3911,3913,3948, |
|
3976,3979,4096,4138,4176,4181,4186,4189,4206,4208,4213,4225,4256,4293, |
|
4304,4346,4352,4441,4447,4514,4520,4601,4608,4680,4682,4685,4688,4694, |
|
4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4802,4805, |
|
4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740, |
|
5743,5750,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937, |
|
5952,5969,5984,5996,5998,6000,6016,6067,6176,6263,6272,6312,6400,6428, |
|
6480,6509,6512,6516,6528,6569,6593,6599,6656,6678,6917,6963,6981,6987, |
|
7043,7072,7168,7203,7245,7247,7258,7293,7424,7615,7680,7957,7960,7965, |
|
7968,8005,8008,8013,8016,8023,8031,8061,8064,8116,8118,8124,8130,8132, |
|
8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8187,8336,8340, |
|
8458,8467,8473,8477,8490,8493,8495,8505,8508,8511,8517,8521,8544,8584, |
|
11264,11310,11312,11358,11360,11375,11377,11389,11392,11492,11520,11557, |
|
11568,11621,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710, |
|
11712,11718,11720,11726,11728,11734,11736,11742,12293,12295,12321,12329, |
|
12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543, |
|
12549,12589,12593,12686,12704,12727,12784,12799,40960,41391,42560,42591, |
|
42594,42605,42623,42647,42775,42783,42786,42888,64256,64262,64275,64279, |
|
65313,65338,65345,65370 |
|
] |
|
}, |
|
others: { |
|
singles: [ |
|
95,1471,1473,1474,1476,1477,1479,1648,1767,1768,1809,2305,2306,2364,2381, |
|
2402,2403,2433,2492,2509,2530,2531,2561,2562,2620,2625,2626,2631,2632, |
|
2641,2677,2689,2690,2748,2759,2760,2765,2786,2787,2817,2876,2879,2893, |
|
2902,2914,2915,2946,3008,3021,3157,3158,3170,3171,3260,3263,3270,3276, |
|
3277,3298,3299,3405,3426,3427,3530,3542,3633,3761,3771,3772,3864,3865, |
|
3893,3895,3897,3974,3975,4038,4153,4154,4157,4158,4184,4185,4226,4229, |
|
4230,4237,4959,5970,5971,6002,6003,6086,6109,6313,6439,6440,6450,6679, |
|
6680,6964,6972,6978,7040,7041,7080,7081,7222,7223,7678,7679,8255,8256, |
|
8276,8417,12441,12442,42607,42620,42621,43010,43014,43019,43045,43046, |
|
43204,43569,43570,43573,43574,43587,43596,64286,65075,65076,65343 |
|
], |
|
ranges: [ |
|
48,57,768,879,1155,1159,1425,1469,1552,1562,1611,1630,1632,1641,1750,1756, |
|
1759,1764,1770,1773,1776,1785,1840,1866,1958,1968,1984,1993,2027,2035, |
|
2369,2376,2385,2388,2406,2415,2497,2500,2534,2543,2635,2637,2662,2673, |
|
2753,2757,2790,2799,2881,2884,2918,2927,3046,3055,3134,3136,3142,3144, |
|
3146,3149,3174,3183,3302,3311,3393,3396,3430,3439,3538,3540,3636,3642, |
|
3655,3662,3664,3673,3764,3769,3784,3789,3792,3801,3872,3881,3953,3966, |
|
3968,3972,3984,3991,3993,4028,4141,4144,4146,4151,4160,4169,4190,4192, |
|
4209,4212,4240,4249,5906,5908,5938,5940,6071,6077,6089,6099,6112,6121, |
|
6155,6157,6160,6169,6432,6434,6457,6459,6470,6479,6608,6617,6912,6915, |
|
6966,6970,6992,7001,7019,7027,7074,7077,7088,7097,7212,7219,7232,7241, |
|
7248,7257,7616,7654,8400,8412,8421,8432,11744,11775,12330,12335,42528, |
|
42537,43216,43225,43264,43273,43302,43309,43335,43345,43561,43566,43600, |
|
43609,65024,65039,65056,65062,65101,65103,65296,65305 |
|
] |
|
} |
|
}; |
|
|
|
var isInCategory = function(c, category) { |
|
var r = category.ranges; |
|
for(var i = 0; i < r.length - 1; i += 2) |
|
if(c >= r[i] && c <= r[i + 1]) |
|
return true; |
|
|
|
if(category.singles.indexOf(c) >= 0) |
|
return true; |
|
|
|
return false; |
|
}; |
|
|
|
var isLetter = function(c) { |
|
return isInCategory(c, unicode.letters); |
|
}; |
|
|
|
var isOther = function(c) { |
|
return isInCategory(c, unicode.others); |
|
}; |
|
|
|
var isIdentifierStart = function(c) { |
|
return c === "$" || c === '_' || isLetter(c.charCodeAt(0)); |
|
}; |
|
|
|
var isIdentifierChar = function(c) { |
|
return isIdentifierStart(c) || isOther(c.charCodeAt(0)); |
|
}; |
|
|
|
var isIdentifier = function(s) { |
|
if(!s.length) |
|
return false; |
|
|
|
if(!isIdentifierStart(s[0])) |
|
return false; |
|
|
|
for(var i = 1; i < s.length; i++) |
|
if(!isIdentifierChar(s[i])) |
|
return false; |
|
|
|
return true; |
|
}; |
|
|
|
module.exports = isIdentifier; |