Annotation of win32/pcre/pcre_tables.c, revision 1.2
1.1 misha 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-2008 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 module contains some fixed tables that are used by more than one of the
42: PCRE code modules. The tables are also #included by the pcretest program, which
43: uses macros to change their names from _pcre_xxx to xxxx, thereby avoiding name
44: clashes with the library. */
45:
46:
47: #ifdef HAVE_CONFIG_H
48: #include "config.h"
49: #endif
50:
51: #include "pcre_internal.h"
52:
53:
54: /* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
55: the definition is next to the definition of the opcodes in pcre_internal.h. */
56:
57: const uschar _pcre_OP_lengths[] = { OP_LENGTHS };
58:
59:
60:
61: /*************************************************
62: * Tables for UTF-8 support *
63: *************************************************/
64:
65: /* These are the breakpoints for different numbers of bytes in a UTF-8
66: character. */
67:
68: #ifdef SUPPORT_UTF8
69:
70: const int _pcre_utf8_table1[] =
71: { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
72:
73: const int _pcre_utf8_table1_size = sizeof(_pcre_utf8_table1)/sizeof(int);
74:
75: /* These are the indicator bits and the mask for the data bits to set in the
76: first byte of a character, indexed by the number of additional bytes. */
77:
78: const int _pcre_utf8_table2[] = { 0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
79: const int _pcre_utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
80:
81: /* Table of the number of extra bytes, indexed by the first byte masked with
82: 0x3f. The highest number for a valid UTF-8 first byte is in fact 0x3d. */
83:
84: const uschar _pcre_utf8_table4[] = {
85: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
86: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
87: 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
88: 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
89:
1.2 ! misha 90: /* Table to translate from particular type value to the general value. */
! 91:
! 92: const int _pcre_ucp_gentype[] = {
! 93: ucp_C, ucp_C, ucp_C, ucp_C, ucp_C, /* Cc, Cf, Cn, Co, Cs */
! 94: ucp_L, ucp_L, ucp_L, ucp_L, ucp_L, /* Ll, Lu, Lm, Lo, Lt */
! 95: ucp_M, ucp_M, ucp_M, /* Mc, Me, Mn */
! 96: ucp_N, ucp_N, ucp_N, /* Nd, Nl, No */
! 97: ucp_P, ucp_P, ucp_P, ucp_P, ucp_P, /* Pc, Pd, Pe, Pf, Pi */
! 98: ucp_P, ucp_P, /* Ps, Po */
! 99: ucp_S, ucp_S, ucp_S, ucp_S, /* Sc, Sk, Sm, So */
! 100: ucp_Z, ucp_Z, ucp_Z /* Zl, Zp, Zs */
! 101: };
! 102:
1.1 misha 103: /* The pcre_utt[] table below translates Unicode property names into type and
104: code values. It is searched by binary chop, so must be in collating sequence of
105: name. Originally, the table contained pointers to the name strings in the first
106: field of each entry. However, that leads to a large number of relocations when
107: a shared library is dynamically loaded. A significant reduction is made by
108: putting all the names into a single, large string and then using offsets in the
109: table itself. Maintenance is more error-prone, but frequent changes to this
1.2 ! misha 110: data are unlikely.
! 111:
! 112: July 2008: There is now a script called maint/GenerateUtt.py which can be used
! 113: to generate this data instead of maintaining it entirely by hand. */
1.1 misha 114:
115: const char _pcre_utt_names[] =
116: "Any\0"
117: "Arabic\0"
118: "Armenian\0"
119: "Balinese\0"
120: "Bengali\0"
121: "Bopomofo\0"
122: "Braille\0"
123: "Buginese\0"
124: "Buhid\0"
125: "C\0"
126: "Canadian_Aboriginal\0"
1.2 ! misha 127: "Carian\0"
1.1 misha 128: "Cc\0"
129: "Cf\0"
1.2 ! misha 130: "Cham\0"
1.1 misha 131: "Cherokee\0"
132: "Cn\0"
133: "Co\0"
134: "Common\0"
135: "Coptic\0"
136: "Cs\0"
137: "Cuneiform\0"
138: "Cypriot\0"
139: "Cyrillic\0"
140: "Deseret\0"
141: "Devanagari\0"
142: "Ethiopic\0"
143: "Georgian\0"
144: "Glagolitic\0"
145: "Gothic\0"
146: "Greek\0"
147: "Gujarati\0"
148: "Gurmukhi\0"
149: "Han\0"
150: "Hangul\0"
151: "Hanunoo\0"
152: "Hebrew\0"
153: "Hiragana\0"
154: "Inherited\0"
155: "Kannada\0"
156: "Katakana\0"
1.2 ! misha 157: "Kayah_Li\0"
1.1 misha 158: "Kharoshthi\0"
159: "Khmer\0"
160: "L\0"
161: "L&\0"
162: "Lao\0"
163: "Latin\0"
1.2 ! misha 164: "Lepcha\0"
1.1 misha 165: "Limbu\0"
166: "Linear_B\0"
167: "Ll\0"
168: "Lm\0"
169: "Lo\0"
170: "Lt\0"
171: "Lu\0"
1.2 ! misha 172: "Lycian\0"
! 173: "Lydian\0"
1.1 misha 174: "M\0"
175: "Malayalam\0"
176: "Mc\0"
177: "Me\0"
178: "Mn\0"
179: "Mongolian\0"
180: "Myanmar\0"
181: "N\0"
182: "Nd\0"
183: "New_Tai_Lue\0"
184: "Nko\0"
185: "Nl\0"
186: "No\0"
187: "Ogham\0"
1.2 ! misha 188: "Ol_Chiki\0"
1.1 misha 189: "Old_Italic\0"
190: "Old_Persian\0"
191: "Oriya\0"
192: "Osmanya\0"
193: "P\0"
194: "Pc\0"
195: "Pd\0"
196: "Pe\0"
197: "Pf\0"
198: "Phags_Pa\0"
199: "Phoenician\0"
200: "Pi\0"
201: "Po\0"
202: "Ps\0"
1.2 ! misha 203: "Rejang\0"
1.1 misha 204: "Runic\0"
205: "S\0"
1.2 ! misha 206: "Saurashtra\0"
1.1 misha 207: "Sc\0"
208: "Shavian\0"
209: "Sinhala\0"
210: "Sk\0"
211: "Sm\0"
212: "So\0"
1.2 ! misha 213: "Sundanese\0"
1.1 misha 214: "Syloti_Nagri\0"
215: "Syriac\0"
216: "Tagalog\0"
217: "Tagbanwa\0"
218: "Tai_Le\0"
219: "Tamil\0"
220: "Telugu\0"
221: "Thaana\0"
222: "Thai\0"
223: "Tibetan\0"
224: "Tifinagh\0"
225: "Ugaritic\0"
1.2 ! misha 226: "Vai\0"
1.1 misha 227: "Yi\0"
228: "Z\0"
229: "Zl\0"
230: "Zp\0"
231: "Zs\0";
232:
233: const ucp_type_table _pcre_utt[] = {
1.2 ! misha 234: { 0, PT_ANY, 0 },
! 235: { 4, PT_SC, ucp_Arabic },
! 236: { 11, PT_SC, ucp_Armenian },
! 237: { 20, PT_SC, ucp_Balinese },
! 238: { 29, PT_SC, ucp_Bengali },
! 239: { 37, PT_SC, ucp_Bopomofo },
! 240: { 46, PT_SC, ucp_Braille },
! 241: { 54, PT_SC, ucp_Buginese },
! 242: { 63, PT_SC, ucp_Buhid },
! 243: { 69, PT_GC, ucp_C },
! 244: { 71, PT_SC, ucp_Canadian_Aboriginal },
! 245: { 91, PT_SC, ucp_Carian },
! 246: { 98, PT_PC, ucp_Cc },
! 247: { 101, PT_PC, ucp_Cf },
! 248: { 104, PT_SC, ucp_Cham },
! 249: { 109, PT_SC, ucp_Cherokee },
! 250: { 118, PT_PC, ucp_Cn },
! 251: { 121, PT_PC, ucp_Co },
! 252: { 124, PT_SC, ucp_Common },
! 253: { 131, PT_SC, ucp_Coptic },
! 254: { 138, PT_PC, ucp_Cs },
! 255: { 141, PT_SC, ucp_Cuneiform },
! 256: { 151, PT_SC, ucp_Cypriot },
! 257: { 159, PT_SC, ucp_Cyrillic },
! 258: { 168, PT_SC, ucp_Deseret },
! 259: { 176, PT_SC, ucp_Devanagari },
! 260: { 187, PT_SC, ucp_Ethiopic },
! 261: { 196, PT_SC, ucp_Georgian },
! 262: { 205, PT_SC, ucp_Glagolitic },
! 263: { 216, PT_SC, ucp_Gothic },
! 264: { 223, PT_SC, ucp_Greek },
! 265: { 229, PT_SC, ucp_Gujarati },
! 266: { 238, PT_SC, ucp_Gurmukhi },
! 267: { 247, PT_SC, ucp_Han },
! 268: { 251, PT_SC, ucp_Hangul },
! 269: { 258, PT_SC, ucp_Hanunoo },
! 270: { 266, PT_SC, ucp_Hebrew },
! 271: { 273, PT_SC, ucp_Hiragana },
! 272: { 282, PT_SC, ucp_Inherited },
! 273: { 292, PT_SC, ucp_Kannada },
! 274: { 300, PT_SC, ucp_Katakana },
! 275: { 309, PT_SC, ucp_Kayah_Li },
! 276: { 318, PT_SC, ucp_Kharoshthi },
! 277: { 329, PT_SC, ucp_Khmer },
! 278: { 335, PT_GC, ucp_L },
! 279: { 337, PT_LAMP, 0 },
! 280: { 340, PT_SC, ucp_Lao },
! 281: { 344, PT_SC, ucp_Latin },
! 282: { 350, PT_SC, ucp_Lepcha },
! 283: { 357, PT_SC, ucp_Limbu },
! 284: { 363, PT_SC, ucp_Linear_B },
! 285: { 372, PT_PC, ucp_Ll },
! 286: { 375, PT_PC, ucp_Lm },
! 287: { 378, PT_PC, ucp_Lo },
! 288: { 381, PT_PC, ucp_Lt },
! 289: { 384, PT_PC, ucp_Lu },
! 290: { 387, PT_SC, ucp_Lycian },
! 291: { 394, PT_SC, ucp_Lydian },
! 292: { 401, PT_GC, ucp_M },
! 293: { 403, PT_SC, ucp_Malayalam },
! 294: { 413, PT_PC, ucp_Mc },
! 295: { 416, PT_PC, ucp_Me },
! 296: { 419, PT_PC, ucp_Mn },
! 297: { 422, PT_SC, ucp_Mongolian },
! 298: { 432, PT_SC, ucp_Myanmar },
! 299: { 440, PT_GC, ucp_N },
! 300: { 442, PT_PC, ucp_Nd },
! 301: { 445, PT_SC, ucp_New_Tai_Lue },
! 302: { 457, PT_SC, ucp_Nko },
! 303: { 461, PT_PC, ucp_Nl },
! 304: { 464, PT_PC, ucp_No },
! 305: { 467, PT_SC, ucp_Ogham },
! 306: { 473, PT_SC, ucp_Ol_Chiki },
! 307: { 482, PT_SC, ucp_Old_Italic },
! 308: { 493, PT_SC, ucp_Old_Persian },
! 309: { 505, PT_SC, ucp_Oriya },
! 310: { 511, PT_SC, ucp_Osmanya },
! 311: { 519, PT_GC, ucp_P },
! 312: { 521, PT_PC, ucp_Pc },
! 313: { 524, PT_PC, ucp_Pd },
! 314: { 527, PT_PC, ucp_Pe },
! 315: { 530, PT_PC, ucp_Pf },
! 316: { 533, PT_SC, ucp_Phags_Pa },
! 317: { 542, PT_SC, ucp_Phoenician },
! 318: { 553, PT_PC, ucp_Pi },
! 319: { 556, PT_PC, ucp_Po },
! 320: { 559, PT_PC, ucp_Ps },
! 321: { 562, PT_SC, ucp_Rejang },
! 322: { 569, PT_SC, ucp_Runic },
! 323: { 575, PT_GC, ucp_S },
! 324: { 577, PT_SC, ucp_Saurashtra },
! 325: { 588, PT_PC, ucp_Sc },
! 326: { 591, PT_SC, ucp_Shavian },
! 327: { 599, PT_SC, ucp_Sinhala },
! 328: { 607, PT_PC, ucp_Sk },
! 329: { 610, PT_PC, ucp_Sm },
! 330: { 613, PT_PC, ucp_So },
! 331: { 616, PT_SC, ucp_Sundanese },
! 332: { 626, PT_SC, ucp_Syloti_Nagri },
! 333: { 639, PT_SC, ucp_Syriac },
! 334: { 646, PT_SC, ucp_Tagalog },
! 335: { 654, PT_SC, ucp_Tagbanwa },
! 336: { 663, PT_SC, ucp_Tai_Le },
! 337: { 670, PT_SC, ucp_Tamil },
! 338: { 676, PT_SC, ucp_Telugu },
! 339: { 683, PT_SC, ucp_Thaana },
! 340: { 690, PT_SC, ucp_Thai },
! 341: { 695, PT_SC, ucp_Tibetan },
! 342: { 703, PT_SC, ucp_Tifinagh },
! 343: { 712, PT_SC, ucp_Ugaritic },
! 344: { 721, PT_SC, ucp_Vai },
! 345: { 725, PT_SC, ucp_Yi },
! 346: { 728, PT_GC, ucp_Z },
! 347: { 730, PT_PC, ucp_Zl },
! 348: { 733, PT_PC, ucp_Zp },
! 349: { 736, PT_PC, ucp_Zs }
1.1 misha 350: };
351:
352: const int _pcre_utt_size = sizeof(_pcre_utt)/sizeof(ucp_type_table);
353:
354: #endif /* SUPPORT_UTF8 */
355:
356: /* End of pcre_tables.c */
E-mail: