Annotation of XML/xpathInternals.h, revision 1.5

1.1       veillard    1: /*
                      2:  * xpath.c: internal interfaces for XML Path Language implementation
                      3:  *          used to build new modules on top of XPath
                      4:  *
                      5:  * See COPYRIGHT for the status of this software
                      6:  *
                      7:  * Author: Daniel.Veillard@w3.org
                      8:  */
                      9: 
                     10: #ifndef __XML_XPATH_INTERNALS_H__
                     11: #define __XML_XPATH_INTERNALS_H__
                     12: 
                     13: #include <libxml/xpath.h>
                     14: 
                     15: #ifdef __cplusplus
                     16: extern "C" {
                     17: #endif
                     18: 
                     19: /************************************************************************
                     20:  *                                                                     *
                     21:  *                     Helpers                                         *
                     22:  *                                                                     *
                     23:  ************************************************************************/
                     24: 
                     25: #define CHECK_ERROR                                                    \
                     26:     if (ctxt->error != XPATH_EXPRESSION_OK) return
                     27: 
                     28: #define CHECK_ERROR0                                                   \
                     29:     if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
                     30: 
                     31: #define XP_ERROR(X)                                                    \
                     32:     { xmlXPatherror(ctxt, __FILE__, __LINE__, X);                      \
                     33:       ctxt->error = (X); return; }
                     34: 
                     35: #define XP_ERROR0(X)                                                   \
                     36:     { xmlXPatherror(ctxt, __FILE__, __LINE__, X);                      \
                     37:       ctxt->error = (X); return(0); }
                     38: 
                     39: #define CHECK_TYPE(typeval)                                            \
                     40:     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))       \
1.3       veillard   41:         XP_ERROR(XPATH_INVALID_TYPE)
1.1       veillard   42: 
                     43: #define CHECK_ARITY(x)                                                 \
1.3       veillard   44:     if (nargs != (x))                                                  \
                     45:         XP_ERROR(XPATH_INVALID_ARITY);
                     46: 
                     47: #define CAST_TO_STRING                                                 \
                     48:     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))  \
                     49:         xmlXPathStringFunction(ctxt, 1);
                     50: 
                     51: #define CAST_TO_NUMBER                                                 \
                     52:     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))  \
                     53:         xmlXPathNumberFunction(ctxt, 1);
                     54: 
                     55: #define CAST_TO_BOOLEAN                                                        \
                     56:     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
                     57:         xmlXPathBooleanFunction(ctxt, 1);
1.1       veillard   58: 
                     59: void           xmlXPatherror   (xmlXPathParserContextPtr ctxt,
                     60:                                 const char *file,
                     61:                                 int line,
                     62:                                 int no);
                     63: 
                     64: void           xmlXPathDebugDumpObject (FILE *output,
                     65:                                         xmlXPathObjectPtr cur,
                     66:                                         int depth);
                     67: 
                     68: /**
                     69:  * Extending a context
                     70:  */
1.5     ! veillard   71: int               xmlXPathRegisterNs           (xmlXPathContextPtr ctxt,
        !            72:                                                 const xmlChar *prefix,
        !            73:                                                 const xmlChar *ns_uri);
        !            74: const xmlChar *           xmlXPathNsLookup             (xmlXPathContextPtr ctxt,
        !            75:                                                 const xmlChar *ns_uri);
        !            76: void              xmlXPathRegisteredNsCleanup  (xmlXPathContextPtr ctxt);
        !            77: 
1.1       veillard   78: int               xmlXPathRegisterFunc         (xmlXPathContextPtr ctxt,
                     79:                                                 const xmlChar *name,
                     80:                                                 xmlXPathFunction f);
1.3       veillard   81: int               xmlXPathRegisterFuncNS       (xmlXPathContextPtr ctxt,
                     82:                                                 const xmlChar *name,
                     83:                                                 const xmlChar *ns_uri,
                     84:                                                 xmlXPathFunction f);
1.1       veillard   85: int               xmlXPathRegisterVariable     (xmlXPathContextPtr ctxt,
                     86:                                                 const xmlChar *name,
                     87:                                                 xmlXPathObjectPtr value);
1.3       veillard   88: int               xmlXPathRegisterVariableNS   (xmlXPathContextPtr ctxt,
                     89:                                                 const xmlChar *name,
                     90:                                                 const xmlChar *ns_uri,
                     91:                                                 xmlXPathObjectPtr value);
1.1       veillard   92: xmlXPathFunction   xmlXPathFunctionLookup      (xmlXPathContextPtr ctxt,
                     93:                                                 const xmlChar *name);
1.3       veillard   94: xmlXPathFunction   xmlXPathFunctionLookupNS    (xmlXPathContextPtr ctxt,
                     95:                                                 const xmlChar *name,
                     96:                                                 const xmlChar *ns_uri);
1.1       veillard   97: void              xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt);
                     98: xmlXPathObjectPtr  xmlXPathVariableLookup      (xmlXPathContextPtr ctxt,
                     99:                                                 const xmlChar *name);
