1 /*
2  * Summary: Tree debugging APIs
3  * Description: Interfaces to a set of routines used for debugging the tree
4  *              produced by the XML parser.
5  *
6  * Copy: See Copyright for the status of this software.
7  *
8  * Author: Daniel Veillard
9  */
10 
11 #ifndef __DEBUG_XML__
12 #define __DEBUG_XML__
13 #include <stdio.h>
14 #include <libxml/xmlversion.h>
15 #include <libxml/tree.h>
16 
17 #ifdef LIBXML_DEBUG_ENABLED
18 
19 #include <libxml/xpath.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /*
26  * The standard Dump routines.
27  */
28 XMLPUBFUN void XMLCALL
29 	xmlDebugDumpString	(FILE *output,
30 				 const xmlChar *str);
31 XMLPUBFUN void XMLCALL
32 	xmlDebugDumpAttr	(FILE *output,
33 				 xmlAttrPtr attr,
34 				 int depth);
35 XMLPUBFUN void XMLCALL
36 	xmlDebugDumpAttrList	(FILE *output,
37 				 xmlAttrPtr attr,
38 				 int depth);
39 XMLPUBFUN void XMLCALL
40 	xmlDebugDumpOneNode	(FILE *output,
41 				 xmlNodePtr node,
42 				 int depth);
43 XMLPUBFUN void XMLCALL
44 	xmlDebugDumpNode	(FILE *output,
45 				 xmlNodePtr node,
46 				 int depth);
47 XMLPUBFUN void XMLCALL
48 	xmlDebugDumpNodeList	(FILE *output,
49 				 xmlNodePtr node,
50 				 int depth);
51 XMLPUBFUN void XMLCALL
52 	xmlDebugDumpDocumentHead(FILE *output,
53 				 xmlDocPtr doc);
54 XMLPUBFUN void XMLCALL
55 	xmlDebugDumpDocument	(FILE *output,
56 				 xmlDocPtr doc);
57 XMLPUBFUN void XMLCALL
58 	xmlDebugDumpDTD		(FILE *output,
59 				 xmlDtdPtr dtd);
60 XMLPUBFUN void XMLCALL
61 	xmlDebugDumpEntities	(FILE *output,
62 				 xmlDocPtr doc);
63 
64 /****************************************************************
65  *								*
66  *			Checking routines			*
67  *								*
68  ****************************************************************/
69 
70 XMLPUBFUN int XMLCALL
71 	xmlDebugCheckDocument	(FILE * output,
72 				 xmlDocPtr doc);
73 
74 /****************************************************************
75  *								*
76  *			XML shell helpers			*
77  *								*
78  ****************************************************************/
79 
80 XMLPUBFUN void XMLCALL
81 	xmlLsOneNode		(FILE *output, xmlNodePtr node);
82 XMLPUBFUN int XMLCALL
83 	xmlLsCountNode		(xmlNodePtr node);
84 
85 XMLPUBFUN const char * XMLCALL
86 	xmlBoolToText		(int boolval);
87 
88 /****************************************************************
89  *								*
90  *	 The XML shell related structures and functions		*
91  *								*
92  ****************************************************************/
93 
94 #ifdef LIBXML_XPATH_ENABLED
95 /**
96  * xmlShellReadlineFunc:
97  * @prompt:  a string prompt
98  *
99  * This is a generic signature for the XML shell input function.
100  *
101  * Returns a string which will be freed by the Shell.
102  */
103 typedef char * (* xmlShellReadlineFunc)(char *prompt);
104 
105 /**
106  * xmlShellCtxt:
107  *
108  * A debugging shell context.
109  * TODO: add the defined function tables.
110  */
111 typedef struct _xmlShellCtxt xmlShellCtxt;
112 typedef xmlShellCtxt *xmlShellCtxtPtr;
113 struct _xmlShellCtxt {
114     char *filename;
115     xmlDocPtr doc;
116     xmlNodePtr node;
117     xmlXPathContextPtr pctxt;
118     int loaded;
119     FILE *output;
120     xmlShellReadlineFunc input;
121 };
122 
123 /**
124  * xmlShellCmd:
125  * @ctxt:  a shell context
126  * @arg:  a string argument
127  * @node:  a first node
128  * @node2:  a second node
129  *
130  * This is a generic signature for the XML shell functions.
131  *
132  * Returns an int, negative returns indicating errors.
133  */
134 typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
135                              char *arg,
136 			     xmlNodePtr node,
137 			     xmlNodePtr node2);
138 
139 XMLPUBFUN void XMLCALL
140 	xmlShellPrintXPathError	(int errorType,
141 				 const char *arg);
142 XMLPUBFUN void XMLCALL
143 	xmlShellPrintXPathResult(xmlXPathObjectPtr list);
144 XMLPUBFUN int XMLCALL
145 	xmlShellList		(xmlShellCtxtPtr ctxt,
146 				 char *arg,
147 				 xmlNodePtr node,
148 				 xmlNodePtr node2);
149 XMLPUBFUN int XMLCALL
150 	xmlShellBase		(xmlShellCtxtPtr ctxt,
151 				 char *arg,
152 				 xmlNodePtr node,
153 				 xmlNodePtr node2);
154 XMLPUBFUN int XMLCALL
155 	xmlShellDir		(xmlShellCtxtPtr ctxt,
156 				 char *arg,
157 				 xmlNodePtr node,
158 				 xmlNodePtr node2);
159 XMLPUBFUN int XMLCALL
160 	xmlShellLoad		(xmlShellCtxtPtr ctxt,
161 				 char *filename,
162 				 xmlNodePtr node,
163 				 xmlNodePtr node2);
164 #ifdef LIBXML_OUTPUT_ENABLED
165 XMLPUBFUN void XMLCALL
166 	xmlShellPrintNode	(xmlNodePtr node);
167 XMLPUBFUN int XMLCALL
168 	xmlShellCat		(xmlShellCtxtPtr ctxt,
169 				 char *arg,
170 				 xmlNodePtr node,
171 				 xmlNodePtr node2);
172 XMLPUBFUN int XMLCALL
173 	xmlShellWrite		(xmlShellCtxtPtr ctxt,
174 				 char *filename,
175 				 xmlNodePtr node,
176 				 xmlNodePtr node2);
177 XMLPUBFUN int XMLCALL
178 	xmlShellSave		(xmlShellCtxtPtr ctxt,
179 				 char *filename,
180 				 xmlNodePtr node,
181 				 xmlNodePtr node2);
182 #endif /* LIBXML_OUTPUT_ENABLED */
183 #ifdef LIBXML_VALID_ENABLED
184 XMLPUBFUN int XMLCALL
185 	xmlShellValidate	(xmlShellCtxtPtr ctxt,
186 				 char *dtd,
187 				 xmlNodePtr node,
188 				 xmlNodePtr node2);
189 #endif /* LIBXML_VALID_ENABLED */
190 XMLPUBFUN int XMLCALL
191 	xmlShellDu		(xmlShellCtxtPtr ctxt,
192 				 char *arg,
193 				 xmlNodePtr tree,
194 				 xmlNodePtr node2);
195 XMLPUBFUN int XMLCALL
196 	xmlShellPwd		(xmlShellCtxtPtr ctxt,
197 				 char *buffer,
198 				 xmlNodePtr node,
199 				 xmlNodePtr node2);
200 
201 /*
202  * The Shell interface.
203  */
204 XMLPUBFUN void XMLCALL
205 	xmlShell		(xmlDocPtr doc,
206 				 char *filename,
207 				 xmlShellReadlineFunc input,
208 				 FILE *output);
209 
210 #endif /* LIBXML_XPATH_ENABLED */
211 
212 #ifdef __cplusplus
213 }
214 #endif
215 
216 #endif /* LIBXML_DEBUG_ENABLED */
217 #endif /* __DEBUG_XML__ */
218