summary refs log tree commit diff
path: root/bin/hilex/c.l
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--bin/hilex/c.l85
1 files changed, 42 insertions, 43 deletions
diff --git a/bin/hilex/c.l b/bin/hilex/c.l
index 985ff513..8c4a8ca1 100644
--- a/bin/hilex/c.l
+++ b/bin/hilex/c.l
@@ -30,45 +30,15 @@ width "*"|[0-9]+
 
 %%
 	static int pop = INITIAL;
-	static int braces = 0;
+	static int depth = 0;
 
 [[:blank:]]+ { return Normal; }
 
-^"#"[[:blank:]]*("include"|"import") {
-	BEGIN(pop = MacroInclude);
-	return Macro;
-}
-^"#"[[:blank:]]*"define" {
-	BEGIN(pop = MacroDefine);
-	return Macro;
-}
-^[#%][[:blank:]]*{ident} |
-^"%"[%{}] {
+^"%"[%{}]? {
 	BEGIN(pop = MacroLine);
 	return Macro;
 }
 
-<MacroInclude>"<"[^>]+">" { return String; }
-
-<MacroDefine>{
-	{ident}/"(" {
-		BEGIN(pop = MacroLine);
-		return IdentifierTag;
-	}
-	{ident} {
-		BEGIN(pop = MacroLine);
-		return Macro;
-	}
-}
-
-<MacroLine,MacroInclude,MacroDefine>{
-	"\n" {
-		BEGIN(pop = INITIAL);
-		return Normal;
-	}
-	"\\\n" { return Macro; }
-}
-
 ([-+*/%&|^=!<>]|"<<"|">>")"="? |
 [=~.?:]|"++"|"--"|"&&"|"||"|"->" |
 sizeof|(_A|alignof) {
@@ -101,12 +71,45 @@ register|restrict|return|static|struct|switch|typedef|union|volatile|while |
 	return Keyword;
 }
 
-<MacroLine>{ident} { return Macro; }
+^"#"[[:blank:]]*(include|import) {
+	BEGIN(pop = MacroInclude);
+	return Macro;
+}
+^"#"[[:blank:]]*define {
+	BEGIN(pop = MacroDefine);
+	return Macro;
+}
+^"#"[[:blank:]]*{ident} {
+	BEGIN(pop = MacroLine);
+	return Macro;
+}
+
+<MacroInclude>"<"[^>]+">" {
+	return String;
+}
+<MacroDefine>{ident}/"(" {
+	BEGIN(pop = MacroLine);
+	return IdentifierTag;
+}
+<MacroDefine>{ident} {
+	BEGIN(pop = MacroLine);
+	return Macro;
+}
+
+<MacroLine,MacroInclude,MacroDefine>{
+	"\n" {
+		BEGIN(pop = INITIAL);
+		return Normal;
+	}
+	"\\\n" { return Macro; }
+	{ident} { return Macro; }
+}
+
 {ident} { return Identifier; }
 
 {ident}/("["[^]]*"]")*[[:space:]]*"=" |
 {ident}/"("[^)]*")"[[:space:]]*"{" {
-	return (!braces ? IdentifierTag : Identifier);
+	return (!depth ? IdentifierTag : Identifier);
 }
 
 "//"([^\n]|"\\\n")* |
@@ -154,16 +157,12 @@ register|restrict|return|static|struct|switch|typedef|union|volatile|while |
 	[^%\\""]+|. { return String; }
 }
 
-"{" {
-	braces++;
-	REJECT;
-}
-"}" {
-	braces--;
-	REJECT;
-}
+"{" { depth++; REJECT; }
+"}" { depth--; REJECT; }
 
-<MacroLine,MacroInclude,MacroDefine>. { return Macro; }
+<MacroLine,MacroInclude,MacroDefine>. {
+	return Macro;
+}
 
 .|\n { return Normal; }
 
Move hilex out of hilex directoryJune McEnroe 2021-01-12Consolidate hilex formatters into hilex.cJune McEnroe 2021-01-12Remove hacky tagging from hilexJune McEnroe God that makes the lexers so much simpler. 2021-01-12Add htagml -iJune McEnroe 2021-01-12Render tag index in HTMLJune McEnroe 2021-01-12Add htagml -xJune McEnroe 2021-01-12Prevent matching the same tag twiceJune McEnroe 2021-01-12Process htagml file line by lineJune McEnroe This simplifies some things, adds support for line number tag definitions, and should enable combining htagml with other preprocessors in the future. 2021-01-12Split fields by tab onlyJune McEnroe Also don't fail hard on non-forward-search definitions. 2021-01-12List both Makefile and html.sh under README.7June McEnroe 2021-01-12Add htagml exampleJune McEnroe 2021-01-12Use mandoc and htagml for bin htmlJune McEnroe 2021-01-12Add htagmlJune McEnroe 2021-01-12Replace causal.agency with a simple mdoc pageJune McEnroe 2021-01-11Publish "Using vi"June McEnroe 2021-01-11Enable diff.colorMovedJune McEnroe 2021-01-10Set less search case-insensitiveJune McEnroe 2021-01-10Set EXINITJune McEnroe neovim is laggy as hell in my OpenBSD VM, so I switched to vi so I could type without getting frustrated. 2021-01-09Add c -t flag to print expression typeJune McEnroe Also add missing float case. 2021-01-05Update taglineJune McEnroe