MARC-in-JSON support for record conversion utility
[yaz-moved-to-github.git] / src / record_conv.c
index 96ded54..671342c 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2012 Index Data
+ * Copyright (C) 1995-2013 Index Data
  * See the file LICENSE for details.
  */
 /**
@@ -194,7 +194,7 @@ static void *construct_xslt(const xmlNode *ptr,
     {
         wrbuf_printf(wr_error, "Element <xslt>: "
                      "attribute 'stylesheet' expected");
-        return 0;
+        nmem_destroy(nmem);
     }
     else
     {
@@ -208,6 +208,7 @@ static void *construct_xslt(const xmlNode *ptr,
             if (path)
                 wrbuf_printf(wr_error, " with path '%s'", path);
 
+            nmem_destroy(nmem);
             return 0;
         }
         info->xsp_doc = xmlParseFile(fullpath);
@@ -217,6 +218,7 @@ static void *construct_xslt(const xmlNode *ptr,
                          " xml parse failed: %s", stylesheet, fullpath);
             if (path)
                 wrbuf_printf(wr_error, " with path '%s'", path);
+            nmem_destroy(nmem);
             return 0;
         }
         /* need to copy this before passing it to the processor. It will
@@ -238,7 +240,6 @@ static void *construct_xslt(const xmlNode *ptr,
                          ")");
             xmlFreeDoc(info->xsp_doc);
             nmem_destroy(info->nmem);
-            return 0;
         }
         else
         {
@@ -387,6 +388,10 @@ static void *construct_marc(const xmlNode *ptr,
         if (!info->input_charset && info->output_charset)
             info->input_charset = "utf-8";
     }
+    else if (!strcmp(input_format, "json"))
+    {
+        info->input_format_mode = YAZ_MARC_JSON;
+    }
     else
     {
         wrbuf_printf(wr_error, "Element <marc inputformat='%s'>: "
@@ -430,6 +435,12 @@ static void *construct_marc(const xmlNode *ptr,
         if (info->input_charset && !info->output_charset)
             info->output_charset = "utf-8";
     }
+    else if (!strcmp(output_format, "json"))
+    {
+        info->output_format_mode = YAZ_MARC_JSON;
+        if (info->input_charset && !info->output_charset)
+            info->output_charset = "utf-8";
+    }
     else
     {
         wrbuf_printf(wr_error, "Element <marc outputformat='%s'>: "
@@ -627,7 +638,10 @@ int yaz_record_conv_opac_record(yaz_record_conv_t p,
     int ret = 0;
     struct yaz_record_conv_rule *r = p->rules;
     if (!r || r->type->construct != construct_marc)
+    {
+        wrbuf_puts(p->wr_error, "Expecting MARC rule as first rule for OPAC");
         ret = -1; /* no marc rule so we can't do OPAC */
+    }
     else
     {
         struct marc_info *mi = r->info;