113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
/*
|
|
Language: PHP
|
|
Author: Victor Karamzin <Victor.Karamzin@enterra-inc.com>
|
|
Contributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>
|
|
*/
|
|
|
|
hljs.LANGUAGES['php'] = function(hljs) {
|
|
var VARIABLE = {
|
|
className: 'variable', begin: '\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
|
|
};
|
|
var STRINGS = [
|
|
hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
|
|
hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
|
|
{
|
|
className: 'string',
|
|
begin: 'b"', end: '"',
|
|
contains: [hljs.BACKSLASH_ESCAPE]
|
|
},
|
|
{
|
|
className: 'string',
|
|
begin: 'b\'', end: '\'',
|
|
contains: [hljs.BACKSLASH_ESCAPE]
|
|
}
|
|
];
|
|
var NUMBERS = [
|
|
hljs.C_NUMBER_MODE, // 0x..., 0..., decimal, float
|
|
hljs.BINARY_NUMBER_MODE // 0b...
|
|
];
|
|
var TITLE = {
|
|
className: 'title', begin: hljs.UNDERSCORE_IDENT_RE
|
|
};
|
|
return {
|
|
case_insensitive: true,
|
|
defaultMode: {
|
|
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 implements parent clone use __CLASS__ __LINE__ else break print eval new ' +
|
|
'catch __METHOD__ case exception php_user_filter default die require __FUNCTION__ ' +
|
|
'enddeclare final try this switch continue endfor endif declare unset true false ' +
|
|
'namespace trait goto instanceof insteadof __DIR__ __NAMESPACE__ __halt_compiler',
|
|
contains: [
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
hljs.HASH_COMMENT_MODE,
|
|
{
|
|
className: 'comment',
|
|
begin: '/\\*', end: '\\*/',
|
|
contains: [{
|
|
className: 'phpdoc',
|
|
begin: '\\s@[A-Za-z]+'
|
|
}]
|
|
},
|
|
{
|
|
className: 'comment',
|
|
excludeBegin: true,
|
|
begin: '__halt_compiler.+?;', endsWithParent: true
|
|
},
|
|
{
|
|
className: 'string',
|
|
begin: '<<<[\'"]?\\w+[\'"]?$', end: '^\\w+;',
|
|
contains: [hljs.BACKSLASH_ESCAPE]
|
|
},
|
|
{
|
|
className: 'preprocessor',
|
|
begin: '<\\?php',
|
|
relevance: 10
|
|
},
|
|
{
|
|
className: 'preprocessor',
|
|
begin: '\\?>'
|
|
},
|
|
VARIABLE,
|
|
{
|
|
className: 'function',
|
|
beginWithKeyword: true, end: '{',
|
|
keywords: 'function',
|
|
illegal: '\\$|\\[|%',
|
|
contains: [
|
|
TITLE,
|
|
{
|
|
className: 'params',
|
|
begin: '\\(', end: '\\)',
|
|
contains: [
|
|
'self',
|
|
VARIABLE,
|
|
hljs.C_BLOCK_COMMENT_MODE
|
|
].concat(STRINGS).concat(NUMBERS)
|
|
}
|
|
]
|
|
},
|
|
{
|
|
className: 'class',
|
|
beginWithKeyword: true, end: '{',
|
|
keywords: 'class',
|
|
illegal: '[:\\(\\$]',
|
|
contains: [
|
|
{
|
|
beginWithKeyword: true, endsWithParent: true,
|
|
keywords: 'extends',
|
|
contains: [TITLE]
|
|
},
|
|
TITLE
|
|
]
|
|
},
|
|
{
|
|
begin: '=>' // No markup, just a relevance booster
|
|
}
|
|
].concat(STRINGS).concat(NUMBERS)
|
|
}
|
|
};
|
|
}(hljs);
|