X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_prtree.c;h=4354b300cd8e243e6809eeafea8b19b76f5434e3;hb=5b690aebb8dc2d05cad8f668de8fd821a1c231fa;hp=8ed42c3f2a351c7f3e312ec1f7a34a8ff94b7c07;hpb=87ef7657b92bc53bd98e18ef5046ae3698a7fb01;p=yaz-moved-to-github.git diff --git a/retrieval/d1_prtree.c b/retrieval/d1_prtree.c index 8ed42c3..4354b30 100644 --- a/retrieval/d1_prtree.c +++ b/retrieval/d1_prtree.c @@ -1,30 +1,13 @@ /* - * Copyright (c) 1995-1999, Index Data. + * Copyright (c) 1995-2002, Index Data. * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * - * $Log: d1_prtree.c,v $ - * Revision 1.5 1999-01-25 13:49:47 adam - * Made data1_pr_tree make better printing of data1 buffers. - * - * Revision 1.4 1998/05/18 13:07:06 adam - * Changed the way attribute sets are handled by the retriaval module. - * Extended Explain conversion / schema. - * Modified server and client to work with ASN.1 compiled protocol handlers. - * - * Revision 1.3 1998/02/27 14:05:34 adam - * Added printing of integer nodes. - * - * Revision 1.2 1997/11/06 11:36:44 adam - * Implemented variant match on simple elements -data1 tree and Espec-1. - * - * Revision 1.1 1997/10/27 14:04:07 adam - * New debug utility, data1_pr_tree, that dumps a data1 tree. - * + * $Id: d1_prtree.c,v 1.11 2002-10-08 20:14:44 adam Exp $ */ -#include -#include +#include +#include static void pr_string (FILE *out, const char *str, int len) { @@ -33,7 +16,7 @@ static void pr_string (FILE *out, const char *str, int len) { int c = str[i]; if (c < 32 || c >126) - fprintf (out, "\\x%02x", c); + fprintf (out, "\\x%02x", c & 255); else fputc (c, out); } @@ -44,14 +27,27 @@ static void pr_tree (data1_handle dh, data1_node *n, FILE *out, int level) fprintf (out, "%*s", level, ""); switch (n->which) { - case DATA1N_root: - fprintf (out, "root abstract syntax=%s\n", n->u.root.type); - break; + case DATA1N_root: + fprintf (out, "root abstract syntax=%s\n", n->u.root.type); + break; case DATA1N_tag: - fprintf (out, "tag type=%s\n", n->u.tag.tag); + fprintf (out, "tag type=%s sel=%d\n", n->u.tag.tag, + n->u.tag.node_selected); + if (n->u.tag.attributes) + { + data1_xattr *xattr = n->u.tag.attributes; + fprintf (out, "%*s attr", level, ""); + for (; xattr; xattr = xattr->next) + fprintf (out, " %s=%s ", xattr->name, xattr->value); + fprintf (out, "\n"); + } break; case DATA1N_data: - fprintf (out, "data type="); + case DATA1N_comment: + if (n->which == DATA1N_data) + fprintf (out, "data type="); + else + fprintf (out, "comment type="); switch (n->u.data.what) { case DATA1I_inctxt: @@ -75,11 +71,27 @@ static void pr_tree (data1_handle dh, data1_node *n, FILE *out, int level) pr_string (out, n->u.data.data, n->u.data.len); fprintf (out, "'\n"); break; + case DATA1I_xmltext: + fprintf (out, "xml text '"); + pr_string (out, n->u.data.data, n->u.data.len); + fprintf (out, "'\n"); + break; default: fprintf (out, "unknown(%d)\n", n->u.data.what); break; } break; + case DATA1N_preprocess: + fprintf (out, "preprocess target=%s\n", n->u.preprocess.target); + if (n->u.preprocess.attributes) + { + data1_xattr *xattr = n->u.preprocess.attributes; + fprintf (out, "%*s attr", level, ""); + for (; xattr; xattr = xattr->next) + fprintf (out, " %s=%s ", xattr->name, xattr->value); + fprintf (out, "\n"); + } + break; case DATA1N_variant: fprintf (out, "variant\n"); #if 0