+/* $Id: d1_read.c,v 1.6 2004-05-25 10:21:25 adam Exp $
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
+ 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 <assert.h>
data1_node *r = (data1_node *)nmem_malloc(m, sizeof(*r));
r->next = r->child = r->last_child = 0;
r->destroy = 0;
-
+
+ r->parent = parent;
if (!parent)
r->root = r;
else
{
r->root = parent->root;
- r->parent = parent;
if (!parent->child)
parent->child = parent->last_child = r;
else
}
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;
}
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);
}
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);
+ }
+}