Repository URL to install this package:
Version:
3.0.0 ▾
|
{
Translation of the libxml2 headers for FreePascal
Copyright (C) 2008 by Ivo Steinmann
}
unit xml2;
{$mode objfpc}
{$H+}
{$macro on}
{$ALIGN 8}
{$MINENUMSIZE 4}
interface
uses
dynlibs,
ctypes;
const
{$IF Defined(WINDOWS)}
xml2lib = 'libxml2.'+sharedsuffix;
{$DEFINE EXTDECL := cdecl}
{$DEFINE NO_EXTERNAL_VARS}
{$ELSEIF Defined(UNIX)}
xml2lib = 'libxml2.'+sharedsuffix;
{$DEFINE EXTDECL := cdecl}
{$ELSE}
{$MESSAGE ERROR 'Platform not supported right now'}
{$IFEND}
{$i xml2.inc}
implementation
procedure fpcxmlFree(mem: pointer); EXTDECL;
begin
FreeMem(mem);
end;
function fpcxmlMalloc(size: csize_t): pointer; EXTDECL;
begin
GetMem(Result, size);
end;
function fpcxmlRealloc(mem: pointer; size: csize_t): pointer; EXTDECL;
begin
Result := mem;
ReallocMem(Result, size);
end;
procedure fpcxmlStructuredErrorHandler(userData: pointer; error: xmlErrorPtr); EXTDECL;
begin
writeln('struct error');
end;
(*
* macros from xmlversion.inc
*)
procedure LIBXML_TEST_VERSION;
begin
xmlCheckVersion(LIBXML_VERSION);
end;
(*
* macros from xmlversion.inc
*)
(*
* 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, xmlCharPtr(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;
{$IFDEF NO_EXTERNAL_VARS}
procedure LoadExternalVariables;
var
libHandle: THandle;
begin
libHandle := LoadLibrary(xml2lib);
if libHandle <> 0 then
begin
{ xmlregexp.inc }
{__emptyExp := xmlExpNodePtrPtr(GetProcAddress(libHandle, 'emptyExp'));
__forbiddenExp := xmlExpNodePtrPtr(GetProcAddress(libHandle, 'forbiddenExp'));}
{ paserInternals.inc }
//__xmlParserMaxDepth := PCardinal(GetProcAddress(libHandle, 'xmlParserMaxDepth'));
{ }
{xmlStringComment := PChar(GetProcAddress(libHandle, 'xmlStringComment'));
xmlStringText := PChar(GetProcAddress(libHandle, 'xmlStringText'));
xmlStringTextNoenc := PChar(GetProcAddress(libHandle, 'xmlStringTextNoenc'));}
{ chvalid.inc }
__xmlIsBaseCharGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsBaseCharGroup'));
__xmlIsCharGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsCharGroup'));
__xmlIsCombiningGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsCombiningGroup'));
__xmlIsDigitGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsDigitGroup'));
__xmlIsExtenderGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsExtenderGroup'));
__xmlIsIdeographicGroup := xmlChRangeGroupPtr(GetProcAddress(libHandle, 'xmlIsIdeographicGroup'));
__xmlIsPubidChar_tab := GetProcAddress(libHandle, 'xmlIsPubidChar_tab');
{ globals.inc }
xmlMalloc := xmlMallocFunc(GetProcAddress(libHandle, 'xmlMalloc'));
xmlMallocAtomic := xmlMallocFunc(GetProcAddress(libHandle, 'xmlMallocAtomic'));
xmlRealloc := xmlReallocFunc(GetProcAddress(libHandle, 'xmlRealloc'));
xmlFree := xmlFreeFunc(GetProcAddress(libHandle, 'xmlFree'));
xmlMemStrdup := xmlStrdupFunc(GetProcAddress(libHandle, 'xmlMemStrdup'));
{ xpath.inc }
{__xmlXPathNAN := PDouble(GetProcAddress(libHandle, 'xmlXPathNAN'));
__xmlXPathNINF := PDouble(GetProcAddress(libHandle, 'xmlXPathNINF'));
__xmlXPathPINF := PDouble(GetProcAddress(libHandle, 'xmlXPathPINF'));}
FreeLibrary(libHandle);
end;
end;
{$ENDIF}
initialization
{$IFDEF NO_EXTERNAL_VARS}
LoadExternalVariables;
{$ENDIF}
(*
* 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.