X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficonv_encode_marc8.c;h=ac18e7945024b6c0819250831cd53796203432f9;hp=cfdd1be1b6dd911ad02c6304b6c265721c887e5f;hb=1d3538f5ffc0a38434e421ae3f2c34618b50d392;hpb=1346b30779b120691e4145a3578716f77300951e diff --git a/src/iconv_encode_marc8.c b/src/iconv_encode_marc8.c index cfdd1be..ac18e79 100644 --- a/src/iconv_encode_marc8.c +++ b/src/iconv_encode_marc8.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2013 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -72,11 +72,6 @@ static unsigned long lookup_marc8(yaz_iconv_t cd, size_t utf8_outbytesleft = sizeof(utf8_buf)-1, r; int error_code; - if (x <= ' ') - { - *page_chr = ESC "(B"; - return x; - } r = yaz_write_UTF8_char(x, &utf8_outbuf, &utf8_outbytesleft, &error_code); if (r == (size_t)(-1)) { @@ -288,15 +283,23 @@ static size_t yaz_write_marc8_2(yaz_iconv_t cd, struct encoder_data *w, if (!y) { - if (loss_mode == 0) - return (size_t) (-1); page_chr = ESC "(B"; - if (loss_mode == 1) - y = '|'; - else + switch (loss_mode) { + case 0: + return (size_t) (-1); + case 1: + y = '|'; + break; + case 2: y = x; enable_ncr = 1; + break; + case 3: + if (x < 32 && x != 27) + y = x; + else + return (size_t) (-1); } } @@ -406,6 +409,14 @@ static size_t write_marc8_lossless(yaz_iconv_t cd, yaz_iconv_encoder_t e, x, outbuf, outbytesleft, 2); } +static size_t write_marc8_control(yaz_iconv_t cd, yaz_iconv_encoder_t e, + unsigned long x, + char **outbuf, size_t *outbytesleft) +{ + return yaz_write_marc8_generic(cd, (struct encoder_data *) e->data, + x, outbuf, outbytesleft, 3); +} + static void destroy_marc8(yaz_iconv_encoder_t e) { xfree(e->data); @@ -423,6 +434,8 @@ yaz_iconv_encoder_t yaz_marc8_encoder(const char *tocode, e->write_handle = write_marc8_lossy; else if (!yaz_matchstr(tocode, "MARC8lossless")) e->write_handle = write_marc8_lossless; + else if (!yaz_matchstr(tocode, "MARC8c")) + e->write_handle = write_marc8_control; else return 0;