-/*
- * Copyright (C) 1994-2002, Index Data
- * All rights reserved.
- *
- * $Id: regxread.c,v 1.43 2002-07-05 12:43:30 adam Exp $
- */
+/* $Id: regxread.c,v 1.46 2002-09-24 19:41:00 adam Exp $
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+ 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.
+*/
+
+
#include <stdio.h>
#include <assert.h>
#include <string.h>
static void tagBegin (struct lexSpec *spec,
const char *tag, int len)
{
- struct data1_node *parent;
- data1_element *elem = NULL;
- data1_node *partag;
- data1_node *res;
- data1_element *e = NULL;
- int localtag = 0;
-
if (spec->d1_level == 0)
{
logf (LOG_WARN, "in element begin. No record type defined");
return ;
}
tagStrip (&tag, &len);
+ if (spec->d1_stack[spec->d1_level])
+ tagDataRelease (spec);
- parent = spec->d1_stack[spec->d1_level -1];
- partag = get_parent_tag(spec->dh, parent);
-
- res = data1_mk_node2 (spec->dh, spec->m, DATA1N_tag, parent);
-
- if (len >= DATA1_LOCALDATA)
- res->u.tag.tag = (char *) nmem_malloc (spec->m, len+1);
- else
- res->u.tag.tag = res->lbuf;
-
- memcpy (res->u.tag.tag, tag, len);
- res->u.tag.tag[len] = '\0';
-
#if REGX_DEBUG
- logf (LOG_LOG, "begin tag %s (%d)", res->u.tag.tag, spec->d1_level);
+ logf (LOG_LOG, "begin tag %s (%d)", tag, spec->d1_level);
#endif
- if (parent->which == DATA1N_variant)
- return ;
- if (partag)
- if (!(e = partag->u.tag.element))
- localtag = 1;
-
- elem = data1_getelementbytagname (spec->dh,
- spec->d1_stack[0]->u.root.absyn,
- e, res->u.tag.tag);
- res->u.tag.element = elem;
- if (spec->d1_stack[spec->d1_level])
- tagDataRelease (spec);
- spec->d1_stack[spec->d1_level] = res;
+ spec->d1_stack[spec->d1_level] = data1_mk_tag_n (
+ spec->dh, spec->m, tag, len, 0, spec->d1_stack[spec->d1_level -1]);
spec->d1_stack[++(spec->d1_level)] = NULL;
}