]*>[^<]*<\/[^>]*>/, "function");
}
hi(@/->/, "statement");
hi(@/\|/, "statement");
}
#
# -- Regexes --
#
# Supports "regex"
syntaxhighlighting == 0 && /class="language-regex"/ {
syntaxhighlighting = 2;
}
syntaxhighlighting == 2 {
syntaxhighlighting = 2;
hi(@/\*/, "repeat");
hi(@/[\(\)\|]/, "statement");
}
#
# -- Bash
#
# Supports "bash"
/class="language-bash"/ {
syntaxhighlighting = 3;
# The first code block line could look something like
# class="langage-bash"
# So, if we want to do something with the word class or strings,
# we'll need to skip the tags from the beginning.
tagend = match($0, /class="language-bash"/) + 21;
prestart = substr($0, 0, tagend);
$0 = substr($0, tagend + 1);
}
syntaxhighlighting == 3 {
$0 = hie(@/"[^"]*"/, "<[^>]*>", "string");
$0 = hil(@/(^|[^>&])/,
@/#.*$/,
"",
"comment");
$0 = hib("\\$\\{", "\\}", "structure");
$0 = hib("\\$\\(\\(", "\\)\\)", "structure");
$0 = hib("\\$\\(", "\\)", "structure");
hi(@/\$[[:alnum:]]+/, "structure");
$0 = hil(@/[^[:alnum:]#\$]/,
@/[[:digit:]]+/,
@/([^[:alnum:]]|$)/,
"number");
$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(@/^[[:blank:]]*[-_[:alnum:]]+/, "statement");
}
#
# -- C-like programming languages --
#
#
# -- C++ --
#
# Supports "cpp"
/class="language-cpp"/ {
syntaxhighlighting = 101;
}
syntaxhighlighting == 101 {
$0 = hil(@/(^|[^[:alnum:]])/,
@/(string)/,
@/([^[:alnum:]]|$)/,
"type");
}
#
# -- C# --
#
# Supports "csharp"
/class="language-csharp"/ {
syntaxhighlighting = 102;
}
syntaxhighlighting == 102 {
$0 = hil(@/(^|[^[:alnum:]])/,
@/(new|public|protected|private|override)/,
@/([^[:alnum:]]|$)/,
"keyword");
hi(@/<[-_[:alpha:]]+>/, "typedef");
$0 = hie(@/[_[:upper:]][_[:upper:]][_[:upper:]][_[:upper:]]+/, @/<[^>]*>/, "const");
}
#
# -- lex --
#
# Supports "lex"
/class="language-lex"/ {
syntaxhighlighting = 103;
}
syntaxhighlighting == 103 {
hi(@/%[^[:blank:]]+/, "storageclass");
}
#
# -- yacc --
#
# Supports "yacc"
/class="language-yacc"/ {
syntaxhighlighting = 104;
}
syntaxhighlighting == 104 {
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 {
$0 = prestart $0;
tagend = 0;
}
syntaxhighlighting > 0 && /<\/code>/ {
syntaxhighlighting = 0;
}