1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
const c = @import("c.zig").c;
const Encoding = @import("types.zig").Encoding;
/// Maximum error message length.
pub const MAX_ERROR_LEN = c.ONIG_MAX_ERROR_MESSAGE_LEN;
/// Convert an Oniguruma error to an error.
pub fn convertError(code: c_int) !c_int {
if (code >= 0) return code;
inline for (error_code_map) |m| {
if (m[1] == code) return m[0];
}
return Error.Unknown;
}
/// Convert an error code to a string. buf must be at least
/// MAX_ERROR_LEN bytes long.
pub fn errorString(buf: []u8, code: c_int) ![]u8 {
const len = c.onig_error_code_to_str(buf.ptr, code);
return buf[0..@intCast(len)];
}
/// The Oniguruma error info type, matching the C type exactly.
pub const ErrorInfo = extern struct {
encoding: *Encoding,
par: [*]u8,
par_end: [*]u8,
};
/// All possible Oniguruma errors.
pub const Error = error{
Mismatch,
NoSupportConfig,
Abort,
Memory,
TypeBug,
ParserBug,
StackBug,
UndefinedBytecode,
UnexpectedBytecode,
MatchStackLimitOver,
ParseDepthLimitOver,
RetryLimitInMatchOver,
RetryLimitInSearchOver,
SubexpCallLimitInSearchOver,
DefaultEncodingIsNotSet,
SpecifiedEncodingCantConvertToWideChar,
FailToInitialize,
InvalidArgument,
EndPatternAtLeftBrace,
EndPatternAtLeftBracket,
EmptyCharClass,
PrematureEndOfCharClass,
EndPatternAtEscape,
EndPatternAtMeta,
EndPatternAtControl,
MetaCodeSyntax,
ControlCodeSyntax,
CharClassValueAtEndOfRange,
CharClassValueAtStartOfRange,
UnmatchedRangeSpecifierInCharClass,
TargetOfRepeatOperatorNotSpecified,
TargetOfRepeatOperatorInvalid,
NestedRepeatOperator,
UnmatchedCloseParenthesis,
EndPatternWithUnmatchedParenthesis,
EndPatternInGroup,
UndefinedGroupOption,
InvalidGroupOption,
InvalidPosixBracketType,
InvalidLookBehindPattern,
InvalidRepeatRangePattern,
TooBigNumber,
TooBigNumberForRepeatRange,
UpperSmallerThanLowerInRepeatRange,
EmptyRangeInCharClass,
MismatchCodeLengthInClassRange,
TooManyMultiByteRanges,
TooShortMultiByteString,
TooBigBackrefNumber,
InvalidBackref,
NumberedBackrefOrCallNotAllowed,
TooManyCaptures,
TooLongWideCharValue,
UndefinedOperator,
EmptyGroupName,
InvalidGroupName,
InvalidCharInGroupName,
UndefinedNameReference,
UndefinedGroupReference,
MultiplexDefinedName,
MultiplexDefinitionNameCall,
NeverEndingRecursion,
GroupNumberOverForCaptureHistory,
InvalidCharPropertyName,
InvalidIfElseSyntax,
InvalidAbsentGroupPattern,
InvalidAbsentGroupGeneratorPattern,
InvalidCalloutPattern,
InvalidCalloutName,
UndefinedCalloutName,
InvalidCalloutBody,
InvalidCalloutTagName,
InvalidCalloutArg,
InvalidCodePointValue,
InvalidWideCharValue,
TooBigWideCharValue,
NotSupportedEncodingCombination,
InvalidCombinationOfOptions,
TooManyUserDefinedObjects,
TooLongPropertyName,
VeryInefficientPattern,
LibraryIsNotInitialized,
Unknown,
};
const error_code_map: []const struct { Error, c_int } = &.{
.{ Error.Mismatch, c.ONIG_MISMATCH },
.{ Error.NoSupportConfig, c.ONIG_NO_SUPPORT_CONFIG },
.{ Error.Abort, c.ONIG_ABORT },
.{ Error.Memory, c.ONIGERR_MEMORY },
.{ Error.TypeBug, c.ONIGERR_TYPE_BUG },
.{ Error.ParserBug, c.ONIGERR_PARSER_BUG },
.{ Error.StackBug, c.ONIGERR_STACK_BUG },
.{ Error.UndefinedBytecode, c.ONIGERR_UNDEFINED_BYTECODE },
.{ Error.UnexpectedBytecode, c.ONIGERR_UNEXPECTED_BYTECODE },
.{ Error.MatchStackLimitOver, c.ONIGERR_MATCH_STACK_LIMIT_OVER },
.{ Error.ParseDepthLimitOver, c.ONIGERR_PARSE_DEPTH_LIMIT_OVER },
.{ Error.RetryLimitInMatchOver, c.ONIGERR_RETRY_LIMIT_IN_MATCH_OVER },
.{ Error.RetryLimitInSearchOver, c.ONIGERR_RETRY_LIMIT_IN_SEARCH_OVER },
.{ Error.SubexpCallLimitInSearchOver, c.ONIGERR_SUBEXP_CALL_LIMIT_IN_SEARCH_OVER },
.{ Error.DefaultEncodingIsNotSet, c.ONIGERR_DEFAULT_ENCODING_IS_NOT_SET },
.{ Error.SpecifiedEncodingCantConvertToWideChar, c.ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR },
.{ Error.FailToInitialize, c.ONIGERR_FAIL_TO_INITIALIZE },
.{ Error.InvalidArgument, c.ONIGERR_INVALID_ARGUMENT },
.{ Error.EndPatternAtLeftBrace, c.ONIGERR_END_PATTERN_AT_LEFT_BRACE },
.{ Error.EndPatternAtLeftBracket, c.ONIGERR_END_PATTERN_AT_LEFT_BRACKET },
.{ Error.EmptyCharClass, c.ONIGERR_EMPTY_CHAR_CLASS },
.{ Error.PrematureEndOfCharClass, c.ONIGERR_PREMATURE_END_OF_CHAR_CLASS },
.{ Error.EndPatternAtEscape, c.ONIGERR_END_PATTERN_AT_ESCAPE },
.{ Error.EndPatternAtMeta, c.ONIGERR_END_PATTERN_AT_META },
.{ Error.EndPatternAtControl, c.ONIGERR_END_PATTERN_AT_CONTROL },
.{ Error.MetaCodeSyntax, c.ONIGERR_META_CODE_SYNTAX },
.{ Error.ControlCodeSyntax, c.ONIGERR_CONTROL_CODE_SYNTAX },
.{ Error.CharClassValueAtEndOfRange, c.ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE },
.{ Error.CharClassValueAtStartOfRange, c.ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE },
.{ Error.UnmatchedRangeSpecifierInCharClass, c.ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS },
.{ Error.TargetOfRepeatOperatorNotSpecified, c.ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED },
.{ Error.TargetOfRepeatOperatorInvalid, c.ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID },
.{ Error.NestedRepeatOperator, c.ONIGERR_NESTED_REPEAT_OPERATOR },
.{ Error.UnmatchedCloseParenthesis, c.ONIGERR_UNMATCHED_CLOSE_PARENTHESIS },
.{ Error.EndPatternWithUnmatchedParenthesis, c.ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS },
.{ Error.EndPatternInGroup, c.ONIGERR_END_PATTERN_IN_GROUP },
.{ Error.UndefinedGroupOption, c.ONIGERR_UNDEFINED_GROUP_OPTION },
.{ Error.InvalidGroupOption, c.ONIGERR_INVALID_GROUP_OPTION },
.{ Error.InvalidPosixBracketType, c.ONIGERR_INVALID_POSIX_BRACKET_TYPE },
.{ Error.InvalidLookBehindPattern, c.ONIGERR_INVALID_LOOK_BEHIND_PATTERN },
.{ Error.InvalidRepeatRangePattern, c.ONIGERR_INVALID_REPEAT_RANGE_PATTERN },
.{ Error.TooBigNumber, c.ONIGERR_TOO_BIG_NUMBER },
.{ Error.TooBigNumberForRepeatRange, c.ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE },
.{ Error.UpperSmallerThanLowerInRepeatRange, c.ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE },
.{ Error.EmptyRangeInCharClass, c.ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS },
.{ Error.MismatchCodeLengthInClassRange, c.ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE },
.{ Error.TooManyMultiByteRanges, c.ONIGERR_TOO_MANY_MULTI_BYTE_RANGES },
.{ Error.TooShortMultiByteString, c.ONIGERR_TOO_SHORT_MULTI_BYTE_STRING },
.{ Error.TooBigBackrefNumber, c.ONIGERR_TOO_BIG_BACKREF_NUMBER },
.{ Error.InvalidBackref, c.ONIGERR_INVALID_BACKREF },
.{ Error.NumberedBackrefOrCallNotAllowed, c.ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED },
.{ Error.TooManyCaptures, c.ONIGERR_TOO_MANY_CAPTURES },
.{ Error.TooLongWideCharValue, c.ONIGERR_TOO_LONG_WIDE_CHAR_VALUE },
.{ Error.UndefinedOperator, c.ONIGERR_UNDEFINED_OPERATOR },
.{ Error.EmptyGroupName, c.ONIGERR_EMPTY_GROUP_NAME },
.{ Error.InvalidGroupName, c.ONIGERR_INVALID_GROUP_NAME },
.{ Error.InvalidCharInGroupName, c.ONIGERR_INVALID_CHAR_IN_GROUP_NAME },
.{ Error.UndefinedNameReference, c.ONIGERR_UNDEFINED_NAME_REFERENCE },
.{ Error.UndefinedGroupReference, c.ONIGERR_UNDEFINED_GROUP_REFERENCE },
.{ Error.MultiplexDefinedName, c.ONIGERR_MULTIPLEX_DEFINED_NAME },
.{ Error.MultiplexDefinitionNameCall, c.ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL },
.{ Error.NeverEndingRecursion, c.ONIGERR_NEVER_ENDING_RECURSION },
.{ Error.GroupNumberOverForCaptureHistory, c.ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY },
.{ Error.InvalidCharPropertyName, c.ONIGERR_INVALID_CHAR_PROPERTY_NAME },
.{ Error.InvalidIfElseSyntax, c.ONIGERR_INVALID_IF_ELSE_SYNTAX },
.{ Error.InvalidAbsentGroupPattern, c.ONIGERR_INVALID_ABSENT_GROUP_PATTERN },
.{ Error.InvalidAbsentGroupGeneratorPattern, c.ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN },
.{ Error.InvalidCalloutPattern, c.ONIGERR_INVALID_CALLOUT_PATTERN },
.{ Error.InvalidCalloutName, c.ONIGERR_INVALID_CALLOUT_NAME },
.{ Error.UndefinedCalloutName, c.ONIGERR_UNDEFINED_CALLOUT_NAME },
.{ Error.InvalidCalloutBody, c.ONIGERR_INVALID_CALLOUT_BODY },
.{ Error.InvalidCalloutTagName, c.ONIGERR_INVALID_CALLOUT_TAG_NAME },
.{ Error.InvalidCalloutArg, c.ONIGERR_INVALID_CALLOUT_ARG },
.{ Error.InvalidCodePointValue, c.ONIGERR_INVALID_CODE_POINT_VALUE },
.{ Error.InvalidWideCharValue, c.ONIGERR_INVALID_WIDE_CHAR_VALUE },
.{ Error.TooBigWideCharValue, c.ONIGERR_TOO_BIG_WIDE_CHAR_VALUE },
.{ Error.NotSupportedEncodingCombination, c.ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION },
.{ Error.InvalidCombinationOfOptions, c.ONIGERR_INVALID_COMBINATION_OF_OPTIONS },
.{ Error.TooManyUserDefinedObjects, c.ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS },
.{ Error.TooLongPropertyName, c.ONIGERR_TOO_LONG_PROPERTY_NAME },
.{ Error.VeryInefficientPattern, c.ONIGERR_VERY_INEFFICIENT_PATTERN },
.{ Error.LibraryIsNotInitialized, c.ONIGERR_LIBRARY_IS_NOT_INITIALIZED },
};
|