-
Notifications
You must be signed in to change notification settings - Fork 0
/
xml.js
70 lines (66 loc) · 1.71 KB
/
xml.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
const path = require('path');
const { Parser } = require('htmlparser2');
const _ = require('lodash');
const fs = require('fs').promises;
const { pascalCase } = require('change-case');
const { readFileSync } = require('fs');
var dir = './public/assets/sprites';
var obj = [];
var options = {
splitRegexp: /([a-z])([A-Z0-9])/g,
};
var parser;
var onopentag = (_name, attr) => {
var temp = {
name: '',
frame: {
width: 0,
height: 0,
}
};
var hasName = _.has(attr, 'name') || _.has(attr, 'n');
if (hasName) {
_.assign(temp.frame, attr);
temp.name = pascalCase(attr.name || attr.n, options)
temp.frame.width = attr.width || attr.w;
temp.frame.height = attr.height || attr.w;
// console.log(temp)
delete temp.frame.name
delete temp.frame.w
delete temp.frame.h
obj.push(temp);
}
};
async function boot() {
try {
var map = [];
var d;
var dirs = await fs.readdir(dir, 'utf8');
dirs.forEach((r, i) => {
if (path.extname(r) === '.xml') {
console.log(r);
parser = new Parser({
onend() {
map.push(
fs.writeFile(
path.join(dir, r.replace(/\.xml$/, '.json')),
JSON.stringify(obj),
'utf8'
)
);
obj = [];
},
onopentag,
});
d = readFileSync(path.join(dir, r), 'utf8');
parser.write(d);
parser.end();
}
});
await Promise.all(map);
console.log('Done');
} catch (e) {
console.log(e);
}
}
boot();