Annotation of parser3/src/lib/pcre/maketables.c, revision 1.2

1.1       paf         1: /*************************************************
                      2: *      Perl-Compatible Regular Expressions       *
                      3: *************************************************/
                      4: 
                      5: /*
                      6: PCRE is a library of functions to support regular expressions whose syntax
                      7: and semantics are as close as possible to those of the Perl 5 language.
                      8: 
                      9: Written by: Philip Hazel <ph10@cam.ac.uk>
                     10: 
                     11:            Copyright (c) 1997-1999 University of Cambridge
                     12: 
                     13: -----------------------------------------------------------------------------
                     14: Permission is granted to anyone to use this software for any purpose on any
                     15: computer system, and to redistribute it freely, subject to the following
                     16: restrictions:
                     17: 
                     18: 1. This software is distributed in the hope that it will be useful,
                     19:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     20:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
                     21: 
                     22: 2. The origin of this software must not be misrepresented, either by
                     23:    explicit claim or by omission.
                     24: 
                     25: 3. Altered versions must be plainly marked as such, and must not be
                     26:    misrepresented as being the original software.
                     27: 
                     28: 4. If PCRE is embedded in any software that is released under the GNU
                     29:    General Purpose Licence (GPL), then the terms of that licence shall
                     30:    supersede any condition above with which it is incompatible.
                     31: -----------------------------------------------------------------------------
                     32: 
                     33: See the file Tech.Notes for some information on the internals.
                     34: */
                     35: 
                     36: 
                     37: /* This file is compiled on its own as part of the PCRE library. However,
                     38: it is also included in the compilation of dftables.c, in which case the macro
                     39: DFTABLES is defined. */
                     40: 
                     41: #ifndef DFTABLES
                     42: #include "internal.h"
                     43: #endif
                     44: 
                     45: 
                     46: 
                     47: /*************************************************
                     48: *           Create PCRE character tables         *
                     49: *************************************************/
                     50: 
                     51: /* This function builds a set of character tables for use by PCRE and returns
                     52: a pointer to them. They are build using the ctype functions, and consequently
                     53: their contents will depend upon the current locale setting. When compiled as
                     54: part of the library, the store is obtained via pcre_malloc(), but when compiled
                     55: inside dftables, use malloc().
                     56: 
                     57: Arguments:   none
                     58: Returns:     pointer to the contiguous block of data
                     59: */
                     60: 
                     61: unsigned const char *
                     62: pcre_maketables(void)
                     63: {
                     64: unsigned char *yield, *p;
                     65: int i;
                     66: 
                     67: #ifndef DFTABLES
                     68: yield = (unsigned char*)(pcre_malloc)(tables_length);
                     69: #else
                     70: yield = (unsigned char*)malloc(tables_length);
                     71: #endif
                     72: 
                     73: if (yield == NULL) return NULL;
                     74: p = yield;
                     75: 
                     76: /* First comes the lower casing table */
                     77: 
1.2     ! paf        78: for (i = 0; i < 256; i++) *p++ = (unsigned char)tolower(i);
1.1       paf        79: 
                     80: /* Next the case-flipping table */
                     81: 
1.2     ! paf        82: for (i = 0; i < 256; i++) *p++ = (unsigned char)(islower(i)? toupper(i) : tolower(i));
1.1       paf        83: 
                     84: /* Then the character class tables */
                     85: 
                     86: memset(p, 0, cbit_length);
                     87: for (i = 0; i < 256; i++)
                     88:   {
                     89:   if (isdigit(i)) p[cbit_digit  + i/8] |= 1 << (i&7);
                     90:   if (isalnum(i) || i == '_')
                     91:                   p[cbit_word   + i/8] |= 1 << (i&7);
                     92:   if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
                     93:   }
                     94: p += cbit_length;
                     95: 
                     96: /* Finally, the character type table */
                     97: 
                     98: for (i = 0; i < 256; i++)
                     99:   {
                    100:   int x = 0;
                    101:   if (isspace(i)) x += ctype_space;
                    102:   if (isalpha(i)) x += ctype_letter;
                    103:   if (isdigit(i)) x += ctype_digit;
                    104:   if (isxdigit(i)) x += ctype_xdigit;
                    105:   if (isalnum(i) || i == '_') x += ctype_word;
                    106:   if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
1.2     ! paf       107:   *p++ = (unsigned char)x;
1.1       paf       108:   }
                    109: 
                    110: return yield;
                    111: }
                    112: 
                    113: /* End of maketables.c */

E-mail: