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 ; }