1 /*
2  * Copyright (C) the libgit2 contributors. All rights reserved.
3  *
4  * This file is part of libgit2, distributed under the GNU GPL v2 with
5  * a Linking Exception. For full terms see the included COPYING file.
6  */
7 #ifndef INCLUDE_diff_driver_h__
8 #define INCLUDE_diff_driver_h__
9 
10 #include "common.h"
11 
12 #include "attr_file.h"
13 #include "buffer.h"
14 
15 typedef struct git_diff_driver_registry git_diff_driver_registry;
16 
17 git_diff_driver_registry *git_diff_driver_registry_new(void);
18 void git_diff_driver_registry_free(git_diff_driver_registry *);
19 
20 typedef struct git_diff_driver git_diff_driver;
21 
22 int git_diff_driver_lookup(git_diff_driver **, git_repository *,
23 	git_attr_session *attrsession, const char *);
24 void git_diff_driver_free(git_diff_driver *);
25 
26 /* diff option flags to force off and on for this driver */
27 void git_diff_driver_update_options(uint32_t *option_flags, git_diff_driver *);
28 
29 /* returns -1 meaning "unknown", 0 meaning not binary, 1 meaning binary */
30 int git_diff_driver_content_is_binary(
31 	git_diff_driver *, const char *content, size_t content_len);
32 
33 typedef long (*git_diff_find_context_fn)(
34 	const char *, long, char *, long, void *);
35 
36 typedef int (*git_diff_find_context_line)(
37 	git_diff_driver *, git_buf *);
38 
39 typedef struct {
40 	git_diff_driver *driver;
41 	git_diff_find_context_line match_line;
42 	git_buf line;
43 } git_diff_find_context_payload;
44 
45 void git_diff_find_context_init(
46 	git_diff_find_context_fn *findfn_out,
47 	git_diff_find_context_payload *payload_out,
48 	git_diff_driver *driver);
49 
50 void git_diff_find_context_clear(git_diff_find_context_payload *);
51 
52 #endif
53