Browse code

Fix: matching parenthesis was wrong when passing over a '(' or ')'; now they are treated as in strings. Also: small clean-ups in re_plugin_highlighter.c

Dario Rodriguez authored on 25/09/2023 14:37:58
Showing 1 changed files
... ...
@@ -171,7 +171,6 @@ redata_highlighter_getcolorindex(redata_t *redata, int line, int nthbyte)
171 171
 static void
172 172
 redata_highlighter_util_applytheme(int *template3,hcolor_t *color,int invert)
173 173
 {
174
-        unsigned char c[3];
175 174
         if(template3==NULL || color==NULL || template3[0]<0 || template3[0]>2 || template3[1]<0 || template3[1]>2 || template3[2]<0 || template3[2]>2)
176 175
                 return; /* sanity check error */
177 176
         if(invert==0) {
... ...
@@ -200,7 +199,7 @@ redata_highlighter_settheme(redata_t *redata, int ntheme, int invert)
200 199
                 return(-1);
201 200
         for(i=0;i<ncolors;i++)
202 201
                 redata_highlighter_util_applytheme(permutationtemplate,colors+i,invert);
203
-        return;
202
+        return(0);
204 203
 }
205 204
 
206 205
 static int
... ...
@@ -354,6 +353,7 @@ hl_doline(redata_t *redata, highlighter_t *hl, int nline)
354 353
                 mode_in_linecomment,
355 354
                 mode_in_directive,
356 355
                 mode_in_string,
356
+                mode_in_singlestring,
357 357
                 mode_in_directivestring,
358 358
         } mode,mlcprevmode;
359 359
         if(redata==NULL || hl==NULL || nline<0)
... ...
@@ -471,6 +471,11 @@ hl_doline(redata_t *redata, highlighter_t *hl, int nline)
471 471
                                         linecolor=hl_addtolinecolor(&opaque,hl,linecolor,posoffset+i,color_string);
472 472
                                         continue;
473 473
                                 }
474
+                                if(ptr[i]=='\'') {
475
+                                        mode=mode_in_singlestring;
476
+                                        linecolor=hl_addtolinecolor(&opaque,hl,linecolor,posoffset+i,color_string);
477
+                                        continue;
478
+                                }
474 479
                                 if(!cant_define && ptr[i]=='#') {
475 480
                                         mode=mode_in_directive;
476 481
                                         is_directiveinclude=0;
... ...
@@ -592,11 +597,12 @@ hl_doline(redata_t *redata, highlighter_t *hl, int nline)
592 597
                                 linecolor=hl_addtolinecolor(&opaque,hl,linecolor,posoffset+i,(is_directiveinclude==0)?color_directivestring:color_directiveincludestring);
593 598
                                 continue;
594 599
                         }
595
-                        if(mode==mode_in_string) {
600
+                        if(mode==mode_in_string || mode_in_singlestring) {
596 601
                                 if(prev_char=='\\' || ptr[i]=='\\') {
597 602
                                         continue;
598 603
                                 }
599
-                                if(ptr[i]=='\"') {
604
+                                if((mode==mode_in_string && ptr[i]=='\"')
605
+                                  || (mode==mode_in_singlestring && ptr[i]=='\'')) {
600 606
                                         mode=mode_whatever;
601 607
                                         linecolor=hl_addtolinecolor(&opaque,hl,linecolor,posoffset+i,color_string);
602 608
                                         continue;