Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: source/common/ucnv_err.c

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/common/ucnv_ct.c ('k') | source/common/ucnv_lmb.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ***************************************************************************** 2 *****************************************************************************
3 * 3 *
4 * Copyright (C) 1998-2007, International Business Machines 4 * Copyright (C) 1998-2014, International Business Machines
5 * Corporation and others. All Rights Reserved. 5 * Corporation and others. All Rights Reserved.
6 * 6 *
7 ***************************************************************************** 7 *****************************************************************************
8 * 8 *
9 * ucnv_err.c 9 * ucnv_err.c
10 * Implements error behaviour functions called by T_UConverter_{from,to}Unicode 10 * Implements error behaviour functions called by T_UConverter_{from,to}Unicode
11 * 11 *
12 * 12 *
13 * Change history: 13 * Change history:
14 * 14 *
(...skipping 28 matching lines...) Expand all
43 #define UNICODE_SPACE_CODEPOINT 0x0020 43 #define UNICODE_SPACE_CODEPOINT 0x0020
44 #define UCNV_PRV_ESCAPE_ICU 0 44 #define UCNV_PRV_ESCAPE_ICU 0
45 #define UCNV_PRV_ESCAPE_C 'C' 45 #define UCNV_PRV_ESCAPE_C 'C'
46 #define UCNV_PRV_ESCAPE_XML_DEC 'D' 46 #define UCNV_PRV_ESCAPE_XML_DEC 'D'
47 #define UCNV_PRV_ESCAPE_XML_HEX 'X' 47 #define UCNV_PRV_ESCAPE_XML_HEX 'X'
48 #define UCNV_PRV_ESCAPE_JAVA 'J' 48 #define UCNV_PRV_ESCAPE_JAVA 'J'
49 #define UCNV_PRV_ESCAPE_UNICODE 'U' 49 #define UCNV_PRV_ESCAPE_UNICODE 'U'
50 #define UCNV_PRV_ESCAPE_CSS2 'S' 50 #define UCNV_PRV_ESCAPE_CSS2 'S'
51 #define UCNV_PRV_STOP_ON_ILLEGAL 'i' 51 #define UCNV_PRV_STOP_ON_ILLEGAL 'i'
52 52
53 /*
54 * IS_DEFAULT_IGNORABLE_CODE_POINT
55 * This is to check if a code point has the default ignorable unicode property.
56 * As such, this list needs to be updated if the ignorable code point list ever
57 * changes.
58 * To avoid dependency on other code, this list is hard coded here.
59 * When an ignorable code point is found and is unmappable, the default callback s
60 * will ignore them.
61 * For a list of the default ignorable code points, use this link: http://unicod e.org/cldr/utility/list-unicodeset.jsp?a=[%3ADI%3A]&g=
62 *
63 * This list should be sync with the one in CharsetCallback.java
64 */
65 #define IS_DEFAULT_IGNORABLE_CODE_POINT(c) (\
66 (c == 0x00AD) || \
67 (c == 0x034F) || \
68 (c == 0x061C) || \
69 (c == 0x115F) || \
70 (c == 0x1160) || \
71 (0x17B4 <= c && c <= 0x17B5) || \
72 (0x180B <= c && c <= 0x180E) || \
73 (0x200B <= c && c <= 0x200F) || \
74 (0x202A <= c && c <= 0x202E) || \
75 (c == 0x2060) || \
76 (0x2066 <= c && c <= 0x2069) || \
77 (0x2061 <= c && c <= 0x2064) || \
78 (0x206A <= c && c <= 0x206F) || \
79 (c == 0x3164) || \
80 (0x0FE00 <= c && c <= 0x0FE0F) || \
81 (c == 0x0FEFF) || \
82 (c == 0x0FFA0) || \
83 (0x01BCA0 <= c && c <= 0x01BCA3) || \
84 (0x01D173 <= c && c <= 0x01D17A) || \
85 (c == 0x0E0001) || \
86 (0x0E0020 <= c && c <= 0x0E007F) || \
87 (0x0E0100 <= c && c <= 0x0E01EF) || \
88 (c == 0x2065) || \
89 (0x0FFF0 <= c && c <= 0x0FFF8) || \
90 (c == 0x0E0000) || \
91 (0x0E0002 <= c && c <= 0x0E001F) || \
92 (0x0E0080 <= c && c <= 0x0E00FF) || \
93 (0x0E01F0 <= c && c <= 0x0E0FFF) \
94 )
95
96
53 /*Function Pointer STOPS at the ILLEGAL_SEQUENCE */ 97 /*Function Pointer STOPS at the ILLEGAL_SEQUENCE */
54 U_CAPI void U_EXPORT2 98 U_CAPI void U_EXPORT2
55 UCNV_FROM_U_CALLBACK_STOP ( 99 UCNV_FROM_U_CALLBACK_STOP (
56 const void *context, 100 const void *context,
57 UConverterFromUnicodeArgs *fromUArgs, 101 UConverterFromUnicodeArgs *fromUArgs,
58 const UChar* codeUnits, 102 const UChar* codeUnits,
59 int32_t length, 103 int32_t length,
60 UChar32 codePoint, 104 UChar32 codePoint,
61 UConverterCallbackReason reason, 105 UConverterCallbackReason reason,
62 UErrorCode * err) 106 UErrorCode * err)
63 { 107 {
108 if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoint))
109 {
110 /*
111 * Skip if the codepoint has unicode property of default ignorable.
112 */
113 *err = U_ZERO_ERROR;
114 }
64 /* the caller must have set the error code accordingly */ 115 /* the caller must have set the error code accordingly */
65 return; 116 return;
66 } 117 }
67 118
68 119
69 /*Function Pointer STOPS at the ILLEGAL_SEQUENCE */ 120 /*Function Pointer STOPS at the ILLEGAL_SEQUENCE */
70 U_CAPI void U_EXPORT2 121 U_CAPI void U_EXPORT2
71 UCNV_TO_U_CALLBACK_STOP ( 122 UCNV_TO_U_CALLBACK_STOP (
72 const void *context, 123 const void *context,
73 UConverterToUnicodeArgs *toUArgs, 124 UConverterToUnicodeArgs *toUArgs,
(...skipping 11 matching lines...) Expand all
85 const void *context, 136 const void *context,
86 UConverterFromUnicodeArgs *fromUArgs, 137 UConverterFromUnicodeArgs *fromUArgs,
87 const UChar* codeUnits, 138 const UChar* codeUnits,
88 int32_t length, 139 int32_t length,
89 UChar32 codePoint, 140 UChar32 codePoint,
90 UConverterCallbackReason reason, 141 UConverterCallbackReason reason,
91 UErrorCode * err) 142 UErrorCode * err)
92 { 143 {
93 if (reason <= UCNV_IRREGULAR) 144 if (reason <= UCNV_IRREGULAR)
94 { 145 {
95 if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) 146 if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoi nt))
147 {
148 /*
149 * Skip if the codepoint has unicode property of default ignorable.
150 */
151 *err = U_ZERO_ERROR;
152 }
153 else if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEG AL && reason == UCNV_UNASSIGNED))
96 { 154 {
97 *err = U_ZERO_ERROR; 155 *err = U_ZERO_ERROR;
98 } 156 }
99 /* else the caller must have set the error code accordingly. */ 157 /* else the caller must have set the error code accordingly. */
100 } 158 }
101 /* else ignore the reset, close and clone calls. */ 159 /* else ignore the reset, close and clone calls. */
102 } 160 }
103 161
104 U_CAPI void U_EXPORT2 162 U_CAPI void U_EXPORT2
105 UCNV_FROM_U_CALLBACK_SUBSTITUTE ( 163 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
106 const void *context, 164 const void *context,
107 UConverterFromUnicodeArgs *fromArgs, 165 UConverterFromUnicodeArgs *fromArgs,
108 const UChar* codeUnits, 166 const UChar* codeUnits,
109 int32_t length, 167 int32_t length,
110 UChar32 codePoint, 168 UChar32 codePoint,
111 UConverterCallbackReason reason, 169 UConverterCallbackReason reason,
112 UErrorCode * err) 170 UErrorCode * err)
113 { 171 {
114 if (reason <= UCNV_IRREGULAR) 172 if (reason <= UCNV_IRREGULAR)
115 { 173 {
116 if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEGAL && reason == UCNV_UNASSIGNED)) 174 if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoi nt))
175 {
176 /*
177 * Skip if the codepoint has unicode property of default ignorable.
178 */
179 *err = U_ZERO_ERROR;
180 }
181 else if (context == NULL || (*((char*)context) == UCNV_PRV_STOP_ON_ILLEG AL && reason == UCNV_UNASSIGNED))
117 { 182 {
118 *err = U_ZERO_ERROR; 183 *err = U_ZERO_ERROR;
119 ucnv_cbFromUWriteSub(fromArgs, 0, err); 184 ucnv_cbFromUWriteSub(fromArgs, 0, err);
120 } 185 }
121 /* else the caller must have set the error code accordingly. */ 186 /* else the caller must have set the error code accordingly. */
122 } 187 }
123 /* else ignore the reset, close and clone calls. */ 188 /* else ignore the reset, close and clone calls. */
124 } 189 }
125 190
126 /*uses uprv_itou to get a unicode escape sequence of the offensive sequence, 191 /*uses uprv_itou to get a unicode escape sequence of the offensive sequence,
(...skipping 21 matching lines...) Expand all
148 UConverterFromUCallback original = NULL; 213 UConverterFromUCallback original = NULL;
149 const void *originalContext; 214 const void *originalContext;
150 215
151 UConverterFromUCallback ignoredCallback = NULL; 216 UConverterFromUCallback ignoredCallback = NULL;
152 const void *ignoredContext; 217 const void *ignoredContext;
153 218
154 if (reason > UCNV_IRREGULAR) 219 if (reason > UCNV_IRREGULAR)
155 { 220 {
156 return; 221 return;
157 } 222 }
223 else if (reason == UCNV_UNASSIGNED && IS_DEFAULT_IGNORABLE_CODE_POINT(codePoin t))
224 {
225 /*
226 * Skip if the codepoint has unicode property of default ignorable.
227 */
228 *err = U_ZERO_ERROR;
229 return;
230 }
158 231
159 ucnv_setFromUCallBack (fromArgs->converter, 232 ucnv_setFromUCallBack (fromArgs->converter,
160 (UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE, 233 (UConverterFromUCallback) UCNV_FROM_U_CALLBACK_SUBSTITUTE,
161 NULL, 234 NULL,
162 &original, 235 &original,
163 &originalContext, 236 &originalContext,
164 &err2); 237 &err2);
165 238
166 if (U_FAILURE (err2)) 239 if (U_FAILURE (err2))
167 { 240 {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 } 470 }
398 } 471 }
399 } 472 }
400 /* reset the error */ 473 /* reset the error */
401 *err = U_ZERO_ERROR; 474 *err = U_ZERO_ERROR;
402 475
403 ucnv_cbToUWriteUChars(toArgs, uniValueString, valueStringLength, 0, err); 476 ucnv_cbToUWriteUChars(toArgs, uniValueString, valueStringLength, 0, err);
404 } 477 }
405 478
406 #endif 479 #endif
OLDNEW
« no previous file with comments | « source/common/ucnv_ct.c ('k') | source/common/ucnv_lmb.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698