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