From 0b7a3c0c25a0ff85f83c4b6c7ae03b75d87b702c Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 19 Feb 2021 21:30:07 -0500 Subject: Fix (hopefully) matching shell reserved words To not conflict with matching closing command substitution parentheses on their own lines. --- bin/sh.l | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bin/sh.l b/bin/sh.l index 4579adbe..9fc241da 100644 --- a/bin/sh.l +++ b/bin/sh.l @@ -19,6 +19,7 @@ %{ #include +#include #include #include "hilex.h" @@ -35,7 +36,6 @@ static int pop(void) { } %} -%s First %s Param Command Arith Backtick %x DQuote HereDocDel HereDoc HereDocLit @@ -44,13 +44,14 @@ param [^:=?+%#{}-]+ reserved [!{}]|else|do|elif|for|done|fi|then|until|while|if|case|esac %% + static bool first; static char *delimiter; [[:blank:]]+ { return Normal; } "\\". { return Escape; } -{ +{ "$"[*@#?$!0-9-] | "$"[_[:alpha:][_[:alnum:]]* | "${"[#]?{param}"}" { @@ -82,27 +83,23 @@ reserved [!{}]|else|do|elif|for|done|fi|then|until|while|if|case|esac } "\n" { - BEGIN(push(First)); + first = true; return Normal; } [&();|]|"&&"|";;"|"||" { - BEGIN(push(First)); + first = true; return Operator; } [0-9]?([<>]"&"?|">|"|">>"|"<>") { return Operator; } -{ - [[:blank:]]+ { return Normal; } - {reserved} { - BEGIN(pop()); +{reserved} { + if (first) { + first = false; return Keyword; } - {word} { - BEGIN(pop()); - return Normal; - } + return Normal; } {word}/[[:blank:]]*"()" { return Ident; } @@ -162,9 +159,12 @@ reserved [!{}]|else|do|elif|for|done|fi|then|until|while|if|case|esac [^\\$`""]+|. { return String; } } -"#".* { return Comment; } +"#".* { return Comment; } -{word} { return Normal; } +{word} { + first = false; + return Normal; +} .|\n { return Normal; } -- cgit 1.4.1 option value='committer'>committer
Commit message (Collapse)Author
2020-02-12Add /listJune McEnroe
2020-02-12Simplify transpose swapJune McEnroe
2020-02-12Add C-t transposeJune McEnroe
Also in emacs, weechat.
2020-02-12Add C-v and M-vJune McEnroe
I figure there should be some way to scroll without keypad, and apparently this is what emacs offers...
2020-02-12Allow for arguments to open/copy utilitiesJune McEnroe
2020-02-12Handle RPL_AWAYJune McEnroe
2020-02-11Support monochromatic terminalsJune McEnroe
Oops, division by zero!
2020-02-11Add .gz to chroot-man scriptJune McEnroe
2020-02-11Add -R restricted flagJune McEnroe
2020-02-11Add chroot targetJune McEnroe
2020-02-11Exit focus and paste modes on err exitJune McEnroe
2020-02-11Add startup GPLv3 note and URLJune McEnroe
I am a degenerate.
2020-02-11Make sure -D_GNU_SOURCE ends up in CFLAGS on LinuxJune McEnroe
2020-02-11Add note about setting PKG_CONFIG_PATHJune McEnroe
2020-02-11Rename query ID on nick changeJune McEnroe
2020-02-11Call completeClear when closing a windowJune McEnroe
2020-02-11Don't insert color codes for non-mentionsJune McEnroe
2020-02-11Take first two words in colorMentionsJune McEnroe
This lets phrases like "hi june" get colored, but still doesn't get carried away.
2020-02-11Use time_t for save signatureJune McEnroe
It's actually more likely to be 64-bit than size_t anyway, and it eliminates some helper functions. Also don't error when reading an empty save file.
2020-02-11Set self.nick to * initiallyJune McEnroe
Allows removing a bunch of checks that self.nick is set, and it's what the server usually calls you before registration. Never highlight notices as mentions.
2020-02-11Define ColorCap instead of hardcoding 100June McEnroe
2020-02-11Move hash to top of chat.hJune McEnroe
2020-02-11Move base64 out of chat.hJune McEnroe
2020-02-11Move XDG_SUBDIR out of chat.hJune McEnroe
2020-02-11Fix whois idle unit calculationJune McEnroe
Rookie mistake.
2020-02-11Cast towupper to wchar_tJune McEnroe
For some reason it takes and returns wint_t...
2020-02-11Cast set but unused variables to voidJune McEnroe
2020-02-11Declare strlcatJune McEnroe
2020-02-11Check if VDSUSP existsJune McEnroe
2020-02-11Fix completeReplace iterationJune McEnroe
2020-02-11Use pkg(8) to configure on FreeBSDJune McEnroe
2020-02-11Remove legacy codeJune McEnroe
2020-02-11Add INSTALLING section to READMEJune McEnroe