2525 * following names, separated by commas (but no spaces!).
2626 */
2727static char * (hl_name_table []) =
28- {"bold" , "standout" , "underline" , "undercurl" ,
29- "italic" , "reverse" , "inverse" , "nocombine" , "strikethrough" , "NONE" };
28+ {"bold" , "standout" , "underline" ,
29+ "undercurl" , "underdouble" , "underdotted" , "underdashed" ,
30+ "italic" , "reverse" , "inverse" , "nocombine" , "strikethrough" , "NONE" };
3031static int hl_attr_table [] =
31- {HL_BOLD , HL_STANDOUT , HL_UNDERLINE , HL_UNDERCURL , HL_ITALIC , HL_INVERSE , HL_INVERSE , HL_NOCOMBINE , HL_STRIKETHROUGH , 0 };
32+ {HL_BOLD , HL_STANDOUT , HL_UNDERLINE ,
33+ HL_UNDERCURL , HL_UNDERDOUBLE , HL_UNDERDOTTED , HL_UNDERDASHED ,
34+ HL_ITALIC , HL_INVERSE , HL_INVERSE , HL_NOCOMBINE , HL_STRIKETHROUGH , 0 };
35+ // length of all attribute names, plus commas, together (and a bit more)
36+ #define MAX_ATTR_LEN 120
37+
3238#define ATTR_COMBINE (attr_a , attr_b ) ((((attr_b) & HL_NOCOMBINE) ? (attr_b) : (attr_a)) | (attr_b))
3339
3440/*
@@ -2963,7 +2969,7 @@ highlight_list_arg(
29632969 char_u * sarg ,
29642970 char * name )
29652971{
2966- char_u buf [100 ];
2972+ char_u buf [MAX_ATTR_LEN ];
29672973 char_u * ts ;
29682974 int i ;
29692975
@@ -2984,8 +2990,8 @@ highlight_list_arg(
29842990 if (iarg & hl_attr_table [i ])
29852991 {
29862992 if (buf [0 ] != NUL )
2987- vim_strcat (buf , (char_u * )"," , 100 );
2988- vim_strcat (buf , (char_u * )hl_name_table [i ], 100 );
2993+ vim_strcat (buf , (char_u * )"," , MAX_ATTR_LEN );
2994+ vim_strcat (buf , (char_u * )hl_name_table [i ], MAX_ATTR_LEN );
29892995 iarg &= ~hl_attr_table [i ]; // don't want "inverse"
29902996 }
29912997 }
@@ -3287,7 +3293,8 @@ set_hl_attr(
32873293 at_en .ae_u .cterm .bg_rgb = GUI_MCH_GET_RGB2 (sgp -> sg_gui_bg );
32883294 // Only use the underline/undercurl color when used, it may clear the
32893295 // background color if not supported.
3290- if (sgp -> sg_cterm & (HL_UNDERLINE | HL_UNDERCURL ))
3296+ if (sgp -> sg_cterm & (HL_UNDERLINE | HL_UNDERCURL
3297+ | HL_UNDERDOUBLE | HL_UNDERDOTTED | HL_UNDERDASHED ))
32913298 at_en .ae_u .cterm .ul_rgb = GUI_MCH_GET_RGB2 (sgp -> sg_gui_sp );
32923299 else
32933300 at_en .ae_u .cterm .ul_rgb = INVALCOLOR ;
@@ -3801,6 +3808,12 @@ highlight_changed(void)
38013808 break ;
38023809 case 'c' : attr |= HL_UNDERCURL ;
38033810 break ;
3811+ case '2' : attr |= HL_UNDERDOUBLE ;
3812+ break ;
3813+ case 'd' : attr |= HL_UNDERDOTTED ;
3814+ break ;
3815+ case '=' : attr |= HL_UNDERDASHED ;
3816+ break ;
38043817 case 't' : attr |= HL_STRIKETHROUGH ;
38053818 break ;
38063819 case ':' : ++ p ; // highlight group name
@@ -4362,9 +4375,9 @@ hlg_add_or_update(dict_T *dict)
43624375{
43634376 char_u * name ;
43644377 int error ;
4365- char_u term_attr [80 ];
4366- char_u cterm_attr [80 ];
4367- char_u gui_attr [80 ];
4378+ char_u term_attr [MAX_ATTR_LEN ];
4379+ char_u cterm_attr [MAX_ATTR_LEN ];
4380+ char_u gui_attr [MAX_ATTR_LEN ];
43684381 char_u * start ;
43694382 char_u * stop ;
43704383 char_u * ctermfg ;
0 commit comments