Coverage Report

Created: 2023-05-19 06:16

/src/ntp-dev/sntp/libopts/ag-char-map.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 *  29 bits for 46 character classifications
3
 *  generated by char-mapper on 04/30/15 at 19:55:13
4
 *
5
 *  This file contains the character classifications
6
 *  used by AutoGen and AutoOpts for identifying tokens.
7
 *  The table is static scope, so %guard is empty.
8
 *
9
 *  This file is part of AutoOpts, a companion to AutoGen.
10
 *  AutoOpts is free software.
11
 *  AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved
12
 *
13
 *  AutoOpts is available under any one of two licenses.  The license
14
 *  in use must be one of these two and the choice is under the control
15
 *  of the user of the license.
16
 *
17
 *  The GNU Lesser General Public License, version 3 or later
18
 *  See the files "COPYING.lgplv3" and "COPYING.gplv3"
19
 *
20
 *  The Modified Berkeley Software Distribution License
21
 *  See the file "COPYING.mbsd"
22
 *
23
 *  These files have the following sha256 sums:
24
 *
25
 *  8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95  COPYING.gplv3
26
 *  4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b  COPYING.lgplv3
27
 *  13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239  COPYING.mbsd
28
 */
29
#ifndef AG_CHAR_MAP_H_GUARD
30
#define AG_CHAR_MAP_H_GUARD 1
31
32
#ifdef HAVE_CONFIG_H
33
# if defined(HAVE_INTTYPES_H)
34
#   include <inttypes.h>
35
36
# elif defined(HAVE_STDINT_H)
37
#   include <stdint.h>
38
39
# elif !defined(HAVE_UINT32_T)
40
#   if SIZEOF_INT == 4
41
      typedef unsigned int    uint32_t;
42
#   elif SIZEOF_LONG == 4
43
      typedef unsigned long   uint32_t;
