Annotation of XML/xpath.h, revision 1.9

1.1       daniel      1: /*
                      2:  * xpath.c: interface for XML Path Language implementation
                      3:  *
                      4:  * Reference: W3C Working Draft 5 July 1999
                      5:  *            http://www.w3.org/Style/XSL/Group/1999/07/xpath-19990705.html
                      6:  *
                      7:  * See COPYRIGHT for the status of this software
                      8:  *
                      9:  * Author: Daniel.Veillard@w3.org
                     10:  */
                     11: 
                     12: #ifndef __XML_XPATH_H__
                     13: #define __XML_XPATH_H__
                     14: 
                     15: #include "tree.h"
                     16: 
1.9     ! daniel     17: typedef struct xmlXPathParserContext *xmlXPathParserContextPtr;
        !            18: 
1.1       daniel     19: /*
                     20:  * A node-set (an unordered collection of nodes without duplicates) 
                     21:  */
                     22: typedef struct xmlNodeSet {
                     23:     int nodeNr;                        /* # of node in the set */
                     24:     int nodeMax;               /* allocated space */
                     25:     xmlNodePtr *nodeTab;       /* array of nodes in no particular order */
                     26: } xmlNodeSet, *xmlNodeSetPtr;
                     27: 
                     28: /*
                     29:  * An expression is evaluated to yield an object, which
                     30:  * has one of the following four basic types:
                     31:  *   - node-set
                     32:  *   - boolean
                     33:  *   - number
                     34:  *   - string
                     35:  */
                     36: 
                     37: #define XPATH_UNDEFINED        0
                     38: #define XPATH_NODESET  1
                     39: #define XPATH_BOOLEAN  2
                     40: #define XPATH_NUMBER   3
                     41: #define XPATH_STRING   4
1.9     ! daniel     42: #define XPATH_USERS    5
1.1       daniel     43: 
                     44: typedef struct xmlXPathObject {
                     45:     int type;
                     46:     xmlNodeSetPtr nodesetval;
                     47:     int boolval;
1.6       daniel     48:     double floatval;
1.1       daniel     49:     CHAR *stringval;
1.9     ! daniel     50:     void *user;
1.1       daniel     51: } xmlXPathObject, *xmlXPathObjectPtr;
                     52: 
1.9     ! daniel     53: /*
        !            54:  * A conversion function is associated to a type and used to cast
        !            55:  * the new type to primitive values.
        !            56:  */
        !            57: typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
        !            58: 
        !            59: /*
        !            60:  * Extra type: a name and a conversion function.
        !            61:  */
        !            62: 
        !            63: typedef struct xmlXPathType {
        !            64:     const CHAR         *name;          /* the type name */
        !            65:     xmlXPathConvertFunc func;          /* the conversion function */
        !            66: } xmlXPathType, *xmlXPathTypePtr;
        !            67: 
        !            68: /*
        !            69:  * Extra variable: a name and a value.
        !            70:  */
        !            71: 
        !            72: typedef struct xmlXPathVariable {
        !            73:     const CHAR       *name;            /* the variable name */
        !            74:     xmlXPathObjectPtr value;           /* the value */
        !            75: } xmlXPathVariable, *xmlXPathVariablePtr;
        !            76: 
        !            77: /*
        !            78:  * an evaluation function, the parameters are on the context stack
        !            79:  */
        !            80: 
        !            81: typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt, int nargs);
        !            82: 
        !            83: /*
        !            84:  * Extra function: a name and a evaluation function.
        !            85:  */
        !            86: 
        !            87: typedef struct xmlXPathFunct {
        !            88:     const CHAR      *name;             /* the function name */
        !            89:     xmlXPathEvalFunc func;             /* the evaluation function */
        !            90: } xmlXPathFunc, *xmlXPathFuncPtr;
        !            91: 
        !            92: /*
        !            93:  * An axis traversal function. To traverse an axis, the engine calls
        !            94:  * the first time with cur == NULL and repeat until the function returns
        !            95:  * NULL indicating the end of the axis traversal.
        !            96:  */
        !            97: 
        !            98: typedef xmlXPathObjectPtr (*xmlXPathAxisFunc)  (xmlXPathParserContextPtr ctxt,
        !            99:                                                 xmlXPathObjectPtr cur);
        !           100: 
        !           101: /*
        !           102:  * Extra axis: a name and an axis function.
        !           103:  */
        !           104: 
        !           105: typedef struct xmlXPathAxis {
        !           106:     const CHAR      *name;             /* the axis name */
        !           107:     xmlXPathAxisFunc func;             /* the search function */
        !           108: } xmlXPathAxis, *xmlXPathAxisPtr;
        !           109: 
