+ case ICU_chain_step_type_casemap:
+ if (dst)
+ {
+ struct icu_buf_utf16 *src = dst;
+
+ dst = icu_buf_utf16_create(0);
+ icu_casemap_casemap(step->u.casemap, dst, src, &iter->status,
+ iter->chain->locale);
+ icu_buf_utf16_destroy(src);
+ }
+ break;
+ case ICU_chain_step_type_tokenize:
+ if (dst)
+ {
+ struct icu_buf_utf16 *src = dst;
+
+ icu_tokenizer_attach(step->u.tokenizer, src, &iter->status);
+ icu_buf_utf16_destroy(src);
+ }
+ dst = icu_buf_utf16_create(0);
+ iter->status = U_ZERO_ERROR;
+ if (!icu_tokenizer_next_token(step->u.tokenizer, dst, &iter->status))
+ {
+ icu_buf_utf16_destroy(dst);
+ dst = 0;
+ }
+ break;
+ case ICU_chain_step_type_transform:
+ case ICU_chain_step_type_transliterate:
+ if (dst)
+ {
+ struct icu_buf_utf16 *src = dst;
+ dst = icu_buf_utf16_create(0);
+ icu_transform_trans(step->u.transform, dst, src, &iter->status);
+ icu_buf_utf16_destroy(src);
+ }
+ break;
+ case ICU_chain_step_type_display:
+ if (dst)
+ icu_utf16_to_utf8(iter->display, dst, &iter->status);
+ break;
+ default:
+ assert(0);