On Sun, Jan 30, 2022 at 03:45:15PM -0500, Thomas Dickey wrote: > On Sat, Jan 29, 2022 at 04:09:09PM -0500, Thomas Dickey wrote: > > On Sat, Jan 29, 2022 at 07:51:53PM +0000, Wayne Cuddy via discussions > > concerning the vile text editor wrote: > > > I'm not sure if this has been reported before, please forgive me if > > > this is repetitious. > > > > > > I'm running 9.8t and have not had a chance to upgrade to the > > > latest/greatest yet but I don't see mention of this issue being > > > corrected in the changelog. The closest I could find was comments from > > > 9.7y: > > > > > > + improve vile-sh-filt for these cases: > > > + "${number}" > > > + "$(commands)" > > > + "$((expression))" > > > + "${name#value}", etc. > > > > > > > > > The issue concerns $((expression)) expansions in variable assignments, > > > but may not be limited to just this case. > > > > > > var="prefix$((5*5))suffix" > > ^ string > > ^expression > > ^ string? > > > > > > prefix appears correctly highlighted, suffix does not, it seems the > > > syntax highlighting terminates after the final ')' character. > > > > Just looking at the source, the line > > > > <EXPRS>{BACKTIC2_UP} { handle_backtic2(yytext, yyleng, > > LEN_BACKTIC2_DOWN, 0); } > > > > is probably what should trigger on the "))", which takes it into > > > > if (FLTSTACK_OK && (which <= 0) && (FLTSTACK_THIS.backtic == test)) { > > > > and fails there for some reason -- otherwise it would go back to the > > string/literal coloring. > > > > (I'm in the middle of ncurses, but may dig into it tomorrow to get a better > > answer). > > See attached > > -- > Thomas E. Dickey <dic...@invisible-island.net> > https://invisible-island.net > ftp://ftp.invisible-island.net
> --- sh-filt.l 2021/12/12 01:26:53 1.183 > +++ sh-filt.l 2022/01/30 20:27:01 > @@ -70,6 +70,7 @@ > static void handle_backtic2(const char *text, int length, int test, int > which); > static void handle_backtic1(const char *text, int length, int test, int > which); > static void handle_parens(const char *text, int length, int test, int which, > int state); > +static void resume_state(void); > static void save_here(const char *text, int length); > static void write_vname(const char *text, int length); > > @@ -198,8 +199,10 @@ > FLEX_PRINTF((stderr, "cannot pop '$((' level %d\n", > stk_level)); > if (!pop_backtic1(yytext, 1, LEN_BACKTIC1_DOWN)) { > FLEX_PRINTF((stderr, "cannot pop '$(' level > %d\n", stk_level)); > - if (FLTSTACK_OK && stk_state[stk_level-1].state > == NORMAL) > + if (FLTSTACK_OK && stk_state[stk_level-1].state > == NORMAL) { > pop_state(); > + resume_state(); > + } > flt_putc(R_PAREN); > } > unput(R_PAREN); > @@ -213,8 +216,10 @@ > } > <NORMAL>{BACKTIC1_UP} { if (!pop_backtic1(yytext, yyleng, > LEN_BACKTIC1_DOWN)) { > FLEX_PRINTF((stderr, "cannot pop '$(' level %d\n", > stk_level)); > - if (FLTSTACK_OK && stk_state[stk_level-1].state == > NORMAL) > + if (FLTSTACK_OK && stk_state[stk_level-1].state == > NORMAL) { > pop_state(); > + resume_state(); > + } > ECHO; > } > } > @@ -293,6 +298,7 @@ > <KSH_MATH>"))" { > WriteToken(Action_attr); > pop_state(); > + resume_state(); > } > <KSH_MATH>{IDENT1} | > <KSH_MATH>{VNAME} { WriteToken(Ident_attr); } > @@ -312,6 +318,7 @@ > flt_bfr_append("'", 1); > flt_bfr_finish(); > pop_state(); > + resume_state(); > } > <KSH_CQUOTE>\\[0-7]{1,3} { > flt_bfr_embed(yytext, 1, Action_attr); > @@ -874,6 +881,7 @@ > flt_bfr_append(value + used, length - used); > flt_bfr_finish(); > pop_state(); > + resume_state(); > FreeAndNull(here_tag); > here_exp = 0; > here_next = 0; I'll make time to upgrade and test this patch later this week and post the results. Many thanks as usual, Wayne