blob: aee91bc77e6d592021d8597da7fce0123c779a32 [file] [log] [blame]
Jeff Kingbe58e702008-10-05 17:43:21 -04001#ifndef USERDIFF_H
2#define USERDIFF_H
3
Jeff Kingd9bae1a2010-04-01 20:12:15 -04004#include "notes-cache.h"
5
Nguyễn Thái Ngọc Duyacd00ea2018-09-21 17:57:33 +02006struct index_state;
Nguyễn Thái Ngọc Duybd7ad452018-11-10 06:49:06 +01007struct repository;
Nguyễn Thái Ngọc Duyacd00ea2018-09-21 17:57:33 +02008
Jeff Kingbe58e702008-10-05 17:43:21 -04009struct userdiff_funcname {
10 const char *pattern;
11 int cflags;
12};
13
14struct userdiff_driver {
15 const char *name;
16 const char *external;
Jeff King122aa6f2008-10-05 17:43:36 -040017 int binary;
Jeff Kingbe58e702008-10-05 17:43:21 -040018 struct userdiff_funcname funcname;
Thomas Rast80c49c32009-01-17 17:29:48 +010019 const char *word_regex;
Jeff King9cb92c32008-10-05 17:43:45 -040020 const char *textconv;
Jeff Kingd9bae1a2010-04-01 20:12:15 -040021 struct notes_cache *textconv_cache;
22 int textconv_want_cache;
Jeff Kingbe58e702008-10-05 17:43:21 -040023};
Ævar Arnfjörð Bjarmasonf12fa9e2021-04-08 17:04:19 +020024enum userdiff_driver_type {
25 USERDIFF_DRIVER_TYPE_BUILTIN = 1<<0,
26 USERDIFF_DRIVER_TYPE_CUSTOM = 1<<1,
27};
28typedef int (*each_userdiff_driver_fn)(struct userdiff_driver *,
29 enum userdiff_driver_type, void *);
Jeff Kingbe58e702008-10-05 17:43:21 -040030
Jeff Kingc7534ef2008-10-26 00:45:55 -040031int userdiff_config(const char *k, const char *v);
Jeff Kingbe58e702008-10-05 17:43:21 -040032struct userdiff_driver *userdiff_find_by_name(const char *name);
Nguyễn Thái Ngọc Duyacd00ea2018-09-21 17:57:33 +020033struct userdiff_driver *userdiff_find_by_path(struct index_state *istate,
34 const char *path);
Jeff Kingbe58e702008-10-05 17:43:21 -040035
Jeff Kinga64e6a42016-02-22 13:28:54 -050036/*
37 * Initialize any textconv-related fields in the driver and return it, or NULL
38 * if it does not have textconv enabled at all.
39 */
Nguyễn Thái Ngọc Duybd7ad452018-11-10 06:49:06 +010040struct userdiff_driver *userdiff_get_textconv(struct repository *r,
41 struct userdiff_driver *driver);
Jeff King3813e692011-05-23 16:30:14 -040042
Ævar Arnfjörð Bjarmasonf12fa9e2021-04-08 17:04:19 +020043/*
44 * Iterate over all userdiff drivers. The userdiff_driver_type
45 * argument to each_userdiff_driver_fn indicates their type. Return
46 * non-zero to exit early from the loop.
47 */
48int for_each_userdiff_driver(each_userdiff_driver_fn, void *);
49
Jeff Kingbe58e702008-10-05 17:43:21 -040050#endif /* USERDIFF */