107 lines
4.3 KiB
XML
107 lines
4.3 KiB
XML
|
<?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>
|