Quoted strings cannot start within another quoted string and end after that other string has ended. Therefore single-quoted and double-quoted strings should (as much as possible) be colorized by a single rule, so that overlapping colorations are avoided. (This also fixes a double typo in the PHP syntax (\. --> \\.) that has been there since the PHP syntax was added in 2008, commit 90ee8ee4.) This fixes https://savannah.gnu.org/bugs/?61387. Bug existed since each of these syntaxes was introduced, the oldest ones around 2006, a few others around 2015. The one that got it right was the Lua syntax from 2011.
36 lines
1.1 KiB
Plaintext
36 lines
1.1 KiB
Plaintext
## Syntax highlighting for PHP.
|
|
|
|
syntax php "\.(php[23457s~]?|phtml|ctp)$"
|
|
magic "PHP script"
|
|
comment "//"
|
|
|
|
# PHP markings.
|
|
color brightgreen "(<\?(php|=)?|\?>)"
|
|
|
|
# Function names.
|
|
color white "\<[A-Za-z_][A-Za-z_0-9]*\("
|
|
# Variable names.
|
|
color cyan "\$[A-Za-z_][A-Za-z_0-9]*"
|
|
|
|
# Types.
|
|
color green "\<(array|bool|callable|const|float|global|int|object|string|var)\>"
|
|
|
|
# Directives and structure.
|
|
color brightcyan "\<(abstract|as|class|clone|(end)?declare|extends|function|implements|include(_once)?|inst(ance|ead)of|interface|namespace|new|private|protected|public|require(_once)?|static|trait|use|yield)\>"
|
|
color brightcyan "\<(case|catch|default|do|echo|else(if)?|end(for(each)?|if|switch|while)|final(ly)?|for(each)?|if|print|switch|throw|try|while)\>"
|
|
# Operators.
|
|
color brightcyan "\<(and|or|xor)\>"
|
|
|
|
# Control flow.
|
|
color magenta "\<(break|continue|goto|return)\>"
|
|
|
|
# Strings.
|
|
color brightyellow ""(\\.|[^"])*"|'(\\.|[^'])*'"
|
|
|
|
# Comments.
|
|
color brightblue "(^|[[:blank:]]+)//.*"
|
|
color brightblue start="/\*" end="\*/"
|
|
|
|
# Trailing whitespace.
|
|
color ,green "[[:space:]]+$"
|