00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef REGEX_H
00027 #define REGEX_H
00028
00029
00030 #ifdef RUBY
00031 # define re_adjust_startpos ruby_re_adjust_startpos
00032 # define re_compile_fastmap ruby_re_compile_fastmap
00033 # define re_compile_pattern ruby_re_compile_pattern
00034 # define re_copy_registers ruby_re_copy_registers
00035 # define re_free_pattern ruby_re_free_pattern
00036 # define re_free_registers ruby_re_free_registers
00037 # define re_match ruby_re_match
00038 # define re_mbcinit ruby_re_mbcinit
00039 # define re_search ruby_re_search
00040 # define re_set_casetable ruby_re_set_casetable
00041 # define register_info_type ruby_register_info_type
00042 #endif
00043
00044 #include <stddef.h>
00045
00046
00047
00048 #ifndef RE_NREGS
00049 #define RE_NREGS 10
00050 #endif
00051
00052 #define BYTEWIDTH 8
00053
00054 #define RE_REG_MAX ((1<<BYTEWIDTH)-1)
00055
00056
00057 #ifndef RE_DUP_MAX
00058 #define RE_DUP_MAX ((1 << 15) - 1)
00059 #endif
00060
00061
00062
00063
00064
00065
00066 #define RE_CHAR_CLASSES (1L << 9)
00067
00068
00069 #define RE_OPTION_IGNORECASE (1L)
00070
00071 #define RE_OPTION_EXTENDED (RE_OPTION_IGNORECASE<<1)
00072
00073 #define RE_OPTION_MULTILINE (RE_OPTION_EXTENDED<<1)
00074
00075 #define RE_OPTION_SINGLELINE (RE_OPTION_MULTILINE<<1)
00076
00077 #define RE_OPTION_LONGEST (RE_OPTION_SINGLELINE<<1)
00078
00079 #define RE_MAY_IGNORECASE (RE_OPTION_LONGEST<<1)
00080 #define RE_OPTIMIZE_ANCHOR (RE_MAY_IGNORECASE<<1)
00081 #define RE_OPTIMIZE_EXACTN (RE_OPTIMIZE_ANCHOR<<1)
00082 #define RE_OPTIMIZE_NO_BM (RE_OPTIMIZE_EXACTN<<1)
00083 #define RE_OPTIMIZE_BMATCH (RE_OPTIMIZE_NO_BM<<1)
00084
00085
00086 #define MBCTYPE_ASCII 0
00087 #define MBCTYPE_EUC 1
00088 #define MBCTYPE_SJIS 2
00089 #define MBCTYPE_UTF8 3
00090
00091 extern
00092 #if defined _WIN32 && !defined __GNUC__ && !defined RUBY_EXPORT
00093 __declspec(dllimport)
00094 # endif
00095 const unsigned char *re_mbctab;
00096 #if defined(__STDC__)
00097 void re_mbcinit (int);
00098 #else
00099 void re_mbcinit ();
00100 #endif
00101
00102 #undef ismbchar
00103 #define ismbchar(c) re_mbctab[(unsigned char)(c)]
00104 #define mbclen(c) (re_mbctab[(unsigned char)(c)]+1)
00105
00106
00107
00108 typedef union
00109 {
00110 unsigned char *word;
00111 struct {
00112 unsigned is_active : 1;
00113 unsigned matched_something : 1;
00114 } bits;
00115 } register_info_type;
00116
00117
00118
00119 struct re_pattern_buffer
00120 {
00121 char *buffer;
00122 int allocated;
00123 int used;
00124 char *fastmap;
00125
00126
00127 char *must;
00128
00129 int *must_skip;
00130 long options;
00131 long re_nsub;
00132 char fastmap_accurate;
00133
00134
00135 char can_be_null;
00136
00137
00138
00139
00140
00141
00142
00143
00144 unsigned char **regstart;
00145 unsigned char **regend;
00146 unsigned char **old_regstart;
00147 unsigned char **old_regend;
00148 register_info_type *reg_info;
00149 unsigned char **best_regstart;
00150 unsigned char **best_regend;
00151 };
00152
00153 typedef struct re_pattern_buffer regex_t;
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 struct re_registers
00166 {
00167 int allocated;
00168 int num_regs;
00169 int *beg;
00170 int *end;
00171 };
00172
00173
00174 typedef size_t regoff_t;
00175
00176
00177
00178
00179 typedef struct
00180 {
00181 regoff_t rm_so;
00182 regoff_t rm_eo;
00183 } regmatch_t;
00184
00185 #ifdef __STDC__
00186
00187 extern char *re_compile_pattern (const char *, int, struct re_pattern_buffer *);
00188 void re_free_pattern (struct re_pattern_buffer *);
00189
00190 extern int re_adjust_startpos (struct re_pattern_buffer *, const char*, int, int, int);
00191 extern void re_compile_fastmap (struct re_pattern_buffer *);
00192 extern int re_search (struct re_pattern_buffer *, const char*, int, int, int,
00193 struct re_registers *);
00194 extern int re_match (struct re_pattern_buffer *, const char *, int, int,
00195 struct re_registers *);
00196 extern void re_set_casetable (const char *table);
00197 extern void re_copy_registers (struct re_registers*, struct re_registers*);
00198 extern void re_free_registers (struct re_registers*);
00199
00200 #ifndef RUBY
00201
00202 extern char *re_comp (const char *);
00203 extern int re_exec (const char *);
00204 #endif
00205
00206 #else
00207
00208 extern char *re_compile_pattern ();
00209 void re_free_regexp ();
00210
00211 extern int re_adjust_startpos ();
00212 extern void re_compile_fastmap ();
00213 extern int re_search ();
00214 extern int re_match ();
00215 extern void re_set_casetable ();
00216 extern void re_copy_registers ();
00217 extern void re_free_registers ();
00218
00219 #endif
00220
00221 #endif
00222