Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 1 | #ifndef GREP_H |
| 2 | #define GREP_H |
René Scharfe | 7e8f59d | 2009-03-07 13:32:32 +0100 | [diff] [blame] | 3 | #include "color.h" |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 4 | |
| 5 | enum grep_pat_token { |
| 6 | GREP_PATTERN, |
Junio C Hamano | 480c1ca | 2006-09-20 12:39:46 -0700 | [diff] [blame] | 7 | GREP_PATTERN_HEAD, |
| 8 | GREP_PATTERN_BODY, |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 9 | GREP_AND, |
| 10 | GREP_OPEN_PAREN, |
| 11 | GREP_CLOSE_PAREN, |
| 12 | GREP_NOT, |
| 13 | GREP_OR, |
| 14 | }; |
| 15 | |
Junio C Hamano | 480c1ca | 2006-09-20 12:39:46 -0700 | [diff] [blame] | 16 | enum grep_context { |
| 17 | GREP_CONTEXT_HEAD, |
| 18 | GREP_CONTEXT_BODY, |
| 19 | }; |
| 20 | |
Junio C Hamano | a4d7d2c | 2008-09-04 22:15:02 -0700 | [diff] [blame] | 21 | enum grep_header_field { |
| 22 | GREP_HEADER_AUTHOR = 0, |
| 23 | GREP_HEADER_COMMITTER, |
| 24 | }; |
| 25 | |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 26 | struct grep_pat { |
| 27 | struct grep_pat *next; |
| 28 | const char *origin; |
| 29 | int no; |
| 30 | enum grep_pat_token token; |
| 31 | const char *pattern; |
Junio C Hamano | a4d7d2c | 2008-09-04 22:15:02 -0700 | [diff] [blame] | 32 | enum grep_header_field field; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 33 | regex_t regexp; |
René Scharfe | c822255 | 2009-01-10 00:18:34 +0100 | [diff] [blame] | 34 | unsigned fixed:1; |
René Scharfe | d7eb527 | 2009-03-07 13:28:40 +0100 | [diff] [blame] | 35 | unsigned word_regexp:1; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 36 | }; |
| 37 | |
| 38 | enum grep_expr_node { |
| 39 | GREP_NODE_ATOM, |
| 40 | GREP_NODE_NOT, |
| 41 | GREP_NODE_AND, |
| 42 | GREP_NODE_OR, |
| 43 | }; |
| 44 | |
| 45 | struct grep_expr { |
| 46 | enum grep_expr_node node; |
Junio C Hamano | 0ab7bef | 2006-09-27 17:50:52 -0700 | [diff] [blame] | 47 | unsigned hit; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 48 | union { |
| 49 | struct grep_pat *atom; |
| 50 | struct grep_expr *unary; |
| 51 | struct { |
| 52 | struct grep_expr *left; |
| 53 | struct grep_expr *right; |
| 54 | } binary; |
| 55 | } u; |
| 56 | }; |
| 57 | |
| 58 | struct grep_opt { |
| 59 | struct grep_pat *pattern_list; |
| 60 | struct grep_pat **pattern_tail; |
| 61 | struct grep_expr *pattern_expression; |
Clemens Buchacher | 493b7a0 | 2009-09-05 14:31:17 +0200 | [diff] [blame] | 62 | const char *prefix; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 63 | int prefix_length; |
| 64 | regex_t regexp; |
René Scharfe | 3e230fa | 2009-05-07 21:46:48 +0200 | [diff] [blame] | 65 | int linenum; |
| 66 | int invert; |
| 67 | int status_only; |
| 68 | int name_only; |
| 69 | int unmatch_name_only; |
| 70 | int count; |
| 71 | int word_regexp; |
| 72 | int fixed; |
| 73 | int all_match; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 74 | #define GREP_BINARY_DEFAULT 0 |
| 75 | #define GREP_BINARY_NOMATCH 1 |
| 76 | #define GREP_BINARY_TEXT 2 |
René Scharfe | 3e230fa | 2009-05-07 21:46:48 +0200 | [diff] [blame] | 77 | int binary; |
| 78 | int extended; |
| 79 | int relative; |
| 80 | int pathname; |
| 81 | int null_following_name; |
René Scharfe | 7e8f59d | 2009-03-07 13:32:32 +0100 | [diff] [blame] | 82 | int color; |
Michał Kiedrowicz | a91f453 | 2009-07-22 19:52:15 +0200 | [diff] [blame] | 83 | int max_depth; |
René Scharfe | 2944e4e | 2009-07-02 00:06:34 +0200 | [diff] [blame] | 84 | int funcname; |
René Scharfe | 7e8f59d | 2009-03-07 13:32:32 +0100 | [diff] [blame] | 85 | char color_match[COLOR_MAXLEN]; |
René Scharfe | a94982e | 2009-03-07 13:34:46 +0100 | [diff] [blame] | 86 | const char *color_external; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 87 | int regflags; |
| 88 | unsigned pre_context; |
| 89 | unsigned post_context; |
René Scharfe | 5dd06d3 | 2009-07-02 00:02:38 +0200 | [diff] [blame] | 90 | unsigned last_shown; |
René Scharfe | 046802d | 2009-07-02 00:03:44 +0200 | [diff] [blame] | 91 | int show_hunk_mark; |
René Scharfe | 60ecac9 | 2009-07-02 00:07:24 +0200 | [diff] [blame] | 92 | void *priv; |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 93 | }; |
| 94 | |
| 95 | extern void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *origin, int no, enum grep_pat_token t); |
Junio C Hamano | a4d7d2c | 2008-09-04 22:15:02 -0700 | [diff] [blame] | 96 | extern void append_header_grep_pattern(struct grep_opt *, enum grep_header_field, const char *); |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 97 | extern void compile_grep_patterns(struct grep_opt *opt); |
Junio C Hamano | b48fb5b | 2006-09-27 16:27:10 -0700 | [diff] [blame] | 98 | extern void free_grep_patterns(struct grep_opt *opt); |
Junio C Hamano | 83b5d2f | 2006-09-17 16:02:52 -0700 | [diff] [blame] | 99 | extern int grep_buffer(struct grep_opt *opt, const char *name, char *buf, unsigned long size); |
| 100 | |
| 101 | #endif |