Lines Matching refs:inf
93 irec_info inf;
111 inf.ptr = (unsigned char*)pattern;
112 inf.end = (unsigned char*)endp;
113 inf.flags = flags;
114 inf.alt = inf.palt = alt;
115 inf.pgrp = NULL;
116 inf.ppat = NULL;
117 inf.nparens = inf.ngrps = 0;
118 inf.ecode = 0;
122 for (; inf.ecode == 0 && inf.ptr < inf.end; inf.ptr++) {
124 (!isupper(*inf.ptr) && !islower(*inf.ptr)))
125 irec_literal_pattern(&inf, *inf.ptr);
127 irec_case_literal_pattern(&inf, *inf.ptr);
130 /* inf.ptr = inf.end is nul if flags & RE_NOSPEC */
131 for (; inf.ecode == 0 && inf.ptr < inf.end;) {
132 switch (*inf.ptr++) {
134 irec_simple_repetition(&inf, Rer_AnyTimes);
137 irec_simple_repetition(&inf, Rer_AtLeast);
140 irec_simple_repetition(&inf, Rer_Maybe);
143 irec_simple_pattern(&inf, Rep_Any);
148 irec_simple_pattern(&inf, Rep_Bol);
150 for (ptr = inf.ptr - 1;
155 irec_simple_pattern(&inf, Rep_Bol);
158 irec_literal_pattern(&inf, '^');
163 irec_simple_pattern(&inf, Rep_Eol);
166 for (ptr = inf.ptr; ptr < inf.end && *ptr == ')'; ptr++)
170 irec_simple_pattern(&inf, Rep_Eol);
173 irec_literal_pattern(&inf, '$');
177 irec_open_group(&inf);
181 ptr = inf.ptr;
184 irec_close_group(&inf);
185 else if (inf.pgrp == NULL)
187 inf.ecode = RE_EPAREN;
190 inf.ppat = NULL;
193 irec_range(&inf);
196 irec_literal_pattern(&inf, ']');
199 irec_complex_repetition(&inf);
202 irec_literal_pattern(&inf, '}');
206 if (inf.ptr - 1 == (unsigned char*)pattern ||
208 inf.ptr >= inf.end ||
210 inf.ptr[0] == '|' ||
211 inf.ptr[0] == ')')
212 inf.ecode = RE_EMPTY;
217 alt->prev = inf.palt;
218 inf.palt->next = alt;
219 inf.palt = alt;
220 inf.ppat = NULL;
223 inf.ecode = RE_ESPACE;
227 irec_escape(&inf);
231 (!isupper(inf.ptr[-1]) && !islower(inf.ptr[-1])))
232 irec_literal_pattern(&inf, inf.ptr[-1]);
234 irec_case_literal_pattern(&inf, inf.ptr[-1]);
240 if (inf.ecode == 0 && inf.nparens)
241 inf.ecode = RE_EPAREN;
243 if (inf.ecode == 0)
244 inf.ecode = orec_comp(inf.alt, flags);
247 if (inf.ecode) {
248 irec_free(&inf);
252 *ecode = inf.ecode;
273 irec_simple_pattern(irec_info *inf, rec_pat_t type)
279 inf->ecode = RE_ESPACE;
284 if ((pat->prev = inf->ppat) != NULL)
285 inf->ppat->next = pat;
287 inf->palt->pat = pat;
288 inf->ppat = pat;
292 irec_literal_pattern(irec_info *inf, int value)
299 if (inf->ppat && inf->ppat->rep == NULL) {
300 switch (inf->ppat->type) {
303 chr = inf->ppat->data.chr;
305 inf->ecode = RE_ESPACE;
308 inf->ppat->type = Rep_String;
309 inf->ppat->data.str = str;
317 length = strlen((char*)inf->ppat->data.str);
319 if ((str = realloc(inf->ppat->data.str,
321 inf->ecode = RE_ESPACE;
324 inf->ppat->data.str = str;
326 inf->ppat->data.str[length] = value;
327 inf->ppat->data.str[length + 1] = '\0';
337 inf->ecode = RE_ESPACE;
343 if ((pat->prev = inf->ppat) != NULL)
344 inf->ppat->next = pat;
346 inf->palt->pat = pat;
347 inf->ppat = pat;
351 irec_case_literal_pattern(irec_info *inf, int value)
361 if (inf->ppat && inf->ppat->rep == NULL) {
362 switch (inf->ppat->type) {
365 plower = inf->ppat->data.cse.lower;
366 pupper = inf->ppat->data.cse.upper;
368 inf->ecode = RE_ESPACE;
371 inf->ppat->type = Rep_CaseString;
372 inf->ppat->data.str = str;
382 length = strlen((char*)inf->ppat->data.str);
384 if ((str = realloc(inf->ppat->data.str,
386 inf->ecode = RE_ESPACE;
389 inf->ppat->data.str = str;
391 inf->ppat->data.str[length] = lower;
392 inf->ppat->data.str[length + 1] = upper;
393 inf->ppat->data.str[length + 2] = '\0';
403 inf->ecode = RE_ESPACE;
410 pat->prev = inf->ppat;
411 if ((pat->prev = inf->ppat) != NULL)
412 inf->ppat->next = pat;
414 inf->palt->pat = pat;
415 inf->ppat = pat;
419 irec_open_group(irec_info *inf)
426 inf->ecode = RE_ESPACE;
432 inf->ecode = RE_ESPACE;
439 inf->ecode = RE_ESPACE;
446 grp->palt = inf->palt;
447 grp->pgrp = inf->pgrp;
450 if ((pat->prev = inf->ppat) != NULL)
451 inf->ppat->next = pat;
453 inf->palt->pat = pat;
454 inf->palt = alt;
455 inf->ppat = NULL;
458 if (++inf->nparens == 1)
459 ++inf->ngrps;
461 inf->pgrp = grp;
465 irec_close_group(irec_info *inf)
467 if (inf->pgrp == NULL) {
468 inf->ecode = RE_EPAREN;
472 inf->palt = inf->pgrp->palt;
473 inf->ppat = inf->pgrp->parent;
474 inf->pgrp = inf->pgrp->pgrp;
476 --inf->nparens;
480 irec_range(irec_info *inf)
485 int not = inf->ptr[0] == '^';
488 ++inf->ptr;
492 inf->ecode = RE_ESPACE;
499 inf->ecode = RE_ESPACE;
505 if ((pat->prev = inf->ppat) != NULL)
506 inf->ppat->next = pat;
508 inf->palt->pat = pat;
509 inf->ppat = pat;
512 for (count = 0; inf->ecode == 0; count++) {
514 if (inf->ptr == inf->end) {
515 inf->ecode = RE_EBRACK;
519 else if (inf->ptr[0] == ']' && count)
523 if (inf->ptr[1] != '-' || inf->ptr[2] == ']') {
524 irec_range_single(inf, inf->ptr[0]);
525 ++inf->ptr;
528 if ((inf->flags & RE_NEWLINE) &&
529 inf->ptr[0] < '\n' && inf->ptr[2] > '\n') {
532 if (inf->ptr[0] == '\n' - 1)
533 irec_range_single(inf, inf->ptr[0]);
535 irec_range_complex(inf, inf->ptr[0], '\n' - 1);
536 if (inf->ptr[2] == '\n' + 1)
537 irec_range_single(inf, inf->ptr[2]);
539 irec_range_complex(inf, '\n' + 1, inf->ptr[2]);
542 irec_range_complex(inf, inf->ptr[0], inf->ptr[2]);
543 inf->ptr += 3;
549 ++inf->ptr;
553 irec_range_single(irec_info *inf, int value)
556 inf->ppat->data.rng->range[value] = 1;
558 if (inf->flags & RE_ICASE) {
562 inf->ppat->data.rng->range[value] = 1;
567 inf->ppat->data.rng->range[value] = 1;
573 irec_range_complex(irec_info *inf, int chrf, int chrt)
576 inf->ecode = RE_ERANGE;
581 irec_range_single(inf, chrf);
585 irec_escape(irec_info *inf)
588 unsigned char chr = inf->ptr[0];
591 inf->ecode = RE_EESCAPE;
594 ++inf->ptr;
597 irec_simple_pattern(inf, Rep_Odigit);
600 irec_simple_pattern(inf, Rep_OdigitNot);
603 irec_simple_pattern(inf, Rep_Digit);
606 irec_simple_pattern(inf, Rep_DigitNot);
609 irec_simple_pattern(inf, Rep_Xdigit);
612 irec_simple_pattern(inf, Rep_XdigitNot);
615 irec_simple_pattern(inf, Rep_Space);
618 irec_simple_pattern(inf, Rep_SpaceNot);
621 irec_simple_pattern(inf, Rep_Tab);
624 irec_simple_pattern(inf, Rep_Newline);
627 irec_simple_pattern(inf, Rep_Lower);
630 irec_simple_pattern(inf, Rep_Upper);
633 irec_simple_pattern(inf, Rep_Alnum);
636 irec_simple_pattern(inf, Rep_AlnumNot);
639 irec_simple_pattern(inf, Rep_Control);
642 irec_simple_pattern(inf, Rep_ControlNot);
645 irec_simple_pattern(inf, Rep_Bow);
648 irec_simple_pattern(inf, Rep_Eow);
653 if ((inf->flags & RE_NOSUB) || (chr -= '1') >= inf->ngrps) {
654 inf->ecode = RE_ESUBREG;
658 inf->ecode = RE_ESPACE;
663 pat->prev = inf->ppat;
664 if (inf->ppat)
665 inf->ppat->next = pat;
667 inf->palt->pat = pat;
668 inf->ppat = pat;
673 irec_literal_pattern(inf, '\0');
676 irec_literal_pattern(inf, '\a');
679 irec_literal_pattern(inf, '\b');
682 irec_literal_pattern(inf, '\f');
685 irec_literal_pattern(inf, '\r');
688 irec_literal_pattern(inf, '\v');
693 irec_literal_pattern(inf, chr);
699 irec_simple_repetition(irec_info *inf, rec_rep_t type)
704 if ((inf->pgrp == NULL && inf->ppat == NULL) ||
706 (inf->pgrp == NULL && inf->ppat->rep != NULL) ||
708 (inf->ppat == NULL && inf->pgrp->parent->rep != NULL)) {
709 inf->ecode = RE_BADRPT;
714 inf->ecode = RE_ESPACE;
719 irec_add_repetition(inf, rep);
723 irec_complex_repetition(irec_info *inf)
731 if ((inf->pgrp == NULL && inf->ppat == NULL) ||
733 (inf->pgrp == NULL && inf->ppat->rep != NULL) ||
735 (inf->ppat == NULL && inf->pgrp->parent->rep != NULL)) {
736 inf->ecode = RE_EBADBR;
742 if (inf->ptr[0] == ',')
745 else if (!isdigit(inf->ptr[0]))
748 mine = strtol((char*)inf->ptr, (char**)&end, 10);
749 inf->ptr = end;
750 if (inf->ptr[0] == '}') {
752 ++inf->ptr;
755 else if (inf->ptr[0] != ',')
760 ++inf->ptr;
761 if (inf->ptr[0] == '}') {
762 ++inf->ptr;
765 else if (!isdigit(inf->ptr[0]))
767 maxc = strtol((char*)inf->ptr, (char**)&end, 10);
768 inf->ptr = end;
769 if (inf->ptr[0] != '}')
771 ++inf->ptr;
789 inf->ecode = RE_ESPACE;
820 irec_add_repetition(inf, rep);
825 inf->ecode = RE_EBADBR;
832 irec_add_repetition(irec_info *inf, rec_rep *rep)
842 if (inf->ppat == NULL) {
844 rec_grp *grp = inf->pgrp;
860 inf->ecode = RE_BADRPT;
879 inf->pgrp->parent->rep = rep;
880 irec_close_group(inf);
884 switch (inf->ppat->type) {
894 inf->ecode = RE_BADRPT;
898 grp = inf->pgrp;
903 inf->ppat->type = (rept == Rer_AnyTimes) ?
915 inf->ecode = RE_BADRPT;
922 inf->ecode = RE_ESPACE;
926 length = strlen((char*)inf->ppat->data.str);
928 pat->prev = inf->ppat;
929 pat->data.chr = inf->ppat->data.str[length - 1];
932 value = inf->ppat->data.str[0];
933 free(inf->ppat->data.str);
934 inf->ppat->data.chr = value;
935 inf->ppat->type = Rep_Literal;
939 inf->ppat->data.str[length - 1] = '\0';
940 inf->ppat->next = pat;
941 inf->ppat = pat;
947 inf->ecode = RE_ESPACE;
951 length = strlen((char*)inf->ppat->data.str);
953 pat->prev = inf->ppat;
954 pat->data.cse.lower = inf->ppat->data.str[length - 2];
955 pat->data.cse.upper = inf->ppat->data.str[length - 1];
958 value = inf->ppat->data.str[0];
959 upper = inf->ppat->data.str[1];
960 free(inf->ppat->data.str);
961 inf->ppat->data.cse.lower = value;
962 inf->ppat->data.cse.upper = upper;
963 inf->ppat->next = pat;
964 inf->ppat->type = Rep_CaseLiteral;
968 inf->ppat->data.str[length - 2] = '\0';
969 inf->ppat->next = pat;
970 inf->ppat = pat;
978 inf->ppat->rep = rep;
982 irec_free(irec_info *inf)
984 irec_free_alt(inf->alt);