source: EcnlProtoTool/trunk/onigmo-6.1.3/src/reggnu.c@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 4.1 KB
Line 
1/**********************************************************************
2 reggnu.c - Onigmo (Oniguruma-mod) (regular expression library)
3**********************************************************************/
4/*-
5 * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
6 * Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp>
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 */
30
31#include "regint.h"
32
33#ifndef ONIGMOGNU_H
34# include "onigmognu.h"
35#endif
36
37extern void
38re_free_registers(OnigRegion* r)
39{
40 /* 0: don't free self */
41 onig_region_free(r, 0);
42}
43
44extern int
45re_adjust_startpos(regex_t* reg, const char* string, int size,
46 int startpos, int range)
47{
48 if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {
49 UChar *p;
50 UChar *s = (UChar* )string + startpos;
51 UChar *e = (UChar* )string + size;
52
53 if (range > 0) {
54 p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s, e);
55 }
56 else {
57 p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s, e);
58 }
59 return (int )(p - (UChar* )string);
60 }
61
62 return startpos;
63}
64
65extern int
66re_match(regex_t* reg, const char* str, int size, int pos,
67 struct re_registers* regs)
68{
69 return (int )onig_match(reg, (UChar* )str, (UChar* )(str + size),
70 (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
71}
72
73extern int
74re_search(regex_t* bufp, const char* string, int size, int startpos, int range,
75 struct re_registers* regs)
76{
77 return (int )onig_search(bufp, (UChar* )string, (UChar* )(string + size),
78 (UChar* )(string + startpos),
79 (UChar* )(string + startpos + range),
80 regs, ONIG_OPTION_NONE);
81}
82
83extern int
84re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)
85{
86 int r;
87 OnigErrorInfo einfo;
88
89 r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo);
90 if (r != ONIG_NORMAL) {
91 if (IS_NOT_NULL(ebuf))
92 (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);
93 }
94
95 return r;
96}
97
98extern void
99re_free_pattern(regex_t* reg)
100{
101 onig_free(reg);
102}
103
104extern int
105re_alloc_pattern(regex_t** reg)
106{
107 *reg = (regex_t* )xmalloc(sizeof(regex_t));
108 if (IS_NULL(*reg)) return ONIGERR_MEMORY;
109
110 return onig_reg_init(*reg, ONIG_OPTION_DEFAULT,
111 ONIGENC_CASE_FOLD_DEFAULT,
112 OnigEncDefaultCharEncoding,
113 OnigDefaultSyntax);
114}
115
116extern void
117re_set_casetable(const char* table)
118{
119 /* onigenc_set_default_caseconv_table((UChar* )table); */
120}
121
122extern void
123re_mbcinit(int mb_code)
124{
125 OnigEncoding enc;
126
127 switch (mb_code) {
128 case RE_MBCTYPE_ASCII:
129 enc = ONIG_ENCODING_ASCII;
130 break;
131 case RE_MBCTYPE_EUC:
132 enc = ONIG_ENCODING_EUC_JP;
133 break;
134 case RE_MBCTYPE_SJIS:
135 enc = ONIG_ENCODING_SJIS;
136 break;
137 case RE_MBCTYPE_UTF8:
138 enc = ONIG_ENCODING_UTF8;
139 break;
140 default:
141 return ;
142 break;
143 }
144
145 onigenc_set_default_encoding(enc);
146}
Note: See TracBrowser for help on using the repository browser.