~ubuntu-branches/ubuntu/maverick/ncbi-tools6/maverick

« back to all changes in this revision

Viewing changes to regexp/maketables.c

  • Committer: Bazaar Package Importer
  • Author(s): Aaron M. Ucko
  • Date: 2005-03-27 12:00:15 UTC
  • mfrom: (2.1.2 hoary)
  • Revision ID: james.westby@ubuntu.com-20050327120015-embhesp32nj73p9r
Tags: 6.1.20041020-3
* Fix FTBFS under GCC 4.0 caused by inconsistent use of "static" on
  functions.  (Closes: #295110.)
* Add a watch file, now that we can.  (Upstream's layout needs version=3.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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-2001 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 "pcre_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
const unsigned 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
 
 
78
for (i = 0; i < 256; i++) *p++ = tolower(i);
 
79
 
 
80
/* Next the case-flipping table */
 
81
 
 
82
for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
 
83
 
 
84
/* Then the character class tables. Don't try to be clever and save effort
 
85
on exclusive ones - in some locales things may be different. */
 
86
 
 
87
memset(p, 0, cbit_length);
 
88
for (i = 0; i < 256; i++)
 
89
  {
 
90
  if (isdigit(i))
 
91
    {
 
92
    p[cbit_digit  + i/8] |= 1 << (i&7);
 
93
    p[cbit_word   + i/8] |= 1 << (i&7);
 
94
    }
 
95
  if (isupper(i))
 
96
    {
 
97
    p[cbit_upper  + i/8] |= 1 << (i&7);
 
98
    p[cbit_word   + i/8] |= 1 << (i&7);
 
99
    }
 
100
  if (islower(i))
 
101
    {
 
102
    p[cbit_lower  + i/8] |= 1 << (i&7);
 
103
    p[cbit_word   + i/8] |= 1 << (i&7);
 
104
    }
 
105
  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
 
106
  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
 
107
  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
 
108
  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
 
109
  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
 
110
  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
 
111
  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
 
112
  }
 
113
p += cbit_length;
 
114
 
 
115
/* Finally, the character type table */
 
116
 
 
117
for (i = 0; i < 256; i++)
 
118
  {
 
119
  int x = 0;
 
120
  if (isspace(i)) x += ctype_space;
 
121
  if (isalpha(i)) x += ctype_letter;
 
122
  if (isdigit(i)) x += ctype_digit;
 
123
  if (isxdigit(i)) x += ctype_xdigit;
 
124
  if (isalnum(i) || i == '_') x += ctype_word;
 
125
  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta;
 
126
  *p++ = x;
 
127
  }
 
128
 
 
129
return yield;
 
130
}
 
131
 
 
132
/* End of maketables.c */