mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
72 lines
1.3 KiB
C
72 lines
1.3 KiB
C
#ifndef _UTF8_H
|
|
#define _UTF8_H
|
|
|
|
static int MapUTF8(Unicode nUnicode, char *sBuffer, int nBufferSize)
|
|
{
|
|
if ( nUnicode <= 0x0000007f )
|
|
{
|
|
if ( nBufferSize < 1 )
|
|
{
|
|
return 0;
|
|
}
|
|
sBuffer[0] = (char)nUnicode;
|
|
return 1;
|
|
}
|
|
else if ( nUnicode <= 0x000007ff )
|
|
{
|
|
if ( nBufferSize < 2 )
|
|
{
|
|
return 0;
|
|
}
|
|
sBuffer[0] = (char)(0xc0 + (nUnicode >> 6));
|
|
sBuffer[1] = (char)(0x80 + (nUnicode & 0x3f));
|
|
return 2;
|
|
}
|
|
else if ( nUnicode <= 0x0000ffff )
|
|
{
|
|
if ( nBufferSize < 3 )
|
|
{
|
|
return 0;
|
|
}
|
|
sBuffer[0] = (char)(0xe0 + (nUnicode >> 12));
|
|
sBuffer[1] = (char)(0x80 + ((nUnicode >> 6) & 0x3f));
|
|
sBuffer[2] = (char)(0x80 + (nUnicode & 0x3f));
|
|
return 3;
|
|
}
|
|
else if ( nUnicode <= 0x0010ffff )
|
|
{
|
|
if ( nBufferSize < 4 )
|
|
{
|
|
return 0;
|
|
}
|
|
sBuffer[0] = (char)(0xf0 + (nUnicode >> 18));
|
|
sBuffer[1] = (char)(0x80 + ((nUnicode >> 12) & 0x3f));
|
|
sBuffer[2] = (char)(0x80 + ((nUnicode >> 6) & 0x3f));
|
|
sBuffer[3] = (char)(0x80 + (nUnicode & 0x3f));
|
|
return 4;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
static int MapUCS2(Unicode nUnicode, char *sBuffer, int nBufferSize)
|
|
{
|
|
if ( nUnicode <= 0xffff )
|
|
{
|
|
if ( nBufferSize < 2 )
|
|
{
|
|
return 0;
|
|
}
|
|
sBuffer[0] = (char)((nUnicode >> 8) & 0xff);
|
|
sBuffer[1] = (char)(nUnicode & 0xff);
|
|
return 2;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
#endif /* _UTF8_H */ |