HelloAurora/Build_UserScripts/wxwidgets_process.js
2022-02-19 22:45:49 +00:00

225 lines
4.7 KiB
JavaScript

const fio = require("fs")
const jsonTable = require("./wxwidgets_in.json")
var variableTable = {
"PLATFORM_WIN32": "1",
"PLATFORM_UNIX": "0",
"PLATFORM_MACOSX": "0",
"TOOLKIT": "MSW",
"TOOLKIT_VERSION": "4",
"USE_GUI": "1",
"WXUNIV": "0",
"FORMAT": "aurora",
"USE_PLUGINS": "0"
}
function stringifyTableJS()
{
var translatedScript = "";
var keys = Object.keys(variableTable)
keys.forEach((key) => {
var value = variableTable[key]
value = value.split("\r").join("\\r").split("\n").join("\\n")
translatedScript += "var " + key + " = \"" + value + "\";\n"
})
return translatedScript
}
function stringifyTableLua()
{
var translatedScript = "";
var keys = Object.keys(variableTable)
keys.forEach((key) => {
var value = variableTable[key]
//value = value.split("\r").join("");
if (value.indexOf("\n") != -1)
{
var onePassed = false
translatedScript += "local " + key + " = {\n";
var subValues = value.split(" ").join("\n").split("\n");
for (var i = 0; i < subValues.length; i++)
{
var subValue = subValues[i].trim();
if (subValue.length == 0) continue
translatedScript += " \"" + subValue.trim() + "\"" + (i + 1 == subValues.length ? "" : ",") + "\n"
}
translatedScript += "};\n"
}
else
{
translatedScript += "local " + key + " = \"" + value + "\";\n"
}
})
return translatedScript
}
function stringifyTableTableLua()
{
var translatedScript = "";
var keys = Object.keys(variableTable)
translatedScript += "local _MAGICTABLE = {\n";
for (var i = 0; i < keys.length; i++)
{
var key = keys[i];
translatedScript += " \"" + key + "\" = " + key + (i + 1 == keys.length ? "" : ",") + "\n"
}
translatedScript += "};\n"
return translatedScript
}
function isGroupValid(json, condition)
{
var translatedScript = stringifyTableJS()
console.log(condition)
if (condition.indexOf("FORMAT") != -1)
{
// global struct should always pass
return true
}
translatedScript += condition.split("and").join("&&");
//console.log("script", translatedScript)
var val = eval(translatedScript)
//console.log(translatedScript, val)
return val
}
function getGroupValid(json)
{
if (!json.if)
return json
var conditions = json.if
var condition = null
if (!conditions)
{
console.log("json object missing condition array/object", json)
return false
}
if (Array.isArray(conditions))
{
for(condition of conditions)
{
var condField = condition["@cond"]
if (!condField)
{
console.log("json child object missing condition", condition)
continue
}
if (isGroupValid(json, condField))
{
return condition
}
}
}
else
{
condition = conditions["@cond"]
if (!condition)
{
console.log("json object missing condition", json)
return false
}
if (isGroupValid(json, condition))
{
return conditions
}
}
}
function parseString(str)
{
for(var nextIndex = 0; (nextIndex = str.indexOf("$")) != -1; )
{
if (str[nextIndex + 1] != "(")
{
console.log("$ is not allowed in string. giving up, returning: ", str)
return str
}
var prefix = str.substr(0, nextIndex);
var endIndex = str.indexOf(")", nextIndex)
var expressionStart = nextIndex + 2;
var expression = str.substr(expressionStart, endIndex - expressionStart)
var suffix = str.substr(endIndex + 1)
console.log("reconstructing", prefix, expression, suffix)
var value = variableTable[expression]
if (!value)
{
console.log("warning: couldn't lookup variable", expression)
console.log(expression)
value = ""
}
str = prefix + value + suffix
}
console.log("parsed expression", str)
return str
}
function handleSetVariablesFunc(json, text)
{
var value = null;
if (Array.isArray(text))
{
text.forEach((line) => {value += parseString(line) + "\\n"} )
}
else
{
value = parseString(text)
}
console.log("key", json["@var"])
variableTable[json["@var"]] = value;
}
function handleSetVariableField(json, fields)
{
console.log("processing set variables")
fields.forEach(field => processVariable(field))
}
function processVariable(json, override)
{
console.log("analyzing", json)
var key = json
if (!((override) || (key = getGroupValid(json))))
{
console.log("ignoring group", json["@var"])
return;
}
console.log("parsing", key)
var setVariablesFunc = key["set"]
var setVariableField = key["#text"]
if (setVariablesFunc)
{
handleSetVariableField(json, setVariablesFunc)
}
else if (setVariableField)
{
console.log("alpha")
handleSetVariablesFunc(json, setVariableField)
}
}
processVariable(jsonTable, true)
console.log("processed")
console.log(variableTable)
var luaBuildScript = stringifyTableLua()
luaBuildScript += "\n\n\n";
luaBuildScript += stringifyTableTableLua()
fio.writeFileSync("out.lua", luaBuildScript)