bool Scene::parse( ){ bool ret = true; _lineNumber = 0; _tokenCount = 0; _inputFileStream.open( _inputSceneFile.c_str( ), std::ios::in ); if( _inputFileStream.fail( ) ){ std::cerr << "Error opening \"" << _inputSceneFile << "\" for reading." << std::endl; exit( 1 ); } std::cerr << "Starting Parse" << std::endl; _stage = (char*)"Camera"; _parseCamera( ); _stage = (char*)"ViewPlane"; _parseViewPlane( ); _stage = (char*)"Lights"; _parseLights( ); _stage = (char*)"Background"; _parseBackground( ); _stage = (char*)"Materials"; _parseMaterials( ); _stage = (char*)"Group"; _parseGroup( ); std::cerr << "Ending Parse" << std::endl; _inputFileStream.close( ); return( ret ); }
/*! Parses a Position Weight Matrices string Parses string containing position weight matrix definitions \param[in] std::string file */ bool PWM::parse(const std::string& matrix){ size_t thresh = matrix.find("THRESHOLD DEFINITION"); size_t track = matrix.find("TRACK SYMBOL DEFINITIONS"); size_t ambig = matrix.find("AMBIGUOUS SYMBOL DEFINITIONS"); size_t pwm = matrix.find("POSITION WEIGHT DEFINITIONS"); size_t back = matrix.find("BACKGROUND DEFINITION"); size_t space = matrix.find("SPACER DEFINITIONS"); size_t blank; size_t nlChar; if (thresh != std::string::npos){ blank=matrix.find("\n\n",thresh); size_t nlCharEq = matrix.rfind("####\n",blank); size_t nlCharNum= matrix.rfind("====\n",blank); //Check for optional dividing line if (nlCharEq!=std::string::npos){ nlChar=nlCharEq+5; } else if (nlCharNum!=std::string::npos){ nlChar=nlCharNum+5; } else{ //No divider line nlChar=matrix.find("\n",thresh); nlChar++; } std::string thr (matrix.substr(nlChar,blank-nlChar)); if (!_parseThreshold(thr)){ return false; } } if (track != std::string::npos){ blank=matrix.find("\n\n",track); size_t nlCharEq = matrix.rfind("####\n",blank); size_t nlCharNum= matrix.rfind("====\n",blank); //Check for optional dividing line if (nlCharEq!=std::string::npos){ nlChar=nlCharEq+5; } else if (nlCharNum!=std::string::npos){ nlChar=nlCharNum+5; } else{ //No divider line nlChar=matrix.find("\n",track); nlChar++; } std::string trck (matrix.substr(nlChar,blank-nlChar)); if (!_parseTrack(trck)){ return false; } } else{ std::cerr << "Required section: TRACK SYMBOL DEFINITIONS missing from the model" << std::endl; return false; } if (ambig != std::string::npos){ blank=matrix.find("\n\n",ambig); size_t nlCharEq = matrix.rfind("####\n",blank); size_t nlCharNum= matrix.rfind("====\n",blank); //Check for optional dividing line if (nlCharEq!=std::string::npos){ nlChar=nlCharEq+5; } else if (nlCharNum!=std::string::npos){ nlChar=nlCharNum+5; } else{ //No divider line nlChar=matrix.find("\n",ambig); nlChar++; } std::string amb(matrix.substr(nlChar,blank-nlChar)); if (!_parseAmbiguous(amb)){ return false; } } if (back!= std::string::npos){ blank=matrix.find("\n\n",back); size_t nlCharEq = matrix.rfind("####\n",blank); size_t nlCharNum= matrix.rfind("====\n",blank); //Check for optional dividing line if (nlCharEq!=std::string::npos){ nlChar=nlCharEq+5; } else if (nlCharNum!=std::string::npos){ nlChar=nlCharNum+5; } else{ //No divider line nlChar=matrix.find("\n",back); nlChar++; } std::string background(matrix.substr(nlChar,blank-nlChar)); if (!_parseBackground(background)){ return false; } } //Parse the positions if (pwm != std::string::npos){ std::string positions = matrix.substr(pwm); _parsePositions(positions); } //Parse the Spacer Information if (space != std::string::npos){ blank=matrix.find("\n\n",space); size_t nlCharEq = matrix.rfind("####\n",blank); size_t nlCharNum= matrix.rfind("====\n",blank); //Check for optional dividing line if (nlCharEq!=std::string::npos){ nlChar=nlCharEq+5; } else if (nlCharNum!=std::string::npos){ nlChar=nlCharNum+5; } else{ //No divider line nlChar=matrix.find("\n",space); nlChar++; } std::string spacer(matrix.substr(nlChar,blank-nlChar)); if (!_parseSpacer(spacer)){ return false; } } _finalizeTransitions(); return true; }