diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2024-03-12 21:09:42 +0100 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2024-03-12 21:27:37 +0100 |
commit | 24c4029c96fa04b3cb4f90fbb36dc5248dd39810 (patch) | |
tree | ca51727f97207117f335f0309c063ffd2f168f2d /src/core/core-eval.h | |
parent | bb346f8c6c62655a6ef8fe4bc848d179258ce008 (diff) | |
download | weechat-24c4029c96fa04b3cb4f90fbb36dc5248dd39810.zip |
core: remove "wee-" prefix from source files in src/core and src/core/hook
Diffstat (limited to 'src/core/core-eval.h')
-rw-r--r-- | src/core/core-eval.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/core/core-eval.h b/src/core/core-eval.h new file mode 100644 index 000000000..efc7cd4e4 --- /dev/null +++ b/src/core/core-eval.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012-2024 Sébastien Helleu <flashcode@flashtux.org> + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef WEECHAT_EVAL_H +#define WEECHAT_EVAL_H + +#include <regex.h> + +#define EVAL_STR_FALSE "0" +#define EVAL_STR_TRUE "1" + +#define EVAL_DEFAULT_PREFIX "${" +#define EVAL_DEFAULT_SUFFIX "}" + +#define EVAL_RECURSION_MAX 32 + +#define EVAL_RANGE_DIGIT "0123456789" +#define EVAL_RANGE_XDIGIT EVAL_RANGE_DIGIT "abcdefABCDEF" +#define EVAL_RANGE_LOWER "abcdefghijklmnopqrstuvwxyz" +#define EVAL_RANGE_UPPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +#define EVAL_RANGE_ALPHA EVAL_RANGE_LOWER EVAL_RANGE_UPPER +#define EVAL_RANGE_ALNUM EVAL_RANGE_ALPHA EVAL_RANGE_DIGIT + +#define EVAL_SYNTAX_HL_MARKER "\xef\xbf\xbf\xef\xbf\xbf" +#define EVAL_SYNTAX_HL_INC (EVAL_SYNTAX_HL_MARKER "+") +#define EVAL_SYNTAX_HL_DEC (EVAL_SYNTAX_HL_MARKER "-") + +struct t_hashtable; + +enum t_eval_logical_op +{ + EVAL_LOGICAL_OP_OR = 0, + EVAL_LOGICAL_OP_AND, + /* number of comparison strings */ + EVAL_NUM_LOGICAL_OPS, +}; + +enum t_eval_comparison +{ + EVAL_COMPARE_REGEX_MATCHING = 0, + EVAL_COMPARE_REGEX_NOT_MATCHING, + EVAL_COMPARE_STRING_MATCHING_CASE_SENSITIVE, + EVAL_COMPARE_STRING_NOT_MATCHING_CASE_SENSITIVE, + EVAL_COMPARE_STRING_MATCHING, + EVAL_COMPARE_STRING_NOT_MATCHING, + EVAL_COMPARE_INCLUDE_CASE_SENSITIVE, + EVAL_COMPARE_NOT_INCLUDE_CASE_SENSITIVE, + EVAL_COMPARE_INCLUDE, + EVAL_COMPARE_NOT_INCLUDE, + EVAL_COMPARE_EQUAL, + EVAL_COMPARE_NOT_EQUAL, + EVAL_COMPARE_LESS_EQUAL, + EVAL_COMPARE_LESS, + EVAL_COMPARE_GREATER_EQUAL, + EVAL_COMPARE_GREATER, + /* number of comparison strings */ + EVAL_NUM_COMPARISONS, +}; + +struct t_eval_regex +{ + const char *result; + regmatch_t match[100]; + int last_match; +}; + +struct t_eval_context +{ + struct t_hashtable *pointers; /* pointers used in eval */ + struct t_hashtable *extra_vars; /* extra variables used in eval */ + struct t_hashtable *user_vars; /* user-defined variables */ + int extra_vars_eval; /* 1 if extra vars must be evaluated */ + const char *prefix; /* prefix (default is "${") */ + int length_prefix; /* length of prefix */ + const char *suffix; /* suffix (default is "}") */ + int length_suffix; /* length of suffix */ + struct t_eval_regex *regex; /* in case of replace with regex */ + int regex_replacement_index; /* replacement index (≥ 1) */ + int recursion_count; /* to prevent infinite recursion */ + int syntax_highlight; /* syntax highlight: ${raw_hl:...} */ + /* or ${hl:...} */ + int debug_level; /* 0: no debug, 1: debug, 2: extra */ + int debug_depth; /* used for debug indentation */ + int debug_id; /* operation id in debug output */ + char **debug_output; /* string with debug output */ +}; + +extern int eval_is_true (const char *value); +extern char *eval_expression (const char *expr, + struct t_hashtable *pointers, + struct t_hashtable *extra_vars, + struct t_hashtable *options); + +#endif /* WEECHAT_EVAL_H */ |