summaryrefslogtreecommitdiff
path: root/packages/libc/src/regexh.inc
blob: 27cb12a881dc7ff99d8c5da833f408b8b51bb316 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

type

   Ps_reg_t = ^s_reg_t;
   s_reg_t = longint;

   Pactive_reg_t = ^active_reg_t;
   active_reg_t = dword;

   Preg_syntax_t = ^reg_syntax_t;
   reg_syntax_t = dword;

Const
   RE_BACKSLASH_ESCAPE_IN_LISTS = dword(1);

const
   RE_BK_PLUS_QM = RE_BACKSLASH_ESCAPE_IN_LISTS shl 1;
   RE_CHAR_CLASSES = RE_BK_PLUS_QM shl 1;
   RE_CONTEXT_INDEP_ANCHORS = RE_CHAR_CLASSES shl 1;
   RE_CONTEXT_INDEP_OPS = RE_CONTEXT_INDEP_ANCHORS shl 1;
   RE_CONTEXT_INVALID_OPS = RE_CONTEXT_INDEP_OPS shl 1;
   RE_DOT_NEWLINE = RE_CONTEXT_INVALID_OPS shl 1;
   RE_DOT_NOT_NULL = RE_DOT_NEWLINE shl 1;
   RE_HAT_LISTS_NOT_NEWLINE = RE_DOT_NOT_NULL shl 1;
   RE_INTERVALS = RE_HAT_LISTS_NOT_NEWLINE shl 1;
   RE_LIMITED_OPS = RE_INTERVALS shl 1;
   RE_NEWLINE_ALT = RE_LIMITED_OPS shl 1;
   RE_NO_BK_BRACES = RE_NEWLINE_ALT shl 1;
   RE_NO_BK_PARENS = RE_NO_BK_BRACES shl 1;
   RE_NO_BK_REFS = RE_NO_BK_PARENS shl 1;
   RE_NO_BK_VBAR = RE_NO_BK_REFS shl 1;
   RE_NO_EMPTY_RANGES = RE_NO_BK_VBAR shl 1;
   RE_UNMATCHED_RIGHT_PAREN_ORD = RE_NO_EMPTY_RANGES shl 1;
   RE_NO_POSIX_BACKTRACKING = RE_UNMATCHED_RIGHT_PAREN_ORD shl 1;
   RE_NO_GNU_OPS = RE_NO_POSIX_BACKTRACKING shl 1;
   RE_DEBUG = RE_NO_GNU_OPS shl 1;
   RE_INVALID_INTERVAL_ORD = RE_DEBUG shl 1;

var
  re_syntax_options : reg_syntax_t;cvar;external;

const
   _RE_SYNTAX_POSIX_COMMON = (((RE_CHAR_CLASSES or RE_DOT_NEWLINE) or RE_DOT_NOT_NULL) or RE_INTERVALS) or RE_NO_EMPTY_RANGES;
   RE_SYNTAX_POSIX_EXTENDED = ((((((_RE_SYNTAX_POSIX_COMMON or RE_CONTEXT_INDEP_ANCHORS) or RE_CONTEXT_INDEP_OPS) or RE_NO_BK_BRACES) or RE_NO_BK_PARENS) or RE_NO_BK_VBAR) or RE_CONTEXT_INVALID_OPS) or RE_UNMATCHED_RIGHT_PAREN_ORD;
   RE_SYNTAX_POSIX_BASIC = _RE_SYNTAX_POSIX_COMMON or RE_BK_PLUS_QM;
   RE_SYNTAX_POSIX_MINIMAL_BASIC = _RE_SYNTAX_POSIX_COMMON or RE_LIMITED_OPS;
   RE_SYNTAX_POSIX_MINIMAL_EXTENDED = ((((((_RE_SYNTAX_POSIX_COMMON or RE_CONTEXT_INDEP_ANCHORS) or RE_CONTEXT_INVALID_OPS) or RE_NO_BK_BRACES) or RE_NO_BK_PARENS) or RE_NO_BK_REFS) or RE_NO_BK_VBAR) or RE_UNMATCHED_RIGHT_PAREN_ORD;
   RE_SYNTAX_EMACS = 0;
   RE_SYNTAX_AWK = ((((((((RE_BACKSLASH_ESCAPE_IN_LISTS or RE_DOT_NOT_NULL) or RE_NO_BK_PARENS) or RE_NO_BK_REFS) or RE_NO_BK_VBAR) or RE_NO_EMPTY_RANGES) or RE_DOT_NEWLINE) or RE_CONTEXT_INDEP_ANCHORS) or RE_UNMATCHED_RIGHT_PAREN_ORD) or RE_NO_GNU_OPS;
   RE_SYNTAX_GNU_AWK = ((RE_SYNTAX_POSIX_EXTENDED or RE_BACKSLASH_ESCAPE_IN_LISTS) or RE_DEBUG) and ( not ((RE_DOT_NOT_NULL or RE_INTERVALS) or RE_CONTEXT_INDEP_OPS));
   RE_SYNTAX_POSIX_AWK = ((RE_SYNTAX_POSIX_EXTENDED or RE_BACKSLASH_ESCAPE_IN_LISTS) or RE_INTERVALS) or RE_NO_GNU_OPS;
   RE_SYNTAX_GREP = (((RE_BK_PLUS_QM or RE_CHAR_CLASSES) or RE_HAT_LISTS_NOT_NEWLINE) or RE_INTERVALS) or RE_NEWLINE_ALT;
   RE_SYNTAX_EGREP = (((((RE_CHAR_CLASSES or RE_CONTEXT_INDEP_ANCHORS) or RE_CONTEXT_INDEP_OPS) or RE_HAT_LISTS_NOT_NEWLINE) or RE_NEWLINE_ALT) or RE_NO_BK_PARENS) or RE_NO_BK_VBAR;
   RE_SYNTAX_POSIX_EGREP = ((RE_SYNTAX_EGREP or RE_INTERVALS) or RE_NO_BK_BRACES) or RE_INVALID_INTERVAL_ORD;
   RE_SYNTAX_ED = RE_SYNTAX_POSIX_BASIC;
   RE_SYNTAX_SED = RE_SYNTAX_POSIX_BASIC;

