parser.cpp

Go to the documentation of this file.
00001 
00009 #include "Parser.h"
00010 
00011 using namespace MeshLib;
00012 
00016 CParser::~CParser()
00017 {
00018   //release all the tokens
00019 
00020   for( std::list<CToken*>::iterator titer = m_tokens.begin(); titer != m_tokens.end(); titer ++ )
00021   {
00022       CToken * pT = *titer;
00023       delete pT;
00024   }
00025   m_tokens.clear();
00026 };
00027 
00031 CParser::CParser( const std::string & str )
00032 {
00033 
00034         //copy string
00035         unsigned int i;
00036         for(  i = 0; i < str.length(); i ++ )
00037         {
00038                 m_line[i] = str.c_str()[i];
00039         }
00040         m_line[i] = 0;
00041 
00042         m_pt = m_line;
00043         
00044         //while not reaching the end
00045         while( !end() )
00046         {
00047                 skip_blank();
00048                 if( end() ) break;
00049 
00050                 //copy key
00051 
00052                 char * pkey = m_key;
00053                 char   ch = next_char();
00054 
00055                 while( ch != ' ' && ch != '=' && !end() )
00056                 {
00057                         *pkey ++ = ch;
00058                         ch = next_char();
00059                 }
00060                 if( ch != '=' && ch != ' ')
00061                         *pkey++ = ch;
00062 
00063                 *pkey = 0;
00064 
00065                 if( ch == ' ' )
00066                 {
00067                         skip_blank();
00068                 }
00069 
00070                 if( ch != '=' )
00071                 {
00072                         CToken *        tk = new CToken;
00073                         assert(tk);
00074                         tk->m_key  = std::string( m_key );
00075                         
00076                         m_tokens.push_back( tk );
00077                         continue;
00078                 }
00079 
00080                 if( end() ) break;
00081 
00082                 ch = next_char();
00083 
00084                 while( ch != '(' ) ch = next_char();
00085 
00086                 char * pvalue = m_value;
00087 
00088                 while( ch != ')' && !end() )
00089                 {
00090                         *pvalue ++ = ch;
00091                         ch = next_char();
00092                 }
00093                 *pvalue++ = ch;
00094                 *pvalue  = 0;
00095 
00096                 CToken *        tk = new CToken;
00097                 assert(tk);
00098                 tk->m_key   = std::string( m_key   );
00099                 tk->m_value = std::string( m_value );
00100                 
00101                 m_tokens.push_back( tk );
00102                 
00103         }
00104 
00105 };
00106 
00110 char CParser::next_char()
00111 {
00112         char ch= *m_pt;
00113         m_pt++;
00114         return ch;
00115 };
00116 
00120 void CParser::skip_blank()
00121 {
00122         while( *m_pt == ' ' ) m_pt++;
00123 };
00124 
00128 bool CParser::end()
00129 {
00130         return ( (*m_pt) == 0 );
00131 };
00132 
00136 void CParser::_toString( std::string & str )
00137 {
00138         std::stringstream iss;
00139 
00140         for( std::list<CToken*>::iterator iter = m_tokens.begin() ; iter != m_tokens.end(); ++ iter )
00141         {
00142                   CToken * token = *iter;
00143                   if( iss.str().length() > 0 ) iss << " ";
00144                   iss << token->m_key << "=" << token->m_value;                   
00145         }
00146 
00147         str = iss.str();
00148 }
00149 
00153 void CParser::_removeToken( const std::string & key )
00154 {
00155         for( std::list<CToken*>::iterator iter = m_tokens.begin() ; iter != m_tokens.end(); ++ iter )
00156         {
00157                   CToken * token = *iter;
00158                   if( token->m_key == key )
00159                   {
00160                           m_tokens.erase( iter );
00161                           return;
00162                   }
00163         }
00164 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Defines