Fixing typo and syntax

This commit is contained in:
Sam Gateau 2014-12-23 14:29:26 -08:00
parent 59387be856
commit 4bdc0d718d

View file

@ -72,10 +72,10 @@ void TextTemplate::Config::addIncludePath(const char* path) {
} }
bool TextTemplate::loadFile(const ConfigPointer& config, const char* filename, String& source) { bool TextTemplate::loadFile(const ConfigPointer& config, const char* filename, String& source) {
String s(filename); String sourceFile(filename);
String fullfilename; String fullfilename;
for (unsigned int i = 0; i < config->_paths.size(); i++) { for (unsigned int i = 0; i < config->_paths.size(); i++) {
fullfilename = config->_paths[i] + s; fullfilename = config->_paths[i] + sourceFile;
std::ifstream ifs; std::ifstream ifs;
ifs.open(fullfilename.c_str()); ifs.open(fullfilename.c_str());
if (ifs.is_open()) { if (ifs.is_open()) {
@ -622,7 +622,6 @@ const BlockPointer TextTemplate::processStepFunc(const BlockPointer& block, Stri
return block; return block;
} }
// DOes the func already exists ? // DOes the func already exists ?
if (_config->_funcs.findFunc(varName.c_str())) { if (_config->_funcs.findFunc(varName.c_str())) {
logError(block, "Declaring a new func named <%s> already exists", func.c_str()); logError(block, "Declaring a new func named <%s> already exists", func.c_str());
@ -719,183 +718,183 @@ int TextTemplate::generateTree(std::ostream& dst, const BlockPointer& block, Var
int TextTemplate::evalBlockGeneration(std::ostream& dst, const BlockPointer& block, Vars& vars, BlockPointer& branch) { int TextTemplate::evalBlockGeneration(std::ostream& dst, const BlockPointer& block, Vars& vars, BlockPointer& branch) {
switch (block->command.type) { switch (block->command.type) {
case Command::BLOCK: { case Command::BLOCK: {
branch = block; branch = block;
return 1; return 1;
} }
break; break;
case Command::VAR: { case Command::VAR: {
Vars::iterator it = vars.find(block->command.arguments.front()); Vars::iterator it = vars.find(block->command.arguments.front());
if (it != vars.end()) { if (it != vars.end()) {
dst << (*it).second; dst << (*it).second;
} else { } else {
BlockPointer funcBlock = _config->_funcs.findFunc(block->command.arguments.front().c_str()); BlockPointer funcBlock = _config->_funcs.findFunc(block->command.arguments.front().c_str());
if (funcBlock) { if (funcBlock) {
// before diving in the func tree, let's modify the vars with the local defs: // before diving in the func tree, let's modify the vars with the local defs:
int nbParams = std::min(block->command.arguments.size(), funcBlock->command.arguments.size()); int nbParams = std::min(block->command.arguments.size(), funcBlock->command.arguments.size());
std::vector< String > paramCache; std::vector< String > paramCache;
paramCache.push_back(""); paramCache.push_back("");
String val; String val;
for (int i = 1; i < nbParams; i++) { for (int i = 1; i < nbParams; i++) {
val = block->command.arguments[i]; val = block->command.arguments[i];
if ((val[0] == Tag::VAR) && (val[val.length()-1] == Tag::VAR)) { if ((val[0] == Tag::VAR) && (val[val.length()-1] == Tag::VAR)) {
val = val.substr(1, val.length()-2); val = val.substr(1, val.length()-2);
Vars::iterator it = vars.find(val); Vars::iterator it = vars.find(val);
if (it != vars.end()) {
val = (*it).second;
}
}
Vars::iterator it = vars.find(funcBlock->command.arguments[i]);
if (it != vars.end()) { if (it != vars.end()) {
paramCache.push_back((*it).second); val = (*it).second;
(*it).second = val;
} else {
vars.insert(Vars::value_type(funcBlock->command.arguments[i], val));
paramCache.push_back("");
} }
} }
generateTree(dst, funcBlock, vars); Vars::iterator it = vars.find(funcBlock->command.arguments[i]);
if (it != vars.end()) {
for (int i = 1; i < nbParams; i++) { paramCache.push_back((*it).second);
vars[ funcBlock->command.arguments[i] ] = paramCache[i]; (*it).second = val;
} else {
vars.insert(Vars::value_type(funcBlock->command.arguments[i], val));
paramCache.push_back("");
} }
} }
}
branch = block; generateTree(dst, funcBlock, vars);
return 1;
} for (int i = 1; i < nbParams; i++) {
break; vars[ funcBlock->command.arguments[i] ] = paramCache[i];
case Command::IFBLOCK: {
// ok, go through the branches and pick the first one that goes
for (auto child: block->blocks) {
int numPasses = evalBlockGeneration(dst, child, vars, branch);
if (numPasses > 0) {
return numPasses;
} }
} }
} }
break; branch = block;
return 1;
}
break;
case Command::IFBLOCK: {
// ok, go through the branches and pick the first one that goes
for (auto child: block->blocks) {
int numPasses = evalBlockGeneration(dst, child, vars, branch);
if (numPasses > 0) {
return numPasses;
}
}
}
break;
case Command::IF: case Command::IF:
case Command::ELIF: { case Command::ELIF: {
if (!block->command.arguments.empty()) { if (!block->command.arguments.empty()) {
// Just one argument means check for the var beeing defined // Just one argument means check for the var beeing defined
if (block->command.arguments.size() == 1) { if (block->command.arguments.size() == 1) {
Vars::iterator it = vars.find(block->command.arguments.front()); Vars::iterator it = vars.find(block->command.arguments.front());
if (it != vars.end()) { if (it != vars.end()) {
branch = block;
return 1;
}
} else if (block->command.arguments.size() == 2) {
if (block->command.arguments[0].compare("not") == 0) {
Vars::iterator it = vars.find(block->command.arguments[1]);
if (it == vars.end()) {
branch = block; branch = block;
return 1; return 1;
} }
} else if (block->command.arguments.size() == 2) { }
if (block->command.arguments[0].compare("not") == 0) { } else if (block->command.arguments.size() == 3) {
Vars::iterator it = vars.find(block->command.arguments[1]); if (block->command.arguments[1].compare("and") == 0) {
if (it == vars.end()) { Vars::iterator itL = vars.find(block->command.arguments[0]);
branch = block; Vars::iterator itR = vars.find(block->command.arguments[2]);
return 1; if ((itL != vars.end()) && (itR != vars.end())) {
} branch = block;
return 1;
} }
} else if (block->command.arguments.size() == 3) { } else if (block->command.arguments[1].compare("or") == 0) {
if (block->command.arguments[1].compare("and") == 0) { Vars::iterator itL = vars.find(block->command.arguments[0]);
Vars::iterator itL = vars.find(block->command.arguments[0]); Vars::iterator itR = vars.find(block->command.arguments[2]);
Vars::iterator itR = vars.find(block->command.arguments[2]); if ((itL != vars.end()) || (itR != vars.end())) {
if ((itL != vars.end()) && (itR != vars.end())) { branch = block;
return 1;
}
} else if (block->command.arguments[1].compare("==") == 0) {
Vars::iterator itL = vars.find(block->command.arguments[0]);
if (itL != vars.end()) {
if ((*itL).second.compare(block->command.arguments[2]) == 0) {
branch = block; branch = block;
return 1; return 1;
} }
} else if (block->command.arguments[1].compare("or") == 0) {
Vars::iterator itL = vars.find(block->command.arguments[0]);
Vars::iterator itR = vars.find(block->command.arguments[2]);
if ((itL != vars.end()) || (itR != vars.end())) {
branch = block;
return 1;
}
} else if (block->command.arguments[1].compare("==") == 0) {
Vars::iterator itL = vars.find(block->command.arguments[0]);
if (itL != vars.end()) {
if ((*itL).second.compare(block->command.arguments[2]) == 0) {
branch = block;
return 1;
}
}
} }
} }
} }
}
return 0;
}
break;
case Command::ELSE: {
branch = block;
return 1;
}
break;
case Command::ENDIF: {
branch = block;
return 1;
}
break;
case Command::DEF: {
if (block->command.arguments.size()) {
// THe actual value of the var defined sneeds to be evaluated:
String val;
for (int t = 1; t < block->command.arguments.size(); t++) {
// detect if a param is a var
int len = block->command.arguments[t].length();
if ((block->command.arguments[t][0] == Tag::VAR)
&& (block->command.arguments[t][len-1] == Tag::VAR)) {
String var = block->command.arguments[t].substr(1, len-2);
Vars::iterator it = vars.find(var);
if (it != vars.end()) {
val += (*it).second;
}
} else {
val += block->command.arguments[t];
}
}
Vars::iterator it = vars.find(block->command.arguments.front());
if (it == vars.end()) {
vars.insert(Vars::value_type(block->command.arguments.front(), val));
} else {
(*it).second = val;
}
branch = block;
return 1;
} else {
branch = block;
return 0; return 0;
} }
break; }
case Command::ELSE: { break;
branch = block;
return 1;
}
break;
case Command::ENDIF: {
branch = block;
return 1;
}
break;
case Command::DEF: {
if (block->command.arguments.size()) {
// THe actual value of the var defined sneeds to be evaluated:
String val;
for (int t = 1; t < block->command.arguments.size(); t++) {
// detect if a param is a var
int len = block->command.arguments[t].length();
if ((block->command.arguments[t][0] == Tag::VAR)
&& (block->command.arguments[t][len-1] == Tag::VAR)) {
String var = block->command.arguments[t].substr(1, len-2);
Vars::iterator it = vars.find(var);
if (it != vars.end()) {
val += (*it).second;
}
} else {
val += block->command.arguments[t];
}
}
Vars::iterator it = vars.find(block->command.arguments.front());
if (it == vars.end()) {
vars.insert(Vars::value_type(block->command.arguments.front(), val));
} else {
(*it).second = val;
}
branch = block;
return 1;
} else {
branch = block;
return 0;
}
}
break;
case Command::INCLUDE: { case Command::INCLUDE: {
TextTemplatePointer include = _config->findInclude(block->command.arguments.front().c_str()); TextTemplatePointer include = _config->findInclude(block->command.arguments.front().c_str());
if (include && !include->_root->blocks.empty()) { if (include && !include->_root->blocks.empty()) {
if (&include->_root) { if (&include->_root) {
generateTree(dst, include->_root, vars); generateTree(dst, include->_root, vars);
}
} }
branch = block;
return 1;
} }
break;
branch = block;
return 1;
}
break;
case Command::FUNC: { case Command::FUNC: {
branch = block; branch = block;
return 1; return 1;
} }
break; break;
case Command::ENDFUNC: { case Command::ENDFUNC: {
branch = block; branch = block;
return 1; return 1;
} }
break; break;
default: { default: {
} }
} }
return 0; return 0;