]> git.ipfire.org Git - thirdparty/git.git/blame - grep.h
Git 1.7.8-rc2
[thirdparty/git.git] / grep.h
CommitLineData
83b5d2f5
JH
1#ifndef GREP_H
2#define GREP_H
7e8f59d5 3#include "color.h"
63e7e9d8
MK
4#ifdef USE_LIBPCRE
5#include <pcre.h>
6#else
7typedef int pcre;
8typedef int pcre_extra;
9#endif
9eceddee 10#include "kwset.h"
83b5d2f5
JH
11
12enum grep_pat_token {
13 GREP_PATTERN,
480c1ca6
JH
14 GREP_PATTERN_HEAD,
15 GREP_PATTERN_BODY,
83b5d2f5
JH
16 GREP_AND,
17 GREP_OPEN_PAREN,
18 GREP_CLOSE_PAREN,
19 GREP_NOT,
4b05548f 20 GREP_OR
83b5d2f5
JH
21};
22
480c1ca6
JH
23enum grep_context {
24 GREP_CONTEXT_HEAD,
4b05548f 25 GREP_CONTEXT_BODY
480c1ca6
JH
26};
27
a4d7d2c6
JH
28enum grep_header_field {
29 GREP_HEADER_AUTHOR = 0,
4b05548f 30 GREP_HEADER_COMMITTER
a4d7d2c6 31};
5aaeb733 32#define GREP_HEADER_FIELD_MAX (GREP_HEADER_COMMITTER + 1)
a4d7d2c6 33
83b5d2f5
JH
34struct grep_pat {
35 struct grep_pat *next;
36 const char *origin;
37 int no;
38 enum grep_pat_token token;
39 const char *pattern;
ed40a095 40 size_t patternlen;
a4d7d2c6 41 enum grep_header_field field;
83b5d2f5 42 regex_t regexp;
63e7e9d8
MK
43 pcre *pcre_regexp;
44 pcre_extra *pcre_extra_info;
9eceddee 45 kwset_t kws;
c822255c 46 unsigned fixed:1;
5183bf67 47 unsigned ignore_case:1;
d7eb527d 48 unsigned word_regexp:1;
83b5d2f5
JH
49};
50
51enum grep_expr_node {
52 GREP_NODE_ATOM,
53 GREP_NODE_NOT,
54 GREP_NODE_AND,
5aaeb733 55 GREP_NODE_TRUE,
4b05548f 56 GREP_NODE_OR
83b5d2f5
JH
57};
58
59struct grep_expr {
60 enum grep_expr_node node;
0ab7befa 61 unsigned hit;
83b5d2f5
JH
62 union {
63 struct grep_pat *atom;
64 struct grep_expr *unary;
65 struct {
66 struct grep_expr *left;
67 struct grep_expr *right;
68 } binary;
69 } u;
70};
71
72struct grep_opt {
73 struct grep_pat *pattern_list;
74 struct grep_pat **pattern_tail;
80235ba7
JH
75 struct grep_pat *header_list;
76 struct grep_pat **header_tail;
83b5d2f5 77 struct grep_expr *pattern_expression;
493b7a08 78 const char *prefix;
83b5d2f5
JH
79 int prefix_length;
80 regex_t regexp;
3e230fa1
RS
81 int linenum;
82 int invert;
5183bf67 83 int ignore_case;
3e230fa1
RS
84 int status_only;
85 int name_only;
86 int unmatch_name_only;
87 int count;
88 int word_regexp;
89 int fixed;
90 int all_match;
83b5d2f5
JH
91#define GREP_BINARY_DEFAULT 0
92#define GREP_BINARY_NOMATCH 1
93#define GREP_BINARY_TEXT 2
3e230fa1
RS
94 int binary;
95 int extended;
63e7e9d8 96 int pcre;
3e230fa1
RS
97 int relative;
98 int pathname;
99 int null_following_name;
7e8f59d5 100 int color;
a91f453f 101 int max_depth;
2944e4e6 102 int funcname;
ba8ea749 103 int funcbody;
00588bb5 104 char color_context[COLOR_MAXLEN];
55f638bd 105 char color_filename[COLOR_MAXLEN];
00588bb5 106 char color_function[COLOR_MAXLEN];
55f638bd 107 char color_lineno[COLOR_MAXLEN];
7e8f59d5 108 char color_match[COLOR_MAXLEN];
00588bb5 109 char color_selected[COLOR_MAXLEN];
55f638bd 110 char color_sep[COLOR_MAXLEN];
83b5d2f5
JH
111 int regflags;
112 unsigned pre_context;
113 unsigned post_context;
5dd06d38 114 unsigned last_shown;
046802d0 115 int show_hunk_mark;
a8f0e764 116 int file_break;
1d84f72e 117 int heading;
60ecac98 118 void *priv;
5b594f45
FK
119
120 void (*output)(struct grep_opt *opt, const void *data, size_t size);
121 void *output_priv;
83b5d2f5
JH
122};
123
ed40a095 124extern void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
83b5d2f5 125extern void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *origin, int no, enum grep_pat_token t);
a4d7d2c6 126extern void append_header_grep_pattern(struct grep_opt *, enum grep_header_field, const char *);
83b5d2f5 127extern void compile_grep_patterns(struct grep_opt *opt);
b48fb5b6 128extern void free_grep_patterns(struct grep_opt *opt);
83b5d2f5
JH
129extern int grep_buffer(struct grep_opt *opt, const char *name, char *buf, unsigned long size);
130
5b594f45
FK
131extern struct grep_opt *grep_opt_dup(const struct grep_opt *opt);
132extern int grep_threads_ok(const struct grep_opt *opt);
133
83b5d2f5 134#endif