96 lines
1.9 KiB
JavaScript
Executable File
96 lines
1.9 KiB
JavaScript
Executable File
#!/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);
|
|
result = typeArrayReplace(result);
|
|
return result;
|
|
}
|
|
|
|
var isProtocol = false;
|
|
|
|
function protocolReplace(line) {
|
|
if (line.includes("protocol")) {
|
|
isProtocol = true;
|
|
}
|
|
if (line == "}") {
|
|
isProtocol = false;
|
|
}
|
|
if (!isProtocol) {
|
|
return line;
|
|
}
|
|
|
|
var result = line;
|
|
if (isProtocol) {
|
|
result = protocolReplaceVariable(result);
|
|
}
|
|
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);
|
|
return `${spaces}var ${name}: ${type} { get }`;
|
|
}
|
|
return line;
|
|
}
|
|
|
|
// func memoryItemPositions(c: Context) -> Position[] {
|
|
// var pos: Position[] = []
|
|
|
|
function typeArrayReplace(line) {
|
|
let parts = line.split(" ");
|
|
for (var i in parts) {
|
|
let part = parts[i];
|
|
if (
|
|
part != "[]" &&
|
|
part.endsWith("[]")
|
|
) {
|
|
let type = part.substring(0, part.length - 2)
|
|
let swiftType = `[${type}]`;
|
|
return line.replace(part, swiftType);
|
|
}
|
|
}
|
|
return line;
|
|
}
|