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.
183 lines
8.1 KiB
183 lines
8.1 KiB
<?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>
|
|
<!-- ======================================================= [ BaanC ] -->
|
|
|
|
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
| Based on:
|
|
| https://notepad-plus-plus.org/community/topic/14494/functionlist-classrange-question
|
|
|
|
|
| Note(s):
|
|
| 1. Boost::Regex 1.58-1.59 do not correctly handle quantifiers on subroutine calls
|
|
| therefore the additional non-capturing group i.e. "(?:(?&COMMENT))?" instead
|
|
| of simply "(?&COMMENT)?"
|
|
\-->
|
|
<parser
|
|
displayName="BaanC Sections"
|
|
id ="baanc_section"
|
|
>
|
|
<classRange
|
|
mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
|
|
(?im) # case-insensitive, ^ and $ match at line breaks
|
|
(?(DEFINE) # definition of sub-routines
|
|
(?'SECTION'
|
|
^\h* # optional leading whitespace at start-of-line
|
|
(?: # known section names
|
|
(?:after|before)\.(?:report\.\d+|\w+(?:\.\w+)*\.\d+)
|
|
| (?:field|zoom\.from)\.(?:all|other|\w+(?:\.\w+)*)
|
|
| (?:footer|group|header)\.\d+
|
|
| choice\.\w+(?:\.\w+)*
|
|
| detail\.\d+
|
|
| form\.(?:all|other|\d+)
|
|
| functions
|
|
| main\.table\.io
|
|
): # end-of-section-header indicator
|
|
)
|
|
(?'SECTION_EMPTY'
|
|
^\h* # optional leading whitespace at start-of-line
|
|
(?: # known `empty` section names
|
|
after\.(?:form\.read|program|receive\.data|update\.db\.commit)
|
|
| before\.(?:(?:display|new)\.object|program)
|
|
| declaration
|
|
| on\.(?:display\.total\.line|error)
|
|
): # end-of-section-header indicator
|
|
)
|
|
)
|
|
(?&SECTION) # section header
|
|
(?s:.*?) # whatever,
|
|
(?= # ...up till
|
|
\s*
|
|
(?:
|
|
(?&SECTION) # ...next section header,
|
|
| (?&SECTION_EMPTY) # ...next `empty` section header
|
|
| \Z # ...or end-of-text
|
|
)
|
|
)
|
|
"
|
|
>
|
|
<className>
|
|
<nameExpr expr="^\h*\K\w+(?:\.\w+)*:" />
|
|
</className>
|
|
<function
|
|
mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
|
|
(?im) # case-insensitive, ^ and $ match at line breaks
|
|
(?(DEFINE) # definition of sub-routines
|
|
(?'COMMENT'
|
|
\s*\x7C[^\r\n]* # trailing comment
|
|
(?: # optional subsequent comment
|
|
(?:\r?\n|\n?\r) # - mandatory line-break
|
|
\s*\x7C[^\r\n]* # - `trailing` comment
|
|
)*
|
|
)
|
|
)
|
|
^\h* # optional leading whitespace at start-of-line
|
|
(?:
|
|
\K # discard text matched so far
|
|
(?: # known sub-section names
|
|
after\.(?:choice|d(?:elete|isplay)|f(?:ield|orm)|group|input|layout|re(?:ad|write)|skip\.(?:delete|(?:re)?write)|write|zoom)
|
|
| before\.(?:ch(?:ecks|oice)|d(?:elete|isplay)|f(?:ield|orm)|group|input|layout|print|re(?:ad|write)|write|zoom)
|
|
| check\.input
|
|
| domain\.error
|
|
| init\.(?:f(?:ield|orm)|group)
|
|
| on\.(?:choice|e(?:ntry|xit)|input)
|
|
| read\.view
|
|
| ref\.(?:display|input)
|
|
| selection\.filter
|
|
| when\.field\.changes
|
|
): # end-of-sub-section-header indicator
|
|
|
|
|
function # keyword, start-of-function-header indicator
|
|
(?:(?&COMMENT))? # optional `embedded` comment
|
|
(?: # optional storage-class specifier
|
|
\s+extern
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
)?
|
|
(?: # optional function type specifier
|
|
\s+(?:
|
|
boolean
|
|
| double
|
|
| long
|
|
| string
|
|
| void
|
|
| domain
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
\s+\w+(?:\.\w+)*
|
|
)
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
)?
|
|
\s+
|
|
\K # discard text matched so far
|
|
\w+(?:\.\w+)* # function identifier
|
|
(?:(?&COMMENT)(?:\r?\n|\n?\r))? # optional `embedded` comment
|
|
\s*\( # start-of-parameter-list indicator
|
|
)
|
|
"
|
|
>
|
|
<functionName>
|
|
<funcNameExpr expr="\w+(?:\.\w+)*(?:\h*:)?" />
|
|
</functionName>
|
|
</function>
|
|
</classRange>
|
|
<function
|
|
mainExpr="(?x) # free-spacing (see `RegEx - Pattern Modifiers`)
|
|
(?im) # case-insensitive, ^ and $ match at line breaks
|
|
(?(DEFINE) # definition of sub-routines
|
|
(?'COMMENT'
|
|
\s*\x7C[^\r\n]* # trailing comment
|
|
(?: # optional subsequent comment
|
|
(?:\r?\n|\n?\r) # - mandatory line-break
|
|
\s*\x7C[^\r\n]* # - `trailing` comment
|
|
)*
|
|
)
|
|
)
|
|
^\h* # optional leading whitespace at start-of-line
|
|
(?:
|
|
\K # discard text matched so far
|
|
(?: # known `empty` section names
|
|
after\.(?:form\.read|program|receive\.data|update\.db\.commit)
|
|
| before\.(?:display\.object|new\.object|program)
|
|
| declaration
|
|
| on\.(?:display\.total\.line|error)
|
|
): # end-of-section-header indicator
|
|
|
|
|
function # keyword, start-of-function-header indicator
|
|
(?:(?&COMMENT))? # optional `embedded` comment
|
|
(?: # optional storage-class specifier
|
|
\s+extern
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
)?
|
|
(?: # optional function type specifier
|
|
\s+(?:
|
|
boolean
|
|
| double
|
|
| long
|
|
| string
|
|
| void
|
|
| domain
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
\s+\w+(?:\.\w+)*
|
|
)
|
|
(?:(?&COMMENT))? # ...with optional `embedded` comment
|
|
)?
|
|
\s+
|
|
\K # discard text matched so far
|
|
\w+(?:\.\w+)* # function identifier
|
|
(?:(?&COMMENT)(?:\r?\n|\n?\r))? # optional `embedded` comment
|
|
\s*\( # start-of-parameter-list indicator
|
|
)
|
|
"
|
|
>
|
|
<functionName>
|
|
<nameExpr expr="\w+(?:\.\w+)*(?:\h*:)?" />
|
|
</functionName>
|
|
</function>
|
|
</parser>
|
|
</functionList>
|
|
</NotepadPlus> |