xmlregexp.inc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. (*
  2. * Summary: regular expressions handling
  3. * Description: basic API for libxml regular expressions handling used
  4. * for XML Schemas and validation.
  5. *
  6. * Copy: See Copyright for the status of this software.
  7. *
  8. * Author: Daniel Veillard
  9. *)
  10. {$IFDEF LIBXML_REGEXP_ENABLED}
  11. {$IFDEF POINTER}
  12. xmlExpNodePtr = ^xmlExpNode;
  13. xmlRegexpPtr = ^xmlRegexp;
  14. xmlRegExecCtxtPtr = ^xmlRegExecCtxt;
  15. xmlExpCtxtPtr = ^xmlExpCtxt;
  16. {$ENDIF}
  17. {$IFDEF TYPE}
  18. (**
  19. * xmlRegexpPtr:
  20. *
  21. * A libxml regular expression, they can actually be far more complex
  22. * thank the POSIX regex expressions.
  23. *)
  24. xmlRegexp = record end;
  25. (**
  26. * xmlRegExecCtxtPtr:
  27. *
  28. * A libxml progressive regular expression evaluation context
  29. *)
  30. xmlRegExecCtxt = record end;
  31. (*
  32. * Callback function when doing a transition in the automata
  33. *)
  34. xmlRegExecCallbacks = procedure(exec: xmlRegExecCtxtPtr; token: xmlCharPtr; transdata, inputdata: pointer); EXTDECL;
  35. {$ENDIF}
  36. {$IFDEF FUNCTION}
  37. (*
  38. * The POSIX like API
  39. *)
  40. function xmlRegexpCompile(regexp: xmlCharPtr): xmlRegexpPtr; EXTDECL; external xml2lib;
  41. procedure xmlRegFreeRegexp(regexp: xmlRegexpPtr); EXTDECL; external xml2lib;
  42. function xmlRegexpExec(comp: xmlRegexpPtr; value: xmlCharPtr): cint; EXTDECL; external xml2lib;
  43. procedure xmlRegexpPrint(output: PFILE; regexp: xmlRegexpPtr); EXTDECL; external xml2lib;
  44. function xmlRegexpIsDeterminist(comp: xmlRegexpPtr): cint; EXTDECL; external xml2lib;
  45. (*
  46. * The progressive API
  47. *)
  48. function xmlRegNewExecCtxt(comp: xmlRegexpPtr; callback: xmlRegExecCallbacks; data: pointer): xmlRegExecCtxtPtr; EXTDECL; external xml2lib;
  49. procedure xmlRegFreeExecCtxt(exec: xmlRegExecCtxtPtr); EXTDECL; external xml2lib;
  50. function xmlRegExecPushString(exec: xmlRegExecCtxtPtr; value: xmlCharPtr; data: pointer): cint; EXTDECL; external xml2lib;
  51. function xmlRegExecPushString2(exec: xmlRegExecCtxtPtr; value, value2: xmlCharPtr; data: pointer): cint; EXTDECL; external xml2lib;
  52. function xmlRegExecNextValues(exec: xmlRegExecCtxtPtr; nbval, nbneg: pcint; values: xmlCharPtrPtr; terminal: pcint): cint; EXTDECL; external xml2lib;
  53. function xmlRegExecErrInfo(exec: xmlRegExecCtxtPtr; _string: xmlCharPtrPtr; nbval, nbneg: pcint; values: xmlCharPtrPtr; terminal: pcint): cint; EXTDECL; external xml2lib;
  54. {$ENDIF}
  55. {$IFDEF LIBXML_EXPR_ENABLED}
  56. (*
  57. * Formal regular expression handling
  58. * Its goal is to do some formal work on content models
  59. *)
  60. {$IFDEF TYPE}
  61. (* expressions are used within a context *)
  62. xmlExpCtxt = record end;
  63. (* Expressions are trees but the tree is opaque *)
  64. xmlExpNode = record end;
  65. xmlExpNodeType = (
  66. XML_EXP_EMPTY = 0,
  67. XML_EXP_FORBID = 1,
  68. XML_EXP_ATOM = 2,
  69. XML_EXP_SEQ = 3,
  70. XML_EXP_OR = 4,
  71. XML_EXP_COUNT = 5
  72. );
  73. {$ENDIF}
  74. {$IFDEF FUNCTION}
  75. procedure xmlRegFreeExecCtxt(ctxt: xmlExpCtxtPtr); EXTDECL; external xml2lib;
  76. function xmlExpNewCtxt(maxNodes: cint; dict: xmlDictPtr): xmlExpCtxtPtr; EXTDECL; external xml2lib;
  77. function xmlExpCtxtNbNodes(ctxt: xmlExpCtxtPtr): cint; EXTDECL; external xml2lib;
  78. function xmlExpCtxtNbCons(ctxt: xmlExpCtxtPtr): cint; EXTDECL; external xml2lib;
  79. (*
  80. * 2 core expressions shared by all for the empty language set
  81. * and for the set with just the empty token
  82. *)
  83. {$IFNDEF NO_EXTERNAL_VARS}
  84. var
  85. forbiddenExp: xmlExpNodePtr; cvar; external;
  86. emptyExp: xmlExpNodePtr; cvar; external;
  87. {$ENDIF}
  88. (*
  89. * Expressions are reference counted internally
  90. *)
  91. procedure xmlExpFree(ctxt: xmlExpCtxtPtr; expr: xmlExpNodePtr); EXTDECL; external xml2lib;
  92. procedure xmlExpRef(expr: xmlExpNodePtr); EXTDECL; external xml2lib;
  93. (*
  94. * constructors can be either manual or from a string
  95. *)
  96. function xmlExpParse(ctxt: xmlExpCtxtPtr; expr: PAnsiChar): xmlExpNodePtr; EXTDECL; external xml2lib;
  97. function xmlExpNewAtom(ctxt: xmlExpCtxtPtr; name: xmlCharPtr; len: cint): xmlExpNodePtr; EXTDECL; external xml2lib;
  98. function xmlExpNewOr(ctxt: xmlExpCtxtPtr; left, right: xmlExpNodePtr): xmlExpNodePtr; EXTDECL; external xml2lib;
  99. function xmlExpNewSeq(ctxt: xmlExpCtxtPtr; left, right: xmlExpNodePtr): xmlExpNodePtr; EXTDECL; external xml2lib;
  100. function xmlExpNewRange(ctxt: xmlExpCtxtPtr; subset: xmlExpNodePtr; min, max: cint): xmlExpNodePtr; EXTDECL; external xml2lib;
  101. (*
  102. * The really interesting APIs
  103. *)
  104. function xmlExpIsNillable(expr: xmlExpNodePtr): cint; EXTDECL; external xml2lib;
  105. function xmlExpMaxToken(expr: xmlExpNodePtr): cint; EXTDECL; external xml2lib;
  106. function xmlExpGetLanguage(ctxt: xmlExpCtxtPtr; expr: xmlExpNodePtr; langList: xmlCharPtrPtr; len: cint): cint; EXTDECL; external xml2lib;
  107. function xmlExpGetStart(ctxt: xmlExpCtxtPtr; expr: xmlExpNodePtr; tokList: xmlCharPtrPtr; len: cint): cint; EXTDECL; external xml2lib;
  108. function xmlExpStringDerive(ctxt: xmlExpCtxtPtr; expr: xmlExpNodePtr; str: xmlCharPtr; len: cint): xmlExpNodePtr; EXTDECL; external xml2lib;
  109. function xmlExpExpDerive(ctxt: xmlExpCtxtPtr; expr, sub: xmlExpNodePtr): xmlExpNodePtr; EXTDECL; external xml2lib;
  110. function xmlExpSubsume(ctxt: xmlExpCtxtPtr; expr, sub: xmlExpNodePtr): cint; EXTDECL; external xml2lib;
  111. procedure xmlExpDump(buf: xmlBufferPtr; expr: xmlExpNodePtr); EXTDECL; external xml2lib;
  112. {$ENDIF}
  113. {$ENDIF} (* LIBXML_EXPR_ENABLED *)
  114. {$ENDIF} (* LIBXML_REGEXP_ENABLED *)