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.
146 lines
6.8 KiB
146 lines
6.8 KiB
4 years ago
|
<?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>
|
||
|
<!-- ======================================================== [ NSIS ] -->
|
||
|
<!-- NSIS - Nullsoft Scriptable Install System -->
|
||
|
|
||
|
<parser
|
||
|
displayName="NSIS"
|
||
|
id ="nsis_syntax"
|
||
|
>
|
||
|
<classRange
|
||
|
mainExpr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
\b(?-i:SectionGroup)\b # open indicator
|
||
|
(?s:.*?)
|
||
|
\b(?-i:SectionGroupEnd)\b # close indicator
|
||
|
"
|
||
|
>
|
||
|
<className>
|
||
|
<nameExpr expr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
(?m-s)
|
||
|
SectionGroup\h+(?-i:/e\h+)? # start indicator and its optional switch
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
.+$ # whatever, till end-of-line
|
||
|
"
|
||
|
/>
|
||
|
<nameExpr expr="[^\r\n\x22]*" />
|
||
|
</className>
|
||
|
<function
|
||
|
mainExpr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
(?m)
|
||
|
^(?'INDENT'\h*) # optional leading whitespace at start-of-line
|
||
|
(?:
|
||
|
(?-i:!macro)
|
||
|
\h+ # required whitespace separator
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
[^\r\n]*$ # whatever, until end-of-line
|
||
|
|
|
||
|
(?'TAG'(?-i:Function|PageEx|Section))
|
||
|
\h+ # required whitespace separator
|
||
|
(?-i:/o\h+)? # optional switch
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
(?s:
|
||
|
.*? # whatever,
|
||
|
(?= # up till...
|
||
|
^\k'INDENT' # ...equal indent at start-of-line for...
|
||
|
\k'TAG'End\b # ...matching close indicator
|
||
|
)
|
||
|
)
|
||
|
|
|
||
|
\x24\x7B # start-of-open-element indicator
|
||
|
(?'ID'[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)
|
||
|
\x7D # end-of-open-element indicator
|
||
|
\h+ # required whitespace separator
|
||
|
(?-i:/o\h+)? # optional switch
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
(?s:
|
||
|
.*? # whatever,
|
||
|
(?= # up till...
|
||
|
^\k'INDENT' # ...equal indent at start-of-line for...
|
||
|
\x24\x7B\k'ID'End\x7D # ...matching close indicator
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
"
|
||
|
>
|
||
|
<functionName>
|
||
|
<funcNameExpr expr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
(?m)
|
||
|
[^\r\n]+? # whatever,
|
||
|
(?= # up till...
|
||
|
\h* # ...optional whitespace and...
|
||
|
(?:
|
||
|
\x2F\x2A # ...start of multi line comment or...
|
||
|
| [\x23;] # ...start of single line comment or...
|
||
|
| $ # ...end-of-line
|
||
|
)
|
||
|
)
|
||
|
"
|
||
|
/>
|
||
|
</functionName>
|
||
|
</function>
|
||
|
</classRange>
|
||
|
<function
|
||
|
mainExpr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
(?m)
|
||
|
^(?'INDENT'\h*) # optional leading whitespace at start-of-line
|
||
|
(?:
|
||
|
(?-i:!macro)
|
||
|
\h+ # required whitespace separator
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
[^\r\n]*$ # whatever, until end-of-line
|
||
|
|
|
||
|
(?'TAG'(?-i:Function|PageEx|Section))
|
||
|
\h+ # required whitespace separator
|
||
|
(?-i:/o\h+)? # optional switch
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
(?s:
|
||
|
.*? # whatever,
|
||
|
(?= # up till...
|
||
|
^\k'INDENT' # ...equal indent at start-of-line for...
|
||
|
\k'TAG'End\b # ...matching close indicator
|
||
|
)
|
||
|
)
|
||
|
|
|
||
|
\x24\x7B # start-of-open-element indicator
|
||
|
(?'ID'[A-Za-z_\x7F-\xFF][\w\x7F-\xFF]*)
|
||
|
\x7D # end-of-open-element indicator
|
||
|
\h+ # required whitespace separator
|
||
|
(?-i:/o\h+)? # optional switch
|
||
|
\K # keep the text matched so far, out of the overall match
|
||
|
(?s:
|
||
|
.*? # whatever,
|
||
|
(?= # up till...
|
||
|
^\k'INDENT' # ...equal indent at start-of-line for...
|
||
|
\x24\x7B\k'ID'End\x7D # ...matching close indicator
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
"
|
||
|
>
|
||
|
<functionName>
|
||
|
<nameExpr expr="(?x) # Utilize inline comments (see `RegEx - Pattern Modifiers`)
|
||
|
(?m)
|
||
|
[^\r\n]+? # whatever,
|
||
|
(?= # up till...
|
||
|
\h* # ...optional whitespace and...
|
||
|
(?:
|
||
|
\x2F\x2A # ...start of multi line comment or...
|
||
|
| [\x23;] # ...start of single line comment or...
|
||
|
| $ # ...end-of-line
|
||
|
)
|
||
|
)
|
||
|
"
|
||
|
/>
|
||
|
</functionName>
|
||
|
</function>
|
||
|
</parser>
|
||
|
</functionList>
|
||
|
</NotepadPlus>
|