Lines Matching refs:pattern
296 VarMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern) in VarMatch() argument
298 const char *pat = pattern; in VarMatch()
316 VarNoMatch(struct Name *word, bool addSpace, Buffer buf, void *pattern) in VarNoMatch() argument
318 const char *pat = pattern; in VarNoMatch()
358 VarPattern *pattern; in get_sysvpattern() local
427 pattern = emalloc(sizeof(VarPattern)); in get_sysvpattern()
428 pattern->lbuffer = pattern->lhs = Buf_Retrieve(&buf); in get_sysvpattern()
429 pattern->leftLen = Buf_Size(&buf); in get_sysvpattern()
430 pattern->rhs = Buf_Retrieve(&buf2); in get_sysvpattern()
431 pattern->rightLen = Buf_Size(&buf2); in get_sysvpattern()
432 pattern->flags = 0; in get_sysvpattern()
434 return pattern; in get_sysvpattern()
451 VarPattern *pattern = patternp; in VarSubstitute() local
454 if ((pattern->flags & (VAR_SUB_ONE|VAR_SUB_MATCHED)) != in VarSubstitute()
458 if ((pattern->flags & VAR_MATCH_START) && in VarSubstitute()
459 (strncmp(word->s, pattern->lhs, pattern->leftLen) == 0)) { in VarSubstitute()
461 if ((pattern->flags & VAR_MATCH_END) && in VarSubstitute()
462 (wordLen == pattern->leftLen)) { in VarSubstitute()
466 if (pattern->rightLen != 0) { in VarSubstitute()
470 Buf_AddChars(buf, pattern->rightLen, in VarSubstitute()
471 pattern->rhs); in VarSubstitute()
473 pattern->flags |= VAR_SUB_MATCHED; in VarSubstitute()
474 } else if (pattern->flags & VAR_MATCH_END) { in VarSubstitute()
480 if ((pattern->rightLen + wordLen - pattern->leftLen) != 0){ in VarSubstitute()
485 Buf_AddChars(buf, pattern->rightLen, pattern->rhs); in VarSubstitute()
486 Buf_AddChars(buf, wordLen - pattern->leftLen, in VarSubstitute()
487 word->s + pattern->leftLen); in VarSubstitute()
488 pattern->flags |= VAR_SUB_MATCHED; in VarSubstitute()
490 } else if (pattern->flags & VAR_MATCH_START) { in VarSubstitute()
493 } else if (pattern->flags & VAR_MATCH_END) { in VarSubstitute()
498 cp = word->s + (wordLen - pattern->leftLen); in VarSubstitute()
500 strncmp(cp, pattern->lhs, pattern->leftLen) == 0) { in VarSubstitute()
505 if (((cp - word->s) + pattern->rightLen) != 0) { in VarSubstitute()
511 Buf_AddChars(buf, pattern->rightLen, pattern->rhs); in VarSubstitute()
512 pattern->flags |= VAR_SUB_MATCHED; in VarSubstitute()
533 cp = strstr(word->s, pattern->lhs); in VarSubstitute()
535 if (addSpace && (cp - word->s) + pattern->rightLen != 0){ in VarSubstitute()
540 Buf_AddChars(buf, pattern->rightLen, pattern->rhs); in VarSubstitute()
541 wordLen -= (cp - word->s) + pattern->leftLen; in VarSubstitute()
542 word->s = cp + pattern->leftLen; in VarSubstitute()
543 if (wordLen == 0 || (pattern->flags & VAR_SUB_GLOBAL) == 0) in VarSubstitute()
545 pattern->flags |= VAR_SUB_MATCHED; in VarSubstitute()
767 int delim2, size_t *length, VarPattern *pattern) in VarGetPattern() argument
780 cp[1] == '\\' || cp[1] == '$' || (pattern && cp[1] == '&'))) in VarGetPattern()
806 } else if (pattern && *cp == '&') in VarGetPattern()
807 Buf_AddChars(&buf, pattern->leftLen, pattern->lhs); in VarGetPattern()
979 VarPattern *pattern; in common_get_patternarg() local
983 pattern = emalloc(sizeof(VarPattern)); in common_get_patternarg()
984 pattern->flags = 0; in common_get_patternarg()
992 pattern->rhs = NULL; in common_get_patternarg()
993 pattern->lhs = VarGetPattern(ctxt, err, &s, delim, delim, in common_get_patternarg()
994 &pattern->leftLen, NULL); in common_get_patternarg()
995 pattern->lbuffer = pattern->lhs; in common_get_patternarg()
996 if (pattern->lhs != NULL) { in common_get_patternarg()
997 if (dosubst && pattern->leftLen > 0) { in common_get_patternarg()
998 if (pattern->lhs[pattern->leftLen-1] == '$') { in common_get_patternarg()
999 pattern->leftLen--; in common_get_patternarg()
1000 pattern->flags |= VAR_MATCH_END; in common_get_patternarg()
1002 if (pattern->lhs[0] == '^') { in common_get_patternarg()
1003 pattern->lhs++; in common_get_patternarg()
1004 pattern->leftLen--; in common_get_patternarg()
1005 pattern->flags |= VAR_MATCH_START; in common_get_patternarg()
1008 pattern->rhs = VarGetPattern(ctxt, err, &s, delim, delim, in common_get_patternarg()
1009 &pattern->rightLen, dosubst ? pattern: NULL); in common_get_patternarg()
1010 if (pattern->rhs != NULL) { in common_get_patternarg()
1017 pattern->flags |= VAR_SUB_GLOBAL; in common_get_patternarg()
1020 pattern->flags |= VAR_SUB_ONE; in common_get_patternarg()
1027 return pattern; in common_get_patternarg()
1031 free_patternarg(pattern); in common_get_patternarg()