1 /**********************************************************************
2   ascii.c -  Oniguruma (regular expression library)
3 **********************************************************************/
4 /*-
5  * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #include "regint.h"   /* for USE_CALLOUT */
31 
32 static int
init(void)33 init(void)
34 {
35 #ifdef USE_CALLOUT
36 
37     int id;
38     OnigEncoding enc;
39     char* name;
40     unsigned int args[4];
41     OnigValue    opts[4];
42 
43     enc = ONIG_ENCODING_ASCII;
44 
45     name = "FAIL";        BC0_P(name, fail);
46     name = "MISMATCH";    BC0_P(name, mismatch);
47 
48     name = "MAX";
49     args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;
50     args[1] = ONIG_TYPE_CHAR;
51     opts[0].c = 'X';
52     BC_B_O(name, max, 2, args, 1, opts);
53 
54     name = "ERROR";
55     args[0] = ONIG_TYPE_LONG; opts[0].l = ONIG_ABORT;
56     BC_P_O(name, error, 1, args, 1, opts);
57 
58     name = "COUNT";
59     args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';
60     BC_B_O(name, count, 1, args, 1, opts);
61 
62     name = "TOTAL_COUNT";
63     args[0] = ONIG_TYPE_CHAR; opts[0].c = '>';
64     BC_B_O(name, total_count, 1, args, 1, opts);
65 
66     name = "CMP";
67     args[0] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;
68     args[1] = ONIG_TYPE_STRING;
69     args[2] = ONIG_TYPE_TAG | ONIG_TYPE_LONG;
70     BC_P(name, cmp, 3, args);
71 
72 #endif /* USE_CALLOUT */
73 
74   return ONIG_NORMAL;
75 }
76 
77 #if 0
78 static int
79 is_initialized(void)
80 {
81   /* Don't use this function */
82   /* can't answer, because builtin callout entries removed in onig_end() */
83   return 0;
84 }
85 #endif
86 
87 static int
ascii_is_code_ctype(OnigCodePoint code,unsigned int ctype)88 ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype)
89 {
90   if (code < 128)
91     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
92   else
93     return FALSE;
94 }
95 
96 OnigEncodingType OnigEncodingASCII = {
97   onigenc_single_byte_mbc_enc_len,
98   "US-ASCII",  /* name */
99   1,           /* max enc length */
100   1,           /* min enc length */
101   onigenc_is_mbc_newline_0x0a,
102   onigenc_single_byte_mbc_to_code,
103   onigenc_single_byte_code_to_mbclen,
104   onigenc_single_byte_code_to_mbc,
105   onigenc_ascii_mbc_case_fold,
106   onigenc_ascii_apply_all_case_fold,
107   onigenc_ascii_get_case_fold_codes_by_str,
108   onigenc_minimum_property_name_to_ctype,
109   ascii_is_code_ctype,
110   onigenc_not_support_get_ctype_code_range,
111   onigenc_single_byte_left_adjust_char_head,
112   onigenc_always_true_is_allowed_reverse_match,
113   init,
114   0, /* is_initialized */
115   onigenc_always_true_is_valid_mbc_string,
116   ENC_FLAG_ASCII_COMPATIBLE|ENC_FLAG_SKIP_OFFSET_1,
117   0, 0
118 };
119