tdmul
Version:
Transfer Data Mark-Up Language - Read, write, and manipulate TDMUL files
63 lines (52 loc) • 1.66 kB
JavaScript
const fs = require('fs');
const Lexer = require('./lexer');
const Parser = require('./parser');
class TDMUL {
constructor() {
this.data = {};
}
load(filePath) {
const tdmulText = fs.readFileSync(filePath, 'utf-8');
const lexer = new Lexer(tdmulText);
const tokens = lexer.getTokens();
const parser = new Parser(tokens);
this.data = parser.parse();
}
getData() {
return this.data;
}
setData(obj) {
this.data = obj;
}
serialize(obj = this.data, indent = 0) {
const spaces = ' '.repeat(indent);
let output = '';
for (let key in obj) {
const value = obj[key];
if (Array.isArray(value)) {
if (value.length > 0 && typeof value[0] === 'object' && value[0] !== null) {
output += `${spaces}${key}::\n`;
value.forEach(item => {
for (let subKey in item) {
output += `${spaces} ${subKey}:\n`;
output += this.serialize(item[subKey], indent + 8);
}
});
} else {
output += `${spaces}${key} = [${value.join(', ')}]\n`;
}
} else if (typeof value === 'object' && value !== null) {
output += `${spaces}${key}:\n`;
output += this.serialize(value, indent + 4);
} else {
output += `${spaces}${key} = ${value}\n`;
}
}
return output;
}
save(filePath) {
const tdmulText = this.serialize();
fs.writeFileSync(filePath, tdmulText, 'utf-8');
}
}
module.exports = TDMUL;