Annotation of embedaddon/php/ext/mbstring/oniguruma/regint.h, revision 1.1

1.1     ! misho       1: #ifndef REGINT_H
        !             2: #define REGINT_H
        !             3: /**********************************************************************
        !             4:   regint.h -  Oniguruma (regular expression library)
        !             5: **********************************************************************/
        !             6: /*-
        !             7:  * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
        !             8:  * All rights reserved.
        !             9:  *
        !            10:  * Redistribution and use in source and binary forms, with or without
        !            11:  * modification, are permitted provided that the following conditions
        !            12:  * are met:
        !            13:  * 1. Redistributions of source code must retain the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer.
        !            15:  * 2. Redistributions in binary form must reproduce the above copyright
        !            16:  *    notice, this list of conditions and the following disclaimer in the
        !            17:  *    documentation and/or other materials provided with the distribution.
        !            18:  *
        !            19:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            29:  * SUCH DAMAGE.
        !            30:  */
        !            31: 
        !            32: /* for debug */
        !            33: /* #define ONIG_DEBUG_PARSE_TREE */
        !            34: /* #define ONIG_DEBUG_COMPILE */
        !            35: /* #define ONIG_DEBUG_SEARCH */
        !            36: /* #define ONIG_DEBUG_MATCH */
        !            37: /* #define ONIG_DONT_OPTIMIZE */
        !            38: 
        !            39: /* for byte-code statistical data. */
        !            40: /* #define ONIG_DEBUG_STATISTICS */
        !            41: 
        !            42: #if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \
        !            43:     defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \
        !            44:     defined(ONIG_DEBUG_STATISTICS)
        !            45: #ifndef ONIG_DEBUG
        !            46: #define ONIG_DEBUG
        !            47: #endif
        !            48: #endif
        !            49: 
        !            50: #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
        !            51:     (defined(__ppc__) && defined(__APPLE__)) || \
        !            52:     defined(__x86_64) || defined(__x86_64__) || \
        !            53:     defined(__mc68020__)
        !            54: #define PLATFORM_UNALIGNED_WORD_ACCESS
        !            55: #endif
        !            56: 
        !            57: /* config */
        !            58: /* spec. config */
        !            59: /* #define USE_UNICODE_FULL_RANGE_CTYPE */ /* --> move to regenc.h */
        !            60: #define USE_NAMED_GROUP
        !            61: #define USE_SUBEXP_CALL
        !            62: #define USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK /* /(?:()|())*\2/ */
        !            63: #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */
        !            64: #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
        !            65: /* #define USE_RECOMPILE_API */
        !            66: /* treat \r\n as line terminator.
        !            67:    !!! NO SUPPORT !!!
        !            68:    use this configuration on your own responsibility */
        !            69: /* #define USE_CRNL_AS_LINE_TERMINATOR */
        !            70: 
        !            71: /* internal config */
        !            72: #define USE_RECYCLE_NODE
        !            73: #define USE_OP_PUSH_OR_JUMP_EXACT
        !            74: #define USE_QUANTIFIER_PEEK_NEXT
        !            75: #define USE_ST_HASH_TABLE
        !            76: #define USE_SHARED_CCLASS_TABLE
        !            77: 
        !            78: #define INIT_MATCH_STACK_SIZE                     160
        !            79: #define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */
        !            80: 
        !            81: /* interface to external system */
        !            82: #ifdef NOT_RUBY      /* given from Makefile */
        !            83: #include "config.h"
        !            84: #define USE_BACKREF_AT_LEVEL
        !            85: #define USE_CAPTURE_HISTORY
        !            86: #define USE_VARIABLE_META_CHARS
        !            87: #define USE_WORD_BEGIN_END          /* "\<": word-begin, "\>": word-end */
        !            88: #define USE_POSIX_REGION_OPTION     /* needed for POSIX API support */
        !            89: #define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
        !            90: /* #define USE_COMBINATION_EXPLOSION_CHECK */     /* (X*)* */
        !            91: /* #define USE_MULTI_THREAD_SYSTEM */
        !            92: #define THREAD_SYSTEM_INIT          /* depend on thread system */
        !            93: #define THREAD_SYSTEM_END           /* depend on thread system */
        !            94: #define THREAD_ATOMIC_START         /* depend on thread system */
        !            95: #define THREAD_ATOMIC_END           /* depend on thread system */
        !            96: #define THREAD_PASS                 /* depend on thread system */
        !            97: #define xmalloc     malloc
        !            98: #define xrealloc    realloc
        !            99: #define xcalloc     calloc
        !           100: #define xfree       free
        !           101: #else
        !           102: #include "ruby.h"
        !           103: #include "rubysig.h"      /* for DEFER_INTS, ENABLE_INTS */
        !           104: 
        !           105: #define USE_COMBINATION_EXPLOSION_CHECK        /* (X*)* */
        !           106: #define USE_MULTI_THREAD_SYSTEM
        !           107: #define THREAD_SYSTEM_INIT
        !           108: #define THREAD_SYSTEM_END
        !           109: #define THREAD_ATOMIC_START          DEFER_INTS
        !           110: #define THREAD_ATOMIC_END            ENABLE_INTS
        !           111: #define THREAD_PASS                  rb_thread_schedule()
        !           112: 
        !           113: #define DEFAULT_WARN_FUNCTION        onig_rb_warn
        !           114: #define DEFAULT_VERB_WARN_FUNCTION   onig_rb_warning
        !           115: 
        !           116: #endif /* else NOT_RUBY */
        !           117: 
        !           118: #define STATE_CHECK_STRING_THRESHOLD_LEN             7
        !           119: #define STATE_CHECK_BUFF_MAX_SIZE               0x4000
        !           120: 
        !           121: #define THREAD_PASS_LIMIT_COUNT     8
        !           122: #define xmemset     memset
        !           123: #define xmemcpy     memcpy
        !           124: #define xmemmove    memmove
        !           125: #if defined(_WIN32) && !defined(__GNUC__)
        !           126: #define xalloca     _alloca
        !           127: #if _MSC_VER < 1500
        !           128: #ifndef vsnprintf
        !           129: #define vsnprintf   _vsnprintf
        !           130: #endif
        !           131: #endif
        !           132: #else
        !           133: #define xalloca     alloca
        !           134: #endif
        !           135: 
        !           136: #if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)
        !           137: #define ONIG_STATE_INC(reg) (reg)->state++
        !           138: #define ONIG_STATE_DEC(reg) (reg)->state--
        !           139: 
        !           140: #define ONIG_STATE_INC_THREAD(reg) do {\
        !           141:   THREAD_ATOMIC_START;\
        !           142:   (reg)->state++;\
        !           143:   THREAD_ATOMIC_END;\
        !           144: } while(0)
        !           145: #define ONIG_STATE_DEC_THREAD(reg) do {\
        !           146:   THREAD_ATOMIC_START;\
        !           147:   (reg)->state--;\
        !           148:   THREAD_ATOMIC_END;\
        !           149: } while(0)
        !           150: #else
        !           151: #define ONIG_STATE_INC(reg)         /* Nothing */
        !           152: #define ONIG_STATE_DEC(reg)         /* Nothing */
        !           153: #define ONIG_STATE_INC_THREAD(reg)  /* Nothing */
        !           154: #define ONIG_STATE_DEC_THREAD(reg)  /* Nothing */
        !           155: #endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */
        !           156: 
        !           157: 
        !           158: #define onig_st_is_member              st_is_member
        !           159: 
        !           160: #ifdef NOT_RUBY
        !           161: 
        !           162: #define st_init_table                  onig_st_init_table
        !           163: #define st_init_table_with_size        onig_st_init_table_with_size
        !           164: #define st_init_numtable               onig_st_init_numtable
        !           165: #define st_init_numtable_with_size     onig_st_init_numtable_with_size
        !           166: #define st_init_strtable               onig_st_init_strtable
        !           167: #define st_init_strtable_with_size     onig_st_init_strtable_with_size
        !           168: #define st_init_strend_table_with_size onig_st_init_strend_table_with_size
        !           169: #define st_delete                      onig_st_delete
        !           170: #define st_delete_safe                 onig_st_delete_safe
        !           171: #define st_insert                      onig_st_insert
        !           172: #define st_insert_strend               onig_st_insert_strend
        !           173: #define st_lookup                      onig_st_lookup
        !           174: #define st_lookup_strend               onig_st_lookup_strend
        !           175: #define st_foreach                     onig_st_foreach
        !           176: #define st_add_direct                  onig_st_add_direct
        !           177: #define st_add_direct_strend           onig_st_add_direct_strend
        !           178: #define st_free_table                  onig_st_free_table
        !           179: #define st_cleanup_safe                onig_st_cleanup_safe
        !           180: #define st_copy                        onig_st_copy
        !           181: #define st_nothing_key_clone           onig_st_nothing_key_clone
        !           182: #define st_nothing_key_free            onig_st_nothing_key_free
        !           183: 
        !           184: #else /* NOT_RUBY */
        !           185: 
        !           186: #define onig_st_init_table                  st_init_table
        !           187: #define onig_st_init_table_with_size        st_init_table_with_size
        !           188: #define onig_st_init_numtable               st_init_numtable
        !           189: #define onig_st_init_numtable_with_size     st_init_numtable_with_size
        !           190: #define onig_st_init_strtable               st_init_strtable
        !           191: #define onig_st_init_strtable_with_size     st_init_strtable_with_size
        !           192: #define onig_st_init_strend_table_with_size st_init_strend_table_with_size
        !           193: #define onig_st_delete                      st_delete
        !           194: #define onig_st_delete_safe                 st_delete_safe
        !           195: #define onig_st_insert                      st_insert
        !           196: #define onig_st_insert_strend               st_insert_strend
        !           197: #define onig_st_lookup                      st_lookup
        !           198: #define onig_st_lookup_strend               st_lookup_strend
        !           199: #define onig_st_foreach                     st_foreach
        !           200: #define onig_st_add_direct                  st_add_direct
        !           201: #define onig_st_add_direct_strend           st_add_direct_strend
        !           202: #define onig_st_free_table                  st_free_table
        !           203: #define onig_st_cleanup_safe                st_cleanup_safe
        !           204: #define onig_st_copy                        st_copy
        !           205: #define onig_st_nothing_key_clone           st_nothing_key_clone
        !           206: #define onig_st_nothing_key_free            st_nothing_key_free
        !           207: 
        !           208: #endif /* NOT_RUBY */
        !           209: 
        !           210: 
        !           211: #ifdef HAVE_STDLIB_H
        !           212: #include <stdlib.h>
        !           213: #endif
        !           214: 
        !           215: #if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)
        !           216: #include <alloca.h>
        !           217: #endif
        !           218: 
        !           219: #ifdef HAVE_STRING_H
        !           220: # include <string.h>
        !           221: #else
        !           222: # include <strings.h>
        !           223: #endif
        !           224: 
        !           225: #include <ctype.h>
        !           226: #ifdef HAVE_SYS_TYPES_H
        !           227: #ifndef __BORLANDC__
        !           228: #include <sys/types.h>
        !           229: #endif
        !           230: #endif
        !           231: 
        !           232: #ifdef __BORLANDC__
        !           233: #include <malloc.h>
        !           234: #endif
        !           235: 
        !           236: #ifdef ONIG_DEBUG
        !           237: # include <stdio.h>
        !           238: #endif
        !           239: 
        !           240: #include "regenc.h"
        !           241: #include "oniguruma.h"
        !           242: 
        !           243: #ifdef MIN
        !           244: #undef MIN
        !           245: #endif
        !           246: #ifdef MAX
        !           247: #undef MAX
        !           248: #endif
        !           249: #define MIN(a,b) (((a)>(b))?(b):(a))
        !           250: #define MAX(a,b) (((a)<(b))?(b):(a))
        !           251: 
        !           252: #define IS_NULL(p)                    (((void*)(p)) == (void*)0)
        !           253: #define IS_NOT_NULL(p)                (((void*)(p)) != (void*)0)
        !           254: #define CHECK_NULL_RETURN(p)          if (IS_NULL(p)) return NULL
        !           255: #define CHECK_NULL_RETURN_VAL(p,val)  if (IS_NULL(p)) return (val)
        !           256: #define NULL_UCHARP                   ((UChar* )0)
        !           257: 
        !           258: #ifndef PLATFORM_UNALIGNED_WORD_ACCESS
        !           259: /* sizeof(OnigCodePoint) */
        !           260: #define WORD_ALIGNMENT_SIZE     SIZEOF_LONG
        !           261: 
        !           262: #define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
        !           263:   (pad_size) = WORD_ALIGNMENT_SIZE \
        !           264:                - ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
        !           265:   if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\
        !           266: } while (0)
        !           267: 
        !           268: #define ALIGNMENT_RIGHT(addr) do {\
        !           269:   (addr) += (WORD_ALIGNMENT_SIZE - 1);\
        !           270:   (addr) -= ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\
        !           271: } while (0)
        !           272: 
        !           273: 
        !           274: #define B_SHIFT  8
        !           275: #define B_MASK   0xff
        !           276: 
        !           277: #define SERIALIZE_2BYTE_INT(i,p) do {\
        !           278:   *(p)     = ((i) >> B_SHIFT) & B_MASK;\
        !           279:   *((p)+1) = (i) & B_MASK;\
        !           280: } while (0)
        !           281: 
        !           282: #define SERIALIZE_4BYTE_INT(i,p) do {\
        !           283:   *(p)     = ((i) >> B_SHIFT*3) & B_MASK;\
        !           284:   *((p)+1) = ((i) >> B_SHIFT*2) & B_MASK;\
        !           285:   *((p)+2) = ((i) >> B_SHIFT  ) & B_MASK;\
        !           286:   *((p)+3) = (i) & B_MASK;\
        !           287: } while (0)
        !           288: 
        !           289: #define SERIALIZE_8BYTE_INT(i,p) do {\
        !           290:   *(p)     = ((i) >> B_SHIFT*7) & B_MASK;\
        !           291:   *((p)+1) = ((i) >> B_SHIFT*6) & B_MASK;\
        !           292:   *((p)+2) = ((i) >> B_SHIFT*5) & B_MASK;\
        !           293:   *((p)+3) = ((i) >> B_SHIFT*4) & B_MASK;\
        !           294:   *((p)+4) = ((i) >> B_SHIFT*3) & B_MASK;\
        !           295:   *((p)+5) = ((i) >> B_SHIFT*2) & B_MASK;\
        !           296:   *((p)+6) = ((i) >> B_SHIFT  ) & B_MASK;\
        !           297:   *((p)+7) = (i) & B_MASK;\
        !           298: } while (0)
        !           299: 
        !           300: #define GET_2BYTE_INT_INC(type,i,p) do {\
        !           301:   (i) = (type )(((unsigned int )(*(p)) << B_SHIFT) | (unsigned int )((p)[1]));\
        !           302:   (p) += 2;\
        !           303: } while (0)
        !           304: 
        !           305: #define GET_4BYTE_INT_INC(type,i,p) do {\
        !           306:   (i) = (type )(((unsigned int )((p)[0]) << B_SHIFT*3) | \
        !           307:                ((unsigned int )((p)[1]) << B_SHIFT*2) | \
        !           308:                ((unsigned int )((p)[2]) << B_SHIFT  ) | \
        !           309:                ((unsigned int )((p)[3])             )); \
        !           310:   (p) += 4;\
        !           311: } while (0)
        !           312: 
        !           313: #define GET_8BYTE_INT_INC(type,i,p) do {\
        !           314:   (i) = (type )(((unsigned long )((p)[0]) << B_SHIFT*7) | \
        !           315:                ((unsigned long )((p)[1]) << B_SHIFT*6) | \
        !           316:                ((unsigned long )((p)[2]) << B_SHIFT*5) | \
        !           317:                ((unsigned long )((p)[3]) << B_SHIFT*4) | \
        !           318:                ((unsigned long )((p)[4]) << B_SHIFT*3) | \
        !           319:                ((unsigned long )((p)[5]) << B_SHIFT*2) | \
        !           320:                ((unsigned long )((p)[6]) << B_SHIFT  ) | \
        !           321:                ((unsigned long )((p)[7])             )); \
        !           322:   (p) += 8;\
        !           323: } while (0)
        !           324: 
        !           325: #if SIZEOF_SHORT == 2
        !           326: #define GET_SHORT_INC(i,p)     GET_2BYTE_INT_INC(short,i,p)
        !           327: #define SERIALIZE_SHORT(i,p)   SERIALIZE_2BYTE_INT(i,p)
        !           328: #elif SIZEOF_SHORT == 4
        !           329: #define GET_SHORT_INC(i,p)     GET_4BYTE_INT_INC(short,i,p)
        !           330: #define SERIALIZE_SHORT(i,p)   SERIALIZE_4BYTE_INT(i,p)
        !           331: #elif SIZEOF_SHORT == 8
        !           332: #define GET_SHORT_INC(i,p)     GET_8BYTE_INT_INC(short,i,p)
        !           333: #define SERIALIZE_SHORT(i,p)   SERIALIZE_8BYTE_INT(i,p)
        !           334: #endif
        !           335: 
        !           336: #if SIZEOF_INT == 2
        !           337: #define GET_INT_INC(i,p)       GET_2BYTE_INT_INC(int,i,p)
        !           338: #define GET_UINT_INC(i,p)      GET_2BYTE_INT_INC(unsigned,i,p)
        !           339: #define SERIALIZE_INT(i,p)     SERIALIZE_2BYTE_INT(i,p)
        !           340: #define SERIALIZE_UINT(i,p)    SERIALIZE_2BYTE_INT(i,p)
        !           341: #elif SIZEOF_INT == 4
        !           342: #define GET_INT_INC(i,p)       GET_4BYTE_INT_INC(int,i,p)
        !           343: #define GET_UINT_INC(i,p)      GET_4BYTE_INT_INC(unsigned,i,p)
        !           344: #define SERIALIZE_INT(i,p)     SERIALIZE_4BYTE_INT(i,p)
        !           345: #define SERIALIZE_UINT(i,p)    SERIALIZE_4BYTE_INT(i,p)
        !           346: #elif SIZEOF_INT == 8
        !           347: #define GET_INT_INC(i,p)       GET_8BYTE_INT_INC(int,i,p)
        !           348: #define GET_UINT_INC(i,p)      GET_8BYTE_INT_INC(unsigned,i,p)
        !           349: #define SERIALIZE_INT(i,p)     SERIALIZE_8BYTE_INT(i,p)
        !           350: #define SERIALIZE_UINT(i,p)    SERIALIZE_8BYTE_INT(i,p)
        !           351: #endif
        !           352: 
        !           353: #endif /* PLATFORM_UNALIGNED_WORD_ACCESS */
        !           354: 
        !           355: /* stack pop level */
        !           356: #define STACK_POP_LEVEL_FREE        0
        !           357: #define STACK_POP_LEVEL_MEM_START   1
        !           358: #define STACK_POP_LEVEL_ALL         2
        !           359: 
        !           360: /* optimize flags */
        !           361: #define ONIG_OPTIMIZE_NONE              0
        !           362: #define ONIG_OPTIMIZE_EXACT             1   /* Slow Search */
        !           363: #define ONIG_OPTIMIZE_EXACT_BM          2   /* Boyer Moore Search */
        !           364: #define ONIG_OPTIMIZE_EXACT_BM_NOT_REV  3   /* BM   (but not simple match) */
        !           365: #define ONIG_OPTIMIZE_EXACT_IC          4   /* Slow Search (ignore case) */
        !           366: #define ONIG_OPTIMIZE_MAP               5   /* char map */
        !           367: 
        !           368: /* bit status */
        !           369: typedef unsigned int  BitStatusType;
        !           370: 
        !           371: #define BIT_STATUS_BITS_NUM          (sizeof(BitStatusType) * 8)
        !           372: #define BIT_STATUS_CLEAR(stats)      (stats) = 0
        !           373: #define BIT_STATUS_ON_ALL(stats)     (stats) = ~((BitStatusType )0)
        !           374: #define BIT_STATUS_AT(stats,n) \
        !           375:   ((n) < BIT_STATUS_BITS_NUM  ?  ((stats) & (1 << n)) : ((stats) & 1))
        !           376: 
        !           377: #define BIT_STATUS_ON_AT(stats,n) do {\
        !           378:   if ((n) < BIT_STATUS_BITS_NUM)\
        !           379:     (stats) |= (1 << (n));\
        !           380:   else\
        !           381:     (stats) |= 1;\
        !           382: } while (0)
        !           383: 
        !           384: #define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\
        !           385:   if ((n) < BIT_STATUS_BITS_NUM)\
        !           386:     (stats) |= (1 << (n));\
        !           387: } while (0)
        !           388: 
        !           389: 
        !           390: #define INT_MAX_LIMIT           ((1UL << (SIZEOF_INT * 8 - 1)) - 1)
        !           391: 
        !           392: #define DIGITVAL(code)    ((code) - '0')
        !           393: #define ODIGITVAL(code)   DIGITVAL(code)
        !           394: #define XDIGITVAL(enc,code) \
        !           395:   (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \
        !           396:    : (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10))
        !           397: 
        !           398: #define IS_SINGLELINE(option)     ((option) & ONIG_OPTION_SINGLELINE)
        !           399: #define IS_MULTILINE(option)      ((option) & ONIG_OPTION_MULTILINE)
        !           400: #define IS_IGNORECASE(option)     ((option) & ONIG_OPTION_IGNORECASE)
        !           401: #define IS_EXTEND(option)         ((option) & ONIG_OPTION_EXTEND)
        !           402: #define IS_FIND_LONGEST(option)   ((option) & ONIG_OPTION_FIND_LONGEST)
        !           403: #define IS_FIND_NOT_EMPTY(option) ((option) & ONIG_OPTION_FIND_NOT_EMPTY)
        !           404: #define IS_POSIXLINE(option)      (IS_SINGLELINE(option) && IS_MULTILINE(option))
        !           405: #define IS_FIND_CONDITION(option) ((option) & \
        !           406:           (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY))
        !           407: #define IS_NOTBOL(option)         ((option) & ONIG_OPTION_NOTBOL)
        !           408: #define IS_NOTEOL(option)         ((option) & ONIG_OPTION_NOTEOL)
        !           409: #define IS_POSIX_REGION(option)   ((option) & ONIG_OPTION_POSIX_REGION)
        !           410: 
        !           411: /* OP_SET_OPTION is required for these options.
        !           412: #define IS_DYNAMIC_OPTION(option) \
        !           413:   (((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0)
        !           414: */
        !           415: /* ignore-case and multibyte status are included in compiled code. */
        !           416: #define IS_DYNAMIC_OPTION(option)  0
        !           417: 
        !           418: #define REPEAT_INFINITE         -1
        !           419: #define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
        !           420: 
        !           421: /* bitset */
        !           422: #define BITS_PER_BYTE      8
        !           423: #define SINGLE_BYTE_SIZE   (1 << BITS_PER_BYTE)
        !           424: #define BITS_IN_ROOM       (sizeof(Bits) * BITS_PER_BYTE)
        !           425: #define BITSET_SIZE        (SINGLE_BYTE_SIZE / BITS_IN_ROOM)
        !           426: 
        !           427: #ifdef PLATFORM_UNALIGNED_WORD_ACCESS
        !           428: typedef unsigned int   Bits;
        !           429: #else
        !           430: typedef unsigned char  Bits;
        !           431: #endif
        !           432: typedef Bits           BitSet[BITSET_SIZE];
        !           433: typedef Bits*          BitSetRef;
        !           434: 
        !           435: #define SIZE_BITSET        sizeof(BitSet)
        !           436: 
        !           437: #define BITSET_CLEAR(bs) do {\
        !           438:   int i;\
        !           439:   for (i = 0; i < BITSET_SIZE; i++) { (bs)[i] = 0; }\
        !           440: } while (0)
        !           441: 
        !           442: #define BS_ROOM(bs,pos)            (bs)[pos / BITS_IN_ROOM]
        !           443: #define BS_BIT(pos)                (1 << (pos % BITS_IN_ROOM))
        !           444: 
        !           445: #define BITSET_AT(bs, pos)         (BS_ROOM(bs,pos) & BS_BIT(pos))
        !           446: #define BITSET_SET_BIT(bs, pos)     BS_ROOM(bs,pos) |= BS_BIT(pos)
        !           447: #define BITSET_CLEAR_BIT(bs, pos)   BS_ROOM(bs,pos) &= ~(BS_BIT(pos))
        !           448: #define BITSET_INVERT_BIT(bs, pos)  BS_ROOM(bs,pos) ^= BS_BIT(pos)
        !           449: 
        !           450: /* bytes buffer */
        !           451: typedef struct _BBuf {
        !           452:   UChar* p;
        !           453:   unsigned int used;
        !           454:   unsigned int alloc;
        !           455: } BBuf;
        !           456: 
        !           457: #define BBUF_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))
        !           458: 
        !           459: #define BBUF_SIZE_INC(buf,inc) do{\
        !           460:   (buf)->alloc += (inc);\
        !           461:   (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
        !           462:   if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
        !           463: } while (0)
        !           464: 
        !           465: #define BBUF_EXPAND(buf,low) do{\
        !           466:   do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\
        !           467:   (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\
        !           468:   if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
        !           469: } while (0)
        !           470: 
        !           471: #define BBUF_ENSURE_SIZE(buf,size) do{\
        !           472:   unsigned int new_alloc = (buf)->alloc;\
        !           473:   while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\
        !           474:   if ((buf)->alloc != new_alloc) {\
        !           475:     (buf)->p = (UChar* )xrealloc((buf)->p, new_alloc);\
        !           476:     if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\
        !           477:     (buf)->alloc = new_alloc;\
        !           478:   }\
        !           479: } while (0)
        !           480: 
        !           481: #define BBUF_WRITE(buf,pos,bytes,n) do{\
        !           482:   int used = (pos) + (n);\
        !           483:   if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
        !           484:   xmemcpy((buf)->p + (pos), (bytes), (n));\
        !           485:   if ((buf)->used < (unsigned int )used) (buf)->used = used;\
        !           486: } while (0)
        !           487: 
        !           488: #define BBUF_WRITE1(buf,pos,byte) do{\
        !           489:   int used = (pos) + 1;\
        !           490:   if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\
        !           491:   (buf)->p[(pos)] = (byte);\
        !           492:   if ((buf)->used < (unsigned int )used) (buf)->used = used;\
        !           493: } while (0)
        !           494: 
        !           495: #define BBUF_ADD(buf,bytes,n)       BBUF_WRITE((buf),(buf)->used,(bytes),(n))
        !           496: #define BBUF_ADD1(buf,byte)         BBUF_WRITE1((buf),(buf)->used,(byte))
        !           497: #define BBUF_GET_ADD_ADDRESS(buf)   ((buf)->p + (buf)->used)
        !           498: #define BBUF_GET_OFFSET_POS(buf)    ((buf)->used)
        !           499: 
        !           500: /* from < to */
        !           501: #define BBUF_MOVE_RIGHT(buf,from,to,n) do {\
        !           502:   if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\
        !           503:   xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
        !           504:   if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\
        !           505: } while (0)
        !           506: 
        !           507: /* from > to */
        !           508: #define BBUF_MOVE_LEFT(buf,from,to,n) do {\
        !           509:   xmemmove((buf)->p + (to), (buf)->p + (from), (n));\
        !           510: } while (0)
        !           511: 
        !           512: /* from > to */
        !           513: #define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\
        !           514:   xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\
        !           515:   (buf)->used -= (from - to);\
        !           516: } while (0)
        !           517: 
        !           518: #define BBUF_INSERT(buf,pos,bytes,n) do {\
        !           519:   if (pos >= (buf)->used) {\
        !           520:     BBUF_WRITE(buf,pos,bytes,n);\
        !           521:   }\
        !           522:   else {\
        !           523:     BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\
        !           524:     xmemcpy((buf)->p + (pos), (bytes), (n));\
        !           525:   }\
        !           526: } while (0)
        !           527: 
        !           528: #define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)]
        !           529: 
        !           530: 
        !           531: #define ANCHOR_BEGIN_BUF        (1<<0)
        !           532: #define ANCHOR_BEGIN_LINE       (1<<1)
        !           533: #define ANCHOR_BEGIN_POSITION   (1<<2)
        !           534: #define ANCHOR_END_BUF          (1<<3)
        !           535: #define ANCHOR_SEMI_END_BUF     (1<<4)
        !           536: #define ANCHOR_END_LINE         (1<<5)
        !           537: 
        !           538: #define ANCHOR_WORD_BOUND       (1<<6)
        !           539: #define ANCHOR_NOT_WORD_BOUND   (1<<7)
        !           540: #define ANCHOR_WORD_BEGIN       (1<<8)
        !           541: #define ANCHOR_WORD_END         (1<<9)
        !           542: #define ANCHOR_PREC_READ        (1<<10)
        !           543: #define ANCHOR_PREC_READ_NOT    (1<<11)
        !           544: #define ANCHOR_LOOK_BEHIND      (1<<12)
        !           545: #define ANCHOR_LOOK_BEHIND_NOT  (1<<13)
        !           546: 
        !           547: #define ANCHOR_ANYCHAR_STAR     (1<<14)   /* ".*" optimize info */
        !           548: #define ANCHOR_ANYCHAR_STAR_ML  (1<<15)   /* ".*" optimize info (multi-line) */
        !           549: 
        !           550: /* operation code */
        !           551: enum OpCode {
        !           552:   OP_FINISH = 0,        /* matching process terminator (no more alternative) */
        !           553:   OP_END    = 1,        /* pattern code terminator (success end) */
        !           554: 
        !           555:   OP_EXACT1 = 2,        /* single byte, N = 1 */
        !           556:   OP_EXACT2,            /* single byte, N = 2 */
        !           557:   OP_EXACT3,            /* single byte, N = 3 */
        !           558:   OP_EXACT4,            /* single byte, N = 4 */
        !           559:   OP_EXACT5,            /* single byte, N = 5 */
        !           560:   OP_EXACTN,            /* single byte */
        !           561:   OP_EXACTMB2N1,        /* mb-length = 2 N = 1 */
        !           562:   OP_EXACTMB2N2,        /* mb-length = 2 N = 2 */
        !           563:   OP_EXACTMB2N3,        /* mb-length = 2 N = 3 */
        !           564:   OP_EXACTMB2N,         /* mb-length = 2 */
        !           565:   OP_EXACTMB3N,         /* mb-length = 3 */
        !           566:   OP_EXACTMBN,          /* other length */
        !           567: 
        !           568:   OP_EXACT1_IC,         /* single byte, N = 1, ignore case */
        !           569:   OP_EXACTN_IC,         /* single byte,        ignore case */
        !           570: 
        !           571:   OP_CCLASS,
        !           572:   OP_CCLASS_MB,
        !           573:   OP_CCLASS_MIX,
        !           574:   OP_CCLASS_NOT,
        !           575:   OP_CCLASS_MB_NOT,
        !           576:   OP_CCLASS_MIX_NOT,
        !           577:   OP_CCLASS_NODE,       /* pointer to CClassNode node */
        !           578: 
        !           579:   OP_ANYCHAR,                 /* "."  */
        !           580:   OP_ANYCHAR_ML,              /* "."  multi-line */
        !           581:   OP_ANYCHAR_STAR,            /* ".*" */
        !           582:   OP_ANYCHAR_ML_STAR,         /* ".*" multi-line */
        !           583:   OP_ANYCHAR_STAR_PEEK_NEXT,
        !           584:   OP_ANYCHAR_ML_STAR_PEEK_NEXT,
        !           585: 
        !           586:   OP_WORD,
        !           587:   OP_NOT_WORD,
        !           588:   OP_WORD_BOUND,
        !           589:   OP_NOT_WORD_BOUND,
        !           590:   OP_WORD_BEGIN,
        !           591:   OP_WORD_END,
        !           592: 
        !           593:   OP_BEGIN_BUF,
        !           594:   OP_END_BUF,
        !           595:   OP_BEGIN_LINE,
        !           596:   OP_END_LINE,
        !           597:   OP_SEMI_END_BUF,
        !           598:   OP_BEGIN_POSITION,
        !           599: 
        !           600:   OP_BACKREF1,
        !           601:   OP_BACKREF2,
        !           602:   OP_BACKREFN,
        !           603:   OP_BACKREFN_IC,
        !           604:   OP_BACKREF_MULTI,
        !           605:   OP_BACKREF_MULTI_IC,
        !           606:   OP_BACKREF_AT_LEVEL,    /* \k<xxx+n>, \k<xxx-n> */
        !           607: 
        !           608:   OP_MEMORY_START,
        !           609:   OP_MEMORY_START_PUSH,   /* push back-tracker to stack */
        !           610:   OP_MEMORY_END_PUSH,     /* push back-tracker to stack */
        !           611:   OP_MEMORY_END_PUSH_REC, /* push back-tracker to stack */
        !           612:   OP_MEMORY_END,
        !           613:   OP_MEMORY_END_REC,      /* push marker to stack */
        !           614: 
        !           615:   OP_SET_OPTION_PUSH,    /* set option and push recover option */
        !           616:   OP_SET_OPTION,         /* set option */
        !           617: 
        !           618:   OP_FAIL,               /* pop stack and move */
        !           619:   OP_JUMP,
        !           620:   OP_PUSH,
        !           621:   OP_POP,
        !           622:   OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */
        !           623:   OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */
        !           624:   OP_REPEAT,               /* {n,m} */
        !           625:   OP_REPEAT_NG,            /* {n,m}? (non greedy) */
        !           626:   OP_REPEAT_INC,
        !           627:   OP_REPEAT_INC_NG,        /* non greedy */
        !           628:   OP_REPEAT_INC_SG,        /* search and get in stack */
        !           629:   OP_REPEAT_INC_NG_SG,     /* search and get in stack (non greedy) */
        !           630:   OP_NULL_CHECK_START,     /* null loop checker start */
        !           631:   OP_NULL_CHECK_END,       /* null loop checker end   */
        !           632:   OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */
        !           633:   OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */
        !           634: 
        !           635:   OP_PUSH_POS,             /* (?=...)  start */
        !           636:   OP_POP_POS,              /* (?=...)  end   */
        !           637:   OP_PUSH_POS_NOT,         /* (?!...)  start */
        !           638:   OP_FAIL_POS,             /* (?!...)  end   */
        !           639:   OP_PUSH_STOP_BT,         /* (?>...)  start */
        !           640:   OP_POP_STOP_BT,          /* (?>...)  end   */
        !           641:   OP_LOOK_BEHIND,          /* (?<=...) start (no needs end opcode) */
        !           642:   OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */
        !           643:   OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end   */
        !           644: 
        !           645:   OP_CALL,                 /* \g<name> */
        !           646:   OP_RETURN,
        !           647: 
        !           648:   OP_STATE_CHECK_PUSH,         /* combination explosion check and push */
        !           649:   OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump  */
        !           650:   OP_STATE_CHECK,              /* check only */
        !           651:   OP_STATE_CHECK_ANYCHAR_STAR,
        !           652:   OP_STATE_CHECK_ANYCHAR_ML_STAR
        !           653: };
        !           654: 
        !           655: typedef int RelAddrType;
        !           656: typedef int AbsAddrType;
        !           657: typedef int LengthType;
        !           658: typedef int RepeatNumType;
        !           659: typedef short int MemNumType;
        !           660: typedef short int StateCheckNumType;
        !           661: typedef void* PointerType;
        !           662: 
        !           663: #define SIZE_OPCODE           1
        !           664: #define SIZE_RELADDR          sizeof(RelAddrType)
        !           665: #define SIZE_ABSADDR          sizeof(AbsAddrType)
        !           666: #define SIZE_LENGTH           sizeof(LengthType)
        !           667: #define SIZE_MEMNUM           sizeof(MemNumType)
        !           668: #define SIZE_STATE_CHECK_NUM  sizeof(StateCheckNumType)
        !           669: #define SIZE_REPEATNUM        sizeof(RepeatNumType)
        !           670: #define SIZE_OPTION           sizeof(OnigOptionType)
        !           671: #define SIZE_CODE_POINT       sizeof(OnigCodePoint)
        !           672: #define SIZE_POINTER          sizeof(PointerType)
        !           673: 
        !           674: 
        !           675: #ifdef PLATFORM_UNALIGNED_WORD_ACCESS
        !           676: 
        !           677: #define PLATFORM_GET_INC(val,p,type) do{\
        !           678:   val  = *(type* )p;\
        !           679:   (p) += sizeof(type);\
        !           680: } while(0)
        !           681: 
        !           682: #else
        !           683: 
        !           684: #define PLATFORM_GET_INC(val,p,type) do{\
        !           685:   xmemcpy(&val, (p), sizeof(type));\
        !           686:   (p) += sizeof(type);\
        !           687: } while(0)
        !           688: 
        !           689: #endif  /* PLATFORM_UNALIGNED_WORD_ACCESS */
        !           690: 
        !           691: #define GET_RELADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, RelAddrType)
        !           692: #define GET_ABSADDR_INC(addr,p)    PLATFORM_GET_INC(addr,   p, AbsAddrType)
        !           693: #define GET_LENGTH_INC(len,p)      PLATFORM_GET_INC(len,    p, LengthType)
        !           694: #define GET_MEMNUM_INC(num,p)      PLATFORM_GET_INC(num,    p, MemNumType)
        !           695: #define GET_REPEATNUM_INC(num,p)   PLATFORM_GET_INC(num,    p, RepeatNumType)
        !           696: #define GET_OPTION_INC(option,p)   PLATFORM_GET_INC(option, p, OnigOptionType)
        !           697: #define GET_POINTER_INC(ptr,p)     PLATFORM_GET_INC(ptr,    p, PointerType)
        !           698: #define GET_STATE_CHECK_NUM_INC(num,p)  PLATFORM_GET_INC(num, p, StateCheckNumType)
        !           699: 
        !           700: /* code point's address must be aligned address. */
        !           701: #define GET_CODE_POINT(code,p)   code = *((OnigCodePoint* )(p))
        !           702: #define GET_BYTE_INC(byte,p) do{\
        !           703:   byte = *(p);\
        !           704:   (p)++;\
        !           705: } while(0)
        !           706: 
        !           707: 
        !           708: /* op-code + arg size */
        !           709: #define SIZE_OP_ANYCHAR_STAR            SIZE_OPCODE
        !           710: #define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
        !           711: #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
        !           712: #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
        !           713: #define SIZE_OP_POP                     SIZE_OPCODE
        !           714: #define SIZE_OP_PUSH_OR_JUMP_EXACT1    (SIZE_OPCODE + SIZE_RELADDR + 1)
        !           715: #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
        !           716: #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)
        !           717: #define SIZE_OP_REPEAT_INC_NG          (SIZE_OPCODE + SIZE_MEMNUM)
        !           718: #define SIZE_OP_PUSH_POS                SIZE_OPCODE
        !           719: #define SIZE_OP_PUSH_POS_NOT           (SIZE_OPCODE + SIZE_RELADDR)
        !           720: #define SIZE_OP_POP_POS                 SIZE_OPCODE
        !           721: #define SIZE_OP_FAIL_POS                SIZE_OPCODE
        !           722: #define SIZE_OP_SET_OPTION             (SIZE_OPCODE + SIZE_OPTION)
        !           723: #define SIZE_OP_SET_OPTION_PUSH        (SIZE_OPCODE + SIZE_OPTION)
        !           724: #define SIZE_OP_FAIL                    SIZE_OPCODE
        !           725: #define SIZE_OP_MEMORY_START           (SIZE_OPCODE + SIZE_MEMNUM)
        !           726: #define SIZE_OP_MEMORY_START_PUSH      (SIZE_OPCODE + SIZE_MEMNUM)
        !           727: #define SIZE_OP_MEMORY_END_PUSH        (SIZE_OPCODE + SIZE_MEMNUM)
        !           728: #define SIZE_OP_MEMORY_END_PUSH_REC    (SIZE_OPCODE + SIZE_MEMNUM)
        !           729: #define SIZE_OP_MEMORY_END             (SIZE_OPCODE + SIZE_MEMNUM)
        !           730: #define SIZE_OP_MEMORY_END_REC         (SIZE_OPCODE + SIZE_MEMNUM)
        !           731: #define SIZE_OP_PUSH_STOP_BT            SIZE_OPCODE
        !           732: #define SIZE_OP_POP_STOP_BT             SIZE_OPCODE
        !           733: #define SIZE_OP_NULL_CHECK_START       (SIZE_OPCODE + SIZE_MEMNUM)
        !           734: #define SIZE_OP_NULL_CHECK_END         (SIZE_OPCODE + SIZE_MEMNUM)
        !           735: #define SIZE_OP_LOOK_BEHIND            (SIZE_OPCODE + SIZE_LENGTH)
        !           736: #define SIZE_OP_PUSH_LOOK_BEHIND_NOT   (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH)
        !           737: #define SIZE_OP_FAIL_LOOK_BEHIND_NOT    SIZE_OPCODE
        !           738: #define SIZE_OP_CALL                   (SIZE_OPCODE + SIZE_ABSADDR)
        !           739: #define SIZE_OP_RETURN                  SIZE_OPCODE
        !           740: 
        !           741: #ifdef USE_COMBINATION_EXPLOSION_CHECK
        !           742: #define SIZE_OP_STATE_CHECK            (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
        !           743: #define SIZE_OP_STATE_CHECK_PUSH       (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
        !           744: #define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
        !           745: #define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
        !           746: #endif
        !           747: 
        !           748: #define MC_ESC(enc)               (enc)->meta_char_table.esc
        !           749: #define MC_ANYCHAR(enc)           (enc)->meta_char_table.anychar
        !           750: #define MC_ANYTIME(enc)           (enc)->meta_char_table.anytime
        !           751: #define MC_ZERO_OR_ONE_TIME(enc)  (enc)->meta_char_table.zero_or_one_time
        !           752: #define MC_ONE_OR_MORE_TIME(enc)  (enc)->meta_char_table.one_or_more_time
        !           753: #define MC_ANYCHAR_ANYTIME(enc)   (enc)->meta_char_table.anychar_anytime
        !           754: 
        !           755: #define IS_MC_ESC_CODE(code, enc, syn) \
        !           756:   ((code) == MC_ESC(enc) && \
        !           757:    !IS_SYNTAX_OP2((syn), ONIG_SYN_OP2_INEFFECTIVE_ESCAPE))
        !           758: 
        !           759: 
        !           760: #define SYN_POSIX_COMMON_OP \
        !           761:  ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_POSIX_BRACKET | \
        !           762:    ONIG_SYN_OP_DECIMAL_BACKREF | \
        !           763:    ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_ASTERISK_ZERO_INF | \
        !           764:    ONIG_SYN_OP_LINE_ANCHOR | \
        !           765:    ONIG_SYN_OP_ESC_CONTROL_CHARS )
        !           766: 
        !           767: #define SYN_GNU_REGEX_OP \
        !           768:   ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | \
        !           769:     ONIG_SYN_OP_POSIX_BRACKET | ONIG_SYN_OP_DECIMAL_BACKREF | \
        !           770:     ONIG_SYN_OP_BRACE_INTERVAL | ONIG_SYN_OP_LPAREN_SUBEXP | \
        !           771:     ONIG_SYN_OP_VBAR_ALT | \
        !           772:     ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | \
        !           773:     ONIG_SYN_OP_QMARK_ZERO_ONE | \
        !           774:     ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR | ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR | \
        !           775:     ONIG_SYN_OP_ESC_W_WORD | \
        !           776:     ONIG_SYN_OP_ESC_B_WORD_BOUND | ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | \
        !           777:     ONIG_SYN_OP_ESC_S_WHITE_SPACE | ONIG_SYN_OP_ESC_D_DIGIT | \
        !           778:     ONIG_SYN_OP_LINE_ANCHOR )
        !           779: 
        !           780: #define SYN_GNU_REGEX_BV \
        !           781:   ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | \
        !           782:     ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | ONIG_SYN_ALLOW_INVALID_INTERVAL | \
        !           783:     ONIG_SYN_BACKSLASH_ESCAPE_IN_CC | ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC )
        !           784: 
        !           785: /* cclass node */
        !           786: #define FLAG_CCLASS_NOT            1
        !           787: #define FLAG_CCLASS_SHARE         (1<<1)
        !           788: 
        !           789: #define CCLASS_SET_NOT(cc)      (cc)->flags |= FLAG_CCLASS_NOT
        !           790: #define CCLASS_CLEAR_NOT(cc)    (cc)->flags &= ~FLAG_CCLASS_NOT
        !           791: #define CCLASS_SET_SHARE(cc)    (cc)->flags |= FLAG_CCLASS_SHARE
        !           792: #define IS_CCLASS_NOT(cc)     (((cc)->flags & FLAG_CCLASS_NOT) != 0)
        !           793: #define IS_CCLASS_SHARE(cc)   (((cc)->flags & FLAG_CCLASS_SHARE) != 0)
        !           794: 
        !           795: typedef struct {
        !           796:   int    flags;
        !           797:   BitSet bs;
        !           798:   BBuf*  mbuf;     /* multi-byte info or NULL */
        !           799: } CClassNode;
        !           800: 
        !           801: 
        !           802: #ifdef ONIG_DEBUG
        !           803: 
        !           804: typedef struct {
        !           805:   short int opcode;
        !           806:   char*     name;
        !           807:   short int arg_type;
        !           808: } OnigOpInfoType;
        !           809: 
        !           810: extern OnigOpInfoType OnigOpInfo[];
        !           811: 
        !           812: extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc));
        !           813: 
        !           814: #ifdef ONIG_DEBUG_STATISTICS
        !           815: extern void onig_statistics_init P_((void));
        !           816: extern void onig_print_statistics P_((FILE* f));
        !           817: #endif
        !           818: #endif
        !           819: 
        !           820: extern UChar* onig_error_code_to_format P_((int code));
        !           821: extern void  onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
        !           822: extern int  onig_bbuf_init P_((BBuf* buf, int size));
        !           823: extern int  onig_alloc_init P_((regex_t** reg, OnigOptionType option, OnigAmbigType ambig_flag, OnigEncoding enc, OnigSyntaxType* syntax));
        !           824: extern int  onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
        !           825: extern void onig_chain_reduce P_((regex_t* reg));
        !           826: extern void onig_chain_link_add P_((regex_t* to, regex_t* add));
        !           827: extern void onig_transfer P_((regex_t* to, regex_t* from));
        !           828: extern int  onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));
        !           829: 
        !           830: #endif /* REGINT_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>