| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?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>
|