X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fcharsets.c;h=39ede26ab299d228b2df65e2f90ae242d8f4c9bf;hb=3d99aecedf9d6e6ebeadcedbee081049b03dbbf8;hp=80388e8713bc1417ab0f226d8f18e9ebf5deff15;hpb=f89a08d579f270d78b6e48a04ec63cef23539c88;p=pazpar2-moved-to-github.git diff --git a/src/charsets.c b/src/charsets.c index 80388e8..39ede26 100644 --- a/src/charsets.c +++ b/src/charsets.c @@ -1,5 +1,5 @@ /* 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 @@ -34,27 +34,28 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "charsets.h" #include "normalize7bit.h" -#ifdef HAVE_ICU -#include "icu_I18N.h" -#endif // HAVE_ICU +#if YAZ_HAVE_ICU +#include +#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 { @@ -68,11 +69,14 @@ 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; - struct icu_chain *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; @@ -85,17 +89,14 @@ pp2_charset_t pp2_charset_create_xml(xmlNode *xml_node) 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", 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 } @@ -105,7 +106,7 @@ pp2_charset_t pp2_charset_create(struct icu_chain * icu_chn) 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) { @@ -114,7 +115,7 @@ pp2_charset_t pp2_charset_create(struct icu_chain * 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; } @@ -136,16 +137,16 @@ pp2_relevance_token_t pp2_relevance_tokenize(pp2_charset_t pct, prt->last_cp = 0; prt->pct = pct; -#ifdef HAVE_ICU +#if YAZ_HAVE_ICU if (pct->icu_chn) { - pct->icu_sts = U_ZERO_ERROR; int ok = 0; + pct->icu_sts = U_ZERO_ERROR; ok = icu_chain_assign_cstr(pct->icu_chn, buf, &pct->icu_sts); //printf("\nfield ok: %d '%s'\n", ok, buf); prt->pct = pct; } -#endif // HAVE_ICU +#endif // YAZ_HAVE_ICU return prt; } @@ -181,7 +182,7 @@ static const char *pp2_relevance_token_a_to_z(pp2_relevance_token_t 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') { @@ -221,7 +222,7 @@ static const char *pp2_get_sort_ascii(pp2_relevance_token_t prt, } -#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)) @@ -230,7 +231,7 @@ static const char *pp2_relevance_token_icu(pp2_relevance_token_t prt) { return 0; } - return icu_chain_get_norm(prt->pct->icu_chn); + return icu_chain_token_norm(prt->pct->icu_chn); } return 0; } @@ -238,17 +239,18 @@ 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) { - 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 */ +