]> jfr.im git - irc/evilnet/x3.git/blame - rx/inst-rxposix.h
Merge pull request #25 from NX-Andro/master
[irc/evilnet/x3.git] / rx / inst-rxposix.h
CommitLineData
d76ed9a9 1/* classes: h_files */
2
3#ifndef INST_RXPOSIXH
4#define INST_RXPOSIXH
5/* Copyright (C) 1995, 1996 Tom Lord
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Library General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public License
18 * along with this software; see the file COPYING. If not, write to
19 * the Free Software Foundation, 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23\f
24
25struct rx_posix_regex
26{
27 struct rexp_node * pattern;
28 struct rexp_node ** subexps;
29 size_t re_nsub;
30 unsigned char * translate;
31 unsigned int newline_anchor:1;/* If true, an anchor at a newline matches.*/
32 unsigned int no_sub:1; /* If set, don't return register offsets. */
33 unsigned int is_anchored:1;
34 unsigned int is_nullable:1;
35 unsigned char fastmap[256];
36 void * owner_data;
37};
38
39typedef struct rx_posix_regex regex_t;
40
41/* Type for byte offsets within the string. POSIX mandates this. */
42typedef int regoff_t;
43
44typedef struct rx_registers
45{
46 regoff_t rm_so; /* Byte offset from string's start to substring's start. */
47 regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
48 regoff_t final_tag; /* data from the cut operator (only pmatch[0]) */
49} regmatch_t;
50
51\f
52
53/* If any error codes are removed, changed, or added, update the
54 * `rx_error_msg' table.
55 */
56#define REG_NOERROR 0 /* Success. */
57#define REG_NOMATCH 1 /* Didn't find a match (for regexec). */
58
59/* POSIX regcomp return error codes.
60 * (In the order listed in the standard.)
61 */
62#define REG_BADPAT 2 /* Invalid pattern. */
63#define REG_ECOLLATE 3 /* Not implemented. */
64#define REG_ECTYPE 4 /* Invalid character class name. */
65#define REG_EESCAPE 5 /* Trailing backslash. */
66#define REG_ESUBREG 6 /* Invalid back reference. */
67#define REG_EBRACK 7 /* Unmatched left bracket. */
68#define REG_EPAREN 8 /* Parenthesis imbalance. */
69#define REG_EBRACE 9 /* Unmatched \{. */
70#define REG_BADBR 10 /* Invalid contents of \{\}. */
71#define REG_ERANGE 11 /* Invalid range end. */
72#define REG_ESPACE 12 /* Ran out of memory. */
73#define REG_BADRPT 13 /* No preceding re for repetition op. */
74
75/* Error codes we've added.
76 */
77#define REG_EEND 14 /* Premature end. */
78#define REG_ESIZE 15 /* Compiled pattern bigger than 2^16 bytes. */
79#define REG_ERPAREN 16 /* Unmatched ) or \); not returned from regcomp. */
80
81\f
82/*
83 * POSIX `cflags' bits (i.e., information for `regcomp').
84 */
85
86/* If this bit is set, then use extended regular expression syntax.
87 * If not set, then use basic regular expression syntax.
88 */
89#define REG_EXTENDED 1
90
91/* If this bit is set, then ignore case when matching.
92 * If not set, then case is significant.
93 */
94#define REG_ICASE (REG_EXTENDED << 1)
95
96/* If this bit is set, then anchors do not match at newline
97 * characters in the string.
98 * If not set, then anchors do match at newlines.
99 */
100#define REG_NEWLINE (REG_ICASE << 1)
101
102/* If this bit is set, then report only success or fail in regexec.
103 * If not set, then returns differ between not matching and errors.
104 */
105#define REG_NOSUB (REG_NEWLINE << 1)
106
107
108/*
109 * POSIX `eflags' bits (i.e., information for regexec).
110 */
111
112/* If this bit is set, then the beginning-of-line operator doesn't match
113 * the beginning of the string (presumably because it's not the
114 * beginning of a line).
115 * If not set, then the beginning-of-line operator does match the
116 * beginning of the string.
117 */
118#define REG_NOTBOL 1
119
120/* Like REG_NOTBOL, except for the end-of-line.
121 */
122#define REG_NOTEOL (REG_NOTBOL << 1)
123
124/* For regnexec only. Allocate register storage and return that. */
125#define REG_ALLOC_REGS (REG_NOTEOL << 1)
126
127\f
128#ifdef __STDC__
129extern int regncomp (regex_t * preg,
130 const char * pattern, int len,
131 int cflags);
132extern int regcomp (regex_t * preg, const char * pattern, int cflags);
133extern size_t regerror (int errcode,
134 const regex_t *preg,
135 char *errbuf, size_t errbuf_size);
136extern int regnexec (const regex_t *preg,
137 const char *string, int len,
138 size_t nmatch, regmatch_t **pmatch,
139 int eflags);
140extern int regexec (const regex_t *preg,
141 const char *string,
142 size_t nmatch, regmatch_t pmatch[],
143 int eflags);
144extern void regfree (regex_t *preg);
145
146#else /* STDC */
147extern int regncomp ();
148extern int regcomp ();
149extern size_t regerror ();
150extern int regnexec ();
151extern int regexec ();
152extern void regfree ();
153
154#endif /* STDC */
155#endif /* INST_RXPOSIXH */