add docbook DTD path for Red Hat 7.2
[yaz-moved-to-github.git] / retrieval / d1_prtree.c
1 /*
2  * Copyright (c) 1995-2002, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Id: d1_prtree.c,v 1.9 2002-07-11 10:40:50 adam Exp $
7  */
8
9 #include <yaz/log.h>
10 #include <yaz/data1.h>
11
12 static void pr_string (FILE *out, const char *str, int len)
13 {
14     int i;
15     for (i = 0; i<len; i++)
16     {
17         int c = str[i];
18         if (c < 32 || c >126)
19             fprintf (out, "\\x%02x", c & 255);
20         else
21             fputc (c, out);
22     }
23 }
24
25 static void pr_tree (data1_handle dh, data1_node *n, FILE *out, int level)
26 {
27     fprintf (out, "%*s", level, "");
28     switch (n->which)
29     {
30     case DATA1N_root:
31         fprintf (out, "root abstract syntax=%s\n", n->u.root.type);
32         break;
33     case DATA1N_tag:
34         fprintf (out, "tag type=%s\n", n->u.tag.tag);
35         if (n->u.tag.attributes)
36         {
37             data1_xattr *xattr = n->u.tag.attributes;
38             fprintf (out, "%*s attr", level, "");
39             for (; xattr; xattr = xattr->next)
40                 fprintf (out, " %s=%s ", xattr->name, xattr->value);
41             fprintf (out, "\n");
42         }
43         break;
44     case DATA1N_data:
45     case DATA1N_comment:
46         if (n->which == DATA1N_data)
47             fprintf (out, "data type=");
48         else
49             fprintf (out, "comment type=");
50         switch (n->u.data.what)
51         {
52         case DATA1I_inctxt:
53             fprintf (out, "inctxt\n");
54             break;
55         case DATA1I_incbin:
56             fprintf (out, "incbin\n");
57             break;
58         case DATA1I_text:
59             fprintf (out, "text '");
60             pr_string (out, n->u.data.data, n->u.data.len);
61             fprintf (out, "'\n");
62             break;
63         case DATA1I_num:
64             fprintf (out, "num '");
65             pr_string (out, n->u.data.data, n->u.data.len);
66             fprintf (out, "'\n");
67             break;
68         case DATA1I_oid:
69             fprintf (out, "oid '");
70             pr_string (out, n->u.data.data, n->u.data.len);
71             fprintf (out, "'\n");
72             break;
73         default:
74             fprintf (out, "unknown(%d)\n", n->u.data.what);
75             break;
76         }
77         break;
78     case DATA1N_preprocess:
79         fprintf (out, "preprocess target=%s\n", n->u.preprocess.target);
80         if (n->u.preprocess.attributes)
81         {
82             data1_xattr *xattr = n->u.preprocess.attributes;
83             fprintf (out, "%*s attr", level, "");
84             for (; xattr; xattr = xattr->next)
85                 fprintf (out, " %s=%s ", xattr->name, xattr->value);
86             fprintf (out, "\n");
87         }
88         break;
89     case DATA1N_variant:
90         fprintf (out, "variant\n");
91 #if 0
92         if (n->u.variant.type->name)
93             fprintf (out, " class=%s type=%d value=%s\n",
94                      n->u.variant.type->name, n->u.variant.type->type,
95                      n->u.variant.value);
96 #endif
97         break;
98     default:
99         fprintf (out, "unknown(%d)\n", n->which);
100     }
101     if (n->child)
102         pr_tree (dh, n->child, out, level+4);
103     if (n->next)
104         pr_tree (dh, n->next, out, level);
105 }
106
107
108 void data1_pr_tree (data1_handle dh, data1_node *n, FILE *out)
109 {
110     pr_tree (dh, n, out, 0);
111 }