summaryrefslogtreecommitdiff
path: root/ext/mbstring/oniguruma/onigposix.h
blob: ea93c6f9f73d48fd9441a94974cb7288d0c74170 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**********************************************************************

  onigposix.h - Oniguruma (regular expression library)

  Copyright (C) 2003  K.Kosako (kosako@sofnec.co.jp)

**********************************************************************/
#ifndef ONIGPOSIX_H
#define ONIGPOSIX_H

/* options */
#define REG_ICASE          (1<<0)
#define REG_NEWLINE        (1<<1)
#define REG_NOTBOL         (1<<2)
#define REG_NOTEOL         (1<<3)
#define REG_EXTENDED       (1<<4) /* if not setted, Basic Regular Expression */
#define REG_NOSUB          (1<<5)

/* POSIX error codes */
#define REG_NOMATCH          1
#define REG_BADPAT           2
#define REG_ECOLLATE         3
#define REG_ECTYPE           4
#define REG_EESCAPE          5
#define REG_ESUBREG          6
#define REG_EBRACK           7
#define REG_EPAREN           8
#define REG_EBRACE           9
#define REG_BADBR           10
#define REG_ERANGE          11
#define REG_ESPACE          12
#define REG_BADRPT          13

/* extended error codes */
#define REG_EONIG_INTERNAL  14
#define REG_EONIG_BADWC     15
#define REG_EONIG_BADARG    16
#define REG_EONIG_THREAD    17

/* character encodings (for reg_set_encoding()) */
/* These value must be same with MBCTYPE_XXXX in oniguruma.h.*/
#define REG_ENCODING_ASCII   0
#define REG_ENCODING_EUC_JP  1
#define REG_ENCODING_SJIS    2
#define REG_ENCODING_UTF8    3

#include <stdlib.h>


typedef int regoff_t;

typedef struct {
  regoff_t  rm_so;
  regoff_t  rm_eo;
} regmatch_t;

/* POSIX regex_t */
typedef struct {
  void*   onig;          /* Oniguruma regex_t*  */
  size_t  re_nsub;
  int     comp_options;
} regex_t;


#ifndef P_
#ifdef __STDC__
# define P_(args) args
#else
# define P_(args) ()
#endif
#endif

#ifndef REG_EXTERN
#if defined(_WIN32) && !defined(__CYGWIN__)
#if defined(EXPORT) || defined(RUBY_EXPORT)
#define REG_EXTERN   extern __declspec(dllexport)
#elif defined(IMPORT)
#define REG_EXTERN   extern __declspec(dllimport)
#endif
#endif
#endif

#ifndef REG_EXTERN
#define REG_EXTERN   extern
#endif

#ifndef ONIGURUMA_H
typedef unsigned int        RegOptionType;

/* syntax */
typedef struct {
  unsigned int op;
  unsigned int op2;
  unsigned int behavior;
  RegOptionType options;    /* default option */
} RegSyntaxType;

REG_EXTERN RegSyntaxType RegSyntaxPosixBasic;
REG_EXTERN RegSyntaxType RegSyntaxPosixExtended;
REG_EXTERN RegSyntaxType RegSyntaxEmacs;
REG_EXTERN RegSyntaxType RegSyntaxGrep;
REG_EXTERN RegSyntaxType RegSyntaxGnuRegex;
REG_EXTERN RegSyntaxType RegSyntaxJava;
REG_EXTERN RegSyntaxType RegSyntaxPerl;
REG_EXTERN RegSyntaxType RegSyntaxRuby;

/* predefined syntaxes (see regcomp.c) */
#define REG_SYNTAX_POSIX_BASIC        (&RegSyntaxPosixBasic)
#define REG_SYNTAX_POSIX_EXTENDED     (&RegSyntaxPosixExtended)
#define REG_SYNTAX_EMACS              (&RegSyntaxEmacs)
#define REG_SYNTAX_GREP               (&RegSyntaxGrep)
#define REG_SYNTAX_GNU_REGEX          (&RegSyntaxGnuRegex)
#define REG_SYNTAX_JAVA               (&RegSyntaxJava)
#define REG_SYNTAX_PERL               (&RegSyntaxPerl)
#define REG_SYNTAX_RUBY               (&RegSyntaxRuby)
/* default syntax */
#define REG_SYNTAX_DEFAULT             RegDefaultSyntax

REG_EXTERN RegSyntaxType*  RegDefaultSyntax;

REG_EXTERN int    regex_set_default_syntax P_((RegSyntaxType* syntax));
#endif /* ONIGURUMA_H */


REG_EXTERN int    regcomp P_((regex_t* reg, const char* pat, int options));
REG_EXTERN int    regexec P_((regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options));
REG_EXTERN void   regfree P_((regex_t* reg));
REG_EXTERN size_t regerror P_((int code, const regex_t* reg, char* buf, size_t size));

/* extended API */
REG_EXTERN void reg_set_encoding P_((int enc));
REG_EXTERN int  reg_name_to_group_numbers P_((regex_t* reg, unsigned char* name, unsigned char* name_end, int** nums));
REG_EXTERN int  reg_foreach_name P_((regex_t* reg, int (*func)(unsigned char*,int,int*,void*), void* arg));

#endif /* ONIGPOSIX_H */