OSDN Git Service

FIX: build failed.
[tombo/Tombo.git] / oniguruma / oniguruma.h
1 #ifndef ONIGURUMA_H\r
2 #define ONIGURUMA_H\r
3 /**********************************************************************\r
4   oniguruma.h - Oniguruma (regular expression library)\r
5 **********************************************************************/\r
6 /*-\r
7  * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>\r
8  * All rights reserved.\r
9  *\r
10  * Redistribution and use in source and binary forms, with or without\r
11  * modification, are permitted provided that the following conditions\r
12  * are met:\r
13  * 1. Redistributions of source code must retain the above copyright\r
14  *    notice, this list of conditions and the following disclaimer.\r
15  * 2. Redistributions in binary form must reproduce the above copyright\r
16  *    notice, this list of conditions and the following disclaimer in the\r
17  *    documentation and/or other materials provided with the distribution.\r
18  *\r
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
29  * SUCH DAMAGE.\r
30  */\r
31 \r
32 #ifdef __cplusplus\r
33 extern "C" {\r
34 #endif\r
35 \r
36 #define ONIGURUMA\r
37 #define ONIGURUMA_VERSION_MAJOR   3\r
38 #define ONIGURUMA_VERSION_MINOR   9\r
39 #define ONIGURUMA_VERSION_TEENY   1\r
40 \r
41 #ifdef __cplusplus\r
42 # ifndef  HAVE_PROTOTYPES\r
43 #  define HAVE_PROTOTYPES 1\r
44 # endif\r
45 # ifndef  HAVE_STDARG_PROTOTYPES\r
46 #  define HAVE_STDARG_PROTOTYPES 1\r
47 # endif\r
48 #endif\r
49 \r
50 #ifndef P_\r
51 #if defined(__STDC__) || defined(_WIN32)\r
52 # define P_(args) args\r
53 #else\r
54 # define P_(args) ()\r
55 #endif\r
56 #endif\r
57 \r
58 #ifndef PV_\r
59 #ifdef HAVE_STDARG_PROTOTYPES\r
60 # define PV_(args) args\r
61 #else\r
62 # define PV_(args) ()\r
63 #endif\r
64 #endif\r
65 \r
66 #ifndef ONIG_EXTERN\r
67 #if defined(_WIN32) && !defined(__GNUC__)\r
68 #if defined(EXPORT) || defined(RUBY_EXPORT)\r
69 #define ONIG_EXTERN   extern __declspec(dllexport)\r
70 #else\r
71 #define ONIG_EXTERN   extern __declspec(dllimport)\r
72 #endif\r
73 #endif\r
74 #endif\r
75 \r
76 #ifndef ONIG_EXTERN\r
77 #define ONIG_EXTERN   extern\r
78 #endif\r
79 \r
80 /* PART: character encoding */\r
81 \r
82 #ifndef ONIG_ESCAPE_UCHAR_COLLISION\r
83 #define UChar OnigUChar\r
84 #endif\r
85 \r
86 typedef unsigned char  OnigUChar;\r
87 typedef unsigned long  OnigCodePoint;\r
88 typedef unsigned int   OnigDistance;\r
89 \r
90 #define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)\r
91 \r
92 /* ambiguous match flag */\r
93 typedef unsigned int OnigAmbigType;\r
94 \r
95 ONIG_EXTERN OnigAmbigType OnigDefaultAmbigFlag;\r
96 \r
97 #define ONIGENC_AMBIGUOUS_MATCH_NONE                   0\r
98 #define ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE            (1<<0)\r
99 #define ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE         (1<<1)\r
100 /* #define ONIGENC_AMBIGUOUS_MATCH_ACCENT             (1<<2) */\r
101 /* #define ONIGENC_AMBIGUOUS_MATCH_HIRAGANA_KATAKANA  (1<<3) */\r
102 /* #define ONIGENC_AMBIGUOUS_MATCH_KATAKANA_WIDTH     (1<<4) */\r
103 \r
104 #define ONIGENC_AMBIGUOUS_MATCH_LIMIT                 (1<<1)\r
105 #define ONIGENC_AMBIGUOUS_MATCH_COMPOUND              (1<<30)\r
106 \r
107 #define ONIGENC_AMBIGUOUS_MATCH_FULL \\r
108   ( ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | \\r
109     ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE | \\r
110     ONIGENC_AMBIGUOUS_MATCH_COMPOUND )\r
111 #define ONIGENC_AMBIGUOUS_MATCH_DEFAULT  OnigDefaultAmbigFlag\r
112 \r
113 \r
114 #define ONIGENC_MAX_COMP_AMBIG_CODE_LEN       3\r
115 #define ONIGENC_MAX_COMP_AMBIG_CODE_ITEM_NUM  4\r
116 \r
117 /* code range */\r
118 #define ONIGENC_CODE_RANGE_NUM(range)     ((int )range[0])\r
119 #define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]\r
120 #define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]\r
121 \r
122 typedef struct {\r
123   int len;\r
124   OnigCodePoint code[ONIGENC_MAX_COMP_AMBIG_CODE_LEN];\r
125 } OnigCompAmbigCodeItem;\r
126 \r
127 typedef struct {\r
128   int n;\r
129   OnigCodePoint code;\r
130   OnigCompAmbigCodeItem items[ONIGENC_MAX_COMP_AMBIG_CODE_ITEM_NUM];\r
131 } OnigCompAmbigCodes;\r
132 \r
133 typedef struct {\r
134   OnigCodePoint from;\r
135   OnigCodePoint to;\r
136 } OnigPairAmbigCodes;\r
137 \r
138 typedef struct {\r
139   OnigCodePoint esc;\r
140   OnigCodePoint anychar;\r
141   OnigCodePoint anytime;\r
142   OnigCodePoint zero_or_one_time;\r
143   OnigCodePoint one_or_more_time;\r
144   OnigCodePoint anychar_anytime;\r
145 } OnigMetaCharTableType;\r
146 \r
147 \r
148 #if defined(RUBY_PLATFORM) && defined(M17N_H)\r
149 \r
150 #define ONIG_RUBY_M17N\r
151 typedef m17n_encoding*        OnigEncoding;\r
152 \r
153 #else\r
154 \r
155 typedef struct {\r
156   int    (*mbc_enc_len)(const OnigUChar* p);\r
157   const char*   name;\r
158   int           max_enc_len;\r
159   int           min_enc_len;\r
160   OnigAmbigType support_ambig_flag;\r
161   OnigMetaCharTableType meta_char_table;\r
162   int    (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end);\r
163   OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end);\r
164   int    (*code_to_mbclen)(OnigCodePoint code);\r
165   int    (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf);\r
166   int    (*mbc_to_normalize)(OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to);\r
167   int    (*is_mbc_ambiguous)(OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end);\r
168   int    (*get_all_pair_ambig_codes)(OnigAmbigType flag, const OnigPairAmbigCodes** acs);\r
169   int    (*get_all_comp_ambig_codes)(OnigAmbigType flag, const OnigCompAmbigCodes** acs);\r
170   int    (*is_code_ctype)(OnigCodePoint code, unsigned int ctype);\r
171   int    (*get_ctype_code_range)(int ctype, const OnigCodePoint* sb_range[], const OnigCodePoint* mb_range[]);\r
172   OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p);\r
173   int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end);\r
174 } OnigEncodingType;\r
175 \r
176 typedef OnigEncodingType* OnigEncoding;\r
177 \r
178 ONIG_EXTERN OnigEncodingType OnigEncodingASCII;\r
179 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1;\r
180 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2;\r
181 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3;\r
182 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4;\r
183 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5;\r
184 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6;\r
185 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7;\r
186 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8;\r
187 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9;\r
188 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10;\r
189 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11;\r
190 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13;\r
191 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14;\r
192 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15;\r
193 ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16;\r
194 ONIG_EXTERN OnigEncodingType OnigEncodingUTF8;\r
195 ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_BE;\r
196 ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_LE;\r
197 ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_BE;\r
198 ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_LE;\r
199 ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP;\r
200 ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW;\r
201 ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR;\r
202 ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN;\r
203 ONIG_EXTERN OnigEncodingType OnigEncodingSJIS;\r
204 ONIG_EXTERN OnigEncodingType OnigEncodingKOI8;\r
205 ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R;\r
206 ONIG_EXTERN OnigEncodingType OnigEncodingBIG5;\r
207 ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;\r
208 \r
209 #define ONIG_ENCODING_ASCII        (&OnigEncodingASCII)\r
210 #define ONIG_ENCODING_ISO_8859_1   (&OnigEncodingISO_8859_1)\r
211 #define ONIG_ENCODING_ISO_8859_2   (&OnigEncodingISO_8859_2)\r
212 #define ONIG_ENCODING_ISO_8859_3   (&OnigEncodingISO_8859_3)\r
213 #define ONIG_ENCODING_ISO_8859_4   (&OnigEncodingISO_8859_4)\r
214 #define ONIG_ENCODING_ISO_8859_5   (&OnigEncodingISO_8859_5)\r
215 #define ONIG_ENCODING_ISO_8859_6   (&OnigEncodingISO_8859_6)\r
216 #define ONIG_ENCODING_ISO_8859_7   (&OnigEncodingISO_8859_7)\r
217 #define ONIG_ENCODING_ISO_8859_8   (&OnigEncodingISO_8859_8)\r
218 #define ONIG_ENCODING_ISO_8859_9   (&OnigEncodingISO_8859_9)\r
219 #define ONIG_ENCODING_ISO_8859_10  (&OnigEncodingISO_8859_10)\r
220 #define ONIG_ENCODING_ISO_8859_11  (&OnigEncodingISO_8859_11)\r
221 #define ONIG_ENCODING_ISO_8859_13  (&OnigEncodingISO_8859_13)\r
222 #define ONIG_ENCODING_ISO_8859_14  (&OnigEncodingISO_8859_14)\r
223 #define ONIG_ENCODING_ISO_8859_15  (&OnigEncodingISO_8859_15)\r
224 #define ONIG_ENCODING_ISO_8859_16  (&OnigEncodingISO_8859_16)\r
225 #define ONIG_ENCODING_UTF8         (&OnigEncodingUTF8)\r
226 #define ONIG_ENCODING_UTF16_BE     (&OnigEncodingUTF16_BE)\r
227 #define ONIG_ENCODING_UTF16_LE     (&OnigEncodingUTF16_LE)\r
228 #define ONIG_ENCODING_UTF32_BE     (&OnigEncodingUTF32_BE)\r
229 #define ONIG_ENCODING_UTF32_LE     (&OnigEncodingUTF32_LE)\r
230 #define ONIG_ENCODING_EUC_JP       (&OnigEncodingEUC_JP)\r
231 #define ONIG_ENCODING_EUC_TW       (&OnigEncodingEUC_TW)\r
232 #define ONIG_ENCODING_EUC_KR       (&OnigEncodingEUC_KR)\r
233 #define ONIG_ENCODING_EUC_CN       (&OnigEncodingEUC_CN)\r
234 #define ONIG_ENCODING_SJIS         (&OnigEncodingSJIS)\r
235 #define ONIG_ENCODING_KOI8         (&OnigEncodingKOI8)\r
236 #define ONIG_ENCODING_KOI8_R       (&OnigEncodingKOI8_R)\r
237 #define ONIG_ENCODING_BIG5         (&OnigEncodingBIG5)\r
238 #define ONIG_ENCODING_GB18030      (&OnigEncodingGB18030)\r
239 \r
240 #endif /* else RUBY && M17N */\r
241 \r
242 #define ONIG_ENCODING_UNDEF    ((OnigEncoding )0)\r
243 \r
244 \r
245 /* work size */\r
246 #define ONIGENC_CODE_TO_MBC_MAXLEN      7\r
247 #define ONIGENC_MBC_NORMALIZE_MAXLEN    ONIGENC_CODE_TO_MBC_MAXLEN\r
248 \r
249 /* character types */\r
250 #define ONIGENC_CTYPE_NEWLINE  (1<< 0)\r
251 #define ONIGENC_CTYPE_ALPHA    (1<< 1)\r
252 #define ONIGENC_CTYPE_BLANK    (1<< 2)\r
253 #define ONIGENC_CTYPE_CNTRL    (1<< 3)\r
254 #define ONIGENC_CTYPE_DIGIT    (1<< 4)\r
255 #define ONIGENC_CTYPE_GRAPH    (1<< 5)\r
256 #define ONIGENC_CTYPE_LOWER    (1<< 6)\r
257 #define ONIGENC_CTYPE_PRINT    (1<< 7)\r
258 #define ONIGENC_CTYPE_PUNCT    (1<< 8)\r
259 #define ONIGENC_CTYPE_SPACE    (1<< 9)\r
260 #define ONIGENC_CTYPE_UPPER    (1<<10)\r
261 #define ONIGENC_CTYPE_XDIGIT   (1<<11)\r
262 #define ONIGENC_CTYPE_WORD     (1<<12)\r
263 #define ONIGENC_CTYPE_ASCII    (1<<13)\r
264 #define ONIGENC_CTYPE_ALNUM    (ONIGENC_CTYPE_ALPHA | ONIGENC_CTYPE_DIGIT)\r
265 \r
266 #define enc_len(enc,p)                ONIGENC_MBC_ENC_LEN(enc, p)\r
267 \r
268 #define ONIGENC_IS_UNDEF(enc)          ((enc) == ONIG_ENCODING_UNDEF)\r
269 #define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)\r
270 #define ONIGENC_IS_MBC_HEAD(enc,p)     (ONIGENC_MBC_ENC_LEN(enc,p) != 1)\r
271 #define ONIGENC_IS_MBC_ASCII(p)           (*(p)   < 128)\r
272 #define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)\r
273 #define ONIGENC_IS_CODE_SB_WORD(enc,code) \\r
274   (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code))\r
275 #define ONIGENC_IS_MBC_WORD(enc,s,end) \\r
276    ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))\r
277 \r
278 \r
279 #ifdef ONIG_RUBY_M17N\r
280 \r
281 #include <ctype.h> /* for isblank(), isgraph() */\r
282 \r
283 #define ONIGENC_MBC_TO_NORMALIZE(enc,flag,pp,end,buf) \\r
284         onigenc_mbc_to_normalize(enc,flag,pp,end,buf)\r
285 #define ONIGENC_IS_MBC_AMBIGUOUS(enc,flag,pp,end) \\r
286         onigenc_is_mbc_ambiguous(enc,flag,pp,end)\r
287 \r
288 #define ONIGENC_SUPPORT_AMBIG_FLAG(enc)     ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE\r
289 #define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \\r
290         onigenc_is_allowed_reverse_match(enc, s, end)\r
291 #define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \\r
292         onigenc_get_left_adjust_char_head(enc, start, s)\r
293 #define ONIGENC_GET_ALL_PAIR_AMBIG_CODES(enc, ambig_flag, acs)    0\r
294 #define ONIGENC_GET_ALL_COMP_AMBIG_CODES(enc, ambig_flag, acs)    0\r
295 #define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbr,mbr) \\r
296         ONIG_NO_SUPPORT_CONFIG\r
297 #define ONIGENC_MBC_ENC_LEN(enc,p)            m17n_mbclen(enc,(int )(*p))\r
298 #define ONIGENC_MBC_MAXLEN(enc)               m17n_mbmaxlen(enc)\r
299 #define ONIGENC_MBC_MAXLEN_DIST(enc) \\r
300     (ONIGENC_MBC_MAXLEN(enc) > 0 ? ONIGENC_MBC_MAXLEN(enc) \\r
301                                  : ONIG_INFINITE_DISTANCE)\r
302 #define ONIGENC_MBC_MINLEN(enc)            1\r
303 #define ONIGENC_MBC_TO_CODE(enc,p,e)       m17n_codepoint((enc),(p),(e))\r
304 #define ONIGENC_CODE_TO_MBCLEN(enc,code)   m17n_codelen((enc),(code))\r
305 #define ONIGENC_CODE_TO_MBC(enc,code,buf)  onigenc_code_to_mbc(enc, code, buf)\r
306 \r
307 #if 0     /* !! not supported !! */\r
308 #define ONIGENC_IS_MBC_NEWLINE(enc,p,end)\r
309 #define ONIGENC_STEP_BACK(enc,start,s,n)\r
310 #endif\r
311 \r
312 #define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) \\r
313         onigenc_is_code_ctype(enc,code,ctype)\r
314 \r
315 #ifdef isblank\r
316 # define ONIGENC_IS_CODE_BLANK(enc,code) isblank((int )code)\r
317 #else\r
318 # define ONIGENC_IS_CODE_BLANK(enc,code) ((code) == ' ' || (code) == '\t')\r
319 #endif\r
320 #ifdef isgraph\r
321 # define ONIGENC_IS_CODE_GRAPH(enc,code) isgraph((int )code)\r
322 #else\r
323 # define ONIGENC_IS_CODE_GRAPH(enc,code) \\r
324   (isprint((int )code) && !isspace((int )code))\r
325 #endif\r
326 \r
327 #define ONIGENC_IS_CODE_PRINT(enc,code)     m17n_isprint(enc,code)\r
328 #define ONIGENC_IS_CODE_ALNUM(enc,code)     m17n_isalnum(enc,code)\r
329 #define ONIGENC_IS_CODE_ALPHA(enc,code)     m17n_isalpha(enc,code)\r
330 #define ONIGENC_IS_CODE_LOWER(enc,code)     m17n_islower(enc,code)\r
331 #define ONIGENC_IS_CODE_UPPER(enc,code)     m17n_isupper(enc,code)\r
332 #define ONIGENC_IS_CODE_CNTRL(enc,code)     m17n_iscntrl(enc,code)\r
333 #define ONIGENC_IS_CODE_PUNCT(enc,code)     m17n_ispunct(enc,code)\r
334 #define ONIGENC_IS_CODE_SPACE(enc,code)     m17n_isspace(enc,code)\r
335 #define ONIGENC_IS_CODE_DIGIT(enc,code)     m17n_isdigit(enc,code)\r
336 #define ONIGENC_IS_CODE_XDIGIT(enc,code)    m17n_isxdigit(enc,code)\r
337 #define ONIGENC_IS_CODE_WORD(enc,code)      m17n_iswchar(enc,code)\r
338 \r
339 ONIG_EXTERN\r
340 int onigenc_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, int ctype));\r
341 ONIG_EXTERN\r
342 int onigenc_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, OnigUChar *buf));\r
343 ONIG_EXTERN\r
344 int onigenc_mbc_to_normalize P_((OnigEncoding enc, OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* buf));\r
345 ONIG_EXTERN\r
346 int onigenc_is_mbc_ambiguous P_((OnigEncoding enc, OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end));\r
347 ONIG_EXTERN\r
348 int onigenc_is_allowed_reverse_match P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end));\r
349 \r
350 #else  /* ONIG_RUBY_M17N */\r
351 \r
352 #define ONIGENC_NAME(enc)                      ((enc)->name)\r
353 \r
354 #define ONIGENC_MBC_TO_NORMALIZE(enc,flag,pp,end,buf) \\r
355   (enc)->mbc_to_normalize(flag,(const OnigUChar** )pp,end,buf)\r
356 #define ONIGENC_IS_MBC_AMBIGUOUS(enc,flag,pp,end) \\r
357   (enc)->is_mbc_ambiguous(flag,(const OnigUChar** )pp,end)\r
358 #define ONIGENC_SUPPORT_AMBIG_FLAG(enc)        ((enc)->support_ambig_flag)\r
359 #define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \\r
360         (enc)->is_allowed_reverse_match(s,end)\r
361 #define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \\r
362         (enc)->left_adjust_char_head(start, s)\r
363 #define ONIGENC_GET_ALL_PAIR_AMBIG_CODES(enc,ambig_flag,acs) \\r
364         (enc)->get_all_pair_ambig_codes(ambig_flag,acs)\r
365 #define ONIGENC_GET_ALL_COMP_AMBIG_CODES(enc,ambig_flag,acs) \\r
366         (enc)->get_all_comp_ambig_codes(ambig_flag,acs)\r
367 #define ONIGENC_STEP_BACK(enc,start,s,n) \\r
368         onigenc_step_back((enc),(start),(s),(n))\r
369 \r
370 #define ONIGENC_MBC_ENC_LEN(enc,p)             (enc)->mbc_enc_len(p)\r
371 #define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)\r
372 #define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)\r
373 #define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)\r
374 #define ONIGENC_IS_MBC_NEWLINE(enc,p,end)      (enc)->is_mbc_newline((p),(end))\r
375 #define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end))\r
376 #define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code)\r
377 #define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf)\r
378 \r
379 #define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype)\r
380 \r
381 #define ONIGENC_IS_CODE_NEWLINE(enc,code) \\r
382         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)\r
383 #define ONIGENC_IS_CODE_GRAPH(enc,code) \\r
384         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)\r
385 #define ONIGENC_IS_CODE_PRINT(enc,code) \\r
386         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)\r
387 #define ONIGENC_IS_CODE_ALNUM(enc,code) \\r
388         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)\r
389 #define ONIGENC_IS_CODE_ALPHA(enc,code) \\r
390         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)\r
391 #define ONIGENC_IS_CODE_LOWER(enc,code) \\r
392         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)\r
393 #define ONIGENC_IS_CODE_UPPER(enc,code) \\r
394         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)\r
395 #define ONIGENC_IS_CODE_CNTRL(enc,code) \\r
396         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)\r
397 #define ONIGENC_IS_CODE_PUNCT(enc,code) \\r
398         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)\r
399 #define ONIGENC_IS_CODE_SPACE(enc,code) \\r
400         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)\r
401 #define ONIGENC_IS_CODE_BLANK(enc,code) \\r
402         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)\r
403 #define ONIGENC_IS_CODE_DIGIT(enc,code) \\r
404         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)\r
405 #define ONIGENC_IS_CODE_XDIGIT(enc,code) \\r
406         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)\r
407 #define ONIGENC_IS_CODE_WORD(enc,code) \\r
408         ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)\r
409 \r
410 #define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbr,mbr) \\r
411         (enc)->get_ctype_code_range(ctype,sbr,mbr)\r
412 \r
413 ONIG_EXTERN\r
414 OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, int n));\r
415 \r
416 #endif /* is not ONIG_RUBY_M17N */\r
417 \r
418 \r
419 /* encoding API */\r
420 ONIG_EXTERN\r
421 int onigenc_init P_(());\r
422 ONIG_EXTERN\r
423 int onigenc_set_default_encoding P_((OnigEncoding enc));\r
424 ONIG_EXTERN\r
425 OnigEncoding onigenc_get_default_encoding P_(());\r
426 ONIG_EXTERN\r
427 void  onigenc_set_default_caseconv_table P_((const OnigUChar* table));\r
428 ONIG_EXTERN\r
429 OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar** prev));\r
430 ONIG_EXTERN\r
431 OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
432 ONIG_EXTERN\r
433 OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
434 ONIG_EXTERN\r
435 OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));\r
436 ONIG_EXTERN\r
437 int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end));\r
438 ONIG_EXTERN\r
439 int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p));\r
440 ONIG_EXTERN\r
441 int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p));\r
442 \r
443 \r
444 \r
445 /* PART: regular expression */\r
446 \r
447 /* config parameters */\r
448 #define ONIG_NREGION                          10\r
449 #define ONIG_MAX_BACKREF_NUM                1000\r
450 #define ONIG_MAX_REPEAT_NUM               100000\r
451 #define ONIG_MAX_MULTI_BYTE_RANGES_NUM      1000\r
452 /* constants */\r
453 #define ONIG_MAX_ERROR_MESSAGE_LEN            90\r
454 \r
455 typedef unsigned int        OnigOptionType;\r
456 \r
457 #define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE\r
458 \r
459 /* options */\r
460 #define ONIG_OPTION_NONE                 0\r
461 #define ONIG_OPTION_IGNORECASE           1L\r
462 #define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)\r
463 #define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)\r
464 #define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)\r
465 #define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)\r
466 #define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)\r
467 #define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)\r
468 #define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)\r
469 #define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)\r
470 /* options (search time) */\r
471 #define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)\r
472 #define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)\r
473 #define ONIG_OPTION_POSIX_REGION         (ONIG_OPTION_NOTEOL << 1)\r
474 #define ONIG_OPTION_MAXBIT               ONIG_OPTION_POSIX_REGION  /* limit */\r
475 \r
476 #define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))\r
477 #define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))\r
478 #define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))\r
479 \r
480 /* syntax */\r
481 typedef struct {\r
482   unsigned int  op;\r
483   unsigned int  op2;\r
484   unsigned int  behavior;\r
485   OnigOptionType options;    /* default option */\r
486 } OnigSyntaxType;\r
487 \r
488 ONIG_EXTERN OnigSyntaxType OnigSyntaxASIS;\r
489 ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;\r
490 ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;\r
491 ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;\r
492 ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;\r
493 ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;\r
494 ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;\r
495 ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;\r
496 ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG;\r
497 ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;\r
498 \r
499 /* predefined syntaxes (see regsyntax.c) */\r
500 #define ONIG_SYNTAX_ASIS               (&OnigSyntaxASIS)\r
501 #define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)\r
502 #define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)\r
503 #define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)\r
504 #define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)\r
505 #define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)\r
506 #define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)\r
507 #define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)\r
508 #define ONIG_SYNTAX_PERL_NG            (&OnigSyntaxPerl_NG)\r
509 #define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)\r
510 \r
511 /* default syntax */\r
512 ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;\r
513 #define ONIG_SYNTAX_DEFAULT   OnigDefaultSyntax\r
514 \r
515 /* syntax (operators) */\r
516 #define ONIG_SYN_OP_VARIABLE_META_CHARACTERS    (1<<0)\r
517 #define ONIG_SYN_OP_DOT_ANYCHAR                 (1<<1)   /* . */\r
518 #define ONIG_SYN_OP_ASTERISK_ZERO_INF           (1<<2)   /* * */\r
519 #define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF       (1<<3)\r
520 #define ONIG_SYN_OP_PLUS_ONE_INF                (1<<4)   /* + */\r
521 #define ONIG_SYN_OP_ESC_PLUS_ONE_INF            (1<<5)\r
522 #define ONIG_SYN_OP_QMARK_ZERO_ONE              (1<<6)   /* ? */\r
523 #define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE          (1<<7)\r
524 #define ONIG_SYN_OP_BRACE_INTERVAL              (1<<8)   /* {lower,upper} */\r
525 #define ONIG_SYN_OP_ESC_BRACE_INTERVAL          (1<<9)   /* \{lower,upper\} */\r
526 #define ONIG_SYN_OP_VBAR_ALT                    (1<<10)   /* | */\r
527 #define ONIG_SYN_OP_ESC_VBAR_ALT                (1<<11)  /* \| */\r
528 #define ONIG_SYN_OP_LPAREN_SUBEXP               (1<<12)  /* (...)   */\r
529 #define ONIG_SYN_OP_ESC_LPAREN_SUBEXP           (1<<13)  /* \(...\) */\r
530 #define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR           (1<<14)  /* \A, \Z, \z */\r
531 #define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR  (1<<15)  /* \G     */\r
532 #define ONIG_SYN_OP_DECIMAL_BACKREF             (1<<16)  /* \num   */\r
533 #define ONIG_SYN_OP_BRACKET_CC                  (1<<17)  /* [...]  */\r
534 #define ONIG_SYN_OP_ESC_W_WORD                  (1<<18)  /* \w, \W */\r
535 #define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END     (1<<19)  /* \<. \> */\r
536 #define ONIG_SYN_OP_ESC_B_WORD_BOUND            (1<<20)  /* \b, \B */\r
537 #define ONIG_SYN_OP_ESC_S_WHITE_SPACE           (1<<21)  /* \s, \S */\r
538 #define ONIG_SYN_OP_ESC_D_DIGIT                 (1<<22)  /* \d, \D */\r
539 #define ONIG_SYN_OP_LINE_ANCHOR                 (1<<23)  /* ^, $   */\r
540 #define ONIG_SYN_OP_POSIX_BRACKET               (1<<24)  /* [:xxxx:] */\r
541 #define ONIG_SYN_OP_QMARK_NON_GREEDY            (1<<25)  /* ??,*?,+?,{n,m}? */\r
542 #define ONIG_SYN_OP_ESC_CONTROL_CHARS           (1<<26)  /* \n,\r,\t,\a ... */\r
543 #define ONIG_SYN_OP_ESC_C_CONTROL               (1<<27)  /* \cx  */\r
544 #define ONIG_SYN_OP_ESC_OCTAL3                  (1<<28)  /* \OOO */\r
545 #define ONIG_SYN_OP_ESC_X_HEX2                  (1<<29)  /* \xHH */\r
546 #define ONIG_SYN_OP_ESC_X_BRACE_HEX8            (1<<30)  /* \x{7HHHHHHH} */\r
547 \r
548 #define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        (1<<0)   /* \Q...\E */\r
549 #define ONIG_SYN_OP2_QMARK_GROUP_EFFECT         (1<<1)   /* (?...) */\r
550 #define ONIG_SYN_OP2_OPTION_PERL                (1<<2)   /* (?imsx),(?-imsx) */\r
551 #define ONIG_SYN_OP2_OPTION_RUBY                (1<<3)   /* (?imx), (?-imx)  */\r
552 #define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT     (1<<4)   /* ?+,*+,++ */\r
553 #define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL   (1<<5)   /* {n,m}+   */\r
554 #define ONIG_SYN_OP2_CCLASS_SET_OP              (1<<6)   /* [...&&..[..]..] */\r
555 #define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       (1<<7)   /* (?<name>...) */\r
556 #define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        (1<<8)   /* \k<name> */\r
557 #define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL          (1<<9)   /* \g<name>, \g<n> */\r
558 #define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY     (1<<10)  /* (?@..),(?@<x>..) */\r
559 #define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL  (1<<11)  /* \C-x */\r
560 #define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META     (1<<12)  /* \M-x */\r
561 #define ONIG_SYN_OP2_ESC_V_VTAB                 (1<<13)  /* \v as VTAB */\r
562 #define ONIG_SYN_OP2_ESC_U_HEX4                 (1<<14)  /* \uHHHH */\r
563 #define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR         (1<<15)  /* \`, \' */\r
564 #define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  (1<<16)  /* \p{...}, \P{...} */\r
565 #define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1<<17)  /* \p{^..}, \P{^..} */\r
566 #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS    (1<<18)  /* \p{IsXDigit} */\r
567 #define ONIG_SYN_OP2_ESC_H_XDIGIT               (1<<19)  /* \h, \H */\r
568 #define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         (1<<20)  /* \ */\r
569 \r
570 /* syntax (behavior) */\r
571 #define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1<<31) /* not implemented */\r
572 #define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS        (1<<0)  /* ?, *, +, {n,m} */\r
573 #define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS      (1<<1)  /* error or ignore */\r
574 #define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP    (1<<2)  /* ...)... */\r
575 #define ONIG_SYN_ALLOW_INVALID_INTERVAL          (1<<3)  /* {??? */\r
576 #define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV       (1<<4)  /* {,n} => {0,n} */\r
577 #define ONIG_SYN_STRICT_CHECK_BACKREF            (1<<5)  /* /(\1)/,/\1()/ ..*/\r
578 #define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND   (1<<6)  /* (?<=a|bc) */\r
579 #define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP        (1<<7)  /* see doc/RE */\r
580 #define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1<<8)  /* (?<x>)(?<x>) */\r
581 #define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY   (1<<9)  /* a{n}?=(?:a{n})? */\r
582 \r
583 /* syntax (behavior) in char class [...] */\r
584 #define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC      (1<<20) /* [^...] */\r
585 #define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1<<21) /* [..\w..] etc.. */\r
586 #define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1<<22)\r
587 #define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1<<23) /* [0-9-a]=[0-9\-a] */\r
588 /* syntax (behavior) warning */\r
589 #define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1<<24) /* [,-,] */\r
590 #define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1<<25) /* (?:a*)+ */\r
591 \r
592 /* meta character specifiers (onig_set_meta_char()) */\r
593 #define ONIG_META_CHAR_ESCAPE               0\r
594 #define ONIG_META_CHAR_ANYCHAR              1\r
595 #define ONIG_META_CHAR_ANYTIME              2\r
596 #define ONIG_META_CHAR_ZERO_OR_ONE_TIME     3\r
597 #define ONIG_META_CHAR_ONE_OR_MORE_TIME     4\r
598 #define ONIG_META_CHAR_ANYCHAR_ANYTIME      5\r
599 \r
600 #define ONIG_INEFFECTIVE_META_CHAR          0\r
601 \r
602 /* error codes */\r
603 #define ONIG_IS_PATTERN_ERROR(ecode)   ((ecode) <= -100 && (ecode) > -1000)\r
604 /* normal return */\r
605 #define ONIG_NORMAL                                            0\r
606 #define ONIG_MISMATCH                                         -1\r
607 #define ONIG_NO_SUPPORT_CONFIG                                -2\r
608 \r
609 /* internal error */\r
610 #define ONIGERR_MEMORY                                         -5\r
611 #define ONIGERR_TYPE_BUG                                       -6\r
612 #define ONIGERR_PARSER_BUG                                    -11\r
613 #define ONIGERR_STACK_BUG                                     -12\r
614 #define ONIGERR_UNDEFINED_BYTECODE                            -13\r
615 #define ONIGERR_UNEXPECTED_BYTECODE                           -14\r
616 #define ONIGERR_MATCH_STACK_LIMIT_OVER                        -15\r
617 #define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED                -21\r
618 #define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR  -22\r
619 /* general error */\r
620 #define ONIGERR_INVALID_ARGUMENT                              -30 \r
621 /* syntax error */\r
622 #define ONIGERR_END_PATTERN_AT_LEFT_BRACE                    -100\r
623 #define ONIGERR_END_PATTERN_AT_LEFT_BRACKET                  -101\r
624 #define ONIGERR_EMPTY_CHAR_CLASS                             -102\r
625 #define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103\r
626 #define ONIGERR_END_PATTERN_AT_ESCAPE                        -104\r
627 #define ONIGERR_END_PATTERN_AT_META                          -105\r
628 #define ONIGERR_END_PATTERN_AT_CONTROL                       -106\r
629 #define ONIGERR_META_CODE_SYNTAX                             -108\r
630 #define ONIGERR_CONTROL_CODE_SYNTAX                          -109\r
631 #define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE             -110\r
632 #define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE           -111\r
633 #define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112\r
634 #define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED      -113\r
635 #define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID            -114\r
636 #define ONIGERR_NESTED_REPEAT_OPERATOR                       -115\r
637 #define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS                  -116\r
638 #define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117\r
639 #define ONIGERR_END_PATTERN_IN_GROUP                         -118\r
640 #define ONIGERR_UNDEFINED_GROUP_OPTION                       -119\r
641 #define ONIGERR_INVALID_POSIX_BRACKET_TYPE                   -121\r
642 #define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122\r
643 #define ONIGERR_INVALID_REPEAT_RANGE_PATTERN                 -123\r
644 /* values error (syntax error) */\r
645 #define ONIGERR_TOO_BIG_NUMBER                               -200\r
646 #define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE              -201\r
647 #define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE     -202\r
648 #define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203\r
649 #define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE          -204\r
650 #define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES                   -205\r
651 #define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206\r
652 #define ONIGERR_TOO_BIG_BACKREF_NUMBER                       -207\r
653 #define ONIGERR_INVALID_BACKREF                              -208\r
654 #define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209\r
655 #define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212\r
656 #define ONIGERR_EMPTY_GROUP_NAME                             -214\r
657 #define ONIGERR_INVALID_GROUP_NAME                           -215\r
658 #define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216\r
659 #define ONIGERR_UNDEFINED_NAME_REFERENCE                     -217\r
660 #define ONIGERR_UNDEFINED_GROUP_REFERENCE                    -218\r
661 #define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219\r
662 #define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL               -220\r
663 #define ONIGERR_NEVER_ENDING_RECURSION                       -221\r
664 #define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222\r
665 #define ONIGERR_INVALID_CHAR_PROPERTY_NAME                   -223\r
666 #define ONIGERR_INVALID_WIDE_CHAR_VALUE                      -400\r
667 #define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401\r
668 #define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION           -402\r
669 \r
670 /* errors related to thread */\r
671 #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001\r
672 \r
673 \r
674 /* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */\r
675 #define ONIG_MAX_CAPTURE_HISTORY_GROUP   31\r
676 #define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \\r
677   ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])\r
678 \r
679 typedef struct OnigCaptureTreeNodeStruct {\r
680   int group;   /* group number */\r
681   int beg;\r
682   int end;\r
683   int allocated;\r
684   int num_childs;\r
685   struct OnigCaptureTreeNodeStruct** childs;\r
686 } OnigCaptureTreeNode;\r
687 \r
688 /* match result region type */\r
689 struct re_registers {\r
690   int  allocated;\r
691   int  num_regs;\r
692   int* beg;\r
693   int* end;\r
694   /* extended */\r
695   OnigCaptureTreeNode* history_root;  /* capture history tree root */\r
696 };\r
697 \r
698 /* capture tree traverse */\r
699 #define ONIG_TRAVERSE_CALLBACK_AT_FIRST   1\r
700 #define ONIG_TRAVERSE_CALLBACK_AT_LAST    2\r
701 #define ONIG_TRAVERSE_CALLBACK_AT_BOTH \\r
702   ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )\r
703 \r
704 \r
705 #define ONIG_REGION_NOTPOS            -1\r
706 \r
707 typedef struct re_registers   OnigRegion;\r
708 \r
709 typedef struct {\r
710   OnigUChar* par;\r
711   OnigUChar* par_end;\r
712 } OnigErrorInfo;\r
713 \r
714 typedef struct {\r
715   int lower;\r
716   int upper;\r
717 } OnigRepeatRange;\r
718 \r
719 typedef void (*OnigWarnFunc) P_((const char* s));\r
720 extern void onig_null_warn P_((const char* s));\r
721 #define ONIG_NULL_WARN       onig_null_warn\r
722 \r
723 #define ONIG_CHAR_TABLE_SIZE   256\r
724 \r
725 /* regex_t state */\r
726 #define ONIG_STATE_NORMAL              0\r
727 #define ONIG_STATE_SEARCHING           1\r
728 #define ONIG_STATE_COMPILING          -1\r
729 #define ONIG_STATE_MODIFY             -2\r
730 \r
731 #define ONIG_STATE(reg) \\r
732   ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state)\r
733 \r
734 typedef struct re_pattern_buffer {\r
735   /* common members of BBuf(bytes-buffer) */\r
736   unsigned char* p;         /* compiled pattern */\r
737   unsigned int used;        /* used space for p */\r
738   unsigned int alloc;       /* allocated space for p */\r
739 \r
740   int state;                     /* normal, searching, compiling */\r
741   int num_mem;                   /* used memory(...) num counted from 1 */\r
742   int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */\r
743   int num_null_check;            /* OP_NULL_CHECK_START/END id counter */\r
744   int num_call;                  /* number of subexp call */\r
745   unsigned int capture_history;  /* (?@...) flag (1-31) */\r
746   unsigned int bt_mem_start;     /* need backtrack flag */\r
747   unsigned int bt_mem_end;       /* need backtrack flag */\r
748   int stack_pop_level;\r
749   int repeat_range_alloc;\r
750   OnigRepeatRange* repeat_range;\r
751 \r
752   OnigEncoding  enc;\r
753   OnigOptionType    options;\r
754   OnigSyntaxType*   syntax;\r
755   OnigAmbigType     ambig_flag;\r
756   void*             name_table;\r
757 \r
758   /* optimization info (string search, char-map and anchors) */\r
759   int            optimize;          /* optimize flag */\r
760   int            threshold_len;     /* search str-length for apply optimize */\r
761   int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */\r
762   OnigDistance   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */\r
763   OnigDistance   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */\r
764   int            sub_anchor;        /* start-anchor for exact or map */\r
765   unsigned char *exact;\r
766   unsigned char *exact_end;\r
767   unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */\r
768   int           *int_map;                   /* BM skip for exact_len > 255 */\r
769   int           *int_map_backward;          /* BM skip for backward search */\r
770   OnigDistance   dmin;                      /* min-distance of exact or map */\r
771   OnigDistance   dmax;                      /* max-distance of exact or map */\r
772 \r
773   /* regex_t link chain */\r
774   struct re_pattern_buffer* chain;  /* escape compile-conflict */\r
775 } regex_t;\r
776 \r
777 \r
778 typedef struct {\r
779   int             num_of_elements;\r
780   OnigEncoding    pattern_enc;\r
781   OnigEncoding    target_enc;\r
782   OnigSyntaxType* syntax;\r
783   OnigOptionType  option;\r
784   OnigAmbigType   ambig_flag;\r
785 } OnigCompileInfo;\r
786 \r
787 /* Oniguruma Native API */\r
788 ONIG_EXTERN\r
789 int onig_init P_((void));\r
790 ONIG_EXTERN\r
791 int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));\r
792 ONIG_EXTERN\r
793 void onig_set_warn_func P_((OnigWarnFunc f));\r
794 ONIG_EXTERN\r
795 void onig_set_verb_warn_func P_((OnigWarnFunc f));\r
796 ONIG_EXTERN\r
797 int onig_new P_((regex_t**, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
798 ONIG_EXTERN\r
799 int onig_new_deluxe P_((regex_t** reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
800 ONIG_EXTERN\r
801 void onig_free P_((regex_t*));\r
802 ONIG_EXTERN\r
803 int onig_recompile P_((regex_t*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));\r
804 ONIG_EXTERN\r
805 int onig_recompile_deluxe P_((regex_t* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));\r
806 ONIG_EXTERN\r
807 int onig_search P_((regex_t*, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));\r
808 ONIG_EXTERN\r
809 int onig_match P_((regex_t*, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));\r
810 ONIG_EXTERN\r
811 OnigRegion* onig_region_new P_((void));\r
812 ONIG_EXTERN\r
813 void onig_region_init P_((OnigRegion* region));\r
814 ONIG_EXTERN\r
815 void onig_region_free P_((OnigRegion* region, int free_self));\r
816 ONIG_EXTERN\r
817 void onig_region_copy P_((OnigRegion* to, OnigRegion* from));\r
818 ONIG_EXTERN\r
819 void onig_region_clear P_((OnigRegion* region));\r
820 ONIG_EXTERN\r
821 int onig_region_resize P_((OnigRegion* region, int n));\r
822 ONIG_EXTERN\r
823 int onig_region_set P_((OnigRegion* region, int at, int beg, int end));\r
824 ONIG_EXTERN\r
825 int onig_name_to_group_numbers P_((regex_t* reg, const OnigUChar* name, const OnigUChar* name_end, int** nums));\r
826 ONIG_EXTERN\r
827 int onig_name_to_backref_number P_((regex_t* reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region));\r
828 ONIG_EXTERN\r
829 int onig_foreach_name P_((regex_t* reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,regex_t*,void*), void* arg));\r
830 ONIG_EXTERN\r
831 int onig_number_of_names P_((regex_t* reg));\r
832 ONIG_EXTERN\r
833 int onig_number_of_captures P_((regex_t* reg));\r
834 ONIG_EXTERN\r
835 int onig_number_of_capture_histories P_((regex_t* reg));\r
836 ONIG_EXTERN\r
837 OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region));\r
838 ONIG_EXTERN\r
839 int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,int,int,int,int,void*), void* arg));\r
840 ONIG_EXTERN\r
841 OnigEncoding onig_get_encoding P_((regex_t* reg));\r
842 ONIG_EXTERN\r
843 OnigOptionType onig_get_options P_((regex_t* reg));\r
844 ONIG_EXTERN\r
845 OnigAmbigType onig_get_ambig_flag P_((regex_t* reg));\r
846 ONIG_EXTERN\r
847 OnigSyntaxType* onig_get_syntax P_((regex_t* reg));\r
848 ONIG_EXTERN\r
849 int onig_set_default_syntax P_((OnigSyntaxType* syntax));\r
850 ONIG_EXTERN\r
851 void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));\r
852 ONIG_EXTERN\r
853 unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax));\r
854 ONIG_EXTERN\r
855 unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax));\r
856 ONIG_EXTERN\r
857 unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax));\r
858 ONIG_EXTERN\r
859 OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax));\r
860 ONIG_EXTERN\r
861 void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op));\r
862 ONIG_EXTERN\r
863 void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2));\r
864 ONIG_EXTERN\r
865 void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior));\r
866 ONIG_EXTERN\r
867 void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options));\r
868 ONIG_EXTERN\r
869 int onig_set_meta_char P_((OnigEncoding enc, unsigned int what, OnigCodePoint code));\r
870 ONIG_EXTERN\r
871 void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from));\r
872 ONIG_EXTERN\r
873 OnigAmbigType onig_get_default_ambig_flag P_(());\r
874 ONIG_EXTERN\r
875 int onig_set_default_ambig_flag P_((OnigAmbigType ambig_flag));\r
876 ONIG_EXTERN\r
877 unsigned int onig_get_match_stack_limit_size P_((void));\r
878 ONIG_EXTERN\r
879 int onig_set_match_stack_limit_size P_((unsigned int size));\r
880 ONIG_EXTERN\r
881 int onig_end P_((void));\r
882 ONIG_EXTERN\r
883 const char* onig_version P_((void));\r
884 ONIG_EXTERN\r
885 const char* onig_copyright P_((void));\r
886 \r
887 #ifdef __cplusplus\r
888 }\r
889 #endif\r
890 \r
891 #endif /* ONIGURUMA_H */\r