Summary Files Commits Branches @commit @diff @stats
path: root / awk-edits / Syntax-highlighting.awk
diff options
context:
space:
mode:
Commitd56a29ed6dffe6ba047ddbb8b36c909357b2a8a8 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-04-29 14:03:27 +0300
Committer
 Syndamia <kamen@syndamia.com>
2023-04-29 14:03:27 +0300
Files87462e7895f48ce72964b857c4f38b25b8c92573 /awk-edits/Syntax-highlighting.awk
syndamia.com-d56a29ed6dffe6ba047ddbb8b36c909357b2a8a8.tar
syndamia.com-d56a29ed6dffe6ba047ddbb8b36c909357b2a8a8.tar.gz
syndamia.com-d56a29ed6dffe6ba047ddbb8b36c909357b2a8a8.zip
Parent719ee10187ec83183fb24ed85470ab3ee4d9b32c (diff)
[Syntax-highlighting] Mostly implemented C and C++
1 files changed, 76 insertions, 25 deletions
-rw-r--r--awk-edits/Syntax-highlighting.awk101
diff --git a/awk-edits/Syntax-highlighting.awk b/awk-edits/Syntax-highlighting.awk
index 2cd63f3..35fd1f3 100644
--- a/awk-edits/Syntax-highlighting.awk
+++ b/awk-edits/Syntax-highlighting.awk
@@ -28,6 +28,14 @@ function hil(lbpat, pat, lrpat, class) {
}
#
+# -- Global --
+#
+
+syntaxhighlighting > 0 || /class="language-/ {
+ $0 = gesub(@/=/, "<[^>]*>", "\\&#61;");
+}
+
+#
# -- Grammars --
#
# Code in the form
@@ -107,24 +115,30 @@ syntaxhighlighting == 2 {
}
syntaxhighlighting == 3 {
- $0 = gesub(@/=/, "<[^>]*>", "\\&#61;");
- hi(@/("[^"]*"|'[^']*')/, "string");
+ $0 = hie(@/"[^"]*"/, "<[^>]*>", "string");
$0 = hil(@/[^\>&]/,
@/#.*$/,
"",
"comment");
hi(@/\$(\(|\(\(|{).+(\)|\)\)|})/, "structure");
hi(@/\$[[:alnum:]]+/, "structure");
- $0 = hil(@/[^[:alpha:]#\$]/,
- @/[[:digit:]]+(|\.[[:digit:]]+)/,
- @/([^[:alpha:];]|$)/,
+ $0 = hil(@/[^[:alnum:]#\$]/,
+ @/[[:digit:]]+/,
+ @/[^[:alnum:]]/,
"number");
+ $0 = hil(@/[^[:alnum:]#\$]/,
+ @/[[:digit:]]+\.[[:digit:]]+/,
+ @/[^[:alnum:]]/,
+ "float");
$0 = hil(@/[[:blank:]]+/, @/-[-_[:alnum:]]+/, "", "operator");
$0 = hil(@/(^|[^[:alnum:]])/,
@/(if|fi|then|case|esac|&#61;&#61;|!&#61;|-eq|-ne|-gt|-ge|-lt|-le|;;|;|\|\||&#38;&#38;)/,
@/([^[:alnum:]]|$)/,
"conditional");
- hi(@/(^|[[:blank:]]+)(for|while|until|in|do|done)($|[[:blank:]])/, "repeat");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(for|while|until|in|do|done)/,
+ @/([^[:alnum:]]|$)/,
+ "repeat");
$0 = hil(@/(^|[[:blank:]]+)/,
@/[[:alnum:]]+/,
@/(|\+|-)&#61;/,
@@ -137,26 +151,10 @@ syntaxhighlighting == 3 {
hi(@/^[[:blank:]]*[[:alnum:]]+/, "statement");
}
+
#
-# -- C --
+# -- C-like programming languages --
#
-# Supports "c" and is used in C-like programming languages
-
-/class="language-c"/ {
- syntaxhighlighting = 100;
-}
-
-syntaxhighlighting >= 100 {
- gsub(/([[:alnum:]]|[-_])+(&#60;[[:alnum:]]+&#62;)?\(/, "<span class=\"SH-fnc\">&</span>");
- gsub(/(&#47;&#47;.*|&#47;*.*&#47;)/, "<span class=\"SH-com\">&</span>");
- gsub(/[\(,\.]/, "<span class=\"SH-none\">&</span>");
- gsub(/(public|protected|private|override|new|if|else|while|for|return|struct|typedef|extern|const)[[:blank:]]/, "<span class=\"SH-kwd\">&</span>");
- gsub(/(&#38;&#38;|\|\||==|!=)/, "<span class=\"SH-kwd2\">&</span>");
- gsub(/#(include|if|ifndef|endif|define)/, "<span class=\"SH-kwd3\">&</span>");
- gsub(/(true|false)[[:blank:]]/, "<span class=\"SH-cst\">&</span>");
- gsub(/(int|void|double|bool|char)[[:blank:]]/, "<span class=\"SH-typ\">&</span>");
- $0 = gesub("(\"[^\"]*\"|'[^']*')", "<[^>]*>", "<span class=\"SH-str\">&</span>");
-}
#
# -- C++ --
@@ -168,7 +166,10 @@ syntaxhighlighting >= 100 {
}
syntaxhighlighting == 101 {
- gsub(/([[:blank:]]|\()*[[:upper:]]([[:upper:]]|[-_])*([[:blank:]]|\)|,|;)+/, "<span class=\"SH-cst\">&</span>");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(string)/,
+ @/([^[:alnum:]]|$)/,
+ "type");
}
#
@@ -213,6 +214,56 @@ syntaxhighlighting == 104 {
gsub(/%[^[:blank:]]+/, "<span class=\"SH-kwd\">&</span>");
}
+#
+# -- C --
+#
+# Supports "c" and is used in C-like programming languages
+
+/class="language-c"/ {
+ syntaxhighlighting = 100;
+}
+
+syntaxhighlighting >= 100 {
+ $0 = hie(@/"[^"]*"/, "<[^>]*>", "string");
+ hi(@/(&#47;&#47;.*$|&#47;\*.*$|^.*\*&#47;)/, "comment");
+ $0 = hil(@/[^[:alnum:]#\$]/,
+ @/[[:digit:]]+/,
+ @/[^[:alnum:]]/,
+ "number");
+ $0 = hil(@/[^[:alnum:]#\$]/,
+ @/[[:digit:]]+\.[[:digit:]]+/,
+ @/[^[:alnum:]]/,
+ "float");
+ $0 = hil("",
+ @/[-_[:alnum:]]+/,
+ @/[[:blank:]]*(|\+|-|\*|&#47;|%|&#60;&#60;|&#62;&#62;|&|\^|\|)&#61;/,
+ "identifier");
+ $0 = hil("",
+ @/[-_[:alnum:]]+[[:blank:]]*/,
+ @/\(/,
+ "function");
+ hi(@/(&#61;&#61;|!&#61;|&#60;|&#62;|&#60;&#61;|&#62;&#61;|&#38;&#38;|\|\||!)/, "conditional");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(break|continue|do|for|goto|while)/,
+ @/([^[:alnum:]]|$)/,
+ "repeat");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(case|const|default|else|extern|if|return|sizeof|switch|typedef)/,
+ @/([^[:alnum:]]|$)/,
+ "keyword");
+ hi(@/^[[:blank:]]*#[[:alpha:]]+/, "preproc");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(auto|char|double|float|int|long|short|signed|unsigned|bool)/,
+ @/([^[:alnum:]]|$)/,
+ "type");
+ hi(@/&#39;[\\]?[ -~]&#39;/, "char");
+ hi(@/(true|false)/, "bool");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(enum|struct|union)/,
+ @/([^[:alnum:]]|$)/,
+ "storageclass");
+}
+
tagend != 0 {
$0 = prestart $0;
tagend = 0;