Made the set tag work to local variables. Moved tests to their own directory.

This commit is contained in:
Brad Arant 2024-10-30 16:45:05 -07:00
parent ad48c530a0
commit ae4ff5a3dc
10 changed files with 37 additions and 18 deletions

View File

@ -51,7 +51,7 @@ namespace jet {
if(!finished) {
coreutils::ZString keywordName = in.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_");
if(in.ifNext("=\"")) {
variables[keywordName] = KeywordValue(in.getTokenExclude("\""), global, variables);
variables[keywordName] = KeywordValue(in.getTokenExclude("\""), global, parent->variables);
}
if(!in.ifNext("\"")) {}
}

View File

@ -17,22 +17,33 @@ namespace jet {
throw coreutils::Exception("set tag cannot have both expr and value.");
if(!variableDefined("expr") && !variableDefined("value") && !hasContainer)
throw coreutils::Exception("set tag must have a value, expr or a container.");
if(!variableDefined("scope") || (variables["scope"] == "global")) {
if(variableDefined("expr")) {
if(variableDefined("eval"))
throw coreutils::Exception("Cannot use eval with expr.");
global.variables[variables["name"]] = Operand(variables["expr"]).string;
} else if(hasContainer) {
processContainer(container);
if(evaluate) {
global.variables[variables["name"]] = out;
} else {
global.variables[variables["name"]] = container;
}
} else
global.variables[variables["name"]] = variables["value"];
} else {
if(variableDefined("expr") && variableDefined("eval"))
throw coreutils::Exception("Cannot use eval with expr.");
if(variableDefined("expr")) {
if(!variableDefined("scope") || (variables["scope"] == "global"))
global.variables[variables["name"]] = Operand(variables["expr"]).string;
else if(variables["scope"] == "local")
variables[variables["name"]] = Operand(variables["expr"]).string;
} else if(hasContainer) {
processContainer(container);
if(evaluate) {
if(!variableDefined("scope") || (variables["scope"] == "global"))
global.variables[variables["name"]] = out;
else if(variables["scope"] == "local")
variables[variables["name"]] = out;
} else {
if(!variableDefined("scope") || (variables["scope"] == "global"))
global.variables[variables["name"]] = container;
else if(variables["scope"] == "local")
variables[variables["name"]] = container;
}
} else {
if(!variableDefined("scope") || (variables["scope"] == "global"))
global.variables[variables["name"]] = variables["value"];
else if(variables["scope"] == "local")
variables[variables["name"]] = variables["value"];
}
}
}

8
tests/testscope.jet Executable file
View File

@ -0,0 +1,8 @@
#!./jet-2.0
<jet cgi="true" name1="localname" filterblanklines="true" trimlines="true">
<set name="testvar" value="do you see this" scope="local" />
#[testvar]
<for name="ix" start="1" end="5" step="1">
-->#[ix]<--
</for>
</jet>

View File

@ -1,4 +1,4 @@
#!./jet-2.0
#!../jet-2.0
<jet filterblanklines="true" trimlines="true">
<set name="ix" value="1" />
<set name="letterx" value="x" />