- if (mutt_strcmp (s, MuttVars[i].option) == 0)
- return (MuttVars[i].type == DT_SYN ? mutt_option_index ((char *) MuttVars[i].data) : i);
- return (-1);
-}
-
-int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags)
-{
- char ch;
- char qc = 0; /* quote char */
- char *pc;
-
- /* reset the destination pointer to the beginning of the buffer */
- dest->dptr = dest->data;
-
- SKIPWS (tok->dptr);
- while ((ch = *tok->dptr))
- {
- if (!qc)
- {
- if ((ISSPACE (ch) && !(flags & M_TOKEN_SPACE)) ||
- (ch == '#' && !(flags & M_TOKEN_COMMENT)) ||
- (ch == '=' && (flags & M_TOKEN_EQUAL)) ||
- (ch == ';' && !(flags & M_TOKEN_SEMICOLON)) ||
- ((flags & M_TOKEN_PATTERN) && strchr ("~!|", ch)))
- break;
- }
-
- tok->dptr++;
-
- if (ch == qc)
- qc = 0; /* end of quote */
- else if (!qc && (ch == '\'' || ch == '"') && !(flags & M_TOKEN_QUOTE))
- qc = ch;
- else if (ch == '\\' && qc != '\'')
- {
- if (!*tok->dptr)
- return -1; /* premature end of token */
- switch (ch = *tok->dptr++)
- {
- case 'c':
- case 'C':
- if (!*tok->dptr)
- return -1; /* premature end of token */
- mutt_buffer_addch (dest, (toupper ((unsigned char) *tok->dptr)
- - '@') & 0x7f);
- tok->dptr++;
- break;
- case 'r':
- mutt_buffer_addch (dest, '\r');
- break;
- case 'n':
- mutt_buffer_addch (dest, '\n');
- break;
- case 't':
- mutt_buffer_addch (dest, '\t');
- break;
- case 'f':
- mutt_buffer_addch (dest, '\f');
- break;
- case 'e':
- mutt_buffer_addch (dest, '\033');
- break;
- default:
- if (isdigit ((unsigned char) ch) &&
- isdigit ((unsigned char) *tok->dptr) &&
- isdigit ((unsigned char) *(tok->dptr + 1)))
- {
-
- mutt_buffer_addch (dest, (ch << 6) + (*tok->dptr << 3) + *(tok->dptr + 1) - 3504);
- tok->dptr += 2;
- }
- else
- mutt_buffer_addch (dest, ch);
- }
- }
- else if (ch == '^' && (flags & M_TOKEN_CONDENSE))
- {
- if (!*tok->dptr)
- return -1; /* premature end of token */
- ch = *tok->dptr++;
- if (ch == '^')
- mutt_buffer_addch (dest, ch);
- else if (ch == '[')
- mutt_buffer_addch (dest, '\033');
- else if (isalpha ((unsigned char) ch))
- mutt_buffer_addch (dest, toupper ((unsigned char) ch) - '@');
- else
- {
- mutt_buffer_addch (dest, '^');
- mutt_buffer_addch (dest, ch);
- }