X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Fregxread.c;h=9b8473b060b977fe92f653d6ebb49927827e83ac;hb=7ec81d893efe0407cda28aeca3cb232266dd713f;hp=78b44499aeb82d5ccb1e7de304854c70f081746b;hpb=896c0427df9d8eff5de6a1735dcd992e067df844;p=idzebra-moved-to-github.git diff --git a/recctrl/regxread.c b/recctrl/regxread.c index 78b4449..9b8473b 100644 --- a/recctrl/regxread.c +++ b/recctrl/regxread.c @@ -1,5 +1,5 @@ -/* $Id: regxread.c,v 1.44 2002-08-02 19:26:56 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 +/* $Id: regxread.c,v 1.47 2003-04-24 19:34:20 adam Exp $ + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data Aps This file is part of the Zebra server. @@ -669,12 +669,17 @@ static void execData (struct lexSpec *spec, return ; #if REGX_DEBUG if (elen > 40) - logf (LOG_LOG, "data (%d bytes) %.15s ... %.*s", elen, + logf (LOG_LOG, "data(%d bytes) %.15s ... %.*s", elen, ebuf, 15, ebuf + elen-15); + else if (elen == 1 && ebuf[0] == '\n') + { + logf (LOG_LOG, "data(new line)"); + assert(0); + } else if (elen > 0) - logf (LOG_LOG, "data (%d bytes) %.*s", elen, elen, ebuf); + logf (LOG_LOG, "data(%d bytes) %.*s", elen, elen, ebuf); else - logf (LOG_LOG, "data (%d bytes)", elen); + logf (LOG_LOG, "data(%d bytes)", elen); #endif if (spec->d1_level <= 1) @@ -768,7 +773,7 @@ static void variantBegin (struct lexSpec *spec, ttype[type_len] = '\0'; #if REGX_DEBUG - logf (LOG_LOG, "variant begin %s %s (%d)", tclass, ttype, + logf (LOG_LOG, "variant begin(%s,%s,%d)", tclass, ttype, spec->d1_level); #endif @@ -793,7 +798,7 @@ static void variantBegin (struct lexSpec *spec, } #if REGX_DEBUG - logf (LOG_LOG, "variant node (%d)", spec->d1_level); + logf (LOG_LOG, "variant node(%d)", spec->d1_level); #endif parent = spec->d1_stack[spec->d1_level-1]; res = data1_mk_node2 (spec->dh, spec->m, DATA1N_variant, parent); @@ -828,50 +833,21 @@ static void tagStrip (const char **tag, int *len) 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)", len, 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; } @@ -893,7 +869,7 @@ static void tagEnd (struct lexSpec *spec, int min_level, break; } #if REGX_DEBUG - logf (LOG_LOG, "end tag (%d)", spec->d1_level); + logf (LOG_LOG, "end tag(%d)", spec->d1_level); #endif }