static int singlematch (MatchState *ms, const char *s, const char *p,
                        const char *ep) {
  if (s >= ms->src_end)
    return 0;
  else {
    int c = uchar(*s);
    switch (*p) {
      case '.': return 1;  /* matches any char */
      case L_ESC: return match_class(c, uchar(*(p+1)));
      case '[': return matchbracketclass(c, p, ep-1);
      default:  return (uchar(*p) == c);
    }
  }
}
Example #2
0
static int matchbracketclass (int c, const char *p, const char *ec)
{
	int sig = 1;
	if (*(p+1) == '^') {
		sig = 0;
		p++;  /* skip the `^' */
	}
	while (++p < ec) {
		if (*p == L_ESC) {
			p++;
			if (match_class(c, uchar(*p)))
				return sig;
		} else if ((*(p+1) == '-') && (p+2 < ec)) {
			p+=2;
			if (uchar(*(p-2)) <= c && c <= uchar(*p))
				return sig;
		} else if (uchar(*p) == c) return sig;
	}
	return !sig;
}
Example #3
0
static int matchbracketclass (lua_WChar c, const lua_WChar *p, const lua_WChar *ec) {
  int sig = 1;
  if (*(p+1) == '^') {
    sig = 0;
    p++;  /* skip the `^' */
  }
  while (++p < ec) {
    if (*p == ESC) {
      p++;
      if (match_class(c, *p))
        return sig;
    }
    else if ((*(p+1) == '-') && (p+2 < ec)) {
      p+=2;
      if (*(p-2) <= c && c <= *p)
        return sig;
    }
    else if (*p == c) return sig;
  }
  return !sig;
}
Example #4
0
static int matchbracketclass (int c, const char *p, const char *endclass) {
    int sig = 1;
    if (*(p+1) == '^') {
        sig = 0;
        p++;  /* skip the '^' */
    }
    while (++p < endclass) {
        if (*p == ESC) {
            p++;
            if (match_class(c, (unsigned char)*p))
                return sig;
        }
        else if ((*(p+1) == '-') && (p+2 < endclass)) {
            p+=2;
            if ((int)(unsigned char)*(p-2) <= c && c <= (int)(unsigned char)*p)
                return sig;
        }
        else if ((int)(unsigned char)*p == c) return sig;
    }
    return !sig;
}