44
#   endif
45
# endif /* HAVE_*INT*_H header */
46
47
#else /* not HAVE_CONFIG_H -- */
48
# include <inttypes.h>
49
#endif /* HAVE_CONFIG_H */
50
51
#if 0 /* mapping specification source (from autogen.map) */
52
// 
53
// %guard
54
// %file           ag-char-map.h
55
// %backup
56
// %optimize
57
// 
58
// %comment -- see above
59
// %
60
// 
61
// newline         "\n"
62
// nul-byte        "\x00"
63
// dir-sep         "/\\"
64
// percent         "%"
65
// comma           ","
66
// colon           ":"
67
// underscore      "_"
68
// plus            "+"
69
// dollar          "$"
70
// option-marker   "-"
71
// 
72
// horiz-white     "\t "
73
// alt-white       "\v\f\r\b"
74
// whitespace      +horiz-white  +newline +alt-white
75
// non-nl-white    +horiz-white  +alt-white
76
// quote           "'\""
77
// parentheses     "()"
78
// 
79
// graphic         "!-~"
80
// inversion       "~-"
81
// oct-digit       "0-7"
82
// dec-digit       "89"          +oct-digit
83
// hex-digit       "a-fA-F"      +dec-digit
84
// lower-case      "a-z"
85
// upper-case      "A-Z"
86
// alphabetic      +lower-case   +upper-case
87
// alphanumeric    +alphabetic   +dec-digit
88
// var-first       +underscore   +alphabetic
89
// variable-name   +var-first    +dec-digit
90
// option-name     "^-"          +variable-name
91
// value-name      +colon        +option-name
92
// name-sep        "[.]"
93
// compound-name   +value-name   +name-sep +horiz-white
94
// scheme-note     +parentheses  +quote
95
// 
96
// unquotable      "!-~"         -"#,;<=>[\\]`{}?*" -quote -parentheses
97
// end-xml-token   "/>"          +whitespace
98
// plus-n-space    +plus         +whitespace
99
// punctuation     "!-~"         -alphanumeric -"_"
100
// suffix          "-._"         +alphanumeric
101
// suffix-fmt      +percent      +suffix +dir-sep
102
// false-type      "nNfF0"       +nul-byte
103
// file-name       +dir-sep      +suffix
104
// end-token       +nul-byte     +whitespace
105
// end-list-entry  +comma        +end-token
106
// set-separator   "|+-!"        +end-list-entry
107
// signed-number   +inversion    +dec-digit
108
// make-script     +dollar       +newline
109
// load-line-skip  +horiz-white  +option-marker
110
//
111
#endif /* 0 -- mapping spec. source */
112
113
114
typedef uint32_t ag_char_map_mask_t;
115
116
#define  IS_NEWLINE_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000001)
117
#define SPN_NEWLINE_CHARS(_s)         spn_ag_char_map_chars(_s, 0)
118
#define BRK_NEWLINE_CHARS(_s)         brk_ag_char_map_chars(_s, 0)
119
#define SPN_NEWLINE_BACK(s,e)         spn_ag_char_map_back(s, e, 0)
120
#define BRK_NEWLINE_BACK(s,e)         brk_ag_char_map_back(s, e, 0)
121
#define  IS_NUL_BYTE_CHAR( _c)         is_ag_char_map_char((char)(_c), 0x00000002)
122
#define SPN_NUL_BYTE_CHARS(_s)        spn_ag_char_map_chars(_s, 1)
123
#define BRK_NUL_BYTE_CHARS(_s)        brk_ag_char_map_chars(_s, 1)
124
#define SPN_NUL_BYTE_BACK(s,e)        spn_ag_char_map_back(s, e, 1)
125
#define BRK_NUL_BYTE_BACK(s,e)        brk_ag_char_map_back(s, e, 1)
126
#define  IS_DIR_SEP_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000004)
127
#define SPN_DIR_SEP_CHARS(_s)         spn_ag_char_map_chars(_s, 2)
128
#define BRK_DIR_SEP_CHARS(_s)         brk_ag_char_map_chars(_s, 2)
129
#define SPN_DIR_SEP_BACK(s,e)         spn_ag_char_map_back(s, e, 2)
130
#define BRK_DIR_SEP_BACK(s,e)         brk_ag_char_map_back(s, e, 2)
131
#define  IS_PERCENT_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00000008)
132
#define SPN_PERCENT_CHARS(_s)         spn_ag_char_map_chars(_s, 3)
133
#define BRK_PERCENT_CHARS(_s)         brk_ag_char_map_chars(_s, 3)
134
#define SPN_PERCENT_BACK(s,e)         spn_ag_char_map_back(s, e, 3)
135
#define BRK_PERCENT_BACK(s,e)         brk_ag_char_map_back(s, e, 3)
136
#define  IS_COMMA_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00000010)
137
#define SPN_COMMA_CHARS(_s)           spn_ag_char_map_chars(_s, 4)
138
#define BRK_COMMA_CHARS(_s)           brk_ag_char_map_chars(_s, 4)
139
#define SPN_COMMA_BACK(s,e)           spn_ag_char_map_back(s, e, 4)
140
#define BRK_COMMA_BACK(s,e)           brk_ag_char_map_back(s, e, 4)
141
#define  IS_COLON_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00000020)
142
#define SPN_COLON_CHARS(_s)           spn_ag_char_map_chars(_s, 5)
143
#define BRK_COLON_CHARS(_s)           brk_ag_char_map_chars(_s, 5)
144
#define SPN_COLON_BACK(s,e)           spn_ag_char_map_back(s, e, 5)
145
#define BRK_COLON_BACK(s,e)           brk_ag_char_map_back(s, e, 5)
146
#define  IS_UNDERSCORE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00000040)
147
#define SPN_UNDERSCORE_CHARS(_s)      spn_ag_char_map_chars(_s, 6)
148
#define BRK_UNDERSCORE_CHARS(_s)      brk_ag_char_map_chars(_s, 6)
149
#define SPN_UNDERSCORE_BACK(s,e)      spn_ag_char_map_back(s, e, 6)
150
#define BRK_UNDERSCORE_BACK(s,e)      brk_ag_char_map_back(s, e, 6)
151
#define  IS_PLUS_CHAR( _c)             is_ag_char_map_char((char)(_c), 0x00000080)
152
#define SPN_PLUS_CHARS(_s)            spn_ag_char_map_chars(_s, 7)
153
#define BRK_PLUS_CHARS(_s)            brk_ag_char_map_chars(_s, 7)
154
#define SPN_PLUS_BACK(s,e)            spn_ag_char_map_back(s, e, 7)
155
#define BRK_PLUS_BACK(s,e)            brk_ag_char_map_back(s, e, 7)
156
#define  IS_DOLLAR_CHAR( _c)           is_ag_char_map_char((char)(_c), 0x00000100)
157
#define SPN_DOLLAR_CHARS(_s)          spn_ag_char_map_chars(_s, 8)
158
#define BRK_DOLLAR_CHARS(_s)          brk_ag_char_map_chars(_s, 8)
159
#define SPN_DOLLAR_BACK(s,e)          spn_ag_char_map_back(s, e, 8)
160
#define BRK_DOLLAR_BACK(s,e)          brk_ag_char_map_back(s, e, 8)
161
#define  IS_OPTION_MARKER_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x00000200)
162
#define SPN_OPTION_MARKER_CHARS(_s)   spn_ag_char_map_chars(_s, 9)
163
#define BRK_OPTION_MARKER_CHARS(_s)   brk_ag_char_map_chars(_s, 9)
164
#define SPN_OPTION_MARKER_BACK(s,e)   spn_ag_char_map_back(s, e, 9)
165
#define BRK_OPTION_MARKER_BACK(s,e)   brk_ag_char_map_back(s, e, 9)
166
#define  IS_HORIZ_WHITE_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00000400)
167
0
#define SPN_HORIZ_WHITE_CHARS(_s)     spn_ag_char_map_chars(_s, 10)
168
#define BRK_HORIZ_WHITE_CHARS(_s)     brk_ag_char_map_chars(_s, 10)
169
#define SPN_HORIZ_WHITE_BACK(s,e)     spn_ag_char_map_back(s, e, 10)
170
#define BRK_HORIZ_WHITE_BACK(s,e)     brk_ag_char_map_back(s, e, 10)
171
#define  IS_ALT_WHITE_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00000800)
172
#define SPN_ALT_WHITE_CHARS(_s)       spn_ag_char_map_chars(_s, 11)
173
#define BRK_ALT_WHITE_CHARS(_s)       brk_ag_char_map_chars(_s, 11)
174
#define SPN_ALT_WHITE_BACK(s,e)       spn_ag_char_map_back(s, e, 11)
175
#define BRK_ALT_WHITE_BACK(s,e)       brk_ag_char_map_back(s, e, 11)
176
0
#define  IS_WHITESPACE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00000C01)
177
0
#define SPN_WHITESPACE_CHARS(_s)      spn_ag_char_map_chars(_s, 12)
178
0
#define BRK_WHITESPACE_CHARS(_s)      brk_ag_char_map_chars(_s, 12)
179
0
#define SPN_WHITESPACE_BACK(s,e)      spn_ag_char_map_back(s, e, 12)
180
#define BRK_WHITESPACE_BACK(s,e)      brk_ag_char_map_back(s, e, 12)
181
#define  IS_NON_NL_WHITE_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x00000C00)
182
#define SPN_NON_NL_WHITE_CHARS(_s)    spn_ag_char_map_chars(_s, 13)
183
#define BRK_NON_NL_WHITE_CHARS(_s)    brk_ag_char_map_chars(_s, 13)
184
#define SPN_NON_NL_WHITE_BACK(s,e)    spn_ag_char_map_back(s, e, 13)
185
#define BRK_NON_NL_WHITE_BACK(s,e)    brk_ag_char_map_back(s, e, 13)
186
#define  IS_QUOTE_CHAR( _c)            is_ag_char_map_char((char)(_c), 0x00001000)
187
#define SPN_QUOTE_CHARS(_s)           spn_ag_char_map_chars(_s, 14)
188
#define BRK_QUOTE_CHARS(_s)           brk_ag_char_map_chars(_s, 14)
189
#define SPN_QUOTE_BACK(s,e)           spn_ag_char_map_back(s, e, 14)
190
#define BRK_QUOTE_BACK(s,e)           brk_ag_char_map_back(s, e, 14)
191
#define  IS_PARENTHESES_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00002000)
192
#define SPN_PARENTHESES_CHARS(_s)     spn_ag_char_map_chars(_s, 15)
193
#define BRK_PARENTHESES_CHARS(_s)     brk_ag_char_map_chars(_s, 15)
194
#define SPN_PARENTHESES_BACK(s,e)     spn_ag_char_map_back(s, e, 15)
195
#define BRK_PARENTHESES_BACK(s,e)     brk_ag_char_map_back(s, e, 15)
196
0
#define  IS_GRAPHIC_CHAR( _c)          is_ag_char_map_char((char)(_c), 0x00004000)
197
#define SPN_GRAPHIC_CHARS(_s)         spn_ag_char_map_chars(_s, 16)
198
#define BRK_GRAPHIC_CHARS(_s)         brk_ag_char_map_chars(_s, 16)
199
#define SPN_GRAPHIC_BACK(s,e)         spn_ag_char_map_back(s, e, 16)
200
#define BRK_GRAPHIC_BACK(s,e)         brk_ag_char_map_back(s, e, 16)
201
0
#define  IS_INVERSION_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00008000)
202
#define SPN_INVERSION_CHARS(_s)       spn_ag_char_map_chars(_s, 17)
203
#define BRK_INVERSION_CHARS(_s)       brk_ag_char_map_chars(_s, 17)
204
#define SPN_INVERSION_BACK(s,e)       spn_ag_char_map_back(s, e, 17)
205
#define BRK_INVERSION_BACK(s,e)       brk_ag_char_map_back(s, e, 17)
206
0
#define  IS_OCT_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00010000)
207
#define SPN_OCT_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 18)
208
#define BRK_OCT_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 18)
209
#define SPN_OCT_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 18)
210
#define BRK_OCT_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 18)
211
0
#define  IS_DEC_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00030000)
212
#define SPN_DEC_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 19)
213
#define BRK_DEC_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 19)
214
#define SPN_DEC_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 19)
215
#define BRK_DEC_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 19)
216
0
#define  IS_HEX_DIGIT_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00070000)
217
#define SPN_HEX_DIGIT_CHARS(_s)       spn_ag_char_map_chars(_s, 20)
218
#define BRK_HEX_DIGIT_CHARS(_s)       brk_ag_char_map_chars(_s, 20)
219
#define SPN_HEX_DIGIT_BACK(s,e)       spn_ag_char_map_back(s, e, 20)
220
#define BRK_HEX_DIGIT_BACK(s,e)       brk_ag_char_map_back(s, e, 20)
221
0
#define  IS_LOWER_CASE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00080000)
222
0
#define SPN_LOWER_CASE_CHARS(_s)      spn_ag_char_map_chars(_s, 21)
223
#define BRK_LOWER_CASE_CHARS(_s)      brk_ag_char_map_chars(_s, 21)
224
#define SPN_LOWER_CASE_BACK(s,e)      spn_ag_char_map_back(s, e, 21)
225
#define BRK_LOWER_CASE_BACK(s,e)      brk_ag_char_map_back(s, e, 21)
226
0
#define  IS_UPPER_CASE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00100000)
227
#define SPN_UPPER_CASE_CHARS(_s)      spn_ag_char_map_chars(_s, 22)
228
#define BRK_UPPER_CASE_CHARS(_s)      brk_ag_char_map_chars(_s, 22)
229
#define SPN_UPPER_CASE_BACK(s,e)      spn_ag_char_map_back(s, e, 22)
230
#define BRK_UPPER_CASE_BACK(s,e)      brk_ag_char_map_back(s, e, 22)
231
#define  IS_ALPHABETIC_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00180000)
232
#define SPN_ALPHABETIC_CHARS(_s)      spn_ag_char_map_chars(_s, 23)
233
#define BRK_ALPHABETIC_CHARS(_s)      brk_ag_char_map_chars(_s, 23)
234
#define SPN_ALPHABETIC_BACK(s,e)      spn_ag_char_map_back(s, e, 23)
235
#define BRK_ALPHABETIC_BACK(s,e)      brk_ag_char_map_back(s, e, 23)
236
#define  IS_ALPHANUMERIC_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x001B0000)
237
#define SPN_ALPHANUMERIC_CHARS(_s)    spn_ag_char_map_chars(_s, 24)
238
#define BRK_ALPHANUMERIC_CHARS(_s)    brk_ag_char_map_chars(_s, 24)
239
#define SPN_ALPHANUMERIC_BACK(s,e)    spn_ag_char_map_back(s, e, 24)
240
#define BRK_ALPHANUMERIC_BACK(s,e)    brk_ag_char_map_back(s, e, 24)
241
0
#define  IS_VAR_FIRST_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00180040)
242
#define SPN_VAR_FIRST_CHARS(_s)       spn_ag_char_map_chars(_s, 25)
243
#define BRK_VAR_FIRST_CHARS(_s)       brk_ag_char_map_chars(_s, 25)
244
#define SPN_VAR_FIRST_BACK(s,e)       spn_ag_char_map_back(s, e, 25)
245
#define BRK_VAR_FIRST_BACK(s,e)       brk_ag_char_map_back(s, e, 25)
246
#define  IS_VARIABLE_NAME_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x001B0040)
247
#define SPN_VARIABLE_NAME_CHARS(_s)   spn_ag_char_map_chars(_s, 26)
248
#define BRK_VARIABLE_NAME_CHARS(_s)   brk_ag_char_map_chars(_s, 26)
249
#define SPN_VARIABLE_NAME_BACK(s,e)   spn_ag_char_map_back(s, e, 26)
250
#define BRK_VARIABLE_NAME_BACK(s,e)   brk_ag_char_map_back(s, e, 26)
251
0
#define  IS_OPTION_NAME_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x003B0040)
252
0
#define SPN_OPTION_NAME_CHARS(_s)     spn_ag_char_map_chars(_s, 27)
253
#define BRK_OPTION_NAME_CHARS(_s)     brk_ag_char_map_chars(_s, 27)
254
#define SPN_OPTION_NAME_BACK(s,e)     spn_ag_char_map_back(s, e, 27)
255
#define BRK_OPTION_NAME_BACK(s,e)     brk_ag_char_map_back(s, e, 27)
256
0
#define  IS_VALUE_NAME_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x003B0060)
257
0
#define SPN_VALUE_NAME_CHARS(_s)      spn_ag_char_map_chars(_s, 28)
258
#define BRK_VALUE_NAME_CHARS(_s)      brk_ag_char_map_chars(_s, 28)
259
#define SPN_VALUE_NAME_BACK(s,e)      spn_ag_char_map_back(s, e, 28)
260
#define BRK_VALUE_NAME_BACK(s,e)      brk_ag_char_map_back(s, e, 28)
261
#define  IS_NAME_SEP_CHAR( _c)         is_ag_char_map_char((char)(_c), 0x00400000)
262
#define SPN_NAME_SEP_CHARS(_s)        spn_ag_char_map_chars(_s, 29)
263
#define BRK_NAME_SEP_CHARS(_s)        brk_ag_char_map_chars(_s, 29)
264
#define SPN_NAME_SEP_BACK(s,e)        spn_ag_char_map_back(s, e, 29)
265
#define BRK_NAME_SEP_BACK(s,e)        brk_ag_char_map_back(s, e, 29)
266
#define  IS_COMPOUND_NAME_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x007B0460)
267
#define SPN_COMPOUND_NAME_CHARS(_s)   spn_ag_char_map_chars(_s, 30)
268
#define BRK_COMPOUND_NAME_CHARS(_s)   brk_ag_char_map_chars(_s, 30)
269
#define SPN_COMPOUND_NAME_BACK(s,e)   spn_ag_char_map_back(s, e, 30)
270
#define BRK_COMPOUND_NAME_BACK(s,e)   brk_ag_char_map_back(s, e, 30)
271
#define  IS_SCHEME_NOTE_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00003000)
272
#define SPN_SCHEME_NOTE_CHARS(_s)     spn_ag_char_map_chars(_s, 31)
273
#define BRK_SCHEME_NOTE_CHARS(_s)     brk_ag_char_map_chars(_s, 31)
274
#define SPN_SCHEME_NOTE_BACK(s,e)     spn_ag_char_map_back(s, e, 31)
275
#define BRK_SCHEME_NOTE_BACK(s,e)     brk_ag_char_map_back(s, e, 31)
276
#define  IS_UNQUOTABLE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x00800000)
277
#define SPN_UNQUOTABLE_CHARS(_s)      spn_ag_char_map_chars(_s, 32)
278
#define BRK_UNQUOTABLE_CHARS(_s)      brk_ag_char_map_chars(_s, 32)
279
#define SPN_UNQUOTABLE_BACK(s,e)      spn_ag_char_map_back(s, e, 32)
280
#define BRK_UNQUOTABLE_BACK(s,e)      brk_ag_char_map_back(s, e, 32)
281
0
#define  IS_END_XML_TOKEN_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x01000C01)
282
#define SPN_END_XML_TOKEN_CHARS(_s)   spn_ag_char_map_chars(_s, 33)
283
0
#define BRK_END_XML_TOKEN_CHARS(_s)   brk_ag_char_map_chars(_s, 33)
284
#define SPN_END_XML_TOKEN_BACK(s,e)   spn_ag_char_map_back(s, e, 33)
285
#define BRK_END_XML_TOKEN_BACK(s,e)   brk_ag_char_map_back(s, e, 33)
286
0
#define  IS_PLUS_N_SPACE_CHAR( _c)     is_ag_char_map_char((char)(_c), 0x00000C81)
287
0
#define SPN_PLUS_N_SPACE_CHARS(_s)    spn_ag_char_map_chars(_s, 34)
288
#define BRK_PLUS_N_SPACE_CHARS(_s)    brk_ag_char_map_chars(_s, 34)
289
#define SPN_PLUS_N_SPACE_BACK(s,e)    spn_ag_char_map_back(s, e, 34)
290
#define BRK_PLUS_N_SPACE_BACK(s,e)    brk_ag_char_map_back(s, e, 34)
291
#define  IS_PUNCTUATION_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x02000000)
292
#define SPN_PUNCTUATION_CHARS(_s)     spn_ag_char_map_chars(_s, 35)
293
#define BRK_PUNCTUATION_CHARS(_s)     brk_ag_char_map_chars(_s, 35)
294
#define SPN_PUNCTUATION_BACK(s,e)     spn_ag_char_map_back(s, e, 35)
295
#define BRK_PUNCTUATION_BACK(s,e)     brk_ag_char_map_back(s, e, 35)
296
#define  IS_SUFFIX_CHAR( _c)           is_ag_char_map_char((char)(_c), 0x041B0000)
297
#define SPN_SUFFIX_CHARS(_s)          spn_ag_char_map_chars(_s, 36)
298
#define BRK_SUFFIX_CHARS(_s)          brk_ag_char_map_chars(_s, 36)
299
#define SPN_SUFFIX_BACK(s,e)          spn_ag_char_map_back(s, e, 36)
300
#define BRK_SUFFIX_BACK(s,e)          brk_ag_char_map_back(s, e, 36)
301
#define  IS_SUFFIX_FMT_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x041B000C)
302
#define SPN_SUFFIX_FMT_CHARS(_s)      spn_ag_char_map_chars(_s, 37)
303
#define BRK_SUFFIX_FMT_CHARS(_s)      brk_ag_char_map_chars(_s, 37)
304
#define SPN_SUFFIX_FMT_BACK(s,e)      spn_ag_char_map_back(s, e, 37)
305
#define BRK_SUFFIX_FMT_BACK(s,e)      brk_ag_char_map_back(s, e, 37)
306
0
#define  IS_FALSE_TYPE_CHAR( _c)       is_ag_char_map_char((char)(_c), 0x08000002)
307
#define SPN_FALSE_TYPE_CHARS(_s)      spn_ag_char_map_chars(_s, 38)
308
#define BRK_FALSE_TYPE_CHARS(_s)      brk_ag_char_map_chars(_s, 38)
309
#define SPN_FALSE_TYPE_BACK(s,e)      spn_ag_char_map_back(s, e, 38)
310
#define BRK_FALSE_TYPE_BACK(s,e)      brk_ag_char_map_back(s, e, 38)
311
#define  IS_FILE_NAME_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x041B0004)
312
#define SPN_FILE_NAME_CHARS(_s)       spn_ag_char_map_chars(_s, 39)
313
#define BRK_FILE_NAME_CHARS(_s)       brk_ag_char_map_chars(_s, 39)
314
#define SPN_FILE_NAME_BACK(s,e)       spn_ag_char_map_back(s, e, 39)
315
#define BRK_FILE_NAME_BACK(s,e)       brk_ag_char_map_back(s, e, 39)
316
#define  IS_END_TOKEN_CHAR( _c)        is_ag_char_map_char((char)(_c), 0x00000C03)
317
#define SPN_END_TOKEN_CHARS(_s)       spn_ag_char_map_chars(_s, 40)
318
#define BRK_END_TOKEN_CHARS(_s)       brk_ag_char_map_chars(_s, 40)
319
#define SPN_END_TOKEN_BACK(s,e)       spn_ag_char_map_back(s, e, 40)
320
#define BRK_END_TOKEN_BACK(s,e)       brk_ag_char_map_back(s, e, 40)
321
0
#define  IS_END_LIST_ENTRY_CHAR( _c)   is_ag_char_map_char((char)(_c), 0x00000C13)
322
#define SPN_END_LIST_ENTRY_CHARS(_s)  spn_ag_char_map_chars(_s, 41)
323
#define BRK_END_LIST_ENTRY_CHARS(_s)  brk_ag_char_map_chars(_s, 41)
324
#define SPN_END_LIST_ENTRY_BACK(s,e)  spn_ag_char_map_back(s, e, 41)
325
#define BRK_END_LIST_ENTRY_BACK(s,e)  brk_ag_char_map_back(s, e, 41)
326
#define  IS_SET_SEPARATOR_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x10000C13)
327
#define SPN_SET_SEPARATOR_CHARS(_s)   spn_ag_char_map_chars(_s, 42)
328
0
#define BRK_SET_SEPARATOR_CHARS(_s)   brk_ag_char_map_chars(_s, 42)
329
#define SPN_SET_SEPARATOR_BACK(s,e)   spn_ag_char_map_back(s, e, 42)
330
#define BRK_SET_SEPARATOR_BACK(s,e)   brk_ag_char_map_back(s, e, 42)
331
#define  IS_SIGNED_NUMBER_CHAR( _c)    is_ag_char_map_char((char)(_c), 0x00038000)
332
#define SPN_SIGNED_NUMBER_CHARS(_s)   spn_ag_char_map_chars(_s, 43)
333
#define BRK_SIGNED_NUMBER_CHARS(_s)   brk_ag_char_map_chars(_s, 43)
334
#define SPN_SIGNED_NUMBER_BACK(s,e)   spn_ag_char_map_back(s, e, 43)
335
#define BRK_SIGNED_NUMBER_BACK(s,e)   brk_ag_char_map_back(s, e, 43)
336
#define  IS_MAKE_SCRIPT_CHAR( _c)      is_ag_char_map_char((char)(_c), 0x00000101)
337
#define SPN_MAKE_SCRIPT_CHARS(_s)     spn_ag_char_map_chars(_s, 44)
338
#define BRK_MAKE_SCRIPT_CHARS(_s)     brk_ag_char_map_chars(_s, 44)
339
#define SPN_MAKE_SCRIPT_BACK(s,e)     spn_ag_char_map_back(s, e, 44)
340
#define BRK_MAKE_SCRIPT_BACK(s,e)     brk_ag_char_map_back(s, e, 44)
341
#define  IS_LOAD_LINE_SKIP_CHAR( _c)   is_ag_char_map_char((char)(_c), 0x00000600)
342
0
#define SPN_LOAD_LINE_SKIP_CHARS(_s)  spn_ag_char_map_chars(_s, 45)
343
#define BRK_LOAD_LINE_SKIP_CHARS(_s)  brk_ag_char_map_chars(_s, 45)
344
#define SPN_LOAD_LINE_SKIP_BACK(s,e)  spn_ag_char_map_back(s, e, 45)
345
#define BRK_LOAD_LINE_SKIP_BACK(s,e)  brk_ag_char_map_back(s, e, 45)
346
347
static ag_char_map_mask_t const ag_char_map_table[128] = {
348
  /*NUL*/ 0x00000002, /*x01*/ 0x00000000, /*x02*/ 0x00000000, /*x03*/ 0x00000000,
349
  /*x04*/ 0x00000000, /*x05*/ 0x00000000, /*x06*/ 0x00000000, /*BEL*/ 0x00000000,
350
  /* BS*/ 0x00000800, /* HT*/ 0x00000400, /* NL*/ 0x00000001, /* VT*/ 0x00000800,
351
  /* FF*/ 0x00000800, /* CR*/ 0x00000800, /*x0E*/ 0x00000000, /*x0F*/ 0x00000000,
352
  /*x10*/ 0x00000000, /*x11*/ 0x00000000, /*x12*/ 0x00000000, /*x13*/ 0x00000000,
353
  /*x14*/ 0x00000000, /*x15*/ 0x00000000, /*x16*/ 0x00000000, /*x17*/ 0x00000000,
354
  /*x18*/ 0x00000000, /*x19*/ 0x00000000, /*x1A*/ 0x00000000, /*ESC*/ 0x00000000,
355
  /*x1C*/ 0x00000000, /*x1D*/ 0x00000000, /*x1E*/ 0x00000000, /*x1F*/ 0x00000000,
356
  /*   */ 0x00000400, /* ! */ 0x02804000, /* " */ 0x02005000, /* # */ 0x02004000,
357
  /* $ */ 0x02804100, /* % */ 0x02804008, /* & */ 0x02804000, /* ' */ 0x02005000,
358
  /* ( */ 0x02006000, /* ) */ 0x02006000, /* * */ 0x02004000, /* + */ 0x12804080,
359
  /* , */ 0x02004010, /* - */ 0x06A0C200, /* . */ 0x06C04000, /* / */ 0x03804004,
360
  /* 0 */ 0x08814000, /* 1 */ 0x00814000, /* 2 */ 0x00814000, /* 3 */ 0x00814000,
361
  /* 4 */ 0x00814000, /* 5 */ 0x00814000, /* 6 */ 0x00814000, /* 7 */ 0x00814000,
362
  /* 8 */ 0x00824000, /* 9 */ 0x00824000, /* : */ 0x02804020, /* ; */ 0x02004000,
363
  /* < */ 0x02004000, /* = */ 0x02004000, /* > */ 0x03004000, /* ? */ 0x02004000,
364
  /* @ */ 0x02804000, /* A */ 0x00944000, /* B */ 0x00944000, /* C */ 0x00944000,
365
  /* D */ 0x00944000, /* E */ 0x00944000, /* F */ 0x08944000, /* G */ 0x00904000,
366
  /* H */ 0x00904000, /* I */ 0x00904000, /* J */ 0x00904000, /* K */ 0x00904000,
367
  /* L */ 0x00904000, /* M */ 0x00904000, /* N */ 0x08904000, /* O */ 0x00904000,
368
  /* P */ 0x00904000, /* Q */ 0x00904000, /* R */ 0x00904000, /* S */ 0x00904000,
369
  /* T */ 0x00904000, /* U */ 0x00904000, /* V */ 0x00904000, /* W */ 0x00904000,
370
  /* X */ 0x00904000, /* Y */ 0x00904000, /* Z */ 0x00904000, /* [ */ 0x02404000,
371
  /* \ */ 0x02004004, /* ] */ 0x02404000, /* ^ */ 0x02A04000, /* _ */ 0x04804040,
372
  /* ` */ 0x02004000, /* a */ 0x008C4000, /* b */ 0x008C4000, /* c */ 0x008C4000,
373
  /* d */ 0x008C4000, /* e */ 0x008C4000, /* f */ 0x088C4000, /* g */ 0x00884000,
374
  /* h */ 0x00884000, /* i */ 0x00884000, /* j */ 0x00884000, /* k */ 0x00884000,
375
  /* l */ 0x00884000, /* m */ 0x00884000, /* n */ 0x08884000, /* o */ 0x00884000,
376
  /* p */ 0x00884000, /* q */ 0x00884000, /* r */ 0x00884000, /* s */ 0x00884000,
377
  /* t */ 0x00884000, /* u */ 0x00884000, /* v */ 0x00884000, /* w */ 0x00884000,
378
  /* x */ 0x00884000, /* y */ 0x00884000, /* z */ 0x00884000, /* { */ 0x02004000,
379
  /* | */ 0x12804000, /* } */ 0x02004000, /* ~ */ 0x0280C000, /*x7F*/ 0x00000000
380
};
381
382
#include <stdio.h>
383
#include <stdlib.h>
384
#include <string.h>
385
386
#ifndef _
387
0
# define _(_s) _s
388
#endif
389
390
static unsigned char const * ag_char_map_spanners[46];
391
/**
392
 *  Character category masks.  Some categories may have multiple bits,
393
 *  if their definition incorporates other character categories.
394
 *  This mask array is only used by calc_ag_char_map_spanners().
395
 */
