think migration is almost done, at least for set tag.
This commit is contained in:
parent
5c27df59da
commit
b3693e8017
71
Tag.cpp
71
Tag.cpp
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
2
Tag.h
2
Tag.h
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user