think migration is almost done, at least for set tag.

This commit is contained in:
barant committed 2025-01-08 17:04:36 -08:00
1 parent 5c27df59da
commit b3693e8017
3 files changed
+39 -36

No files matched your search

+37 -34
View File
@@ -112,15 +112,16 @@ namespace jet {
coreutils::MString Tag::resolveKeyword(coreutils::ZString keyword) {
coreutils::MString resolved;
keyword.reset();
while(!keyword.eod()) {
if(keyword.startsWith("$[") || keyword.startsWith("#[")) {
resolved.write(getVariable(keyword));
keywords[keyword].reset();
while(!keywords[keyword].eod()) {
if(keywords[keyword].startsWith("$[") || keywords[keyword].startsWith("#[")) {
resolved.write(getVariable(keywords[keyword]));
} else {
resolved.write(keyword.charAt(0));
keyword.nextChar();
resolved.write(keywords[keyword].charAt(0));
keywords[keyword].nextChar();
}
}
keywords[keyword].reset();
return resolved;
}
@@ -216,7 +217,7 @@ namespace jet {
}
} else if(in.startsWith("$[") || in.startsWith("#[")) {
global.errorCursor = in.getCursor();
out.write(getVariable(in));
out.write(getVariable(in, true));
} else {
out.write(in.nextChar());
}
@@ -377,7 +378,7 @@ namespace jet {
return false;
}
coreutils::MString Tag::getVariable(coreutils::ZString &variable) {
coreutils::MString Tag::getVariable(coreutils::ZString &variable, bool inContainer) {
if(variable.ifNext("$[")) {
coreutils::MString name;
coreutils::MString modifier;
@@ -386,7 +387,10 @@ namespace jet {
return global.variables[name];
} else if(variable.ifNext("%")) {
renderVariableName(variable, name, modifier);
return keywords[name];
if(inContainer)
return keywords[name];
else
return parent->keywords[name];
} else if(variable.ifNext(":")) {
renderVariableName(variable, name, modifier);
if(name.find(":") == -1) {
@@ -440,37 +444,36 @@ namespace jet {
void Tag::storeVariable(coreutils::ZString variable) {
if(keywordDefined("expr")) {
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
global.variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
else if(keywords["scope"] == "local")
local->variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
else if(keywords["scope"] == "parent")
local->parent->variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
if(!keywordDefined("scope") || (resolveKeyword("scope") == "global"))
global.variables[variable] = Operand(keywords["expr"], *this).string;
else if(resolveKeyword("scope") == "local")
local->variables[variable] = Operand(keywords["expr"], *this).string;
else if(resolveKeyword("scope") == "parent")
local->parent->variables[variable] = Operand(keywords["expr"], *this).string;
} else if(hasContainer) {
processContainer(container);
if(evaluate) {
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
global.variables[keywords[variable]] = out;
else if(keywords["scope"] == "local")
local->variables[keywords[variable]] = out;
else if(keywords["scope"] == "parent")
local->parent->variables[keywords[variable]] = out;
if(!keywordDefined("scope") || (resolveKeyword("scope") == "global"))
global.variables[variable] = out;
else if(resolveKeyword("scope") == "local")
local->variables[variable] = out;
else if(resolveKeyword("scope") == "parent")
local->parent->variables[variable] = out;
} else {
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
global.variables[keywords[variable]] = container;
else if(keywords["scope"] == "local")
local->variables[keywords[variable]] = container;
else if(keywords["scope"] == "parent")
local->parent->variables[keywords[variable]] = container;
if(!keywordDefined("scope") || (resolveKeyword("scope") == "global"))
global.variables[variable] = container;
else if(resolveKeyword("scope") == "local")
local->variables[variable] = container;
else if(resolveKeyword("scope") == "parent")
local->parent->variables[variable] = container;
}
} else {
resolveKeyword("value");
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
global.variables[keywords[variable]] = keywords["value"];
else if(keywords["scope"] == "local")
local->variables[keywords[variable]] = keywords["value"];
else if(keywords["scope"] == "parent")
local->parent->variables[keywords[variable]] = keywords["value"];
if(!keywordDefined("scope") || (resolveKeyword("scope") == "global"))
global.variables[variable] = resolveKeyword("value");
else if(resolveKeyword("scope") == "local")
local->variables[variable] = resolveKeyword("value");
else if(resolveKeyword("scope") == "parent")
local->parent->variables[variable] = resolveKeyword("value");
}
}
+1 -1
View File
@@ -14,7 +14,7 @@ namespace jet {
Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = "");
virtual ~Tag();
coreutils::MString getVariable(coreutils::ZString &variable);
coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false);
coreutils::MString resolveKeyword(coreutils::ZString keyword);
std::map<coreutils::MString, coreutils::MString> variables;
+1 -1
View File
@@ -19,7 +19,7 @@ namespace jet {
if(keywordDefined("expr") && keywordDefined("eval"))
throw coreutils::Exception("Cannot use eval with expr.");
storeVariable(keywords[resolveKeyword("name")]);
storeVariable(resolveKeyword("name"));
}