428
+ − 1 /* Definitions for data structures and routines for the regular
+ − 2 expression library, version 0.12.
+ − 3
+ − 4 Copyright (C) 1985, 89, 90, 91, 92, 93, 95 Free Software Foundation, Inc.
+ − 5
+ − 6 This program is free software; you can redistribute it and/or modify
+ − 7 it under the terms of the GNU General Public License as published by
+ − 8 the Free Software Foundation; either version 2, or (at your option)
+ − 9 any later version.
+ − 10
+ − 11 This program is distributed in the hope that it will be useful,
+ − 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ − 14 GNU General Public License for more details.
+ − 15
+ − 16 You should have received a copy of the GNU General Public License
+ − 17 along with this program; see the file COPYING. If not, write to
+ − 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 19 Boston, MA 02111-1307, USA. */
+ − 20
+ − 21 /* Synched up with: FSF 19.29. */
+ − 22
440
+ − 23 #ifndef INCLUDED_regex_h_
+ − 24 #define INCLUDED_regex_h_
428
+ − 25
446
+ − 26 #ifdef emacs
+ − 27 #define RE_TRANSLATE_TYPE Lisp_Object
+ − 28 #else
+ − 29 #define RE_TRANSLATE_TYPE char *
665
+ − 30 #define Elemcount ssize_t
+ − 31 #define Bytecount ssize_t
446
+ − 32 #endif /* emacs */
+ − 33
428
+ − 34 /* POSIX says that <sys/types.h> must be included (by the caller) before
+ − 35 <regex.h>. */
+ − 36
+ − 37
+ − 38 /* The following bits are used to determine the regexp syntax we
+ − 39 recognize. The not-set meaning typically corresponds to the syntax
+ − 40 used by Emacs (the exception is RE_INTERVAL, made for historical
+ − 41 reasons). The bits are given in alphabetical order, and the
+ − 42 definitions shifted by one from the previous bit; thus, when we add or
+ − 43 remove a bit, only one other definition need change. */
+ − 44 typedef unsigned reg_syntax_t;
+ − 45
+ − 46 /* If this bit is not set, then \ inside a bracket expression is literal.
+ − 47 If set, then such a \ quotes the following character. */
+ − 48 #define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
+ − 49
+ − 50 /* If this bit is not set, then + and ? are operators, and \+ and \? are
+ − 51 literals.
+ − 52 If set, then \+ and \? are operators and + and ? are literals. */
+ − 53 #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+ − 54
+ − 55 /* If this bit is set, then character classes are supported. They are:
+ − 56 [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
+ − 57 [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+ − 58 If not set, then character classes are not supported. */
+ − 59 #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+ − 60
+ − 61 /* If this bit is set, then ^ and $ are always anchors (outside bracket
+ − 62 expressions, of course).
+ − 63 If this bit is not set, then it depends:
+ − 64 ^ is an anchor if it is at the beginning of a regular
+ − 65 expression or after an open-group or an alternation operator;
+ − 66 $ is an anchor if it is at the end of a regular expression, or
+ − 67 before a close-group or an alternation operator.
+ − 68
+ − 69 This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+ − 70 POSIX draft 11.2 says that * etc. in leading positions is undefined.
+ − 71 We already implemented a previous draft which made those constructs
+ − 72 invalid, though, so we haven't changed the code back. */
+ − 73 #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+ − 74
+ − 75 /* If this bit is set, then special characters are always special
+ − 76 regardless of where they are in the pattern.
+ − 77 If this bit is not set, then special characters are special only in
+ − 78 some contexts; otherwise they are ordinary. Specifically,
+ − 79 * + ? and intervals are only special when not after the beginning,
+ − 80 open-group, or alternation operator. */
+ − 81 #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+ − 82
+ − 83 /* If this bit is set, then *, +, ?, and { cannot be first in an re or
+ − 84 immediately after an alternation or begin-group operator. */
+ − 85 #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+ − 86
+ − 87 /* If this bit is set, then . matches newline.
+ − 88 If not set, then it doesn't. */
+ − 89 #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+ − 90
+ − 91 /* If this bit is set, then . doesn't match NUL.
+ − 92 If not set, then it does. */
+ − 93 #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+ − 94
+ − 95 /* If this bit is set, nonmatching lists [^...] do not match newline.
+ − 96 If not set, they do. */
+ − 97 #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+ − 98
+ − 99 /* If this bit is set, either \{...\} or {...} defines an
+ − 100 interval, depending on RE_NO_BK_BRACES.
+ − 101 If not set, \{, \}, {, and } are literals. */
+ − 102 #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+ − 103
+ − 104 /* If this bit is set, +, ? and | aren't recognized as operators.
+ − 105 If not set, they are. */
+ − 106 #define RE_LIMITED_OPS (RE_INTERVALS << 1)
+ − 107
+ − 108 /* If this bit is set, newline is an alternation operator.
+ − 109 If not set, newline is literal. */
+ − 110 #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+ − 111
+ − 112 /* If this bit is set, then `{...}' defines an interval, and \{ and \}
+ − 113 are literals.
+ − 114 If not set, then `\{...\}' defines an interval. */
+ − 115 #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+ − 116
+ − 117 /* If this bit is set, (...) defines a group, and \( and \) are literals.
+ − 118 If not set, \(...\) defines a group, and ( and ) are literals. */
+ − 119 #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+ − 120
+ − 121 /* If this bit is set, then \<digit> matches <digit>.
+ − 122 If not set, then \<digit> is a back-reference. */
+ − 123 #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+ − 124
+ − 125 /* If this bit is set, then | is an alternation operator, and \| is literal.
+ − 126 If not set, then \| is an alternation operator, and | is literal. */
+ − 127 #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+ − 128
+ − 129 /* If this bit is set, then an ending range point collating higher
+ − 130 than the starting range point, as in [z-a], is invalid.
+ − 131 If not set, then when ending range point collates higher than the
+ − 132 starting range point, the range is ignored. */
+ − 133 #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+ − 134
+ − 135 /* If this bit is not set, allow minimal matching:
+ − 136 - a*? and a+? and a?? perform shortest-possible matching (compare with a*
+ − 137 and a+ and a?, respectively, which perform longest-possible matching)
+ − 138 - other juxtaposing of * + and ? is rejected.
+ − 139 If this bit is set, consecutive * + and ?'s are collapsed in a logical
+ − 140 manner:
+ − 141 - a*? and a+? are the same as a*
+ − 142 - a?? is the same as a?
+ − 143 */
+ − 144 #define RE_NO_MINIMAL_MATCHING (RE_NO_EMPTY_RANGES << 1)
+ − 145
+ − 146 /* If this bit is set, succeed as soon as we match the whole pattern,
+ − 147 without further backtracking. */
+ − 148 #define RE_NO_POSIX_BACKTRACKING (RE_NO_MINIMAL_MATCHING << 1)
+ − 149
+ − 150 /* If this bit is not set, (?:re) behaves like (re) (or \(?:re\) behaves like
+ − 151 \(re\)) except that the matched string is not registered. */
+ − 152 #define RE_NO_SHY_GROUPS (RE_NO_POSIX_BACKTRACKING << 1)
+ − 153
+ − 154 /* If this bit is set, then an unmatched ) is ordinary.
+ − 155 If not set, then an unmatched ) is invalid. */
+ − 156 #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_SHY_GROUPS << 1)
+ − 157
502
+ − 158 /* If this bit is set, then \22 will read as a back reference,
+ − 159 provided at least 22 non-shy groups have been seen so far. In all
+ − 160 other cases (bit not set, not 22 non-shy groups seen so far), it
+ − 161 reads as a back reference \2 followed by a digit 2. */
+ − 162 #define RE_NO_MULTI_DIGIT_BK_REFS (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+ − 163
428
+ − 164 /* This global variable defines the particular regexp syntax to use (for
+ − 165 some interfaces). When a regexp is compiled, the syntax used is
+ − 166 stored in the pattern buffer, so changing this does not affect
+ − 167 already-compiled regexps. */
+ − 168 extern reg_syntax_t re_syntax_options;
+ − 169
+ − 170 /* Define combinations of the above bits for the standard possibilities.
+ − 171 (The [[[ comments delimit what gets put into the Texinfo file, so
+ − 172 don't delete them!) */
+ − 173 /* [[[begin syntaxes]]] */
+ − 174 #define RE_SYNTAX_EMACS RE_INTERVALS
+ − 175
+ − 176 #define RE_SYNTAX_AWK \
+ − 177 (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
+ − 178 | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ − 179 | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
+ − 180 | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_SHY_GROUPS \
502
+ − 181 | RE_NO_MINIMAL_MATCHING | RE_NO_MULTI_DIGIT_BK_REFS)
428
+ − 182
+ − 183 #define RE_SYNTAX_POSIX_AWK \
+ − 184 (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
+ − 185
+ − 186 #define RE_SYNTAX_GREP \
+ − 187 (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
+ − 188 | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
+ − 189 | RE_NEWLINE_ALT | RE_NO_SHY_GROUPS \
502
+ − 190 | RE_NO_MINIMAL_MATCHING | RE_NO_MULTI_DIGIT_BK_REFS)
428
+ − 191
+ − 192 #define RE_SYNTAX_EGREP \
+ − 193 (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
+ − 194 | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
+ − 195 | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
+ − 196 | RE_NO_BK_VBAR | RE_NO_SHY_GROUPS \
502
+ − 197 | RE_NO_MINIMAL_MATCHING | RE_NO_MULTI_DIGIT_BK_REFS)
428
+ − 198
+ − 199 #define RE_SYNTAX_POSIX_EGREP \
502
+ − 200 (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES | \
+ − 201 RE_NO_MULTI_DIGIT_BK_REFS)
428
+ − 202
+ − 203 /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
+ − 204 #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+ − 205
+ − 206 #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+ − 207
+ − 208 /* Syntax bits common to both basic and extended POSIX regex syntax. */
+ − 209 #define _RE_SYNTAX_POSIX_COMMON \
+ − 210 (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
+ − 211 | RE_INTERVALS | RE_NO_EMPTY_RANGES | RE_NO_SHY_GROUPS \
502
+ − 212 | RE_NO_MINIMAL_MATCHING | RE_NO_MULTI_DIGIT_BK_REFS)
428
+ − 213
+ − 214 #define RE_SYNTAX_POSIX_BASIC \
+ − 215 (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+ − 216
+ − 217 /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+ − 218 RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
+ − 219 isn't minimal, since other operators, such as \`, aren't disabled. */
+ − 220 #define RE_SYNTAX_POSIX_MINIMAL_BASIC \
+ − 221 (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+ − 222
+ − 223 #define RE_SYNTAX_POSIX_EXTENDED \
+ − 224 (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ − 225 | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
+ − 226 | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
+ − 227 | RE_UNMATCHED_RIGHT_PAREN_ORD)
+ − 228
+ − 229 /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
+ − 230 replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
+ − 231 #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
+ − 232 (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ − 233 | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
+ − 234 | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ − 235 | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
+ − 236 /* [[[end syntaxes]]] */
+ − 237
+ − 238 /* Maximum number of duplicates an interval can allow. Some systems
+ − 239 (erroneously) define this in other header files, but we want our
+ − 240 value, so remove any previous define. */
+ − 241 #ifdef RE_DUP_MAX
+ − 242 #undef RE_DUP_MAX
+ − 243 #endif
+ − 244 #define RE_DUP_MAX ((1 << 15) - 1)
+ − 245
+ − 246
+ − 247 /* POSIX `cflags' bits (i.e., information for `regcomp'). */
+ − 248
+ − 249 /* If this bit is set, then use extended regular expression syntax.
+ − 250 If not set, then use basic regular expression syntax. */
+ − 251 #define REG_EXTENDED 1
+ − 252
+ − 253 /* If this bit is set, then ignore case when matching.
+ − 254 If not set, then case is significant. */
+ − 255 #define REG_ICASE (REG_EXTENDED << 1)
+ − 256
+ − 257 /* If this bit is set, then anchors do not match at newline
+ − 258 characters in the string.
+ − 259 If not set, then anchors do match at newlines. */
+ − 260 #define REG_NEWLINE (REG_ICASE << 1)
+ − 261
+ − 262 /* If this bit is set, then report only success or fail in regexec.
+ − 263 If not set, then returns differ between not matching and errors. */
+ − 264 #define REG_NOSUB (REG_NEWLINE << 1)
+ − 265
+ − 266
+ − 267 /* POSIX `eflags' bits (i.e., information for regexec). */
+ − 268
+ − 269 /* If this bit is set, then the beginning-of-line operator doesn't match
+ − 270 the beginning of the string (presumably because it's not the
+ − 271 beginning of a line).
+ − 272 If not set, then the beginning-of-line operator does match the
+ − 273 beginning of the string. */
+ − 274 #define REG_NOTBOL 1
+ − 275
+ − 276 /* Like REG_NOTBOL, except for the end-of-line. */
+ − 277 #define REG_NOTEOL (1 << 1)
+ − 278
+ − 279
+ − 280 /* If any error codes are removed, changed, or added, update the
+ − 281 `re_error_msg' table in regex.c. */
+ − 282 typedef enum
+ − 283 {
+ − 284 REG_NOERROR = 0, /* Success. */
+ − 285 REG_NOMATCH, /* Didn't find a match (for regexec). */
+ − 286
+ − 287 /* POSIX regcomp return error codes. (In the order listed in the
+ − 288 standard.) */
+ − 289 REG_BADPAT, /* Invalid pattern. */
+ − 290 REG_ECOLLATE, /* Not implemented. */
+ − 291 REG_ECTYPE, /* Invalid character class name. */
+ − 292 REG_EESCAPE, /* Trailing backslash. */
+ − 293 REG_ESUBREG, /* Invalid back reference. */
+ − 294 REG_EBRACK, /* Unmatched left bracket. */
+ − 295 REG_EPAREN, /* Parenthesis imbalance. */
+ − 296 REG_EBRACE, /* Unmatched \{. */
+ − 297 REG_BADBR, /* Invalid contents of \{\}. */
+ − 298 REG_ERANGE, /* Invalid range end. */
+ − 299 REG_ESPACE, /* Ran out of memory. */
+ − 300 REG_BADRPT, /* No preceding re for repetition op. */
+ − 301
+ − 302 /* Error codes we've added. */
+ − 303 REG_EEND, /* Premature end. */
+ − 304 REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
+ − 305 REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
+ − 306 #ifdef emacs
+ − 307 ,REG_ESYNTAX /* Invalid syntax designator. */
+ − 308 #endif
+ − 309 #ifdef MULE
+ − 310 ,REG_ERANGESPAN /* Ranges may not span charsets. */
+ − 311 ,REG_ECATEGORY /* Invalid category designator */
+ − 312 #endif
+ − 313 } reg_errcode_t;
+ − 314
+ − 315 /* This data structure represents a compiled pattern. Before calling
+ − 316 the pattern compiler, the fields `buffer', `allocated', `fastmap',
+ − 317 `translate', and `no_sub' can be set. After the pattern has been
+ − 318 compiled, the `re_nsub' field is available. All other fields are
+ − 319 private to the regex routines. */
+ − 320
+ − 321 struct re_pattern_buffer
+ − 322 {
+ − 323 /* [[[begin pattern_buffer]]] */
+ − 324 /* Space that holds the compiled pattern. It is declared as
+ − 325 `unsigned char *' because its elements are
+ − 326 sometimes used as array indexes. */
+ − 327 unsigned char *buffer;
+ − 328
+ − 329 /* Number of bytes to which `buffer' points. */
647
+ − 330 long allocated;
428
+ − 331
+ − 332 /* Number of bytes actually used in `buffer'. */
647
+ − 333 long used;
428
+ − 334
+ − 335 /* Syntax setting with which the pattern was compiled. */
+ − 336 reg_syntax_t syntax;
+ − 337
+ − 338 /* Pointer to a fastmap, if any, otherwise zero. re_search uses
+ − 339 the fastmap, if there is one, to skip over impossible
+ − 340 starting points for matches. */
+ − 341 char *fastmap;
+ − 342
+ − 343 /* Either a translate table to apply to all characters before
+ − 344 comparing them, or zero for no translation. The translation
+ − 345 is applied to a pattern when it is compiled and to a string
+ − 346 when it is matched. */
446
+ − 347 RE_TRANSLATE_TYPE translate;
428
+ − 348
502
+ − 349 /* Number of returnable groups found by the compiler. (This does
+ − 350 not count shy groups.) */
647
+ − 351 int re_nsub;
428
+ − 352
502
+ − 353 /* Total number of groups found by the compiler. (Including
+ − 354 shy ones.) */
+ − 355 int re_ngroups;
+ − 356
428
+ − 357 /* Zero if this pattern cannot match the empty string, one else.
+ − 358 Well, in truth it's used only in `re_search_2', to see
+ − 359 whether or not we should use the fastmap, so we don't set
+ − 360 this absolutely perfectly; see `re_compile_fastmap' (the
+ − 361 `duplicate' case). */
647
+ − 362 unsigned int can_be_null : 1;
428
+ − 363
+ − 364 /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+ − 365 for `max (RE_NREGS, re_nsub + 1)' groups.
+ − 366 If REGS_REALLOCATE, reallocate space if necessary.
+ − 367 If REGS_FIXED, use what's there. */
+ − 368 #define REGS_UNALLOCATED 0
+ − 369 #define REGS_REALLOCATE 1
+ − 370 #define REGS_FIXED 2
647
+ − 371 unsigned int regs_allocated : 2;
428
+ − 372
+ − 373 /* Set to zero when `regex_compile' compiles a pattern; set to one
+ − 374 by `re_compile_fastmap' if it updates the fastmap. */
647
+ − 375 unsigned int fastmap_accurate : 1;
428
+ − 376
+ − 377 /* If set, `re_match_2' does not return information about
+ − 378 subexpressions. */
647
+ − 379 unsigned int no_sub : 1;
428
+ − 380
+ − 381 /* If set, a beginning-of-line anchor doesn't match at the
+ − 382 beginning of the string. */
647
+ − 383 unsigned int not_bol : 1;
428
+ − 384
+ − 385 /* Similarly for an end-of-line anchor. */
647
+ − 386 unsigned int not_eol : 1;
428
+ − 387
+ − 388 /* If true, an anchor at a newline matches. */
647
+ − 389 unsigned int newline_anchor : 1;
428
+ − 390
647
+ − 391 unsigned int warned_about_incompatible_back_references : 1;
502
+ − 392
+ − 393 /* Mapping between back references and groups (may not be
+ − 394 equivalent with shy groups). */
+ − 395 int *external_to_internal_register;
+ − 396
+ − 397 int external_to_internal_register_size;
+ − 398
428
+ − 399 /* [[[end pattern_buffer]]] */
+ − 400 };
+ − 401
+ − 402 typedef struct re_pattern_buffer regex_t;
+ − 403
+ − 404 /* Type for byte offsets within the string. POSIX mandates this. */
+ − 405 typedef int regoff_t;
+ − 406
+ − 407
+ − 408 /* This is the structure we store register match data in. See
+ − 409 regex.texinfo for a full description of what registers match. */
+ − 410 struct re_registers
+ − 411 {
647
+ − 412 int num_regs;
428
+ − 413 regoff_t *start;
+ − 414 regoff_t *end;
+ − 415 };
+ − 416
+ − 417
+ − 418 /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+ − 419 `re_match_2' returns information about at least this many registers
+ − 420 the first time a `regs' structure is passed. */
+ − 421 #ifndef RE_NREGS
+ − 422 #define RE_NREGS 30
+ − 423 #endif
+ − 424
+ − 425
+ − 426 /* POSIX specification for registers. Aside from the different names than
+ − 427 `re_registers', POSIX uses an array of structures, instead of a
+ − 428 structure of arrays. */
+ − 429 typedef struct
+ − 430 {
+ − 431 regoff_t rm_so; /* Byte offset from string's start to substring's start. */
+ − 432 regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
+ − 433 } regmatch_t;
+ − 434
+ − 435 /* Declarations for routines. */
+ − 436
+ − 437 /* Sets the current default syntax to SYNTAX, and return the old syntax.
+ − 438 You can also simply assign to the `re_syntax_options' variable. */
+ − 439 reg_syntax_t re_set_syntax (reg_syntax_t syntax);
+ − 440
+ − 441 /* Compile the regular expression PATTERN, with length LENGTH
+ − 442 and syntax given by the global `re_syntax_options', into the buffer
+ − 443 BUFFER. Return NULL if successful, and an error string if not. */
442
+ − 444 const char *re_compile_pattern (const char *pattern, int length,
428
+ − 445 struct re_pattern_buffer *buffer);
+ − 446
+ − 447
+ − 448 /* Compile a fastmap for the compiled pattern in BUFFER; used to
+ − 449 accelerate searches. Return 0 if successful and -2 if was an
+ − 450 internal error. */
+ − 451 int re_compile_fastmap (struct re_pattern_buffer *buffer);
+ − 452
+ − 453
+ − 454 /* Search in the string STRING (with length LENGTH) for the pattern
+ − 455 compiled into BUFFER. Start searching at position START, for RANGE
+ − 456 characters. Return the starting position of the match, -1 for no
+ − 457 match, or -2 for an internal error. Also return register
+ − 458 information in REGS (if REGS and BUFFER->no_sub are nonzero). */
442
+ − 459 int re_search (struct re_pattern_buffer *buffer, const char *string,
428
+ − 460 int length, int start, int range,
+ − 461 struct re_registers *regs);
+ − 462
+ − 463
+ − 464 /* Like `re_search', but search in the concatenation of STRING1 and
+ − 465 STRING2. Also, stop searching at index START + STOP. */
442
+ − 466 int re_search_2 (struct re_pattern_buffer *buffer, const char *string1,
+ − 467 int length1, const char *string2, int length2, int start,
428
+ − 468 int range, struct re_registers *regs, int stop);
+ − 469
+ − 470
+ − 471 /* Like `re_search', but return how many characters in STRING the regexp
+ − 472 in BUFFER matched, starting at position START. */
442
+ − 473 int re_match (struct re_pattern_buffer *buffer, const char *string,
428
+ − 474 int length, int start, struct re_registers *regs);
+ − 475
+ − 476
+ − 477 /* Relates to `re_match' as `re_search_2' relates to `re_search'. */
442
+ − 478 int re_match_2 (struct re_pattern_buffer *buffer, const char *string1,
+ − 479 int length1, const char *string2, int length2,
428
+ − 480 int start, struct re_registers *regs, int stop);
+ − 481
+ − 482
+ − 483 /* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+ − 484 ENDS. Subsequent matches using BUFFER and REGS will use this memory
+ − 485 for recording register information. STARTS and ENDS must be
+ − 486 allocated with malloc, and must each be at least `NUM_REGS * sizeof
+ − 487 (regoff_t)' bytes long.
+ − 488
+ − 489 If NUM_REGS == 0, then subsequent matches should allocate their own
+ − 490 register data.
+ − 491
+ − 492 Unless this function is called, the first search or match using
+ − 493 PATTERN_BUFFER will allocate its own register data, without
+ − 494 freeing the old data. */
+ − 495 void re_set_registers (struct re_pattern_buffer *buffer,
647
+ − 496 struct re_registers *regs, int num_regs,
428
+ − 497 regoff_t *starts, regoff_t *ends);
+ − 498
+ − 499 #ifdef _REGEX_RE_COMP
+ − 500 /* 4.2 bsd compatibility. */
442
+ − 501 char *re_comp (const char *);
+ − 502 int re_exec (const char *);
428
+ − 503 #endif
+ − 504
+ − 505 /* POSIX compatibility. */
442
+ − 506 int regcomp (regex_t *preg, const char *pattern, int cflags);
+ − 507 int regexec (const regex_t *preg, const char *string, size_t nmatch,
428
+ − 508 regmatch_t pmatch[], int eflags);
442
+ − 509 size_t regerror (int errcode, const regex_t *preg, char *errbuf,
428
+ − 510 size_t errbuf_size);
+ − 511 void regfree (regex_t *preg);
+ − 512
440
+ − 513 #endif /* INCLUDED_regex_h_ */