Community
    • Login

    Function list not working

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    6 Posts 3 Posters 2.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • p rP
      p r
      last edited by

      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

      dinkumoilD 1 Reply Last reply Reply Quote 1
      • dinkumoilD
        dinkumoil @p r
        last edited by

        @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.

        1 Reply Last reply Reply Quote 2
        • p rP
          p r
          last edited by

          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>
          ...
          
          PeterJonesP 1 Reply Last reply Reply Quote 1
          • PeterJonesP
            PeterJones @p r
            last edited by

            @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:

            • https://npp-user-manual.org/docs/function-list/
            • https://npp-user-manual.org/docs/config-files/#function-list

            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

            PeterJonesP 1 Reply Last reply Reply Quote 1
            • PeterJonesP
              PeterJones @PeterJones
              last edited by

              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

              1 Reply Last reply Reply Quote 1
              • p rP
                p r
                last edited by

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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors