source: EcnlProtoTool/trunk/onigmo-5.15.0/src/regenc.h@ 321

Last change on this file since 321 was 321, checked in by coas-nagasima, 7 years ago

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 9.5 KB
Line 
1#ifndef REGENC_H
2#define REGENC_H
3/**********************************************************************
4 regenc.h - Onigmo (Oniguruma-mod) (regular expression library)
5**********************************************************************/
6/*-
7 * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
8 * Copyright (c) 2011 K.Takata <kentkt AT csc DOT jp>
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33#ifndef PACKAGE
34/* PACKAGE is defined in config.h */
35#include "config.h"
36#endif
37
38#ifdef ONIG_ESCAPE_UCHAR_COLLISION
39#undef ONIG_ESCAPE_UCHAR_COLLISION
40#endif
41
42#include "oniguruma.h"
43
44typedef struct {
45 OnigCodePoint from;
46 OnigCodePoint to;
47} OnigPairCaseFoldCodes;
48
49
50#ifndef NULL
51#define NULL ((void* )0)
52#endif
53
54#ifndef TRUE
55#define TRUE 1
56#endif
57
58#ifndef FALSE
59#define FALSE 0
60#endif
61
62#ifndef ARG_UNUSED
63#if defined(__GNUC__)
64# define ARG_UNUSED __attribute__ ((unused))
65#else
66# define ARG_UNUSED
67#endif
68#endif
69
70#define ONIG_IS_NULL(p) (((void*)(p)) == (void*)0)
71#define ONIG_IS_NOT_NULL(p) (((void*)(p)) != (void*)0)
72#define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL
73#define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val)
74
75#define enclen(enc,p) ONIGENC_MBC_ENC_LEN(enc,p)
76
77/* character types bit flag */
78#define BIT_CTYPE_NEWLINE (1<< ONIGENC_CTYPE_NEWLINE)
79#define BIT_CTYPE_ALPHA (1<< ONIGENC_CTYPE_ALPHA)
80#define BIT_CTYPE_BLANK (1<< ONIGENC_CTYPE_BLANK)
81#define BIT_CTYPE_CNTRL (1<< ONIGENC_CTYPE_CNTRL)
82#define BIT_CTYPE_DIGIT (1<< ONIGENC_CTYPE_DIGIT)
83#define BIT_CTYPE_GRAPH (1<< ONIGENC_CTYPE_GRAPH)
84#define BIT_CTYPE_LOWER (1<< ONIGENC_CTYPE_LOWER)
85#define BIT_CTYPE_PRINT (1<< ONIGENC_CTYPE_PRINT)
86#define BIT_CTYPE_PUNCT (1<< ONIGENC_CTYPE_PUNCT)
87#define BIT_CTYPE_SPACE (1<< ONIGENC_CTYPE_SPACE)
88#define BIT_CTYPE_UPPER (1<< ONIGENC_CTYPE_UPPER)
89#define BIT_CTYPE_XDIGIT (1<< ONIGENC_CTYPE_XDIGIT)
90#define BIT_CTYPE_WORD (1<< ONIGENC_CTYPE_WORD)
91#define BIT_CTYPE_ALNUM (1<< ONIGENC_CTYPE_ALNUM)
92#define BIT_CTYPE_ASCII (1<< ONIGENC_CTYPE_ASCII)
93
94#define CTYPE_TO_BIT(ctype) (1<<(ctype))
95#define CTYPE_IS_WORD_GRAPH_PRINT(ctype) \
96 ((ctype) == ONIGENC_CTYPE_WORD || (ctype) == ONIGENC_CTYPE_GRAPH ||\
97 (ctype) == ONIGENC_CTYPE_PRINT)
98
99
100typedef struct {
101 const UChar *name;
102 int ctype;
103 short int len;
104} PosixBracketEntryType;
105
106#define POSIX_BRACKET_ENTRY_INIT(name, ctype) \
107 {(const UChar* )(name), (ctype), (short int )(sizeof(name) - 1)}
108
109#ifndef numberof
110#define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
111#endif
112
113
114#define USE_CRNL_AS_LINE_TERMINATOR
115#define USE_UNICODE_PROPERTIES
116#define USE_UNICODE_AGE_PROPERTIES
117/* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
118/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTS #18 */
119
120
121#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_UTF8
122
123/* for encoding system implementation (internal) */
124ONIG_EXTERN int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
125ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
126ONIG_EXTERN int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
127ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
128ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]));
129ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end));
130
131
132/* methods for single byte encoding */
133ONIG_EXTERN int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));
134ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p));
135ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end));
136ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));
137ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));
138ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s));
139ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end));
140ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end));
141ONIG_EXTERN int onigenc_ascii_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
142
143/* methods for multi byte encoding */
144ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));
145ONIG_EXTERN int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));
146ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));
147ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
148ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
149ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
150ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
151ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));
152ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
153ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
154
155
156/* in enc/unicode.c */
157ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
158ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));
159ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));
160ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
161ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
162ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
163
164
165#define UTF16_IS_SURROGATE_FIRST(c) (((c) & 0xfc) == 0xd8)
166#define UTF16_IS_SURROGATE_SECOND(c) (((c) & 0xfc) == 0xdc)
167
168#define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \
169 OnigEncISO_8859_1_ToLowerCaseTable[c]
170#define ONIGENC_ISO_8859_1_TO_UPPER_CASE(c) \
171 OnigEncISO_8859_1_ToUpperCaseTable[c]
172
173ONIG_EXTERN const UChar OnigEncISO_8859_1_ToLowerCaseTable[];
174ONIG_EXTERN const UChar OnigEncISO_8859_1_ToUpperCaseTable[];
175
176ONIG_EXTERN int
177onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));
178ONIG_EXTERN int
179onigenc_with_ascii_strnicmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));
180ONIG_EXTERN UChar*
181onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n));
182
183/* defined in regexec.c, but used in enc/xxx.c */
184extern int onig_is_in_code_range P_((const UChar* p, OnigCodePoint code));
185
186ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding;
187ONIG_EXTERN const UChar OnigEncAsciiToLowerCaseTable[];
188ONIG_EXTERN const UChar OnigEncAsciiToUpperCaseTable[];
189ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[];
190
191#define ONIGENC_IS_ASCII_CODE(code) ((code) < 0x80)
192#define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c]
193#define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c]
194#define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \
195 ((OnigEncAsciiCtypeTable[code] & CTYPE_TO_BIT(ctype)) != 0)
196#define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \
197 (ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_UPPER) ||\
198 ONIGENC_IS_ASCII_CODE_CTYPE(code, ONIGENC_CTYPE_LOWER))
199
200/* Check if the code is in the range. (from <= code && code <= to) */
201#define ONIGENC_IS_IN_RANGE(code, from, to) \
202 ((OnigCodePoint )((code) - (from)) <= (OnigCodePoint )((to) - (from)))
203
204
205#endif /* REGENC_H */
Note: See TracBrowser for help on using the repository browser.