RPM: store libs in %{_libdir}
[idzebra-moved-to-github.git] / index / untrans.c
index 0e9adf1..8143342 100644 (file)
@@ -1,8 +1,5 @@
-/* $Id: untrans.c,v 1.3 2007-03-20 22:07:35 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 <config.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 #include <ctype.h>
@@ -28,34 +28,50 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include "index.h"
 #include <charmap.h>
 
-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)
 {
-    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(zh->reg->zebra_maps,
-                                          reg_type, &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];
+    int r;
     
-    zebra_term_untrans (zh, reg_type, term_src, src);
+    r = zebra_term_untrans (zh, index_type, term_src, src);
+    if (r)
+        return r;
 
     if (zh->iconv_from_utf8 != 0)
     {
@@ -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
  */
+