1.3       veillard  100: xmlXPathObjectPtr  xmlXPathVariableLookupNS    (xmlXPathContextPtr ctxt,
                    101:                                                 const xmlChar *name,
                    102:                                                 const xmlChar *ns_uri);
1.1       veillard  103: void              xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
                    104: 
                    105: /**
                    106:  * Utilities to extend XPath
                    107:  */
                    108: xmlXPathParserContextPtr
                    109:                  xmlXPathNewParserContext      (const xmlChar *str,
                    110:                                                 xmlXPathContextPtr ctxt);
                    111: void             xmlXPathFreeParserContext     (xmlXPathParserContextPtr ctxt);
                    112: 
                    113: xmlXPathObjectPtr valuePop                     (xmlXPathParserContextPtr ctxt);
                    114: int              valuePush                     (xmlXPathParserContextPtr ctxt,
                    115:                                                xmlXPathObjectPtr value);
                    116: 
                    117: xmlXPathObjectPtr xmlXPathNewString            (const xmlChar *val);
                    118: xmlXPathObjectPtr xmlXPathNewCString           (const char *val);
                    119: xmlXPathObjectPtr xmlXPathNewFloat             (double val);
                    120: xmlXPathObjectPtr xmlXPathNewBoolean           (int val);
                    121: xmlXPathObjectPtr xmlXPathNewNodeSet           (xmlNodePtr val);
                    122: void             xmlXPathNodeSetAdd            (xmlNodeSetPtr cur,
                    123:                                                 xmlNodePtr val);
                    124: 
                    125: 
                    126: void             xmlXPathIdFunction            (xmlXPathParserContextPtr ctxt,
                    127:                                                int nargs);
                    128: void             xmlXPathRoot                  (xmlXPathParserContextPtr ctxt);
                    129: void             xmlXPathEvalExpr              (xmlXPathParserContextPtr ctxt);
                    130: xmlChar *        xmlXPathParseName             (xmlXPathParserContextPtr ctxt);
1.5     ! veillard  131: xmlChar *        xmlXPathParseNCName           (xmlXPathParserContextPtr ctxt);
1.1       veillard  132: 
                    133: /*
                    134:  * Debug
                    135:  */
                    136: #ifdef LIBXML_DEBUG_ENABLED
                    137: double xmlXPathStringEvalNumber(const xmlChar *str);
                    138: void xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth);
                    139: #endif
                    140: /*
                    141:  * Existing functions
                    142:  */
                    143: 
1.4       veillard  144: int xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt, 
                    145:                                     xmlXPathObjectPtr res);
1.1       veillard  146: void xmlXPathInit(void);
                    147: void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    148: void xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt);
                    149: xmlNodeSetPtr xmlXPathNodeSetCreate(xmlNodePtr val);
                    150: void xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val);
                    151: xmlNodeSetPtr xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2);
                    152: void xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val);
                    153: void xmlXPathNodeSetRemove(xmlNodeSetPtr cur, int val);
                    154: void xmlXPathFreeNodeSet(xmlNodeSetPtr obj);
                    155: xmlXPathObjectPtr xmlXPathNewNodeSet(xmlNodePtr val);
                    156: xmlXPathObjectPtr xmlXPathNewNodeSetList(xmlNodeSetPtr val);
                    157: xmlXPathObjectPtr xmlXPathWrapNodeSet(xmlNodeSetPtr val);
                    158: void xmlXPathFreeNodeSetList(xmlXPathObjectPtr obj);
                    159: 
                    160: 
                    161: xmlXPathObjectPtr xmlXPathNewFloat(double val);
                    162: xmlXPathObjectPtr xmlXPathNewBoolean(int val);
                    163: xmlXPathObjectPtr xmlXPathNewString(const xmlChar *val);
                    164: xmlXPathObjectPtr xmlXPathNewCString(const char *val);
                    165: void xmlXPathFreeObject(xmlXPathObjectPtr obj);
                    166: xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc);
                    167: void xmlXPathFreeContext(xmlXPathContextPtr ctxt);
                    168: 
                    169: int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
                    170: int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
                    171: void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
                    172: void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
                    173: void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
                    174: void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
                    175: void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
                    176: void xmlXPathModValues(xmlXPathParserContextPtr ctxt);
                    177: 
                    178: /*
                    179:  * The official core of XPath functions
                    180:  */
                    181: void xmlXPathRoot(xmlXPathParserContextPtr ctxt);
                    182: void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    183: void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    184: void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    185: void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
1.2       veillard  186: void xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    187: void xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
1.1       veillard  188: void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    189: void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    190: void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    191: void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    192: void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    193: void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    194: void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    195: void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    196: void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    197: void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    198: void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    199: void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    200: void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    201: void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    202: void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    203: void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    204: void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    205: void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    206: void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
                    207: #ifdef __cplusplus
                    208: }
                    209: #endif
                    210: #endif /* ! __XML_XPATH_INTERNALS_H__ */

Webmaster