예제 #1
0
	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;
	}
예제 #2
0
	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));
	}
예제 #3
0
	inline bool read(T text)
	{
	  if (peek(text))
	    {
	      if (_ignoreCase && _ignoreCaseKeepSame)
		appendText(_buff.substr(0, textLen(text)));
	      else
		appendText(text);
	      return true;
	    }
	  return false;
	}
예제 #4
0
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);
}