|
|
|
@ -12,40 +12,189 @@
|
|
|
|
|
<!-- PHP - Personal Home Page / PHP Hypertext Preprocessor --> |
|
|
|
|
|
|
|
|
|
<parser |
|
|
|
|
displayName="PHP - Personal Home Page / PHP Hypertext Preprocessor" |
|
|
|
|
id ="php_syntax" |
|
|
|
|
displayName="PHP" |
|
|
|
|
commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)" |
|
|
|
|
commentExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`) |
|
|
|
|
(?s:\x2F\x2A.*?\x2A\x2F) # Multi Line Comment x2F -> '/' x2A -> '*' |
|
|
|
|
| (?m-s:(?:\x23|\x2F{2}).*$) # Single Line Comment 1 # and 2 // |
|
|
|
|
# | (?s:\x22(?:[^\x22\x24\x5C]|\x5C.)*\x22) # String Literal - Double Quoted |
|
|
|
|
| (?s:\x22(?:[^\x22\x5C]|\x5C.)*\x22) # String Literal - Double Quoted |
|
|
|
|
| (?s:\x27(?:[^\x27\x5C]|\x5C.)*\x27) # String Literal - Single Quoted |
|
|
|
|
| (?: # Here Document |
|
|
|
|
\x3C{3}(?'HDID'[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)[^\r\n]*(?:\r?\n|\n?\r) |
|
|
|
|
(?s:.*?) |
|
|
|
|
(?:\r?\n|\n?\r)\k'HDID' # close with exactly the same identifier, in the first column |
|
|
|
|
) |
|
|
|
|
| (?: # Now Document |
|
|
|
|
\x3C{3}\x27(?'NDID'[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)\x27[^\r\n]*(?:\r?\n|\n?\r) |
|
|
|
|
(?s:.*?) |
|
|
|
|
(?:\r?\n|\n?\r)\k'NDID' # close with exactly the same identifier, in the first column |
|
|
|
|
) |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
<classRange |
|
|
|
|
mainExpr ="^\s*(class|abstract\s+class|final\s+class|interface|trait)[\t\x20]+[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*(\s*|\s*(extends|implements|(extends\s+(\\|[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)+\s+implements))\s+(\,\s*|(\\|[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*))+\s*)?\{" |
|
|
|
|
mainExpr ="(?x) # free-spacing (see `RegEx - Pattern Modifiers`) |
|
|
|
|
(?(DEFINE) # definition of sub-routines |
|
|
|
|
(?'VALID_ID' |
|
|
|
|
\b(?!(?-i: # keywords (case-sensitive), not to be used as identifier |
|
|
|
|
a(?:bstract|nd|rray|s) |
|
|
|
|
| b(?:ool|reak) |
|
|
|
|
| c(?:a(?:llable|se|tch)|l(?:ass|one)|on(?:st|tinue)) |
|
|
|
|
| d(?:e(?:clare|fault)|ie|o) |
|
|
|
|
| e(?:cho|lse(?:if)?|mpty|nd(?:declare|for(?:each)?|if|switch|while)|val|x(?:it|tends)) |
|
|
|
|
| f(?:alse|loat|inal|or(?:each)?|unction) |
|
|
|
|
| g(?:lobal|oto) |
|
|
|
|
| i(?:f|mplements|n(?:clude(?:_once)?|st(?:anceof|eadof)|t(?:erface)?)|sset) |
|
|
|
|
| list |
|
|
|
|
| mixed |
|
|
|
|
| n(?:amespace|ew|u(?:ll|meric)) |
|
|
|
|
| o(?:r|bject) |
|
|
|
|
| p(?:r(?:i(?:nt|vate)|otected)|ublic) |
|
|
|
|
| re(?:quire(?:_once)?|turn) |
|
|
|
|
| s(?:t(?:atic|ring)|witch) |
|
|
|
|
| t(?:hrow|r(?:ait|ue|y)) |
|
|
|
|
| u(?:nset|se) |
|
|
|
|
| var |
|
|
|
|
| while |
|
|
|
|
| xor |
|
|
|
|
| __(?:halt_compiler|(?:CLASS|DIR|F(?:ILE|UNCTION)|LINE|METHOD|NAMESPACE|TRAIT)__) |
|
|
|
|
)\b) |
|
|
|
|
[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]* # valid character combination for identifiers |
|
|
|
|
) |
|
|
|
|
(?'INTERFACE_LIST' |
|
|
|
|
\s+(?:\x5C|(?&VALID_ID))+ |
|
|
|
|
(?: |
|
|
|
|
\s*, |
|
|
|
|
\s*(?:\x5C|(?&VALID_ID))+ |
|
|
|
|
)* |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
(?m-i) # ^ and $ match at line-breaks, case-sensitive |
|
|
|
|
^\h* # optional leading white-space at start-of-line |
|
|
|
|
(?: |
|
|
|
|
(?:(?-i:abstract|final)\s+)? # optional class entry type |
|
|
|
|
(?-i:class)\s+ |
|
|
|
|
\K # discard text matched so far |
|
|
|
|
(?&VALID_ID) # identifier used as class name |
|
|
|
|
(?: # optional extends-from-class |
|
|
|
|
\s+(?-i:extends) |
|
|
|
|
\s+(?:\x5C|(?&VALID_ID))+ |
|
|
|
|
)? |
|
|
|
|
(?: # optional implements-class/interfaces |
|
|
|
|
\s+(?-i:implements) |
|
|
|
|
(?&INTERFACE_LIST) |
|
|
|
|
)? |
|
|
|
|
| |
|
|
|
|
(?-i:interface)\s+ |
|
|
|
|
\K # discard text matched so far |
|
|
|
|
(?&VALID_ID) # identifier used as interface name |
|
|
|
|
(?: # optional extends-from list |
|
|
|
|
\s+(?-i:extends) |
|
|
|
|
(?&INTERFACE_LIST) |
|
|
|
|
)? |
|
|
|
|
| |
|
|
|
|
(?-i:trait)\s+ |
|
|
|
|
\K # discard text matched so far |
|
|
|
|
(?&VALID_ID) # identifier used as trait name |
|
|
|
|
) |
|
|
|
|
\s*\{ |
|
|
|
|
" |
|
|
|
|
openSymbole ="\{" |
|
|
|
|
closeSymbole="\}" |
|
|
|
|
> |
|
|
|
|
<className> |
|
|
|
|
<nameExpr expr="(class|abstract\s+class|final\s+class|interface|trait)\s+\w+" /> |
|
|
|
|
<nameExpr expr="\s+\w+\Z" /> |
|
|
|
|
<nameExpr expr="\w+\Z" /> |
|
|
|
|
<nameExpr expr="[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*" /> |
|
|
|
|
</className> |
|
|
|
|
<function |
|
|
|
|
mainExpr="^\s*((static|public|protected|private|final)*(\s+(static|public|protected|private|final))+\s+)?(function\s+)+(\w+(\s+\w+)?(\s+|\*\s+|\s+\*|\s+\*\s+))?(\w+\s*::)?(?!(if|while|for|switch))[\w~]+\s*\([^\{]*\{" |
|
|
|
|
mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`) |
|
|
|
|
(?m-i) # ^ and $ match at line-breaks, case-sensitive |
|
|
|
|
^\h* # optional leading white-space at start-of-line |
|
|
|
|
(?:(?-i: # field modifiers |
|
|
|
|
p(?:r(?:ivate|otected)|ublic) # - access modifiers |
|
|
|
|
| abstract|final|static # - ... |
|
|
|
|
)\s+)* # require a white-space separator |
|
|
|
|
(?-i:function)\s+ |
|
|
|
|
\K # discard text matched so far |
|
|
|
|
(?:\x26\s*)? # optionally a reference |
|
|
|
|
(?'VALID_ID' # valid identifier, use as subroutine |
|
|
|
|
\b(?!(?-i: # keywords (case-sensitive), not to be used as identifier |
|
|
|
|
a(?:bstract|nd|rray|s) |
|
|
|
|
| b(?:ool|reak) |
|
|
|
|
| c(?:a(?:llable|se|tch)|l(?:ass|one)|on(?:st|tinue)) |
|
|
|
|
| d(?:e(?:clare|fault)|ie|o) |
|
|
|
|
| e(?:cho|lse(?:if)?|mpty|nd(?:declare|for(?:each)?|if|switch|while)|val|x(?:it|tends)) |
|
|
|
|
| f(?:alse|loat|inal|or(?:each)?|unction) |
|
|
|
|
| g(?:lobal|oto) |
|
|
|
|
| i(?:f|mplements|n(?:clude(?:_once)?|st(?:anceof|eadof)|t(?:erface)?)|sset) |
|
|
|
|
| list |
|
|
|
|
| mixed |
|
|
|
|
| n(?:amespace|ew|u(?:ll|meric)) |
|
|
|
|
| o(?:r|bject) |
|
|
|
|
| p(?:r(?:i(?:nt|vate)|otected)|ublic) |
|
|
|
|
| re(?:quire(?:_once)?|turn) |
|
|
|
|
| s(?:t(?:atic|ring)|witch) |
|
|
|
|
| t(?:hrow|r(?:ait|ue|y)) |
|
|
|
|
| u(?:nset|se) |
|
|
|
|
| var |
|
|
|
|
| while |
|
|
|
|
| xor |
|
|
|
|
| __(?:halt_compiler|(?:CLASS|DIR|F(?:ILE|UNCTION)|LINE|METHOD|NAMESPACE|TRAIT)__) |
|
|
|
|
)\b) |
|
|
|
|
[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]* # valid character combination for identifiers |
|
|
|
|
) # identifier used as method name |
|
|
|
|
\s*\( # start of function parameters |
|
|
|
|
(?:[^{;]*(?:\{|;)) # start of function body or abstract function without body |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
<functionName> |
|
|
|
|
<funcNameExpr expr="(?!(if|while|for|switch))\w+\s*\([^\{]*" /> |
|
|
|
|
<funcNameExpr expr="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*\s*\((?:[^/{]|/(?![*/]))*" /> |
|
|
|
|
<!-- comment out the following node to display the method with parameters --> |
|
|
|
|
<funcNameExpr expr="(?!(if|while|for|switch))\w+" /> |
|
|
|
|
<funcNameExpr expr="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*" /> |
|
|
|
|
</functionName> |
|
|
|
|
</function> |
|
|
|
|
</classRange> |
|
|
|
|
<function |
|
|
|
|
mainExpr="^\s*function\s+\w+\s*\(" |
|
|
|
|
mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`) |
|
|
|
|
(?m-i) # ^ and $ match at line-breaks, case-sensitive |
|
|
|
|
^\h* # optional leading white-space at start-of-line |
|
|
|
|
(?-i:function)\s+ |
|
|
|
|
\K # discard text matched so far |
|
|
|
|
(?:\x26\s*)? # optionally a reference |
|
|
|
|
(?'VALID_ID' # valid identifier, use as subroutine |
|
|
|
|
\b(?!(?-i: # keywords (case-sensitive), not to be used as identifier |
|
|
|
|
a(?:bstract|nd|rray|s) |
|
|
|
|
| b(?:ool|reak) |
|
|
|
|
| c(?:a(?:llable|se|tch)|l(?:ass|one)|on(?:st|tinue)) |
|
|
|
|
| d(?:e(?:clare|fault)|ie|o) |
|
|
|
|
| e(?:cho|lse(?:if)?|mpty|nd(?:declare|for(?:each)?|if|switch|while)|val|x(?:it|tends)) |
|
|
|
|
| f(?:alse|loat|inal|or(?:each)?|unction) |
|
|
|
|
| g(?:lobal|oto) |
|
|
|
|
| i(?:f|mplements|n(?:clude(?:_once)?|st(?:anceof|eadof)|t(?:erface)?)|sset) |
|
|
|
|
| list |
|
|
|
|
| mixed |
|
|
|
|
| n(?:amespace|ew|u(?:ll|meric)) |
|
|
|
|
| o(?:r|bject) |
|
|
|
|
| p(?:r(?:i(?:nt|vate)|otected)|ublic) |
|
|
|
|
| re(?:quire(?:_once)?|turn) |
|
|
|
|
| s(?:t(?:atic|ring)|witch) |
|
|
|
|
| t(?:hrow|r(?:ait|ue|y)) |
|
|
|
|
| u(?:nset|se) |
|
|
|
|
| var |
|
|
|
|
| while |
|
|
|
|
| xor |
|
|
|
|
| __(?:halt_compiler|(?:CLASS|DIR|F(?:ILE|UNCTION)|LINE|METHOD|NAMESPACE|TRAIT)__) |
|
|
|
|
)\b) |
|
|
|
|
[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]* # valid character combination for identifiers |
|
|
|
|
) # identifier used as function name |
|
|
|
|
\s*\( # start of function parameters |
|
|
|
|
[^{]*\{ # start of function body |
|
|
|
|
" |
|
|
|
|
> |
|
|
|
|
<functionName> |
|
|
|
|
<nameExpr expr="(?!(if|while|for))\w+\s*\(" /> |
|
|
|
|
<nameExpr expr="(?!(if|while|for))\w+" /> |
|
|
|
|
<nameExpr expr="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*\s*\((?:[^/{]|/(?![*/]))*" /> |
|
|
|
|
<!-- comment out the following node to display the function with its parameters --> |
|
|
|
|
<!-- <nameExpr expr="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*" /> --> |
|
|
|
|
</functionName> |
|
|
|
|
<className> |
|
|
|
|
<nameExpr expr="\w+(?=\s*::)" /> |
|
|
|
|
</className> |
|
|
|
|
</function> |
|
|
|
|
</parser> |
|
|
|
|
</functionList> |
|
|
|
|