source: proto/parabix2/src/bytelex.h @ 584

Last change on this file since 584 was 584, checked in by lindanl, 9 years ago

check for undefined reference

File size: 18.8 KB
Line 
1/*  bytelex.h - XML lexical recognizers for pseudo-ASCII or
2    EBCDIC-family byte streams
3    Copyright (c) 2008, Robert D. Cameron.
4    Licensed to the public under the Open Software License 3.0.
5    Licensed to International Characters, Inc., under the Academic
6    Free License 3.0.
7*/
8#ifndef BYTELEX_H
9#define BYTELEX_H
10
11#include "xmldecl.h"
12#include "multiliteral.h"
13
14template<CodeUnit_Base C, unsigned char c>
15inline bool AtChar(unsigned char x8data[]) {
16  return x8data[0] == Ord<C, c>::value;
17}
18
19template<CodeUnit_Base C>
20inline bool AtQuote(unsigned char x8data[]) {
21  return (x8data[0] == Ord<C, '"'>::value) | (x8data[0] == Ord<C, '\''>::value);
22}
23
24/* In both ASCII and EBCDIC, digits are in a contiguous range
25   from 0 through 9 */
26template<CodeUnit_Base C>
27inline bool at_Digit(unsigned char x8data[]) {
28  return (x8data[0] >= Ord<C, '0'>::value) & (x8data[0] <= Ord<C, '9'>::value);
29}
30
31template<CodeUnit_Base C>
32inline unsigned int DigitVal(unsigned char d) {
33  return d - Ord<C, '0'>::value;
34}
35
36/* In both ASCII and EBCDIC, digits are in a contiguous range
37   from 0 through 9.  Similarly the hex characters A through F
38   and a through f are also in contiguous ranges that differ in
39   only one bit position (Ord<C, 'a'>::value ^ Ord<C, 'A'>::value).*/
40template<CodeUnit_Base C>
41inline bool at_HexDigit(unsigned char x8data[]) {
42  const unsigned char case_bit = Ord<C, 'a'>::value ^ Ord<C, 'A'>::value;
43  const unsigned char canon_A =  Ord<C, 'a'>::value | case_bit;
44  const unsigned char canon_F =  Ord<C, 'f'>::value | case_bit;
45  unsigned char ch = x8data[0];
46  unsigned char canon_ch = ch | case_bit;
47  return ((ch >= Ord<C, '0'>::value) & (ch <= Ord<C, '9'>::value)) |
48         ((canon_ch >= canon_A) & (canon_ch <= canon_F));
49}
50
51template<CodeUnit_Base C>
52inline unsigned int HexVal(unsigned char ch) {
53  const unsigned char case_bit = Ord<C, 'a'>::value ^ Ord<C, 'A'>::value;
54  const unsigned char canon_A =  Ord<C, 'a'>::value | case_bit;
55  unsigned char canon_ch = ch | case_bit;
56  if ((ch >= Ord<C, '0'>::value) & (ch <= Ord<C, '9'>::value)) return ch - Ord<C, '0'>::value;
57  else return (ch | case_bit) - canon_A + 10;
58}
59
60// Whitespace recognition.  This varies between XML 1.0 and
61// XML 1.1, but only the XML 1.0 version is needed.
62
63template<CodeUnit_Base C>
64inline bool at_WhiteSpace_10(unsigned char x8data[]) {
65  unsigned char ch = x8data[0];
66  return (ch == Ord<C, ' '>::value) || 
67         (ch == CR<C>::value) || (ch == LF<C>::value) || (ch == HT<C>::value);
68}
69
70
71
72template<CodeUnit_Base C>
73inline bool at_EndTag_Start(unsigned char x8data[]) {
74  return s2int16(x8data) == c2int16<C, '<', '/'>::value;
75}
76
77template<CodeUnit_Base C>
78inline bool at_Comment_Start(unsigned char x8data[]) {
79  return s4int32(x8data) == c4int32<C, '<', '!', '-', '-'>::value;
80}
81
82template<CodeUnit_Base C>
83inline bool at_DoubleHyphen(unsigned char x8data[]) {
84  return s2int16(x8data) == c2int16<C, '-', '-'>::value;
85}
86
87template<CodeUnit_Base C>
88inline bool at_Comment_End(unsigned char x8data[]) {
89  return s3int32(x8data) == c3int32<C, '-', '-', '>'>::value;
90}
91
92template<CodeUnit_Base C>
93inline bool at_CDATA_Start(unsigned char x8data[]) {
94  return s8int64(x8data) == 
95         c8int64<C, '<', '!', '[', 'C', 'D', 'A', 'T', 'A'>::value;
96}
97
98template<CodeUnit_Base C>
99inline bool at_CDATA1(unsigned char x8data[]) {
100  return s7int64(x8data) == 
101         c7int64<C, '[', 'C', 'D', 'A', 'T', 'A', '['>::value;
102}
103
104template<CodeUnit_Base C>
105inline bool at_CDATA_End(unsigned char x8data[]) {
106  return s3int32(x8data) == c3int32<C, ']', ']', '>'>::value;
107}
108
109template<CodeUnit_Base C>
110inline bool at_PI_Start(unsigned char x8data[]) {
111  return s2int16(x8data) == c2int16<C, '<', '?'>::value;
112}
113
114template<CodeUnit_Base C>
115inline bool at_PI_End(unsigned char x8data[]) {
116  return s2int16(x8data) == c2int16<C, '?', '>'>::value;
117}
118
119template<CodeUnit_Base C>
120inline bool at_CharRef_Start(unsigned char x8data[]) {
121  return s2int16(x8data) == c2int16<C, '&', '#'>::value;
122}
123
124
125template<CodeUnit_Base C>
126inline bool at_EqualsQuote(unsigned char x8data[]) {
127  uint16_t EQ = s2int16(x8data);
128  return (EQ == c2int16<C, '=', '"'>::value) | (EQ == c2int16<C, '=', '\''>::value);
129}
130
131template<CodeUnit_Base C>
132inline bool at_xmlns(unsigned char x8data[]) {
133  return s5int64(x8data) == c5int64<C, 'x', 'm', 'l', 'n', 's'>::value; 
134}
135
136template<CodeUnit_Base C>
137inline bool at_EmptyElementDelim(unsigned char x8data[]) {
138  return s2int16(x8data) == c2int16<C, '/', '>'>::value;
139}
140
141template<CodeUnit_Base C>
142inline bool at_XmlDecl_start(unsigned char x8data[]) {
143  return (s5int64(x8data) == c5int64<C, '<', '?', 'x', 'm', 'l'>::value) &&
144         at_WhiteSpace_10<C>(&x8data[5]);
145}
146
147template<CodeUnit_Base C>
148inline bool at_version(unsigned char x8data[]) {
149  return s7int64(x8data) == c7int64<C, 'v', 'e', 'r', 's', 'i', 'o', 'n'>::value;
150}
151
152template<CodeUnit_Base C>
153inline bool at_1_0(unsigned char x8data[]) {
154  return (s5int64(x8data) == c5int64<C, '"', '1', '.', '0', '"'>::value) ||
155         (s5int64(x8data) == c5int64<C, '\'', '1', '.', '0', '\''>::value);
156}
157
158template<CodeUnit_Base C>
159inline bool at_1_1(unsigned char x8data[]) {
160  return (s5int64(x8data) == c5int64<C, '"', '1', '.', '1', '"'>::value) ||
161         (s5int64(x8data) == c5int64<C, '\'', '1', '.', '1', '\''>::value);
162}
163
164template<CodeUnit_Base C>
165inline bool at_encoding(unsigned char x8data[]) {
166  return s8int64(x8data) == c8int64<C, 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g'>::value;
167}
168
169template<CodeUnit_Base C>
170inline bool at_standalone(unsigned char x8data[]) {
171  return (s8int64(x8data) == c8int64<C, 's', 't', 'a', 'n', 'd', 'a', 'l', 'o'>::value) &
172         (s2int16(&x8data[8]) == c2int16<C, 'n', 'e'>::value);
173}
174
175template<CodeUnit_Base C>
176inline bool at_yes(unsigned char x8data[]) {
177  return (s5int64(x8data) == c5int64<C, '"', 'y', 'e', 's', '"'>::value) |
178         (s5int64(x8data) == c5int64<C, '\'', 'y', 'e', 's', '\''>::value);
179}
180
181template<CodeUnit_Base C>
182inline bool at_no(unsigned char x8data[]) {
183  return (s4int32(x8data) == c4int32<C, '"', 'n', 'o', '"'>::value) |
184         (s4int32(x8data) == c4int32<C, '\'', 'n', 'o', '\''>::value);
185}
186
187template<CodeUnit_Base C>
188inline bool at_XxMmLll(unsigned char x8data[]) {
189  return caseless_comp<C, 'x', 'm', 'l'>(x8data);
190}
191
192/* The at_ElementTag_Start recognizer rules out '<!', '<?', '</'
193   combinations while returning true for '<' followed by any NameStrt
194   character.
195*/
196template<CodeUnit_Base C>
197inline bool at_ElementTag_Start(unsigned char x8data[]) {
198  return (x8data[0] == Ord<C, '<'>::value) & (x8data[1] != Ord<C, '!'>::value) &
199         (x8data[1] != Ord<C, '?'>::value) & (x8data[1] != Ord<C, '/'>::value);
200}
201
202/* The following ugly hack optimizes for ASCII. */
203template<>
204inline bool at_ElementTag_Start<ASCII>(unsigned char x8data[]) {
205  return (x8data[0] == Ord<ASCII, '<'>::value) &
206         ((x8data[1] & 0xE1) != 0x21);
207}
208
209
210inline bool at_UTF_8(unsigned char x8data[]) {
211  return caseless_comp<ASCII, 'u', 't', 'f', '-', '8'>(x8data);
212}
213
214inline bool at_UCS_2(unsigned char x8data[]) {
215  return caseless_comp<ASCII, 'u', 'c', 's', '-', '2'>(x8data);
216}
217
218inline bool at_UCS_4(unsigned char x8data[]) {
219  return caseless_comp<ASCII, 'u', 'c', 's', '-', '4'>(x8data);
220}
221
222inline bool at_UCS_2LE(unsigned char x8data[]) {
223  return caseless_comp<ASCII, 'u', 'c', 's', '-', '2', 'l', 'e'>(x8data);
224}
225
226inline bool at_UCS_2BE(unsigned char x8data[]) {
227  return caseless_comp<ASCII, 'u', 'c', 's', '-', '2', 'b', 'e'>(x8data);
228}
229
230inline bool at_UCS_4LE(unsigned char x8data[]) {
231  return caseless_comp<ASCII, 'u', 'c', 's', '-', '4', 'l', 'e'>(x8data);
232}
233
234inline bool at_UCS_4BE(unsigned char x8data[]) {
235  return caseless_comp<ASCII, 'u', 'c', 's', '-', '4', 'b', 'e'>(x8data);
236}
237
238inline bool at_UTF_16(unsigned char x8data[]) {
239  return caseless_comp<ASCII, 'u', 't', 'f', '-', '1', '6'>(x8data);
240}
241
242inline bool at_UTF_32(unsigned char x8data[]) {
243  return caseless_comp<ASCII, 'u', 't', 'f', '-', '3', '2'>(x8data);
244}
245
246inline bool at_UTF_16LE(unsigned char x8data[]) {
247  return caseless_comp<ASCII, 'u', 't', 'f', '-', '1', '6', 'l', 'e'>(x8data);
248}
249
250inline bool at_UTF_32LE(unsigned char x8data[]) {
251  return caseless_comp<ASCII, 'u', 't', 'f', '-', '3', '2', 'l', 'e'>(x8data);
252}
253
254inline bool at_UTF_16BE(unsigned char x8data[]) {
255  return caseless_comp<ASCII, 'u', 't', 'f', '-', '1', '6', 'b', 'e'>(x8data);
256}
257
258inline bool at_UTF_32BE(unsigned char x8data[]) {
259  return caseless_comp<ASCII, 'u', 't', 'f', '-', '3', '2', 'b', 'e'>(x8data);
260}
261
262inline bool at_ASCII(unsigned char x8data[]) {
263  return caseless_comp<ASCII, 'a', 's', 'c', 'i', 'i'>(x8data);
264}
265
266inline bool at_Latin1(unsigned char x8data[]) {
267  return caseless_comp<ASCII, 'l', 'a', 't', 'i', 'n', '1'>(x8data);
268}
269
270inline bool at_EBCDIC(unsigned char x8data[]) {
271  return caseless_comp<EBCDIC, 'e', 'b', 'c', 'd', 'i', 'c'>(x8data);
272}
273
274template<CodeUnit_Base C>
275inline bool at_DOCTYPE_start(unsigned char x8data[]) {
276        return s8int64(x8data) == c8int64<C, '<', '!','D', 'O', 'C', 'T', 'Y', 'P'>::value & AtChar<C,'E'>(&x8data[8]);
277}
278
279template<CodeUnit_Base C>
280inline bool at_SYSTEM(unsigned char x8data[]) {
281        return s6int64(x8data) == c6int64<C, 'S', 'Y', 'S', 'T', 'E', 'M'>::value;
282}
283
284template<CodeUnit_Base C>
285inline bool at_PUBLIC(unsigned char x8data[]) {
286        return s6int64(x8data) == c6int64<C, 'P', 'U', 'B', 'L', 'I', 'C'>::value;
287}
288
289template<CodeUnit_Base C>
290inline bool at_ELEMENT(unsigned char x8data[]) {
291        return s7int64(x8data) == c7int64<C, 'E', 'L', 'E', 'M', 'E', 'N', 'T'>::value;
292}
293
294template<CodeUnit_Base C>
295inline bool at_ATTLIST(unsigned char x8data[]) {
296        return s7int64(x8data) == c7int64<C, 'A', 'T', 'T', 'L', 'I', 'S', 'T'>::value;
297}
298
299template<CodeUnit_Base C>
300inline bool at_ENTITY(unsigned char x8data[]) {
301        return s6int64(x8data) == c6int64<C, 'E', 'N', 'T', 'I', 'T', 'Y'>::value;
302}
303
304template<CodeUnit_Base C>
305inline bool at_NOTATION(unsigned char x8data[]) {
306        return s8int64(x8data) == c8int64<C, 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N'>::value;
307}
308
309template<CodeUnit_Base C>
310inline bool at_EMPTY(unsigned char x8data[]) {
311        return s5int64(x8data) == c5int64<C, 'E', 'M', 'P', 'T', 'Y'>::value;
312}
313
314template<CodeUnit_Base C>
315inline bool at_PCDATA(unsigned char x8data[]) {
316        return s7int64(x8data) == c7int64<C, '#', 'P', 'C', 'D', 'A', 'T', 'A'>::value;
317}
318
319template<CodeUnit_Base C>
320inline bool at_Para_star(unsigned char x8data[]) {
321        return s2int16(x8data) == c2int16<C, ')', '*'>::value;
322}
323
324template<CodeUnit_Base C>
325inline bool at_CDATA(unsigned char x8data[]) {
326        return s5int64(x8data) == c5int64<C, 'C', 'D', 'A', 'T', 'A'>::value;
327}
328
329template<CodeUnit_Base C>
330inline bool at_ID(unsigned char x8data[]) {
331        return s2int16(x8data) == c2int16<C, 'I', 'D'>::value;
332}
333
334template<CodeUnit_Base C>
335inline bool at_IDREF(unsigned char x8data[]) {
336        return s5int64(x8data) == c5int64<C, 'I', 'D', 'R', 'E', 'F'>::value;
337}
338
339template<CodeUnit_Base C>
340inline bool at_NDATA(unsigned char x8data[]) {
341        return s5int64(x8data) == c5int64<C, 'N', 'D', 'A', 'T', 'A'>::value;
342}
343
344template<CodeUnit_Base C>
345inline bool at_IDREFS(unsigned char x8data[]) {
346        return s6int64(x8data) == c6int64<C, 'I', 'D', 'R', 'E', 'F', 'S'>::value;
347}
348
349template<CodeUnit_Base C>
350inline bool at_ENTITIES(unsigned char x8data[]) {
351        return s8int64(x8data) == c8int64<C, 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S'>::value;
352}
353
354template<CodeUnit_Base C>
355inline bool at_NMTOKEN(unsigned char x8data[]) {
356        return s7int64(x8data) == c7int64<C, 'N', 'M', 'T', 'O', 'K', 'E', 'N'>::value;
357}
358
359template<CodeUnit_Base C>
360inline bool at_NMTOKENS(unsigned char x8data[]) {
361        return s8int64(x8data) == c8int64<C, 'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S'>::value;
362}
363
364template<CodeUnit_Base C>
365inline bool at_REQUIRED(unsigned char x8data[]) {
366        return s8int64(x8data) == c8int64<C, '#', 'R', 'E', 'Q', 'U', 'I', 'R', 'E'>::value
367          & AtChar<C,'D'>(&x8data[8]);
368}
369
370template<CodeUnit_Base C>
371inline bool at_IMPLIED(unsigned char x8data[]) {
372        return s8int64(x8data) == c8int64<C, '#', 'I', 'M', 'P', 'L', 'I', 'E', 'D'>::value;
373}
374
375template<CodeUnit_Base C>
376inline bool at_FIXED(unsigned char x8data[]) {
377        return s6int64(x8data) == c6int64<C, '#', 'F', 'I', 'X', 'E', 'D'>::value;
378}
379
380template<CodeUnit_Base C>
381inline bool at_ANY(unsigned char x8data[]) {
382        return s3int32(x8data) == c3int32<C, 'A', 'N', 'Y'>::value;
383}
384
385template<CodeUnit_Base C>
386inline bool at_INCLUDE(unsigned char x8data[]) {
387        return s7int64(x8data) == c7int64<C, 'I', 'N', 'C', 'L', 'U', 'D', 'E'>::value;
388}
389
390template<CodeUnit_Base C>
391inline bool at_IGNORE(unsigned char x8data[]) {
392        return s6int64(x8data) == c6int64<C, 'I', 'G', 'N', 'O', 'R', 'E'>::value;
393}
394
395template<CodeUnit_Base C>
396inline bool at_condSect_start(unsigned char x8data[]) {
397        return s3int32(x8data) == c3int32<C, '<', '!', '['>::value;
398}
399
400template<CodeUnit_Base C>
401inline bool at_xml(unsigned char x8data[]) { 
402  return (s4int32(x8data) == c4int32<C, '?', 'x', 'm', 'l'>::value);
403}
404
405template<CodeUnit_Base C>
406inline bool at_Ref_gt(unsigned char x8data[]) {
407        return s3int32(x8data) == c3int32<C, 'g', 't', ';'>::value;
408}
409
410template<CodeUnit_Base C>
411inline bool at_Ref_lt(unsigned char x8data[]) {
412        return s3int32(x8data) == c3int32<C, 'l', 't', ';'>::value;
413}
414
415template<CodeUnit_Base C>
416inline bool at_Ref_amp(unsigned char x8data[]) { 
417  return (s4int32(x8data) == c4int32<C, 'a', 'm', 'p', ';'>::value);
418}
419
420template<CodeUnit_Base C>
421inline bool at_Ref_quot(unsigned char x8data[]) {
422        return s5int64(x8data) == c5int64<C, 'q', 'u', 'o', 't', ';'>::value;
423}
424
425template<CodeUnit_Base C>
426inline bool at_Ref_apos(unsigned char x8data[]) {
427        return s5int64(x8data) == c5int64<C, 'a', 'p', 'o', 's', ';'>::value;
428}
429
430template<CodeUnit_Base C>
431inline bool at_ASCII_letter(unsigned char x8data[]) {
432        switch (x8data[0]) {
433                case Ord<C, 'A'>::value: case Ord<C, 'a'>::value:
434                case Ord<C, 'B'>::value: case Ord<C, 'b'>::value:
435                case Ord<C, 'C'>::value: case Ord<C, 'c'>::value:
436                case Ord<C, 'D'>::value: case Ord<C, 'd'>::value:
437                case Ord<C, 'E'>::value: case Ord<C, 'e'>::value:
438                case Ord<C, 'F'>::value: case Ord<C, 'f'>::value:
439                case Ord<C, 'G'>::value: case Ord<C, 'g'>::value:
440                case Ord<C, 'H'>::value: case Ord<C, 'h'>::value:
441                case Ord<C, 'I'>::value: case Ord<C, 'i'>::value:
442                case Ord<C, 'J'>::value: case Ord<C, 'j'>::value:
443                case Ord<C, 'K'>::value: case Ord<C, 'k'>::value:
444                case Ord<C, 'L'>::value: case Ord<C, 'l'>::value:
445                case Ord<C, 'M'>::value: case Ord<C, 'm'>::value:
446                case Ord<C, 'N'>::value: case Ord<C, 'n'>::value:
447                case Ord<C, 'O'>::value: case Ord<C, 'o'>::value:
448                case Ord<C, 'P'>::value: case Ord<C, 'p'>::value:
449                case Ord<C, 'Q'>::value: case Ord<C, 'q'>::value:
450                case Ord<C, 'R'>::value: case Ord<C, 'r'>::value:
451                case Ord<C, 'S'>::value: case Ord<C, 's'>::value:
452                case Ord<C, 'T'>::value: case Ord<C, 't'>::value:
453                case Ord<C, 'U'>::value: case Ord<C, 'u'>::value:
454                case Ord<C, 'V'>::value: case Ord<C, 'v'>::value:
455                case Ord<C, 'W'>::value: case Ord<C, 'w'>::value:
456                case Ord<C, 'X'>::value: case Ord<C, 'x'>::value:
457                case Ord<C, 'Y'>::value: case Ord<C, 'y'>::value:
458                case Ord<C, 'Z'>::value: case Ord<C, 'z'>::value:
459                        return true;
460                default: return false;
461        }
462}
463template<CodeUnit_Base C>
464inline bool at_ASCII_ncnamechar(unsigned char x8data[]) {
465        switch (x8data[0]) {
466                case Ord<C, '0'>::value: case Ord<C, '1'>::value: 
467                case Ord<C, '2'>::value: case Ord<C, '3'>::value: 
468                case Ord<C, '4'>::value: case Ord<C, '5'>::value:
469                case Ord<C, '6'>::value: case Ord<C, '7'>::value:
470                case Ord<C, '8'>::value: case Ord<C, '9'>::value:
471                case Ord<C, 'A'>::value: case Ord<C, 'a'>::value:
472                case Ord<C, 'B'>::value: case Ord<C, 'b'>::value:
473                case Ord<C, 'C'>::value: case Ord<C, 'c'>::value:
474                case Ord<C, 'D'>::value: case Ord<C, 'd'>::value:
475                case Ord<C, 'E'>::value: case Ord<C, 'e'>::value:
476                case Ord<C, 'F'>::value: case Ord<C, 'f'>::value:
477                case Ord<C, 'G'>::value: case Ord<C, 'g'>::value:
478                case Ord<C, 'H'>::value: case Ord<C, 'h'>::value:
479                case Ord<C, 'I'>::value: case Ord<C, 'i'>::value:
480                case Ord<C, 'J'>::value: case Ord<C, 'j'>::value:
481                case Ord<C, 'K'>::value: case Ord<C, 'k'>::value:
482                case Ord<C, 'L'>::value: case Ord<C, 'l'>::value:
483                case Ord<C, 'M'>::value: case Ord<C, 'm'>::value:
484                case Ord<C, 'N'>::value: case Ord<C, 'n'>::value:
485                case Ord<C, 'O'>::value: case Ord<C, 'o'>::value:
486                case Ord<C, 'P'>::value: case Ord<C, 'p'>::value:
487                case Ord<C, 'Q'>::value: case Ord<C, 'q'>::value:
488                case Ord<C, 'R'>::value: case Ord<C, 'r'>::value:
489                case Ord<C, 'S'>::value: case Ord<C, 's'>::value:
490                case Ord<C, 'T'>::value: case Ord<C, 't'>::value:
491                case Ord<C, 'U'>::value: case Ord<C, 'u'>::value:
492                case Ord<C, 'V'>::value: case Ord<C, 'v'>::value:
493                case Ord<C, 'W'>::value: case Ord<C, 'w'>::value:
494                case Ord<C, 'X'>::value: case Ord<C, 'x'>::value:
495                case Ord<C, 'Y'>::value: case Ord<C, 'y'>::value:
496                case Ord<C, 'Z'>::value: case Ord<C, 'z'>::value:
497                case Ord<C, '-'>::value: case Ord<C, '.'>::value:
498                case Ord<C, '_'>::value:
499                  return true;
500                default: return false;
501        }
502}
503template<CodeUnit_Base C>
504inline bool at_PubidChar(unsigned char x8data[]) {
505        switch (x8data[0]) {
506                case Ord<C, '0'>::value: case Ord<C, '1'>::value: 
507                case Ord<C, '2'>::value: case Ord<C, '3'>::value: 
508                case Ord<C, '4'>::value: case Ord<C, '5'>::value:
509                case Ord<C, '6'>::value: case Ord<C, '7'>::value:
510                case Ord<C, '8'>::value: case Ord<C, '9'>::value:
511                case Ord<C, 'A'>::value: case Ord<C, 'a'>::value:
512                case Ord<C, 'B'>::value: case Ord<C, 'b'>::value:
513                case Ord<C, 'C'>::value: case Ord<C, 'c'>::value:
514                case Ord<C, 'D'>::value: case Ord<C, 'd'>::value:
515                case Ord<C, 'E'>::value: case Ord<C, 'e'>::value:
516                case Ord<C, 'F'>::value: case Ord<C, 'f'>::value:
517                case Ord<C, 'G'>::value: case Ord<C, 'g'>::value:
518                case Ord<C, 'H'>::value: case Ord<C, 'h'>::value:
519                case Ord<C, 'I'>::value: case Ord<C, 'i'>::value:
520                case Ord<C, 'J'>::value: case Ord<C, 'j'>::value:
521                case Ord<C, 'K'>::value: case Ord<C, 'k'>::value:
522                case Ord<C, 'L'>::value: case Ord<C, 'l'>::value:
523                case Ord<C, 'M'>::value: case Ord<C, 'm'>::value:
524                case Ord<C, 'N'>::value: case Ord<C, 'n'>::value:
525                case Ord<C, 'O'>::value: case Ord<C, 'o'>::value:
526                case Ord<C, 'P'>::value: case Ord<C, 'p'>::value:
527                case Ord<C, 'Q'>::value: case Ord<C, 'q'>::value:
528                case Ord<C, 'R'>::value: case Ord<C, 'r'>::value:
529                case Ord<C, 'S'>::value: case Ord<C, 's'>::value:
530                case Ord<C, 'T'>::value: case Ord<C, 't'>::value:
531                case Ord<C, 'U'>::value: case Ord<C, 'u'>::value:
532                case Ord<C, 'V'>::value: case Ord<C, 'v'>::value:
533                case Ord<C, 'W'>::value: case Ord<C, 'w'>::value:
534                case Ord<C, 'X'>::value: case Ord<C, 'x'>::value:
535                case Ord<C, 'Y'>::value: case Ord<C, 'y'>::value:
536                case Ord<C, 'Z'>::value: case Ord<C, 'z'>::value:
537                case Ord<C, '-'>::value: case Ord<C, '\''>::value:
538                case Ord<C, '('>::value: case Ord<C, ')'>::value:
539                case Ord<C, '+'>::value: case Ord<C, ','>::value:
540                case Ord<C, '.'>::value: case Ord<C, '/'>::value:
541                case Ord<C, ':'>::value: case Ord<C, '='>::value:
542                case Ord<C, '?'>::value: case Ord<C, ';'>::value:
543                case Ord<C, '!'>::value: case Ord<C, '*'>::value:
544                case Ord<C, '#'>::value: case Ord<C, '@'>::value:
545                case Ord<C, '$'>::value: case Ord<C, '_'>::value:
546                case Ord<C, '%'>::value: case Ord<C, ' '>::value:
547                case CR<C>::value: case LF<C>::value:
548                        return true;
549                default: return false;
550        }
551}
552#endif
Note: See TracBrowser for help on using the repository browser.