Return TypeFunction nameArguments
boolAtUnicodeSeq(unsigned int&,unsigned int&,hzChain::Iter&,)

Declared in file: hzTextproc.h
Defined in file : hzTextproc.cpp

Function Logic:

0:START 1:uVal nLen hzChain::Iter::eof 2:zi.eof() 3:Return false 4:!(*zi&0x80) 5:Return false 6:xi ubuf items ubuf 7:!(ubuf[1]&0x80) 8:nLen uVal 9:Return false 10:(ubuf[0]&0xE0)==0xC0 11:(ubuf[1]&0xC0)==0x80 12:nLen uVal 13:Return true 14:Return false 15:(ubuf[0]&0xF0)==0xE0 16:items ubuf 17:(ubuf[1]&0xC0)==0x80&&(ubuf[2]&0xC0)==0x80 18:nLen uVal 19:Return true 20:Return false 21:(ubuf[0]&0xF8)==0xF0 22:items ubuf items ubuf 23:(ubuf[1]&0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80 24:uVal nLen 25:Return true 26:Return false 27:(ubuf[0]&0xFC)==0xF8 28:items ubuf items ubuf items ubuf 29:(ubuf[1]&0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80&&(ubuf[4]&0xC0)==0x80 30:uVal nLen 31:Return true 32:Return false 33:(ubuf[0]&0xFE)==0xFC 34:items ubuf items ubuf items ubuf items ubuf 35:(ubuf[1]&0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80&&(ubuf[4]&0xC0)==0x80&&(ubuf[5]&0xC0) 36:uVal nLen 37:Return true 38:Return false

Function body:

bool AtUnicodeSeq (unsigned int& uVal, unsigned int& nLen, hzChain::Iter& zi)
{
   _hzfunc(__func__) ;
   chIter  xi ;
   uchar   ubuf[8];
   uVal = 0;
   nLen = 0;
   if (zi.eof())
       return false ;
   if (!(*zi & 0x80))
       return false ;
   xi = zi ;
   ubuf[0]= (uchar) *xi ;
   xi++ ;
   ubuf[1]= (uchar) *xi ;
   if (!(ubuf[1]& 0x80))
       { nLen = 1; uVal = ubuf[0]; return false ; }
   if ((ubuf[0]& 0xE0)==0xC0)
   {
       if ((ubuf[1]& 0xC0)==0x80)
           { nLen = 2; uVal = ((ubuf[0]& 0x1F)<<6)+(ubuf[1]&0x3F);returntrue; }
       return false ;
   }
   if ((ubuf[0]& 0xF0)==0xE0)
   {
       xi++ ; ubuf[2]= (uchar) *xi ;
       if ((ubuf[1]& 0xC0)==0x80&&(ubuf[2]&0xC0)==0x80)
           { nLen = 3; uVal = ((ubuf[0]& 0x0F)<<12)+((ubuf[1]&0x3F)<<6)+(ubuf[2]&0x3F);returntrue;}
       return false ;
   }
   if ((ubuf[0]& 0xF8)==0xF0)
   {
       xi++ ; ubuf[2]= (uchar) *xi ;
       xi++ ; ubuf[3]= (uchar) *xi ;
       if ((ubuf[1]& 0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80)
       {
           uVal = ((ubuf[0]& 0x07)<<18)+((ubuf[1]&0x3F)<<12)+((ubuf[2]&0x3F)<<6)+(ubuf[3]&0x3F);
           nLen = 4;
           return true ;
       }
       return false ;
   }
   if ((ubuf[0]& 0xFC)==0xF8)
   {
       xi++ ; ubuf[2]= (uchar) *xi ;
       xi++ ; ubuf[3]= (uchar) *xi ;
       xi++ ; ubuf[4]= (uchar) *xi ;
       if ((ubuf[1]& 0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80&&(ubuf[4]&0xC0)==0x80)
       {
           uVal = ((ubuf[0]& 0x03)<<24)+((ubuf[1]&0x3F)<<18)+((ubuf[2]&0x3F)<<12)+((ubuf[3]&0x3F)<<6)+(ubuf[4]&0x3F);
           nLen = 5;
           return true ;
       }
       return false ;
   }
   if ((ubuf[0]& 0xFE)==0xFC)
   {
       xi++ ; ubuf[2]= (uchar) *xi ;
       xi++ ; ubuf[3]= (uchar) *xi ;
       xi++ ; ubuf[4]= (uchar) *xi ;
       xi++ ; ubuf[5]= (uchar) *xi ;
       if ((ubuf[1]& 0xC0)==0x80&&(ubuf[2]&0xC0)==0x80&&(ubuf[3]&0xC0)==0x80&&(ubuf[4]&0xC0)==0x80&&(ubuf[5]&0xC0))
       {
           uVal = ((ubuf[0]& 0x01)<<30)+((ubuf[1]&0x3F)<<24)+((ubuf[2]&0x3F)<<18)+((ubuf[3]&0x3F)<<12)
               + ((ubuf[4]& 0x3F)<<6)+(ubuf[5]& 0x3F);
           nLen = 6;
           return true ;
       }
   }
   return false ;
}