379
380
381
382
383
384
385
386
387
388
389
390
391
392
|
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
|
+
+
+
+
+
+
|
*/
}
#endif
*chPtr = (Tcl_UniChar) byte;
return 1;
}
/* UTF_TO_UNI_MAX -- maximal value Tcl_UtfToUniChar could return */
#if TCL_UTF_MAX <= 3
# define UTF_TO_UNI_MAX 3
#else
# define UTF_TO_UNI_MAX 4
#endif
/*
*---------------------------------------------------------------------------
*
* Tcl_UtfToUniCharDString --
*
* Convert the UTF-8 string to Unicode.
|
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
|
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
|
-
+
|
return start;
}
/* simplest case - ascii char */
if (*((unsigned char *) look) < 0x80) {
return look;
}
/* navigate up to max return value of Tcl_UtfToUniChar */
for (i = 1; i <= 4; i++) {
for (i = 1; i <= UTF_TO_UNI_MAX; i++) {
if (look < start) {
look = start;
break;
}
if (*((unsigned char *) look) < 0x80) {
/* traversing back reaches ascii - either known mark points to char,
* or unexpected case with invalid utf-8 or unsupported surrogate
|