#!/usr/bin/env node if (process.argv.length < 4) { console.error("Usage: toSwift SRC DST"); process.exit(1); } var fs = require("fs"); let fileSrc = process.argv[2]; let fileDst = process.argv[3]; let globalReplacements = { "function": "func", "number": "Float", "):": ") ->", "interface": "protocol", }; console.log(`Converting '${fileSrc}' to '${fileDst}'`); var linesDst = []; let linesSrc = fs.readFileSync(fileSrc).toString().split(/\r?\n/); for (let i in linesSrc) { let ln = linesSrc[i]; linesDst.push(convert(ln)); } let contentsDst = linesDst.join("\r\n"); fs.writeFileSync(fileDst, contentsDst); // Functions making decisions. function convert(line) { var result = line; for (let src in globalReplacements) { let dst = globalReplacements[src]; result = result.replace(src, dst); } result = protocolReplace(result); return result; } var isProtocol = false; function protocolReplace(line) { if (line.includes("protocol")) { isProtocol = true; } if (line == "}") { isProtocol = false; } console.log("ИГР protocolR-1 isP/line:", isProtocol, line); if (!isProtocol) { return line; } var result = line; if (isProtocol) { result = protocolReplaceVariable(result); } console.log("ИГР protocolR-2 isP/line:", isProtocol, line); return result; } function protocolReplaceVariable(line) { let parts = line.split(": "); if (parts.length == 2) { let type = parts[1]; let name = parts[0].trim(); let spaceLength = parts[0].length - name.length; let spaces = " ".repeat(spaceLength); //console.log("Variable. name/spaceL/parts:", name, spaceLength, parts); return `${spaces}var ${name}: ${type} { get }`; } return line; }