/* Language: PHP Author: Victor Karamzin Contributors: Evgeny Stepanischev , Ivan Sagalaev */ 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);