Function list not working



  • Hi,
    the function list is not working for me an I can’t understand why not. No error message, only empty function list.
    The local conf mode is ON.

    I have added this to the overrideMap.xml:

    <association id= "pml.xml" 				userDefinedLangName="PML"/>
    

    this is my pml.xml (in …/Notepad++/functionlist

    <?xml version="1.0" encoding="UTF-8" ?>
    <NotepadPlus>
        <functionList>
            <parsers>
    			<parser
    				displayName="PML"
    				id         ="pml_function"
    				commentExpr="(--$*)"
    			>
                    <function
                    mainExpr="^define method"
                    displayMode="$functionName$">
                    <functionName>
                        <nameExpr expr=".*"/>
                    </functionName>
    				</function>
                </parser>
            </parsers>
        </functionList>
    </NotepadPlus>
    

    After some tests I reduce the regex to simple expression to see something :-(
    Here is an example of my PML code( for AVEVA programming language)

    Here is an example of my pml code:

    define method .goto()
    	!Selection = !this.elements.Selection()
    	if !Selection.empty() then
    		!!alert.error('Noting selected!')
    		return
    	elseif !Selection.size() gt 1 then
    		!!alert.error('More then 1 Element selected. Goto is not possible')
    		return	
    	endif
    	!!CE = !Selection[1].dbref()
    	
    endmethod
    

    The method goto should be in the function list
    I hope someone can help me that I can see something in the function list, that I finalize the regex expr. Unfortunately I am not familiar with regex :-(, but I want to learn
    Greetings, Peter



  • @p-r

    To get a working function list you also need to define a User Defined Language (UDL), i.e. a user defined lexer for syntax highlighting. Have a look at the Notepad++ manual to learn how to do that.



  • Of course, I have forgotten, I have already. This PML.xml is in the …Notepad++\userDefineLangs and it works fine

    <NotepadPlus>
        <UserLang name="PML" ext="pmldat pmlfrm pmlfnc pmlobj pmlmac pml mac pmlcmd" udlVersion="2.1">
            <Settings>
                <Global caseIgnored="no" allowFoldOfComments="no" foldCompact="no" forcePureLC="0" decimalSeparator="0" />
                <Prefix Keywords1="yes" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="no" Keywords6="no" Keywords7="no" Keywords8="no" />
            </Settings>
            <KeywordLists>
    ...
    


  • @p-r ,

    You don’t say specifically which version of Notepad++ you have, but since you mention overrideMap.xml, then I assume you are using Notepad++ v7.9.2 or newer. If this is correct, then you are not using the right syntax in the .../Notepad++/functionList/pml.xml file: there shouldn’t be a <parsers>...</parsers> wrapper around the <parser...>...</parser>. See the official references in the Online User Manual:

    When I remove that extra tag from the XML and reload Notepad++, it works for me:
    8a25d200-198a-4ec4-996b-891e665fce29-image.png

    <?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>
    		<parser
    			displayName="PML"
    			id         ="pml_function"
    			commentExpr="(--$*)"
    		>
    			<function
    			mainExpr="^define method"
    			displayMode="$functionName$">
    			<functionName>
    				<nameExpr expr=".*"/>
    			</functionName>
    			</function>
    		</parser>
    	</functionList>
    </NotepadPlus>
    

    Well, it “works” in that it displays an entry for the one method defined in your example code. I don’t think you have the regex grabbing enough, so you’ll want to experiment with that. But this is enough to get you to the point where the functionList will display something



  • Expanded examples:

    include “define method” in the FunctionList panel

    <?xml version="1.0" encoding="UTF-8" ?>
    <NotepadPlus>
    	<functionList>
    		<parser
    			displayName="PML"
    			id         ="pml_function"
    			commentExpr="(--$*)"
    		>
    			<function
    				mainExpr="(?x)                                              # Utilize inline comments (see `RegEx - Pattern Modifiers`)
    						define                                              # literal text
    						\s+                                                 # one or more spaces
    						method                                              # literal text
    						\s+                                                 # one or more spaces
    						[\.A-Za-z_]                                         # a dot or letter or underscore
    						[\.\w]*                                             # zero or more dot or word character (letter, underscore, number)
    					"
    			>
    				<functionName>
    					<nameExpr expr="(?x)                                              # Utilize inline comments (see `RegEx - Pattern Modifiers`)
    						define                                              # literal text
    						\s+                                                 # one or more spaces
    						method                                              # literal text
    						\s+                                                 # one or more spaces
    						[\.A-Za-z_]                                         # a dot or letter or underscore
    						[\.\w]*                                             # zero or more dot or word character (letter, underscore, number)
    					" />
    				</functionName>
    			</function>
    		</parser>
    	</functionList>
    </NotepadPlus>
    

    6e283220-a413-4466-8387-324812a9a451-image.png

    don’t include “define method” in the FunctionList panel

    <?xml version="1.0" encoding="UTF-8" ?>
    <NotepadPlus>
    	<functionList>
    		<parser
    			displayName="PML"
    			id         ="pml_function"
    			commentExpr="(--$*)"
    		>
    			<function
    				mainExpr="(?x)                                              # Utilize inline comments (see `RegEx - Pattern Modifiers`)
    						define                                              # literal text
    						\s+                                                 # one or more spaces
    						method                                              # literal text
    						\s+                                                 # one or more spaces
    						[\.A-Za-z_]                                         # a dot or letter or underscore
    						[\.\w]*                                             # zero or more dot or word character (letter, underscore, number)
    					"
    			>
    				<functionName>
    					<nameExpr expr="(?x)                                              # Utilize inline comments (see `RegEx - Pattern Modifiers`)
    						define                                              # literal text
    						\s+                                                 # one or more spaces
    						method                                              # literal text
    						\s+                                                 # one or more spaces
    						\K                                                  # RESEST MATCH: only pattern _after_ here will be in FunctionList
    						[\.A-Za-z_]                                         # a dot or letter or underscore
    						[\.\w]*                                             # zero or more dot or word character (letter, underscore, number)
    					" />
    				</functionName>
    			</function>
    		</parser>
    	</functionList>
    </NotepadPlus>
    

    6183a150-e908-4dea-964e-8a77c0dc1df0-image.png



  • Thank you very much.
    Wonderfull.
    Yes, of course, the <parsers>…</parsers> was the problem… holy shit
    Nice weekend
    Greetings
    Peter Ritzmann


Log in to reply