forked from psemu/soe-locale
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsoe-locale.js
More file actions
87 lines (68 loc) · 2.28 KB
/
Copy pathsoe-locale.js
File metadata and controls
87 lines (68 loc) · 2.28 KB
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
84
85
86
87
var fs = require("fs"),
path = require("path");
function parseIndex(data) {
}
function parse(dataFile, indexFile, callback) {
fs.readFile(dataFile, function(err, data) {
if (err) {
callback(err);
return;
}
fs.readFile(indexFile, function(err, indexData) {
if (err) {
callback(err);
return;
}
var strings = parseFromBuffer(data, indexData);
callback(null, strings);
});
});
}
function parseFromBuffer(data, indexData) {
var strings = {},
lines = indexData.toString("utf-8").split("\n");
for (var i=0;i<lines.length;i++) {
var line = lines[i];
if (line.length > 0 && line[0] != "#") {
var parts = line.split("\t"),
hash = +parts[0],
dataStart = +parts[1],
dataLength = +parts[2],
stringData = data.slice(dataStart, dataStart+dataLength).toString("utf-8"),
stringParts = stringData.split("\t"),
flags = stringParts[1],
string = stringParts.slice(2).join("\t");
strings[hash] = {
hash: hash,
flags: flags,
string: string
};
}
}
return strings;
}
function write(strings, dataFile, indexFile, callback) {
var dataStream = fs.createWriteStream(dataFile),
indexStream = fs.createWriteStream(indexFile),
header = new Buffer(3),
offset = 0,
string, dataLength;
header.writeUInt8(0xEF, 0);
header.writeUInt8(0xBB, 1);
header.writeUInt8(0xBF, 2);
dataStream.write(header);
offset += 3;
indexStream.write("## Count: " + strings.length + "\r\n");
for (var i=0;i<strings.length;i++) {
string = strings[i];
dataLength = (string.hash+"").length + string.flags.length + string.string.length + 2;
indexStream.write(string.hash + "\t" + offset + "\t" + dataLength + "\t" + "d\r\n");
dataStream.write(string.hash + "\t" + string.flags + "\t" + string.string + "\r\n");
offset += dataLength + 2;
}
dataStream.end();
indexStream.end();
}
exports.parse = parse;
exports.parseFromBuffer = parseFromBuffer;
exports.write = write;