| Return Type | Function name | Arguments |
|---|---|---|
| bool | AtUnicodeSeq | (unsigned int&,unsigned int&,hzChain::Iter&,) |
Declared in file: hzTextproc.h
Defined in file : hzTextproc.cpp
Function Logic:
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 ;
}