+ if (!output_format)
+ {
+ wrbuf_printf(wr_error,
+ "Element <marc>: attribute 'outputformat' required");
+ nmem_destroy(info->nmem);
+ return 0;
+ }
+ else if (!strcmp(output_format, "line"))
+ {
+ info->output_format_mode = YAZ_MARC_LINE;
+ }
+ else if (!strcmp(output_format, "marcxml"))
+ {
+ info->output_format_mode = YAZ_MARC_MARCXML;
+ if (info->input_charset && !info->output_charset)
+ info->output_charset = "utf-8";
+ }
+ else if (!strcmp(output_format, "turbomarc"))
+ {
+ info->output_format_mode = YAZ_MARC_TURBOMARC;
+ if (info->input_charset && !info->output_charset)
+ info->output_charset = "utf-8";
+ }
+ else if (!strcmp(output_format, "marc"))
+ {
+ info->output_format_mode = YAZ_MARC_ISO2709;
+ }
+ else if (!strcmp(output_format, "marcxchange"))
+ {
+ info->output_format_mode = YAZ_MARC_XCHANGE;
+ if (info->input_charset && !info->output_charset)
+ info->output_charset = "utf-8";
+ }
+ else
+ {
+ wrbuf_printf(wr_error, "Element <marc outputformat='%s'>: "
+ " Unsupported output format"
+ " defined by attribute value",
+ output_format);
+ nmem_destroy(info->nmem);
+ return 0;
+ }
+ if (info->input_charset && info->output_charset)
+ {
+ yaz_iconv_t cd = yaz_iconv_open(info->output_charset,
+ info->input_charset);
+ if (!cd)
+ {
+ wrbuf_printf(wr_error,
+ "Element <marc inputcharset='%s' outputcharset='%s'>:"
+ " Unsupported character set mapping"
+ " defined by attribute values",
+ info->input_charset, info->output_charset);
+ nmem_destroy(info->nmem);
+ return 0;
+ }
+ yaz_iconv_close(cd);
+ }
+ else if (!info->output_charset)
+ {
+ wrbuf_printf(wr_error, "Element <marc>: "
+ "attribute 'outputcharset' missing");
+ nmem_destroy(info->nmem);
+ return 0;
+ }
+ else if (!info->input_charset)
+ {
+ wrbuf_printf(wr_error, "Element <marc>: "
+ "attribute 'inputcharset' missing");
+ nmem_destroy(info->nmem);
+ return 0;
+ }
+ info->input_charset = nmem_strdup(info->nmem, info->input_charset);
+ info->output_charset = nmem_strdup(info->nmem, info->output_charset);
+ return info;
+}