| /************************************************* | |
| * Perl-Compatible Regular Expressions * | |
| *************************************************/ | |
| /* PCRE is a library of functions to support regular expressions whose syntax | |
| and semantics are as close as possible to those of the Perl 5 language. | |
| Written by Philip Hazel | |
| Original API code Copyright (c) 1997-2012 University of Cambridge | |
| New API code Copyright (c) 2016 University of Cambridge | |
| ----------------------------------------------------------------------------- | |
| Redistribution and use in source and binary forms, with or without | |
| modification, are permitted provided that the following conditions are met: | |
| * Redistributions of source code must retain the above copyright notice, | |
| this list of conditions and the following disclaimer. | |
| * Redistributions in binary form must reproduce the above copyright | |
| notice, this list of conditions and the following disclaimer in the | |
| documentation and/or other materials provided with the distribution. | |
| * Neither the name of the University of Cambridge nor the names of its | |
| contributors may be used to endorse or promote products derived from | |
| this software without specific prior written permission. | |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| POSSIBILITY OF SUCH DAMAGE. | |
| ----------------------------------------------------------------------------- | |
| */ | |
| /* This file contains a function that converts a Unicode character code point | |
| into a UTF string. The behaviour is different for each code unit width. */ | |
| /* If SUPPORT_UNICODE is not defined, this function will never be called. | |
| Supply a dummy function because some compilers do not like empty source | |
| modules. */ | |
| unsigned int | |
| PRIV(ord2utf)(uint32_t cvalue, PCRE2_UCHAR *buffer) | |
| { | |
| (void)(cvalue); | |
| (void)(buffer); | |
| return 0; | |
| } | |
| /************************************************* | |
| * Convert code point to UTF * | |
| *************************************************/ | |
| /* | |
| Arguments: | |
| cvalue the character value | |
| buffer pointer to buffer for result | |
| Returns: number of code units placed in the buffer | |
| */ | |
| unsigned int | |
| PRIV(ord2utf)(uint32_t cvalue, PCRE2_UCHAR *buffer) | |
| { | |
| /* Convert to UTF-8 */ | |
| unsigned int i; | |
| for (i = 0; i < PRIV(utf8_table1_size); i++) | |
| if ((int)cvalue <= PRIV(utf8_table1)[i]) break; | |
| buffer += i; | |
| for (unsigned int j = i; j != 0; j--) | |
| { | |
| *buffer-- = 0x80 | (cvalue & 0x3f); | |
| cvalue >>= 6; | |
| } | |
| *buffer = (PCRE2_UCHAR)(PRIV(utf8_table2)[i] | (int)cvalue); | |
| return i + 1; | |
| /* Convert to UTF-16 */ | |
| if (cvalue <= 0xffff) | |
| { | |
| *buffer = (PCRE2_UCHAR)cvalue; | |
| return 1; | |
| } | |
| cvalue -= 0x10000; | |
| *buffer++ = 0xd800 | (cvalue >> 10); | |
| *buffer = 0xdc00 | (cvalue & 0x3ff); | |
| return 2; | |
| /* Convert to UTF-32 */ | |
| *buffer = (PCRE2_UCHAR)cvalue; | |
| return 1; | |
| } | |
| /* End of pcre2_ord2utf.c */ | |