#ifndef USERDIFF_H
#define USERDIFF_H

#include "notes-cache.h"

struct index_state;
struct repository;

struct userdiff_funcname {
	const char *pattern;
	int cflags;
};

struct userdiff_driver {
	const char *name;
	const char *external;
	const char *algorithm;
	int binary;
	struct userdiff_funcname funcname;
	const char *word_regex;
	const char *word_regex_multi_byte;
	const char *textconv;
	struct notes_cache *textconv_cache;
	int textconv_want_cache;
};
enum userdiff_driver_type {
	USERDIFF_DRIVER_TYPE_BUILTIN = 1<<0,
	USERDIFF_DRIVER_TYPE_CUSTOM = 1<<1,
};
typedef int (*each_userdiff_driver_fn)(struct userdiff_driver *,
				       enum userdiff_driver_type, void *);

int userdiff_config(const char *k, const char *v);
struct userdiff_driver *userdiff_find_by_name(const char *name);
struct userdiff_driver *userdiff_find_by_path(struct index_state *istate,
					      const char *path);

/*
 * Initialize any textconv-related fields in the driver and return it, or NULL
 * if it does not have textconv enabled at all.
 */
struct userdiff_driver *userdiff_get_textconv(struct repository *r,
					      struct userdiff_driver *driver);

/*
 * Iterate over all userdiff drivers. The userdiff_driver_type
 * argument to each_userdiff_driver_fn indicates their type. Return
 * non-zero to exit early from the loop.
 */
int for_each_userdiff_driver(each_userdiff_driver_fn, void *);

#endif /* USERDIFF */
