#include <yaz/proto.h>
#include <yaz/marcdisp.h>
-static void opac_element_str(WRBUF wrbuf, yaz_iconv_t cd,
+static void opac_element_str(WRBUF wrbuf, yaz_iconv_t cd1, yaz_iconv_t cd2,
int l, const char *elem,
const char *data)
{
if (data)
{
+ size_t pos;
while (--l >= 0)
wrbuf_puts(wrbuf, " ");
wrbuf_puts(wrbuf, "<");
wrbuf_puts(wrbuf, elem);
wrbuf_puts(wrbuf, ">");
- wrbuf_iconv_puts_cdata(wrbuf, cd, data);
+
+ pos = wrbuf->pos; /* save position */
+ if (wrbuf_iconv_write_x(wrbuf, cd1, data, strlen(data), 1) && cd2)
+ {
+ wrbuf->pos = pos; /* rewind to pos */
+ wrbuf_iconv_write_x(wrbuf, cd2, data, strlen(data), 1);
+ }
wrbuf_puts(wrbuf, "</");
wrbuf_puts(wrbuf, elem);
wrbuf_puts(wrbuf, ">\n");
}
void yaz_opac_decode_wrbuf2(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf,
- yaz_iconv_t cd)
+ yaz_iconv_t cd2)
{
int i;
+ yaz_iconv_t cd1 = yaz_marc_get_iconv(mt);
wrbuf_puts(wrbuf, "<opacRecord>\n");
if (r->bibliographicRecord)
Z_HoldingsAndCircData *d = h->u.holdingsAndCirc;
- opac_element_str(wrbuf, cd, 2, "typeOfRecord", d->typeOfRecord);
- opac_element_str(wrbuf, cd, 2, "encodingLevel", d->encodingLevel);
- opac_element_str(wrbuf, cd, 2, "format", d->format);
- opac_element_str(wrbuf, cd, 2, "receiptAcqStatus", d->receiptAcqStatus);
- opac_element_str(wrbuf, cd, 2, "generalRetention", d->generalRetention);
- opac_element_str(wrbuf, cd, 2, "completeness", d->completeness);
- opac_element_str(wrbuf, cd, 2, "dateOfReport", d->dateOfReport);
- opac_element_str(wrbuf, cd, 2, "nucCode", d->nucCode);
- opac_element_str(wrbuf, cd, 2, "localLocation", d->localLocation);
- opac_element_str(wrbuf, cd, 2, "shelvingLocation", d->shelvingLocation);
- opac_element_str(wrbuf, cd, 2, "callNumber", d->callNumber);
- opac_element_str(wrbuf, cd, 2, "shelvingData", d->shelvingData);
-
- opac_element_str(wrbuf, cd, 2, "copyNumber", d->copyNumber);
- opac_element_str(wrbuf, cd, 2, "publicNote", d->publicNote);
- opac_element_str(wrbuf, cd, 2, "reproductionNote", d->reproductionNote);
- opac_element_str(wrbuf, cd, 2, "termsUseRepro", d->termsUseRepro);
- opac_element_str(wrbuf, cd, 2, "enumAndChron", d->enumAndChron);
+ opac_element_str(wrbuf, cd1, cd2, 2, "typeOfRecord",
+ d->typeOfRecord);
+ opac_element_str(wrbuf, cd1, cd2, 2, "encodingLevel",
+ d->encodingLevel);
+ opac_element_str(wrbuf, cd1, cd2, 2, "format",
+ d->format);
+ opac_element_str(wrbuf, cd1, cd2, 2, "receiptAcqStatus",
+ d->receiptAcqStatus);
+ opac_element_str(wrbuf, cd1, cd2, 2, "generalRetention",
+ d->generalRetention);
+ opac_element_str(wrbuf, cd1, cd2, 2, "completeness",
+ d->completeness);
+ opac_element_str(wrbuf, cd1, cd2, 2, "dateOfReport",
+ d->dateOfReport);
+ opac_element_str(wrbuf, cd1, cd2, 2, "nucCode", d->nucCode);
+ opac_element_str(wrbuf, cd1, cd2, 2, "localLocation",
+ d->localLocation);
+ opac_element_str(wrbuf, cd1, cd2, 2, "shelvingLocation",
+ d->shelvingLocation);
+ opac_element_str(wrbuf, cd1, cd2, 2, "callNumber",
+ d->callNumber);
+ opac_element_str(wrbuf, cd1, cd2, 2, "shelvingData",
+ d->shelvingData);
+ opac_element_str(wrbuf, cd1, cd2, 2, "copyNumber",
+ d->copyNumber);
+ opac_element_str(wrbuf, cd1, cd2, 2, "publicNote",
+ d->publicNote);
+ opac_element_str(wrbuf, cd1, cd2, 2, "reproductionNote",
+ d->reproductionNote);
+ opac_element_str(wrbuf, cd1, cd2, 2, "termsUseRepro",
+ d->termsUseRepro);
+ opac_element_str(wrbuf, cd1, cd2, 2, "enumAndChron",
+ d->enumAndChron);
if (d->num_volumes)
{
wrbuf_puts (wrbuf, " <volumes>\n");
for (j = 0; j<d->num_volumes; j++)
{
wrbuf_puts (wrbuf, " <volume>\n");
- opac_element_str(wrbuf, cd, 4, "enumeration",
+ opac_element_str(wrbuf, cd1, cd2, 4, "enumeration",
d->volumes[j]->enumeration);
- opac_element_str(wrbuf, cd, 4, "chronology",
+ opac_element_str(wrbuf, cd1, cd2, 4, "chronology",
d->volumes[j]->chronology);
- opac_element_str(wrbuf, cd, 4, "enumAndChron",
+ opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron",
d->volumes[j]->enumAndChron);
wrbuf_puts(wrbuf, " </volume>\n");
}
wrbuf_puts(wrbuf," <circulation>\n");
opac_element_bool(wrbuf, 4, "availableNow",
d->circulationData[j]->availableNow);
- opac_element_str(wrbuf, cd, 4, "availabiltyDate",
+ opac_element_str(wrbuf, cd1, cd2, 4, "availabiltyDate",
d->circulationData[j]->availablityDate);
- opac_element_str(wrbuf, cd, 4, "availableThru",
+ opac_element_str(wrbuf, cd1, cd2, 4, "availableThru",
d->circulationData[j]->availableThru);
- opac_element_str(wrbuf, cd, 4, "restrictions",
+ opac_element_str(wrbuf, cd1, cd2, 4, "restrictions",
d->circulationData[j]->restrictions);
- opac_element_str(wrbuf, cd, 4, "itemId",
+ opac_element_str(wrbuf, cd1, cd2, 4, "itemId",
d->circulationData[j]->itemId);
opac_element_bool(wrbuf, 4, "renewable",
d->circulationData[j]->renewable);
opac_element_bool(wrbuf, 4, "onHold",
d->circulationData[j]->onHold);
- opac_element_str(wrbuf, cd, 4, "enumAndChron",
+ opac_element_str(wrbuf, cd1, cd2, 4, "enumAndChron",
d->circulationData[j]->enumAndChron);
- opac_element_str(wrbuf, cd, 4, "midspine",
+ opac_element_str(wrbuf, cd1, cd2, 4, "midspine",
d->circulationData[j]->midspine);
- opac_element_str(wrbuf, cd, 4, "temporaryLocation",
+ opac_element_str(wrbuf, cd1, cd2, 4, "temporaryLocation",
d->circulationData[j]->temporaryLocation);
wrbuf_puts(wrbuf, " </circulation>\n");
}
void yaz_opac_decode_wrbuf(yaz_marc_t mt, Z_OPACRecord *r, WRBUF wrbuf)
{
- yaz_opac_decode_wrbuf2(mt, r, wrbuf, yaz_marc_get_iconv(mt));
+ yaz_opac_decode_wrbuf2(mt, r, wrbuf, 0);
}
/*