Última atividade 1 month ago

Javascript Stepmania SSC File Parser

Lucas Teske revisou este gist 11 years ago. Ir para a revisão

1 file changed, 85 insertions

sscparser.js(arquivo criado)

@@ -0,0 +1,85 @@
1 + var fs = require('fs');
2 +
3 + function StripComments(data) {
4 + return data.replace(/(?:\/\*(?:[\s\S]*?)\*\/)|(?:([\s])+\/\/(?:.*)$)/gm, '$1');
5 + }
6 +
7 + function CleanLines(data) {
8 + if(data instanceof Array) {
9 + for(var n in data)
10 + data[n] = data[n].trim();
11 + return data.filter(function(n){ return n != '' });
12 + }else
13 + return data.trim();
14 + }
15 +
16 + function LineObject(data) {
17 + if(data instanceof Array) {
18 + for(var n in data) {
19 + data[n] = LineObject(data[n]);
20 + }
21 + return data.filter(function(n){ return n != '' });
22 + }else
23 + return CleanLines(data.split("\n"));
24 + }
25 +
26 + function ParseSSCLines(data) {
27 + var reg = /\#([\s\S]*?)\;/g;
28 + var songdata = {
29 + "charts" : []
30 + };
31 + var chart = -1;
32 +
33 + var match;
34 + while (match = reg.exec(data)) {
35 + var variable = match[1].split(":",1)[0];
36 + var content = match[1].replace(variable+":","");
37 + variable = variable.trim();
38 + if(variable == "NOTEDATA") {
39 + chart += 1;
40 + songdata["charts"][chart] = {};
41 + }else{
42 + if(chart > -1) { // Looking for chart data
43 + switch(variable) {
44 + case "NOTES" : songdata["charts"][chart][variable] = LineObject(content.split(",")); break;
45 + case "BPMS" :
46 + case "STOPS" :
47 + case "DELAYS" :
48 + case "WARPS" :
49 + case "TIMESIGNATURES" :
50 + case "TICKCOUNTS" :
51 + case "COMBOS" :
52 + case "SPEEDS" :
53 + case "LABELS" :
54 + case "SCROLLS" : songdata["charts"][chart][variable] = CleanLines(content.split(",")); break;
55 + default : songdata["charts"][chart][variable] = CleanLines(content);
56 + }
57 + }else{ // Looking for song data
58 + switch(variable) {
59 + case "BPMS" :
60 + case "STOPS" :
61 + case "DELAYS" :
62 + case "WARPS" :
63 + case "TIMESIGNATURES" :
64 + case "TICKCOUNTS" :
65 + case "COMBOS" :
66 + case "SPEEDS" :
67 + case "LABELS" :
68 + case "BGCHANGES" :
69 + case "SCROLLS" : songdata[variable] = CleanLines(content.split(",")); break;
70 + default : songdata[variable] = CleanLines(content);
71 + }
72 +
73 + }
74 + }
75 + }
76 + return songdata;
77 + }
78 +
79 + fs.readFile('000.ssc', function (err, data) {
80 + if (err) throw err;
81 + data = data.toString();
82 + data = StripComments(data);
83 + var song = ParseSSCLines(data);
84 + console.log(song);
85 + });
Próximo Anterior