if (MB_CUR_MAX > 1 &&
if (input->mb_cur_max > 1 &&
peek_token (token, input, syntax)     re_token_t *token;     re_string_t *input;     reg_syntax_t syntax;{  unsigned char c;  if (re_string_eoi (input))    {      token->type = END_OF_RE;      return 0;    }  c = re_string_peek_byte (input, 0);  token->opr.c = c;#ifdef RE_ENABLE_I18N  token->mb_partial = 0;  if (MB_CUR_MAX > 1 &&      !re_string_first_byte (input, re_string_cur_idx (input)))    {      token->type = CHARACTER;      token->mb_partial = 1;      return 1;    }#endif  if (c == '\\')    {      unsigned char c2;      if (re_string_cur_idx (input) + 1 >= re_string_length (input))	{	  token->type = BACK_SLASH;	  return 1;	}      c2 = re_string_peek_byte_case (input, 1);      token->opr.c = c2;      token->type = CHARACTER;      switch (c2)	{	case '|':	  if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR))	    token->type = OP_ALT;	  break;	case '1': case '2': case '3': case '4': case '5':	case '6': case '7': case '8': case '9':	  if (!(syntax & RE_NO_BK_REFS))	    {	      token->type = OP_BACK_REF;	      token->opr.idx = c2 - '0';	    }	  break;	case '<':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = WORD_FIRST;	    }	  break;	case '>':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = WORD_LAST;	    }	  break;	case 'b':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = WORD_DELIM;	    }	  break;	case 'B':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = INSIDE_WORD;	    }	  break;	case 'w':	  if (!(syntax & RE_NO_GNU_OPS))	    token->type = OP_WORD;	  break;	case 'W':	  if (!(syntax & RE_NO_GNU_OPS))	    token->type = OP_NOTWORD;	  break;	case 's':	  if (!(syntax & RE_NO_GNU_OPS))	    token->type = OP_SPACE;	  break;	case 'S':	  if (!(syntax & RE_NO_GNU_OPS))	    token->type = OP_NOTSPACE;	  break;	case '`':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = BUF_FIRST;	    }	  break;	case '\'':	  if (!(syntax & RE_NO_GNU_OPS))	    {	      token->type = ANCHOR;	      token->opr.idx = BUF_LAST;	    }	  break;	case '(':	  if (!(syntax & RE_NO_BK_PARENS))	    token->type = OP_OPEN_SUBEXP;	  break;	case ')':	  if (!(syntax & RE_NO_BK_PARENS))	    token->type = OP_CLOSE_SUBEXP;	  break;	case '+':	  if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))	    token->type = OP_DUP_PLUS;	  break;	case '?':	  if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))	    token->type = OP_DUP_QUESTION;	  break;	case '{':	  if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))	    token->type = OP_OPEN_DUP_NUM;	  break;	case '}':	  if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))	    token->type = OP_CLOSE_DUP_NUM;	  break;	default:	  break;	}      return 2;    }  token->type = CHARACTER;  switch (c)    {    case '\n':      if (syntax & RE_NEWLINE_ALT)	token->type = OP_ALT;      break;    case '|':      if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR))	token->type = OP_ALT;      break;    case '*':      token->type = OP_DUP_ASTERISK;      break;    case '+':      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))	token->type = OP_DUP_PLUS;      break;    case '?':      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))	token->type = OP_DUP_QUESTION;      break;    case '{':      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))	token->type = OP_OPEN_DUP_NUM;      break;    case '}':      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))	token->type = OP_CLOSE_DUP_NUM;      break;    case '(':      if (syntax & RE_NO_BK_PARENS)	token->type = OP_OPEN_SUBEXP;      break;    case ')':      if (syntax & RE_NO_BK_PARENS)	token->type = OP_CLOSE_SUBEXP;      break;    case '[':      token->type = OP_OPEN_BRACKET;      break;    case '.':      token->type = OP_PERIOD;      break;    case '^':      if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) &&	  re_string_cur_idx (input) != 0)	{	  char prev = re_string_peek_byte (input, -1);	  if (!(syntax & RE_NEWLINE_ALT) || prev != '\n')	    break;	}      token->type = ANCHOR;      token->opr.idx = LINE_FIRST;      break;    case '$':      if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) &&	  re_string_cur_idx (input) + 1 != re_string_length (input))	{	  re_token_t next;	  re_string_skip_bytes (input, 1);	  peek_token (&next, input, syntax);	  re_string_skip_bytes (input, -1);	  if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP)	    break;	}      token->type = ANCHOR;      token->opr.idx = LINE_LAST;      break;    default:      break;    }  return 1;}