| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- Copied from https://github.com/notepad-plus-plus/notepad-plus-plus/issues/4563 -->
- <NotepadPlus>
- <functionList>
- <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- | Based on:
- | http://stackoverflow.com/questions/19246077/how-to-add-lua-functions-to-the-notepad-functionlist-xml
- |
- | Note(s):
- | 1) Multi Line Comment `Level` is supported by Lua 5.1 and above;
- | 2) Nested table view not supported;
- \-->
- <parser
- displayName="Lua w/ Class"
- id ="lua_syntax"
- commentExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
- (?s: # Multi Line Comment (MLC)
- (?<!-) # - no preceeding dash, otherwise start of SLC
- -{2}\x5B(?'MLCLvl'=*)\x5B.*?\x5D\k'MLCLvl'\x5D
- )
- | (?m-s:-{2}(?!\x5B=*\x5B).*$) # Single Line Comment (SLC)
- | (?s:\x22(?:[^\x22\x5C]|\x5C.)*\x22) # String Literal - Double Quoted (SLDQ) / Normal String
- | (?s: # String Literal - Multi Line (SLML) / Long String
- (?<!-{2}) # - no preceeding double dash, otherwise start of MLC or SLC
- \x5B(?'SLMLLvl'=*)\x5B(?:[^\x5C\x5D]|\x5C.)*\x5D\k'SLMLLvl'\x5D
- )
- | (?s:\x27(?:[^\x27\x5C]|\x5C.)*\x27) # String Literal - Single Quoted (SLSQ) / Char String
- "
- >
- <classRange
- mainExpr ="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
- [.\w]+
- \s*=
- \s*\{
- "
- openSymbole ="\{"
- closeSymbole="\}"
- >
- <className>
- <nameExpr expr="[.\w]+" />
- </className>
- <function
- mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
- [.\w]+
- \s*=
- \s*(?'QT'[\x22\x27]?)\w+\k'QT'
- "
- >
- <functionName>
- <funcNameExpr expr=".*" />
- </functionName>
- </function>
- </classRange>
- <function
- mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
- (?m-i) # ^ and $ match at line-breaks, case-sensitive
- (?(DEFINE) # definition of sub-routine(s)
- (?'VALID_ID' # Valid Identifier sub-routine
- \b(?!(?-i: # - keywords (case-sensitive), not to be used as identifier
- and
- | break
- | do
- | e(?:lse(?:if)?|nd)
- | f(?:alse|or|unction)
- | goto
- | i[fn]
- | local
- | n(?:il|ot)
- | or
- | re(?:peat|turn)
- | t(?:hen|rue)
- | until
- | while
- )\b)
- [A-Za-z_\x7F-\xFF][\w\x7F-\xFF]* # - valid character combination for identifiers
- )
- )
- (?m) # ^ and $ match at line-breaks
- (?:
- ^\h* # optional leading white-space at start-of-line
- (?:local\s+)?
- function\s+
- \K # discard text matched so far
- (?&VALID_ID)
- (?:\s*\.\s*(?&VALID_ID))*
- (?:\s*:\s*(?&VALID_ID))?
- |
- (?&VALID_ID)
- (?:\s*\.\s*(?&VALID_ID))*
- \s*=
- \s*function
- )
- \s*\( # start-of-parameter-list indicator
- [^)]* # optional parameters
- \) # end-of-parameter-list indicator
- "
- >
- <functionName>
- <nameExpr expr="[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*(?=\s*[(=])" />
- </functionName>
- <className>
- <nameExpr expr="[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*(?:\s*\.\s*[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)*(?=\s*[.:])" />
- </className>
- </function>
- </parser>
- </functionList>
- </NotepadPlus>
|