Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Slightly improved (more fail-safe) surrogate handling for TCL_UTF_MAX>3. Backported from latest TIP 389 implementation. (to be used for androwish) |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-6-branch |
Files: | files | file ages | folders |
SHA3-256: |
686259e6502f5053306f9412e2aee041 |
User & Date: | jan.nijtmans 2018-04-19 22:29:00 |
Context
2018-04-20
| ||
20:17 | DeleteArray has only one caller. It is called on the "dummy" variable that is created during unset, ... check-in: 27ec7e3d3d user: dgp tags: core-8-6-branch | |
10:16 | TIP #389 implementation. check-in: e109760b1c user: jan.nijtmans tags: core-8-branch | |
2018-04-19
| ||
22:29 | Slightly improved (more fail-safe) surrogate handling for TCL_UTF_MAX>3. Backported from latest TIP ... check-in: 686259e650 user: jan.nijtmans tags: core-8-6-branch | |
02:01 | Fold TclArraySet() into its only caller. tclEnv.c no longer calls it check-in: 86bbdb131d user: dgp tags: core-8-6-branch | |
Changes
Changes to generic/tclUtf.c.
︙ | ︙ | |||
150 151 152 153 154 155 156 | if (ch >= 0) { if (ch <= 0x7FF) { buf[1] = (char) ((ch | 0x80) & 0xBF); buf[0] = (char) ((ch >> 6) | 0xC0); return 2; } if (ch <= 0xFFFF) { | | > > > | | | > > > > | | | | 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | if (ch >= 0) { if (ch <= 0x7FF) { buf[1] = (char) ((ch | 0x80) & 0xBF); buf[0] = (char) ((ch >> 6) | 0xC0); return 2; } if (ch <= 0xFFFF) { #if TCL_UTF_MAX > 3 if ((ch & 0xF800) == 0xD800) { if (ch & 0x0400) { /* Low surrogate */ if (((buf[0] & 0xF8) == 0xF0) && ((buf[1] & 0xC0) == 0x80) && ((buf[2] & 0xCF) == 0)) { /* Previous Tcl_UniChar was a High surrogate, so combine */ buf[3] = (char) ((ch & 0x3F) | 0x80); buf[2] |= (char) (((ch >> 6) & 0x0F) | 0x80); return 4; } /* Previous Tcl_UniChar was not a High surrogate, so just output */ } else { /* High surrogate */ ch += 0x40; /* Fill buffer with specific 3-byte (invalid) byte combination, so following Low surrogate can recognize it and combine */ buf[2] = (char) ((ch << 4) & 0x30); buf[1] = (char) (((ch >> 2) & 0x3F) | 0x80); buf[0] = (char) (((ch >> 8) & 0x07) | 0xF0); return 0; } } #endif goto three; } |
︙ | ︙ |