diff --git a/Global.cpp b/Global.cpp index 46f4a98..c580ae2 100644 --- a/Global.cpp +++ b/Global.cpp @@ -37,6 +37,13 @@ namespace jet { sessions.erase(sessionId); } + coreutils::MString& Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) { + if(modifier.getLength() == 0) + return value; + lastConverted = modifier; + return lastConverted; + } + coreutils::ZString Global::getVariable(coreutils::ZString &variable, std::map &lvariables) { if(variable.ifNext("$[")) { coreutils::MString name; @@ -54,8 +61,9 @@ namespace jet { } else { renderVariableName(variable, name, modifier, lvariables); name.split("."); - if(name.getList().size() == 1) - return variables[name[0]]; + if(name.getList().size() == 1) { + return processModifier(variables[name[0]], modifier); + } return getSessionVariable(name); } throw coreutils::Exception("expected variable name or type designator."); diff --git a/Global.h b/Global.h index dcb147f..9a055e3 100644 --- a/Global.h +++ b/Global.h @@ -18,6 +18,7 @@ namespace jet { bool sessionExists(coreutils::MString sessionId); void addSession(coreutils::MString sessionId, __mysql *mysql); void removeSession(coreutils::MString sessionId); + coreutils::MString& processModifier(coreutils::MString &value, coreutils::MString &modifier); coreutils::ZString getVariable(coreutils::ZString &variable, std::map &lvariables); void renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier, std::map &lvariables); __mysql * getSession(coreutils::MString sessionId); @@ -29,6 +30,7 @@ namespace jet { std::map sessions; std::map headers; std::map tags; + coreutils::MString lastConverted; }; diff --git a/Tag.cpp b/Tag.cpp index 00a0ce3..1571999 100644 --- a/Tag.cpp +++ b/Tag.cpp @@ -31,7 +31,7 @@ namespace jet { Tag::Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, coreutils::ZString splitTagName) : ZString(in), parentOut(parentOut), global(global), parent(parent) { this->splitTagName = splitTagName; - if(in.ifNext("<")) { + if(parent && in.ifNext("<")) { name = in.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_!"); if(in.startsWith(" ") || in.startsWith("/") || in.startsWith(">")) { bool finished = false; diff --git a/Tag.h b/Tag.h index 4b96f78..4108356 100644 --- a/Tag.h +++ b/Tag.h @@ -11,7 +11,7 @@ namespace jet { class Tag : public coreutils::ZString { public: - Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, coreutils::ZString splitTagName = ""); + Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, coreutils::ZString splitTagName = ""); virtual ~Tag(); void resolveKeyword(coreutils::ZString keyword); @@ -41,6 +41,7 @@ namespace jet { bool cleanWhitespace = false; private: + bool containerOnly = false; coreutils::ZString splitTagName; int skipBlankLine(coreutils::ZString in); diff --git a/tests/testvar.jet b/tests/testvar.jet index 7fecba4..b58f703 100755 --- a/tests/testvar.jet +++ b/tests/testvar.jet @@ -1,15 +1,14 @@ #!../jet-2.0 - + -$[$[ix]var$[ix]] +$[$[ix]var$[ix];binary] $[var$[ix]] $[var$[ix]var] $[var$[i$[letterx]]var] $[letterx;TOHEX] $[var$[i$[letterx]]$[ix]] $[var$[i$[letterx]]$[i$[letterx]]] -