-/* $Id: d1_read.c,v 1.23 2007-03-19 21:50:39 adam Exp $
- Copyright (C) 1995-2007
- Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+ Copyright (C) 1994-2010 Index Data
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
{
data1_absyn *absyn = data1_get_absyn(dh, name, 1);
data1_node *res;
+
if (!absyn)
{
yaz_log(YLOG_WARN, "Unable to acquire abstract syntax " "for '%s'",
}
-static int conv_item (NMEM m, yaz_iconv_t t,
- WRBUF wrbuf, char *inbuf, size_t inlen)
+static int conv_item(NMEM m, yaz_iconv_t t,
+ WRBUF wrbuf, char *inbuf, size_t inlen)
{
- wrbuf_rewind (wrbuf);
- if (wrbuf->size < 10)
- wrbuf_grow (wrbuf, 10);
- for (;;)
- {
- char *outbuf = wrbuf->buf + wrbuf->pos;
- size_t outlen = wrbuf->size - wrbuf->pos;
- if (yaz_iconv (t, &inbuf, &inlen, &outbuf, &outlen) ==
- (size_t)(-1) && yaz_iconv_error(t) != YAZ_ICONV_E2BIG)
- {
- /* bad data. stop and skip conversion entirely */
- return -1;
- }
- else if (inlen == 0)
- { /* finished converting */
- wrbuf->pos = wrbuf->size - outlen;
- break;
- }
- else
- {
- /* buffer too small: make sure we expand buffer */
- wrbuf->pos = wrbuf->size - outlen;
- wrbuf_grow(wrbuf, 20);
- }
- }
+ wrbuf_rewind(wrbuf);
+ wrbuf_iconv_write(wrbuf, t, inbuf, inlen);
+ wrbuf_iconv_reset(wrbuf, t);
return 0;
}
}
int data1_iconv (data1_handle dh, NMEM m, data1_node *n,
- const char *tocode,
- const char *fromcode)
+ const char *tocode,
+ const char *fromcode)
{
if (yaz_matchstr (tocode, fromcode))
{
return 0;
}
+void data1_chop_text(data1_handle dh, NMEM m, data1_node *n)
+{
+ for (; n; n = n->next)
+ {
+ if (n->which == DATA1N_data)
+ {
+
+ int sz = n->u.data.len;
+ const char *ndata = n->u.data.data;
+ int off = 0;
+
+ for (off = 0; off < sz; off++)
+ if (!d1_isspace(ndata[off]))
+ break;
+ sz = sz - off;
+ ndata += off;
+
+ while (sz && d1_isspace(ndata[sz - 1]))
+ sz--;
+
+ n->u.data.data = nmem_malloc(m, sz);
+ n->u.data.len = sz;
+ memcpy(n->u.data.data, ndata, sz);
+
+ }
+ data1_chop_text(dh, m, n->child);
+ }
+}
+
void data1_concat_text(data1_handle dh, NMEM m, data1_node *n)
{
for (; n; n = n->next)
data1_concat_text(dh, m, n->child);
}
}
+
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab