site-tpe/EnlighterJS/Source/Language/Php.js
2025-05-16 18:49:08 +02:00

76 lines
3.1 KiB
JavaScript

/*
---
description: PHP language
license: MIT-style
authors:
- Andi Dittrich
requires:
- Core/1.4.5
provides: [EnlighterJS.Language.php]
...
*/
EnlighterJS.Language.php = new Class({
Extends: EnlighterJS.Language.generic,
tokenizerType : 'Standard',
setupLanguage: function(){
this.keywords = {
// http://php.net/manual/en/reserved.keywords.php
keywords: {
csv: '__halt_compiler,abstract,and,as,break,callable,case,catch,class,clone,const,continue,declare,default,do,else,elseif,enddeclare,endfor,endforeach,endif,endswitch,endwhile,extends,final,finally,function,global,goto,implements,instanceof,insteadof,interface,namespace,new,or,private,protected,public,static,throw,trait,try,use,var,xor,yield',
alias: 'kw1'
},
// http://php.net/manual/en/reserved.other-reserved-words.php
reserved: {
csv: 'int,float,bool,string,true,false,null,resource,object,mixed,numeric',
alias: 'kw4',
mod: 'gi'
}
};
this.patterns = {
'keywordsFn': {
pattern: /(require_once|include_once|array|die|exit|echo|print|empty|eval|include|isset|list|require|unset|if|switch|while|foreach|for|return)(?:\s*\(|\s+)?/gi,
alias: 'kw1'
},
inherit: {
pattern: /(self|parent|\$this)/gi,
alias: 'kw4'
},
'slashComments': { pattern: this.common.slashComments, alias: 'co1' },
'multiComments': { pattern: this.common.multiComments, alias: 'co2' },
'dqStrings': { pattern: this.common.multiLineDoubleQuotedStrings, alias: 'st0' },
'sqStrings': { pattern: this.common.multiLineSingleQuotedStrings, alias: 'st1' },
'heredocs': { pattern: /(<<<\s*?('?)([A-Z0-9]+)\2[^\n]*?\n[\s\S]*?\n\3(?![A-Z0-9\s]))/gim, alias: 'st1' },
'numbers': { pattern: /\b((([0-9]+)?\.)?[0-9_]+([e][\-+]?[0-9]+)?|0x[A-F0-9]+)\b/gi, alias: 'nu0' },
'variables': { pattern: /\$[A-Z_][\w]*/gim, alias: 'kw3' },
'functions': { pattern: this.common.functionCalls, alias: 'me0' },
'methods': { pattern: /(?:->|::)([\w]+)/gim, alias: 'me1' },
'constants': { pattern: /\b[A-Z][A-Z0-9_]+[A-Z]\b/g, alias: 'kw4' },
'lconstants': { pattern: /\b__[A-Z][A-Z0-9_]+__\b/g, alias: 're0' },
'brackets': { pattern: this.common.brackets, alias: 'br0' },
'symbols': { pattern: /!|@|&|<|>|=|=>|-|\+/g, alias: 'sy0' }
};
// Delimiters
this.delimiters = {
start: this.strictRegExp('<?php'),
end: this.strictRegExp('?>')
};
}
});