Summary Files Commits Branches @commit @diff @stats
path: root / awk-edits / Syntax-highlighting.awk
diff options
context:
space:
mode:
Commit8ae9ca1c57b5f183ae8e98df3310346aadbc8ddf (patch)
Author
 Kamen Mladenov <kamen@syndamia.com>
2023-04-29 12:29:43 +0000
Committer
 Kamen Mladenov <kamen@syndamia.com>
2023-04-29 12:29:43 +0000
Files07fecb5c85a57195503057f099e193ed2fd3ed39 /awk-edits/Syntax-highlighting.awk
syndamia.com-8ae9ca1c57b5f183ae8e98df3310346aadbc8ddf.tar
syndamia.com-8ae9ca1c57b5f183ae8e98df3310346aadbc8ddf.tar.gz
syndamia.com-8ae9ca1c57b5f183ae8e98df3310346aadbc8ddf.zip
Parent5b2ac851b21fcb2a9f7c6cff47637be184881902 (diff)
Parenta9f641a6ec9d70ab4d78f6280ede0d5e64c3d50c (diff)
Merge branch 'better-syntax-highlighting' into 'master'
Reworked code highlighting See merge request Syndamia/syndamiadotcom!8
1 files changed, 125 insertions, 41 deletions
-rw-r--r--awk-edits/Syntax-highlighting.awk166
diff --git a/awk-edits/Syntax-highlighting.awk b/awk-edits/Syntax-highlighting.awk
index e3a9be2..0e5250e 100644
--- a/awk-edits/Syntax-highlighting.awk
+++ b/awk-edits/Syntax-highlighting.awk
@@ -17,6 +17,24 @@ BEGIN {
syntaxhighlighting=0;
}
+function hi(pat, class) {
+ gsub(pat, "<span class=\"HI-" class "\">&</span>");
+}
+function hie(pat, epat, class) {
+ return gesub(pat, epat, "<span class=\"HI-" class "\">&</span>");
+}
+function hil(lbpat, pat, lrpat, class) {
+ return glsub(lbpat, pat, lrpat, "<span class=\"HI-" class "\">&</span>");
+}
+
+#
+# -- Global --
+#
+
+syntaxhighlighting > 0 || /class="language-/ {
+ $0 = gesub(@/=/, "<[^>]*>", "\\&#61;");
+}
+
#
# -- Grammars --
#
@@ -58,10 +76,10 @@ syntaxhighlighting == 1 {
}
for (i = 1; i <= grammarNamesI; i++) {
- $0 = gesub(grammarNames[i], "<span [^>]*>[^<]*</[^>]*>", "<span class=\"SH-fnc\">&</span>");
+ $0 = hie(grammarNames[i], @/<span [^>]*>[^<]*<\/[^>]*>/, "function");
}
- gsub(/[[:blank:]]*[^-\\]-&#62;/, "<span class=\"SH-kwd\">&</span>");
- gsub(/\|/, "<span class=\"SH-kwd2\">&</span>");
+ hi(@/-&#62;/, "statement");
+ hi(@/\|/, "statement");
}
#
@@ -76,11 +94,11 @@ syntaxhighlighting == 0 && /class="language-regex"/ {
syntaxhighlighting == 2 {
syntaxhighlighting = 2;
- gsub(/[\*]/, "<span class=\"SH-kwd\">&</span>");
- gsub(/[\(\)\|]/, "<span class=\"SH-kwd2\">&</span>");
+ hi(@/\*/, "repeat");
+ hi(@/[\(\)\|]/, "statement");
}
-#
+#
# -- Bash
#
# Supports "bash"
@@ -97,38 +115,46 @@ syntaxhighlighting == 2 {
}
syntaxhighlighting == 3 {
- gsub(/("[^"]*"|'[^']*')/, "<span class=\"SH-str\">&</span>");
- gsub(/\$(\(|\(\(|{).+(\)|\)\)|})/, "<span class=\"SH-kwd3\">&</span>");
- gsub(/\$[^[:blank:]]+/, "<span class=\"SH-kwd3\">&</span>");
- gsub(/[[:blank:]]+-[-_[:alnum:]]+/, "<span class=\"SH-kwd2\">&</span>");
- gsub(/(^|[[:blank:]]+)(function|if|fi|then|case|esac|in|disown|==|!=|-eq|-ne|-gt|-ge|-lt|-le|;|\|\||&#38;&#38;)($|[[:blank:]])/, "<span class=\"SH-kwd\">&</span>");
- gsub(/^[[:blank:]]*[[:alnum:]]+=/, "<span class=\"SH-cls\">&</span>");
- gsub(/[-_[:alnum:]]+[[:blank:]]*\([^\)]*\)/, "<span class=\"SH-fnc\">&</span>");
- gsub(/[\{\}]/, "<span class=\"SH-fnc\">&</span>");
- gsub(/[[:blank:]]#.*$/, "<span class=\"SH-com\">&</span>");
- gsub(/(\|)/, "<span class=\"SH-none\">&</span>");
+ $0 = hie(@/"[^"]*"/, "<[^>]*>", "string");
+ $0 = hil(@/[^\>&]/,
+ @/#.*$/,
+ "",
+ "comment");
+ hi(@/\$(\(|\(\(|{).+(\)|\)\)|})/, "structure");
+ hi(@/\$[[:alnum:]]+/, "structure");
+ $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");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(for|while|until|in|do|done)/,
+ @/([^[:alnum:]]|$)/,
+ "repeat");
+ $0 = hil(@/(^|[[:blank:]]+)/,
+ @/[[:alnum:]]+/,
+ @/(|\+|-)&#61;/,
+ "identifier");
+ $0 = hil("",
+ @/[-_[:alnum:]]+[[:blank:]]*/,
+ @/\([^\)]*\)/,
+ "function");
+ hi(@/[\{\}]/, "function");
+ 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++ --
@@ -140,7 +166,10 @@ syntaxhighlighting >= 100 {
}
syntaxhighlighting == 101 {
- gsub(/([[:blank:]]|\()*[[:upper:]]([[:upper:]]|[-_])*([[:blank:]]|\)|,|;)+/, "<span class=\"SH-cst\">&</span>");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(string)/,
+ @/([^[:alnum:]]|$)/,
+ "type");
}
#
@@ -153,10 +182,12 @@ syntaxhighlighting == 101 {
}
syntaxhighlighting == 102 {
- gsub(/new ([[:alnum:]]|[-_])+[\(\.]/, "<span class=\"SH-cls\">&</span>");
- gsub(/(&#60;[[:alnum:]]+&#62;)/, "<span class=\"SH-kwd\">&</span>");
- gsub(/([[:blank:]]|\()*([[:upper:]]|[-_])+([[:blank:]]|\)|,|;)+/, "<span class=\"SH-cst\">&</span>");
- gsub(/(=&#62;)/, "<span class=\"SH-kwd2\">&</span>");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(new|public|protected|private|override)/,
+ @/([^[:alnum:]]|$)/,
+ "keyword");
+ hi(@/&#60;[-_[:alpha:]]+&#62;/, "typedef");
+ $0 = hie(@/[_[:upper:]][_[:upper:]][_[:upper:]][_[:upper:]]+/, @/<[^>]*>/, "const");
}
#
@@ -169,7 +200,7 @@ syntaxhighlighting == 102 {
}
syntaxhighlighting == 103 {
- gsub(/%[^[:blank:]]+/, "<span class=\"SH-kwd\">&</span>");
+ hi(@/%[^[:blank:]]+/, "storageclass");
}
#
@@ -182,7 +213,60 @@ syntaxhighlighting == 103 {
}
syntaxhighlighting == 104 {
- gsub(/%[^[:blank:]]+/, "<span class=\"SH-kwd\">&</span>");
+ hi(@/%[^[:blank:]]+/, "storageclass");
+}
+
+#
+# -- 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;&#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");
+ $0 = hil(@/(^|<.*>)[[:blank:]]*/,
+ @/#[[:alpha:]]+/,
+ "",
+ "preproc");
+ $0 = hil(@/(^|[^-[:alnum:]])/,
+ @/(auto|char|double|float|int|long|short|signed|unsigned|bool|void)/,
+ @/([^[:alnum:]]|$)/,
+ "type");
+ hi(@/&#39;[\\]?[ -~]&#39;/, "char");
+ hi(@/(true|false)/, "bool");
+ $0 = hil(@/(^|[^[:alnum:]])/,
+ @/(enum|struct|union)/,
+ @/([^[:alnum:]]|$)/,
+ "storageclass");
}
tagend != 0 {