1 | /************************************************* |
2 | * Perl-Compatible Regular Expressions * |
3 | *************************************************/ |
4 | |
5 | /* PCRE is a library of functions to support regular expressions whose syntax |
6 | and semantics are as close as possible to those of the Perl 5 language. |
7 | |
8 | Written by Philip Hazel |
9 | Copyright (c) 1997-2012 University of Cambridge |
10 | |
11 | ----------------------------------------------------------------------------- |
12 | Redistribution and use in source and binary forms, with or without |
13 | modification, are permitted provided that the following conditions are met: |
14 | |
15 | * Redistributions of source code must retain the above copyright notice, |
16 | this list of conditions and the following disclaimer. |
17 | |
18 | * Redistributions in binary form must reproduce the above copyright |
19 | notice, this list of conditions and the following disclaimer in the |
20 | documentation and/or other materials provided with the distribution. |
21 | |
22 | * Neither the name of the University of Cambridge nor the names of its |
23 | contributors may be used to endorse or promote products derived from |
24 | this software without specific prior written permission. |
25 | |
26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
27 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
28 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
29 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
30 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
31 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
32 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
33 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
34 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
35 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
36 | POSSIBILITY OF SUCH DAMAGE. |
37 | ----------------------------------------------------------------------------- |
38 | */ |
39 | |
40 | #pragma warning( disable : 4244) // conversion from 'int' to 'unsigned short', possible loss of data |
41 | |
42 | /* This file contains a private PCRE function that converts an ordinal |
43 | character value into a UTF8 string. */ |
44 | |
45 | #include "pcre_config.h" |
46 | #define COMPILE_PCRE8 |
47 | |
48 | #include "pcre_internal.h" |
49 | |
50 | /************************************************* |
51 | * Convert character value to UTF-8 * |
52 | *************************************************/ |
53 | |
54 | /* This function takes an integer value in the range 0 - 0x10ffff |
55 | and encodes it as a UTF-8 character in 1 to 4 pcre_uchars. |
56 | |
57 | Arguments: |
58 | cvalue the character value |
59 | buffer pointer to buffer for result - at least 6 pcre_uchars long |
60 | |
61 | Returns: number of characters placed in the buffer |
62 | */ |
63 | |
64 | unsigned |
65 | int |
66 | PRIV(ord2utf)(pcre_uint32 cvalue, pcre_uchar *buffer) |
67 | { |
68 | #ifdef SUPPORT_UTF |
69 | |
70 | register int i, j; |
71 | |
72 | for (i = 0; i < PRIV(utf8_table1_size); i++) |
73 | if ((int)cvalue <= PRIV(utf8_table1)[i]) break; |
74 | buffer += i; |
75 | for (j = i; j > 0; j--) |
76 | { |
77 | *buffer-- = 0x80 | (cvalue & 0x3f); |
78 | cvalue >>= 6; |
79 | } |
80 | *buffer = PRIV(utf8_table2)[i] | cvalue; |
81 | return i + 1; |
82 | |
83 | #else |
84 | |
85 | (void)(cvalue); /* Keep compiler happy; this function won't ever be */ |
86 | (void)(buffer); /* called when SUPPORT_UTF is not defined. */ |
87 | return 0; |
88 | |
89 | #endif |
90 | } |
91 | |
92 | /* End of pcre_ord2utf8.c */ |
93 | |