1 | /*************************************************
|
---|
2 | * Perl-Compatible Regular Expressions *
|
---|
3 | *************************************************/
|
---|
4 |
|
---|
5 | /* PCRE is a library of functions to support regular expressions whose syntax
|
---|
6 | and semantics are as close as possible to those of the Perl 5 language.
|
---|
7 |
|
---|
8 | Written by Philip Hazel
|
---|
9 | Copyright (c) 1997-2005 University of Cambridge
|
---|
10 |
|
---|
11 | -----------------------------------------------------------------------------
|
---|
12 | Redistribution and use in source and binary forms, with or without
|
---|
13 | modification, are permitted provided that the following conditions are met:
|
---|
14 |
|
---|
15 | * Redistributions of source code must retain the above copyright notice,
|
---|
16 | this list of conditions and the following disclaimer.
|
---|
17 |
|
---|
18 | * Redistributions in binary form must reproduce the above copyright
|
---|
19 | notice, this list of conditions and the following disclaimer in the
|
---|
20 | documentation and/or other materials provided with the distribution.
|
---|
21 |
|
---|
22 | * Neither the name of the University of Cambridge nor the names of its
|
---|
23 | contributors may be used to endorse or promote products derived from
|
---|
24 | this software without specific prior written permission.
|
---|
25 |
|
---|
26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
---|
27 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
---|
28 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
---|
29 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
---|
30 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
---|
31 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
---|
32 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
---|
33 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
---|
34 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
---|
35 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
---|
36 | POSSIBILITY OF SUCH DAMAGE.
|
---|
37 | -----------------------------------------------------------------------------
|
---|
38 | */
|
---|
39 |
|
---|
40 |
|
---|
41 | /* This is a freestanding support program to generate a file containing default
|
---|
42 | character tables for PCRE. The tables are built according to the default C
|
---|
43 | locale. Now that pcre_maketables is a function visible to the outside world, we
|
---|
44 | make use of its code from here in order to be consistent. */
|
---|
45 |
|
---|
46 | #include <ctype.h>
|
---|
47 | #include <stdio.h>
|
---|
48 | #include <string.h>
|
---|
49 |
|
---|
50 | #include "pcre_internal.h"
|
---|
51 |
|
---|
52 | #define DFTABLES /* pcre_maketables.c notices this */
|
---|
53 | #include "pcre_maketables.c"
|
---|
54 |
|
---|
55 |
|
---|
56 | int main(int argc, char **argv)
|
---|
57 | {
|
---|
58 | int i;
|
---|
59 | FILE *f;
|
---|
60 | const unsigned char *tables = pcre_maketables();
|
---|
61 | const unsigned char *base_of_tables = tables;
|
---|
62 |
|
---|
63 | if (argc != 2)
|
---|
64 | {
|
---|
65 | fprintf(stderr, "dftables: one filename argument is required\n");
|
---|
66 | return 1;
|
---|
67 | }
|
---|
68 |
|
---|
69 | f = fopen(argv[1], "w");
|
---|
70 | if (f == NULL)
|
---|
71 | {
|
---|
72 | fprintf(stderr, "dftables: failed to open %s for writing\n", argv[1]);
|
---|
73 | return 1;
|
---|
74 | }
|
---|
75 |
|
---|
76 | /* There are two fprintf() calls here, because gcc in pedantic mode complains
|
---|
77 | about the very long string otherwise. */
|
---|
78 |
|
---|
79 | fprintf(f,
|
---|
80 | "/*************************************************\n"
|
---|
81 | "* Perl-Compatible Regular Expressions *\n"
|
---|
82 | "*************************************************/\n\n"
|
---|
83 | "/* This file is automatically written by the dftables auxiliary \n"
|
---|
84 | "program. If you edit it by hand, you might like to edit the Makefile to \n"
|
---|
85 | "prevent its ever being regenerated.\n\n");
|
---|
86 | fprintf(f,
|
---|
87 | "This file contains the default tables for characters with codes less than\n"
|
---|
88 | "128 (ASCII characters). These tables are used when no external tables are\n"
|
---|
89 | "passed to PCRE. */\n\n"
|
---|
90 | "const unsigned char _pcre_default_tables[] = {\n\n"
|
---|
91 | "/* This table is a lower casing table. */\n\n");
|
---|
92 |
|
---|
93 | fprintf(f, " ");
|
---|
94 | for (i = 0; i < 256; i++)
|
---|
95 | {
|
---|
96 | if ((i & 7) == 0 && i != 0) fprintf(f, "\n ");
|
---|
97 | fprintf(f, "%3d", *tables++);
|
---|
98 | if (i != 255) fprintf(f, ",");
|
---|
99 | }
|
---|
100 | fprintf(f, ",\n\n");
|
---|
101 |
|
---|
102 | fprintf(f, "/* This table is a case flipping table. */\n\n");
|
---|
103 |
|
---|
104 | fprintf(f, " ");
|
---|
105 | for (i = 0; i < 256; i++)
|
---|
106 | {
|
---|
107 | if ((i & 7) == 0 && i != 0) fprintf(f, "\n ");
|
---|
108 | fprintf(f, "%3d", *tables++);
|
---|
109 | if (i != 255) fprintf(f, ",");
|
---|
110 | }
|
---|
111 | fprintf(f, ",\n\n");
|
---|
112 |
|
---|
113 | fprintf(f,
|
---|
114 | "/* This table contains bit maps for various character classes.\n"
|
---|
115 | "Each map is 32 bytes long and the bits run from the least\n"
|
---|
116 | "significant end of each byte. The classes that have their own\n"
|
---|
117 | "maps are: space, xdigit, digit, upper, lower, word, graph\n"
|
---|
118 | "print, punct, and cntrl. Other classes are built from combinations. */\n\n");
|
---|
119 |
|
---|
120 | fprintf(f, " ");
|
---|
121 | for (i = 0; i < cbit_length; i++)
|
---|
122 | {
|
---|
123 | if ((i & 7) == 0 && i != 0)
|
---|
124 | {
|
---|
125 | if ((i & 31) == 0) fprintf(f, "\n");
|
---|
126 | fprintf(f, "\n ");
|
---|
127 | }
|
---|
128 | fprintf(f, "0x%02x", *tables++);
|
---|
129 | if (i != cbit_length - 1) fprintf(f, ",");
|
---|
130 | }
|
---|
131 | fprintf(f, ",\n\n");
|
---|
132 |
|
---|
133 | fprintf(f,
|
---|
134 | "/* This table identifies various classes of character by individual bits:\n"
|
---|
135 | " 0x%02x white space character\n"
|
---|
136 | " 0x%02x letter\n"
|
---|
137 | " 0x%02x decimal digit\n"
|
---|
138 | " 0x%02x hexadecimal digit\n"
|
---|
139 | " 0x%02x alphanumeric or '_'\n"
|
---|
140 | " 0x%02x regular expression metacharacter or binary zero\n*/\n\n",
|
---|
141 | ctype_space, ctype_letter, ctype_digit, ctype_xdigit, ctype_word,
|
---|
142 | ctype_meta);
|
---|
143 |
|
---|
144 | fprintf(f, " ");
|
---|
145 | for (i = 0; i < 256; i++)
|
---|
146 | {
|
---|
147 | if ((i & 7) == 0 && i != 0)
|
---|
148 | {
|
---|
149 | fprintf(f, " /* ");
|
---|
150 | if (isprint(i-8)) fprintf(f, " %c -", i-8);
|
---|
151 | else fprintf(f, "%3d-", i-8);
|
---|
152 | if (isprint(i-1)) fprintf(f, " %c ", i-1);
|
---|
153 | else fprintf(f, "%3d", i-1);
|
---|
154 | fprintf(f, " */\n ");
|
---|
155 | }
|
---|
156 | fprintf(f, "0x%02x", *tables++);
|
---|
157 | if (i != 255) fprintf(f, ",");
|
---|
158 | }
|
---|
159 |
|
---|
160 | fprintf(f, "};/* ");
|
---|
161 | if (isprint(i-8)) fprintf(f, " %c -", i-8);
|
---|
162 | else fprintf(f, "%3d-", i-8);
|
---|
163 | if (isprint(i-1)) fprintf(f, " %c ", i-1);
|
---|
164 | else fprintf(f, "%3d", i-1);
|
---|
165 | fprintf(f, " */\n\n/* End of chartables.c */\n");
|
---|
166 |
|
---|
167 | fclose(f);
|
---|
168 | free((void *)base_of_tables);
|
---|
169 | return 0;
|
---|
170 | }
|
---|
171 |
|
---|
172 | /* End of dftables.c */
|
---|