Home | History | Annotate | Download | only in libxml
      1 /*
      2  * Summary: unfinished XLink detection module
      3  * Description: unfinished XLink detection module
      4  *
      5  * Copy: See Copyright for the status of this software.
      6  *
      7  * Author: Daniel Veillard
      8  */
      9 
     10 #ifndef __XML_XLINK_H__
     11 #define __XML_XLINK_H__
     12 
     13 #include <libxml/xmlversion.h>
     14 #include <libxml/tree.h>
     15 
     16 #ifdef LIBXML_XPTR_ENABLED
     17 
     18 #ifdef __cplusplus
     19 extern "C" {
     20 #endif
     21 
     22 /**
     23  * Various defines for the various Link properties.
     24  *
     25  * NOTE: the link detection layer will try to resolve QName expansion
     26  *       of namespaces. If "foo" is the prefix for "http://foo.com/"
     27  *       then the link detection layer will expand role="foo:myrole"
     28  *       to "http://foo.com/:myrole".
     29  * NOTE: the link detection layer will expand URI-Refences found on
     30  *       href attributes by using the base mechanism if found.
     31  */
     32 typedef xmlChar *xlinkHRef;
     33 typedef xmlChar *xlinkRole;
     34 typedef xmlChar *xlinkTitle;
     35 
     36 typedef enum {
     37     XLINK_TYPE_NONE = 0,
     38     XLINK_TYPE_SIMPLE,
     39     XLINK_TYPE_EXTENDED,
     40     XLINK_TYPE_EXTENDED_SET
     41 } xlinkType;
     42 
     43 typedef enum {
     44     XLINK_SHOW_NONE = 0,
     45     XLINK_SHOW_NEW,
     46     XLINK_SHOW_EMBED,
     47     XLINK_SHOW_REPLACE
     48 } xlinkShow;
     49 
     50 typedef enum {
     51     XLINK_ACTUATE_NONE = 0,
     52     XLINK_ACTUATE_AUTO,
     53     XLINK_ACTUATE_ONREQUEST
     54 } xlinkActuate;
     55 
     56 /**
     57  * xlinkNodeDetectFunc:
     58  * @ctx:  user data pointer
     59  * @node:  the node to check
     60  *
     61  * This is the prototype for the link detection routine.
     62  * It calls the default link detection callbacks upon link detection.
     63  */
     64 typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
     65 
     66 /*
     67  * The link detection module interact with the upper layers using
     68  * a set of callback registered at parsing time.
     69  */
     70 
     71 /**
     72  * xlinkSimpleLinkFunk:
     73  * @ctx:  user data pointer
     74  * @node:  the node carrying the link
     75  * @href:  the target of the link
     76  * @role:  the role string
     77  * @title:  the link title
     78  *
     79  * This is the prototype for a simple link detection callback.
     80  */
     81 typedef void
     82 (*xlinkSimpleLinkFunk)	(void *ctx,
     83 			 xmlNodePtr node,
     84 			 const xlinkHRef href,
     85 			 const xlinkRole role,
     86 			 const xlinkTitle title);
     87 
     88 /**
     89  * xlinkExtendedLinkFunk:
     90  * @ctx:  user data pointer
     91  * @node:  the node carrying the link
     92  * @nbLocators: the number of locators detected on the link
     93  * @hrefs:  pointer to the array of locator hrefs
     94  * @roles:  pointer to the array of locator roles
     95  * @nbArcs: the number of arcs detected on the link
     96  * @from:  pointer to the array of source roles found on the arcs
     97  * @to:  pointer to the array of target roles found on the arcs
     98  * @show:  array of values for the show attributes found on the arcs
     99  * @actuate:  array of values for the actuate attributes found on the arcs
    100  * @nbTitles: the number of titles detected on the link
    101  * @title:  array of titles detected on the link
    102  * @langs:  array of xml:lang values for the titles
    103  *
    104  * This is the prototype for a extended link detection callback.
    105  */
    106 typedef void
    107 (*xlinkExtendedLinkFunk)(void *ctx,
    108 			 xmlNodePtr node,
    109 			 int nbLocators,
    110 			 const xlinkHRef *hrefs,
    111 			 const xlinkRole *roles,
    112 			 int nbArcs,
    113 			 const xlinkRole *from,
    114 			 const xlinkRole *to,
    115 			 xlinkShow *show,
    116 			 xlinkActuate *actuate,
    117 			 int nbTitles,
    118 			 const xlinkTitle *titles,
    119 			 const xmlChar **langs);
    120 
    121 /**
    122  * xlinkExtendedLinkSetFunk:
    123  * @ctx:  user data pointer
    124  * @node:  the node carrying the link
    125  * @nbLocators: the number of locators detected on the link
    126  * @hrefs:  pointer to the array of locator hrefs
    127  * @roles:  pointer to the array of locator roles
    128  * @nbTitles: the number of titles detected on the link
    129  * @title:  array of titles detected on the link
    130  * @langs:  array of xml:lang values for the titles
    131  *
    132  * This is the prototype for a extended link set detection callback.
    133  */
    134 typedef void
    135 (*xlinkExtendedLinkSetFunk)	(void *ctx,
    136 				 xmlNodePtr node,
    137 				 int nbLocators,
    138 				 const xlinkHRef *hrefs,
    139 				 const xlinkRole *roles,
    140 				 int nbTitles,
    141 				 const xlinkTitle *titles,
    142 				 const xmlChar **langs);
    143 
    144 /**
    145  * This is the structure containing a set of Links detection callbacks.
    146  *
    147  * There is no default xlink callbacks, if one want to get link
    148  * recognition activated, those call backs must be provided before parsing.
    149  */
    150 typedef struct _xlinkHandler xlinkHandler;
    151 typedef xlinkHandler *xlinkHandlerPtr;
    152 struct _xlinkHandler {
    153     xlinkSimpleLinkFunk simple;
    154     xlinkExtendedLinkFunk extended;
    155     xlinkExtendedLinkSetFunk set;
    156 };
    157 
    158 /*
    159  * The default detection routine, can be overridden, they call the default
    160  * detection callbacks.
    161  */
    162 
    163 XMLPUBFUN xlinkNodeDetectFunc XMLCALL
    164 		xlinkGetDefaultDetect	(void);
    165 XMLPUBFUN void XMLCALL
    166 		xlinkSetDefaultDetect	(xlinkNodeDetectFunc func);
    167 
    168 /*
    169  * Routines to set/get the default handlers.
    170  */
    171 XMLPUBFUN xlinkHandlerPtr XMLCALL
    172 		xlinkGetDefaultHandler	(void);
    173 XMLPUBFUN void XMLCALL
    174 		xlinkSetDefaultHandler	(xlinkHandlerPtr handler);
    175 
    176 /*
    177  * Link detection module itself.
    178  */
    179 XMLPUBFUN xlinkType XMLCALL
    180 		xlinkIsLink		(xmlDocPtr doc,
    181 					 xmlNodePtr node);
    182 
    183 #ifdef __cplusplus
    184 }
    185 #endif
    186 
    187 #endif /* LIBXML_XPTR_ENABLED */
    188 
    189 #endif /* __XML_XLINK_H__ */
    190