X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_prtree.c;h=0a11ea3f6e08f09f2ab8dbe03fd468ddcb27d14b;hb=141269ce5f566fcd7ed188ebe9bb878bf4b32018;hp=ed24205910c3c6f66439c485d8a8c7cb992ff6b8;hpb=9989790d80d5953f51e088712cb1b9113303b694;p=yaz-moved-to-github.git diff --git a/retrieval/d1_prtree.c b/retrieval/d1_prtree.c index ed24205..0a11ea3 100644 --- a/retrieval/d1_prtree.c +++ b/retrieval/d1_prtree.c @@ -1,75 +1,111 @@ /* - * Copyright (c) 1995-1997, 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.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.9 2002-07-11 10:40:50 adam Exp $ */ -#include -#include +#include +#include + +static void pr_string (FILE *out, const char *str, int len) +{ + int i; + for (i = 0; i126) + fprintf (out, "\\x%02x", c & 255); + else + fputc (c, out); + } +} 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_tag: - fprintf (out, "tag type=%s\n", n->u.tag.tag); - break; - case DATA1N_data: - fprintf (out, "data type="); - switch (n->u.data.what) - { - case DATA1I_inctxt: - fprintf (out, "inctxt\n"); - break; - case DATA1I_incbin: - fprintf (out, "incbin\n"); - break; - case DATA1I_text: - fprintf (out, "text '%.*s'\n", n->u.data.len, n->u.data.data); - break; - case DATA1I_num: - fprintf (out, "num\n"); - break; - case DATA1I_oid: - fprintf (out, "oid\n"); - break; - default: - fprintf (out, "unknown(%d)\n", n->u.data.what); - break; - } - break; - case DATA1N_variant: - fprintf (out, "variant\n"); + fprintf (out, "%*s", level, ""); + switch (n->which) + { + 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); + 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: + 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: + fprintf (out, "inctxt\n"); + break; + case DATA1I_incbin: + fprintf (out, "incbin\n"); + break; + case DATA1I_text: + fprintf (out, "text '"); + pr_string (out, n->u.data.data, n->u.data.len); + fprintf (out, "'\n"); + break; + case DATA1I_num: + fprintf (out, "num '"); + pr_string (out, n->u.data.data, n->u.data.len); + fprintf (out, "'\n"); + break; + case DATA1I_oid: + fprintf (out, "oid '"); + 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 - if (n->u.variant.type->name) - fprintf (out, " class=%s type=%d value=%s\n", - n->u.variant.type->name, n->u.variant.type->type, - n->u.variant.value); + if (n->u.variant.type->name) + fprintf (out, " class=%s type=%d value=%s\n", + n->u.variant.type->name, n->u.variant.type->type, + n->u.variant.value); #endif - break; - default: - fprintf (out, "unknown(%d)\n", n->which); - } - if (n->child) - pr_tree (dh, n->child, out, level+4); - if (n->next) - pr_tree (dh, n->next, out, level); + break; + default: + fprintf (out, "unknown(%d)\n", n->which); + } + if (n->child) + pr_tree (dh, n->child, out, level+4); + if (n->next) + pr_tree (dh, n->next, out, level); } void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out) { - pr_tree (dh, n, out, 0); + pr_tree (dh, n, out, 0); }