- return chain;
-}
-
-static struct icu_chain_step *icu_chain_insert_step(
- struct icu_chain * chain, enum icu_chain_step_type type,
- const uint8_t * rule, UErrorCode *status)
-{
- struct icu_chain_step * step = 0;
-#if USE_ITER
-#else
- struct icu_buf_utf16 * src16 = 0;
- struct icu_buf_utf16 * buf16 = 0;
-#endif
- if (!chain || !type || !rule)
- return 0;
-
-#if USE_ITER
-#else
- /* assign utf16 src buffers as needed */
- if (chain->steps && chain->steps->buf16)
- src16 = chain->steps->buf16;
- else if (chain->src16)
- src16 = chain->src16;
- else
- return 0;
-
- /* create utf16 destination buffers as needed, or */
- switch (type)
- {
- case ICU_chain_step_type_display:
- buf16 = src16;
- break;
- case ICU_chain_step_type_casemap:
- buf16 = icu_buf_utf16_create(0);
- break;
- case ICU_chain_step_type_transform:
- case ICU_chain_step_type_transliterate:
- buf16 = icu_buf_utf16_create(0);
- break;
- case ICU_chain_step_type_tokenize:
- buf16 = icu_buf_utf16_create(0);
- break;
- break;
- default:
- break;
- }
-#endif
- /* create actual chain step with this buffer */
- step = icu_chain_step_create(chain, type, rule,
-#if USE_ITER
-#else
- buf16,
-#endif
- status);
-
- step->previous = chain->steps;
- chain->steps = step;
-
- return step;
-}
-
-#if USE_ITER
-#else
-static int icu_chain_step_next_token(struct icu_chain * chain,
- struct icu_chain_step * step,
- UErrorCode *status)
-{
- struct icu_buf_utf16 * src16 = 0;
- int got_new_token = 0;
-
- if (!chain || !chain->src16 || !step || !step->more_tokens)
- return 0;
-
- /* assign utf16 src buffers as needed, advance in previous steps
- tokens until non-zero token met, and setting stop condition */
-
- if (step->previous)
- {
- src16 = step->previous->buf16;
- /* tokens might be killed in previous steps, therefore looping */
-
- while (step->need_new_token
- && step->previous->more_tokens
- && !got_new_token)
- got_new_token
- = icu_chain_step_next_token(chain, step->previous, status);
- }
- else
- { /* first step can only work once on chain->src16 input buffer */
- src16 = chain->src16;
- step->more_tokens = 0;
- got_new_token = 1;
- }
-
- if (!src16)
- return 0;
-
- /* stop if nothing to process */
- if (step->need_new_token && !got_new_token)