396
static ag_char_map_mask_t const ag_char_map_masks[46] = {
397
    0x00000001, /* NEWLINE         */
398
    0x00000002, /* NUL_BYTE        */
399
    0x00000004, /* DIR_SEP         */
400
    0x00000008, /* PERCENT         */
401
    0x00000010, /* COMMA           */
402
    0x00000020, /* COLON           */
403
    0x00000040, /* UNDERSCORE      */
404
    0x00000080, /* PLUS            */
405
    0x00000100, /* DOLLAR          */
406
    0x00000200, /* OPTION_MARKER   */
407
    0x00000400, /* HORIZ_WHITE     */
408
    0x00000800, /* ALT_WHITE       */
409
    0x00000C01, /* WHITESPACE      */
410
    0x00000C00, /* NON_NL_WHITE    */
411
    0x00001000, /* QUOTE           */
412
    0x00002000, /* PARENTHESES     */
413
    0x00004000, /* GRAPHIC         */
414
    0x00008000, /* INVERSION       */
415
    0x00010000, /* OCT_DIGIT       */
416
    0x00030000, /* DEC_DIGIT       */
417
    0x00070000, /* HEX_DIGIT       */
418
    0x00080000, /* LOWER_CASE      */
419
    0x00100000, /* UPPER_CASE      */
420
    0x00180000, /* ALPHABETIC      */
421
    0x001B0000, /* ALPHANUMERIC    */
422
    0x00180040, /* VAR_FIRST       */
423
    0x001B0040, /* VARIABLE_NAME   */
424
    0x003B0040, /* OPTION_NAME     */
425
    0x003B0060, /* VALUE_NAME      */
426
    0x00400000, /* NAME_SEP        */
427
    0x007B0460, /* COMPOUND_NAME   */
428
    0x00003000, /* SCHEME_NOTE     */
429
    0x00800000, /* UNQUOTABLE      */
430
    0x01000C01, /* END_XML_TOKEN   */
431
    0x00000C81, /* PLUS_N_SPACE    */
432
    0x02000000, /* PUNCTUATION     */
433
    0x041B0000, /* SUFFIX          */
434
    0x041B000C, /* SUFFIX_FMT      */
435
    0x08000002, /* FALSE_TYPE      */
436
    0x041B0004, /* FILE_NAME       */
437
    0x00000C03, /* END_TOKEN       */
438
    0x00000C13, /* END_LIST_ENTRY  */
439
    0x10000C13, /* SET_SEPARATOR   */
440
    0x00038000, /* SIGNED_NUMBER   */
441
    0x00000101, /* MAKE_SCRIPT     */
442
    0x00000600, /* LOAD_LINE_SKIP  */
443
};
444
#undef LOCK_SPANNER_TABLES
445
446
static unsigned char const *
447
calc_ag_char_map_spanners(unsigned int mask_ix)
448
0
{
449
#ifdef LOCK_SPANNER_TABLES
450
    if (ag_char_map_spanners[mask_ix] != NULL)
451
        return ag_char_map_spanners[mask_ix];
452
453
    pthread_mutex_lock(&ag_char_map_mutex);
454
    if (ag_char_map_spanners[mask_ix] == NULL)
455
#endif
456
0
    {
457
0
        int ix = 1;
458
0
        ag_char_map_mask_t mask = ag_char_map_masks[mask_ix];
459
0
        unsigned char * res = malloc(256 /* 1 << NBBY */);
460
0
        if (res == NULL) {
461
0
            fputs(_("no memory for char-mapper span map\n"), stderr);
462
0
            exit(EXIT_FAILURE);
463
0
        }
464
465
0
        memset(res, 0, 256);
466
0
        for (; ix < 128; ix++)
467
0
            if (ag_char_map_table[ix] & mask)
468
0
                res[ix] = 1;
469
0
        ag_char_map_spanners[mask_ix] = res;
470
0
    }
471
#ifdef LOCK_SPANNER_TABLES
472
    pthread_mutex_unlock(&ag_char_map_mutex);
473
#endif
474
0
    return ag_char_map_spanners[mask_ix];
475
0
}
476
#define ag_char_map_masks POISONED_ag_char_map_masks
477
478
static inline int
479
is_ag_char_map_char(char ch, ag_char_map_mask_t mask)
480
0
{
481
0
    unsigned int ix = (unsigned char)ch;
482
0
    return ((ix < 128) && ((ag_char_map_table[ix] & mask) != 0));
483
0
}
484
485
static inline char *
486
spn_ag_char_map_chars(char const * p, unsigned int mask_ix)
487
0
{
488
0
    unsigned char const * v = ag_char_map_spanners[mask_ix];
489
0
    if (v == NULL)
490
0
        v = calc_ag_char_map_spanners(mask_ix);
491
0
    while (v[(unsigned char)*p])  p++;
492
0
    return (char *)(uintptr_t)p;
493
0
}
494
495
static inline char *
496
brk_ag_char_map_chars(char const * p, unsigned int mask_ix)
497
0
{
498
0
    unsigned char const * v = ag_char_map_spanners[mask_ix];
499
0
    if (v == NULL)
500
0
        v = calc_ag_char_map_spanners(mask_ix);
501
0
    while ((*p != '\0') && (! v[(unsigned char)*p]))  p++;
502
0
    return (char *)(uintptr_t)p;
503
0
}
504
505
static inline char *
506
spn_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix)
507
0
{
508
0
    unsigned char const * v = ag_char_map_spanners[mask_ix];
509
0
    if (v == NULL)
510
0
        v = calc_ag_char_map_spanners(mask_ix);
511
0
    if (s >= e) e = s + strlen(s);
512
0
    while ((e > s) && v[(unsigned char)e[-1]])  e--;
513
0
    return (char *)(uintptr_t)e;
514
0
}
515
516
static inline char *
517
brk_ag_char_map_back(char const * s, char const * e, unsigned int mask_ix)
518
0
{
519
0
    unsigned char const * v = ag_char_map_spanners[mask_ix];
520
0
    if (v == NULL)
521
0
        v = calc_ag_char_map_spanners(mask_ix);
522
0
    if (s == e) e += strlen(e);
523
0
    while ((e > s) && (! v[(unsigned char)e[-1]]))  e--;
524
0
    return (char *)(uintptr_t)e;
525
0
}
526
#endif /* AG_CHAR_MAP_H_GUARD */