const
   // Already in posix2_limh.inc:
   //   RE_DUP_MAX = $7fff;
   REG_EXTENDED = 1;
   REG_ICASE = REG_EXTENDED shl 1;
   REG_NEWLINE = REG_ICASE shl 1;
   REG_NOSUB = REG_NEWLINE shl 1;
   REG_NOTBOL = 1;
   REG_NOTEOL = 1 shl 1;

type
  RE_TRANSLATE_TYPE = PChar;

const
  REGS_UNALLOCATED = 0;
  REGS_REALLOCATE = 1;
  REGS_FIXED = 2;

type
   Preg_errcode_t = ^reg_errcode_t;
   reg_errcode_t =(
    REG_ENOSYS := -(1),
    REG_NOERROR := 0,
    REG_NOMATCH := 1,
    REG_BADPAT := 2,
    REG_ECOLLATE := 3,
    REG_ECTYPE := 4,
    REG_EESCAPE := 5,
    REG_ESUBREG := 6,
    REG_EBRACK := 7,
    REG_EPAREN := 8,
    REG_EBRACE := 9,
    REG_BADBR := 10,
    REG_ERANGE := 11,
    REG_ESPACE := 12,
    REG_BADRPT := 13,
    REG_EEND := 14,
    REG_ESIZE := 15,
    REG_ERPAREN := 16);

type
  Pre_pattern_buffer = ^re_pattern_buffer;
  re_pattern_buffer = record
    buffer: PByte;
    allocated: LongWord;
    used: LongWord;
    syntax: reg_syntax_t;
    fastmap: PChar;
    translate: RE_TRANSLATE_TYPE;
    re_nsub: size_t;
    __bitfield: Cardinal; (* In this case 8 bits use 32 bits *)
  end;
  regex_t = re_pattern_buffer;
  pregex_t = ^regex_t;

  Pregoff_t = ^regoff_t;
  regoff_t = longint;
  Pre_registers = ^re_registers;
  re_registers = record
     num_regs : dword;
     start : Pregoff_t;
     end_ : Pregoff_t;
  end;

const
  RE_NREGS = 30;

type
  Pregmatch_t = ^regmatch_t;
  regmatch_t = record
    rm_so : regoff_t;
    rm_eo : regoff_t;
  end;

function re_set_syntax(syntax:reg_syntax_t):reg_syntax_t;cdecl;external clib name 're_set_syntax';
function re_compile_pattern(pattern:Pchar; length:size_t; buffer:Pre_pattern_buffer):Pchar;cdecl;external clib name 're_compile_pattern';
function re_compile_fastmap(buffer:Pre_pattern_buffer):longint;cdecl;external clib name 're_compile_fastmap';
function re_search(buffer:Pre_pattern_buffer; _string:Pchar; length:longint; start:longint; range:longint;
           regs:Pre_registers):longint;cdecl;external clib name 're_search';
