14
14
{ name, NULL, -1, { pattern, REG_EXTENDED | REG_ICASE }, \
15
15
word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
16
16
static struct userdiff_driver builtin_drivers[] = {
18
"!^(.*[ \t])?(is new|renames|is separate)([ \t].*)?$\n"
19
"!^[ \t]*with[ \t].*$\n"
20
"^[ \t]*((procedure|function)[ \t]+.*)$\n"
21
"^[ \t]*((package|protected|task)[ \t]+.*)$",
23
"[a-zA-Z][a-zA-Z0-9_]*"
25
"|=>|\\.\\.|\\*\\*|:=|/=|>=|<=|<<|>>|<>"),
17
26
IPATTERN("fortran",
18
27
"!^([C*]|[ \t]*!)\n"
19
28
"!^[ \t]*MODULE[ \t]+PROCEDURE[ \t]\n"
178
static struct userdiff_driver *parse_driver(const char *var,
179
const char *value, const char *type)
181
struct userdiff_driver *drv;
186
if (prefixcmp(var, "diff."))
188
dot = strrchr(var, '.');
191
if (strcmp(type, dot+1))
195
namelen = dot - name;
196
drv = userdiff_find_by_namelen(name, namelen);
198
ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
199
drv = &drivers[ndrivers++];
200
memset(drv, 0, sizeof(*drv));
201
drv->name = xmemdupz(name, namelen);
207
187
static int parse_funcname(struct userdiff_funcname *f, const char *k,
208
188
const char *v, int cflags)
231
211
int userdiff_config(const char *k, const char *v)
233
213
struct userdiff_driver *drv;
235
if ((drv = parse_driver(k, v, "funcname")))
214
const char *name, *type;
217
if (parse_config_key(k, "diff", &name, &namelen, &type) || !name)
220
drv = userdiff_find_by_namelen(name, namelen);
222
ALLOC_GROW(drivers, ndrivers+1, drivers_alloc);
223
drv = &drivers[ndrivers++];
224
memset(drv, 0, sizeof(*drv));
225
drv->name = xmemdupz(name, namelen);
229
if (!strcmp(type, "funcname"))
236
230
return parse_funcname(&drv->funcname, k, v, 0);
237
if ((drv = parse_driver(k, v, "xfuncname")))
231
if (!strcmp(type, "xfuncname"))
238
232
return parse_funcname(&drv->funcname, k, v, REG_EXTENDED);
239
if ((drv = parse_driver(k, v, "binary")))
233
if (!strcmp(type, "binary"))
240
234
return parse_tristate(&drv->binary, k, v);
241
if ((drv = parse_driver(k, v, "command")))
235
if (!strcmp(type, "command"))
242
236
return git_config_string(&drv->external, k, v);
243
if ((drv = parse_driver(k, v, "textconv")))
237
if (!strcmp(type, "textconv"))
244
238
return git_config_string(&drv->textconv, k, v);
245
if ((drv = parse_driver(k, v, "cachetextconv")))
239
if (!strcmp(type, "cachetextconv"))
246
240
return parse_bool(&drv->textconv_want_cache, k, v);
247
if ((drv = parse_driver(k, v, "wordregex")))
241
if (!strcmp(type, "wordregex"))
248
242
return git_config_string(&drv->word_regex, k, v);