Files Classes Functions Hierarchy
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
1.5.8