1 /*
2  * Summary: interface for the extension support
3  * Description: This provide the API needed for simple and module
4  *              extension support.
5  *
6  * Copy: See Copyright for the status of this software.
7  *
8  * Author: Daniel Veillard
9  */
10 
11 #ifndef __XML_XSLT_EXTENSION_H__
12 #define __XML_XSLT_EXTENSION_H__
13 
14 #include <libxml/xpath.h>
15 #include "xsltexports.h"
16 #include "xsltInternals.h"
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 /**
23  * Extension Modules API.
24  */
25 
26 /**
27  * xsltInitGlobals:
28  *
29  * Initialize the global variables for extensions
30  *
31  */
32 
33 XSLTPUBFUN void XSLTCALL
34 		xsltInitGlobals                 (void);
35 
36 /**
37  * xsltStyleExtInitFunction:
38  * @ctxt:  an XSLT stylesheet
39  * @URI:  the namespace URI for the extension
40  *
41  * A function called at initialization time of an XSLT extension module.
42  *
43  * Returns a pointer to the module specific data for this transformation.
44  */
45 typedef void * (*xsltStyleExtInitFunction)	(xsltStylesheetPtr style,
46 						 const xmlChar *URI);
47 
48 /**
49  * xsltStyleExtShutdownFunction:
50  * @ctxt:  an XSLT stylesheet
51  * @URI:  the namespace URI for the extension
52  * @data:  the data associated to this module
53  *
54  * A function called at shutdown time of an XSLT extension module.
55  */
56 typedef void (*xsltStyleExtShutdownFunction)	(xsltStylesheetPtr style,
57 						 const xmlChar *URI,
58 						 void *data);
59 
60 /**
61  * xsltExtInitFunction:
62  * @ctxt:  an XSLT transformation context
63  * @URI:  the namespace URI for the extension
64  *
65  * A function called at initialization time of an XSLT extension module.
66  *
67  * Returns a pointer to the module specific data for this transformation.
68  */
69 typedef void * (*xsltExtInitFunction)	(xsltTransformContextPtr ctxt,
70 					 const xmlChar *URI);
71 
72 /**
73  * xsltExtShutdownFunction:
74  * @ctxt:  an XSLT transformation context
75  * @URI:  the namespace URI for the extension
76  * @data:  the data associated to this module
77  *
78  * A function called at shutdown time of an XSLT extension module.
79  */
80 typedef void (*xsltExtShutdownFunction) (xsltTransformContextPtr ctxt,
81 					 const xmlChar *URI,
82 					 void *data);
83 
84 XSLTPUBFUN int XSLTCALL
85 		xsltRegisterExtModule	(const xmlChar *URI,
86 					 xsltExtInitFunction initFunc,
87 					 xsltExtShutdownFunction shutdownFunc);
88 XSLTPUBFUN int XSLTCALL
89 		xsltRegisterExtModuleFull
90 					(const xmlChar * URI,
91 					 xsltExtInitFunction initFunc,
92 					 xsltExtShutdownFunction shutdownFunc,
93 					 xsltStyleExtInitFunction styleInitFunc,
94 					 xsltStyleExtShutdownFunction styleShutdownFunc);
95 
96 XSLTPUBFUN int XSLTCALL
97 		xsltUnregisterExtModule	(const xmlChar * URI);
98 
99 XSLTPUBFUN void * XSLTCALL
100 		xsltGetExtData		(xsltTransformContextPtr ctxt,
101 					 const xmlChar *URI);
102 
103 XSLTPUBFUN void * XSLTCALL
104 		xsltStyleGetExtData	(xsltStylesheetPtr style,
105 					 const xmlChar *URI);
106 #ifdef XSLT_REFACTORED
107 XSLTPUBFUN void * XSLTCALL
108 		xsltStyleStylesheetLevelGetExtData(
109 					 xsltStylesheetPtr style,
110 					 const xmlChar * URI);
111 #endif
112 XSLTPUBFUN void XSLTCALL
113 		xsltShutdownCtxtExts	(xsltTransformContextPtr ctxt);
114 
115 XSLTPUBFUN void XSLTCALL
116 		xsltShutdownExts	(xsltStylesheetPtr style);
117 
118 XSLTPUBFUN xsltTransformContextPtr XSLTCALL
119 		xsltXPathGetTransformContext
120 					(xmlXPathParserContextPtr ctxt);
121 
122 /*
123  * extension functions
124 */
125 XSLTPUBFUN int XSLTCALL
126 		xsltRegisterExtModuleFunction
127 					(const xmlChar *name,
128 					 const xmlChar *URI,
129 					 xmlXPathFunction function);
130 XSLTPUBFUN xmlXPathFunction XSLTCALL
131 	xsltExtModuleFunctionLookup	(const xmlChar *name,
132 					 const xmlChar *URI);
133 XSLTPUBFUN int XSLTCALL
134 		xsltUnregisterExtModuleFunction
135 					(const xmlChar *name,
136 					 const xmlChar *URI);
137 
138 /*
139  * extension elements
140  */
141 typedef xsltElemPreCompPtr (*xsltPreComputeFunction)
142 					(xsltStylesheetPtr style,
143 					 xmlNodePtr inst,
144 					 xsltTransformFunction function);
145 
146 XSLTPUBFUN xsltElemPreCompPtr XSLTCALL
147 		xsltNewElemPreComp	(xsltStylesheetPtr style,
148 					 xmlNodePtr inst,
149 					 xsltTransformFunction function);
150 XSLTPUBFUN void XSLTCALL
151 		xsltInitElemPreComp	(xsltElemPreCompPtr comp,
152 					 xsltStylesheetPtr style,
153 					 xmlNodePtr inst,
154 					 xsltTransformFunction function,
155 					 xsltElemPreCompDeallocator freeFunc);
156 
157 XSLTPUBFUN int XSLTCALL
158 		xsltRegisterExtModuleElement
159 					(const xmlChar *name,
160 					 const xmlChar *URI,
161 					 xsltPreComputeFunction precomp,
162 					 xsltTransformFunction transform);
163 XSLTPUBFUN xsltTransformFunction XSLTCALL
164 		xsltExtElementLookup	(xsltTransformContextPtr ctxt,
165 					 const xmlChar *name,
166 					 const xmlChar *URI);
167 XSLTPUBFUN xsltTransformFunction XSLTCALL
168 		xsltExtModuleElementLookup
169 					(const xmlChar *name,
170 					 const xmlChar *URI);
171 XSLTPUBFUN xsltPreComputeFunction XSLTCALL
172 		xsltExtModuleElementPreComputeLookup
173 					(const xmlChar *name,
174 					 const xmlChar *URI);
175 XSLTPUBFUN int XSLTCALL
176 		xsltUnregisterExtModuleElement
177 					(const xmlChar *name,
178 					 const xmlChar *URI);
179 
180 /*
181  * top-level elements
182  */
183 typedef void (*xsltTopLevelFunction)	(xsltStylesheetPtr style,
184 					 xmlNodePtr inst);
185 
186 XSLTPUBFUN int XSLTCALL
187 		xsltRegisterExtModuleTopLevel
188 					(const xmlChar *name,
189 					 const xmlChar *URI,
190 					 xsltTopLevelFunction function);
191 XSLTPUBFUN xsltTopLevelFunction XSLTCALL
192 		xsltExtModuleTopLevelLookup
193 					(const xmlChar *name,
194 					 const xmlChar *URI);
195 XSLTPUBFUN int XSLTCALL
196 		xsltUnregisterExtModuleTopLevel
197 					(const xmlChar *name,
198 					 const xmlChar *URI);
199 
200 
201 /* These 2 functions are deprecated for use within modules. */
202 XSLTPUBFUN int XSLTCALL
203 		xsltRegisterExtFunction	(xsltTransformContextPtr ctxt,
204 					 const xmlChar *name,
205 					 const xmlChar *URI,
206 					 xmlXPathFunction function);
207 XSLTPUBFUN int XSLTCALL
208 		xsltRegisterExtElement	(xsltTransformContextPtr ctxt,
209 					 const xmlChar *name,
210 					 const xmlChar *URI,
211 					 xsltTransformFunction function);
212 
213 /*
214  * Extension Prefix handling API.
215  * Those are used by the XSLT (pre)processor.
216  */
217 
218 XSLTPUBFUN int XSLTCALL
219 		xsltRegisterExtPrefix	(xsltStylesheetPtr style,
220 					 const xmlChar *prefix,
221 					 const xmlChar *URI);
222 XSLTPUBFUN int XSLTCALL
223 		xsltCheckExtPrefix	(xsltStylesheetPtr style,
224 					 const xmlChar *URI);
225 XSLTPUBFUN int XSLTCALL
226 		xsltCheckExtURI		(xsltStylesheetPtr style,
227 					 const xmlChar *URI);
228 XSLTPUBFUN int XSLTCALL
229 		xsltInitCtxtExts	(xsltTransformContextPtr ctxt);
230 XSLTPUBFUN void XSLTCALL
231 		xsltFreeCtxtExts	(xsltTransformContextPtr ctxt);
232 XSLTPUBFUN void XSLTCALL
233 		xsltFreeExts		(xsltStylesheetPtr style);
234 
235 XSLTPUBFUN xsltElemPreCompPtr XSLTCALL
236 		xsltPreComputeExtModuleElement
237 					(xsltStylesheetPtr style,
238 					 xmlNodePtr inst);
239 /*
240  * Extension Infos access.
241  * Used by exslt initialisation
242  */
243 
244 XSLTPUBFUN xmlHashTablePtr XSLTCALL
245 		xsltGetExtInfo		(xsltStylesheetPtr style,
246 					 const xmlChar *URI);
247 
248 /**
249  * Test of the extension module API
250  */
251 XSLTPUBFUN void XSLTCALL
252 		xsltRegisterTestModule	(void);
253 XSLTPUBFUN void XSLTCALL
254 		xsltDebugDumpExtensions	(FILE * output);
255 
256 
257 #ifdef __cplusplus
258 }
259 #endif
260 
261 #endif /* __XML_XSLT_EXTENSION_H__ */
262 
263