UNPKG

tdmul

Version:

Transfer Data Mark-Up Language - Read, write, and manipulate TDMUL files

63 lines (52 loc) 1.66 kB
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;