From b3693e8017957f6b57cd9e7bafb5b4005cdc7dc5 Mon Sep 17 00:00:00 2001 From: barant Date: Wed, 8 Jan 2025 17:04:36 -0800 Subject: [PATCH] think migration is almost done, at least for set tag. --- Tag.cpp | 71 +++++++++++++++++++++++++++++-------------------------- Tag.h | 2 +- __set.cpp | 2 +- 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Tag.cpp b/Tag.cpp index e508f06..407f6a7 100644 --- a/Tag.cpp +++ b/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"); } } diff --git a/Tag.h b/Tag.h index 356ed09..e4247c4 100644 --- a/Tag.h +++ b/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 variables; diff --git a/__set.cpp b/__set.cpp index 2936df3..8d0b96d 100644 --- a/__set.cpp +++ b/__set.cpp @@ -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")); }