{
struct icu_chain_step *step = 0;
- if (!chain || !type || !rule)
- return 0;
+ assert(chain);
+ assert(type);
step = (struct icu_chain_step *) xmalloc(sizeof(*step));
-
step->type = type;
- /* create auxilary objects */
+
switch (step->type)
{
case ICU_chain_step_type_display:
break;
case ICU_chain_step_type_casemap:
+ assert(rule);
step->u.casemap = icu_casemap_create(rule[0], status);
break;
case ICU_chain_step_type_transform:
+ assert(rule);
/* rule omitted. Only ID used */
step->u.transform = icu_transform_create(rule, 'f', 0, status);
break;
case ICU_chain_step_type_tokenize:
+ assert(rule);
step->u.tokenizer = icu_tokenizer_create(chain->locale, rule[0], status);
break;
case ICU_chain_step_type_transliterate:
+ assert(rule);
/* we pass a dummy ID to utrans_openU.. */
step->u.transform = icu_transform_create("custom", 'f', rule, status);
break;
case YAZ_chain_step_type_stemming:
+ assert(rule);
step->u.stemmer = yaz_stemmer_create(chain->locale, rule, status);
break;
case ICU_chain_step_type_join:
+ assert(rule);
step->u.join = icu_buf_utf16_create(0);
icu_utf16_from_utf8_cstr(step->u.join, rule, status);
break;
yaz_log(YLOG_WARN, "Unsupported attribute '%s' for "
"element '%s'", attr->name, node->name);
no_errors++;
- continue;
}
}
if (!rule && node->children)
rule = nmem_text_node_cdata(node->children, nmem);
+ if (!rule && strcmp((const char *) node->name, "display"))
+ {
+ yaz_log(YLOG_WARN, "Missing attribute rule for element %s",
+ (const char *) node->name);
+ no_errors++;
+ continue;
+ }
if (!strcmp((const char *) node->name, "casemap"))
step = icu_chain_insert_step(chain,
ICU_chain_step_type_casemap,
rule, status);
else if (!strcmp((const char *) node->name, "display"))
step = icu_chain_insert_step(chain, ICU_chain_step_type_display,
- "", status);
+ rule, status);
else if (!strcmp((const char *) node->name, "stemming"))
step = icu_chain_insert_step(chain, YAZ_chain_step_type_stemming,
rule, status);
else if (!strcmp((const char *) node->name, "join"))
- {
step = icu_chain_insert_step(chain, ICU_chain_step_type_join,
rule, status);
- }
else if (!strcmp((const char *) node->name, "normalize"))
{
yaz_log(YLOG_WARN, "Element %s is deprecated. "
struct icu_buf_utf8 *result;
struct icu_buf_utf16 *input;
int token_count;
+ size_t org_start;
+ size_t org_len;
struct icu_chain_step *steps;
};
}
dst = icu_buf_utf16_create(0);
iter->status = U_ZERO_ERROR;
- if (!icu_tokenizer_next_token(step->u.tokenizer, dst, &iter->status))
+ if (!icu_tokenizer_next_token(step->u.tokenizer, dst, &iter->status,
+ &iter->org_start, &iter->org_len))
{
icu_buf_utf16_destroy(dst);
dst = 0;
/* fill and assign input string.. It will be 0 after
first iteration */
icu_utf16_from_utf8_cstr(iter->input, src8cstr, &iter->status);
+ iter->org_start = 0;
+ iter->org_len = iter->input->utf16_len;
}
void icu_iter_destroy(yaz_icu_iter_t iter)
return iter->token_count;
}
+
+void icu_iter_get_org_info(yaz_icu_iter_t iter, size_t *start, size_t *len)
+{
+ *start = iter->org_start;
+ *len = iter->org_len;
+}
+
int icu_chain_assign_cstr(struct icu_chain *chain, const char *src8cstr,
UErrorCode *status)
{
return 0;
}
+void icu_chain_get_org_info(struct icu_chain *chain, size_t *start, size_t *len)
+{
+ if (chain->iter)
+ icu_iter_get_org_info(chain->iter, start, len);
+}
+
+
#endif /* YAZ_HAVE_ICU */
/*