Blame view

node_modules/is-utf8/is-utf8.js 2.45 KB
aaac7fed   liuqimichale   add
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  
  exports = module.exports = function(bytes)
  {
      var i = 0;
      while(i < bytes.length)
      {
          if(     (// ASCII
                      bytes[i] == 0x09 ||
                      bytes[i] == 0x0A ||
                      bytes[i] == 0x0D ||
                      (0x20 <= bytes[i] && bytes[i] <= 0x7E)
                  )
            ) {
                i += 1;
                continue;
            }
  
          if(     (// non-overlong 2-byte
                      (0xC2 <= bytes[i] && bytes[i] <= 0xDF) &&
                      (0x80 <= bytes[i+1] && bytes[i+1] <= 0xBF)
                  )
            ) {
                i += 2;
                continue;
            }
  
          if(     (// excluding overlongs
                      bytes[i] == 0xE0 &&
                      (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
                      (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
                  ) ||
                  (// straight 3-byte
                   ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) ||
                    bytes[i] == 0xEE ||
                    bytes[i] == 0xEF) &&
                   (0x80 <= bytes[i + 1] && bytes[i+1] <= 0xBF) &&
                   (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
                  ) ||
                  (// excluding surrogates
                   bytes[i] == 0xED &&
                   (0x80 <= bytes[i+1] && bytes[i+1] <= 0x9F) &&
                   (0x80 <= bytes[i+2] && bytes[i+2] <= 0xBF)
                  )
            ) {
                i += 3;
                continue;
            }
  
          if(     (// planes 1-3
                      bytes[i] == 0xF0 &&
                      (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
                      (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
                      (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
                  ) ||
                  (// planes 4-15
                   (0xF1 <= bytes[i] && bytes[i] <= 0xF3) &&
                   (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
                   (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
                   (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
                  ) ||
                  (// plane 16
                   bytes[i] == 0xF4 &&
                   (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) &&
                   (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
                   (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
                  )
            ) {
                i += 4;
                continue;
            }
  
          return false;
      }
  
      return true;
  }