const char *output_charset;
int input_format_mode;
int output_format_mode;
+ const char *leader_spec;
};
/** \brief tranformation info (rule info) */
}
#if YAZ_HAVE_XSLT
-static void *construct_xslt(yaz_record_conv_t p, const xmlNode *ptr,
+static void *construct_xslt(const xmlNode *ptr,
const char *path, WRBUF wr_error)
{
struct _xmlAttr *attr;
#endif
-static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
+static void *construct_marc(const xmlNode *ptr,
const char *path, WRBUF wr_error)
{
NMEM nmem = nmem_create();
info->output_charset = 0;
info->input_format_mode = 0;
info->output_format_mode = 0;
+ info->leader_spec = 0;
for (attr = ptr->properties; attr; attr = attr->next)
{
else if (!xmlStrcmp(attr->name, BAD_CAST "outputformat") &&
attr->children && attr->children->type == XML_TEXT_NODE)
output_format = (const char *) attr->children->content;
+ else if (!xmlStrcmp(attr->name, BAD_CAST "leaderspec") &&
+ attr->children && attr->children->type == XML_TEXT_NODE)
+ info->leader_spec =
+ nmem_strdup(info->nmem,(const char *) attr->children->content);
else
{
wrbuf_printf(wr_error, "Element <marc>: expected attributes"
}
if (!input_format)
{
- wrbuf_printf(p->wr_error, "Element <marc>: "
+ wrbuf_printf(wr_error, "Element <marc>: "
"attribute 'inputformat' required");
nmem_destroy(info->nmem);
return 0;
info->input_charset);
if (!cd)
{
- wrbuf_printf(p->wr_error,
+ wrbuf_printf(wr_error,
"Element <marc inputcharset='%s' outputcharset='%s'>:"
" Unsupported character set mapping"
" defined by attribute values",
}
yaz_iconv_close(cd);
}
- else if (info->input_charset)
+ else if (!info->output_charset)
{
wrbuf_printf(wr_error, "Element <marc>: "
"attribute 'outputcharset' missing");
nmem_destroy(info->nmem);
return 0;
}
- else if (info->output_charset)
+ 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(p->nmem, info->input_charset);
- info->output_charset = nmem_strdup(p->nmem, info->output_charset);
+ info->input_charset = nmem_strdup(info->nmem, info->input_charset);
+ info->output_charset = nmem_strdup(info->nmem, info->output_charset);
return info;
}
yaz_marc_t mt = yaz_marc_create();
yaz_marc_xml(mt, mi->output_format_mode);
-
+ if (mi->leader_spec)
+ yaz_marc_leader_spec(mt, mi->leader_spec);
+
if (cd)
yaz_marc_iconv(mt, cd);
if (mi->input_format_mode == YAZ_MARC_ISO2709)
for (t = &bt[0]; t; t = t->next)
{
wrbuf_rewind(p->wr_error);
- info = t->construct(p, ptr, p->path, p->wr_error);
+ info = t->construct(ptr, p->path, p->wr_error);
if (info || wrbuf_len(p->wr_error))
break;