cables_dev/cables/src/core/cg/preproc.js
export function preproc(str, vars)
{
const lines = str.split("\n");
const outLines = [];
let stack = [];
for (let i = 0; i < lines.length; i++)
{
let line = lines[i].trim();
let parts = line.split(" ");
if (line.startsWith("#ifdef "))
{
const s = vars[parts[1]];
stack.push({ "state": s });
continue;
}
if (line.startsWith("#ifndef "))
{
const s = vars[parts[1]];
stack.push({ "state": !s });
continue;
}
if (line.startsWith("#endif"))
{
stack.pop();
continue;
}
const state = stack[stack.length - 1];
if (line.startsWith("#else"))
{
state.state = !state.state;
continue;
}
if (!state || state.state)
{
outLines.push(lines[i]);
}
}
return outLines.join("\n");
}