8 /* mapping filetypes to regular expression sets */
14 static struct rset
*syn_ftrs
;
16 static struct rset
*syn_find(char *ft
)
19 for (i
= 0; i
< LEN(ftmap
); i
++)
20 if (!strcmp(ft
, ftmap
[i
].ft
))
25 int *syn_highlight(char *ft
, char *s
)
29 int *att
= malloc(n
* sizeof(att
[0]));
31 struct rset
*rs
= syn_find(ft
);
34 memset(att
, 0, n
* sizeof(att
[0]));
37 while ((hl
= rset_find(rs
, s
+ sidx
, LEN(subs
) / 2, subs
, flg
)) >= 0) {
40 conf_highlight(hl
, NULL
, &catt
, &cgrp
, NULL
);
41 beg
= uc_off(s
, sidx
+ subs
[cgrp
* 2 + 0]);
42 end
= uc_off(s
, sidx
+ subs
[cgrp
* 2 + 1]);
43 for (j
= beg
; j
< end
; j
++)
45 sidx
+= subs
[cgrp
* 2 + 1] ? subs
[cgrp
* 2 + 1] : 1;
51 static void syn_initft(char *name
)
53 char *pats
[128] = {NULL
};
56 for (i
= 0; !conf_highlight(i
, &ft
, NULL
, NULL
, &pat
) && i
< LEN(pats
); i
++)
57 if (!strcmp(ft
, name
))
60 for (i
= 0; i
< LEN(ftmap
); i
++) {
61 if (!ftmap
[i
].ft
[0]) {
62 strcpy(ftmap
[i
].ft
, name
);
63 ftmap
[i
].rs
= rset_make(n
, pats
, 0);
69 char *syn_filetype(char *path
)
71 int hl
= rset_find(syn_ftrs
, path
, 0, NULL
, 0);
73 if (!conf_filetype(hl
, &ft
, NULL
))
80 char *pats
[128] = {NULL
};
83 for (i
= 0; !conf_highlight(i
, &ft
, NULL
, NULL
, NULL
); i
++)
86 for (i
= 0; !conf_filetype(i
, NULL
, &pat
) && i
< LEN(pats
); i
++)
88 syn_ftrs
= rset_make(i
, pats
, 0);
94 for (i
= 0; i
< LEN(ftmap
); i
++)
96 rset_free(ftmap
[i
].rs
);