201 lines
9.6 KiB
XML
201 lines
9.6 KiB
XML
<?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> |