diff options
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.awk | 166 |
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(@/=/, "<[^>]*>", "\\="); +} + # # -- 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:]]*[^-\\]->/, "<span class=\"SH-kwd\">&</span>"); - gsub(/\|/, "<span class=\"SH-kwd2\">&</span>"); + hi(@/->/, "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|;|\|\||&&)($|[[: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|==|!=|-eq|-ne|-gt|-ge|-lt|-le|;;|;|\|\||&&)/, + @/([^[:alnum:]]|$)/, + "conditional"); + $0 = hil(@/(^|[^[:alnum:]])/, + @/(for|while|until|in|do|done)/, + @/([^[:alnum:]]|$)/, + "repeat"); + $0 = hil(@/(^|[[:blank:]]+)/, + @/[[:alnum:]]+/, + @/(|\+|-)=/, + "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:]]|[-_])+(<[[:alnum:]]+>)?\(/, "<span class=\"SH-fnc\">&</span>"); - gsub(/(//.*|/*.*/)/, "<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(/(&&|\|\||==|!=)/, "<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(/(<[[:alnum:]]+>)/, "<span class=\"SH-kwd\">&</span>"); - gsub(/([[:blank:]]|\()*([[:upper:]]|[-_])+([[:blank:]]|\)|,|;)+/, "<span class=\"SH-cst\">&</span>"); - gsub(/(=>)/, "<span class=\"SH-kwd2\">&</span>"); + $0 = hil(@/(^|[^[:alnum:]])/, + @/(new|public|protected|private|override)/, + @/([^[:alnum:]]|$)/, + "keyword"); + hi(@/<[-_[:alpha:]]+>/, "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(@/(//.*$|/\*.*$|^[^\*]*\*/)/, "comment"); + $0 = hil(@/[^[:alnum:]#\$]/, + @/[[:digit:]]+/, + @/[^[:alnum:]]/, + "number"); + $0 = hil(@/[^[:alnum:]#\$]/, + @/[[:digit:]]+\.[[:digit:]]+/, + @/[^[:alnum:]]/, + "float"); + $0 = hil("", + @/[-_[:alnum:]]+/, + @/[[:blank:]]*(|\+|-|\*|/|%|<<|>>|&|\^|\|)=/, + "identifier"); + $0 = hil("", + @/[-_[:alnum:]]+[[:blank:]]*/, + @/\(/, + "function"); + hi(@/(==|!=|<=|>=|&&|\|\||!)/, "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(@/'[\\]?[ -~]'/, "char"); + hi(@/(true|false)/, "bool"); + $0 = hil(@/(^|[^[:alnum:]])/, + @/(enum|struct|union)/, + @/([^[:alnum:]]|$)/, + "storageclass"); } tagend != 0 { |