continued.
[pazpar2-moved-to-github.git] / src / icu_I18N.c
index aaa0924..1d08d5a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: icu_I18N.c,v 1.18 2007-05-21 10:14:08 marc Exp $
+/* $Id: icu_I18N.c,v 1.22 2007-05-25 13:27:21 marc Exp $
    Copyright (c) 2006-2007, Index Data.
 
    This file is part of Pazpar2.
@@ -687,6 +687,7 @@ struct icu_normalizer * icu_normalizer_create(const char *rules, char action,
                            UTRANS_FORWARD,
                            0, 0, 
                            normalizer->parse_error, status);
+        // yaz_log(YLOG_LOG, "utrans_open %p", normalizer->trans);
         break;
     case 'r':
         normalizer->trans
@@ -695,6 +696,7 @@ struct icu_normalizer * icu_normalizer_create(const char *rules, char action,
                            UTRANS_REVERSE ,
                            0, 0,
                            normalizer->parse_error, status);
+        // yaz_log(YLOG_LOG, "utrans_open %p", normalizer->trans);
         break;
     default:
         *status = U_UNSUPPORTED_ERROR;
@@ -716,7 +718,10 @@ void icu_normalizer_destroy(struct icu_normalizer * normalizer){
         if (normalizer->rules16) 
             icu_buf_utf16_destroy(normalizer->rules16);
         if (normalizer->trans)
+        {
+            // yaz_log(YLOG_LOG, "utrans_close %p", normalizer->trans);
             utrans_close(normalizer->trans);
+        }
         free(normalizer);
     }
 };
@@ -764,21 +769,16 @@ struct icu_chain_step * icu_chain_step_create(struct icu_chain * chain,
     step = (struct icu_chain_step *) malloc(sizeof(struct icu_chain_step));
 
     step->type = type;
-    step->more_tokens = 0;
-    step->need_new_token = 1;
 
-    if (buf16)
-        step->buf16 = buf16;
-    else
-        step->buf16 = 0;
+    step->buf16 = buf16;
 
     // create auxilary objects
     switch(step->type) {
     case ICU_chain_step_type_display:
         break;
-    case ICU_chain_step_type_norm:
+    case ICU_chain_step_type_index:
         break;
-    case ICU_chain_step_type_sort:
+    case ICU_chain_step_type_sortkey:
         break;
     case ICU_chain_step_type_casemap:
         step->u.casemap = icu_casemap_create((char *) chain->locale, 
@@ -809,9 +809,9 @@ void icu_chain_step_destroy(struct icu_chain_step * step){
     switch(step->type) {
     case ICU_chain_step_type_display:
         break;
-    case ICU_chain_step_type_norm:
+    case ICU_chain_step_type_index:
         break;
-    case ICU_chain_step_type_sort:
+    case ICU_chain_step_type_sortkey:
         break;
     case ICU_chain_step_type_casemap:
         icu_casemap_destroy(step->u.casemap);
@@ -828,8 +828,7 @@ void icu_chain_step_destroy(struct icu_chain_step * step){
     default:
         break;
     }
-
-
+    free(step);
 };
 
 
@@ -870,6 +869,7 @@ void icu_chain_destroy(struct icu_chain * chain)
         icu_buf_utf16_destroy(chain->src16);
     
         icu_chain_step_destroy(chain->steps);
+        free(chain);
     }
 };
 
@@ -897,6 +897,8 @@ struct icu_chain * icu_chain_xml_config(xmlNode *xml_node,
     chain = icu_chain_create((const uint8_t *) xml_id, 
                              (const uint8_t *) xml_locale);
     
+    xmlFree(xml_id);
+    xmlFree(xml_locale);
     if (!chain)
         return 0;
         
@@ -929,16 +931,17 @@ struct icu_chain * icu_chain_xml_config(xmlNode *xml_node,
                                          (const uint8_t *) "", status);
         }
         else if (!strcmp((const char *) node->name,
-                         (const char *) "normal")){
-            step = icu_chain_insert_step(chain, ICU_chain_step_type_norm, 
+                         (const char *) "index")){
+            step = icu_chain_insert_step(chain, ICU_chain_step_type_index, 
                                          (const uint8_t *) "", status);
         }
         else if (!strcmp((const char *) node->name,
-                         (const char *) "sort")){
-            step = icu_chain_insert_step(chain, ICU_chain_step_type_sort, 
+                         (const char *) "sortkey")){
+            step = icu_chain_insert_step(chain, ICU_chain_step_type_sortkey, 
                                          (const uint8_t *) "", status);
         }
 
+        xmlFree(xml_rule);
         if (!step || U_FAILURE(*status)){
             icu_chain_destroy(chain);
             return 0;
@@ -978,10 +981,10 @@ struct icu_chain_step * icu_chain_insert_step(struct icu_chain * chain,
     case ICU_chain_step_type_display:
         buf16 = src16;
         break;
-    case ICU_chain_step_type_norm:
+    case ICU_chain_step_type_index:
         buf16 = src16;
         break;
-    case ICU_chain_step_type_sort:
+    case ICU_chain_step_type_sortkey:
         buf16 = src16;
         break;
     case ICU_chain_step_type_casemap:
@@ -1046,10 +1049,10 @@ int icu_chain_step_next_token(struct icu_chain * chain,
     case ICU_chain_step_type_display:
         icu_utf16_to_utf8(chain->display8, src16, status);
         break;
-    case ICU_chain_step_type_norm:
+    case ICU_chain_step_type_index:
         icu_utf16_to_utf8(chain->norm8, src16, status);
         break;
-    case ICU_chain_step_type_sort:
+    case ICU_chain_step_type_sortkey:
         icu_utf16_to_utf8(chain->sort8, src16, status);
         break;
     case ICU_chain_step_type_casemap:
@@ -1125,6 +1128,7 @@ int icu_chain_assign_cstr(struct icu_chain * chain,
 
     while (stp){
         stp->more_tokens = 1;
+        stp->need_new_token = 1;
         stp = stp->previous;
     }