X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=recctrl%2Fregxread.c;h=7c9919ff0367fe5348fc26ba4bd2995a78560bb1;hb=a8b86c35a39ce9eb5279c46dd99ef7e91b83fb7b;hp=c4c16d3c2814d5a621aa8a0870f6ef7574940100;hpb=5f196d5c2d38a50f3b986438fad5aa3c3a3f04c6;p=idzebra-moved-to-github.git diff --git a/recctrl/regxread.c b/recctrl/regxread.c index c4c16d3..7c9919f 100644 --- a/recctrl/regxread.c +++ b/recctrl/regxread.c @@ -1,5 +1,5 @@ -/* $Id: regxread.c,v 1.49 2003-09-16 13:56:52 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 +/* $Id: regxread.c,v 1.51 2004-08-04 08:35: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. @@ -882,7 +882,7 @@ static int tryMatch (struct lexSpec *spec, int *pptr, int *mptr, { struct DFA_state *state = dfa->states[0]; struct DFA_tran *t; - unsigned char c; + unsigned char c = 0; unsigned char c_prev = 0; int ptr = *pptr; /* current pointer */ int start_ptr = *pptr; /* first char of match */ @@ -1033,14 +1033,14 @@ static char *regxStrz (const char *src, int len, char *str) #if HAVE_TCL_H static int cmd_tcl_begin (ClientData clientData, Tcl_Interp *interp, - int argc, char **argv) + int argc, const char **argv) { struct lexSpec *spec = (struct lexSpec *) clientData; if (argc < 2) return TCL_ERROR; if (!strcmp(argv[1], "record") && argc == 3) { - char *absynName = argv[2]; + const char *absynName = argv[2]; data1_node *res; #if REGX_DEBUG @@ -1048,6 +1048,8 @@ static int cmd_tcl_begin (ClientData clientData, Tcl_Interp *interp, #endif res = data1_mk_root (spec->dh, spec->m, absynName); + spec->d1_level = 0; + spec->d1_stack[spec->d1_level++] = res; res = data1_mk_tag (spec->dh, spec->m, absynName, 0, res); @@ -1087,7 +1089,7 @@ static int cmd_tcl_begin (ClientData clientData, Tcl_Interp *interp, } static int cmd_tcl_end (ClientData clientData, Tcl_Interp *interp, - int argc, char **argv) + int argc, const char **argv) { struct lexSpec *spec = (struct lexSpec *) clientData; if (argc < 2) @@ -1107,8 +1109,8 @@ static int cmd_tcl_end (ClientData clientData, Tcl_Interp *interp, } else if (!strcmp (argv[1], "element")) { - int min_level = 1; - char *element = 0; + int min_level = 2; + const char *element = 0; if (argc >= 3 && !strcmp(argv[2], "-record")) { min_level = 0; @@ -1119,7 +1121,7 @@ static int cmd_tcl_end (ClientData clientData, Tcl_Interp *interp, if (argc == 3) element = argv[2]; tagEnd (spec, min_level, element, (element ? strlen(element) : 0)); - if (spec->d1_level == 0) + if (spec->d1_level <= 1) { #if REGX_DEBUG logf (LOG_LOG, "end element end records"); @@ -1141,7 +1143,7 @@ static int cmd_tcl_end (ClientData clientData, Tcl_Interp *interp, } static int cmd_tcl_data (ClientData clientData, Tcl_Interp *interp, - int argc, char **argv) + int argc, const char **argv) { int argi = 1; int textFlag = 0; @@ -1180,12 +1182,12 @@ static int cmd_tcl_data (ClientData clientData, Tcl_Interp *interp, argi++; } if (element) - tagEnd (spec, 1, NULL, 0); + tagEnd (spec, 2, NULL, 0); return TCL_OK; } static int cmd_tcl_unread (ClientData clientData, Tcl_Interp *interp, - int argc, char **argv) + int argc, const char **argv) { struct lexSpec *spec = (struct lexSpec *) clientData; int argi = 1; @@ -1283,7 +1285,7 @@ static void execCode (struct lexSpec *spec, struct regxCode *code) r = execTok (spec, &s, &cmd_str, &cmd_len); if (r < 2) continue; - if (spec->d1_level == 0) + if (spec->d1_level <= 1) { static char absynName[64]; data1_node *res; @@ -1297,6 +1299,8 @@ static void execCode (struct lexSpec *spec, struct regxCode *code) #endif res = data1_mk_root (spec->dh, spec->m, absynName); + spec->d1_level = 0; + spec->d1_stack[spec->d1_level++] = res; res = data1_mk_tag (spec->dh, spec->m, absynName, 0, res); @@ -1395,7 +1399,7 @@ static void execCode (struct lexSpec *spec, struct regxCode *code) } else if (!strcmp (p, "element")) { - int min_level = 1; + int min_level = 2; while ((r = execTok (spec, &s, &cmd_str, &cmd_len)) == 3) { if (cmd_len==7 && !memcmp ("-record", cmd_str, cmd_len)) @@ -1408,7 +1412,7 @@ static void execCode (struct lexSpec *spec, struct regxCode *code) } else tagEnd (spec, min_level, NULL, 0); - if (spec->d1_level == 0) + if (spec->d1_level <= 1) { #if REGX_DEBUG logf (LOG_LOG, "end element end records"); @@ -1462,7 +1466,7 @@ static void execCode (struct lexSpec *spec, struct regxCode *code) r = execTok (spec, &s, &cmd_str, &cmd_len); } while (r > 1); if (element_str) - tagEnd (spec, 1, NULL, 0); + tagEnd (spec, 2, NULL, 0); } else if (!strcmp (p, "unread")) {