diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-03-22 10:02:28 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2023-03-22 10:02:28 (GMT) |
| commit | c9bc915417db22601b11da6968dbd4d09732e609 (patch) | |
| tree | 14dcab980dd9afa42beed575279fcc6aca447089 | |
| parent | 1e95b894cfd9f9f9a0623d18df09952f0885d2ed (diff) | |
| parent | 44357a25341fc6b531fda7e2d69f83c05ad7702d (diff) | |
| download | tcl-c9bc915417db22601b11da6968dbd4d09732e609.zip tcl-c9bc915417db22601b11da6968dbd4d09732e609.tar.gz tcl-c9bc915417db22601b11da6968dbd4d09732e609.tar.bz2 | |
Merge 8.7
| -rw-r--r-- | generic/tclEncoding.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index 48402d3..4e043de 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -2643,7 +2643,7 @@ UtfToUtfProc( *dst++ = (char) ((ch | 0x80) & 0xBF); continue; #if TCL_UTF_MAX < 4 - } else if ((ch | 0x7FF) == 0xDFFF) { + } else if (SURROGATE(ch)) { /* * A surrogate character is detected, handle especially. */ @@ -2793,7 +2793,7 @@ Utf32ToUtfProc( ch = (src[0] & 0xFF) << 24 | (src[1] & 0xFF) << 16 | (src[2] & 0xFF) << 8 | (src[3] & 0xFF); } #if TCL_UTF_MAX < 4 - if (((prev & ~0x3FF) == 0xD800) && ((ch & ~0x3FF) != 0xDC00)) { + if (HIGH_SURROGATE(prev) && !LOW_SURROGATE(ch)) { /* Bug [10c2c17c32]. If Hi surrogate not followed by Lo surrogate, finish 3-byte UTF-8 */ dst += Tcl_UniCharToUtf(-1, dst); } @@ -2833,7 +2833,7 @@ Utf32ToUtfProc( * fragment AND profile is not "strict", stick FFFD in its place. */ #if TCL_UTF_MAX < 4 - if ((ch & ~0x3FF) == 0xD800) { + if (HIGH_SURROGATE(ch)) { /* Bug [10c2c17c32]. If Hi surrogate, finish 3-byte UTF-8 */ dst += Tcl_UniCharToUtf(-1, dst); } @@ -3050,7 +3050,7 @@ Utf16ToUtfProc( } else { ch = (src[0] & 0xFF) << 8 | (src[1] & 0xFF); } - if (((prev & ~0x3FF) == 0xD800) && ((ch & ~0x3FF) != 0xDC00)) { + if (HIGH_SURROGATE(prev) && !LOW_SURROGATE(ch)) { if (PROFILE_STRICT(flags)) { result = TCL_CONVERT_SYNTAX; src -= 2; /* Go back to beginning of high surrogate */ @@ -3083,9 +3083,9 @@ Utf16ToUtfProc( if ((unsigned)ch - 1 < 0x7F) { *dst++ = (ch & 0xFF); - } else if (((prev & ~0x3FF) == 0xD800) || ((ch & ~0x3FF) == 0xD800)) { + } else if (HIGH_SURROGATE(prev) || HIGH_SURROGATE(ch)) { dst += Tcl_UniCharToUtf(ch | TCL_COMBINE, dst); - } else if (((ch & ~0x3FF) == 0xDC00) && !PROFILE_TCL8(flags)) { + } else if (LOW_SURROGATE(ch) && !PROFILE_TCL8(flags)) { /* Lo surrogate not preceded by Hi surrogate and not tcl8 profile */ if (PROFILE_STRICT(flags)) { result = TCL_CONVERT_UNKNOWN; @@ -3099,7 +3099,7 @@ Utf16ToUtfProc( } } - if ((ch & ~0x3FF) == 0xD800) { + if (HIGH_SURROGATE(ch)) { if (PROFILE_STRICT(flags)) { result = TCL_CONVERT_SYNTAX; src -= 2; @@ -3341,7 +3341,7 @@ UtfToUcs2Proc( ch = UNICODE_REPLACE_CHAR; } #endif - if (PROFILE_STRICT(flags) && ((ch & ~0x7FF) == 0xD800)) { + if (PROFILE_STRICT(flags) && SURROGATE(ch)) { result = TCL_CONVERT_SYNTAX; break; } |
