Dsiplaying sub-records
[pazpar2-moved-to-github.git] / src / pazpar2.c
index 184bd71..f23e608 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pazpar2.c,v 1.41 2007-01-17 15:32:39 quinn Exp $ */
+/* $Id: pazpar2.c,v 1.43 2007-01-18 16:21:23 quinn Exp $ */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -265,7 +265,6 @@ static void do_searchResponse(IOCHAN i, Z_APDU *a)
         if (r->presentStatus && !*r->presentStatus && r->records)
         {
             yaz_log(YLOG_DEBUG, "Records in search response");
-            cl->records += *r->numberOfRecordsReturned;
             ingest_records(cl, r->records);
         }
         cl->state = Client_Idle;
@@ -426,6 +425,17 @@ static xmlDoc *normalize_record(struct client *cl, Z_External *rec)
         yaz_log(YLOG_FATAL, "Unknown native_syntax in normalize_record");
         exit(1);
     }
+
+    if (global_parameters.dump_records)
+    {
+        fprintf(stderr, "Input Record (normalized):\n----------------\n");
+#if LIBXML_VERSION >= 20600
+        xmlDocFormatDump(stderr, rdoc, 1);
+#else
+        xmlDocDump(stderr, rdoc);
+#endif
+    }
+
     for (m = rprofile->maplist; m; m = m->next)
     {
         xmlDoc *new;
@@ -508,6 +518,7 @@ static struct record *ingest_record(struct client *cl, Z_External *rec)
 
     res = nmem_malloc(se->nmem, sizeof(struct record));
     res->next = 0;
+    res->client = cl;
     res->metadata = nmem_malloc(se->nmem,
             sizeof(struct record_metadata*) * service->num_metadata);
     memset(res->metadata, 0, sizeof(struct record_metadata*) * service->num_metadata);
@@ -578,11 +589,13 @@ static struct record *ingest_record(struct client *cl, Z_External *rec)
             newm->next = 0;
             if (md->type == Metadata_type_generic)
             {
-                char *p;
-                newm->data.text = nmem_strdup(se->nmem, value);
-                for (p = newm->data.text + strlen(newm->data.text) - 1;
-                        p > newm->data.text && strchr(" ,/.", *p); p--)
-                    *p = '\0';
+                char *p, *pe;
+                for (p = value; *p && isspace(*p); p++)
+                    ;
+                for (pe = p + strlen(p) - 1;
+                        pe > p && strchr(" ,/.:([", *pe); pe--)
+                    *pe = '\0';
+                newm->data.text = nmem_strdup(se->nmem, p);
 
             }
             else if (md->type == Metadata_type_year)