version 1.14, 2011/11/27 23:11:37 |
version 1.16, 2011/11/29 10:53:42 |
|
|
int regex; /* is regex? */ |
int regex; /* is regex? */ |
int index; /* index in match array */ |
int index; /* index in match array */ |
uint64_t mask; /* type-mask */ |
uint64_t mask; /* type-mask */ |
int cs; /* is case-sensitive? */ |
|
int and; /* is rhs of logical AND? */ |
int and; /* is rhs of logical AND? */ |
char *v; /* search value */ |
char *v; /* search value */ |
regex_t re; /* compiled re, if regex */ |
regex_t re; /* compiled re, if regex */ |
Line 599 termcomp(int argc, char *argv[], size_t *tt) |
|
Line 598 termcomp(int argc, char *argv[], size_t *tt) |
|
e = NULL; |
e = NULL; |
*tt = 0; |
*tt = 0; |
|
|
for (pos = 0; pos < argc; pos++) { |
for (pos = argc - 1; pos >= 0; pos--) { |
sz = strlen(argv[pos]) + 16; |
sz = strlen(argv[pos]) + 18; |
buf = mandoc_realloc(buf, sz); |
buf = mandoc_realloc(buf, sz); |
strlcpy(buf, "~[[:<:]]", sz); |
strlcpy(buf, "Nm~[[:<:]]", sz); |
strlcat(buf, argv[pos], sz); |
strlcat(buf, argv[pos], sz); |
strlcat(buf, "[[:>:]]", sz); |
strlcat(buf, "[[:>:]]", sz); |
if (NULL == (next = exprterm(buf, 0))) { |
if (NULL == (next = exprterm(buf, 0))) { |
Line 610 termcomp(int argc, char *argv[], size_t *tt) |
|
Line 609 termcomp(int argc, char *argv[], size_t *tt) |
|
exprfree(e); |
exprfree(e); |
return(NULL); |
return(NULL); |
} |
} |
if (NULL != e) |
next->next = e; |
e->next = next; |
|
e = next; |
e = next; |
(*tt)++; |
(*tt)++; |
} |
} |
Line 695 exprexpr(int argc, char *argv[], int *pos, int *lvl, s |
|
Line 693 exprexpr(int argc, char *argv[], int *pos, int *lvl, s |
|
++(*pos); |
++(*pos); |
++(*lvl); |
++(*lvl); |
next = mandoc_calloc(1, sizeof(struct expr)); |
next = mandoc_calloc(1, sizeof(struct expr)); |
next->cs = 1; |
|
next->subexpr = exprexpr(argc, argv, pos, lvl, tt); |
next->subexpr = exprexpr(argc, argv, pos, lvl, tt); |
if (NULL == next->subexpr) { |
if (NULL == next->subexpr) { |
free(next); |
free(next); |
Line 746 exprterm(char *buf, int cs) |
|
Line 743 exprterm(char *buf, int cs) |
|
|
|
memset(&e, 0, sizeof(struct expr)); |
memset(&e, 0, sizeof(struct expr)); |
|
|
e.cs = cs; |
|
|
|
/* Choose regex or substring match. */ |
/* Choose regex or substring match. */ |
|
|
if (NULL == (e.v = strpbrk(buf, "=~"))) { |
if (NULL == (e.v = strpbrk(buf, "=~"))) { |
Line 819 exprmark(const struct expr *p, const char *cp, |
|
Line 814 exprmark(const struct expr *p, const char *cp, |
|
if (p->regex) { |
if (p->regex) { |
if (regexec(&p->re, cp, 0, NULL, 0)) |
if (regexec(&p->re, cp, 0, NULL, 0)) |
continue; |
continue; |
} else if (p->cs) { |
} else if (NULL == strcasestr(cp, p->v)) |
if (NULL == strstr(cp, p->v)) |
continue; |
continue; |
|
} else { |
|
if (NULL == strcasestr(cp, p->v)) |
|
continue; |
|
} |
|
|
|
if (NULL == ms) |
if (NULL == ms) |
return(1); |
return(1); |