ConsoleOperation* InterpreterHelper::checkSpecialCommands(std::string & line){ if(startsWith(line,"!")){ line = eraseFirst(line,"!"); return new EmptyOperation(line); } if(false && startsWith(line,"s")){ if(startsWith(line,"setgrid")){ line = eraseFirst(line,"setgrid"); if(startsWith(line,"xy")){ CoordinateSystem::setType(TYPE_GRID_XY); }else{ if(startsWith(line,"xz")){ CoordinateSystem::setType(TYPE_GRID_XZ); }else{ if(startsWith(line,"yz")){ CoordinateSystem::setType(TYPE_GRID_YZ); }else{ CoordinateSystem::setType(TYPE_GRID); } } } } } return NULL; }
void str::trimStart(const char* pChars) { int numBegCharsToRemove = 0; const int ourLen = getLen(); for(int i = 0; i < ourLen; i++) { const int len = strlen(pChars); bool trimDone = false; for(int j = 0 ; j < len; j++) { if(pChars[j] == mpStr[i]) { trimDone = true; numBegCharsToRemove++; break; } } if(!trimDone) { break; } } if(numBegCharsToRemove > 0) { eraseFirst(numBegCharsToRemove); } }
bool InterpreterHelper::getArgE(std::string & line, double & arg){ std::cout << line << std::endl; if(getArg(line,arg)) line = eraseFirst(line,1); else return false; return true; }
bool InterpreterHelper::getArg(std::string & line, int & arg){ ///// one integer argument before ',' or ')' std::string args = extractUntil(line, ',',')'); if( ! args.length()){ args = extractUntil(line,')',')'); } if(args.length()){ arg = atoi(args.data()); line = eraseFirst(line, args.length()); return true; } return false; }
bool InterpreterHelper::getOperation(std::string & line, std::deque<char> & stack){ if( startsWith(line,".sub(") ){ line = eraseFirst(line,5); stack.push_front(CONTEXT_SUB); return true; } if( startsWith(line,".intersect(") ){ line = eraseFirst(line,11); stack.push_front(CONTEXT_INT); return true; } if( startsWith(line,".add(") ){ line = eraseFirst(line,5); stack.push_front(CONTEXT_ADD); return true; } return false; }
bool InterpreterHelper::getArg(std::string & line, double & arg){ ///// one floating point argument before ',' or ')' std::string args = extractUntil(line, ',',')'); if( ! args.length()){ args = extractUntil(line,')',')'); } if(args.length()){ getDouble(args,arg); line = eraseFirst(line, args.length()); return true; } return false; }
bool InterpreterHelper::getArgs(std::string & line, IntDimension & dim){ std::string arg = extractUntil(line,',',')'); if(arg.length()){ dim.X = atoi(arg.data()); line = eraseFirst(line,arg.length() + 1); ///+1 bo ',' arg = extractUntil(line,',',')'); if(arg.length() ){ dim.Y = atoi(arg.data()); line = eraseFirst(line,arg.length() + 1); /// +1 bo ',' arg = extractUntil(line,')',')'); if(arg.length()){ dim.Z = atoi(arg.data()); line = eraseFirst(line,arg.length() ); return true; } } } return false; }
bool InterpreterHelper::getArgs(std::string & line, Dimension & dim){ ///// arguments in format : arg,arg,arg std::string arg = extractUntil(line,',',')'); if(arg.length()){ getDouble(arg,dim.X); line = eraseFirst(line,arg.length() + 1); ///+1 bo ',' arg = extractUntil(line,',',')'); if(arg.length() ){ getDouble(arg,dim.Y); line = eraseFirst(line,arg.length() + 1); /// +1 bo ',' arg = extractUntil(line,')',')'); if(arg.length()){ getDouble(arg,dim.Z); line = eraseFirst(line,arg.length()); return true; } } } return false; }
bool str::eraseFirstWords(int words, char separator) { int n = 0; int found = 0; // test one two for (n = 0; mpStr[n] && found != words; n++) { if (mpStr[n] == separator) { found++; } } if (found == words && mpStr[n]) { eraseFirst(n); } return !!found; }
std::string InterpreterHelper::eraseFirst(std::string & line, std::string text){ return eraseFirst(line, text.length()); }
bool InterpreterHelper::getTransformation(std::string & line, AbstractPrimitive * prim,Dimension & temp){ if(startsWith(line,".rot")){ ///rotation line = eraseFirst(line,4); if(line.at(0) != '('){ ////only one arg? std::string temp; char t = line.at(0); line = eraseFirst(line,2); temp=extractUntil(line,')',')'); if(!temp.length()) return false; line = eraseFirst(line,temp.length()+1); ////+ 1 bo ')' switch(t){ case 'x' : prim->getRotation().X = atof(temp.data()); break; case 'y' : prim->getRotation().Y = atof(temp.data()); break; case 'z' : prim->getRotation().Z = atof(temp.data()); break; default : return false; } return true; }else{ line = eraseFirst(line,1); if(getArgs(line,temp)){ line = eraseFirst(line,1); prim->getRotation() = temp; return true; }else return false; } } if(startsWith(line,".transl")){ ///translation line = eraseFirst(line,7); if(line.at(0) != '('){ ////only one arg? std::string temp; char t = line.at(0); line = eraseFirst(line,2); temp=extractUntil(line,')',')'); if(!temp.length()) return false; switch(t){ case 'x' : prim->getPosition().X = atof(temp.data()); break; case 'y' : prim->getPosition().Y = atof(temp.data()); break; case 'z' : prim->getPosition().Z = atof(temp.data()); break; default : return false; } line = eraseFirst(line,temp.length()+1); ////+ 1 bo ')' return true; }else{ line = eraseFirst(line,1); if(getArgs(line,temp)){ line = eraseFirst(line,1); prim->getPosition() = temp; return true; }else return false; } } return false; }