summary refs log tree commit diff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rw-r--r--bin/sh.l28
1 files changed, 14 insertions, 14 deletions
diff --git a/bin/sh.l b/bin/sh.l
index fcd5ce35..b27ecebc 100644
--- a/bin/sh.l
+++ b/bin/sh.l
@@ -19,6 +19,7 @@
 
 %{
 #include <assert.h>
+#include <stdbool.h>
 #include <string.h>
 #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; }
 
-<INITIAL,First,DQuote,HereDoc,Param,Command,Arith>{
+<INITIAL,DQuote,HereDoc,Param,Command,Arith>{
 	"$"[*@#?$!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;
 }
 
-<First>{
-	[[: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; }
 }
 
-<INITIAL,First,Command,Backtick,Arith>"#".* { return Comment; }
+<INITIAL,Command,Backtick,Arith>"#".* { return Comment; }
 
-{word} { return Normal; }
+{word} {
+	first = false;
+	return Normal;
+}
 
 .|\n { return Normal; }
 
d=f44201c95df419abe1ab18ff92b7466c51637c76&follow=1'>Remove typer, add downgrade to READMEJune McEnroe 2021-09-15Set bot mode on downgradeJune McEnroe 2021-09-15Enter capsicum in downgradeJune McEnroe 2021-09-15Factor out common parts of downgrade messagesJune McEnroe Also bump the message cap to 1024 because that is ostensibly useful for replying to older messages. 2021-09-14Add downgrade IRC botJune McEnroe 2021-09-14Sort by title if authors matchJune McEnroe There are probably better things to sort by but title definitely always exists. 2021-09-13Swap-remove tags as they're foundJune McEnroe This makes it even faster. From ~1s on a sqlite3.c amalgamation to ~0.85s. 2021-09-12Replace htagml regex with strncmpJune McEnroe Since ctags only ever produces regular expressions of the form /^re$/ or /^re/ with no other special characters, instead unescape the pattern and simply use strncmp. Running on a sqlite3.c amalgamation, the regex version takes ~37s while the strncmp version takes ~1s, producing identical output. Big win! 2021-09-11Also defer printing comment for lone close-parensJune McEnroe 2021-09-10Publish "git-comment"June McEnroe 2021-09-10Add git comment --pretty optionJune McEnroe 2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe This fixes badly indented comments. 2021-09-08Up default min-repeat to 30 linesJune McEnroe 2021-09-08Handle dirty lines in git-commentJune McEnroe 2021-09-08Document and install git-commentJune McEnroe 2021-09-08Add repeat and all options to git-commentJune McEnroe 2021-09-08Add group threshold to git-commentJune McEnroe