diff options
[Syntax-highlighting] Mostly implemented C and C++
1 files changed, 76 insertions, 25 deletions
| -rw-r--r-- | awk-edits/Syntax-highlighting.awk | 101 |
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(@/=/, "<[^>]*>", "\\="); +} + +# # -- Grammars -- # # Code in the form @@ -107,24 +115,30 @@ syntaxhighlighting == 2 { } syntaxhighlighting == 3 { - $0 = gesub(@/=/, "<[^>]*>", "\\="); - 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|==|!=|-eq|-ne|-gt|-ge|-lt|-le|;;|;|\|\||&&)/, @/([^[: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:]]+/, @/(|\+|-)=/, @@ -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:]]|[-_])+(<[[: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++ -- @@ -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(@/(//.*$|/\*.*$|^.*\*/)/, "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"); + hi(@/^[[:blank:]]*#[[:alpha:]]+/, "preproc"); + $0 = hil(@/(^|[^[:alnum:]])/, + @/(auto|char|double|float|int|long|short|signed|unsigned|bool)/, + @/([^[:alnum:]]|$)/, + "type"); + hi(@/'[\\]?[ -~]'/, "char"); + hi(@/(true|false)/, "bool"); + $0 = hil(@/(^|[^[:alnum:]])/, + @/(enum|struct|union)/, + @/([^[:alnum:]]|$)/, + "storageclass"); +} + tagend != 0 { $0 = prestart $0; tagend = 0; |