projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
record_conv: leader spec may be given for marc element
[yaz-moved-to-github.git]
/
src
/
record_conv.c
diff --git
a/src/record_conv.c
b/src/record_conv.c
index
5ef8913
..
212e96b
100644
(file)
--- a/
src/record_conv.c
+++ b/
src/record_conv.c
@@
-57,6
+57,7
@@
struct marc_info {
const char *output_charset;
int input_format_mode;
int output_format_mode;
const char *output_charset;
int input_format_mode;
int output_format_mode;
+ const char *leader_spec;
};
/** \brief tranformation info (rule info) */
};
/** \brief tranformation info (rule info) */
@@
-97,7
+98,7
@@
void yaz_record_conv_destroy(yaz_record_conv_t p)
}
#if YAZ_HAVE_XSLT
}
#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;
const char *path, WRBUF wr_error)
{
struct _xmlAttr *attr;
@@
-241,7
+242,7
@@
static void destroy_xslt(void *info)
#endif
#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();
const char *path, WRBUF wr_error)
{
NMEM nmem = nmem_create();
@@
-261,6
+262,7
@@
static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
info->output_charset = 0;
info->input_format_mode = 0;
info->output_format_mode = 0;
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)
{
for (attr = ptr->properties; attr; attr = attr->next)
{
@@
-276,6
+278,10
@@
static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
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 "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"
else
{
wrbuf_printf(wr_error, "Element <marc>: expected attributes"
@@
-288,7
+294,7
@@
static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
}
if (!input_format)
{
}
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;
"attribute 'inputformat' required");
nmem_destroy(info->nmem);
return 0;
@@
-364,7
+370,7
@@
static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
info->input_charset);
if (!cd)
{
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",
"Element <marc inputcharset='%s' outputcharset='%s'>:"
" Unsupported character set mapping"
" defined by attribute values",
@@
-374,22
+380,22
@@
static void *construct_marc(yaz_record_conv_t p, const xmlNode *ptr,
}
yaz_iconv_close(cd);
}
}
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;
}
{
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;
}
{
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;
}
return info;
}
@@
-402,7
+408,9
@@
static int convert_marc(void *info, WRBUF record, WRBUF wr_error)
yaz_marc_t mt = yaz_marc_create();
yaz_marc_xml(mt, mi->output_format_mode);
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)
if (cd)
yaz_marc_iconv(mt, cd);
if (mi->input_format_mode == YAZ_MARC_ISO2709)
@@
-491,7
+499,7
@@
int yaz_record_conv_configure_t(yaz_record_conv_t p, const xmlNode *ptr,
for (t = &bt[0]; t; t = t->next)
{
wrbuf_rewind(p->wr_error);
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;
if (info || wrbuf_len(p->wr_error))
break;