123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496 |
- unit libxml2;
- {$mode objfpc}
- {$macro on}
- {$ALIGN 8}
- {$MINENUMSIZE 4}
- interface
- uses
- ctypes;
- //{$IF Sizeof(cbool) <> Sizeof(cint)}
- // {$ERROR 'cbool size mismatch!'}
- //{$ENDIF}
- {$IFDEF WINDOWS}
- {$DEFINE DYNLINK}
- {$ENDIF}
- {$IFDEF DYNLINK}
- const
- {$IF Defined(WINDOWS)}
- libxml2lib = 'libxml2.dll';
- {$ELSEIF Defined(UNIX)}
- libxml2lib = 'libxml2.so';
- {$ELSE}
- {$MESSAGE ERROR 'DYNLINK not supported'}
- {$IFEND}
- {$ELSE}
- {$LINKLIB xml2}
- {$ENDIF}
- {$i xmlexports.inc}
- {$i xmlversion.inc}
- type
- iconv_t = pointer;
- PFILE = pointer;
- va_list = pointer;
- size_t = {$IF Sizeof(pointer) = 8}qword{$ELSE}longword{$IFEND};
- (*
- include pointers (forwarding)
- *)
- {$DEFINE POINTER}
- {$i catalog.inc}
- {$i chvalid.inc}
- {$i dict.inc}
- {$i encoding.inc}
- {$i tree.inc}
- {$i list.inc}
- {$i entities.inc}
- {$i xmlerror.inc}
- {$i xmlmemory.inc}
- {$i hash.inc}
- {$i pattern.inc}
- {$i schemasInternals.inc}
- {$i valid.inc}
- {$i parser.inc}
- {$i parserInternals.inc}
- {$i schematron.inc}
- {$i threads.inc}
- {$i uri.inc}
- {$i relaxng.inc}
- {$i globals.inc}
- {$i nanoftp.inc}
- {$i nanohttp.inc}
- {$i SAX.inc}
- {$i SAX2.inc}
- {$i HTMLtree.inc}
- {$i HTMLparser.inc}
- {$i xmlautomata.inc}
- {$i xmlIO.inc}
- {$i xmlmodule.inc}
- {$i xmlreader.inc}
- {$i xmlregexp.inc}
- {$i xmlsave.inc}
- {$i xmlschemas.inc}
- {$i xmlschemastypes.inc}
- {$i xmlstring.inc}
- {$i xmlunicode.inc}
- {$i xmlwriter.inc}
- {$i c14n.inc}
- {$i xpath.inc}
- {$i xpathInternals.inc}
- {$i xlink.inc}
- {$i xinclude.inc}
- {$i xpointer.inc}
- {$UNDEF POINTER}
- (*
- include types
- *)
- {$DEFINE TYPE}
- {$i catalog.inc}
- {$i chvalid.inc}
- {$i dict.inc}
- {$i encoding.inc}
- {$i tree.inc}
- {$i list.inc}
- {$i entities.inc}
- {$i xmlerror.inc}
- {$i xmlmemory.inc}
- {$i hash.inc}
- {$i pattern.inc}
- {$i schemasInternals.inc}
- {$i valid.inc}
- {$i parser.inc}
- {$i parserInternals.inc}
- {$i schematron.inc}
- {$i threads.inc}
- {$i uri.inc}
- {$i relaxng.inc}
- {$i globals.inc}
- {$i nanoftp.inc}
- {$i nanohttp.inc}
- {$i SAX.inc}
- {$i SAX2.inc}
- {$i HTMLtree.inc}
- {$i HTMLparser.inc}
- {$i xmlautomata.inc}
- {$i xmlIO.inc}
- {$i xmlmodule.inc}
- {$i xmlreader.inc}
- {$i xmlregexp.inc}
- {$i xmlsave.inc}
- {$i xmlschemas.inc}
- {$i xmlschemastypes.inc}
- {$i xmlstring.inc}
- {$i xmlunicode.inc}
- {$i xmlwriter.inc}
- {$i c14n.inc}
- {$i xpath.inc}
- {$i xpathInternals.inc}
- {$i xlink.inc}
- {$i xinclude.inc}
- {$i xpointer.inc}
- {$UNDEF TYPE}
- (*
- include constants
- *)
- {$DEFINE CONST}
- const
- {$i catalog.inc}
- {$i chvalid.inc}
- {$i dict.inc}
- {$i encoding.inc}
- {$i tree.inc}
- {$i list.inc}
- {$i entities.inc}
- {$i xmlerror.inc}
- {$i xmlmemory.inc}
- {$i pattern.inc}
- {$i schemasInternals.inc}
- {$i hash.inc}
- {$i valid.inc}
- {$i parser.inc}
- {$i parserInternals.inc}
- {$i schematron.inc}
- {$i threads.inc}
- {$i uri.inc}
- {$i relaxng.inc}
- {$i globals.inc}
- {$i nanoftp.inc}
- {$i nanohttp.inc}
- {$i SAX.inc}
- {$i SAX2.inc}
- {$i HTMLtree.inc}
- {$i HTMLparser.inc}
- {$i xmlautomata.inc}
- {$i xmlIO.inc}
- {$i xmlmodule.inc}
- {$i xmlreader.inc}
- {$i xmlregexp.inc}
- {$i xmlsave.inc}
- {$i xmlschemas.inc}
- {$i xmlschemastypes.inc}
- {$i xmlstring.inc}
- {$i xmlunicode.inc}
- {$i xmlwriter.inc}
- {$i c14n.inc}
- {$i xpath.inc}
- {$i xpathInternals.inc}
- {$i xlink.inc}
- {$i xinclude.inc}
- {$i xpointer.inc}
- {$UNDEF CONST}
- (*
- include functions
- *)
- {$DEFINE FUNCTION}
- {$i catalog.inc}
- {$i chvalid.inc}
- {$i dict.inc}
- {$i encoding.inc}
- {$i tree.inc}
- {$i list.inc}
- {$i entities.inc}
- {$i xmlerror.inc}
- {$i xmlmemory.inc}
- {$i pattern.inc}
- {$i schemasInternals.inc}
- {$i hash.inc}
- {$i valid.inc}
- {$i parser.inc}
- {$i parserInternals.inc}
- {$i schematron.inc}
- {$i threads.inc}
- {$i uri.inc}
- {$i relaxng.inc}
- {$i globals.inc}
- {$i nanoftp.inc}
- {$i nanohttp.inc}
- {$i SAX.inc}
- {$i SAX2.inc}
- {$i HTMLtree.inc}
- {$i HTMLparser.inc}
- {$i xmlautomata.inc}
- {$i xmlIO.inc}
- {$i xmlmodule.inc}
- {$i xmlreader.inc}
- {$i xmlregexp.inc}
- {$i xmlsave.inc}
- {$i xmlschemas.inc}
- {$i xmlschemastypes.inc}
- {$i xmlstring.inc}
- {$i xmlunicode.inc}
- {$i xmlwriter.inc}
- {$i c14n.inc}
- {$i xpath.inc}
- {$i xpathInternals.inc}
- {$i xlink.inc}
- {$i xinclude.inc}
- {$i xpointer.inc}
- {$UNDEF FUNCTION}
- implementation
- procedure fpcxmlFree(mem: pointer); XMLCALL;
- begin
- FreeMem(mem);
- end;
- function fpcxmlMalloc(size: size_t): pointer; XMLCALL;
- begin
- GetMem(Result, size);
- end;
- function fpcxmlRealloc(mem: pointer; size: size_t): pointer; XMLCALL;
- begin
- Result := mem;
- ReallocMem(Result, size);
- end;
- procedure fpcxmlGenericErrorHandler(ctx: pointer; msg: pchar; args: array of const); XMLCDECL;
- begin
- writeln(msg);
- end;
- procedure fpcxmlStructuredErrorHandler(userData: pointer; error: xmlErrorPtr); XMLCALL;
- begin
- writeln('struct error');
- end;
- (*
- * macros from xmlversion.inc
- *)
- procedure LIBXML_TEST_VERSION;
- begin
- xmlCheckVersion(LIBXML_VERSION);
- end;
- (*
- * macros from xmlversion.inc
- *)
- function BAD_CAST(str: pchar): xmlCharPtr;
- begin
- result := xmlCharPtr(str);
- end;
- function BAD_CAST(str: string): xmlCharPtr;
- begin
- result := xmlCharPtr(PChar(str));
- end;
- (*
- * macros from chvalid.inc
- *)
- function xmlIsBaseChar_ch(c: cint): cbool;
- begin
- Result :=
- ((c >= $41) and (c <= $5A)) or
- ((c >= $61) and (c <= $7A)) or
- ((c >= $C0) and (c <= $D6)) or
- ((c >= $D8) and (c <= $F6)) or
- (c >= $F8);
- end;
- function xmlIsBaseCharQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsBaseChar_ch(c)
- else
- Result := xmlCharInRange(c, @xmlIsBaseCharGroup);
- end;
- function xmlIsBlank_ch(c: cint): cbool;
- begin
- Result := (c = $20) or ((c >= $9) and (c <= $A)) or (c = $D);
- end;
- function xmlIsBlankQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsBaseChar_ch(c)
- else
- Result := false;
- end;
- function xmlIsChar_ch(c: cint): cbool;
- begin
- Result := ((c >= $9) and (c <= $A)) or (c = $D) or (c >= $20);
- end;
- function xmlIsCharQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsChar_ch(c)
- else
- Result :=
- ((c >= $000100) and (c <= $00D7FF)) or
- ((c >= $00E000) and (c <= $00FFFD)) or
- ((c >= $010000) and (c <= $10FFFF));
- end;
- function xmlIsCombiningQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := false
- else
- Result := xmlCharInRange(c, @xmlIsCombiningGroup);
- end;
- function xmlIsDigit_ch(c: cint): cbool;
- begin
- Result := (c >= $30) and (c <= $39);
- end;
- function xmlIsDigitQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsDigit_ch(c)
- else
- Result := xmlCharInRange(c, @xmlIsDigitGroup);
- end;
- function xmlIsExtender_ch(c: cint): cbool;
- begin
- Result := c = $B7;
- end;
- function xmlIsExtenderQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsExtender_ch(c)
- else
- Result := xmlCharInRange(c, @xmlIsExtenderGroup);
- end;
- function xmlIsIdeographicQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := false
- else
- Result :=
- ((c >= $4E00) and (c <= $9FA5)) or
- (c = $3007) or
- ((c >= $3021) and (c <= $3029));
- end;
- function xmlIsPubidChar_ch(c: cint): cbool;
- begin
- if (c >= 0) and (c <= 255) then
- Result := xmlIsPubidChar_tab[c]
- else
- Result := false;
- end;
- function xmlIsPubidCharQ(c: cint): cbool;
- begin
- if c < $100 then
- Result := xmlIsPubidChar_ch(c)
- else
- Result := false;
- end;
- (*
- * macros from HTMLparser.inc
- *)
- function htmlDefaultSubelement(elt: htmlElemDescPtr): pchar;
- begin
- Result := elt^.defaultsubelt;
- end;
- function htmlElementAllowedHereDesc(parent: htmlElemDescPtr; elt: htmlElemDescPtr): cint;
- begin
- Result := htmlElementAllowedHere(parent, elt^.name);
- end;
- function htmlRequiredAttrs(elt: htmlElemDescPtr): ppchar;
- begin
- Result := elt^.attrs_req;
- end;
- (*
- * macros from tree.inc
- *)
- function XML_GET_CONTENT(n: pointer): xmlCharPtr;
- begin
- if xmlNodePtr(n)^._type = XML_ELEMENT_NODE then
- Result := nil
- else
- Result := xmlNodePtr(n)^.content;
- end;
- (*
- * macros from xpath.inc
- *)
- function xmlXPathNodeSetGetLength(ns: xmlNodeSetPtr): cint;
- begin
- if assigned(ns) then
- Result := ns^.nodeNr
- else
- Result := 0;
- end;
- function xmlXPathNodeSetItem(ns: xmlNodeSetPtr; index: cint): xmlNodePtr;
- begin
- if assigned(ns) and (index >= 0) and (index < ns^.nodeNr) then
- Result := ns^.nodeTab[index]
- else
- Result := nil;
- end;
- function xmlXPathNodeSetIsEmpty(ns: xmlNodeSetPtr): boolean;
- begin
- Result := not assigned(ns) or (ns^.nodeNr = 0) or (ns^.nodeTab = nil);
- end;
- initialization
- (*
- * this initialize the library and check potential ABI mismatches
- * between the version it was compiled for and the actual shared
- * library used.
- *)
- LIBXML_TEST_VERSION;
- (*
- * overloading the memory functions
- *)
- xmlMemSetup(@fpcxmlFree, @fpcxmlMalloc, @fpcxmlRealloc, nil);
- (*
- * overloading the error functions
- *)
- //xmlSetGenericErrorFunc(nil, @fpcxmlGenericErrorHandler);
- //xmlSetStructuredErrorFunc(nil, @fpcxmlStructuredErrorHandler);
- finalization
- (*
- * Cleanup function for the XML library.
- *)
- //xmlCleanupParser();
- (*
- * this is to debug memory for regression tests
- *)
- xmlMemoryDump();
- end.
|