+ int len0 = 1;
+ /* don't divide SURROGATE PAIR and VARIATION SELECTOR */
+ if (len >= 2 && IS_SURROGATE_PAIR(text[0], text[1]))
+ len0 = 2;
+ if (len-len0 >= 1 && IS_LOW_VARSEL(text[len0])) {
+ attr &= ~TATTR_COMBINING;
+ do_text_internal(ctx, x, y, text, len0+1, attr, lattr);
+ text += len0+1;
+ len -= len0+1;
+ a = TATTR_COMBINING;
+ } else if (len-len0 >= 2 && IS_HIGH_VARSEL(text[len0], text[len0+1])) {
+ attr &= ~TATTR_COMBINING;
+ do_text_internal(ctx, x, y, text, len0+2, attr, lattr);
+ text += len0+2;
+ len -= len0+2;
+ a = TATTR_COMBINING;
+ } else {
+ attr &= ~TATTR_COMBINING;
+ }
+