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 module http://xmlsoft.org/XSLT/
 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