You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
9.6 KiB
201 lines
9.6 KiB
<?xml version="1.0" encoding="UTF-8" ?> |
|
<!-- ==========================================================================\ |
|
| |
|
| To learn how to make your own language parser, please check the following |
|
| link: |
|
| https://npp-user-manual.org/docs/function-list/ |
|
| |
|
\=========================================================================== --> |
|
<NotepadPlus> |
|
<functionList> |
|
<!-- ========================================================= [ PHP ] --> |
|
<!-- PHP - Personal Home Page / PHP Hypertext Preprocessor --> |
|
|
|
<parser |
|
displayName="PHP - Personal Home Page / PHP Hypertext Preprocessor" |
|
id ="php_syntax" |
|
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 ="(?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="[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*" /> |
|
</className> |
|
<function |
|
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="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*\s*\((?:[^/{]|/(?![*/]))*" /> |
|
<!-- comment out the following node to display the method with parameters --> |
|
<funcNameExpr expr="(?:\x26\s*)?[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*" /> |
|
</functionName> |
|
</function> |
|
</classRange> |
|
<function |
|
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="(?:\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> |
|
</function> |
|
</parser> |
|
</functionList> |
|
</NotepadPlus> |