Esempio n. 1
0
char *luaL_item_end (char *p)
{
  switch (*p++) {
    case '\0': return p-1;
    case ESC:
      if (*p == 0) luaL_verror("incorrect pattern (ends with `%c')", ESC);
      return p+1;
    case '[': {
      char *end = bracket_end(p);
      if (end == NULL) lua_error("incorrect pattern (missing `]')");
      return end+1;
    }
    default:
      return p;
  }
}
Esempio n. 2
0
int32 luaI_singlematch (int32 c, const char *p, const char **ep)
{
  switch (*p) {
    case '.':  /* matches any char */
      *ep = p+1;
      return 1;
    case '\0':  /* end of pattern; matches nothing */
      *ep = p;
      return 0;
    case ESC:
      if (*(++p) == '\0')
        luaL_verror("incorrect pattern (ends with `%c')", ESC);
      *ep = p+1;
      return matchclass(c, (byte)*p);
    case '[': {
      const char *end = bracket_end(p+1);
      int32 sig = *(p+1) == '^' ? (p++, 0) : 1;
      if (end == NULL) lua_error("incorrect pattern (missing `]')");
      *ep = end+1;
      while (++p < end) {
        if (*p == ESC) {
          if (((p+1) < end) && matchclass(c, (byte)*++p))
            return sig;
        }
        else if ((*(p+1) == '-') && (p+2 < end)) {
          p+=2;
          if ((byte)*(p-2) <= c && c <= (byte)*p)
            return sig;
        }
        else if ((byte)*p == c) return sig;
      }
      return !sig;
    }
    default:
      *ep = p+1;
      return ((byte)*p == c);
  }
}
Esempio n. 3
0
int luaL_singlematch (int c, char *p)
{
  if (c == 0) return 0;
  switch (*p) {
    case '.': return 1;
    case ESC: return matchclass(c, *(p+1));
    case '[': {
      char *end = bracket_end(p+1);
      int sig = *(p+1) == '^' ? (p++, 0) : 1;
      while (++p < end) {
        if (*p == ESC) {
          if (((p+1) < end) && matchclass(c, *++p)) return sig;
        }
        else if ((*(p+1) == '-') && (p+2 < end)) {
          p+=2;
          if (*(p-2) <= c && c <= *p) return sig;
        }
        else if (*p == c) return sig;
      }
      return !sig;
    }
    default: return (*p == c);
  }
}