version 1.1.1.1, 2012/02/21 23:05:51
|
version 1.1.1.2, 2012/02/21 23:50:25
|
Line 6
|
Line 6
|
and semantics are as close as possible to those of the Perl 5 language. |
and semantics are as close as possible to those of the Perl 5 language. |
|
|
Written by Philip Hazel |
Written by Philip Hazel |
Copyright (c) 1997-2008 University of Cambridge | Copyright (c) 1997-2012 University of Cambridge |
|
|
----------------------------------------------------------------------------- |
----------------------------------------------------------------------------- |
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
Line 52 character value into a UTF8 string. */
|
Line 52 character value into a UTF8 string. */
|
* Convert character value to UTF-8 * |
* Convert character value to UTF-8 * |
*************************************************/ |
*************************************************/ |
|
|
/* This function takes an integer value in the range 0 - 0x7fffffff | /* This function takes an integer value in the range 0 - 0x10ffff |
and encodes it as a UTF-8 character in 0 to 6 bytes. | and encodes it as a UTF-8 character in 1 to 6 pcre_uchars. |
|
|
Arguments: |
Arguments: |
cvalue the character value |
cvalue the character value |
buffer pointer to buffer for result - at least 6 bytes long | buffer pointer to buffer for result - at least 6 pcre_uchars long |
|
|
Returns: number of characters placed in the buffer |
Returns: number of characters placed in the buffer |
*/ |
*/ |
|
|
int |
int |
_pcre_ord2utf8(int cvalue, uschar *buffer) | PRIV(ord2utf)(pcre_uint32 cvalue, pcre_uchar *buffer) |
{ |
{ |
#ifdef SUPPORT_UTF8 | #ifdef SUPPORT_UTF |
| |
register int i, j; |
register int i, j; |
for (i = 0; i < _pcre_utf8_table1_size; i++) | |
if (cvalue <= _pcre_utf8_table1[i]) break; | /* Checking invalid cvalue character, encoded as invalid UTF-16 character. |
| Should never happen in practice. */ |
| if ((cvalue & 0xf800) == 0xd800 || cvalue >= 0x110000) |
| cvalue = 0xfffe; |
| |
| for (i = 0; i < PRIV(utf8_table1_size); i++) |
| if ((int)cvalue <= PRIV(utf8_table1)[i]) break; |
buffer += i; |
buffer += i; |
for (j = i; j > 0; j--) |
for (j = i; j > 0; j--) |
{ |
{ |
*buffer-- = 0x80 | (cvalue & 0x3f); |
*buffer-- = 0x80 | (cvalue & 0x3f); |
cvalue >>= 6; |
cvalue >>= 6; |
} |
} |
*buffer = _pcre_utf8_table2[i] | cvalue; | *buffer = PRIV(utf8_table2)[i] | cvalue; |
return i + 1; |
return i + 1; |
|
|
#else |
#else |
|
|
(void)(cvalue); /* Keep compiler happy; this function won't ever be */ |
(void)(cvalue); /* Keep compiler happy; this function won't ever be */ |
(void)(buffer); /* called when SUPPORT_UTF8 is not defined. */ | (void)(buffer); /* called when SUPPORT_UTF is not defined. */ |
return 0; |
return 0; |
|
|
#endif |
#endif |
} |
} |
|
|