Mxx_ru 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. data/COPYING +26 -0
  2. data/NEWS +52 -0
  3. data/README +21 -0
  4. data/Rakefile +32 -0
  5. data/examples/exe_and_lib/main.cpp +15 -0
  6. data/examples/exe_and_lib/prj.rb +11 -0
  7. data/examples/exe_and_lib/say.cpp +13 -0
  8. data/examples/exe_and_lib/say.hpp +11 -0
  9. data/examples/exe_and_lib/say.rb +7 -0
  10. data/examples/exe_dll_lib/inout.cpp +15 -0
  11. data/examples/exe_dll_lib/inout.hpp +26 -0
  12. data/examples/exe_dll_lib/inout.rb +18 -0
  13. data/examples/exe_dll_lib/main.cpp +23 -0
  14. data/examples/exe_dll_lib/prj.rb +11 -0
  15. data/examples/exe_dll_lib/say.cpp +13 -0
  16. data/examples/exe_dll_lib/say.hpp +12 -0
  17. data/examples/exe_dll_lib/say.rb +9 -0
  18. data/examples/exe_dll_lib_2/build.rb +7 -0
  19. data/examples/exe_dll_lib_2/inout/inout.cpp +15 -0
  20. data/examples/exe_dll_lib_2/inout/inout.hpp +26 -0
  21. data/examples/exe_dll_lib_2/inout/prj.rb +16 -0
  22. data/examples/exe_dll_lib_2/main/main.cpp +23 -0
  23. data/examples/exe_dll_lib_2/main/prj.rb +9 -0
  24. data/examples/exe_dll_lib_2/say/prj.rb +8 -0
  25. data/examples/exe_dll_lib_2/say/say.cpp +13 -0
  26. data/examples/exe_dll_lib_2/say/say.hpp +12 -0
  27. data/examples/simple_exe/main.cpp +26 -0
  28. data/examples/simple_exe/prj.rb +7 -0
  29. data/lib/mxx_ru/abstract_target.rb +283 -0
  30. data/lib/mxx_ru/binary_target.rb +89 -0
  31. data/lib/mxx_ru/binary_unittest.rb +130 -0
  32. data/lib/mxx_ru/cpp/analyzer.rb +230 -0
  33. data/lib/mxx_ru/cpp/composite.rb +106 -0
  34. data/lib/mxx_ru/cpp/detect_toolset.rb +122 -0
  35. data/lib/mxx_ru/cpp/mode.rb +85 -0
  36. data/lib/mxx_ru/cpp/obj_placement.rb +321 -0
  37. data/lib/mxx_ru/cpp/qt.rb +333 -0
  38. data/lib/mxx_ru/cpp/rucodegen.rb +114 -0
  39. data/lib/mxx_ru/cpp/source_file.rb +71 -0
  40. data/lib/mxx_ru/cpp/target.rb +1371 -0
  41. data/lib/mxx_ru/cpp/toolset.rb +1029 -0
  42. data/lib/mxx_ru/cpp/toolsets/bcc_win32_5.rb +52 -0
  43. data/lib/mxx_ru/cpp/toolsets/bcc_win32_family.rb +451 -0
  44. data/lib/mxx_ru/cpp/toolsets/c89_etk_nsk.rb +56 -0
  45. data/lib/mxx_ru/cpp/toolsets/c89_nsk.rb +56 -0
  46. data/lib/mxx_ru/cpp/toolsets/c89_nsk_family.rb +273 -0
  47. data/lib/mxx_ru/cpp/toolsets/gcc_cygwin.rb +54 -0
  48. data/lib/mxx_ru/cpp/toolsets/gcc_family.rb +382 -0
  49. data/lib/mxx_ru/cpp/toolsets/gcc_linux.rb +60 -0
  50. data/lib/mxx_ru/cpp/toolsets/gcc_mingw.rb +144 -0
  51. data/lib/mxx_ru/cpp/toolsets/gcc_sparc_solaris.rb +87 -0
  52. data/lib/mxx_ru/cpp/toolsets/vc7.rb +62 -0
  53. data/lib/mxx_ru/cpp/toolsets/vc8.rb +452 -0
  54. data/lib/mxx_ru/cpp/toolsets/vc_family.rb +428 -0
  55. data/lib/mxx_ru/cpp.rb +36 -0
  56. data/lib/mxx_ru/ex.rb +134 -0
  57. data/lib/mxx_ru/makestyle_generator.rb +138 -0
  58. data/lib/mxx_ru/textfile_unittest.rb +284 -0
  59. data/lib/mxx_ru/util.rb +258 -0
  60. data/tests/c/pcre/chartables.c +183 -0
  61. data/tests/c/pcre/config.h +99 -0
  62. data/tests/c/pcre/dftables.c +167 -0
  63. data/tests/c/pcre/get.c +349 -0
  64. data/tests/c/pcre/internal.h +677 -0
  65. data/tests/c/pcre/maketables.c +140 -0
  66. data/tests/c/pcre/pcre.c +8304 -0
  67. data/tests/c/pcre/pcre.h +193 -0
  68. data/tests/c/pcre/pcre.rb +14 -0
  69. data/tests/c/pcre/pcredemo.c +316 -0
  70. data/tests/c/pcre/pcregrep.c +642 -0
  71. data/tests/c/pcre/pcreposix.c +305 -0
  72. data/tests/c/pcre/pcreposix.h +88 -0
  73. data/tests/c/pcre/pcretest.c +1483 -0
  74. data/tests/c/pcre/perltest +211 -0
  75. data/tests/c/pcre/printint.c +360 -0
  76. data/tests/c/pcre/study.c +472 -0
  77. data/tests/cpp/mswin_res_dll/build.rb +14 -0
  78. data/tests/cpp/mswin_res_dll/dll.cpp +17 -0
  79. data/tests/cpp/mswin_res_dll/dll.rb +30 -0
  80. data/tests/cpp/mswin_res_dll/dll.rc +48 -0
  81. data/tests/cpp/mswin_res_dll/h/dll.hpp +8 -0
  82. data/tests/cpp/mswin_res_dll/h/res.h +3 -0
  83. data/tests/cpp/mswin_res_dll/main.cpp +13 -0
  84. data/tests/cpp/mswin_res_dll/main.rb +20 -0
  85. data/tests/cpp/mswin_res_dll/res/tree_fol.bmp +0 -0
  86. data/tests/cpp/mswin_res_dll/res/tree_state_1.bmp +0 -0
  87. data/tests/cpp/mswin_res_dll/res/tree_state_2.bmp +0 -0
  88. data/tests/cpp/mswin_res_exe/build.rb +23 -0
  89. data/tests/cpp/mswin_res_exe/h/res.h +3 -0
  90. data/tests/cpp/mswin_res_exe/main.cpp +17 -0
  91. data/tests/cpp/mswin_res_exe/main.rc +48 -0
  92. data/tests/cpp/mswin_res_exe/res/tree_fol.bmp +0 -0
  93. data/tests/cpp/mswin_res_exe/res/tree_state_1.bmp +0 -0
  94. data/tests/cpp/mswin_res_exe/res/tree_state_2.bmp +0 -0
  95. data/tests/cpp/rucodegen/host_config.cpp +20 -0
  96. data/tests/cpp/rucodegen/host_config.rb +14 -0
  97. data/tests/cpp/rucodegen/impl/conn_params.cpp +7 -0
  98. data/tests/cpp/rucodegen/impl/conn_params.rb +14 -0
  99. data/tests/cpp/rucodegen/impl/h/conn_params.hpp +10 -0
  100. data/tests/cpp/rucodegen/prj.rb +17 -0
  101. data/tests/cpp/textfile_unittest/build.rb +8 -0
  102. data/tests/cpp/textfile_unittest/etalons/out_0.txt +0 -0
  103. data/tests/cpp/textfile_unittest/etalons/out_1.txt +1 -0
  104. data/tests/cpp/textfile_unittest/etalons/out_128.txt +128 -0
  105. data/tests/cpp/textfile_unittest/main.cpp +89 -0
  106. data/tests/cpp/textfile_unittest/prj.rb +8 -0
  107. data/tests/cpp/textfile_unittest/prj.ut.rb +18 -0
  108. data/tests/cpp/toolset_name.rb +6 -0
  109. data/tests/cpp/vc_cleanup/cout.log +72 -0
  110. data/tests/cpp/vc_cleanup/dll_hi.cpp +5 -0
  111. data/tests/cpp/vc_cleanup/exe_hi.cpp +10 -0
  112. data/tests/cpp/vc_cleanup/lib_hi.cpp +5 -0
  113. data/tests/cpp/vc_cleanup/prj_dll_no_implib.rb +10 -0
  114. data/tests/cpp/vc_cleanup/prj_dll_no_implib_simple_target_root.rb +11 -0
  115. data/tests/cpp/vc_cleanup/prj_dll_with_implib.rb +11 -0
  116. data/tests/cpp/vc_cleanup/prj_dll_with_implib_simple_target_root.rb +14 -0
  117. data/tests/cpp/vc_cleanup/prj_exe_no_implib.rb +10 -0
  118. data/tests/cpp/vc_cleanup/prj_exe_no_implib_simple_target_root.rb +11 -0
  119. data/tests/cpp/vc_cleanup/prj_lib.rb +10 -0
  120. data/tests/cpp/vc_cleanup/prj_lib_with_simple_target_root.rb +11 -0
  121. data/tests/cpp/vc_cleanup/tc_vc_cleanup.rb +60 -0
  122. data/tests/mxx_ru/change_default_value/ignoring_by_build_root/build.rb +8 -0
  123. data/tests/mxx_ru/change_default_value/ignoring_by_build_root/child_1.rb +5 -0
  124. data/tests/mxx_ru/change_default_value/ignoring_by_child_1/build.rb +7 -0
  125. data/tests/mxx_ru/change_default_value/ignoring_by_child_1/child_1.rb +5 -0
  126. data/tests/mxx_ru/change_default_value/ignoring_by_child_1/child_2.rb +5 -0
  127. data/tests/mxx_ru/change_default_value/ok/build.rb +8 -0
  128. data/tests/mxx_ru/change_default_value/ok/child_1.rb +8 -0
  129. data/tests/mxx_ru/tc_makestyle_generator.rb +117 -0
  130. data/tests/mxx_ru/vc8/tc_actual_manifest.rb +230 -0
  131. data/tests/mxx_ru/vc8/tc_append_mt_commands.rb +104 -0
  132. data/tests/mxx_ru/vc8/tc_default_manifest.rb +17 -0
  133. data/tests/mxx_ru/vc8/tc_define_manifest.rb +173 -0
  134. data/tests/mxx_ru/vc8/tc_drop_default_manifest.rb +16 -0
  135. data/tests/mxx_ru/vc8/tc_invalid_params.rb +81 -0
  136. data/tests/mxx_ru/vc8/ts_vc8.rb +10 -0
  137. data/tests/qt/aclock/aclock.cpp +148 -0
  138. data/tests/qt/aclock/aclock.h +45 -0
  139. data/tests/qt/aclock/main.cpp +28 -0
  140. data/tests/qt/aclock/prj.rb +21 -0
  141. data/tests/qt/iconview/main.cpp +76 -0
  142. data/tests/qt/iconview/prj.rb +21 -0
  143. data/tests/qt/toplevel/main.cpp +9 -0
  144. data/tests/qt/toplevel/options.ui +587 -0
  145. data/tests/qt/toplevel/options.ui.h +98 -0
  146. data/tests/qt/toplevel/prj.rb +21 -0
  147. metadata +241 -0
