/* This file is part of Pazpar2.
- Copyright (C) 2006-2008 Index Data
+ Copyright (C) 2006-2009 Index Data
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
#include "charsets.h"
#include "normalize7bit.h"
-#ifdef HAVE_ICU
-#include "icu_I18N.h"
-#endif // HAVE_ICU
+#if YAZ_HAVE_ICU
+#include <yaz/icu.h>
+#endif
+
/* charset handle */
struct pp2_charset_s {
const char *(*token_next_handler)(pp2_relevance_token_t prt);
const char *(*get_sort_handler)(pp2_relevance_token_t prt, int skip);
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
struct icu_chain * icu_chn;
UErrorCode icu_sts;
-#endif // HAVE_ICU
+#endif
};
static const char *pp2_relevance_token_a_to_z(pp2_relevance_token_t prt);
static const char *pp2_get_sort_ascii(pp2_relevance_token_t prt, int skip_article);
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
static const char *pp2_relevance_token_icu(pp2_relevance_token_t prt);
static const char *pp2_get_sort_icu(pp2_relevance_token_t prt, int skip_article);
-#endif // HAVE_ICU
+#endif
/* tokenzier handle */
struct pp2_relevance_token_s {
pp2_charset_t pp2_charset_create_xml(xmlNode *xml_node)
{
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
UErrorCode status = U_ZERO_ERROR;
struct icu_chain *chain = 0;
+ if (xml_node)
+ xml_node = xml_node->children;
while (xml_node && xml_node->type != XML_ELEMENT_NODE)
xml_node = xml_node->next;
- chain = icu_chain_xml_config(xml_node, &status);
+ chain = icu_chain_xml_config(xml_node, 1, &status);
if (!chain || U_FAILURE(status)){
//xmlDocPtr icu_doc = 0;
//xmlChar *xmlstr = 0;
return 0;
}
return pp2_charset_create(chain);
-#else // HAVE_ICU
+#else // YAZ_HAVE_ICU
yaz_log(YLOG_FATAL, "Error: ICU support requested with element:\n"
"<%s>\n ... \n</%s>",
xml_node->name, xml_node->name);
yaz_log(YLOG_FATAL,
- "But no ICU support compiled into pazpar2 server.");
- yaz_log(YLOG_FATAL,
- "Please install libicu36-dev and icu-doc or similar, "
- "re-configure and re-compile");
+ "But no ICU support is compiled into the YAZ library.");
return 0;
-#endif // HAVE_ICU
+#endif // YAZ_HAVE_ICU
}
pct->token_next_handler = pp2_relevance_token_a_to_z;
pct->get_sort_handler = pp2_get_sort_ascii;
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
pct->icu_chn = 0;
if (icu_chn)
{
pct->token_next_handler = pp2_relevance_token_icu;
pct->get_sort_handler = pp2_get_sort_icu;
}
-#endif // HAVE_ICU
+#endif // YAZ_HAVE_ICU
return pct;
}
prt->last_cp = 0;
prt->pct = pct;
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
if (pct->icu_chn)
{
int ok = 0;
//printf("\nfield ok: %d '%s'\n", ok, buf);
prt->pct = pct;
}
-#endif // HAVE_ICU
+#endif // YAZ_HAVE_ICU
return prt;
}
int c;
/* skip white space */
- while (*cp && (c = raw_char(tolower(*cp))) < 0)
+ while (*cp && (c = raw_char(tolower(*(const unsigned char *)cp))) < 0)
cp++;
if (*cp == '\0')
{
}
-#ifdef HAVE_ICU
+#if YAZ_HAVE_ICU
static const char *pp2_relevance_token_icu(pp2_relevance_token_t prt)
{
if (icu_chain_next_token(prt->pct->icu_chn, &prt->pct->icu_sts))
{
return 0;
}
- return icu_chain_get_norm(prt->pct->icu_chn);
+ return icu_chain_token_norm(prt->pct->icu_chn);
}
return 0;
}
static const char *pp2_get_sort_icu(pp2_relevance_token_t prt,
int skip_article)
{
- return icu_chain_get_sort(prt->pct->icu_chn);
+ return icu_chain_token_sortkey(prt->pct->icu_chn);
}
-#endif // HAVE_ICU
-
+#endif // YAZ_HAVE_ICU
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
*/
+