1.1       daniel    110: /* 
                    111:  * Expression evaluation occurs with respect to a context.
                    112:  * he context consists of:
                    113:  *    - a node (the context node) 
                    114:  *    - a node list (the context node list) 
                    115:  *    - a set of variable bindings 
                    116:  *    - a function library 
                    117:  *    - the set of namespace declarations in scope for the expression 
                    118:  */
                    119: 
                    120: typedef struct xmlXPathContext {
1.2       daniel    121:     xmlDocPtr doc;                     /* The current document */
                    122:     xmlNodePtr node;                   /* The current node */
                    123:     xmlNodeSetPtr nodelist;            /* The current node list */
1.9     ! daniel    124: 
        !           125:     int nb_variables;                  /* number of defined variables */
        !           126:     int max_variables;                 /* max number of variables */
        !           127:     xmlXPathVariablePtr *variables;    /* Array of defined variables */
        !           128: 
        !           129:     int nb_types;                      /* number of defined types */
        !           130:     int max_types;                     /* max number of types */
        !           131:     xmlXPathTypePtr *types;            /* Array of defined types */
        !           132: 
        !           133:     int nb_funcs;                      /* number of defined funcs */
        !           134:     int max_funcs;                     /* max number of funcs */
        !           135:     xmlXPathFuncPtr *funcs;            /* Array of defined funcs */
        !           136: 
        !           137:     int nb_axis;                       /* number of defined axis */
        !           138:     int max_axis;                      /* max number of axis */
        !           139:     xmlXPathAxisPtr *axis;             /* Array of defined axis */
        !           140: 
        !           141:     /* Namespace traversal should be implemented with user */
1.8       daniel    142:     xmlNsPtr *namespaces;              /* The namespaces lookup */
                    143:     int nsNr;                          /* the current Namespace index */
1.9     ! daniel    144:     void *user;                                /* user defined extra info */
1.1       daniel    145: } xmlXPathContext, *xmlXPathContextPtr;
                    146: 
                    147: /*
                    148:  * An XPath parser context, it contains pure parsing informations,
                    149:  * an xmlXPathContext, and the stack of objects.
                    150:  */
                    151: typedef struct xmlXPathParserContext {
                    152:     const CHAR *cur;                   /* the current char being parsed */
                    153:     const CHAR *base;                  /* the full expression */
                    154: 
                    155:     int error;                         /* error code */
                    156: 
                    157:     xmlXPathContextPtr  context;       /* the evaluation context */
                    158:     xmlXPathObjectPtr     value;       /* the current value */
                    159:     int                 valueNr;       /* number of values stacked */
                    160:     int                valueMax;       /* max number of values stacked */
                    161:     xmlXPathObjectPtr *valueTab;       /* stack of values */
1.9     ! daniel    162: } xmlXPathParserContext;
1.1       daniel    163: 
                    164: /*
                    165:  * An XPath function
                    166:  * The arguments (if any) are popped out of the context stack
                    167:  * and the result is pushed on the stack.
                    168:  */
                    169: 
1.4       daniel    170: typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
1.1       daniel    171: 
                    172: /************************************************************************
                    173:  *                                                                     *
                    174:  *                     Public API                                      *
                    175:  *                                                                     *
                    176:  ************************************************************************/
                    177: 
1.9     ! daniel    178: /**
        !           179:  * Registering extensions to the expression language
        !           180:  */
        !           181: /* TODO */ int    xmlXPathRegisterType         (xmlXPathContextPtr ctxt,
        !           182:                                                 const CHAR *name,
        !           183:                                                  xmlXPathConvertFunc f);
        !           184: /* TODO */ int    xmlXPathRegisterAxis         (xmlXPathContextPtr ctxt,
        !           185:                                                 const CHAR *name,
        !           186:                                                 xmlXPathAxisFunc f);
        !           187: /* TODO */ int    xmlXPathRegisterFunc         (xmlXPathContextPtr ctxt,
        !           188:                                                 const CHAR *name,
        !           189:                                                 xmlXPathFunction f);
        !           190: /* TODO */ int    xmlXPathRegisterVariable     (xmlXPathContextPtr ctxt,
        !           191:                                                 const CHAR *name,
        !           192:                                                 xmlXPathObject value);
        !           193: 
        !           194: /**
        !           195:  * Evaluation functions.
        !           196:  */
        !           197: xmlXPathContextPtr xmlXPathNewContext          (xmlDocPtr doc);
1.8       daniel    198: void              xmlXPathFreeContext          (xmlXPathContextPtr ctxt);
                    199: xmlXPathObjectPtr  xmlXPathEval                        (const CHAR *str,
                    200:                                                 xmlXPathContextPtr ctxt);
                    201: void              xmlXPathFreeObject           (xmlXPathObjectPtr obj);
                    202: xmlXPathObjectPtr  xmlXPathEvalExpression      (const CHAR *str,
                    203:                                                 xmlXPathContextPtr ctxt);
1.3       daniel    204: 
1.1       daniel    205: #endif /* ! __XML_XPATH_H__ */

Webmaster