function re_search_2(buffer:Pre_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint;
           start:longint; range:longint; regs:Pre_registers; stop:longint):longint;cdecl;external clib name 're_search_2';
function re_match(buffer:Pre_pattern_buffer; _string:Pchar; length:longint; start:longint; regs:Pre_registers):longint;cdecl;external clib name 're_match';
function re_match_2(buffer:Pre_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint;
           start:longint; regs:Pre_registers; stop:longint):longint;cdecl;external clib name 're_match_2';
procedure re_set_registers(buffer:Pre_pattern_buffer; regs:Pre_registers; num_regs:dword; starts:Pregoff_t; ends:Pregoff_t);cdecl;external clib name 're_set_registers';
function regcomp(__preg:Pregex_t; __pattern:Pchar; __cflags:longint):longint;cdecl;external clib name 'regcomp';
function regexec(__preg:Pregex_t; __string:Pchar; __nmatch:size_t; __pmatch:array of regmatch_t; __eflags:longint):longint;cdecl;external clib name 'regexec';
function regerror(__errcode:longint; __preg:Pregex_t; __errbuf:Pchar; __errbuf_size:size_t):size_t;cdecl;external clib name 'regerror';
procedure regfree(__preg:Pregex_t);cdecl;external clib name 'regfree';


{ ---------------------------------------------------------------------
    Borland compatibility types
  ---------------------------------------------------------------------}

Type
  TRePatternBuffer = re_pattern_buffer;
  PRePatternBuffer = ^TRePatternBuffer;

  TRegOff = regoff_t;
  PRegOff = ^TRegOff;

  TReRegisters = re_registers;
  PReRegisters = ^TReRegisters;

  TRegEx = regex_t;
  PRegEx = ^TRegEx;

  TRegMatch = regmatch_t;
  PRegMatch = ^TRegMatch;

function re_compile_pattern(pattern:Pchar; length:size_t; var buffer: re_pattern_buffer):Pchar;cdecl;external clib name 're_compile_pattern';
function re_compile_fastmap(var buffer: re_pattern_buffer):longint;cdecl;external clib name 're_compile_fastmap';
function re_search(var buffer:re_pattern_buffer; _string:Pchar; length:longint; start:longint; range:longint; regs:Pre_registers):longint;cdecl;external clib name 're_search';
function re_search(var buffer:re_pattern_buffer; _string:Pchar; length:longint; start:longint; range:longint; var regs:re_registers):longint;cdecl;external clib name 're_search';
function re_search_2(var buffer:re_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint; start:longint; range:longint; regs:Pre_registers; stop:longint):longint;cdecl;external clib name 're_search_2';
function re_search_2(var buffer:re_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint; start:longint; range:longint; var regs:re_registers; stop:longint):longint;cdecl;external clib name 're_search_2';
function re_match(var buffer:re_pattern_buffer; _string:Pchar; length:longint; start:longint; regs:Pre_registers):longint;cdecl;external clib name 're_match';
function re_match(var buffer:re_pattern_buffer; _string:Pchar; length:longint; start:longint; var regs:re_registers):longint;cdecl;external clib name 're_match';
function re_match_2(var buffer:re_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint; start:longint; regs:Pre_registers; stop:longint):longint;cdecl;external clib name 're_match_2';
function re_match_2(var buffer:re_pattern_buffer; string1:Pchar; length1:longint; string2:Pchar; length2:longint; start:longint; var regs:re_registers; stop:longint):longint;cdecl;external clib name 're_match_2';
procedure re_set_registers(var buffer:re_pattern_buffer; var regs:re_registers; num_regs:dword; var starts:regoff_t; var ends:regoff_t);cdecl;external clib name 're_set_registers';
function regcomp(var __preg:regex_t; __pattern:Pchar; __cflags:longint):longint;cdecl;external clib name 'regcomp';
function regexec(var __preg:regex_t; __string:Pchar; __nmatch:size_t; __pmatch: Pregmatch_t; __eflags:longint):longint;cdecl;external clib name 'regexec';
function regerror(__errcode:longint; const __preg:regex_t; __errbuf:Pchar; __errbuf_size:size_t):size_t;cdecl;external clib name 'regerror';
procedure regfree(var __preg:regex_t);cdecl;external clib name 'regfree';