onig_regset/
flags.rs

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