* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: marcdisp.c,v 1.43 2007-01-06 16:08:04 adam Exp $
+ * $Id: marcdisp.c,v 1.44 2007-01-18 14:45:05 adam Exp $
*/
/**
return mt->nmem;
}
+static void marc_iconv_reset(yaz_marc_t mt, WRBUF wr)
+{
+ if (mt->iconv_cd)
+ {
+#if 1
+ char outbuf[12];
+ size_t outbytesleft = sizeof(outbuf);
+ char *outp = outbuf;
+ size_t r = yaz_iconv(mt->iconv_cd, 0, 0, &outp, &outbytesleft);
+ if (r != (size_t) (-1))
+ wrbuf_write(wr, outbuf, outp - outbuf);
+#else
+ int pos = wr->pos;
+ wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
+ if (pos != wr->pos)
+ wr->pos--;
+ yaz_iconv(mt->iconv_cd, 0, 0, 0, 0);
+#endif
+ }
+}
+
static int marc_exec_leader(const char *leader_spec, char *leader,
size_t size);
wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
wrbuf_iconv_puts(wr, mt->iconv_cd,
s->code_data + using_code_len);
- wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
- wr->pos--;
+ marc_iconv_reset(mt, wr);
}
wrbuf_puts (wr, mt->endline_str);
break;
wrbuf_printf(wr, "%s", n->u.controlfield.tag);
wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
- wrbuf_iconv_puts(wr, mt->iconv_cd, " ");
- wr->pos--;
+ marc_iconv_reset(mt, wr);
wrbuf_puts (wr, mt->endline_str);
break;
case YAZ_MARC_COMMENT:
wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
s->code_data + using_code_len,
strlen(s->code_data + using_code_len));
+ marc_iconv_reset(mt, wr);
wrbuf_iconv_puts(wr, mt->iconv_cd, "</subfield>");
wrbuf_puts(wr, "\n");
}
strlen(n->u.controlfield.tag));
wrbuf_iconv_puts(wr, mt->iconv_cd, "\">");
wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
+
+ marc_iconv_reset(mt, wr);
wrbuf_iconv_puts(wr, mt->iconv_cd, "</controlfield>");
wrbuf_puts(wr, "\n");
break;
wrbuf_rewind(wr_cdata);
wrbuf_iconv_puts(wr_cdata, mt->iconv_cd,
s->code_data + using_code_len);
-
+ marc_iconv_reset(mt, wr_cdata);
ptr_subfield = xmlNewTextChild(
ptr, ns_record,
BAD_CAST "subfield", BAD_CAST wrbuf_cstr(wr_cdata));
case YAZ_MARC_CONTROLFIELD:
wrbuf_rewind(wr_cdata);
wrbuf_iconv_puts(wr_cdata, mt->iconv_cd, n->u.controlfield.data);
-
+ marc_iconv_reset(mt, wr_cdata);
+
ptr = xmlNewTextChild(record_ptr, ns_record,
BAD_CAST "controlfield",
BAD_CAST wrbuf_cstr(wr_cdata));
/* write dummy IDFS + content */
wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');
wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd, s->code_data);
+ marc_iconv_reset(mt, wr_data_tmp);
}
/* write dummy FS (makes MARC-8 to become ASCII) */
wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');
wrbuf_rewind(wr_data_tmp);
wrbuf_iconv_puts(wr_data_tmp, mt->iconv_cd,
n->u.controlfield.data);
+ marc_iconv_reset(mt, wr_data_tmp);
wrbuf_iconv_putchar(wr_data_tmp, mt->iconv_cd, ' ');/* field sep */
data_length += wrbuf_len(wr_data_tmp);
break;
{
wrbuf_putc(wr, ISO2709_IDFS);
wrbuf_iconv_puts(wr, mt->iconv_cd, s->code_data);
- /* write dummy blank - makes MARC-8 to become ASCII */
- wrbuf_iconv_putchar(wr, mt->iconv_cd, ' ');
- wr->pos--;
+ marc_iconv_reset(mt, wr);
}
wrbuf_putc(wr, ISO2709_FS);
break;
case YAZ_MARC_CONTROLFIELD:
wrbuf_iconv_puts(wr, mt->iconv_cd, n->u.controlfield.data);
- /* write dummy blank - makes MARC-8 to become ASCII */
- wrbuf_iconv_putchar(wr, mt->iconv_cd, ' ');
- wr->pos--;
+ marc_iconv_reset(mt, wr);
wrbuf_putc(wr, ISO2709_FS);
break;
case YAZ_MARC_COMMENT: