proj home

Files   Classes   Functions   Hierarchy  

stringtagparser.cpp

Go to the documentation of this file.
00001 #include <iostream>
00002 using namespace std;
00003 
00004 #include <stringtagparser.h>
00005 
00006 stringtagparser::stringtagparser(stringc & arg_)
00007   : arg(arg_)
00008 {
00009 }
00010 
00011 stringc stringtagparser::data( stringc & tag1 )
00012 {
00013   tagfound=false;
00014 
00015   string tagbeg="<"+tag1+">";
00016   string tagend="</"+tag1+">";
00017   string::size_type i0 = arg.find(tagbeg);
00018 
00019   if (i0==string::npos)
00020     return "";
00021 
00022   //assertreturnT(!(i0==string::npos),"");
00023 
00024 //cout << "i0=" << i0 << endl;
00025   string::size_type i1 = arg.find(tagend);
00026   if (i1==string::npos)
00027     return "";
00028   //assertreturnT(i1==string::npos,"");
00029   tagfound=true; 
00030 //cout << "i1=" << i1 << endl;
00031 
00032 //cout << i1-i0 - tagbeg.length() << endl;
00033   
00034 
00035 //cout << arg.substr(i0) << endl;
00036   string::size_type i2=i0+tagbeg.length();
00037 //cout << arg.substr(i2,i1-i2) << endl;
00038 
00039   return arg.substr(i2,i1-i2);
00040 }
00041 
00042 stringc stringtagparser::data_with_tags( stringc & tag1 ) const
00043 {
00044   string tagbeg="<"+tag1+">";
00045   string tagend="</"+tag1+">";
00046   string::size_type i0 = arg.find(tagbeg);
00047 
00048   //assertreturnT(!(i0==string::npos),"");
00049   if (i0==string::npos)
00050     return "";
00051 
00052 //cout << "i0=" << i0 << endl;
00053   string::size_type i1 = arg.find(tagend);
00054   if (i1==string::npos)
00055     return "";
00056   //assertreturnT(!(i1==string::npos),"");
00057 //cout << "i1=" << i1 << endl;
00058 
00059 //cout << i1-i0 - tagbeg.length() << endl;
00060   
00061 
00062 //cout << arg.substr(i0) << endl;
00063 //  string::size_type i2=i0+tagbeg.length();
00064 //cout << arg.substr(i2,i1-i2) << endl;
00065 
00066   return arg.substr(i0,i1-i0+tagend.length());
00067 }
00068 
00069 stringc stringtagparser::data
00070 ( 
00071   stringc & tag1, 
00072   stringc & tag2 
00073 )
00074 {
00075   stringtagparser sp( data(tag1) );
00076   return sp.data(tag2);
00077 }
00078 
00079 stringc stringtagparser::data
00080 ( 
00081   stringc & tag1, 
00082   stringc & tag2, 
00083   stringc & tag3 
00084 )
00085 {
00086   stringtagparser sp( data(tag1) );
00087   return sp.data(tag2,tag3);
00088 }
00089 
00090 stringc stringtagparser::data
00091 ( 
00092   stringc & tag1, 
00093   stringc & tag2, 
00094   stringc & tag3, 
00095   stringc & tag4 
00096 )
00097 {
00098   stringtagparser sp( data(tag1) );
00099   return sp.data(tag2,tag3,tag4);
00100 }
00101 
00102 stringc stringtagparser::data
00103 ( 
00104   stringc & tag1, 
00105   stringc & tag2, 
00106   stringc & tag3, 
00107   stringc & tag4, 
00108   stringc & tag5 
00109 )
00110 {
00111   stringtagparser sp( data(tag1) );
00112   return sp.data(tag2,tag3,tag4,tag5);
00113 }
00114 
00115 
00116 stringc stringtagparser::data
00117 ( 
00118   stringc & tag1, 
00119   stringc & tag2, 
00120   stringc & tag3, 
00121   stringc & tag4, 
00122   stringc & tag5, 
00123   stringc & tag6 
00124 )
00125 {
00126   stringtagparser sp( data(tag1) );
00127   return sp.data(tag2,tag3,tag4,tag5,tag6);
00128 }
00129 
00130 void stringtagiter::reset()
00131 {
00132   data = "";
00133   res=false;
00134   tagbeg = "<" + tag + ">";
00135   tagend = "</" + tag + ">";
00136 
00137   extractbetweentag(arg);
00138 }
00139 
00140 void stringtagiter::extractbetweentag( stringc str)
00141 {
00142   res=false;
00143 
00144   string::size_type i1 = str.find(tagbeg);
00145   if (i1==string::npos)
00146     return;
00147 
00148   string s1 = str.substr(i1+tagbeg.length());
00149   string::size_type i2 = s1.find(tagend);
00150   if (i2==string::npos)
00151     return;
00152 
00153   res=true;  // tags exist
00154 
00155   data = s1.substr(0,i2);
00156   dataunprocessed = s1.substr(i2+tagend.length());
00157 }
00158 
00159 stringtagiter::stringtagiter(stringc & arg_, stringc & tag_)
00160   : stringtagparser(arg_), tag(tag_) {}
00161 
00162 void stringtagiter::operator ++()
00163 { 
00164   extractbetweentag(dataunprocessed);
00165 }
00166 
00167 
00168 
00169 

Generated on Fri Mar 4 00:49:29 2011 for Chelton Evans Source by  doxygen 1.5.8