1 #![allow(clippy::identity_op)]
2 
3 use std::os::raw::{c_int, c_uint};
4 use super::{OnigCaseFoldType, OnigCtype, OnigDistance, OnigOptionType, OnigSyntaxBehavior,
5             OnigSyntaxOp, OnigSyntaxOp2};
6 
7 macro_rules! define_consts {
8     ($typ:ty, $( $name:ident = $value:expr );* ) => {
9         $(pub const $name: $typ = $value;)*
10     };
11 }
12 
13 // Character types
14 define_consts!(OnigCtype,
15     ONIGENC_CTYPE_NEWLINE = 0;
16     ONIGENC_CTYPE_ALPHA   = 1;
17     ONIGENC_CTYPE_BLANK   = 2;
18     ONIGENC_CTYPE_CNTRL   = 3;
19     ONIGENC_CTYPE_DIGIT   = 4;
20     ONIGENC_CTYPE_GRAPH   = 5;
21     ONIGENC_CTYPE_LOWER   = 6;
22     ONIGENC_CTYPE_PRINT   = 7;
23     ONIGENC_CTYPE_PUNCT   = 8;
24     ONIGENC_CTYPE_SPACE   = 9;
25     ONIGENC_CTYPE_UPPER   = 10;
26     ONIGENC_CTYPE_XDIGIT  = 11;
27     ONIGENC_CTYPE_WORD    = 12;
28     ONIGENC_CTYPE_ALNUM   = 13;  /* alpha || digit */
29     ONIGENC_CTYPE_ASCII   = 14;
30     ONIGENC_MAX_STD_CTYPE = ONIGENC_CTYPE_ASCII
31 );
32 
33 // Options
34 define_consts!(OnigOptionType,
35 // Compile time
36     ONIG_OPTION_DEFAULT            = ONIG_OPTION_NONE;
37     ONIG_OPTION_NONE               = 0;
38     ONIG_OPTION_IGNORECASE         = 1;
39     ONIG_OPTION_EXTEND             = ONIG_OPTION_IGNORECASE         << 1;
40     ONIG_OPTION_MULTILINE          = ONIG_OPTION_EXTEND             << 1;
41     ONIG_OPTION_SINGLELINE         = ONIG_OPTION_MULTILINE          << 1;
42     ONIG_OPTION_FIND_LONGEST       = ONIG_OPTION_SINGLELINE         << 1;
43     ONIG_OPTION_FIND_NOT_EMPTY     = ONIG_OPTION_FIND_LONGEST       << 1;
44     ONIG_OPTION_NEGATE_SINGLELINE  = ONIG_OPTION_FIND_NOT_EMPTY     << 1;
45     ONIG_OPTION_DONT_CAPTURE_GROUP = ONIG_OPTION_NEGATE_SINGLELINE  << 1;
46     ONIG_OPTION_CAPTURE_GROUP      = ONIG_OPTION_DONT_CAPTURE_GROUP << 1;
47 // Search time
48     ONIG_OPTION_NOTBOL             = ONIG_OPTION_CAPTURE_GROUP      << 1;
49     ONIG_OPTION_NOTEOL             = ONIG_OPTION_NOTBOL             << 1;
50     ONIG_OPTION_POSIX_REGION       = ONIG_OPTION_NOTEOL             << 1;
51     ONIG_OPTION_MAXBIT             = ONIG_OPTION_POSIX_REGION  /* limit */
52 );
53 
54 // Syntax operators
55 define_consts!(OnigSyntaxOp,
56     ONIG_SYN_OP_VARIABLE_META_CHARACTERS   = 1 << 0;
57     ONIG_SYN_OP_DOT_ANYCHAR                = 1 << 1;   /* . */
58     ONIG_SYN_OP_ASTERISK_ZERO_INF          = 1 << 2;   /* * */
59     ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF      = 1 << 3;
60     ONIG_SYN_OP_PLUS_ONE_INF               = 1 << 4;   /* + */
61     ONIG_SYN_OP_ESC_PLUS_ONE_INF           = 1 << 5;
62     ONIG_SYN_OP_QMARK_ZERO_ONE             = 1 << 6;   /* ? */
63     ONIG_SYN_OP_ESC_QMARK_ZERO_ONE         = 1 << 7;
64     ONIG_SYN_OP_BRACE_INTERVAL             = 1 << 8;   /* {lower,upper} */
65     ONIG_SYN_OP_ESC_BRACE_INTERVAL         = 1 << 9;   /* \{lower,upper\} */
66     ONIG_SYN_OP_VBAR_ALT                   = 1 << 10;   /* | */
67     ONIG_SYN_OP_ESC_VBAR_ALT               = 1 << 11;  /* \| */
68     ONIG_SYN_OP_LPAREN_SUBEXP              = 1 << 12;  /* (...)   */
69     ONIG_SYN_OP_ESC_LPAREN_SUBEXP          = 1 << 13;  /* \(...\) */
70     ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR          = 1 << 14;  /* \A, \Z, \z */
71     ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR = 1 << 15;  /* \G     */
72     ONIG_SYN_OP_DECIMAL_BACKREF            = 1 << 16;  /* \num   */
73     ONIG_SYN_OP_BRACKET_CC                 = 1 << 17;  /* [...]  */
74     ONIG_SYN_OP_ESC_W_WORD                 = 1 << 18;  /* \w, \W */
75     ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END    = 1 << 19;  /* \<. \> */
76     ONIG_SYN_OP_ESC_B_WORD_BOUND           = 1 << 20;  /* \b, \B */
77     ONIG_SYN_OP_ESC_S_WHITE_SPACE          = 1 << 21;  /* \s, \S */
78     ONIG_SYN_OP_ESC_D_DIGIT                = 1 << 22;  /* \d, \D */
79     ONIG_SYN_OP_LINE_ANCHOR                = 1 << 23;  /* ^, $   */
80     ONIG_SYN_OP_POSIX_BRACKET              = 1 << 24;  /* [:xxxx:] */
81     ONIG_SYN_OP_QMARK_NON_GREEDY           = 1 << 25;  /* ??,*?,+?,{n,m}? */
82     ONIG_SYN_OP_ESC_CONTROL_CHARS          = 1 << 26;  /* \n,\r,\t,\a ... */
83     ONIG_SYN_OP_ESC_C_CONTROL              = 1 << 27;  /* \cx  */
84     ONIG_SYN_OP_ESC_OCTAL3                 = 1 << 28;  /* \OOO */
85     ONIG_SYN_OP_ESC_X_HEX2                 = 1 << 29;  /* \xHH */
86     ONIG_SYN_OP_ESC_X_BRACE_HEX8           = 1 << 30   /* \x{7HHHHHHH} */
87 );
88 
89 // Syntax operators 2
90 define_consts!(OnigSyntaxOp2,
91     ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        = 1 << 0;  /* \Q...\E */
92     ONIG_SYN_OP2_QMARK_GROUP_EFFECT         = 1 << 1;  /* (?...) */
93     ONIG_SYN_OP2_OPTION_PERL                = 1 << 2;  /* (?imsx),(?-imsx) */
94     ONIG_SYN_OP2_OPTION_RUBY                = 1 << 3;  /* (?imx), (?-imx)  */
95     ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT     = 1 << 4;  /* ?+,*+,++ */
96     ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL   = 1 << 5;  /* {n,m}+   */
97     ONIG_SYN_OP2_CCLASS_SET_OP              = 1 << 6;  /* [...&&..[..]..] */
98     ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       = 1 << 7;  /* (?<name>...) */
99     ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        = 1 << 8;  /* \k<name> */
100     ONIG_SYN_OP2_ESC_G_SUBEXP_CALL          = 1 << 9;  /* \g<name>, \g<n> */
101     ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY     = 1 << 10; /* (?@..),(?@<x>..) */
102     ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL  = 1 << 11; /* \C-x */
103     ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META     = 1 << 12; /* \M-x */
104     ONIG_SYN_OP2_ESC_V_VTAB                 = 1 << 13; /* \v as VTAB */
105     ONIG_SYN_OP2_ESC_U_HEX4                 = 1 << 14; /* \uHHHH */
106     ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR         = 1 << 15; /* \`, \' */
107     ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  = 1 << 16; /* \p{...}, \P{...} */
108     ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT = 1 << 17; /* \p{^..}, \P{^..} */
109     ONIG_SYN_OP2_ESC_H_XDIGIT               = 1 << 19; /* \h, \H */
110     ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         = 1 << 20 /* \ */
111 );
112 
113 // Syntax behavior
114 define_consts!(OnigSyntaxBehavior,
115     ONIG_SYN_CONTEXT_INDEP_ANCHORS           = 1 << 31; /* not implemented */
116     ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS        = 1 << 0;  /* ?, *, +, {n,m} */
117     ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS      = 1 << 1;  /* error or ignore */
118     ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP    = 1 << 2;  /* ...)... */
119     ONIG_SYN_ALLOW_INVALID_INTERVAL          = 1 << 3;  /* {??? */
120     ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV       = 1 << 4;  /* {,n} => {0,n} */
121     ONIG_SYN_STRICT_CHECK_BACKREF            = 1 << 5;  /* /(\1)/,/\1()/ ..*/
122     ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND   = 1 << 6;  /* (?<=a|bc) */
123     ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP        = 1 << 7;  /* see doc/RE */
124     ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME = 1 << 8;  /* (?<x>)(?<x>) */
125     ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY   = 1 << 9;  /* a{n}?=(?:a{n})? */
126     ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC      = 1 << 20; /* [^...] */
127     ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          = 1 << 21; /* [..\w..] etc.. */
128     ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         = 1 << 22;
129     ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     = 1 << 23; /* [0-9-a]=[0-9\-a] */
130     ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          = 1 << 24; /* [,-,] */
131     ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    = 1 << 25 /* (?:a*)+ */
132 );
133 
134 // Returns
135 define_consts!(c_int,
136     ONIG_NORMAL = 0;
137     ONIG_MISMATCH = -1;
138     ONIG_NO_SUPPORT_CONFIG = -2;
139     ONIGERR_MEMORY = -5;
140     ONIGERR_TYPE_BUG = -6;
141     ONIGERR_PARSER_BUG = -11;
142     ONIGERR_STACK_BUG = -12;
143     ONIGERR_UNDEFINED_BYTECODE = -13;
144     ONIGERR_UNEXPECTED_BYTECODE = -14;
145     ONIGERR_MATCH_STACK_LIMIT_OVER = -15;
146     ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED = -21;
147     ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR = -22;
148     ONIGERR_INVALID_ARGUMENT = -30;
149     ONIGERR_END_PATTERN_AT_LEFT_BRACE = -100;
150     ONIGERR_END_PATTERN_AT_LEFT_BRACKET = -101;
151     ONIGERR_EMPTY_CHAR_CLASS = -102;
152     ONIGERR_PREMATURE_END_OF_CHAR_CLASS = -103;
153     ONIGERR_END_PATTERN_AT_ESCAPE = -104;
154     ONIGERR_END_PATTERN_AT_META = -105;
155     ONIGERR_END_PATTERN_AT_CONTROL = -106;
156     ONIGERR_META_CODE_SYNTAX = -108;
157     ONIGERR_CONTROL_CODE_SYNTAX = -109;
158     ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE = -110;
159     ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE = -111;
160     ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS = -112;
161     ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED = -113;
162     ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID = -114;
163     ONIGERR_NESTED_REPEAT_OPERATOR = -115;
164     ONIGERR_UNMATCHED_CLOSE_PARENTHESIS = -116;
165     ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS = -117;
166     ONIGERR_END_PATTERN_IN_GROUP = -118;
167     ONIGERR_UNDEFINED_GROUP_OPTION = -119;
168     ONIGERR_INVALID_POSIX_BRACKET_TYPE = -121;
169     ONIGERR_INVALID_LOOK_BEHIND_PATTERN = -122;
170     ONIGERR_INVALID_REPEAT_RANGE_PATTERN = -123;
171     ONIGERR_TOO_BIG_NUMBER = -200;
172     ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE = -201;
173     ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE = -202;
174     ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS = -203;
175     ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE = -204;
176     ONIGERR_TOO_MANY_MULTI_BYTE_RANGES = -205;
177     ONIGERR_TOO_SHORT_MULTI_BYTE_STRING = -206;
178     ONIGERR_TOO_BIG_BACKREF_NUMBER = -207;
179     ONIGERR_INVALID_BACKREF = -208;
180     ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED = -209;
181     ONIGERR_TOO_LONG_WIDE_CHAR_VALUE = -212;
182     ONIGERR_EMPTY_GROUP_NAME = -214;
183     ONIGERR_INVALID_GROUP_NAME = -215;
184     ONIGERR_INVALID_CHAR_IN_GROUP_NAME = -216;
185     ONIGERR_UNDEFINED_NAME_REFERENCE = -217;
186     ONIGERR_UNDEFINED_GROUP_REFERENCE = -218;
187     ONIGERR_MULTIPLEX_DEFINED_NAME = -219;
188     ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL = -220;
189     ONIGERR_NEVER_ENDING_RECURSION = -221;
190     ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY = -222;
191     ONIGERR_INVALID_CHAR_PROPERTY_NAME = -223;
192     ONIGERR_INVALID_CODE_POINT_VALUE = -400;
193     ONIGERR_INVALID_WIDE_CHAR_VALUE = -400;
194     ONIGERR_TOO_BIG_WIDE_CHAR_VALUE = -401;
195     ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION = -402;
196     ONIGERR_INVALID_COMBINATION_OF_OPTIONS = -403;
197     ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT = -1001
198 );
199 
200 // OnigRegexType->state
201 define_consts!(c_int,
202     ONIG_STATE_NORMAL     = 0;
203     ONIG_STATE_SEARCHING  = 1;
204     ONIG_STATE_COMPILING  = -1;
205     ONIG_STATE_MODIFY     = -2
206 );
207 
208 // Capture tree traverse callback returns
209 define_consts!(c_int,
210     ONIG_TRAVERSE_CALLBACK_AT_FIRST = 1;
211     ONIG_TRAVERSE_CALLBACK_AT_LAST  = 2;
212     ONIG_TRAVERSE_CALLBACK_AT_BOTH  = 1 | 2
213 );
214 
215 // Meta character specifiers, see onig_set_meta_char()
216 define_consts!(c_uint,
217     ONIG_META_CHAR_ESCAPE           = 0;
218     ONIG_META_CHAR_ANYCHAR          = 1;
219     ONIG_META_CHAR_ANYTIME          = 2;
220     ONIG_META_CHAR_ZERO_OR_ONE_TIME = 3;
221     ONIG_META_CHAR_ONE_OR_MORE_TIME = 4;
222     ONIG_META_CHAR_ANYCHAR_ANYTIME  = 5;
223     ONIG_INEFFECTIVE_META_CHAR      = 0
224 );
225 
226 // Infinite distance
227 define_consts!(OnigDistance, ONIG_INFINITE_DISTANCE = !0);
228 
229 // Case fold flags
230 define_consts!(OnigCaseFoldType,
231     ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN   = 3;
232     ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM   = 13;
233     ONIGENC_CASE_FOLD_TURKISH_AZERI       = 1 << 20;
234     ONIGENC_CASE_FOLD_MIN                 = 1 << 30;
235     INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR = 1 << 30
236 );
237 
238 // Work size, config parameters and constants
239 define_consts!(c_int,
240     ONIGENC_CODE_TO_MBC_MAXLEN     = 7;
241     ONIGENC_MBC_CASE_FOLD_MAXLEN   = 18;
242     ONIG_NREGION                   = 10;
243     ONIG_MAX_BACKREF_NUM           = 1000;
244     ONIG_MAX_REPEAT_NUM            = 100_000;
245     ONIG_MAX_MULTI_BYTE_RANGES_NUM = 10_000;
246     ONIG_MAX_ERROR_MESSAGE_LEN     = 90;
247     ONIG_MAX_CAPTURE_HISTORY_GROUP = 31;
248     ONIG_REGION_NOTPOS             = -1;
249     ONIG_CHAR_TABLE_SIZE           = 256
250 );
251