@@ -0,0 +1,305 @@
1
+ /*************************************************
2
+ * Perl-Compatible Regular Expressions *
3
+ *************************************************/
4
+
5
+ /*
6
+ This 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. See
8
+ the file Tech.Notes for some information on the internals.
9
+
10
+ This module is a wrapper that provides a POSIX API to the underlying PCRE
11
+ functions.
12
+
13
+ Written by: Philip Hazel <ph10@cam.ac.uk>
14
+
15
+ Copyright (c) 1997-2003 University of Cambridge
16
+
17
+ -----------------------------------------------------------------------------
18
+ Permission is granted to anyone to use this software for any purpose on any
19
+ computer system, and to redistribute it freely, subject to the following
20
+ restrictions:
21
+
22
+ 1. This software is distributed in the hope that it will be useful,
23
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
24
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25
+
26
+ 2. The origin of this software must not be misrepresented, either by
27
+ explicit claim or by omission.
28
+
29
+ 3. Altered versions must be plainly marked as such, and must not be
30
+ misrepresented as being the original software.
31
+
32
+ 4. If PCRE is embedded in any software that is released under the GNU
33
+ General Purpose Licence (GPL), then the terms of that licence shall
34
+ supersede any condition above with which it is incompatible.
35
+ -----------------------------------------------------------------------------
36
+ */
37
+
38
+ #include "internal.h"
39
+ #include "pcreposix.h"
40
+ #include "stdlib.h"
41
+
42
+
43
+
44
+ /* Corresponding tables of PCRE error messages and POSIX error codes. */
45
+
46
+ static const char *const estring[] = {
47
+ ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
48
+ ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
49
+ ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
50
+ ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40,
51
+ ERR41, ERR42, ERR43, ERR44 };
52
+
53
+ static const int eint[] = {
54
+ REG_EESCAPE, /* "\\ at end of pattern" */
55
+ REG_EESCAPE, /* "\\c at end of pattern" */
56
+ REG_EESCAPE, /* "unrecognized character follows \\" */
57
+ REG_BADBR, /* "numbers out of order in {} quantifier" */
58
+ REG_BADBR, /* "number too big in {} quantifier" */
59
+ REG_EBRACK, /* "missing terminating ] for character class" */
60
+ REG_ECTYPE, /* "invalid escape sequence in character class" */
61
+ REG_ERANGE, /* "range out of order in character class" */
62
+ REG_BADRPT, /* "nothing to repeat" */
63
+ REG_BADRPT, /* "operand of unlimited repeat could match the empty string" */
64
+ REG_ASSERT, /* "internal error: unexpected repeat" */
65
+ REG_BADPAT, /* "unrecognized character after (?" */
66
+ REG_BADPAT, /* "POSIX named classes are supported only within a class" */
67
+ REG_EPAREN, /* "missing )" */
68
+ REG_ESUBREG, /* "reference to non-existent subpattern" */
69
+ REG_INVARG, /* "erroffset passed as NULL" */
70
+ REG_INVARG, /* "unknown option bit(s) set" */
71
+ REG_EPAREN, /* "missing ) after comment" */
72
+ REG_ESIZE, /* "parentheses nested too deeply" */
73
+ REG_ESIZE, /* "regular expression too large" */
74
+ REG_ESPACE, /* "failed to get memory" */
75
+ REG_EPAREN, /* "unmatched brackets" */
76
+ REG_ASSERT, /* "internal error: code overflow" */
77
+ REG_BADPAT, /* "unrecognized character after (?<" */
78
+ REG_BADPAT, /* "lookbehind assertion is not fixed length" */
79
+ REG_BADPAT, /* "malformed number after (?(" */
80
+ REG_BADPAT, /* "conditional group containe more than two branches" */
81
+ REG_BADPAT, /* "assertion expected after (?(" */
82
+ REG_BADPAT, /* "(?R or (?digits must be followed by )" */
83
+ REG_ECTYPE, /* "unknown POSIX class name" */
84
+ REG_BADPAT, /* "POSIX collating elements are not supported" */
85
+ REG_INVARG, /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
86
+ REG_BADPAT, /* "spare error" */
87
+ REG_BADPAT, /* "character value in \x{...} sequence is too large" */
88
+ REG_BADPAT, /* "invalid condition (?(0)" */
89
+ REG_BADPAT, /* "\\C not allowed in lookbehind assertion" */
90
+ REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X" */
91
+ REG_BADPAT, /* "number after (?C is > 255" */
92
+ REG_BADPAT, /* "closing ) for (?C expected" */
93
+ REG_BADPAT, /* "recursive call could loop indefinitely" */
94
+ REG_BADPAT, /* "unrecognized character after (?P" */
95
+ REG_BADPAT, /* "syntax error after (?P" */
96
+ REG_BADPAT, /* "two named groups have the same name" */
97
+ REG_BADPAT /* "invalid UTF-8 string" */
98
+ };
99
+
100
+ /* Table of texts corresponding to POSIX error codes */
101
+
102
+ static const char *const pstring[] = {
103
+ "", /* Dummy for value 0 */
104
+ "internal error", /* REG_ASSERT */
105
+ "invalid repeat counts in {}", /* BADBR */
106
+ "pattern error", /* BADPAT */
107
+ "? * + invalid", /* BADRPT */
108
+ "unbalanced {}", /* EBRACE */
109
+ "unbalanced []", /* EBRACK */
110
+ "collation error - not relevant", /* ECOLLATE */
111
+ "bad class", /* ECTYPE */
112
+ "bad escape sequence", /* EESCAPE */
113
+ "empty expression", /* EMPTY */
114
+ "unbalanced ()", /* EPAREN */
115
+ "bad range inside []", /* ERANGE */
116
+ "expression too big", /* ESIZE */
117
+ "failed to get memory", /* ESPACE */
118
+ "bad back reference", /* ESUBREG */
119
+ "bad argument", /* INVARG */
120
+ "match failed" /* NOMATCH */
121
+ };
122
+
123
+
124
+
125
+
126
+ /*************************************************
127
+ * Translate PCRE text code to int *
128
+ *************************************************/
129
+
130
+ /* PCRE compile-time errors are given as strings defined as macros. We can just
131
+ look them up in a table to turn them into POSIX-style error codes. */
132
+
133
+ static int
134
+ pcre_posix_error_code(const char *s)
135
+ {
136
+ size_t i;
137
+ for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
138
+ if (strcmp(s, estring[i]) == 0) return eint[i];
139
+ return REG_ASSERT;
140
+ }
141
+
142
+
143
+
144
+ /*************************************************
145
+ * Translate error code to string *
146
+ *************************************************/
147
+
148
+ EXPORT size_t
149
+ regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)
150
+ {
151
+ const char *message, *addmessage;
152
+ size_t length, addlength;
153
+
154
+ message = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?
155
+ "unknown error code" : pstring[errcode];
156
+ length = strlen(message) + 1;
157
+
158
+ addmessage = " at offset ";
159
+ addlength = (preg != NULL && (int)preg->re_erroffset != -1)?
160
+ strlen(addmessage) + 6 : 0;
161
+
162
+ if (errbuf_size > 0)
163
+ {
164
+ if (addlength > 0 && errbuf_size >= length + addlength)
165
+ sprintf(errbuf, "%s%s%-6d", message, addmessage, (int)preg->re_erroffset);
166
+ else
167
+ {
168
+ strncpy(errbuf, message, errbuf_size - 1);
169
+ errbuf[errbuf_size-1] = 0;
170
+ }
171
+ }
172
+
173
+ return length + addlength;
174
+ }
175
+
176
+
177
+
178
+
179
+ /*************************************************
180
+ * Free store held by a regex *
181
+ *************************************************/
182
+
183
+ EXPORT void
184
+ regfree(regex_t *preg)
185
+ {
186
+ (pcre_free)(preg->re_pcre);
187
+ }
188
+
189
+
190
+
191
+
192
+ /*************************************************
193
+ * Compile a regular expression *
194
+ *************************************************/
195
+
196
+ /*
197
+ Arguments:
198
+ preg points to a structure for recording the compiled expression
199
+ pattern the pattern to compile
200
+ cflags compilation flags
201
+
202
+ Returns: 0 on success
203
+ various non-zero codes on failure
204
+ */
205
+
206
+ EXPORT int
207
+ regcomp(regex_t *preg, const char *pattern, int cflags)
208
+ {
209
+ const char *errorptr;
210
+ int erroffset;
211
+ int options = 0;
212
+
213
+ if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
214
+ if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
215
+
216
+ preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
217
+ preg->re_erroffset = erroffset;
218
+
219
+ if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
220
+
221
+ preg->re_nsub = pcre_info((const pcre *)preg->re_pcre, NULL, NULL);
222
+ return 0;
223
+ }
224
+
225
+
226
+
227
+
228
+ /*************************************************
229
+ * Match a regular expression *
230
+ *************************************************/
231
+
232
+ /* Unfortunately, PCRE requires 3 ints of working space for each captured
233
+ substring, so we have to get and release working store instead of just using
234
+ the POSIX structures as was done in earlier releases when PCRE needed only 2
235
+ ints. However, if the number of possible capturing brackets is small, use a
236
+ block of store on the stack, to reduce the use of malloc/free. The threshold is
237
+ in a macro that can be changed at configure time. */
238
+
239
+ EXPORT int
240
+ regexec(const regex_t *preg, const char *string, size_t nmatch,
241
+ regmatch_t pmatch[], int eflags)
242
+ {
243
+ int rc;
244
+ int options = 0;
245
+ int *ovector = NULL;
246
+ int small_ovector[POSIX_MALLOC_THRESHOLD * 3];
247
+ BOOL allocated_ovector = FALSE;
248
+
249
+ if ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;
250
+ if ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;
251
+
252
+ ((regex_t *)preg)->re_erroffset = (size_t)(-1); /* Only has meaning after compile */
253
+
254
+ if (nmatch > 0)
255
+ {
256
+ if (nmatch <= POSIX_MALLOC_THRESHOLD)
257
+ {
258
+ ovector = &(small_ovector[0]);
259
+ }
260
+ else
261
+ {
262
+ ovector = (int *)malloc(sizeof(int) * nmatch * 3);
263
+ if (ovector == NULL) return REG_ESPACE;
264
+ allocated_ovector = TRUE;
265
+ }
266
+ }
267
+
268
+ rc = pcre_exec((const pcre *)preg->re_pcre, NULL, string, (int)strlen(string),
269
+ 0, options, ovector, nmatch * 3);
270
+
271
+ if (rc == 0) rc = nmatch; /* All captured slots were filled in */
272
+
273
+ if (rc >= 0)
274
+ {
275
+ size_t i;
276
+ for (i = 0; i < (size_t)rc; i++)
277
+ {
278
+ pmatch[i].rm_so = ovector[i*2];
279
+ pmatch[i].rm_eo = ovector[i*2+1];
280
+ }
281
+ if (allocated_ovector) free(ovector);
282
+ for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;
283
+ return 0;
284
+ }
285
+
286
+ else
287
+ {
288
+ if (allocated_ovector) free(ovector);
289
+ switch(rc)
290
+ {
291
+ case PCRE_ERROR_NOMATCH: return REG_NOMATCH;
292
+ case PCRE_ERROR_NULL: return REG_INVARG;
293
+ case PCRE_ERROR_BADOPTION: return REG_INVARG;
294
+ case PCRE_ERROR_BADMAGIC: return REG_INVARG;
295
+ case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;
296
+ case PCRE_ERROR_NOMEMORY: return REG_ESPACE;
297
+ case PCRE_ERROR_MATCHLIMIT: return REG_ESPACE;
298
+ case PCRE_ERROR_BADUTF8: return REG_INVARG;
299
+ case PCRE_ERROR_BADUTF8_OFFSET: return REG_INVARG;
300
+ default: return REG_ASSERT;
301
+ }
302
+ }
303
+ }
304
+
305
+ /* End of pcreposix.c */
@@ -0,0 +1,88 @@
1
+ /*************************************************
2
+ * Perl-Compatible Regular Expressions *
3
+ *************************************************/
4
+
5
+ /* Copyright (c) 1997-2003 University of Cambridge */
6
+
7
+ #ifndef _PCREPOSIX_H
8
+ #define _PCREPOSIX_H
9
+
10
+ /* This is the header for the POSIX wrapper interface to the PCRE Perl-
11
+ Compatible Regular Expression library. It defines the things POSIX says should
12
+ be there. I hope. */
13
+
14
+ /* Have to include stdlib.h in order to ensure that size_t is defined. */
15
+
16
+ #include <stdlib.h>
17
+
18
+ /* Allow for C++ users */
19
+
20
+ #ifdef __cplusplus
21
+ extern "C" {
22
+ #endif
23
+
24
+ /* Options defined by POSIX. */
25
+
26
+ #define REG_ICASE 0x01
27
+ #define REG_NEWLINE 0x02
28
+ #define REG_NOTBOL 0x04
29
+ #define REG_NOTEOL 0x08
30
+
31
+ /* These are not used by PCRE, but by defining them we make it easier
32
+ to slot PCRE into existing programs that make POSIX calls. */
33
+
34
+ #define REG_EXTENDED 0
35
+ #define REG_NOSUB 0
36
+
37
+ /* Error values. Not all these are relevant or used by the wrapper. */
38
+
39
+ enum {
40
+ REG_ASSERT = 1, /* internal error ? */
41
+ REG_BADBR, /* invalid repeat counts in {} */
42
+ REG_BADPAT, /* pattern error */
43
+ REG_BADRPT, /* ? * + invalid */
44
+ REG_EBRACE, /* unbalanced {} */
45
+ REG_EBRACK, /* unbalanced [] */
46
+ REG_ECOLLATE, /* collation error - not relevant */
47
+ REG_ECTYPE, /* bad class */
48
+ REG_EESCAPE, /* bad escape sequence */
49
+ REG_EMPTY, /* empty expression */
50
+ REG_EPAREN, /* unbalanced () */
51
+ REG_ERANGE, /* bad range inside [] */
52
+ REG_ESIZE, /* expression too big */
53
+ REG_ESPACE, /* failed to get memory */
54
+ REG_ESUBREG, /* bad back reference */
55
+ REG_INVARG, /* bad argument */
56
+ REG_NOMATCH /* match failed */
57
+ };
58
+
59
+
60
+ /* The structure representing a compiled regular expression. */
61
+
62
+ typedef struct {
63
+ void *re_pcre;
64
+ size_t re_nsub;
65
+ size_t re_erroffset;
66
+ } regex_t;
67
+
68
+ /* The structure in which a captured offset is returned. */
69
+
70
+ typedef int regoff_t;
71
+
72
+ typedef struct {
73
+ regoff_t rm_so;
74
+ regoff_t rm_eo;
75
+ } regmatch_t;
76
+
77
+ /* The functions */
78
+
79
+ extern int regcomp(regex_t *, const char *, int);
80
+ extern int regexec(const regex_t *, const char *, size_t, regmatch_t *, int);
81
+ extern size_t regerror(int, const regex_t *, char *, size_t);
82
+ extern void regfree(regex_t *);
83
+
84
+ #ifdef __cplusplus
85
+ } /* extern "C" */
86
+ #endif
87
+
88
+ #endif /* End of pcreposix.h */