X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=index%2Funtrans.c;h=efdb9ccde15435160cff0db718f757e1eaff8266;hp=d51c25c547bd9c864a274d640993b0a208fc4254;hb=aeea139423b8eaf28a4de53b3d7b2ad1f22284e7;hpb=6f7dfe3c3f09f7104c1ae7616c9d207edeab308d diff --git a/index/untrans.c b/index/untrans.c index d51c25c..efdb9cc 100644 --- a/index/untrans.c +++ b/index/untrans.c @@ -1,8 +1,5 @@ -/* $Id: untrans.c,v 1.4 2007-10-30 19:17:15 adam Exp $ - Copyright (C) 1995-2007 - Index Data ApS - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1994-2011 Index Data Zebra 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 @@ -20,6 +17,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#if HAVE_CONFIG_H +#include +#endif #include #include #include @@ -28,34 +28,50 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "index.h" #include -void zebra_term_untrans(ZebraHandle zh, int reg_type, - char *dst, const char *src) +int zebra_term_untrans(ZebraHandle zh, const char *index_type, + char *dst, const char *src) { - zebra_map_t zm = zebra_map_get(zh->reg->zebra_maps, reg_type); - int len = 0; - while (*src) + zebra_map_t zm = zebra_map_get(zh->reg->zebra_maps, index_type); + if (!zm) { - const char *cp = zebra_maps_output(zm, &src); - if (!cp) - { - if (len < IT_MAX_WORD-1) - dst[len++] = *src; - src++; - } - else - while (*cp && len < IT_MAX_WORD-1) - dst[len++] = *cp++; + return -2; + } + if (zebra_maps_is_icu(zm)) + { + return -1; + } + else + { + int len = 0; + while (*src) + { + const char *cp = zebra_maps_output(zm, &src); + if (!cp) + { + if (len < IT_MAX_WORD-1) + dst[len++] = *src; + src++; + } + else + while (*cp && len < IT_MAX_WORD-1) + dst[len++] = *cp++; + } + dst[len] = '\0'; } - dst[len] = '\0'; + return 0; } -void zebra_term_untrans_iconv(ZebraHandle zh, NMEM stream, int reg_type, - char **dst, const char *src) +int zebra_term_untrans_iconv(ZebraHandle zh, NMEM stream, + const char *index_type, + char **dst, const char *src) { char term_src[IT_MAX_WORD]; char term_dst[IT_MAX_WORD]; - - zebra_term_untrans (zh, reg_type, term_src, src); + int r; + + r = zebra_term_untrans (zh, index_type, term_src, src); + if (r) + return r; if (zh->iconv_from_utf8 != 0) { @@ -65,7 +81,7 @@ void zebra_term_untrans_iconv(ZebraHandle zh, NMEM stream, int reg_type, char *outbuf = term_dst; size_t outleft = sizeof(term_dst)-1; size_t ret; - + ret = yaz_iconv (zh->iconv_from_utf8, &inbuf, &inleft, &outbuf, &outleft); if (ret == (size_t)(-1)) @@ -82,6 +98,7 @@ void zebra_term_untrans_iconv(ZebraHandle zh, NMEM stream, int reg_type, } else *dst = nmem_strdup(stream, term_src); + return 0; } @@ -89,7 +106,9 @@ void zebra_term_untrans_iconv(ZebraHandle zh, NMEM stream, int reg_type, /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +