Lines Matching refs:s

57 next(s)  in next()  argument
58 STR *s; in next()
65 switch (s->state) {
71 switch (*s->str) {
73 s->state = EOS;
76 s->lastch = backslash(s, &is_octal);
79 if (bracket(s))
80 return (next(s));
83 clen = mbrtowc(&wch, s->str, MB_LEN_MAX, NULL);
88 s->lastch = wch;
89 s->str += clen;
94 if (s->str[0] == '-' && genrange(s, is_octal))
95 return (next(s));
98 if (s->cnt-- == 0) {
99 s->state = NORMAL;
100 return (next(s));
102 ++s->lastch;
105 if (s->cnt-- == 0) {
106 s->state = NORMAL;
107 return (next(s));
113 s->cnt++;
114 ch = nextwctype(s->lastch, s->cclass);
116 s->state = NORMAL;
117 return (next(s));
119 s->lastch = ch;
122 if ((ch = s->set[s->cnt++]) == OOBCH) {
123 s->state = NORMAL;
124 return (next(s));
126 s->lastch = ch;
135 bracket(s) in bracket() argument
136 STR *s; in bracket()
140 switch (s->str[1]) {
142 if ((p = strchr(s->str + 2, ']')) == NULL)
144 if (*(p - 1) != ':' || p - s->str < 4)
147 s->str += 2;
148 genclass(s);
149 s->str = p + 1;
152 if ((p = strchr(s->str + 3, ']')) == NULL)
154 if (*(p - 1) != '=' || p - s->str < 4)
156 s->str += 2;
157 genequiv(s);
161 if ((p = strpbrk(s->str + 2, "*]")) == NULL)
165 s->str += 1;
166 genseq(s);
173 genclass(s) in genclass() argument
174 STR *s; in genclass()
177 if ((s->cclass = wctype(s->str)) == 0)
178 errx(1, "unknown class %s", s->str);
179 s->cnt = 0;
180 s->lastch = -1; /* incremented before check in next() */
181 if (strcmp(s->str, "upper") == 0)
182 s->state = CCLASS_UPPER;
183 else if (strcmp(s->str, "lower") == 0)
184 s->state = CCLASS_LOWER;
186 s->state = CCLASS;
190 genequiv(s) in genequiv() argument
191 STR *s; in genequiv()
198 if (*s->str == '\\') {
199 s->equiv[0] = backslash(s, NULL);
200 if (*s->str != '=')
202 s->str += 2;
204 clen = mbrtowc(&wc, s->str, MB_LEN_MAX, NULL);
209 s->equiv[0] = wc;
210 if (s->str[clen] != '=')
212 s->str += clen + 2;
224 src[0] = (char)s->equiv[0];
232 s->equiv[p++] = i;
234 s->equiv[p] = OOBCH;
237 s->cnt = 0;
238 s->state = SET;
239 s->set = s->equiv;
243 genrange(STR *s, int was_octal) in genrange() argument
252 savestart = s->str; in genrange()
253 if (*++s->str == '\\') in genrange()
254 stopval = backslash(s, &octal); in genrange()
256 clen = mbrtowc(&wc, s->str, MB_LEN_MAX, NULL); in genrange()
262 s->str += clen; in genrange()
269 if (stopval < s->lastch) { in genrange()
270 s->str = savestart; in genrange()
273 s->cnt = stopval - s->lastch + 1; in genrange()
274 s->state = RANGE; in genrange()
275 --s->lastch; in genrange()
278 if (charcoll((const void *)&stopval, (const void *)&(s->lastch)) < 0) { in genrange()
279 s->str = savestart; in genrange()
283 if ((s->set = (void *)p) == NULL) in genrange()
286 if (charcoll((const void *)&cnt, (const void *)&(s->lastch)) >= in genrange()
291 n = (int *)p - (int *)s->set; in genrange()
293 s->cnt = 0; in genrange()
294 s->state = SET; in genrange()
296 qsort(s->set, n, sizeof (*(s->set)), charcoll); in genrange()
301 genseq(s) in genseq() argument
302 STR *s; in genseq()
308 if (s->which == STRING1)
311 if (*s->str == '\\')
312 s->lastch = backslash(s, NULL);
314 clen = mbrtowc(&wc, s->str, MB_LEN_MAX, NULL);
319 s->lastch = wc;
320 s->str += clen;
322 if (*s->str != '*')
325 switch (*++s->str) {
327 s->cnt = backslash(s, NULL);
330 s->cnt = 0;
331 ++s->str;
334 if (isdigit((uchar_t)*s->str)) {
335 s->cnt = strtol(s->str, &ep, 0);
337 s->str = ep + 1;
345 s->state = s->cnt ? SEQUENCE : INFINITE;
353 backslash(STR *s, int *is_octal) in backslash() argument
360 ch = (uchar_t)*++s->str; in backslash()
365 ++s->str; in backslash()
375 ++s->str; in backslash()
392 s->state = EOS; in backslash()