156 lines
5.6 KiB
JavaScript
156 lines
5.6 KiB
JavaScript
"use strict";
|
|
exports.__esModule = true;
|
|
var fs_1 = require("fs");
|
|
var path = require("path");
|
|
function convertFile(file) {
|
|
var extension = path.extname(file);
|
|
var withoutExtension = file.substr(0, file.length - extension.length);
|
|
var targetFile = withoutExtension + ".ts";
|
|
var baseName = path.basename(file, extension);
|
|
var content = fs_1.readFileSync(file, 'utf8');
|
|
var result = convert(content, baseName);
|
|
console.log("Writing to \"" + targetFile + "\"...");
|
|
fs_1.writeFileSync(targetFile, result);
|
|
}
|
|
exports.convertFile = convertFile;
|
|
function convert(input, name) {
|
|
var result = convertImports(input, name);
|
|
return result;
|
|
}
|
|
exports.convert = convert;
|
|
function convertImports(input, name) {
|
|
var items = [];
|
|
var result = input.replace(/<!-- #include file="(.*?\/)?(.*?).asp" -->/gi, function (input, group1, group2) {
|
|
var path = group1 || './';
|
|
var file = "" + path + group2;
|
|
items.push({ name: group2, path: file });
|
|
return "<%\n" + group2 + "();\n%>";
|
|
});
|
|
result = convertCode(result);
|
|
result = convertExpressions(result);
|
|
result = convertStrings(result);
|
|
result = "\nexport function " + name + "() {\n" + result + "\n}";
|
|
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
|
|
var item = items_1[_i];
|
|
result = "import {" + item.name + "} from \"" + item.path + "\"\n" + result;
|
|
}
|
|
return result;
|
|
}
|
|
exports.convertImports = convertImports;
|
|
function convertCode(input) {
|
|
var result = input.replace(/<%([^=][\s\S]*?)%>/gi, function (input, group1) {
|
|
var code = group1;
|
|
code = convertComments(code);
|
|
code = convertIfStatements(code);
|
|
code = convertSwitchStatements(code);
|
|
code = convertFunctions(code);
|
|
code = convertForStatements(code);
|
|
code = convertLoops(code);
|
|
code = convertPRec(code);
|
|
code = convertPLan(code);
|
|
return "<%" + code + "%>";
|
|
});
|
|
return result;
|
|
}
|
|
exports.convertCode = convertCode;
|
|
function convertExpressions(input) {
|
|
var result = input.replace(/<%=([\s\S]*?)%>/gi, function (input, group1) {
|
|
var content = convertPRec(group1);
|
|
content = convertPLan(content);
|
|
return "${" + content + "}";
|
|
});
|
|
return result;
|
|
}
|
|
exports.convertExpressions = convertExpressions;
|
|
function convertStrings(input) {
|
|
var result = input.replace(/%>([\s\S]+?)<%/gi, "\nResponse.Write(`$1`);\n");
|
|
// Entire document is a string
|
|
if (result.indexOf("<%") === -1) {
|
|
result = "Response.Write(`" + result + "`);";
|
|
}
|
|
// Start of the document is a string
|
|
var firstIndex = result.indexOf("<%");
|
|
if (firstIndex > 0) {
|
|
result = "Response.Write(`" + result.substr(0, firstIndex) + "`);\n" + result.substring(firstIndex + 2);
|
|
}
|
|
result = result.replace(/%>$/, "");
|
|
// End of the document is a string
|
|
var lastIndex = result.lastIndexOf("%>");
|
|
if (lastIndex > -1 && lastIndex < result.length - 2) {
|
|
result = result.substr(0, lastIndex) + "\nResponse.Write(`" + result.substr(lastIndex + 3) + "`);";
|
|
}
|
|
result = result.replace(/^<%/, "");
|
|
return result;
|
|
}
|
|
exports.convertStrings = convertStrings;
|
|
function convertComments(input) {
|
|
var result = '';
|
|
var splitted = input.split(/(".*")/gim);
|
|
for (var _i = 0, splitted_1 = splitted; _i < splitted_1.length; _i++) {
|
|
var part = splitted_1[_i];
|
|
if (part.indexOf("\"") === 0) {
|
|
result += part;
|
|
}
|
|
else {
|
|
result += part.replace(/'/gi, "//");
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
exports.convertComments = convertComments;
|
|
function convertIfStatements(input) {
|
|
var result = input.replace(/if +(.*?) +then/gi, function (input, group1) {
|
|
var condition = convertConditions(group1);
|
|
return "\nif (" + condition + ") {\n";
|
|
});
|
|
result = result.replace(/end if/gi, "\n}\n");
|
|
result = result.replace(/else(?!{)/gi, "\n}\nelse {\n");
|
|
return result;
|
|
}
|
|
exports.convertIfStatements = convertIfStatements;
|
|
function convertSwitchStatements(input) {
|
|
var result = input.replace(/select case +(.*)/gi, "\nswitch ($1) {\n");
|
|
result = result.replace(/end select/gi, "\n}\n");
|
|
return result;
|
|
}
|
|
exports.convertSwitchStatements = convertSwitchStatements;
|
|
function convertFunctions(input) {
|
|
var result = input.replace(/function +(.*)\((.*)\)/gi, "\n$1 = ($2) => {\n");
|
|
result = result.replace(/end function/gi, "\n}\n");
|
|
return result;
|
|
}
|
|
exports.convertFunctions = convertFunctions;
|
|
function convertForStatements(input) {
|
|
var result = input.replace(/for +(.*to.*)/gi, "\nfor ($1) {\n");
|
|
result = result.replace(/^ *next *$/gim, "}\n");
|
|
return result;
|
|
}
|
|
exports.convertForStatements = convertForStatements;
|
|
function convertConditions(input) {
|
|
var result = input.replace(/ +and +/gi, " && ");
|
|
result = result.replace(/ +or +/gi, " || ");
|
|
result = result.replace(/ +<> +/gi, " !== ");
|
|
result = result.replace(/ += +/gi, " === ");
|
|
return result;
|
|
}
|
|
exports.convertConditions = convertConditions;
|
|
function convertLoops(input) {
|
|
var result = input.replace(/do while +(.*)/gi, function (input, group1) {
|
|
var condition = convertConditions(group1);
|
|
return "\nwhile (" + condition + ") {\n";
|
|
});
|
|
|
|
result = result.replace(/^ *loop *$/gim, "}\n");
|
|
return result;
|
|
}
|
|
exports.convertLoops = convertLoops;
|
|
function convertPRec(input) {
|
|
var result = input.replace(/(p_rec\("\S+?"\))/gi, "$1.Value");
|
|
return result;
|
|
}
|
|
exports.convertPRec = convertPRec;
|
|
function convertPLan(input) {
|
|
var result = input.replace(/(l_\S+?)\(p_lan\)/gi, "$1[p_lan]");
|
|
return result;
|
|
}
|
|
exports.convertPLan = convertPLan;
|