Implementation
final php = Mode(
refs: {
'~contains~9~contains~1~contains~4': Mode(variants: [binaryNumberMode, cNumberMode]),
'~contains~9~contains~1~contains~3': Mode(className: "string", contains: [
backSlashEscape,
Mode(ref: '~contains~1~contains~0')
], variants: [
Mode(begin: "b\"", end: "\""),
Mode(begin: "b'", end: "'"),
Mode(className: "string", begin: "'", end: "'", illegal: null, contains: [backSlashEscape]),
Mode(className: "string", begin: "\"", end: "\"", illegal: null, contains: [backSlashEscape])
]),
'~contains~7': Mode(begin: "\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"),
'~contains~1~contains~0': Mode(className: "meta", begin: "<\\?(php)?|\\?>"),
},
aliases: ["php", "php3", "php4", "php5", "php6", "php7"],
caseInsensitive: true,
keywords:
"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",
contains: [
hashCommentMode,
Mode(className: "comment", begin: "//", end: "\$", contains: [Mode(ref: '~contains~1~contains~0'), phrasalWordsMode, Mode(className: "doctag", begin: "(?:TODO|FIXME|NOTE|BUG|XXX):", relevance: 0)]),
Mode(className: "comment", begin: "/\\*", end: "\\*/", contains: [Mode(className: "doctag", begin: "@[A-Za-z]+"), phrasalWordsMode, Mode(className: "doctag", begin: "(?:TODO|FIXME|NOTE|BUG|XXX):", relevance: 0)]),
Mode(className: "comment", begin: "__halt_compiler.+?;", end: "false", contains: [phrasalWordsMode, Mode(className: "doctag", begin: "(?:TODO|FIXME|NOTE|BUG|XXX):", relevance: 0)], endsWithParent: true, keywords: "__halt_compiler", lexemes: "[a-zA-Z_]\\w*"),
Mode(className: "string", begin: "<<<['\"]?\\w+['\"]?\$", end: "^\\w+;?\$", contains: [
backSlashEscape,
Mode(className: "subst", variants: [Mode(begin: "\\\$\\w+"), Mode(begin: "\\{\\\$", end: "\\}")])
]),
Mode(ref: '~contains~1~contains~0'),
Mode(className: "keyword", begin: "\\\$this\\b"),
Mode(ref: '~contains~7'),
Mode(begin: "(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*"),
Mode(className: "function", beginKeywords: "function", end: "[;{]", excludeEnd: true, illegal: "\\\$|\\[|%", contains: [
underScoreTitleMode,
Mode(className: "params", begin: "\\(", end: "\\)", contains: [Mode(self: true), Mode(ref: '~contains~7'), cBlockCommentMode, Mode(ref: '~contains~9~contains~1~contains~3'), Mode(ref: '~contains~9~contains~1~contains~4')])
]),
Mode(className: "class", beginKeywords: "class interface", end: "{", excludeEnd: true, illegal: "[:\\(\\\$\"]", contains: [Mode(beginKeywords: "extends implements"), underScoreTitleMode]),
Mode(beginKeywords: "namespace", end: ";", illegal: "[\\.']", contains: [underScoreTitleMode]),
Mode(beginKeywords: "use", end: ";", contains: [underScoreTitleMode]),
Mode(begin: "=>"),
Mode(ref: '~contains~9~contains~1~contains~3'),
Mode(ref: '~contains~9~contains~1~contains~4')
]);