/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) 1995-2011 Index Data
* See the file LICENSE for details.
*/
#include <yaz/log.h>
+#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
*/
};
-struct icu_tokenizer *icu_tokenizer_create(const char *locale, char action,
- UErrorCode *status)
+static void icu_tokenizer_reset(struct icu_tokenizer *tokenizer,
+ char action)
{
- struct icu_tokenizer * tokenizer
- = (struct icu_tokenizer *) xmalloc(sizeof(struct icu_tokenizer));
-
tokenizer->action = action;
tokenizer->bi = 0;
tokenizer->buf16 = icu_buf_utf16_create(0);
tokenizer->token_id = 0;
tokenizer->token_start = 0;
tokenizer->token_end = 0;
+ tokenizer->bi = 0;
+}
+
+struct icu_tokenizer *icu_tokenizer_clone(struct icu_tokenizer *old)
+{
+ int32_t bufferSize = U_BRK_SAFECLONE_BUFFERSIZE;
+ UErrorCode status = U_ZERO_ERROR;
+ struct icu_tokenizer * tokenizer
+ = (struct icu_tokenizer *) xmalloc(sizeof(struct icu_tokenizer));
+
+ assert(old);
+ icu_tokenizer_reset(tokenizer, old->action);
+ assert(old->bi);
+ tokenizer->bi = ubrk_safeClone(old->bi, NULL, &bufferSize, &status);
+ if (U_SUCCESS(status))
+ return tokenizer;
+ return tokenizer;
+}
+
+struct icu_tokenizer *icu_tokenizer_create(const char *locale, char action,
+ UErrorCode *status)
+{
+ struct icu_tokenizer * tokenizer
+ = (struct icu_tokenizer *) xmalloc(sizeof(struct icu_tokenizer));
+ icu_tokenizer_reset(tokenizer, action);
switch (tokenizer->action)
{
case 'l':