work towards a clean compile on migrating set and get variables from Tag.
This commit is contained in:
parent
2549220914
commit
5c27df59da
26
Global.cpp
26
Global.cpp
@ -33,32 +33,6 @@ namespace jet {
|
|||||||
sessions.erase(sessionId);
|
sessions.erase(sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
coreutils::MString Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) {
|
|
||||||
if(modifier == "")
|
|
||||||
return value;
|
|
||||||
if(modifier == "tobinary")
|
|
||||||
return value.toBinary();
|
|
||||||
else if(modifier == "frombinary")
|
|
||||||
return value.fromBinary();
|
|
||||||
else if(modifier == "tohex")
|
|
||||||
return value.toHex();
|
|
||||||
else if(modifier == "fromhex")
|
|
||||||
return value.fromHex();
|
|
||||||
else if(modifier == "tobase64")
|
|
||||||
return value.toBase64();
|
|
||||||
else if(modifier == "frombase64")
|
|
||||||
return value.fromBase64();
|
|
||||||
else if(modifier == "toupper")
|
|
||||||
return value.toUpper();
|
|
||||||
else if(modifier == "tolower")
|
|
||||||
return value.toLower();
|
|
||||||
else if(modifier == "tocgi")
|
|
||||||
return value.toCGI();
|
|
||||||
else if(modifier == "fromcgi")
|
|
||||||
return value.fromCGI();
|
|
||||||
throw coreutils::Exception("modifier not valid.");
|
|
||||||
}
|
|
||||||
|
|
||||||
__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.");
|
||||||
|
1
Global.h
1
Global.h
@ -18,7 +18,6 @@ namespace jet {
|
|||||||
bool sessionExists(coreutils::MString sessionId);
|
bool sessionExists(coreutils::MString sessionId);
|
||||||
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);
|
|
||||||
__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();
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
#include "KeywordValue.h"
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
namespace jet {
|
|
||||||
|
|
||||||
KeywordValue::KeywordValue(coreutils::ZString data,
|
|
||||||
Global &global,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &variables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords) : MString() {
|
|
||||||
while(!data.eod()) {
|
|
||||||
if(data.startsWith("$[") || data.startsWith("#[")) {
|
|
||||||
write(global.getVariable(data, variables, keywords));
|
|
||||||
} else {
|
|
||||||
write(data.charAt(0));
|
|
||||||
data.nextChar();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KeywordValue::~KeywordValue() {}
|
|
||||||
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
#ifndef __KeywordValue_h__
|
|
||||||
#define __KeywordValue_h__
|
|
||||||
|
|
||||||
#include "MString.h"
|
|
||||||
#include "Global.h"
|
|
||||||
|
|
||||||
namespace jet {
|
|
||||||
|
|
||||||
///
|
|
||||||
/// KeywordValue will read the data ZString and convert any variable references.
|
|
||||||
///
|
|
||||||
|
|
||||||
class KeywordValue : public coreutils::MString {
|
|
||||||
|
|
||||||
public:
|
|
||||||
KeywordValue(coreutils::ZString data, Global &global,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &variables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords);
|
|
||||||
virtual ~KeywordValue();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
43
Operand.cpp
43
Operand.cpp
@ -6,24 +6,21 @@
|
|||||||
|
|
||||||
namespace jet {
|
namespace jet {
|
||||||
|
|
||||||
Operand::Operand(coreutils::ZString &in,
|
Operand::Operand(coreutils::ZString &in, Tag &tag) {
|
||||||
Global &global,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords) {
|
|
||||||
|
|
||||||
doubleValue = 0;
|
doubleValue = 0;
|
||||||
|
|
||||||
in.skipWhitespace();
|
in.skipWhitespace();
|
||||||
|
|
||||||
if(in.startsWith("$[") || in.startsWith("#[")) {
|
if(in.startsWith("$[") || in.startsWith("#[")) {
|
||||||
string = global.getVariable(in, lvariables, keywords);
|
string = tag.getVariable(in);
|
||||||
doubleValue = string.asDouble();
|
doubleValue = string.asDouble();
|
||||||
isNumber = string.eod();
|
isNumber = string.eod();
|
||||||
string.reset();
|
string.reset();
|
||||||
if((string == "false") || (string == "true"))
|
if((string == "false") || (string == "true"))
|
||||||
boolean = true;
|
boolean = true;
|
||||||
} else if(in.ifNext("(")) {
|
} else if(in.ifNext("(")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
string = op.string;
|
string = op.string;
|
||||||
doubleValue = op.doubleValue;
|
doubleValue = op.doubleValue;
|
||||||
if(!in.ifNext(")"))
|
if(!in.ifNext(")"))
|
||||||
@ -31,15 +28,15 @@ namespace jet {
|
|||||||
} else if(in.ifNextIgnoreCase("SUBSTRING")) {
|
} else if(in.ifNextIgnoreCase("SUBSTRING")) {
|
||||||
if(!in.ifNext("("))
|
if(!in.ifNext("("))
|
||||||
throw coreutils::Exception("Expecting ( for SUBSTRING parameters.");
|
throw coreutils::Exception("Expecting ( for SUBSTRING parameters.");
|
||||||
Operand parm1(in, global, lvariables, keywords);
|
Operand parm1(in, tag);
|
||||||
if(!in.ifNext(","))
|
if(!in.ifNext(","))
|
||||||
throw coreutils::Exception("Expecting , in SUBSTRING expression.");
|
throw coreutils::Exception("Expecting , in SUBSTRING expression.");
|
||||||
Operand parm2(in, global, lvariables, keywords);
|
Operand parm2(in, tag);
|
||||||
if(in.ifNext(")")) {
|
if(in.ifNext(")")) {
|
||||||
string = parm1.string.substring(parm2.string.asInteger());
|
string = parm1.string.substring(parm2.string.asInteger());
|
||||||
} else if(!in.ifNext(","))
|
} else if(!in.ifNext(","))
|
||||||
throw coreutils::Exception("Expecting , in SUBSTRING expression.");
|
throw coreutils::Exception("Expecting , in SUBSTRING expression.");
|
||||||
Operand parm3(in, global, lvariables, keywords);
|
Operand parm3(in, tag);
|
||||||
if(in.ifNext(")")) {
|
if(in.ifNext(")")) {
|
||||||
string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger());
|
string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger());
|
||||||
} else
|
} else
|
||||||
@ -47,10 +44,10 @@ namespace jet {
|
|||||||
} else if(in.ifNextIgnoreCase("LEFT")) {
|
} else if(in.ifNextIgnoreCase("LEFT")) {
|
||||||
if(!in.ifNext("("))
|
if(!in.ifNext("("))
|
||||||
throw coreutils::Exception("Expecting ( for LEFT parameters.");
|
throw coreutils::Exception("Expecting ( for LEFT parameters.");
|
||||||
Operand parm1(in, global, lvariables, keywords);
|
Operand parm1(in, tag);
|
||||||
if(!in.ifNext(","))
|
if(!in.ifNext(","))
|
||||||
throw coreutils::Exception("Expecting , in LEFT expression.");
|
throw coreutils::Exception("Expecting , in LEFT expression.");
|
||||||
Operand parm2(in, global, lvariables, keywords);
|
Operand parm2(in, tag);
|
||||||
if(in.ifNext(")")) {
|
if(in.ifNext(")")) {
|
||||||
string = parm1.string.substring(0, parm2.string.asInteger());
|
string = parm1.string.substring(0, parm2.string.asInteger());
|
||||||
} else
|
} else
|
||||||
@ -58,9 +55,9 @@ namespace jet {
|
|||||||
} else if(in.ifNextIgnoreCase("EXPR")) {
|
} else if(in.ifNextIgnoreCase("EXPR")) {
|
||||||
if(!in.ifNext("("))
|
if(!in.ifNext("("))
|
||||||
throw coreutils::Exception("Expecting ( for EXPR parameters.");
|
throw coreutils::Exception("Expecting ( for EXPR parameters.");
|
||||||
Operand parm1(in, global, lvariables, keywords);
|
Operand parm1(in, tag);
|
||||||
if(in.ifNext(")")) {
|
if(in.ifNext(")")) {
|
||||||
Operand op(parm1.string, global, lvariables, keywords);
|
Operand op(parm1.string, tag);
|
||||||
string = op.string;
|
string = op.string;
|
||||||
isNumber = op.isNumber;
|
isNumber = op.isNumber;
|
||||||
boolean = op.boolean;
|
boolean = op.boolean;
|
||||||
@ -108,7 +105,7 @@ namespace jet {
|
|||||||
in.skipWhitespace();
|
in.skipWhitespace();
|
||||||
|
|
||||||
if(in.ifNext("!=") || in.ifNext("<>")) {
|
if(in.ifNext("!=") || in.ifNext("<>")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue != op.doubleValue) {
|
if(doubleValue != op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -132,7 +129,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(in.ifNext("<=")) {
|
if(in.ifNext("<=")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue <= op.doubleValue) {
|
if(doubleValue <= op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -156,7 +153,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(in.ifNext(">=")) {
|
if(in.ifNext(">=")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue >= op.doubleValue) {
|
if(doubleValue >= op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -180,7 +177,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(in.ifNext("=")) {
|
if(in.ifNext("=")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue == op.doubleValue) {
|
if(doubleValue == op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -204,7 +201,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(in.ifNext("<")) {
|
if(in.ifNext("<")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue < op.doubleValue) {
|
if(doubleValue < op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -228,7 +225,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(in.ifNext(">")) {
|
if(in.ifNext(">")) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(isNumber && op.isNumber) {
|
if(isNumber && op.isNumber) {
|
||||||
if(doubleValue > op.doubleValue) {
|
if(doubleValue > op.doubleValue) {
|
||||||
boolean = true;
|
boolean = true;
|
||||||
@ -253,7 +250,7 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
if(in.ifNext("+")) {
|
if(in.ifNext("+")) {
|
||||||
if(isNumber) {
|
if(isNumber) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(op.isNumber) {
|
if(op.isNumber) {
|
||||||
doubleValue += op.doubleValue;
|
doubleValue += op.doubleValue;
|
||||||
string = std::format("{:.12f}", doubleValue);
|
string = std::format("{:.12f}", doubleValue);
|
||||||
@ -264,7 +261,7 @@ namespace jet {
|
|||||||
throw coreutils::Exception("operand is not a number.");
|
throw coreutils::Exception("operand is not a number.");
|
||||||
} else if(in.ifNext("-")) {
|
} else if(in.ifNext("-")) {
|
||||||
if(isNumber) {
|
if(isNumber) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(op.isNumber) {
|
if(op.isNumber) {
|
||||||
doubleValue -= op.doubleValue;
|
doubleValue -= op.doubleValue;
|
||||||
string = std::format("{:.12f}", doubleValue);
|
string = std::format("{:.12f}", doubleValue);
|
||||||
@ -275,7 +272,7 @@ namespace jet {
|
|||||||
throw coreutils::Exception("operand is not a number.");
|
throw coreutils::Exception("operand is not a number.");
|
||||||
} else if(in.ifNext("*")) {
|
} else if(in.ifNext("*")) {
|
||||||
if(isNumber) {
|
if(isNumber) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(op.isNumber) {
|
if(op.isNumber) {
|
||||||
doubleValue *= op.doubleValue;
|
doubleValue *= op.doubleValue;
|
||||||
string = std::format("{:.12f}", doubleValue);
|
string = std::format("{:.12f}", doubleValue);
|
||||||
@ -286,7 +283,7 @@ namespace jet {
|
|||||||
throw coreutils::Exception("operand is not a number.");
|
throw coreutils::Exception("operand is not a number.");
|
||||||
} else if(in.ifNext("/")) {
|
} else if(in.ifNext("/")) {
|
||||||
if(isNumber) {
|
if(isNumber) {
|
||||||
Operand op(in, global, lvariables, keywords);
|
Operand op(in, tag);
|
||||||
if(op.isNumber) {
|
if(op.isNumber) {
|
||||||
doubleValue /= op.doubleValue;
|
doubleValue /= op.doubleValue;
|
||||||
string = std::format("{:.12f}", doubleValue);
|
string = std::format("{:.12f}", doubleValue);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define __Operand_h__
|
#define __Operand_h__
|
||||||
|
|
||||||
#include "MString.h"
|
#include "MString.h"
|
||||||
|
#include "Tag.h"
|
||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
|
|
||||||
namespace jet {
|
namespace jet {
|
||||||
@ -9,10 +10,7 @@ namespace jet {
|
|||||||
class Operand {
|
class Operand {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Operand(coreutils::ZString &in,
|
Operand(coreutils::ZString &in, Tag &tag);
|
||||||
Global &global,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &lvariables,
|
|
||||||
std::map<coreutils::MString, coreutils::MString> &keywords);
|
|
||||||
|
|
||||||
bool isNumber;
|
bool isNumber;
|
||||||
|
|
||||||
|
49
Tag.cpp
49
Tag.cpp
@ -1,6 +1,5 @@
|
|||||||
#include "Tag.h"
|
#include "Tag.h"
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "KeywordValue.h"
|
|
||||||
#include "Global.h"
|
#include "Global.h"
|
||||||
#include "__mysql.h"
|
#include "__mysql.h"
|
||||||
#include "__sql.h"
|
#include "__sql.h"
|
||||||
@ -111,8 +110,18 @@ namespace jet {
|
|||||||
copyContainer(container, parentOut);
|
copyContainer(container, parentOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tag::resolveKeyword(coreutils::ZString keyword) {
|
coreutils::MString Tag::resolveKeyword(coreutils::ZString keyword) {
|
||||||
keywords[keyword] = KeywordValue(keywords[keyword], global, parent->local->variables, keywords);
|
coreutils::MString resolved;
|
||||||
|
keyword.reset();
|
||||||
|
while(!keyword.eod()) {
|
||||||
|
if(keyword.startsWith("$[") || keyword.startsWith("#[")) {
|
||||||
|
resolved.write(getVariable(keyword));
|
||||||
|
} else {
|
||||||
|
resolved.write(keyword.charAt(0));
|
||||||
|
keyword.nextChar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tag::processContainer(coreutils::ZString &container) {
|
void Tag::processContainer(coreutils::ZString &container) {
|
||||||
@ -393,7 +402,7 @@ namespace jet {
|
|||||||
renderVariableName(variable, name, modifier);
|
renderVariableName(variable, name, modifier);
|
||||||
name.split(".");
|
name.split(".");
|
||||||
if(name.getList().size() == 1) {
|
if(name.getList().size() == 1) {
|
||||||
if(global.variables.find(name[0]) == globals.variables.end())
|
if(global.variables.find(name[0]) == global.variables.end())
|
||||||
throw coreutils::Exception("global variable is not initialized.");
|
throw coreutils::Exception("global variable is not initialized.");
|
||||||
return processModifier(global.variables[name[0]], modifier);
|
return processModifier(global.variables[name[0]], modifier);
|
||||||
}
|
}
|
||||||
@ -432,11 +441,11 @@ namespace jet {
|
|||||||
void Tag::storeVariable(coreutils::ZString variable) {
|
void Tag::storeVariable(coreutils::ZString variable) {
|
||||||
if(keywordDefined("expr")) {
|
if(keywordDefined("expr")) {
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||||
global.variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
global.variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
|
||||||
else if(keywords["scope"] == "local")
|
else if(keywords["scope"] == "local")
|
||||||
local->variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
local->variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
|
||||||
else if(keywords["scope"] == "parent")
|
else if(keywords["scope"] == "parent")
|
||||||
local->parent->variables[keywords[variable]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
local->parent->variables[keywords[variable]] = Operand(keywords["expr"], *this).string;
|
||||||
} else if(hasContainer) {
|
} else if(hasContainer) {
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
if(evaluate) {
|
if(evaluate) {
|
||||||
@ -465,4 +474,30 @@ namespace jet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
coreutils::MString Tag::processModifier(coreutils::MString &value, coreutils::MString &modifier) {
|
||||||
|
if(modifier == "")
|
||||||
|
return value;
|
||||||
|
if(modifier == "tobinary")
|
||||||
|
return value.toBinary();
|
||||||
|
else if(modifier == "frombinary")
|
||||||
|
return value.fromBinary();
|
||||||
|
else if(modifier == "tohex")
|
||||||
|
return value.toHex();
|
||||||
|
else if(modifier == "fromhex")
|
||||||
|
return value.fromHex();
|
||||||
|
else if(modifier == "tobase64")
|
||||||
|
return value.toBase64();
|
||||||
|
else if(modifier == "frombase64")
|
||||||
|
return value.fromBase64();
|
||||||
|
else if(modifier == "toupper")
|
||||||
|
return value.toUpper();
|
||||||
|
else if(modifier == "tolower")
|
||||||
|
return value.toLower();
|
||||||
|
else if(modifier == "tocgi")
|
||||||
|
return value.toCGI();
|
||||||
|
else if(modifier == "fromcgi")
|
||||||
|
return value.fromCGI();
|
||||||
|
throw coreutils::Exception("modifier not valid.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
13
Tag.h
13
Tag.h
@ -14,12 +14,17 @@ namespace jet {
|
|||||||
Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = "");
|
Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = "");
|
||||||
virtual ~Tag();
|
virtual ~Tag();
|
||||||
|
|
||||||
void resolveKeyword(coreutils::ZString keyword);
|
coreutils::MString getVariable(coreutils::ZString &variable);
|
||||||
|
|
||||||
|
coreutils::MString resolveKeyword(coreutils::ZString keyword);
|
||||||
std::map<coreutils::MString, coreutils::MString> variables;
|
std::map<coreutils::MString, coreutils::MString> variables;
|
||||||
std::map<coreutils::MString, coreutils::MString> keywords;
|
std::map<coreutils::MString, coreutils::MString> keywords;
|
||||||
coreutils::ZString name;
|
coreutils::ZString name;
|
||||||
coreutils::ZString container;
|
coreutils::ZString container;
|
||||||
coreutils::ZString container2;
|
coreutils::ZString container2;
|
||||||
|
Global &global;
|
||||||
|
Tag *parent;
|
||||||
|
Tag *local;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool hasContainer = false;
|
bool hasContainer = false;
|
||||||
@ -29,10 +34,6 @@ namespace jet {
|
|||||||
void processContainer(coreutils::ZString &container);
|
void processContainer(coreutils::ZString &container);
|
||||||
void copyContainer(coreutils::ZString &in, coreutils::MString &out);
|
void copyContainer(coreutils::ZString &in, coreutils::MString &out);
|
||||||
|
|
||||||
Global &global;
|
|
||||||
Tag *parent;
|
|
||||||
Tag *local;
|
|
||||||
|
|
||||||
coreutils::MString &parentOut;
|
coreutils::MString &parentOut;
|
||||||
coreutils::MString out;
|
coreutils::MString out;
|
||||||
coreutils::MString containerOut;
|
coreutils::MString containerOut;
|
||||||
@ -43,7 +44,6 @@ 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 renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier);
|
||||||
void storeVariable(coreutils::ZString variable);
|
void storeVariable(coreutils::ZString variable);
|
||||||
|
|
||||||
@ -61,6 +61,7 @@ namespace jet {
|
|||||||
bool ifEndTagName(coreutils::ZString &in);
|
bool ifEndTagName(coreutils::ZString &in);
|
||||||
bool ifSplitTagName(coreutils::ZString &in);
|
bool ifSplitTagName(coreutils::ZString &in);
|
||||||
|
|
||||||
|
coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
25
__call.cpp
25
__call.cpp
@ -14,16 +14,14 @@ namespace jet {
|
|||||||
throw coreutils::Exception("call tag cannot have a container.");
|
throw coreutils::Exception("call tag cannot have a container.");
|
||||||
if(!keywordDefined("pgm"))
|
if(!keywordDefined("pgm"))
|
||||||
throw coreutils::Exception("pgm keyword must be specified.");
|
throw coreutils::Exception("pgm keyword must be specified.");
|
||||||
resolveKeyword("pgm");
|
|
||||||
for(ix = 0; ix <= 50; ++ix)
|
for(ix = 0; ix <= 50; ++ix)
|
||||||
argv[ix] = NULL;
|
argv[ix] = NULL;
|
||||||
argv[0] = keywords["pgm"].c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
|
argv[0] = keywords[resolveKeyword("pgm")].c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
|
||||||
for(ix = 1; ix <= 50; ++ix) {
|
for(ix = 1; ix <= 50; ++ix) {
|
||||||
coreutils::MString arg("arg");
|
coreutils::MString arg("arg");
|
||||||
arg << ix;
|
arg << ix;
|
||||||
if(keywordDefined(arg)) {
|
if(keywordDefined(arg)) {
|
||||||
resolveKeyword(arg);
|
argv[ix] = keywords[resolveKeyword(arg)].c_str();
|
||||||
argv[ix] = keywords[arg].c_str();
|
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -33,8 +31,7 @@ namespace jet {
|
|||||||
close(fdo[0]);
|
close(fdo[0]);
|
||||||
dup2(fdo[1], 1);
|
dup2(fdo[1], 1);
|
||||||
if(keywordDefined("input")) {
|
if(keywordDefined("input")) {
|
||||||
resolveKeyword("input");
|
coreutils::ZString input(variables[resolveKeyword("input")]);
|
||||||
coreutils::ZString input(variables["input"]);
|
|
||||||
pipe(fdi);
|
pipe(fdi);
|
||||||
if(fork() == 0) {
|
if(fork() == 0) {
|
||||||
close(fdi[0]);
|
close(fdi[0]);
|
||||||
@ -45,28 +42,18 @@ namespace jet {
|
|||||||
close(fdi[1]);
|
close(fdi[1]);
|
||||||
dup2(fdi[0], 0);
|
dup2(fdi[0], 0);
|
||||||
}
|
}
|
||||||
rc = execvpe(variables["pgm"].c_str(), argv, global.envp);
|
rc = execvpe(variables[resolveKeyword("pgm")].c_str(), argv, global.envp);
|
||||||
close(fdo[1]);
|
close(fdo[1]);
|
||||||
exit(errno);
|
exit(errno);
|
||||||
}
|
}
|
||||||
close(fdo[1]);
|
close(fdo[1]);
|
||||||
if(keywordDefined("name")) {
|
if(keywordDefined("name")) {
|
||||||
resolveKeyword("name");
|
storeVariable(keywords[resolveKeyword("name")]);
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
|
||||||
global.variables[keywords["name"]].read(fdo[0]);
|
|
||||||
else if(keywords["scope"] == "local")
|
|
||||||
this->local->variables[keywords["name"]].read(fdo[0]);
|
|
||||||
else if(keywords["scope"] == "parent")
|
|
||||||
this->local->parent->local->variables[keywords["name"]].read(fdo[0]);
|
|
||||||
else
|
|
||||||
throw coreutils::Exception("scope value is not valid.");
|
|
||||||
|
|
||||||
} else
|
} else
|
||||||
out.read(fdo[0]);
|
out.read(fdo[0]);
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
if(keywordDefined("error")) {
|
if(keywordDefined("error")) {
|
||||||
resolveKeyword("error");
|
global.variables[keywords[resolveKeyword("error")]] = (status >> 8 & 255);
|
||||||
global.variables[keywords["error"]] = (status >> 8 & 255);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
__cookie.cpp
10
__cookie.cpp
@ -18,21 +18,19 @@ namespace jet {
|
|||||||
throw coreutils::Exception("header tag cannot have both expr and value.");
|
throw coreutils::Exception("header tag cannot have both expr and value.");
|
||||||
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
||||||
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
||||||
resolveKeyword("name");
|
|
||||||
if(keywordDefined("expr")) {
|
if(keywordDefined("expr")) {
|
||||||
if(keywordDefined("eval"))
|
if(keywordDefined("eval"))
|
||||||
throw coreutils::Exception("Cannot use eval with expr.");
|
throw coreutils::Exception("Cannot use eval with expr.");
|
||||||
global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;
|
||||||
} else if(hasContainer) {
|
} else if(hasContainer) {
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
if(evaluate) {
|
if(evaluate) {
|
||||||
global.headers[keywords["name"]] = out;
|
global.headers[keywords[resolveKeyword("name")]] = out;
|
||||||
} else {
|
} else {
|
||||||
global.headers[keywords["name"]] = container;
|
global.headers[keywords[resolveKeyword("name")]] = container;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
resolveKeyword("value");
|
global.headers[keywords["Set-Cookie"]] = keywords[resolveKeyword("value")];
|
||||||
global.headers[keywords["Set-Cookie"]] = keywords["value"];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
29
__for.cpp
29
__for.cpp
@ -8,28 +8,23 @@ namespace jet {
|
|||||||
double counter = 0.0f;
|
double counter = 0.0f;
|
||||||
bool nameDefined = keywordDefined("name");
|
bool nameDefined = keywordDefined("name");
|
||||||
if(keywordDefined("start")) {
|
if(keywordDefined("start")) {
|
||||||
resolveKeyword("start");
|
counter = keywords[resolveKeyword("start")].asDouble();
|
||||||
counter = keywords["start"].asDouble();
|
|
||||||
keywords["start"].reset();
|
keywords["start"].reset();
|
||||||
}
|
}
|
||||||
if(keywordDefined("end"))
|
if(!keywordDefined("end"))
|
||||||
resolveKeyword("end");
|
|
||||||
else
|
|
||||||
throw coreutils::Exception("for tag requires end keyword.");
|
throw coreutils::Exception("for tag requires end keyword.");
|
||||||
if(keywordDefined("step"))
|
if(!keywordDefined("step"))
|
||||||
resolveKeyword("step");
|
|
||||||
else
|
|
||||||
throw coreutils::Exception("for tag requires step keyword.");
|
throw coreutils::Exception("for tag requires step keyword.");
|
||||||
for(double ix = counter; ix <= variables["end"].asDouble(); ix += variables["step"].asDouble()) {
|
for(double ix = counter; ix <= variables[resolveKeyword("end")].asDouble(); ix += variables[resolveKeyword("step")].asDouble()) {
|
||||||
keywords["end"].reset();
|
keywords[resolveKeyword("end")].reset();
|
||||||
keywords["step"].reset();
|
keywords[resolveKeyword("step")].reset();
|
||||||
if(nameDefined) {
|
if(nameDefined) {
|
||||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
if(!keywordDefined("scope") || (keywords[resolveKeyword("scope")] == "global"))
|
||||||
global.variables[keywords["name"]] = ix;
|
global.variables[keywords[resolveKeyword("name")]] = ix;
|
||||||
else if(keywords["scope"] == "local")
|
else if(keywords[resolveKeyword("scope")] == "local")
|
||||||
this->local->variables[keywords["name"]] = ix;
|
this->local->variables[keywords[resolveKeyword("name")]] = ix;
|
||||||
else if(keywords["scope"] == "parent")
|
else if(keywords[resolveKeyword("scope")] == "parent")
|
||||||
parent->local->variables[keywords["name"]] = ix;
|
parent->local->variables[keywords[resolveKeyword("name")]] = ix;
|
||||||
else
|
else
|
||||||
throw coreutils::Exception("scope value is not valid.");
|
throw coreutils::Exception("scope value is not valid.");
|
||||||
}
|
}
|
||||||
|
14
__header.cpp
14
__header.cpp
@ -17,21 +17,19 @@ namespace jet {
|
|||||||
throw coreutils::Exception("header tag cannot have both expr and value.");
|
throw coreutils::Exception("header tag cannot have both expr and value.");
|
||||||
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
||||||
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
||||||
resolveKeyword("name");
|
|
||||||
if(keywordDefined("expr")) {
|
if(keywordDefined("expr")) {
|
||||||
if(keywordDefined("eval"))
|
if(keywordDefined("eval"))
|
||||||
throw coreutils::Exception("Cannot use eval with expr.");
|
throw coreutils::Exception("Cannot use eval with expr.");
|
||||||
global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;
|
||||||
} else if(hasContainer) {
|
} else if(hasContainer) {
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
if(evaluate) {
|
if(evaluate) {
|
||||||
global.headers[keywords["name"]] = out;
|
global.headers[keywords[resolveKeyword("name")]] = out;
|
||||||
} else {
|
} else {
|
||||||
global.headers[keywords["name"]] = container;
|
global.headers[keywords[resolveKeyword("name")]] = container;
|
||||||
}
|
}
|
||||||
} else {
|
} else
|
||||||
resolveKeyword("value");
|
global.headers[keywords[resolveKeyword("name")]] = keywords[resolveKeyword("value")];
|
||||||
global.headers[keywords["name"]] = keywords["value"];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
__if.cpp
19
__if.cpp
@ -9,7 +9,6 @@ namespace jet {
|
|||||||
coreutils::MString result;
|
coreutils::MString result;
|
||||||
bool booleanResult = false;
|
bool booleanResult = false;
|
||||||
if(keywordDefined("value1")) {
|
if(keywordDefined("value1")) {
|
||||||
resolveKeyword("value1");
|
|
||||||
if(keywordDefined("expr"))
|
if(keywordDefined("expr"))
|
||||||
throw coreutils::Exception("Either value1 or expr can be specified but not both.");
|
throw coreutils::Exception("Either value1 or expr can be specified but not both.");
|
||||||
if(keywordDefined("value2")) {
|
if(keywordDefined("value2")) {
|
||||||
@ -17,15 +16,13 @@ namespace jet {
|
|||||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||||
} else
|
} else
|
||||||
throw coreutils::Exception("value2 required if value1 specified.");
|
throw coreutils::Exception("value2 required if value1 specified.");
|
||||||
resolveKeyword("value2");
|
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||||
resolveKeyword("type");
|
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||||
((keywords["type"] == "le") && (rc != 1)) ||
|
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
|
||||||
((keywords["type"] == "ge") && (rc != -1)))
|
|
||||||
booleanResult = true;
|
booleanResult = true;
|
||||||
else
|
else
|
||||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||||
@ -34,7 +31,7 @@ namespace jet {
|
|||||||
throw coreutils::Exception("value2 should not be specified with expr.");
|
throw coreutils::Exception("value2 should not be specified with expr.");
|
||||||
if(keywordDefined("type"))
|
if(keywordDefined("type"))
|
||||||
throw coreutils::Exception("type should not be specified with expr.");
|
throw coreutils::Exception("type should not be specified with expr.");
|
||||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||||
}
|
}
|
||||||
if(booleanResult)
|
if(booleanResult)
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
|
@ -11,10 +11,9 @@ namespace jet {
|
|||||||
output = false;
|
output = false;
|
||||||
if(!hasContainer)
|
if(!hasContainer)
|
||||||
throw coreutils::Exception("ifrow tag must have a container.");
|
throw coreutils::Exception("ifrow tag must have a container.");
|
||||||
if(!global.sessionExists(keywords["sessionid"]))
|
if(!global.sessionExists(keywords[resolveKeyword("sessionid")]))
|
||||||
throw coreutils::Exception("sessionid does not exist.");
|
throw coreutils::Exception("sessionid does not exist.");
|
||||||
resolveKeyword("sessionid");
|
if(global.getSession(keywords[resolveKeyword("sessionid")])->hasRow())
|
||||||
if(global.getSession(keywords["sessionid"])->hasRow())
|
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
else
|
else
|
||||||
processContainer(container2);
|
processContainer(container2);
|
||||||
|
@ -10,8 +10,7 @@ namespace jet {
|
|||||||
if(hasContainer)
|
if(hasContainer)
|
||||||
throw coreutils::Exception("include tag should not have a container.");
|
throw coreutils::Exception("include tag should not have a container.");
|
||||||
hasContainer = true;
|
hasContainer = true;
|
||||||
resolveKeyword("file");
|
coreutils::File file(keywords[resolveKeyword("file")]);
|
||||||
coreutils::File file(keywords["file"]);
|
|
||||||
file.read();
|
file.read();
|
||||||
container = file.asZString();
|
container = file.asZString();
|
||||||
try {
|
try {
|
||||||
|
@ -6,9 +6,7 @@
|
|||||||
namespace jet {
|
namespace jet {
|
||||||
|
|
||||||
__jet::__jet(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) {
|
__jet::__jet(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) {
|
||||||
if(keywordDefined("cgi"))
|
if(keywordDefined("cgi") && (keywords[resolveKeyword("cgi")] == "true")) {
|
||||||
resolveKeyword("cgi");
|
|
||||||
if(keywords["cgi"] == "true") {
|
|
||||||
coreutils::ZString requestMethod(getenv("REQUEST_METHOD"));
|
coreutils::ZString requestMethod(getenv("REQUEST_METHOD"));
|
||||||
if(requestMethod == "POST") {
|
if(requestMethod == "POST") {
|
||||||
coreutils::ZString contentLength(getenv("CONTENT_LENGTH"));
|
coreutils::ZString contentLength(getenv("CONTENT_LENGTH"));
|
||||||
|
14
__mysql.cpp
14
__mysql.cpp
@ -15,18 +15,16 @@ namespace jet {
|
|||||||
if(!keywordDefined("password"))
|
if(!keywordDefined("password"))
|
||||||
throw coreutils::Exception("password must be specified for mysql tag.");
|
throw coreutils::Exception("password must be specified for mysql tag.");
|
||||||
|
|
||||||
resolveKeyword("host");
|
sessionId = keywords[resolveKeyword("sessionid")];
|
||||||
resolveKeyword("database");
|
|
||||||
resolveKeyword("user");
|
|
||||||
resolveKeyword("password");
|
|
||||||
resolveKeyword("sessionid");
|
|
||||||
|
|
||||||
sessionId = keywords["sessionid"];
|
|
||||||
|
|
||||||
global.addSession(sessionId, this);
|
global.addSession(sessionId, this);
|
||||||
|
|
||||||
mysql = mysql_init(NULL);
|
mysql = mysql_init(NULL);
|
||||||
mysql = mysql_real_connect(mysql, keywords["host"].c_str(), keywords["user"].c_str(), keywords["password"].c_str(), keywords["database"].c_str(), 0, NULL, 0);
|
mysql = mysql_real_connect(mysql,
|
||||||
|
keywords[resolveKeyword("host")].c_str(),
|
||||||
|
keywords[resolveKeyword("user")].c_str(),
|
||||||
|
keywords[resolveKeyword("password")].c_str(),
|
||||||
|
keywords[resolveKeyword("database")].c_str(), 0, NULL, 0);
|
||||||
|
|
||||||
if(!mysql)
|
if(!mysql)
|
||||||
throw coreutils::Exception("database and host parameters are not valid.");
|
throw coreutils::Exception("database and host parameters are not valid.");
|
||||||
|
@ -13,12 +13,10 @@ namespace jet {
|
|||||||
throw coreutils::Exception("name keyword must be specified.");
|
throw coreutils::Exception("name keyword must be specified.");
|
||||||
if(hasContainer)
|
if(hasContainer)
|
||||||
throw coreutils::Exception("read tag does not have a container.");
|
throw coreutils::Exception("read tag does not have a container.");
|
||||||
resolveKeyword("file");
|
fd = open(keywords[resolveKeyword("file")].c_str(), O_RDONLY);
|
||||||
resolveKeyword("name");
|
|
||||||
fd = open(keywords["file"].c_str(), O_RDONLY);
|
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
throw coreutils::Exception("file name is not found.");
|
throw coreutils::Exception("file name is not found.");
|
||||||
global.variables[keywords["name"]].read(fd);
|
global.variables[keywords[resolveKeyword("name")]].read(fd);
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
__set.cpp
40
__set.cpp
@ -1,7 +1,5 @@
|
|||||||
#include "__set.h"
|
#include "__set.h"
|
||||||
#include "Exception.h"
|
#include "Exception.h"
|
||||||
#include "Operand.h"
|
|
||||||
#include "KeywordValue.h"
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
namespace jet {
|
namespace jet {
|
||||||
@ -21,42 +19,8 @@ namespace jet {
|
|||||||
if(keywordDefined("expr") && keywordDefined("eval"))
|
if(keywordDefined("expr") && keywordDefined("eval"))
|
||||||
throw coreutils::Exception("Cannot use eval with expr.");
|
throw coreutils::Exception("Cannot use eval with expr.");
|
||||||
|
|
||||||
resolveKeyword("name");
|
storeVariable(keywords[resolveKeyword("name")]);
|
||||||
storeVariable(keywords["name"]);
|
|
||||||
|
|
||||||
// if(keywordDefined("expr")) {
|
|
||||||
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
|
||||||
// global.variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
|
||||||
// else if(keywords["scope"] == "local")
|
|
||||||
// local->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
|
||||||
// else if(keywords["scope"] == "parent")
|
|
||||||
// local->parent->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
|
||||||
// } else if(hasContainer) {
|
|
||||||
// processContainer(container);
|
|
||||||
// if(evaluate) {
|
|
||||||
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
|
||||||
// global.variables[keywords["name"]] = out;
|
|
||||||
// else if(keywords["scope"] == "local")
|
|
||||||
// local->variables[keywords["name"]] = out;
|
|
||||||
// else if(keywords["scope"] == "parent")
|
|
||||||
// local->parent->variables[keywords["name"]] = out;
|
|
||||||
// } else {
|
|
||||||
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
|
||||||
// global.variables[keywords["name"]] = container;
|
|
||||||
// else if(keywords["scope"] == "local")
|
|
||||||
// local->variables[keywords["name"]] = container;
|
|
||||||
// else if(keywords["scope"] == "parent")
|
|
||||||
// local->parent->variables[keywords["name"]] = container;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// resolveKeyword("value");
|
|
||||||
// if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
|
||||||
// global.variables[keywords["name"]] = keywords["value"];
|
|
||||||
// else if(keywords["scope"] == "local")
|
|
||||||
// local->variables[keywords["name"]] = keywords["value"];
|
|
||||||
// else if(keywords["scope"] == "parent")
|
|
||||||
// local->parent->variables[keywords["name"]] = keywords["value"];
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,8 @@ namespace jet {
|
|||||||
throw coreutils::Exception("sql tag must have a container.");
|
throw coreutils::Exception("sql tag must have a container.");
|
||||||
if(!global.sessionExists(keywords["sessionid"]))
|
if(!global.sessionExists(keywords["sessionid"]))
|
||||||
throw coreutils::Exception("sessionid does not exist.");
|
throw coreutils::Exception("sessionid does not exist.");
|
||||||
resolveKeyword("sessionid");
|
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
global.getSession(keywords["sessionid"])->query(out);
|
global.getSession(keywords[resolveKeyword("sessionid")])->query(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ namespace jet {
|
|||||||
dup2(fdo[1], 1);
|
dup2(fdo[1], 1);
|
||||||
if(keywordDefined("input")) {
|
if(keywordDefined("input")) {
|
||||||
resolveKeyword("input");
|
resolveKeyword("input");
|
||||||
coreutils::ZString input(keywords["input"]);
|
coreutils::ZString input(keywords[resolveKeyword("input")]);
|
||||||
pipe(fdi);
|
pipe(fdi);
|
||||||
if(fork() == 0) {
|
if(fork() == 0) {
|
||||||
close(fdi[0]);
|
close(fdi[0]);
|
||||||
@ -31,13 +31,13 @@ namespace jet {
|
|||||||
close(fdi[1]);
|
close(fdi[1]);
|
||||||
dup2(fdi[0], 0);
|
dup2(fdi[0], 0);
|
||||||
}
|
}
|
||||||
system(keywords["cmd"].c_str());
|
system(keywords[resolveKeyword("cmd")].c_str());
|
||||||
close(fdo[1]);
|
close(fdo[1]);
|
||||||
exit(errno);
|
exit(errno);
|
||||||
}
|
}
|
||||||
close(fdo[1]);
|
close(fdo[1]);
|
||||||
if(keywordDefined("name"))
|
if(keywordDefined("name"))
|
||||||
global.variables[keywords["name"]].read(fdo[0]);
|
global.variables[keywords[resolveKeyword("name")]].read(fdo[0]);
|
||||||
else
|
else
|
||||||
out.read(fdo[0]);
|
out.read(fdo[0]);
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
|
30
__until.cpp
30
__until.cpp
@ -21,13 +21,13 @@ namespace jet {
|
|||||||
if(!keywordDefined("type"))
|
if(!keywordDefined("type"))
|
||||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||||
|
|
||||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||||
((keywords["type"] == "le") && (rc != 1)) ||
|
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||||
((keywords["type"] == "ge") && (rc != -1)))
|
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||||
booleanResult = true;
|
booleanResult = true;
|
||||||
else
|
else
|
||||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||||
@ -47,16 +47,16 @@ namespace jet {
|
|||||||
keywords["expr"].reset();
|
keywords["expr"].reset();
|
||||||
keywords["expr"] = exprSaved;
|
keywords["expr"] = exprSaved;
|
||||||
resolveKeyword("expr");
|
resolveKeyword("expr");
|
||||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||||
} else {
|
} else {
|
||||||
booleanResult = false;
|
booleanResult = false;
|
||||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||||
((keywords["type"] == "le") && (rc != 1)) ||
|
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||||
((keywords["type"] == "ge") && (rc != -1)))
|
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||||
booleanResult = true;
|
booleanResult = true;
|
||||||
}
|
}
|
||||||
} while(booleanResult);
|
} while(booleanResult);
|
||||||
|
32
__while.cpp
32
__while.cpp
@ -21,13 +21,13 @@ namespace jet {
|
|||||||
if(!keywordDefined("type"))
|
if(!keywordDefined("type"))
|
||||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||||
|
|
||||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||||
((keywords["type"] == "le") && (rc != 1)) ||
|
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||||
((keywords["type"] == "ge") && (rc != -1)))
|
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||||
booleanResult = true;
|
booleanResult = true;
|
||||||
else
|
else
|
||||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||||
@ -39,7 +39,7 @@ namespace jet {
|
|||||||
throw coreutils::Exception("type should not be specified with expr.");
|
throw coreutils::Exception("type should not be specified with expr.");
|
||||||
exprMethod = true;
|
exprMethod = true;
|
||||||
exprSaved = keywords["expr"];
|
exprSaved = keywords["expr"];
|
||||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||||
}
|
}
|
||||||
while(booleanResult) {
|
while(booleanResult) {
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
@ -47,16 +47,16 @@ namespace jet {
|
|||||||
if(exprMethod) {
|
if(exprMethod) {
|
||||||
keywords["expr"].reset();
|
keywords["expr"].reset();
|
||||||
keywords["expr"] = exprSaved;
|
keywords["expr"] = exprSaved;
|
||||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||||
} else {
|
} else {
|
||||||
booleanResult = false;
|
booleanResult = false;
|
||||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||||
((keywords["type"] == "le") && (rc != 1)) ||
|
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||||
((keywords["type"] == "ge") && (rc != -1)))
|
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||||
booleanResult = true;
|
booleanResult = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,43 +11,29 @@ namespace jet {
|
|||||||
__whiledir::__whiledir(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) {
|
__whiledir::__whiledir(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) {
|
||||||
if(!keywordDefined("path"))
|
if(!keywordDefined("path"))
|
||||||
throw coreutils::Exception("whiledir tag must specify a path.");
|
throw coreutils::Exception("whiledir tag must specify a path.");
|
||||||
resolveKeyword("path");
|
if(keywordDefined("sort") && (keywords[resolveKeyword("sort")] == "true")) {
|
||||||
resolveKeyword("sort");
|
|
||||||
if(keywordDefined("sort") && (keywords["sort"] == "true")) {
|
|
||||||
std::vector<std::filesystem::directory_entry> entries;
|
std::vector<std::filesystem::directory_entry> entries;
|
||||||
for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str()))
|
for(auto const &entry : std::filesystem::directory_iterator(variables[resolveKeyword("path")].str()))
|
||||||
entries.push_back(entry);
|
entries.push_back(entry);
|
||||||
std::sort(entries.begin(), entries.end(), [](const auto &a, const auto &b) { return a.path() < b.path(); });
|
std::sort(entries.begin(), entries.end(), [](const auto &a, const auto &b) { return a.path() < b.path(); });
|
||||||
for(const auto &entry : entries) {
|
for(const auto &entry : entries) {
|
||||||
if(keywordDefined("fullpath")) {
|
if(keywordDefined("fullpath"))
|
||||||
resolveKeyword("fullpath");
|
global.variables[keywords[resolveKeyword("fullpath")]] = entry.path();
|
||||||
global.variables[keywords["fullpath"]] = entry.path();
|
if(keywordDefined("filename"))
|
||||||
}
|
global.variables[keywords[resolveKeyword("filename")]] = entry.path().filename();
|
||||||
if(keywordDefined("filename")) {
|
if(keywordDefined("filenamenoextension"))
|
||||||
resolveKeyword("filename");
|
global.variables[keywords[resolveKeyword("filenamenoextension")]] = entry.path().stem();
|
||||||
global.variables[keywords["filename"]] = entry.path().filename();
|
|
||||||
}
|
|
||||||
if(keywordDefined("filenamenoextension")) {
|
|
||||||
resolveKeyword("filenamenoextension");
|
|
||||||
global.variables[keywords["filenamenoextension"]] = entry.path().stem();
|
|
||||||
}
|
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
container.reset();
|
container.reset();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str())) {
|
for(auto const &entry : std::filesystem::directory_iterator(variables[resolveKeyword("path")].str())) {
|
||||||
if(keywordDefined("fullpath")) {
|
if(keywordDefined("fullpath"))
|
||||||
resolveKeyword("fullpath");
|
global.variables[keywords[resolveKeyword("fullpath")]] = entry.path();
|
||||||
global.variables[keywords["fullpath"]] = entry.path();
|
if(keywordDefined("filename"))
|
||||||
}
|
global.variables[keywords[resolveKeyword("filename")]] = entry.path().filename();
|
||||||
if(keywordDefined("filename")) {
|
if(keywordDefined("filenamenoextension"))
|
||||||
resolveKeyword("filename");
|
global.variables[keywords[resolveKeyword("filenamenoextension")]] = entry.path().stem();
|
||||||
global.variables[keywords["filename"]] = entry.path().filename();
|
|
||||||
}
|
|
||||||
if(keywordDefined("filenamenoextension")) {
|
|
||||||
resolveKeyword("filenamenoextension");
|
|
||||||
global.variables[keywords["filenamenoextension"]] = entry.path().stem();
|
|
||||||
}
|
|
||||||
processContainer(container);
|
processContainer(container);
|
||||||
container.reset();
|
container.reset();
|
||||||
}
|
}
|
||||||
|
10
__write.cpp
10
__write.cpp
@ -14,7 +14,6 @@ namespace jet {
|
|||||||
processContainer(container);
|
processContainer(container);
|
||||||
if(!keywordDefined("file"))
|
if(!keywordDefined("file"))
|
||||||
throw coreutils::Exception("write tag must have file defined.");
|
throw coreutils::Exception("write tag must have file defined.");
|
||||||
resolveKeyword("file");
|
|
||||||
if(!keywordDefined("expr") && keywordDefined("value") && hasContainer)
|
if(!keywordDefined("expr") && keywordDefined("value") && hasContainer)
|
||||||
throw coreutils::Exception("write tag cannot have both value and a container.");
|
throw coreutils::Exception("write tag cannot have both value and a container.");
|
||||||
if(keywordDefined("expr") && !keywordDefined("value") && hasContainer)
|
if(keywordDefined("expr") && !keywordDefined("value") && hasContainer)
|
||||||
@ -25,20 +24,19 @@ namespace jet {
|
|||||||
throw coreutils::Exception("write tag must have a value, expr or a container.");
|
throw coreutils::Exception("write tag must have a value, expr or a container.");
|
||||||
if(!keywordDefined("mode"))
|
if(!keywordDefined("mode"))
|
||||||
throw coreutils::Exception("write tag must have a mode keyword.");
|
throw coreutils::Exception("write tag must have a mode keyword.");
|
||||||
resolveKeyword("mode");
|
if(keywords[resolveKeyword("mode")] == "append")
|
||||||
if(keywords["mode"] == "append")
|
|
||||||
mode = O_APPEND;
|
mode = O_APPEND;
|
||||||
else if(keywords["mode"] == "overwrite")
|
else if(keywords[resolveKeyword("mode")] == "overwrite")
|
||||||
mode = O_TRUNC;
|
mode = O_TRUNC;
|
||||||
else
|
else
|
||||||
throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'.");
|
throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'.");
|
||||||
int fd = open(keywords["file"].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
|
int fd = open(keywords[resolveKeyword("file")].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
|
||||||
if(hasContainer && !evaluate)
|
if(hasContainer && !evaluate)
|
||||||
len = write(fd, container.getData(), container.getLength());
|
len = write(fd, container.getData(), container.getLength());
|
||||||
else if(hasContainer && evaluate)
|
else if(hasContainer && evaluate)
|
||||||
len = write(fd, out.getData(), out.getLength());
|
len = write(fd, out.getData(), out.getLength());
|
||||||
else if(!hasContainer && keywordDefined("value"))
|
else if(!hasContainer && keywordDefined("value"))
|
||||||
len = write(fd, variables["value"].getData(), keywords["value"].getLength());
|
len = write(fd, variables[resolveKeyword("value")].getData(), keywords[resolveKeyword("value")].getLength());
|
||||||
else if(!hasContainer && keywordDefined("expr"))
|
else if(!hasContainer && keywordDefined("expr"))
|
||||||
len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength());
|
len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength());
|
||||||
close(fd);
|
close(fd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user