* Copyright (C) 1995-2006, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: marcdisp.c,v 1.31 2006-07-06 10:17:53 adam Exp $
+ * $Id: marcdisp.c,v 1.32 2006-08-01 09:28:04 adam Exp $
*/
/**
int length_implementation;
int data_offset = 0;
const char *leader = 0;
- WRBUF wr_dir, wr_head;
+ WRBUF wr_dir, wr_head, wr_data_tmp;
int base_address;
for (n = mt->nodes; n; n = n->next)
if (!atoi_n_check(leader+22, 1, &length_implementation))
return -1;
+ wr_data_tmp = wrbuf_alloc();
wr_dir = wrbuf_alloc();
for (n = mt->nodes; n; n = n->next)
{
wrbuf_printf(wr_dir, "%.3s", n->u.datafield.tag);
data_length += indicator_length;
for (s = n->u.datafield.subfields; s; s = s->next)
- data_length += 1+strlen(s->code_data);
+ {
+ wrbuf_rewind(wr_data_tmp);
+ wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd, s->code_data);
+ data_length += 1+wrbuf_len(wr_data_tmp);
+ }
data_length++;
break;
case YAZ_MARC_CONTROLFIELD:
wrbuf_printf(wr_dir, "%.3s", n->u.controlfield.tag);
- data_length += strlen(n->u.controlfield.data);
+
+ wrbuf_rewind(wr_data_tmp);
+ wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd,
+ n->u.controlfield.data);
+ data_length += wrbuf_len(wr_data_tmp);
data_length++;
break;
case YAZ_MARC_COMMENT:
wrbuf_write(wr, wrbuf_buf(wr_dir), wrbuf_len(wr_dir));
wrbuf_free(wr_head, 1);
wrbuf_free(wr_dir, 1);
+ wrbuf_free(wr_data_tmp, 1);
for (n = mt->nodes; n; n = n->next)
{
for (s = n->u.datafield.subfields; s; s = s->next)
{
wrbuf_printf(wr, "%c", ISO2709_IDFS);
- wrbuf_puts(wr, s->code_data);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, s->code_data);
}
wrbuf_printf(wr, "%c", ISO2709_FS);
break;
case YAZ_MARC_CONTROLFIELD:
- wrbuf_puts(wr, n->u.controlfield.data);
+ wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
wrbuf_printf(wr, "%c", ISO2709_FS);
break;
case YAZ_MARC_COMMENT:
* Copyright (C) 2005-2006, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: tst_record_conv.c,v 1.9 2006-07-06 10:17:55 adam Exp $
+ * $Id: tst_record_conv.c,v 1.10 2006-08-01 09:28:04 adam Exp $
*
*/
#include <yaz/record_conv.h>
return ret;
}
-static void tst_convert()
+static void tst_convert1()
{
yaz_record_conv_t p = 0;
const char *marcxml_rec =
yaz_record_conv_destroy(p);
}
+static void tst_convert2()
+{
+ yaz_record_conv_t p = 0;
+ const char *marcxml_rec =
+ "<record xmlns=\"http://www.loc.gov/MARC21/slim\">\n"
+ " <leader>00080nam a22000498a 4500</leader>\n"
+ " <controlfield tag=\"001\"> 11224466 </controlfield>\n"
+ " <datafield tag=\"010\" ind1=\" \" ind2=\" \">\n"
+ " <subfield code=\"a\">københavn</subfield>\n"
+ " </datafield>\n"
+ "</record>\n";
+ const char *iso2709_rec =
+ "\x30\x30\x30\x37\x37\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34"
+ "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30"
+ "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x34\x30\x30\x30\x31\x33"
+ "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20"
+ "\x1F\x61\x6b\xb2\x62\x65\x6e\x68\x61\x76\x6e\x1E\x1D";
+
+ YAZ_CHECK(conv_configure_test("<convert>"
+ "<marc"
+ " inputcharset=\"utf-8\""
+ " outputcharset=\"marc-8\""
+ " inputformat=\"xml\""
+ " outputformat=\"marc\""
+ "/>"
+ "</convert>",
+ 0, &p));
+ YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec));
+ yaz_record_conv_destroy(p);
+}
+
#endif
int main(int argc, char **argv)
tst_configure();
#endif
#if YAZ_HAVE_XSLT
- tst_convert();
+ tst_convert1();
+ tst_convert2();
#endif
YAZ_CHECK_TERM;
}