static int get_args (char *l, char **args, int args_size) { int argc = 0; while (argc < args_size) { char *p = l; while (*p && whiteness (*p)) p++; if (!*p) break; for (l = p + 1; *l && !whiteness (*l); l++); if (*l) *l++ = '\0'; args[argc++] = convert (p); } args[argc] = (char *) NULL; return argc; }
static off_t compare_word_to_right (const WEdit * edit, off_t i, const char *text, const char *whole_left, const char *whole_right, gboolean line_start) { const unsigned char *p, *q; int c, d, j; if (*text == '\0') return -1; c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i - 1)); if ((line_start && c != '\n') || (whole_left != NULL && strchr (whole_left, c) != NULL)) return -1; for (p = (const unsigned char *) text, q = p + strlen ((const char *) p); p < q; p++, i++) { switch (*p) { case SYNTAX_TOKEN_STAR: if (++p > q) return -1; while (TRUE) { c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i)); if (*p == '\0' && whole_right != NULL && strchr (whole_right, c) == NULL) break; if (c == *p) break; if (c == '\n') return -1; i++; } break; case SYNTAX_TOKEN_PLUS: if (++p > q) return -1; j = 0; while (TRUE) { c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i)); if (c == *p) { j = i; if (p[0] == text[0] && p[1] == '\0') /* handle eg '+' and @+@ keywords properly */ break; } if (j != 0 && strchr ((const char *) p + 1, c) != NULL) /* c exists further down, so it will get matched later */ break; if (whiteness (c) || (whole_right != NULL && strchr (whole_right, c) == NULL)) { if (*p == '\0') { i--; break; } if (j == 0) return -1; i = j; break; } i++; } break; case SYNTAX_TOKEN_BRACKET: if (++p > q) return -1; c = -1; while (TRUE) { d = c; c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i)); for (j = 0; p[j] != SYNTAX_TOKEN_BRACKET && p[j] != '\0'; j++) if (c == p[j]) goto found_char2; break; found_char2: i++; } i--; while (*p != SYNTAX_TOKEN_BRACKET && p <= q) p++; if (p > q) return -1; if (p[1] == d) i--; break; case SYNTAX_TOKEN_BRACE: if (++p > q) return -1; c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i)); for (; *p != SYNTAX_TOKEN_BRACE && *p != '\0'; p++) if (c == *p) goto found_char3; return -1; found_char3: while (*p != SYNTAX_TOKEN_BRACE && p < q) p++; break; default: if (*p != xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i))) return -1; } } return (whole_right != NULL && strchr (whole_right, xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i))) != NULL) ? -1 : i; }