12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145 |
- {**************************************************************************************************}
- { }
- { Project JEDI Code Library (JCL) }
- { }
- { The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); }
- { you may not use this file except in compliance with the License. You may obtain a copy of the }
- { License at http://www.mozilla.org/MPL/ }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF }
- { ANY KIND, either express or implied. See the License for the specific language governing rights }
- { and limitations under the License. }
- { }
- { The Original Code is pcre.pas. }
- { }
- { The Initial Developer of the Original Code is Peter Thornqvist. }
- { Portions created by Peter Thornqvist are Copyright (C) of Peter Thornqvist. All rights reserved. }
- { Portions created by University of Cambridge are }
- { Copyright (C) 1997-2001 by University of Cambridge. }
- { }
- { Contributor(s): }
- { Robert Rossmair (rrossmair) }
- { Mario R. Carro }
- { Florent Ouchet (outchy) }
- { }
- { The latest release of PCRE is always available from }
- { ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz }
- { }
- { Modified by Jan Goyvaerts for use with TPerlRegEx }
- { TPerlRegEx is available at http://www.regular-expressions.info/delphi.html }
- { }
- {**************************************************************************************************}
- { }
- { Header conversion of pcre.h }
- { }
- {**************************************************************************************************}
- unit pcre;
- interface
- (*************************************************
- * Perl-Compatible Regular Expressions *
- *************************************************)
- {$WEAKPACKAGEUNIT ON}
- // Define PCRE_STATICLINK to link the OBJ files with PCRE 7.9.
- {$DEFINE PCRE_STATICLINK}
- // Define PCRE_LINKDLL to use pcrelib.dll
- {.$DEFINE PCRE_LINKDLL}
- // The supplied pcrelib.dll compiled PCRE 7.9 using the C calling convention
- {$IFDEF PCRE_LINKDLL}
- {$DEFINE PCRE_EXPORT_CDECL}
- {$ENDIF}
- (*$HPPEMIT '#include "pcre.h"'*)
- const
- MAX_PATTERN_LENGTH = $10003;
- {$EXTERNALSYM MAX_PATTERN_LENGTH}
- MAX_QUANTIFY_REPEAT = $10000;
- {$EXTERNALSYM MAX_QUANTIFY_REPEAT}
- MAX_CAPTURE_COUNT = $FFFF;
- {$EXTERNALSYM MAX_CAPTURE_COUNT}
- MAX_NESTING_DEPTH = 200;
- {$EXTERNALSYM MAX_NESTING_DEPTH}
- const
- (* Options *)
- PCRE_CASELESS = $00000001;
- {$EXTERNALSYM PCRE_CASELESS}
- PCRE_MULTILINE = $00000002;
- {$EXTERNALSYM PCRE_MULTILINE}
- PCRE_DOTALL = $00000004;
- {$EXTERNALSYM PCRE_DOTALL}
- PCRE_EXTENDED = $00000008;
- {$EXTERNALSYM PCRE_EXTENDED}
- PCRE_ANCHORED = $00000010;
- {$EXTERNALSYM PCRE_ANCHORED}
- PCRE_DOLLAR_ENDONLY = $00000020;
- {$EXTERNALSYM PCRE_DOLLAR_ENDONLY}
- PCRE_EXTRA = $00000040;
- {$EXTERNALSYM PCRE_EXTRA}
- PCRE_NOTBOL = $00000080;
- {$EXTERNALSYM PCRE_NOTBOL}
- PCRE_NOTEOL = $00000100;
- {$EXTERNALSYM PCRE_NOTEOL}
- PCRE_UNGREEDY = $00000200;
- {$EXTERNALSYM PCRE_UNGREEDY}
- PCRE_NOTEMPTY = $00000400;
- {$EXTERNALSYM PCRE_NOTEMPTY}
- PCRE_UTF8 = $00000800;
- {$EXTERNALSYM PCRE_UTF8}
- PCRE_NO_AUTO_CAPTURE = $00001000;
- {$EXTERNALSYM PCRE_NO_AUTO_CAPTURE}
- PCRE_NO_UTF8_CHECK = $00002000;
- {$EXTERNALSYM PCRE_NO_UTF8_CHECK}
- PCRE_AUTO_CALLOUT = $00004000;
- {$EXTERNALSYM PCRE_AUTO_CALLOUT}
- PCRE_PARTIAL = $00008000;
- {$EXTERNALSYM PCRE_PARTIAL}
- PCRE_DFA_SHORTEST = $00010000;
- {$EXTERNALSYM PCRE_DFA_SHORTEST}
- PCRE_DFA_RESTART = $00020000;
- {$EXTERNALSYM PCRE_DFA_RESTART}
- PCRE_FIRSTLINE = $00040000;
- {$EXTERNALSYM PCRE_FIRSTLINE}
- PCRE_DUPNAMES = $00080000;
- {$EXTERNALSYM PCRE_DUPNAMES}
- PCRE_NEWLINE_CR = $00100000;
- {$EXTERNALSYM PCRE_NEWLINE_CR}
- PCRE_NEWLINE_LF = $00200000;
- {$EXTERNALSYM PCRE_NEWLINE_LF}
- PCRE_NEWLINE_CRLF = $00300000;
- {$EXTERNALSYM PCRE_NEWLINE_CRLF}
- PCRE_NEWLINE_ANY = $00400000;
- {$EXTERNALSYM PCRE_NEWLINE_ANY}
- PCRE_NEWLINE_ANYCRLF = $00500000;
- {$EXTERNALSYM PCRE_NEWLINE_ANYCRLF}
- PCRE_BSR_ANYCRLF = $00800000;
- {$EXTERNALSYM PCRE_BSR_ANYCRLF}
- PCRE_BSR_UNICODE = $01000000;
- {$EXTERNALSYM PCRE_BSR_UNICODE}
- PCRE_JAVASCRIPT_COMPAT = $02000000;
- {$EXTERNALSYM PCRE_JAVASCRIPT_COMPAT}
- PCRE_NO_START_OPTIMIZE = $04000000;
- {$EXTERNALSYM PCRE_NO_START_OPTIMIZE}
- PCRE_NO_START_OPTIMISE = $04000000;
- {$EXTERNALSYM PCRE_NO_START_OPTIMISE}
- (* Exec-time and get-time error codes *)
- PCRE_ERROR_NOMATCH = -1;
- {$EXTERNALSYM PCRE_ERROR_NOMATCH}
- PCRE_ERROR_NULL = -2;
- {$EXTERNALSYM PCRE_ERROR_NULL}
- PCRE_ERROR_BADOPTION = -3;
- {$EXTERNALSYM PCRE_ERROR_BADOPTION}
- PCRE_ERROR_BADMAGIC = -4;
- {$EXTERNALSYM PCRE_ERROR_BADMAGIC}
- PCRE_ERROR_UNKNOWN_NODE = -5;
- {$EXTERNALSYM PCRE_ERROR_UNKNOWN_NODE}
- PCRE_ERROR_NOMEMORY = -6;
- {$EXTERNALSYM PCRE_ERROR_NOMEMORY}
- PCRE_ERROR_NOSUBSTRING = -7;
- {$EXTERNALSYM PCRE_ERROR_NOSUBSTRING}
- PCRE_ERROR_MATCHLIMIT = -8;
- {$EXTERNALSYM PCRE_ERROR_MATCHLIMIT}
- PCRE_ERROR_CALLOUT = -9; (* Never used by PCRE itself *)
- {$EXTERNALSYM PCRE_ERROR_CALLOUT}
- PCRE_ERROR_BADUTF8 = -10;
- {$EXTERNALSYM PCRE_ERROR_BADUTF8}
- PCRE_ERROR_BADUTF8_OFFSET = -11;
- {$EXTERNALSYM PCRE_ERROR_BADUTF8_OFFSET}
- PCRE_ERROR_PARTIAL = -12;
- {$EXTERNALSYM PCRE_ERROR_PARTIAL}
- PCRE_ERROR_BADPARTIAL = -13;
- {$EXTERNALSYM PCRE_ERROR_BADPARTIAL}
- PCRE_ERROR_INTERNAL = -14;
- {$EXTERNALSYM PCRE_ERROR_INTERNAL}
- PCRE_ERROR_BADCOUNT = -15;
- {$EXTERNALSYM PCRE_ERROR_BADCOUNT}
- PCRE_ERROR_DFA_UITEM = -16;
- {$EXTERNALSYM PCRE_ERROR_DFA_UITEM}
- PCRE_ERROR_DFA_UCOND = -17;
- {$EXTERNALSYM PCRE_ERROR_DFA_UCOND}
- PCRE_ERROR_DFA_UMLIMIT = -18;
- {$EXTERNALSYM PCRE_ERROR_DFA_UMLIMIT}
- PCRE_ERROR_DFA_WSSIZE = -19;
- {$EXTERNALSYM PCRE_ERROR_DFA_WSSIZE}
- PCRE_ERROR_DFA_RECURSE = -20;
- {$EXTERNALSYM PCRE_ERROR_DFA_RECURSE}
- PCRE_ERROR_RECURSIONLIMIT = -21;
- {$EXTERNALSYM PCRE_ERROR_RECURSIONLIMIT}
- PCRE_ERROR_NULLWSLIMIT = -22; (* No longer actually used *)
- {$EXTERNALSYM PCRE_ERROR_NULLWSLIMIT}
- PCRE_ERROR_BADNEWLINE = -23;
- {$EXTERNALSYM PCRE_ERROR_BADNEWLINE}
- (* Request types for pcre_fullinfo() *)
- PCRE_INFO_OPTIONS = 0;
- {$EXTERNALSYM PCRE_INFO_OPTIONS}
- PCRE_INFO_SIZE = 1;
- {$EXTERNALSYM PCRE_INFO_SIZE}
- PCRE_INFO_CAPTURECOUNT = 2;
- {$EXTERNALSYM PCRE_INFO_CAPTURECOUNT}
- PCRE_INFO_BACKREFMAX = 3;
- {$EXTERNALSYM PCRE_INFO_BACKREFMAX}
- PCRE_INFO_FIRSTCHAR = 4;
- {$EXTERNALSYM PCRE_INFO_FIRSTCHAR}
- PCRE_INFO_FIRSTTABLE = 5;
- {$EXTERNALSYM PCRE_INFO_FIRSTTABLE}
- PCRE_INFO_LASTLITERAL = 6;
- {$EXTERNALSYM PCRE_INFO_LASTLITERAL}
- PCRE_INFO_NAMEENTRYSIZE = 7;
- {$EXTERNALSYM PCRE_INFO_NAMEENTRYSIZE}
- PCRE_INFO_NAMECOUNT = 8;
- {$EXTERNALSYM PCRE_INFO_NAMECOUNT}
- PCRE_INFO_NAMETABLE = 9;
- {$EXTERNALSYM PCRE_INFO_NAMETABLE}
- PCRE_INFO_STUDYSIZE = 10;
- {$EXTERNALSYM PCRE_INFO_STUDYSIZE}
- PCRE_INFO_DEFAULT_TABLES = 11;
- {$EXTERNALSYM PCRE_INFO_DEFAULT_TABLES}
- PCRE_INFO_OKPARTIAL = 12;
- {$EXTERNALSYM PCRE_INFO_OKPARTIAL}
- PCRE_INFO_JCHANGED = 13;
- {$EXTERNALSYM PCRE_INFO_JCHANGED}
- PCRE_INFO_HASCRORLF = 14;
- {$EXTERNALSYM PCRE_INFO_HASCRORLF}
- (* Request types for pcre_config() *)
- PCRE_CONFIG_UTF8 = 0;
- {$EXTERNALSYM PCRE_CONFIG_UTF8}
- PCRE_CONFIG_NEWLINE = 1;
- {$EXTERNALSYM PCRE_CONFIG_NEWLINE}
- PCRE_CONFIG_LINK_SIZE = 2;
- {$EXTERNALSYM PCRE_CONFIG_LINK_SIZE}
- PCRE_CONFIG_POSIX_MALLOC_THRESHOLD = 3;
- {$EXTERNALSYM PCRE_CONFIG_POSIX_MALLOC_THRESHOLD}
- PCRE_CONFIG_MATCH_LIMIT = 4;
- {$EXTERNALSYM PCRE_CONFIG_MATCH_LIMIT}
- PCRE_CONFIG_STACKRECURSE = 5;
- {$EXTERNALSYM PCRE_CONFIG_STACKRECURSE}
- PCRE_CONFIG_UNICODE_PROPERTIES = 6;
- {$EXTERNALSYM PCRE_CONFIG_UNICODE_PROPERTIES}
- PCRE_CONFIG_MATCH_LIMIT_RECURSION = 7;
- {$EXTERNALSYM PCRE_CONFIG_MATCH_LIMIT_RECURSION}
- PCRE_CONFIG_BSR = 8;
- {$EXTERNALSYM PCRE_CONFIG_BSR}
- (* Bit flags for the pcre_extra structure *)
- PCRE_EXTRA_STUDY_DATA = $0001;
- {$EXTERNALSYM PCRE_EXTRA_STUDY_DATA}
- PCRE_EXTRA_MATCH_LIMIT = $0002;
- {$EXTERNALSYM PCRE_EXTRA_MATCH_LIMIT}
- PCRE_EXTRA_CALLOUT_DATA = $0004;
- {$EXTERNALSYM PCRE_EXTRA_CALLOUT_DATA}
- PCRE_EXTRA_TABLES = $0008;
- {$EXTERNALSYM PCRE_EXTRA_TABLES}
- PCRE_EXTRA_MATCH_LIMIT_RECURSION = $0010;
- {$EXTERNALSYM PCRE_EXTRA_MATCH_LIMIT_RECURSION}
- type
- (* Types *)
- PPAnsiChar = ^PAnsiChar;
- {$EXTERNALSYM PPAnsiChar}
- PPPAnsiChar = ^PPAnsiChar;
- {$EXTERNALSYM PPPAnsiChar}
- PInteger = ^Integer;
- {$EXTERNALSYM PInteger}
- real_pcre = packed record
- {magic_number: Longword;
- size: Integer;
- tables: PAnsiChar;
- options: Longword;
- top_bracket: Word;
- top_backref: word;
- first_char: PAnsiChar;
- req_char: PAnsiChar;
- code: array [0..0] of AnsiChar;}
- end;
- TPCRE = real_pcre;
- PPCRE = ^TPCRE;
- real_pcre_extra = packed record
- {options: PAnsiChar;
- start_bits: array [0..31] of AnsiChar;}
- flags: Cardinal; (* Bits for which fields are set *)
- study_data: Pointer; (* Opaque data from pcre_study() *)
- match_limit: Cardinal; (* Maximum number of calls to match() *)
- callout_data: Pointer; (* Data passed back in callouts *)
- tables: PAnsiChar; (* Pointer to character tables *)
- match_limit_recursion: Cardinal; (* Max recursive calls to match() *)
- end;
- TPCREExtra = real_pcre_extra;
- PPCREExtra = ^TPCREExtra;
- pcre_callout_block = packed record
- version: Integer; (* Identifies version of block *)
- (* ------------------------ Version 0 ------------------------------- *)
- callout_number: Integer; (* Number compiled into pattern *)
- offset_vector: PInteger; (* The offset vector *)
- subject: PAnsiChar; (* The subject being matched *)
- subject_length: Integer; (* The length of the subject *)
- start_match: Integer; (* Offset to start of this match attempt *)
- current_position: Integer; (* Where we currently are in the subject *)
- capture_top: Integer; (* Max current capture *)
- capture_last: Integer; (* Most recently closed capture *)
- callout_data: Pointer; (* Data passed in with the call *)
- (* ------------------- Added for Version 1 -------------------------- *)
- pattern_position: Integer; (* Offset to next item in the pattern *)
- next_item_length: Integer; (* Length of next item in the pattern *)
- (* ------------------------------------------------------------------ *)
- end;
- pcre_malloc_callback = function(Size: Integer): Pointer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_malloc_callback}
- pcre_free_callback = procedure(P: Pointer); {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_free_callback}
- pcre_stack_malloc_callback = function(Size: Integer): Pointer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_stack_malloc_callback}
- pcre_stack_free_callback = procedure(P: Pointer); {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_stack_free_callback}
- pcre_callout_callback = function(var callout_block: pcre_callout_block): Integer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_callout_callback}
- var
- // renamed from "pcre_X" to "pcre_X_func" to allow functions with name "pcre_X" to be
- // declared in implementation when static linked
- pcre_malloc_func: ^pcre_malloc_callback = nil;
- {$EXTERNALSYM pcre_malloc_func}
- pcre_free_func: ^pcre_free_callback = nil;
- {$EXTERNALSYM pcre_free_func}
- pcre_stack_malloc_func: ^pcre_stack_malloc_callback = nil;
- {$EXTERNALSYM pcre_stack_malloc_func}
- pcre_stack_free_func: ^pcre_stack_free_callback = nil;
- {$EXTERNALSYM pcre_stack_free_func}
- pcre_callout_func: ^pcre_callout_callback = nil;
- {$EXTERNALSYM pcre_callout_func}
- procedure SetPCREMallocCallback(const Value: pcre_malloc_callback);
- {$EXTERNALSYM SetPCREMallocCallback}
- function GetPCREMallocCallback: pcre_malloc_callback;
- {$EXTERNALSYM GetPCREMallocCallback}
- function CallPCREMalloc(Size: Integer): Pointer;
- {$EXTERNALSYM CallPCREMalloc}
- procedure SetPCREFreeCallback(const Value: pcre_free_callback);
- {$EXTERNALSYM SetPCREFreeCallback}
- function GetPCREFreeCallback: pcre_free_callback;
- {$EXTERNALSYM GetPCREFreeCallback}
- procedure CallPCREFree(P: Pointer);
- {$EXTERNALSYM CallPCREFree}
- procedure SetPCREStackMallocCallback(const Value: pcre_stack_malloc_callback);
- {$EXTERNALSYM SetPCREStackMallocCallback}
- function GetPCREStackMallocCallback: pcre_stack_malloc_callback;
- {$EXTERNALSYM GetPCREStackMallocCallback}
- function CallPCREStackMalloc(Size: Integer): Pointer;
- {$EXTERNALSYM CallPCREStackMalloc}
- procedure SetPCREStackFreeCallback(const Value: pcre_stack_free_callback);
- {$EXTERNALSYM SetPCREStackFreeCallback}
- function GetPCREStackFreeCallback: pcre_stack_free_callback;
- {$EXTERNALSYM GetPCREStackFreeCallback}
- procedure CallPCREStackFree(P: Pointer);
- {$EXTERNALSYM CallPCREStackFree}
- procedure SetPCRECalloutCallback(const Value: pcre_callout_callback);
- {$EXTERNALSYM SetPCRECalloutCallback}
- function GetPCRECalloutCallback: pcre_callout_callback;
- {$EXTERNALSYM GetPCRECalloutCallback}
- function CallPCRECallout(var callout_block: pcre_callout_block): Integer;
- {$EXTERNALSYM CallPCRECallout}
- type
- TPCRELibNotLoadedHandler = procedure; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- var
- // Value to initialize function pointers below with, in case LoadPCRE fails
- // or UnloadPCRE is called. Typically the handler will raise an exception.
- LibNotLoadedHandler: TPCRELibNotLoadedHandler = nil;
- (* Functions *)
- {$IFNDEF PCRE_LINKONREQUEST}
- // static link and static dll import
- function pcre_compile(const pattern: PAnsiChar; options: Integer;
- const errptr: PPAnsiChar; erroffset: PInteger; const tableptr: PAnsiChar): PPCRE;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_compile}
- function pcre_compile2(const pattern: PAnsiChar; options: Integer;
- const errorcodeptr: PInteger; const errorptr: PPAnsiChar; erroroffset: PInteger;
- const tables: PAnsiChar): PPCRE;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_compile2}
- function pcre_config(what: Integer; where: Pointer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_config}
- function pcre_copy_named_substring(const code: PPCRE; const subject: PAnsiChar;
- ovector: PInteger; stringcount: Integer; const stringname: PAnsiChar;
- buffer: PAnsiChar; size: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_copy_named_substring}
- function pcre_copy_substring(const subject: PAnsiChar; ovector: PInteger;
- stringcount, stringnumber: Integer; buffer: PAnsiChar; buffersize: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_copy_substring}
- function pcre_dfa_exec(const argument_re: PPCRE; const extra_data: PPCREExtra;
- const subject: PAnsiChar; length: Integer; start_offset: Integer;
- options: Integer; offsets: PInteger; offsetcount: Integer; workspace: PInteger;
- wscount: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_dfa_exec}
- function pcre_exec(const code: PPCRE; const extra: PPCREExtra; const subject: PAnsiChar;
- length, startoffset, options: Integer; ovector: PInteger; ovecsize: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_exec}
- procedure pcre_free_substring(stringptr: PAnsiChar);
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_free_substring}
- procedure pcre_free_substring_list(stringlistptr: PPAnsiChar);
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_free_substring_list}
- function pcre_fullinfo(const code: PPCRE; const extra: PPCREExtra;
- what: Integer; where: Pointer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_fullinfo}
- function pcre_get_named_substring(const code: PPCRE; const subject: PAnsiChar;
- ovector: PInteger; stringcount: Integer; const stringname: PAnsiChar;
- const stringptr: PPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_named_substring}
- function pcre_get_stringnumber(const code: PPCRE; const stringname: PAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_stringnumber}
- function pcre_get_stringtable_entries(const code: PPCRE; const stringname: PAnsiChar;
- firstptr: PPAnsiChar; lastptr: PPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_stringtable_entries}
- function pcre_get_substring(const subject: PAnsiChar; ovector: PInteger;
- stringcount, stringnumber: Integer; const stringptr: PPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_substring}
- function pcre_get_substring_list(const subject: PAnsiChar; ovector: PInteger;
- stringcount: Integer; listptr: PPPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_substring_list}
- function pcre_info(const code: PPCRE; optptr, firstcharptr: PInteger): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_info}
- function pcre_maketables: PAnsiChar;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_maketables}
- function pcre_refcount(argument_re: PPCRE; adjust: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_refcount}
- function pcre_study(const code: PPCRE; options: Integer; const errptr: PPAnsiChar): PPCREExtra;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_study}
- function pcre_version: PAnsiChar; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_version}
- // Calling pcre_free in the DLL causes an access violation error; use pcre_dispose instead
- procedure pcre_dispose(pattern, hints, chartable: Pointer); {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$ELSE}
- // dynamic dll import
- type
- pcre_compile_func = function(const pattern: PAnsiChar; options: Integer;
- const errptr: PPAnsiChar; erroffset: PInteger; const tableptr: PAnsiChar): PPCRE;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_compile_func}
- pcre_compile2_func = function(const pattern: PAnsiChar; options: Integer;
- const errorcodeptr: PInteger; const errorptr: PPAnsiChar; erroroffset: PInteger;
- const tables: PAnsiChar): PPCRE; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_compile2_func}
- pcre_config_func = function(what: Integer; where: Pointer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_config_func}
- pcre_copy_named_substring_func = function(const code: PPCRE; const subject: PAnsiChar;
- ovector: PInteger; stringcount: Integer; const stringname: PAnsiChar;
- buffer: PAnsiChar; size: Integer): Integer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_copy_named_substring_func}
- pcre_copy_substring_func = function(const subject: PAnsiChar; ovector: PInteger;
- stringcount, stringnumber: Integer; buffer: PAnsiChar; buffersize: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_copy_substring_func}
- pcre_dfa_exec_func = function(const argument_re: PPCRE; const extra_data: PPCREExtra;
- const subject: PAnsiChar; length: Integer; start_offset: Integer;
- options: Integer; offsets: PInteger; offsetcount: Integer; workspace: PInteger;
- wscount: Integer): Integer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_dfa_exec_func}
- pcre_exec_func = function(const code: PPCRE; const extra: PPCREExtra; const subject: PAnsiChar;
- length, startoffset, options: Integer; ovector: PInteger; ovecsize: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_exec_func}
- pcre_free_substring_func = procedure(stringptr: PAnsiChar);
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_free_substring_func}
- pcre_free_substring_list_func = procedure(stringptr: PPAnsiChar);
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_free_substring_list_func}
- pcre_fullinfo_func = function(const code: PPCRE; const extra: PPCREExtra;
- what: Integer; where: Pointer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_fullinfo_func}
- pcre_get_named_substring_func = function(const code: PPCRE; const subject: PAnsiChar;
- ovector: PInteger; stringcount: Integer; const stringname: PAnsiChar;
- const stringptr: PPAnsiChar): Integer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_named_substring_func}
- pcre_get_stringnumber_func = function(const code: PPCRE;
- const stringname: PAnsiChar): Integer; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_stringnumber_func}
- pcre_get_stringtable_entries_func = function(const code: PPCRE; const stringname: PAnsiChar;
- firstptr: PPAnsiChar; lastptr: PPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_stringtable_entries_func}
- pcre_get_substring_func = function(const subject: PAnsiChar; ovector: PInteger;
- stringcount, stringnumber: Integer; const stringptr: PPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_substring_func}
- pcre_get_substring_list_func = function(const subject: PAnsiChar; ovector: PInteger;
- stringcount: Integer; listptr: PPPAnsiChar): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_get_substring_list_func}
- pcre_info_func = function(const code: PPCRE; optptr, firstcharptr: PInteger): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_info_func}
- pcre_maketables_func = function: PAnsiChar; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_maketables_func}
- pcre_refcount_func = function(argument_re: PPCRE; adjust: Integer): Integer;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_refcount_func}
- pcre_study_func = function(const code: PPCRE; options: Integer; const errptr: PPAnsiChar): PPCREExtra;
- {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_study_func}
- pcre_version_func = function: PAnsiChar; {$IFDEF PCRE_EXPORT_CDECL} cdecl; {$ENDIF PCRE_EXPORT_CDECL}
- {$EXTERNALSYM pcre_version_func}
- var
- pcre_compile: pcre_compile_func = nil;
- {$EXTERNALSYM pcre_compile}
- pcre_compile2: pcre_compile2_func = nil;
- {$EXTERNALSYM pcre_compile2}
- pcre_config: pcre_config_func = nil;
- {$EXTERNALSYM pcre_config}
- pcre_copy_named_substring: pcre_copy_named_substring_func = nil;
- {$EXTERNALSYM pcre_copy_named_substring}
- pcre_copy_substring: pcre_copy_substring_func = nil;
- {$EXTERNALSYM pcre_copy_substring}
- pcre_dfa_exec: pcre_dfa_exec_func = nil;
- {$EXTERNALSYM pcre_dfa_exec}
- pcre_exec: pcre_exec_func = nil;
- {$EXTERNALSYM pcre_exec}
- pcre_free_substring: pcre_free_substring_func = nil;
- {$EXTERNALSYM pcre_free_substring}
- pcre_free_substring_list: pcre_free_substring_list_func = nil;
- {$EXTERNALSYM pcre_free_substring_list}
- pcre_fullinfo: pcre_fullinfo_func = nil;
- {$EXTERNALSYM pcre_fullinfo}
- pcre_get_named_substring: pcre_get_named_substring_func = nil;
- {$EXTERNALSYM pcre_get_named_substring}
- pcre_get_stringnumber: pcre_get_stringnumber_func = nil;
- {$EXTERNALSYM pcre_get_stringnumber}
- pcre_get_stringtable_entries: pcre_get_stringtable_entries_func = nil;
- {$EXTERNALSYM pcre_get_stringtable_entries}
- pcre_get_substring: pcre_get_substring_func = nil;
- {$EXTERNALSYM pcre_get_substring}
- pcre_get_substring_list: pcre_get_substring_list_func = nil;
- {$EXTERNALSYM pcre_get_substring_list}
- pcre_info: pcre_info_func = nil;
- {$EXTERNALSYM pcre_info}
- pcre_maketables: pcre_maketables_func = nil;
- {$EXTERNALSYM pcre_maketables}
- pcre_refcount: pcre_refcount_func = nil;
- {$EXTERNALSYM pcre_refcount}
- pcre_study: pcre_study_func = nil;
- {$EXTERNALSYM pcre_study}
- pcre_version: pcre_version_func = nil;
- {$EXTERNALSYM pcre_version}
- {$ENDIF ~PCRE_LINKONREQUEST}
- function IsPCRELoaded: Boolean;
- function LoadPCRE: Boolean;
- procedure UnloadPCRE;
- implementation
- uses
- SysUtils,
- {$IFDEF MSWINDOWS}
- Windows;
- {$ENDIF MSWINDOWS}
- {$IFDEF UNIX}
- {$IFDEF HAS_UNIT_TYPES}
- Types,
- {$ENDIF HAS_UNIT_TYPES}
- {$IFDEF HAS_UNIT_LIBC}
- Libc;
- {$ELSE ~HAS_UNIT_LIBC}
- dl;
- {$ENDIF ~HAS_UNIT_LIBC}
- {$ENDIF UNIX}
- {$IFDEF PCRE_STATICLINK}
- {$LINK pcre\pcre_compile.obj}
- {$LINK pcre\pcre_config.obj}
- {$LINK pcre\pcre_dfa_exec.obj}
- {$LINK pcre\pcre_exec.obj}
- {$LINK pcre\pcre_fullinfo.obj}
- {$LINK pcre\pcre_get.obj}
- {$LINK pcre\pcre_globals.obj}
- {$LINK pcre\pcre_info.obj}
- {$LINK pcre\pcre_maketables.obj}
- {$LINK pcre\pcre_newline.obj}
- {$LINK pcre\pcre_ord2utf8.obj}
- {$LINK pcre\pcre_refcount.obj}
- {$LINK pcre\pcre_study.obj}
- {$LINK pcre\pcre_tables.obj}
- {$LINK pcre\pcre_try_flipped.obj}
- {$LINK pcre\pcre_ucd.obj}
- {$LINK pcre\pcre_valid_utf8.obj}
- {$LINK pcre\pcre_version.obj}
- {$LINK pcre\pcre_xclass.obj}
- {$LINK pcre\pcre_default_tables.obj}
- // user's defined callbacks
- var
- pcre_malloc_user: pcre_malloc_callback;
- pcre_free_user: pcre_free_callback;
- pcre_stack_malloc_user: pcre_stack_malloc_callback;
- pcre_stack_free_user: pcre_stack_free_callback;
- pcre_callout_user: pcre_callout_callback;
- function pcre_compile; external;
- function pcre_compile2; external;
- function pcre_config; external;
- function pcre_copy_named_substring; external;
- function pcre_copy_substring; external;
- function pcre_dfa_exec; external;
- function pcre_exec; external;
- procedure pcre_free_substring; external;
- procedure pcre_free_substring_list; external;
- function pcre_fullinfo; external;
- function pcre_get_named_substring; external;
- function pcre_get_stringnumber; external;
- function pcre_get_stringtable_entries; external;
- function pcre_get_substring; external;
- function pcre_get_substring_list; external;
- function pcre_info; external;
- function pcre_maketables; external;
- function pcre_refcount; external;
- function pcre_study; external;
- function pcre_version; external;
- type
- size_t = Longint;
- const
- szMSVCRT = 'MSVCRT.DLL';
- function _memcpy(dest, src: Pointer; count: size_t): Pointer; cdecl; external szMSVCRT name 'memcpy';
- function _memmove(dest, src: Pointer; count: size_t): Pointer; cdecl; external szMSVCRT name 'memmove';
- function _memset(dest: Pointer; val: Integer; count: size_t): Pointer; cdecl; external szMSVCRT name 'memset';
- function _strncmp(s1: PAnsiChar; s2: PAnsiChar; n: size_t): Integer; cdecl; external szMSVCRT name 'strncmp';
- function _memcmp(s1: Pointer; s2: Pointer; n: size_t): Integer; cdecl; external szMSVCRT name 'memcmp';
- function _strlen(s: PAnsiChar): size_t; cdecl; external szMSVCRT name 'strlen';
- function __ltolower(__ch: Integer): Integer; cdecl; external szMSVCRT name 'tolower';
- function __ltoupper(__ch: Integer): Integer; cdecl; external szMSVCRT name 'toupper';
- function _isalnum(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isalnum';
- function _isalpha(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isalpha';
- function _iscntrl(__ch: Integer): Integer; cdecl; external szMSVCRT name 'iscntrl';
- function _isdigit(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isdigit';
- function _isgraph(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isgraph';
- function _islower(__ch: Integer): Integer; cdecl; external szMSVCRT name 'islower';
- function _isprint(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isprint';
- function _ispunct(__ch: Integer): Integer; cdecl; external szMSVCRT name 'ispunct';
- function _isspace(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isspace';
- function _isupper(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isupper';
- function _isxdigit(__ch: Integer): Integer; cdecl; external szMSVCRT name 'isxdigit';
- function _strchr(__s: PAnsiChar; __c: Integer): PAnsiChar; cdecl; external szMSVCRT name 'strchr';
- function malloc(size: size_t): Pointer; cdecl; external szMSVCRT name 'malloc';
- function pcre_malloc(Size: Integer): Pointer;
- begin
- if Assigned(pcre_malloc_user) then
- Result := pcre_malloc_user(Size)
- else
- Result := malloc(Size);
- end;
- function pcre_stack_malloc(Size: Integer): Pointer;
- begin
- if Assigned(pcre_stack_malloc_user) then
- Result := pcre_stack_malloc_user(Size)
- else
- Result := malloc(Size);
- end;
- function _malloc(size: size_t): Pointer;
- begin
- Result := pcre_malloc(size);
- end;
- procedure free(pBlock: Pointer); cdecl; external szMSVCRT name 'free';
- procedure pcre_free(P: Pointer);
- begin
- if Assigned(pcre_free_user) then
- pcre_free_user(P)
- else
- free(P);
- end;
- procedure pcre_stack_free(P: Pointer);
- begin
- if Assigned(pcre_stack_free_user) then
- pcre_stack_free_user(P)
- else
- free(P);
- end;
- procedure _free(pBlock: Pointer);
- begin
- pcre_free(pBlock);
- end;
- function pcre_callout(var callout_block: pcre_callout_block): Integer; cdecl;
- begin
- if Assigned(pcre_callout_user) then
- Result := pcre_callout_user(callout_block)
- else
- Result := 0;
- end;
- {$ELSE ~PCRE_STATICLINK}
- type
- {$IFDEF MSWINDOWS}
- TModuleHandle = HINST;
- {$ENDIF MSWINDOWS}
- {$IFDEF LINUX}
- TModuleHandle = Pointer;
- {$ENDIF LINUX}
- const
- {$IFDEF MSWINDOWS}
- libpcremodulename = 'pcrelib.dll';
- {$ENDIF MSWINDOWS}
- {$IFDEF UNIX}
- libpcremodulename = 'libpcre.so.0';
- {$ENDIF UNIX}
- PCRECompileExportName = 'pcre_compile';
- PCRECompile2ExportName = 'pcre_compile2';
- PCREConfigExportName = 'pcre_config';
- PCRECopyNamedSubstringExportName = 'pcre_copy_named_substring';
- PCRECopySubStringExportName = 'pcre_copy_substring';
- PCREDfaExecExportName = 'pcre_dfa_exec';
- PCREExecExportName = 'pcre_exec';
- PCREFreeSubStringExportName = 'pcre_free_substring';
- PCREFreeSubStringListExportName = 'pcre_free_substring_list';
- PCREFullInfoExportName = 'pcre_fullinfo';
- PCREGetNamedSubstringExportName = 'pcre_get_named_substring';
- PCREGetStringNumberExportName = 'pcre_get_stringnumber';
- PCREGetStringTableEntriesExportName = 'pcre_get_stringtable_entries';
- PCREGetSubStringExportName = 'pcre_get_substring';
- PCREGetSubStringListExportName = 'pcre_get_substring_list';
- PCREInfoExportName = 'pcre_info';
- PCREMakeTablesExportName = 'pcre_maketables';
- PCRERefCountExportName = 'pcre_refcount';
- PCREStudyExportName = 'pcre_study';
- PCREVersionExportName = 'pcre_version';
- PCREMallocExportName = 'pcre_malloc';
- PCREFreeExportName = 'pcre_free';
- PCREStackMallocExportName = 'pcre_stack_malloc';
- PCREStackFreeExportName = 'pcre_stack_free';
- PCRECalloutExportName = 'pcre_callout';
- INVALID_MODULEHANDLE_VALUE = TModuleHandle(0);
- var
- PCRELib: TModuleHandle = INVALID_MODULEHANDLE_VALUE;
- {$ENDIF ~PCRE_STATICLINK}
- procedure SetPCREMallocCallback(const Value: pcre_malloc_callback);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_malloc_user := Value;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_malloc_func) then
- LoadPCRE;
- if Assigned(pcre_malloc_func) then
- pcre_malloc_func^ := Value
- else if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function GetPCREMallocCallback: pcre_malloc_callback;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_malloc_user;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_malloc_func) then
- LoadPCRE;
- if not Assigned(pcre_malloc_func) then
- begin
- Result := nil;
- if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- end
- else
- Result := pcre_malloc_func^;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function CallPCREMalloc(Size: Integer): Pointer;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_malloc(Size);
- {$ELSE ~PCRE_STATICLINK}
- Result := pcre_malloc_func^(Size);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure SetPCREFreeCallback(const Value: pcre_free_callback);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_free_user := Value;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_free_func) then
- LoadPCRE;
- if Assigned(pcre_free_func) then
- pcre_free_func^ := Value
- else if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function GetPCREFreeCallback: pcre_free_callback;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_free_user;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_free_func) then
- LoadPCRE;
- if not Assigned(pcre_free_func) then
- begin
- Result := nil;
- if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- end
- else
- Result := pcre_free_func^
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure CallPCREFree(P: Pointer);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_free(P);
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_free_func) then
- LoadPCRE;
- pcre_free_func^(P);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure SetPCREStackMallocCallback(const Value: pcre_stack_malloc_callback);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_stack_malloc_user := Value;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_stack_malloc_func) then
- LoadPCRE;
- if Assigned(pcre_stack_malloc_func) then
- pcre_stack_malloc_func^ := Value
- else if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function GetPCREStackMallocCallback: pcre_stack_malloc_callback;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_stack_malloc_user;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_stack_malloc_func) then
- LoadPCRE;
- if not Assigned(pcre_stack_malloc_func) then
- begin
- Result := nil;
- if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- end
- else
- Result := pcre_stack_malloc_func^;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function CallPCREStackMalloc(Size: Integer): Pointer;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_stack_malloc(Size);
- {$ELSE ~PCRE_STATICLINK}
- Result := pcre_stack_malloc_func^(Size);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure SetPCREStackFreeCallback(const Value: pcre_stack_free_callback);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_stack_free_user := Value;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_stack_free_func) then
- LoadPCRE;
- if Assigned(pcre_stack_free_func) then
- pcre_stack_free_func^ := Value
- else if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function GetPCREStackFreeCallback: pcre_stack_free_callback;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_stack_free_user;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_stack_free_func) then
- LoadPCRE;
- if not Assigned(pcre_stack_free_func) then
- begin
- Result := nil;
- if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- end
- else
- Result := pcre_stack_free_func^;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure CallPCREStackFree(P: Pointer);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_stack_free(P);
- {$ELSE ~PCRE_STATICLINK}
- pcre_stack_free_func^(P);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- procedure SetPCRECalloutCallback(const Value: pcre_callout_callback);
- begin
- {$IFDEF PCRE_STATICLINK}
- pcre_callout_user := Value;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_callout_func) then
- LoadPCRE;
- if Assigned(pcre_callout_func) then
- pcre_callout_func^ := Value
- else if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function GetPCRECalloutCallback: pcre_callout_callback;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_callout_user;
- {$ELSE ~PCRE_STATICLINK}
- if not Assigned(pcre_callout_func) then
- LoadPCRE;
- if not Assigned(pcre_callout_func) then
- begin
- Result := nil;
- if Assigned(LibNotLoadedHandler) then
- LibNotLoadedHandler;
- end
- else
- Result := pcre_callout_func^;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function CallPCRECallout(var callout_block: pcre_callout_block): Integer;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := pcre_callout(callout_block);
- {$ELSE ~PCRE_STATICLINK}
- Result := pcre_callout_func^(callout_block);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- {$IFNDEF PCRE_STATICLINK}
- procedure InitPCREFuncPtrs(const Value: Pointer);
- begin
- {$IFDEF PCRE_LINKONREQUEST}
- @pcre_compile := Value;
- @pcre_compile2 := Value;
- @pcre_config := Value;
- @pcre_copy_named_substring := Value;
- @pcre_copy_substring := Value;
- @pcre_dfa_exec := Value;
- @pcre_exec := Value;
- @pcre_free_substring := Value;
- @pcre_free_substring_list := Value;
- @pcre_fullinfo := Value;
- @pcre_get_named_substring := Value;
- @pcre_get_stringnumber := Value;
- @pcre_get_stringtable_entries := Value;
- @pcre_get_substring := Value;
- @pcre_get_substring_list := Value;
- @pcre_info := Value;
- @pcre_maketables := Value;
- @pcre_refcount := Value;
- @pcre_study := Value;
- @pcre_version := Value;
- {$ENDIF PCRE_LINKONREQUEST}
- pcre_malloc_func := nil;
- pcre_free_func := nil;
- pcre_stack_malloc_func := nil;
- pcre_stack_free_func := nil;
- pcre_callout_func := nil;
- end;
- {$ENDIF ~PCRE_STATICLINK}
- function IsPCRELoaded: Boolean;
- begin
- {$IFDEF PCRE_STATICLINK}
- Result := True;
- {$ELSE ~PCRE_STATICLINK}
- Result := PCRELib <> INVALID_MODULEHANDLE_VALUE;
- {$ENDIF ~PCRE_STATICLINK}
- end;
- function LoadPCRE: Boolean;
- {$IFDEF PCRE_STATICLINK}
- begin
- Result := True;
- end;
- {$ELSE ~PCRE_STATICLINK}
- function GetSymbol(SymbolName: PAnsiChar): Pointer;
- begin
- {$IFDEF MSWINDOWS}
- Result := GetProcAddress(PCRELib, PChar(SymbolName));
- {$ENDIF MSWINDOWS}
- {$IFDEF UNIX}
- Result := dlsym(PCRELib, PChar(SymbolName));
- {$ENDIF UNIX}
- end;
- begin
- Result := PCRELib <> INVALID_MODULEHANDLE_VALUE;
- if Result then
- Exit;
- if PCRELib = INVALID_MODULEHANDLE_VALUE then
- {$IFDEF MSWINDOWS}
- PCRELib := SafeLoadLibrary(libpcremodulename);
- {$ENDIF MSWINDOWS}
- {$IFDEF UNIX}
- PCRELib := dlopen(PAnsiChar(libpcremodulename), RTLD_NOW);
- {$ENDIF UNIX}
- Result := PCRELib <> INVALID_MODULEHANDLE_VALUE;
- if Result then
- begin
- {$IFDEF PCRE_LINKONREQUEST}
- @pcre_compile := GetSymbol(PCRECompileExportName);
- @pcre_compile2 := GetSymbol(PCRECompile2ExportName);
- @pcre_config := GetSymbol(PCREConfigExportName);
- @pcre_copy_named_substring := GetSymbol(PCRECopyNamedSubstringExportName);
- @pcre_copy_substring := GetSymbol(PCRECopySubStringExportName);
- @pcre_dfa_exec := GetSymbol(PCREDfaExecExportName);
- @pcre_exec := GetSymbol(PCREExecExportName);
- @pcre_free_substring := GetSymbol(PCREFreeSubStringExportName);
- @pcre_free_substring_list := GetSymbol(PCREFreeSubStringListExportName);
- @pcre_fullinfo := GetSymbol(PCREFullInfoExportName);
- @pcre_get_named_substring := GetSymbol(PCREGetNamedSubstringExportName);
- @pcre_get_stringnumber := GetSymbol(PCREGetStringNumberExportName);
- @pcre_get_stringtable_entries := GetSymbol(PCREGetStringTableEntriesExportName);
- @pcre_get_substring := GetSymbol(PCREGetSubStringExportName);
- @pcre_get_substring_list := GetSymbol(PCREGetSubStringListExportName);
- @pcre_info := GetSymbol(PCREInfoExportName);
- @pcre_maketables := GetSymbol(PCREMakeTablesExportName);
- @pcre_refcount := GetSymbol(PCRERefCountExportName);
- @pcre_study := GetSymbol(PCREStudyExportName);
- @pcre_version := GetSymbol(PCREVersionExportName);
- {$ENDIF PCRE_LINKONREQUEST}
- pcre_malloc_func := GetSymbol(PCREMallocExportName);
- pcre_free_func := GetSymbol(PCREFreeExportName);
- pcre_stack_malloc_func := GetSymbol(PCREStackMallocExportName);
- pcre_stack_free_func := GetSymbol(PCREStackFreeExportName);
- pcre_callout_func := GetSymbol(PCRECalloutExportName);
- end
- else
- InitPCREFuncPtrs(@LibNotLoadedHandler);
- end;
- {$ENDIF ~PCRE_STATICLINK}
- procedure UnloadPCRE;
- begin
- {$IFNDEF PCRE_STATICLINK}
- if PCRELib <> INVALID_MODULEHANDLE_VALUE then
- {$IFDEF MSWINDOWS}
- FreeLibrary(PCRELib);
- {$ENDIF MSWINDOWS}
- {$IFDEF UNIX}
- dlclose(Pointer(PCRELib));
- {$ENDIF UNIX}
- PCRELib := INVALID_MODULEHANDLE_VALUE;
- InitPCREFuncPtrs(@LibNotLoadedHandler);
- {$ENDIF ~PCRE_STATICLINK}
- end;
- {$IFDEF PCRE_STATICLINK}
- procedure pcre_dispose(pattern, hints, chartable: Pointer);
- begin
- if pattern <> nil then pcre_free(pattern);
- if hints <> nil then pcre_free(hints);
- if chartable <> nil then pcre_free(chartable);
- end;
- {$ENDIF PCRE_STATICLINK}
- {$IFDEF PCRE_LINKDLL}
- function pcre_compile; external libpcremodulename name PCRECompileExportName;
- function pcre_compile2; external libpcremodulename name PCRECompile2ExportName;
- function pcre_config; external libpcremodulename name PCREConfigExportName;
- function pcre_copy_named_substring; external libpcremodulename name PCRECopyNamedSubStringExportName;
- function pcre_copy_substring; external libpcremodulename name PCRECopySubStringExportName;
- function pcre_dfa_exec; external libpcremodulename name PCREDfaExecExportName;
- function pcre_exec; external libpcremodulename name PCREExecExportName;
- procedure pcre_free_substring; external libpcremodulename name PCREFreeSubStringExportName;
- procedure pcre_free_substring_list; external libpcremodulename name PCREFreeSubStringListExportName;
- function pcre_fullinfo; external libpcremodulename name PCREFullInfoExportName;
- function pcre_get_named_substring; external libpcremodulename name PCREGetNamedSubStringExportName;
- function pcre_get_stringnumber; external libpcremodulename name PCREGetStringNumberExportName;
- function pcre_get_stringtable_entries; external libpcremodulename name PCREGetStringTableEntriesExportName;
- function pcre_get_substring; external libpcremodulename name PCREGetSubStringExportName;
- function pcre_get_substring_list; external libpcremodulename name PCREGetSubStringListExportName;
- function pcre_info; external libpcremodulename name PCREInfoExportName;
- function pcre_maketables; external libpcremodulename name PCREMakeTablesExportName;
- function pcre_refcount; external libpcremodulename name PCRERefCountExportName;
- function pcre_study; external libpcremodulename name PCREStudyExportName;
- function pcre_version; external libpcremodulename name PCREVersionExportName;
- procedure pcre_dispose; external libpcremodulename name 'pcre_dispose';
- {$ENDIF PCRE_LINKDLL}
- end.
|