bool readUntil(const std::vector< T >& vec, bool contains = true) { typename std::vector< T >::const_iterator it; bool ret; std::string save; ret = false; while (readBlockIfEmpty() && !ret) { for (it = vec.begin(); it != vec.end(); ++it) if ((ret = peek(*it))) break ; if (ret) { if (contains) { save += *it; _buff = _buff.substr(textLen(*it)); } } else { save += _buff[0]; _buff = _buff.substr(1); } } if (ret) appendText(save, false); else _buff = save + _buff; return ret; }
void appendText(T text, bool truncBuff = true) { std::map< std::string, std::string >::iterator it; for (it = _tags.begin(); it != _tags.end(); ++it) it->second += text; if (truncBuff) _buff = _buff.substr(textLen(text)); }
inline bool read(T text) { if (peek(text)) { if (_ignoreCase && _ignoreCaseKeepSame) appendText(_buff.substr(0, textLen(text))); else appendText(text); return true; } return false; }
bool CDateTime::parse_chinese(string text) { if(text.length() == 0) return false; //System.out.println("========"+text); int start=0; int g[12]; int group; while(true) { group=0; for(int i=0;i<6;i++) { g[i*2] = findDigit(text, start); //第一个数字 if(g[i*2]==-1) break; group++; g[i*2+1] = findNonDigit(text, g[i*2]); if(g[i*2+1]==-1) { //没有非数字字符或者上一组的非数字到本组数字距离超过一个字符 if(i==0|| textLen(text,g[i*2-1],g[i*2])>1) { group--; break; } } start=g[2*i+1]; //非数字 if(start==-1) break; if(i>0) { if( textLen(text,g[i*2-1],g[i*2])>1) { group--; break; } } } if(group>1) break; if(group==0) return false; start=g[1]; if(start==-1) return false; } //while string strb; string datestr; switch(group) { case 6: { if(g[1]-g[0]==2) strb.append("yy"); else strb.append("yyyy"); strb.append(text.substr(g[1], g[2]-g[1])).append("MM"). append(text.substr(g[3], g[4]-g[3])).append("dd"). append(text.substr(g[5], g[6]-g[5])).append("HH"). append(text.substr(g[7], g[8]-g[7])).append("mm"). append(text.substr(g[9], g[10]-g[9])).append("ss"); if (g[11] == -1) datestr=text.substr(g[0],text.length()); else datestr=text.substr(g[0],g[11]-g[0]); break; } case 4: { if(isColon(text,g[5],g[6]) ) { strb.append("MM"). append(text.substr(g[1], g[2]-g[1])).append("dd"). append(text.substr(g[3], g[4]-g[3])).append("HH") .append(text.substr(g[5], g[6]-g[5])).append("mm"); } else { if(g[1]-g[0]==2)strb.append("yy"); else strb.append("yyyy"); strb.append(text.substr(g[1], g[2]-g[1])).append("MM"). append(text.substr(g[3], g[4]-g[3])).append("dd") .append(text.substr(g[5], g[6]-g[5])).append("HH"); } if (g[7] == -1) datestr=text.substr(g[0],text.length()); else datestr=text.substr(g[0],g[7]-g[0]); break; } case 5: { if(isColon(text,g[5],g[6]) ) { strb.append("MM"). append(text.substr(g[1], g[2]-g[1])).append("dd"). append(text.substr(g[3], g[4]-g[3])).append("HH"). append(text.substr(g[5], g[6]-g[5])).append("mm") .append(text.substr(g[7], g[8]-g[7])).append("ss"); } else { if(g[1]-g[0]==2)strb.append("yy"); else strb.append("yyyy"); strb.append(text.substr(g[1], g[2]-g[1])).append("MM"). append(text.substr(g[3], g[4]-g[3])).append("dd"). append(text.substr(g[5], g[6]-g[5])).append("HH") .append(text.substr(g[7], g[8]-g[7])).append("mm"); } if (g[9] == -1) datestr=text.substr(g[0],text.length()); else datestr=text.substr(g[0],g[9]-g[0]); break; } case 3: { if(isColon(text,g[3],g[4]) ) { strb.append("MM"). append(text.substr(g[1], g[2]-g[1])).append("dd") .append(text.substr(g[3], g[4]-g[3])).append("HH"); } else { if(g[1]-g[0]==2)strb.append("yy"); else strb.append("yyyy"); strb.append(text.substr(g[1], g[2]-g[1])).append("MM") .append(text.substr(g[3], g[4]-g[3])).append("dd"); } if (g[5] == -1) datestr=text.substr(g[0],text.length()); else datestr=text.substr(g[0],g[5]-g[0]); break; } case 2: { strb.append("MM").append(text.substr(g[1], g[2]-g[1])).append("dd"); if (g[3] == -1) datestr = text.substr(g[0],text.length()); else datestr = text.substr(g[0], g[3]-g[0]); break; } } //SpiderDateFormat df(strb); return 0;//df.parse(datestr,date); }