]> granicus.if.org Git - onig/blob - sample/crnl.c
remove include windows.h from oniguruma.h
[onig] / sample / crnl.c
1 /*
2  * crnl.c  2007/05/30  K.Kosako
3  *
4  * !!! You should enable USE_CRNL_AS_LINE_TERMINATOR. !!!
5  * 
6  * USE_CRNL_AS_LINE_TERMINATOR config test program.
7  */
8 #include <stdio.h>
9 #include <string.h>
10 #include "oniguruma.h"
11
12 static int nfail = 0;
13
14 static void result(int no, int from, int to,
15                    int expected_from, int expected_to)
16 {
17   fprintf(stderr, "%3d: ", no);
18   if (from == expected_from && to == expected_to) {
19     fprintf(stderr, "Success\n");
20   }
21   else {
22     fprintf(stderr, "Fail: expected: (%d-%d), result: (%d-%d)\n",
23             expected_from, expected_to, from, to);
24
25     nfail++;
26   }
27 }
28
29 static int
30 x(int no, char* pattern_arg, char* str_arg,
31   int expected_from, int expected_to)
32 {
33   int r;
34   unsigned char *start, *range, *end;
35   regex_t* reg;
36   OnigErrorInfo einfo;
37   OnigRegion *region;
38   UChar *pattern, *str;
39
40   pattern = (UChar* )pattern_arg;
41   str     = (UChar* )str_arg;
42
43   r = onig_new(&reg, pattern, pattern + strlen((char* )pattern),
44         ONIG_OPTION_DEFAULT, ONIG_ENCODING_ASCII, ONIG_SYNTAX_DEFAULT, &einfo);
45   if (r != ONIG_NORMAL) {
46     char s[ONIG_MAX_ERROR_MESSAGE_LEN];
47     onig_error_code_to_str(s, r, &einfo);
48     fprintf(stderr, "ERROR: %s\n", s);
49     return -1;
50   }
51
52   region = onig_region_new();
53
54   end   = str + strlen((char* )str);
55   start = str;
56   range = end;
57   r = onig_search(reg, str, end, start, range, region, ONIG_OPTION_NONE);
58   if (r >= 0 || r == ONIG_MISMATCH) {
59     result(no, region->beg[0], region->end[0], expected_from, expected_to);
60   }
61   else if (r == ONIG_MISMATCH) {
62     result(no, r, -1, expected_from, expected_to);
63   }
64   else { /* error */
65     char s[ONIG_MAX_ERROR_MESSAGE_LEN];
66     onig_error_code_to_str(s, r);
67     fprintf(stderr, "ERROR: %s\n", s);
68     return -1;
69   }
70
71   onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
72   onig_free(reg);
73   return 0;
74 }
75
76 static int
77 f(int no, char* pattern_arg, char* str_arg)
78 {
79   return x(no, pattern_arg, str_arg, -1, -1);
80 }
81
82 extern int main(int argc, char* argv[])
83 {
84   x( 1, "",        "\r\n",        0,  0);
85   x( 2, ".",       "\r\n",        0,  1);
86   f( 3, "..",      "\r\n");
87   x( 4, "^",       "\r\n",        0,  0);
88   x( 5, "\\n^",    "\r\nf",       1,  2);
89   x( 6, "\\n^a",   "\r\na",       1,  3);
90   x( 7, "$",       "\r\n",        0,  0);
91   x( 8, "T$",      "T\r\n",       0,  1);
92   x( 9, "T$",      "T\raT\r\n",   3,  4);
93   x(10, "\\z",     "\r\n",        2,  2);
94   f(11, "a\\z",    "a\r\n");
95   x(12, "\\Z",     "\r\n",        0,  0);
96   x(13, "\\Z",     "\r\na",       3,  3);
97   x(14, "\\Z",     "\r\n\r\n\n",  4,  4);
98   x(15, "\\Z",     "\r\n\r\nX",   5,  5);
99   x(16, "a\\Z",    "a\r\n",       0,  1);
100   x(17, "aaaaaaaaaaaaaaa\\Z",   "aaaaaaaaaaaaaaa\r\n",  0,  15);
101   x(18, "a|$",     "b\r\n",       1,  1);
102   x(19, "$|b",     "\rb",         1,  2);
103   x(20, "a$|ab$",  "\r\nab\r\n",  2,  4);
104
105   x(21, "a|\\Z",       "b\r\n",       1,  1);
106   x(22, "\\Z|b",       "\rb",         1,  2);
107   x(23, "a\\Z|ab\\Z",  "\r\nab\r\n",  2,  4);
108   x(24, "(?=a$).",     "a\r\n",       0,  1);
109   f(25, "(?=a$).",     "a\r");
110   x(26, "(?!a$)..",    "a\r",         0,  2);
111   x(27, "(?<=a$).\\n", "a\r\n",       1,  3);
112   f(28, "(?<!a$).\\n", "a\r\n");
113   x(29, "(?=a\\Z).",     "a\r\n",       0,  1);
114   f(30, "(?=a\\Z).",     "a\r");
115   x(31, "(?!a\\Z)..",    "a\r",         0,  2);
116
117   onig_end();
118
119   if (nfail > 0) {
120     fprintf(stderr, "\n");
121     fprintf(stderr, "!!! You have to enable USE_CRNL_AS_LINE_TERMINATOR\n");
122     fprintf(stderr, "!!! in regenc.h for this test program.\n");
123     fprintf(stderr, "\n");
124   }
125
126   return 0;
127 }