-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex-browser.js
83 lines (65 loc) · 2.19 KB
/
index-browser.js
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
77
78
79
80
81
82
83
const checkUTF = require("./components/checkUTF.js");
const processContent = require("./components/processContent.js");
const checkByteOrderMark = require("./components/checkByteOrderMark.js");
module.exports = (file) => {
return new Promise((resolve, reject) => {
const fileInfo = {
encoding: null,
language: null,
confidence: {
encoding: null,
language: null,
},
};
const data = {};
// Check the byte order mark!
const byteOrderMarkBuffer = new FileReader();
byteOrderMarkBuffer.onload = () => {
const uInt8String = new Uint8Array(byteOrderMarkBuffer.result).slice(0, 4).join(" ");
const byteOrderMark = checkByteOrderMark(uInt8String);
if (byteOrderMark) {
fileInfo.encoding = byteOrderMark;
fileInfo.confidence.encoding = 1;
const byteOrderMarkReader = new FileReader();
byteOrderMarkReader.onload = () => {
data.content = byteOrderMarkReader.result;
resolve(processContent(data, fileInfo));
};
byteOrderMarkReader.onerror = (err) => {
reject(err);
};
byteOrderMarkReader.readAsText(file, fileInfo.encoding);
} else {
// Read with UTF-8 first, then with ISO-8859-1
const utfReader = new FileReader();
utfReader.onload = () => {
const utfContent = utfReader.result;
const utf8 = checkUTF(utfContent);
if (utf8) {
fileInfo.encoding = "UTF-8";
fileInfo.confidence.encoding = 1;
}
if (utf8) {
data.content = utfContent;
resolve(processContent(data, fileInfo));
} else {
const isoReader = new FileReader();
isoReader.onload = () => {
data.content = isoReader.result;
resolve(processContent(data, fileInfo));
};
isoReader.readAsText(file, "ISO-8859-1");
}
};
utfReader.onerror = (err) => {
reject(err);
};
utfReader.readAsText(file, "UTF-8");
}
};
byteOrderMarkBuffer.onerror = (err) => {
reject(err);
};
byteOrderMarkBuffer.readAsArrayBuffer(file);
});
};