1 use onig_sys;
2 use std::os::raw as libc;
3 
4 bitflags! {
5     /// Regex parsing and compilation options.
6     pub struct RegexOptions: onig_sys::OnigOptionType {
7         /// Default options.
8         const REGEX_OPTION_NONE
9             = onig_sys::ONIG_OPTION_NONE;
10         /// Ambiguity match on.
11         const REGEX_OPTION_IGNORECASE
12             = onig_sys::ONIG_OPTION_IGNORECASE;
13         /// Extended pattern form.
14         const REGEX_OPTION_EXTEND
15             = onig_sys::ONIG_OPTION_EXTEND;
16         /// `'.'` match with newline.
17         const REGEX_OPTION_MULTILINE
18             = onig_sys::ONIG_OPTION_MULTILINE;
19         /// `'^'` -> `'\A'`, `'$'` -> `'\Z'`.
20         const REGEX_OPTION_SINGLELINE
21             = onig_sys::ONIG_OPTION_SINGLELINE;
22         /// Find longest match.
23         const REGEX_OPTION_FIND_LONGEST
24             = onig_sys::ONIG_OPTION_FIND_LONGEST;
25         /// Ignore empty match.
26         const REGEX_OPTION_FIND_NOT_EMPTY
27             = onig_sys::ONIG_OPTION_FIND_NOT_EMPTY;
28         /// Clear `OPTION_SINGLELINE` which is enabled on
29         /// `SYNTAX_POSIX_BASIC`, `SYNTAX_POSIX_EXTENDED`,
30         /// `SYNTAX_PERL`, `SYNTAX_PERL_NG`, `SYNTAX_JAVA`.
31         const REGEX_OPTION_NEGATE_SINGLELINE
32             = onig_sys::ONIG_OPTION_NEGATE_SINGLELINE;
33         /// Only named group captured.
34         const REGEX_OPTION_DONT_CAPTURE_GROUP
35             = onig_sys::ONIG_OPTION_DONT_CAPTURE_GROUP;
36         /// Named and no-named group captured.
37         const REGEX_OPTION_CAPTURE_GROUP
38             = onig_sys::ONIG_OPTION_CAPTURE_GROUP;
39     }
40 }
41 
42 bitflags! {
43     /// Regex evaluation options.
44     pub struct SearchOptions: onig_sys::OnigOptionType {
45         /// Default options.
46         const SEARCH_OPTION_NONE
47             = onig_sys::ONIG_OPTION_NONE;
48         /// String head isn't considered as begin of line.
49         const SEARCH_OPTION_NOTBOL
50             = onig_sys::ONIG_OPTION_NOTBOL;
51         /// String end isn't considered as end of line.
52         const SEARCH_OPTION_NOTEOL
53             = onig_sys::ONIG_OPTION_NOTEOL;
54     }
55 }
56 
57 bitflags! {
58     /// Defines the different operators allowed within a regex syntax.
59     pub struct SyntaxOperator: u64 {
60         /// `.`
61         const SYNTAX_OPERATOR_DOT_ANYCHAR
62             = (onig_sys::ONIG_SYN_OP_DOT_ANYCHAR as u64);
63         /// `*`
64         const SYNTAX_OPERATOR_ASTERISK_ZERO_INF
65             = (onig_sys::ONIG_SYN_OP_ASTERISK_ZERO_INF as u64);
66         /// `+`
67         const SYNTAX_OPERATOR_PLUS_ONE_INF
68             = (onig_sys::ONIG_SYN_OP_PLUS_ONE_INF as u64);
69         /// `?`
70         const SYNTAX_OPERATOR_QMARK_ZERO_ONE
71             = (onig_sys::ONIG_SYN_OP_QMARK_ZERO_ONE as u64);
72         /// `{lower,upper}`
73         const SYNTAX_OPERATOR_BRACE_INTERVAL
74             = (onig_sys::ONIG_SYN_OP_BRACE_INTERVAL as u64);
75         /// `\{lower,upper\}`
76         const SYNTAX_OPERATOR_ESC_BRACE_INTERVAL
77             = (onig_sys::ONIG_SYN_OP_ESC_BRACE_INTERVAL as u64);
78         /// `|`
79         const SYNTAX_OPERATOR_VBAR_ALT
80             = (onig_sys::ONIG_SYN_OP_VBAR_ALT as u64);
81         /// `\|`
82         const SYNTAX_OPERATOR_ESC_VBAR_ALT
83             = (onig_sys::ONIG_SYN_OP_ESC_VBAR_ALT as u64);
84         /// `(...)`
85         const SYNTAX_OPERATOR_LPAREN_SUBEXP
86             = (onig_sys::ONIG_SYN_OP_LPAREN_SUBEXP as u64);
87         /// `\(...\)`
88         const SYNTAX_OPERATOR_ESC_LPAREN_SUBEXP
89             = (onig_sys::ONIG_SYN_OP_ESC_LPAREN_SUBEXP as u64);
90         /// `\A, \Z, \z`
91         const SYNTAX_OPERATOR_ESC_AZ_BUF_ANCHOR
92             = (onig_sys::ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR as u64);
93         /// `\G`
94         const SYNTAX_OPERATOR_ESC_CAPITAL_G_BEGIN_ANCHOR
95             = (onig_sys::ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR as u64);
96         /// `\num`
97         const SYNTAX_OPERATOR_DECIMAL_BACKREF
98             = (onig_sys::ONIG_SYN_OP_DECIMAL_BACKREF as u64);
99         /// `[...]`
100         const SYNTAX_OPERATOR_BRACKET_CC
101             = (onig_sys::ONIG_SYN_OP_BRACKET_CC as u64);
102         /// `\w, \W`
103         const SYNTAX_OPERATOR_ESC_W_WORD
104             = (onig_sys::ONIG_SYN_OP_ESC_W_WORD as u64);
105         /// `\<. \>`
106         const SYNTAX_OPERATOR_ESC_LTGT_WORD_BEGIN_END
107             = (onig_sys::ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END as u64);
108         /// `\b, \B`
109         const SYNTAX_OPERATOR_ESC_B_WORD_BOUND
110             = (onig_sys::ONIG_SYN_OP_ESC_B_WORD_BOUND as u64);
111         /// `\s, \S`
112         const SYNTAX_OPERATOR_ESC_S_WHITE_SPACE
113             = (onig_sys::ONIG_SYN_OP_ESC_S_WHITE_SPACE as u64);
114         /// `\d, \D`
115         const SYNTAX_OPERATOR_ESC_D_DIGIT
116             = (onig_sys::ONIG_SYN_OP_ESC_D_DIGIT as u64);
117         /// `^, $`
118         const SYNTAX_OPERATOR_LINE_ANCHOR
119             = (onig_sys::ONIG_SYN_OP_LINE_ANCHOR as u64);
120         /// `[:xxxx:]`
121         const SYNTAX_OPERATOR_POSIX_BRACKET
122             = (onig_sys::ONIG_SYN_OP_POSIX_BRACKET as u64);
123         /// `??,*?,+?,{n,m}?`
124         const SYNTAX_OPERATOR_QMARK_NON_GREEDY
125             = (onig_sys::ONIG_SYN_OP_QMARK_NON_GREEDY as u64);
126         /// `\n,\r,\t,\a ...`
127         const SYNTAX_OPERATOR_ESC_CONTROL_CHARS
128             = (onig_sys::ONIG_SYN_OP_ESC_CONTROL_CHARS as u64);
129         /// `\cx`
130         const SYNTAX_OPERATOR_ESC_C_CONTROL
131             = (onig_sys::ONIG_SYN_OP_ESC_C_CONTROL as u64);
132         /// `\OOO`
133         const SYNTAX_OPERATOR_ESC_OCTAL3
134             = (onig_sys::ONIG_SYN_OP_ESC_OCTAL3 as u64);
135         /// `\xHH`
136         const SYNTAX_OPERATOR_ESC_X_HEX2
137             = (onig_sys::ONIG_SYN_OP_ESC_X_HEX2 as u64);
138         /// `\x{7HHHHHHH}`
139         const SYNTAX_OPERATOR_ESC_X_BRACE_HEX8
140             = (onig_sys::ONIG_SYN_OP_ESC_X_BRACE_HEX8 as u64);
141         /// Variable meta characters
142         const SYNTAX_OPERATOR_VARIABLE_META_CHARACTERS
143             = (onig_sys::ONIG_SYN_OP_VARIABLE_META_CHARACTERS as u64);
144         /// `\Q...\E`
145         const SYNTAX_OPERATOR_ESC_CAPITAL_Q_QUOTE
146             = (onig_sys::ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE as u64) << 32;
147         /// `(?...)`
148         const SYNTAX_OPERATOR_QMARK_GROUP_EFFECT
149             = (onig_sys::ONIG_SYN_OP2_QMARK_GROUP_EFFECT as u64) << 32;
150         /// `(?imsx),(?-imsx)`
151         const SYNTAX_OPERATOR_OPTION_PERL
152             = (onig_sys::ONIG_SYN_OP2_OPTION_PERL as u64) << 32;
153         /// `(?imx), (?-imx)`
154         const SYNTAX_OPERATOR_OPTION_RUBY
155             = (onig_sys::ONIG_SYN_OP2_OPTION_RUBY as u64) << 32;
156         /// `?+,*+,++`
157         const SYNTAX_OPERATOR_PLUS_POSSESSIVE_REPEAT
158             = (onig_sys::ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT as u64) << 32;
159         /// `{n,m}+`
160         const SYNTAX_OPERATOR_PLUS_POSSESSIVE_INTERVAL
161             = (onig_sys::ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL as u64) << 32;
162         /// `[...&&..[..]..]`
163         const SYNTAX_OPERATOR_CCLASS_SET_OP
164             = (onig_sys::ONIG_SYN_OP2_CCLASS_SET_OP as u64) << 32;
165         /// `(?<name>...)`
166         const SYNTAX_OPERATOR_QMARK_LT_NAMED_GROUP
167             = (onig_sys::ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP as u64) << 32;
168         /// `\k<name>`
169         const SYNTAX_OPERATOR_ESC_K_NAMED_BACKREF
170             = (onig_sys::ONIG_SYN_OP2_ESC_K_NAMED_BACKREF as u64) << 32;
171         /// `\g<name>, \g<n>`
172         const SYNTAX_OPERATOR_ESC_G_SUBEXP_CALL
173             = (onig_sys::ONIG_SYN_OP2_ESC_G_SUBEXP_CALL as u64) << 32;
174         /// `(?@..),(?@<x>..)`
175         const SYNTAX_OPERATOR_ATMARK_CAPTURE_HISTORY
176             = (onig_sys::ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY as u64) << 32;
177         /// `\C-x`
178         const SYNTAX_OPERATOR_ESC_CAPITAL_C_BAR_CONTROL
179             = (onig_sys::ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL as u64) << 32;
180         /// `\M-x`
181         const SYNTAX_OPERATOR_ESC_CAPITAL_M_BAR_META
182             = (onig_sys::ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META as u64) << 32;
183         /// `\v as VTAB`
184         const SYNTAX_OPERATOR_ESC_V_VTAB
185             = (onig_sys::ONIG_SYN_OP2_ESC_V_VTAB as u64) << 32;
186         /// `\uHHHH`
187         const SYNTAX_OPERATOR_ESC_U_HEX4
188             = (onig_sys::ONIG_SYN_OP2_ESC_U_HEX4 as u64) << 32;
189         /// `\`, \'`
190         const SYNTAX_OPERATOR_ESC_GNU_BUF_ANCHOR
191             = (onig_sys::ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR as u64) << 32;
192         /// `\p{...}, \P{...}`
193         const SYNTAX_OPERATOR_ESC_P_BRACE_CHAR_PROPERTY
194             = (onig_sys::ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY as u64) << 32;
195         /// `\p{^..}, \P{^..}`
196         const SYNTAX_OPERATOR_ESC_P_BRACE_CIRCUMFLEX_NOT
197             = (onig_sys::ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT as u64) << 32;
198         /// `\h, \H`
199         const SYNTAX_OPERATOR_ESC_H_XDIGIT
200             = (onig_sys::ONIG_SYN_OP2_ESC_H_XDIGIT as u64) << 32;
201         /// `\`
202         const SYNTAX_OPERATOR_INEFFECTIVE_ESCAPE
203             = (onig_sys::ONIG_SYN_OP2_INEFFECTIVE_ESCAPE as u64) << 32;
204     }
205 }
206 
207 bitflags! {
208     /// Defines the behaviour of regex operators.
209     pub struct SyntaxBehavior: onig_sys::OnigSyntaxBehavior {
210         /// `?, *, +, {n,m}`
211         const SYNTAX_BEHAVIOR_CONTEXT_INDEP_REPEAT_OPS
212             = onig_sys::ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS;
213         /// `error or ignore`
214         const SYNTAX_BEHAVIOR_CONTEXT_INVALID_REPEAT_OPS
215             = onig_sys::ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS;
216         /// `...)...`
217         const SYNTAX_BEHAVIOR_ALLOW_UNMATCHED_CLOSE_SUBEXP
218             = onig_sys::ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP;
219         /// `{???`
220         const SYNTAX_BEHAVIOR_ALLOW_INVALID_INTERVAL
221             = onig_sys::ONIG_SYN_ALLOW_INVALID_INTERVAL;
222         /// `{,n} => {0,n}`
223         const SYNTAX_BEHAVIOR_ALLOW_INTERVAL_LOW_ABBREV
224             = onig_sys::ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV;
225         /// `/(\1)/,/\1()/ ..`
226         const SYNTAX_BEHAVIOR_STRICT_CHECK_BACKREF
227             = onig_sys::ONIG_SYN_STRICT_CHECK_BACKREF;
228         /// `(?<=a|bc)`
229         const SYNTAX_BEHAVIOR_DIFFERENT_LEN_ALT_LOOK_BEHIND
230             = onig_sys::ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND;
231         /// See Oniguruma documenation
232         const SYNTAX_BEHAVIOR_CAPTURE_ONLY_NAMED_GROUP
233             = onig_sys::ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP;
234         /// `(?<x>)(?<x>)`
235         const SYNTAX_BEHAVIOR_ALLOW_MULTIPLEX_DEFINITION_NAME
236             = onig_sys::ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME;
237         /// `a{n}?=(?:a{n})?`
238         const SYNTAX_BEHAVIOR_FIXED_INTERVAL_IS_GREEDY_ONLY
239             = onig_sys::ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY;
240         /// `[^...]`
241         const SYNTAX_BEHAVIOR_NOT_NEWLINE_IN_NEGATIVE_CC
242             = onig_sys::ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC;
243         /// `[..\w..] etc..`
244         const SYNTAX_BEHAVIOR_BACKSLASH_ESCAPE_IN_CC
245             = onig_sys::ONIG_SYN_BACKSLASH_ESCAPE_IN_CC;
246         /// `[0-9-a]=[0-9\-a]`
247         const SYNTAX_BEHAVIOR_ALLOW_DOUBLE_RANGE_OP_IN_CC
248             = onig_sys::ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC;
249         /// `[,-,]`
250         const SYNTAX_BEHAVIOR_WARN_CC_OP_NOT_ESCAPED
251             = onig_sys::ONIG_SYN_WARN_CC_OP_NOT_ESCAPED;
252         /// `(?:a*)+`
253         const SYNTAX_BEHAVIOR_WARN_REDUNDANT_NESTED_REPEAT
254             = onig_sys::ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT;
255     }
256 }
257 
258 bitflags! {
259     /// The order in which traverse callbacks are invoked
260     pub struct TraverseCallbackAt: libc::c_int {
261         /// Callback before children are wallked
262         const CALLBACK_AT_FIRST =
263             onig_sys::ONIG_TRAVERSE_CALLBACK_AT_FIRST;
264         /// Callback after children are walked
265         const CALLBACK_AT_LAST =
266             onig_sys::ONIG_TRAVERSE_CALLBACK_AT_LAST;
267         /// Callback both before and after children are walked.
268         const CALLBACK_AT_BOTH =
269             onig_sys::ONIG_TRAVERSE_CALLBACK_AT_BOTH;
270     }
271 }
272 
273 bitflags! {
274     /// Syntax meta character types
275     pub struct MetaCharType: libc::c_uint {
276         /// The escape charater for this syntax
277         const META_CHAR_ESCAPE = onig_sys::ONIG_META_CHAR_ESCAPE;
278         /// The any (.) character for this syntax.
279         const META_CHAR_ANYCHAR =  onig_sys::ONIG_META_CHAR_ANYCHAR;
280         /// The any number of repeats (*) character for this syntax.
281         const META_CHAR_ANYTIME =  onig_sys::ONIG_META_CHAR_ANYTIME;
282         /// The optinoal (?) chracter for this syntax
283         const META_CHAR_ZERO_OR_ONE_TIME =  onig_sys::ONIG_META_CHAR_ZERO_OR_ONE_TIME;
284         /// The at least once (+) character for this syntax
285         const META_CHAR_ONE_OR_MORE_TIME =  onig_sys::ONIG_META_CHAR_ONE_OR_MORE_TIME;
286         /// The glob character for this syntax (.*)
287         const META_CHAR_ANYCHAR_ANYTIME =  onig_sys::ONIG_META_CHAR_ANYCHAR_ANYTIME;
288     }
289 }
290