migrating getvariable and setvarable to Tag. Needs alot of work.
This commit is contained in:
parent
229394310d
commit
2549220914
70
Global.cpp
70
Global.cpp
@ -58,73 +58,7 @@ namespace jet {
|
|||||||
return value.fromCGI();
|
return value.fromCGI();
|
||||||
throw coreutils::Exception("modifier not valid.");
|
throw coreutils::Exception("modifier not valid.");
|
||||||
}
|
}
|
||||||
|
|
||||||
coreutils::MString Global::getVariable(coreutils::ZString &variable,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords) {
|
|
||||||
if(variable.ifNext("$[")) {
|
|
||||||
coreutils::MString name;
|
|
||||||
coreutils::MString modifier;
|
|
||||||
if(variable.ifNext("!")) {
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
return variables[name];
|
|
||||||
} else if(variable.ifNext("%")) {
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
return keywords[name];
|
|
||||||
} else if(variable.ifNext(":")) {
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
if(name.find(":") == -1) {
|
|
||||||
name << ":0";
|
|
||||||
}
|
|
||||||
return processModifier(cgiVariables[name], modifier);
|
|
||||||
} if(variable.ifNext("@")) {
|
|
||||||
// TODO: should only allow session variables. Allow substitution.
|
|
||||||
} if(variable.ifNext("%")) {
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
return getenv(name.c_str());
|
|
||||||
} else {
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
name.split(".");
|
|
||||||
if(name.getList().size() == 1) {
|
|
||||||
if(variables.find(name[0]) == variables.end())
|
|
||||||
throw coreutils::Exception("global variable is not initialized.");
|
|
||||||
return processModifier(variables[name[0]], modifier);
|
|
||||||
}
|
|
||||||
return getSessionVariable(name);
|
|
||||||
}
|
|
||||||
throw coreutils::Exception("expected variable name or type designator.");
|
|
||||||
} if(variable.ifNext("#[")) {
|
|
||||||
coreutils::MString name;
|
|
||||||
coreutils::MString modifier;
|
|
||||||
renderVariableName(variable, name, modifier, lvariables, keywords);
|
|
||||||
if(lvariables.find(name) == lvariables.end())
|
|
||||||
throw coreutils::Exception("local variable is not initialized.");
|
|
||||||
return lvariables[name];
|
|
||||||
}
|
|
||||||
throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[').");
|
|
||||||
}
|
|
||||||
|
|
||||||
void Global::renderVariableName(coreutils::ZString &variable,
|
|
||||||
coreutils::MString &name, coreutils::MString &modifier,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords) {
|
|
||||||
while(!variable.ifNext("]")) {
|
|
||||||
name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-");
|
|
||||||
if(variable.ifNext(";")) {
|
|
||||||
renderVariableName(variable, modifier, modifier, lvariables, keywords);
|
|
||||||
return;
|
|
||||||
} else if(variable.ifNext(":")) {
|
|
||||||
name << ":";
|
|
||||||
} else if(variable.startsWith("$[") || variable.startsWith("#[")) {
|
|
||||||
name << getVariable(variable, lvariables, keywords);
|
|
||||||
} else if(variable.ifNext("]"))
|
|
||||||
return;
|
|
||||||
else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"))
|
|
||||||
throw coreutils::Exception("invalid variable name.");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
__mysql * Global::getSession(coreutils::MString sessionId) {
|
__mysql * Global::getSession(coreutils::MString sessionId) {
|
||||||
if(sessions.find(sessionId) == sessions.end())
|
if(sessions.find(sessionId) == sessions.end())
|
||||||
throw coreutils::Exception("requested session is not available.");
|
throw coreutils::Exception("requested session is not available.");
|
||||||
@ -198,5 +132,5 @@ namespace jet {
|
|||||||
throw coreutils::Exception("expecting = after name in received CGI data.");
|
throw coreutils::Exception("expecting = after name in received CGI data.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
10
Global.h
10
Global.h
@ -19,14 +19,6 @@ namespace jet {
|
|||||||
void addSession(coreutils::MString sessionId, __mysql *mysql);
|
void addSession(coreutils::MString sessionId, __mysql *mysql);
|
||||||
void removeSession(coreutils::MString sessionId);
|
void removeSession(coreutils::MString sessionId);
|
||||||
coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier);
|
coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier);
|
||||||
coreutils::MString getVariable(coreutils::ZString &variable,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords);
|
|
||||||
void renderVariableName(coreutils::ZString &variable,
|
|
||||||
coreutils::MString &name,
|
|
||||||
coreutils::MString &modifier,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords);
|
|
||||||
__mysql * getSession(coreutils::MString sessionId);
|
__mysql * getSession(coreutils::MString sessionId);
|
||||||
coreutils::ZString getSessionVariable(coreutils::MString &splitName);
|
coreutils::ZString getSessionVariable(coreutils::MString &splitName);
|
||||||
void outputHeaders();
|
void outputHeaders();
|
||||||
@ -40,7 +32,7 @@ namespace jet {
|
|||||||
std::map<coreutils::MString, coreutils::MString> headers;
|
std::map<coreutils::MString, coreutils::MString> headers;
|
||||||
std::map<coreutils::MString, coreutils::MString> tags;
|
std::map<coreutils::MString, coreutils::MString> tags;
|
||||||
char **envp;
|
char **envp;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
1
TODO.txt
1
TODO.txt
@ -3,3 +3,4 @@
|
|||||||
2) Only allow stream tag in CGI mode.
|
2) Only allow stream tag in CGI mode.
|
||||||
3) Create a method to upload a file directly to a file name to bypass
|
3) Create a method to upload a file directly to a file name to bypass
|
||||||
buffering on large files.
|
buffering on large files.
|
||||||
|
4) Allow the cookie tag only if CGI mode selected.
|
||||||
|
101
Tag.cpp
101
Tag.cpp
@ -25,6 +25,7 @@
|
|||||||
#include "__dotag.h"
|
#include "__dotag.h"
|
||||||
#include "__stream.h"
|
#include "__stream.h"
|
||||||
#include "__dump.h"
|
#include "__dump.h"
|
||||||
|
#include "Operand.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace jet {
|
namespace jet {
|
||||||
@ -206,7 +207,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
} else if(in.startsWith("$[") || in.startsWith("#[")) {
|
} else if(in.startsWith("$[") || in.startsWith("#[")) {
|
||||||
global.errorCursor = in.getCursor();
|
global.errorCursor = in.getCursor();
|
||||||
out.write(global.getVariable(in, local->variables, keywords));
|
out.write(getVariable(in));
|
||||||
} else {
|
} else {
|
||||||
out.write(in.nextChar());
|
out.write(in.nextChar());
|
||||||
}
|
}
|
||||||
@ -366,4 +367,102 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
coreutils::MString Tag::getVariable(coreutils::ZString &variable) {
|
||||||
|
if(variable.ifNext("$[")) {
|
||||||
|
coreutils::MString name;
|
||||||
|
coreutils::MString modifier;
|
||||||
|
if(variable.ifNext("!")) {
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
return global.variables[name];
|
||||||
|
} else if(variable.ifNext("%")) {
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
return keywords[name];
|
||||||
|
} else if(variable.ifNext(":")) {
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
if(name.find(":") == -1) {
|
||||||
|
name << ":0";
|
||||||
|
}
|
||||||
|
return processModifier(global.cgiVariables[name], modifier);
|
||||||
|
} else if(variable.ifNext("@")) {
|
||||||
|
// TODO: should only allow session variables. Allow substitution.
|
||||||
|
} else if(variable.ifNext("%")) {
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
return getenv(name.c_str());
|
||||||
|
} else {
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
name.split(".");
|
||||||
|
if(name.getList().size() == 1) {
|
||||||
|
if(global.variables.find(name[0]) == globals.variables.end())
|
||||||
|
throw coreutils::Exception("global variable is not initialized.");
|
||||||
|
return processModifier(global.variables[name[0]], modifier);
|
||||||
|
}
|
||||||
|
return global.getSessionVariable(name);
|
||||||
|
}
|
||||||
|
throw coreutils::Exception("expected variable name or type designator.");
|
||||||
|
} else if(variable.ifNext("#[")) {
|
||||||
|
coreutils::MString name;
|
||||||
|
coreutils::MString modifier;
|
||||||
|
renderVariableName(variable, name, modifier);
|
||||||
|
if(local->variables.find(name) == local->variables.end())
|
||||||
|
throw coreutils::Exception("local variable is not initialized.");
|
||||||
|
return local->variables[name];
|
||||||
|
}
|
||||||
|
throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[').");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tag::renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier) {
|
||||||
|
while(!variable.ifNext("]")) {
|
||||||
|
name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-");
|
||||||
|
if(variable.ifNext(";")) {
|
||||||
|
renderVariableName(variable, modifier, modifier);
|
||||||
|
return;
|
||||||
|
} else if(variable.ifNext(":")) {
|
||||||
|
name << ":";
|
||||||
|
} else if(variable.startsWith("$[") || variable.startsWith("#[")) {
|
||||||
|
name << getVariable(variable);
|
||||||
|
} else if(variable.ifNext("]"))
|
||||||
|
return;
|
||||||
|
else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"))
|
||||||
|
throw coreutils::Exception("invalid variable name.");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Tag::storeVariable(coreutils::ZString variable) {
|
||||||
|
if(keywordDefined("expr")) {
|
||||||
|
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
|
global.variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||||
|
else if(keywords["scope"] == "local")
|
||||||
|
local->variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||||
|
else if(keywords["scope"] == "parent")
|
||||||
|
local->parent->variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).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;
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
} 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"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
8
Tag.h
8
Tag.h
@ -20,8 +20,6 @@ namespace jet {
|
|||||||
coreutils::ZString name;
|
coreutils::ZString name;
|
||||||
coreutils::ZString container;
|
coreutils::ZString container;
|
||||||
coreutils::ZString container2;
|
coreutils::ZString container2;
|
||||||
Tag *parent;
|
|
||||||
Tag *local;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool hasContainer = false;
|
bool hasContainer = false;
|
||||||
@ -32,6 +30,8 @@ namespace jet {
|
|||||||
void copyContainer(coreutils::ZString &in, coreutils::MString &out);
|
void copyContainer(coreutils::ZString &in, coreutils::MString &out);
|
||||||
|
|
||||||
Global &global;
|
Global &global;
|
||||||
|
Tag *parent;
|
||||||
|
Tag *local;
|
||||||
|
|
||||||
coreutils::MString &parentOut;
|
coreutils::MString &parentOut;
|
||||||
coreutils::MString out;
|
coreutils::MString out;
|
||||||
@ -43,6 +43,10 @@ namespace jet {
|
|||||||
bool trimLines = false;
|
bool trimLines = false;
|
||||||
bool cleanWhitespace = false;
|
bool cleanWhitespace = false;
|
||||||
|
|
||||||
|
coreutils::MString getVariable(coreutils::ZString &variable);
|
||||||
|
void renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier);
|
||||||
|
void storeVariable(coreutils::ZString variable);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool containerOnly = false;
|
bool containerOnly = false;
|
||||||
coreutils::ZString splitTagName;
|
coreutils::ZString splitTagName;
|
||||||
|
69
__set.cpp
69
__set.cpp
@ -22,40 +22,41 @@ namespace jet {
|
|||||||
throw coreutils::Exception("Cannot use eval with expr.");
|
throw coreutils::Exception("Cannot use eval with expr.");
|
||||||
|
|
||||||
resolveKeyword("name");
|
resolveKeyword("name");
|
||||||
|
storeVariable(keywords["name"]);
|
||||||
|
|
||||||
if(keywordDefined("expr")) {
|
// if(keywordDefined("expr")) {
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
global.variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
// global.variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||||
else if(keywords["scope"] == "local")
|
// else if(keywords["scope"] == "local")
|
||||||
local->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
// local->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||||
else if(keywords["scope"] == "parent")
|
// else if(keywords["scope"] == "parent")
|
||||||
local->parent->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
// local->parent->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||||
} else if(hasContainer) {
|
// } else if(hasContainer) {
|
||||||
processContainer(container);
|
// processContainer(container);
|
||||||
if(evaluate) {
|
// if(evaluate) {
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
global.variables[keywords["name"]] = out;
|
// global.variables[keywords["name"]] = out;
|
||||||
else if(keywords["scope"] == "local")
|
// else if(keywords["scope"] == "local")
|
||||||
local->variables[keywords["name"]] = out;
|
// local->variables[keywords["name"]] = out;
|
||||||
else if(keywords["scope"] == "parent")
|
// else if(keywords["scope"] == "parent")
|
||||||
local->parent->variables[keywords["name"]] = out;
|
// local->parent->variables[keywords["name"]] = out;
|
||||||
} else {
|
// } else {
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
global.variables[keywords["name"]] = container;
|
// global.variables[keywords["name"]] = container;
|
||||||
else if(keywords["scope"] == "local")
|
// else if(keywords["scope"] == "local")
|
||||||
local->variables[keywords["name"]] = container;
|
// local->variables[keywords["name"]] = container;
|
||||||
else if(keywords["scope"] == "parent")
|
// else if(keywords["scope"] == "parent")
|
||||||
local->parent->variables[keywords["name"]] = container;
|
// local->parent->variables[keywords["name"]] = container;
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
resolveKeyword("value");
|
// resolveKeyword("value");
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
global.variables[keywords["name"]] = keywords["value"];
|
// global.variables[keywords["name"]] = keywords["value"];
|
||||||
else if(keywords["scope"] == "local")
|
// else if(keywords["scope"] == "local")
|
||||||
local->variables[keywords["name"]] = keywords["value"];
|
// local->variables[keywords["name"]] = keywords["value"];
|
||||||
else if(keywords["scope"] == "parent")
|
// else if(keywords["scope"] == "parent")
|
||||||
local->parent->variables[keywords["name"]] = keywords["value"];
|
// local->parent->variables[keywords["name"]] = keywords["value"];
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user