func matchStr()

in wfn/matching.go [348:388]


func matchStr(s, t string) Relation {
	escaped := false
	matchesAs := Equal
	idx := 0
	for ; idx < len(t); idx++ {
		if idx >= len(s) {
			return Disjoint
		}
		if !escaped && s[idx] == '*' {
			if idx == len(s)-1 {
				return Superset
			}
			for i := idx; i < len(t); i++ {
				if matchStr(s[idx+1:], t[i:]) != Disjoint {
					return Superset
				}
			}
			return Disjoint
		}

		if (escaped || s[idx] != '?') && s[idx] != t[idx] {
			return Disjoint
		} else if !escaped && s[idx] == '?' {
			matchesAs = Superset
		}
		if s[idx] == '\\' {
			escaped = !escaped
		} else {
			escaped = false
		}
	}
	for ; idx < len(s); idx++ {
		if s[idx] != '*' {
			return Disjoint
		}
	}
	if len(s) > len(t) {
		return Superset
	}
	return matchesAs
}