string buildPath(const vstr &path) { string r; for( size_t j=0; j<path.size(); j++ ) { if( path[j] == "." ) continue; r+=path[j]; if( j+1<path.size() ) r+="/"; } return r; }
vector<vstr> mergeRows(const vstr& dt) { vector<vstr> ret; vstr row; for(int i=0, inrow=0; i<dt.size(); i++){ if(dt[i].find("<TR valign=\"top\">") != string::npos || dt[i].find("<tr valign=\"top\">") != string::npos){ if(inrow) error("Invalid format! Nested <tr> tags"); inrow = 1; row.clear(); continue; }else if(inrow && dt[i].find("</TR>") != string::npos || inrow && dt[i].find("</tr>") != string::npos){ inrow = 0; ret.push_back(row); continue; } if(inrow) row.push_back(dt[i]); } return ret; }
void removeHTMLTagsVec(vstr& lines) { vstr ret; for(int i=0; i<lines.size(); i++){ string inner = removeHTMLTags(lines[i]); if(inner != "") ret.push_back(inner); } lines = ret; }
constr vStrToStr(const vstr& vec_str, int spos) //spos = start position { str str = ""; for(uint i=spos; i<vec_str.size(); i++) { str += " " + vec_str.at(i); //space to show where tokens start and end } return str; }
vstr getDataTable(const vstr& lines) { vstr v; for(int i=0, seen=0; i<lines.size(); i++){ if(lines[i] == DATA_START_MARKER){ seen = 1; continue; }else if(lines[i] == DATA_END_MARKER) return v; if(seen) v.push_back(lines[i]); } error("Invalid format!"); }