X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=data1%2Fd1_read.c;h=6e179d9abbc560e703b0d54b5550663188239780;hb=f280b4adca76b5b447dae9d6a01ff1f9067c08b9;hp=6597220b96f2368caf27f03e3db6b3fe95682b1a;hpb=519fefb91135ad52134b9fc4e82b3874f5525a2b;p=idzebra-moved-to-github.git diff --git a/data1/d1_read.c b/data1/d1_read.c index 6597220..6e179d9 100644 --- a/data1/d1_read.c +++ b/data1/d1_read.c @@ -1,9 +1,28 @@ +/* $Id: d1_read.c,v 1.5 2003-09-08 10:26:51 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 + Index Data Aps + +This file is part of the Zebra server. + +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 +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + /* - * Copyright (c) 1995-2002, Index Data. - * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss - * - * $Id: d1_read.c,v 1.1 2002-10-22 12:53:33 adam Exp $ + * This module reads "loose" SGML and converts it to data1 tree */ #include @@ -303,7 +322,7 @@ data1_node *data1_search_tag (data1_handle dh, data1_node *n, } for (; n; n = n->next) if (n->which == DATA1N_tag && n->u.tag.tag && - !yaz_matchstr (tag, n->u.tag.tag)) + !yaz_matchstr (n->u.tag.tag, tag)) { return n; } @@ -1078,7 +1097,7 @@ int data1_iconv (data1_handle dh, NMEM m, data1_node *n, const char *tocode, const char *fromcode) { - if (strcmp (tocode, fromcode)) + if (yaz_matchstr (tocode, fromcode)) { WRBUF wrbuf = wrbuf_alloc(); yaz_iconv_t t = yaz_iconv_open (tocode, fromcode); @@ -1090,3 +1109,33 @@ int data1_iconv (data1_handle dh, NMEM m, data1_node *n, } return 0; } + +void data1_concat_text(data1_handle dh, NMEM m, data1_node *n) +{ + for (; n; n = n->next) + { + if (n->which == DATA1N_data && n->next && + n->next->which == DATA1N_data) + { + int sz = 0; + int off = 0; + char *ndata; + data1_node *np; + for (np = n; np && np->which == DATA1N_data; np=np->next) + sz += np->u.data.len; + ndata = nmem_malloc(m, sz); + for (np = n; np && np->which == DATA1N_data; np=np->next) + { + memcpy(ndata+off, np->u.data.data, np->u.data.len); + off += np->u.data.len; + } + n->u.data.data = ndata; + n->u.data.len = sz; + n->next = np; + if (!np && n->parent) + n->parent->last_child = n; + + } + data1_concat_text(dh, m, n->child); + } +}