Community
    • Login

    [Help] Function list doesn't support my language.

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    15 Posts 2 Posters 4.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.
    • MAPJe71M
      MAPJe71
      last edited by

      Could you supply a code example?

      1 Reply Last reply Reply Quote 0
      • SalviaSageS
        SalviaSage
        last edited by

        @MAPJe71

        This is my code, already integrated into functionlist and working.

        Just need to parse out the comments, so they dont appear in thefunction list.

        		<!-- Basic lua parser for functionList.xml in Notepad++ 6.5.3 -->
        		<!-- See http://notepad-plus-plus.org/features/function-list.html -->
        		<parser id="lua_function" displayName="Lua" commentExpr="--.*?$">
        			<!-- Basic lua table view, nested lua table not supported -->
        			<classRange
        				mainExpr="[.\w]+[\s]*=[\s]*\{"
        				openSymbole="\{"
        				closeSymbole="\}"
        				displayMode="node">
        				<className>
        					<nameExpr expr="[.\w]+"/>
        				</className>
        				<function
        					mainExpr="[.\w]+[\s]*=[\s]*['&quot;]?[\w]+['&quot;]?">
        					<functionName>
        						<funcNameExpr expr=".*"/>
        					</functionName>
        				</function>
        			</classRange>
        			<!-- Basic lua functions support -->
        			<function
        				mainExpr="(function[\s]+[.\w]+(:[\w]+)?)|([.\w]+[\s]*=[\s]*function)"
        				displayMode="$className->$functionName">
        				<functionName>
        					<nameExpr expr="((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))"/>
        				</functionName>
        				<className>
        					<nameExpr expr="[.\w]+(?=:)"/>
        				</className>
        			</function>
        		</parser>
        
        		<!-- ================================================================= -->
        	</parsers>
        </functionList>
        

        </NotepadPlus>

        MAPJe71M 1 Reply Last reply Reply Quote 0
        • MAPJe71M
          MAPJe71 @SalviaSage
          last edited by

          @SalviaSage
          Sigh, a Lua source code example containing function definitions in comment that the parser should not find.

          1 Reply Last reply Reply Quote 0
          • SalviaSageS
            SalviaSage
            last edited by SalviaSage

            This one for example:

            --[[
            	Resize and hide any unusable bag slots in the frame.
            		This function needs to know about the size and layout of the frame
            --]]
            

            “needs” here is recognized as a function because it is right after the word “function”

            and here:
            

            –this function is there so that it can be overriden

            the word "is" is recognized here also.
            MAPJe71M 1 Reply Last reply Reply Quote 0
            • MAPJe71M
              MAPJe71 @SalviaSage
              last edited by

              @SalviaSage
              Change the parsers header from

                      <parser id="lua_function" displayName="Lua" commentExpr="--.*?$">
              

              to

              			<parser
              				displayName="Lua"
              				id         ="lua_function"
              				commentExpr="(?x)                                               # free-spacing (see `RegEx - Pattern Modifiers`)
              								(?s:                                            # Multi Line Comment
              									(?&lt;!-)-{2}                               # - start-of-comment indicator with
              									\x5B(?'MLCLVL'=*)\x5B                       #   ...specific level
              									.*?                                         # - whatever, until
              									\x5D\k'MLCLVL'\x5D                          # - end-of-comment indicator of equal level
              								)
              							|	(?m-s:-{2}.*$)                                  # Single Line Comment
              							|	(?s-m:                                          # String Literal
              									=\s*
              									\x5B(?'SLLVL'=*)\x5B                        # - start-of-string indicator with specific level
              									.*?                                         # - whatever, until
              									\x5D\k'SLLVL'\x5D                           # - end-of-string indicator of equal level
              								)
              							"
              			>
              
              1 Reply Last reply Reply Quote 1
              • SalviaSageS
                SalviaSage
                last edited by

                I just entered this code into the functionlist.xml as such:

                			</parser>
                
                			<!-- Basic lua parser for functionList.xml in Notepad++ 6.5.3 -->
                			<!-- See http://notepad-plus-plus.org/features/function-list.html -->
                			<parser
                				displayName="Lua"
                				id         ="lua_function"
                				commentExpr="(?x)                                               # free-spacing (see `RegEx - Pattern Modifiers`)
                					(?s:                                            # Multi Line Comment
                						(?&lt;!-)-{2}                               # - start-of-comment indicator with
                						\x5B(?'MLCLVL'=*)\x5B                       #   ...specific level
                						.*?                                         # - whatever, until
                						\x5D\k'MLCLVL'\x5D                          # - end-of-comment indicator of equal level
                					)
                				|   (?m-s:-{2}.*$)                                  # Single Line Comment
                				|   (?s-m:                                          # String Literal
                						=\s*
                						\x5B(?'SLLVL'=*)\x5B                        # - start-of-string indicator with specific level
                						.*?                                         # - whatever, until
                						\x5D\k'SLLVL'\x5D                           # - end-of-string indicator of equal level
                					)
                				"
                			>
                
                				<!-- Basic lua table view, nested lua table not supported -->
                				<classRange
                					mainExpr="[.\w]+[\s]*=[\s]*\{"
                					openSymbole="\{"
                					closeSymbole="\}"
                					displayMode="node">
                					<className>
                						<nameExpr expr="[.\w]+"/>
                					</className>
                					<function
                						mainExpr="[.\w]+[\s]*=[\s]*['&quot;]?[\w]+['&quot;]?">
                						<functionName>
                							<funcNameExpr expr=".*"/>
                						</functionName>
                					</function>
                				</classRange>
                				<!-- Basic lua functions support -->
                				<function
                					mainExpr="(function[\s]+[.\w]+(:[\w]+)?)|([.\w]+[\s]*=[\s]*function)"
                					displayMode="$className->$functionName">
                					<functionName>
                						<nameExpr expr="((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))"/>
                					</functionName>
                					<className>
                						<nameExpr expr="[.\w]+(?=:)"/>
                					</className>
                				</function>
                			</parser>
                
                			<!-- ================================================================= -->
                		</parsers>
                	</functionList>
                </NotepadPlus>
                

                It didn’t change anything. I think I indented right.
                It errors on this line <nameExpr expr=“((?<=function)[\s]+[.:\w]+)|(([.\w]+)(?=([\s]*=[\s]*function)))”/>
                according to the online xml validator.

                1 Reply Last reply Reply Quote 0
                • MAPJe71M
                  MAPJe71
                  last edited by

                  Change the ?<= to ?&lt;=.

                  1 Reply Last reply Reply Quote 2
                  • SalviaSageS
                    SalviaSage
                    last edited by

                    I don’t think that worked.

                    1 Reply Last reply Reply Quote 0
                    • MAPJe71M
                      MAPJe71
                      last edited by MAPJe71

                      This one works for me (no classes/tables yet though):

                      			<parser
                      				displayName="Lua w/o Class"
                      				id         ="lua_function"
                      				commentExpr="(?x)                                               # free-spacing (see `RegEx - Pattern Modifiers`)
                      								(?s:                                            # Multi Line Comment
                      									(?&lt;!-)-{2}                               # - start-of-comment indicator with
                      									\x5B(?'MLCLVL'=*)\x5B                       #   ...specific level
                      									.*?                                         # - whatever, until
                      									\x5D\k'MLCLVL'\x5D                          # - end-of-comment indicator of equal level
                      								)
                      							|	(?m-s:-{2}.*$)                                  # Single Line Comment
                      							|	(?s-m:                                          # String Literal
                      									=\s*
                      									\x5B(?'SLLVL'=*)\x5B                        # - start-of-string indicator with specific level
                      									.*?                                         # - whatever, until
                      									\x5D\k'SLLVL'\x5D                           # - end-of-string indicator of equal level
                      								)
                      							"
                      			>
                      				<function
                      					mainExpr="(?x)                                              # free-spacing (see `RegEx - Pattern Modifiers`)
                      							(?m)                                                # ^ and $ match at line-breaks
                      							(?:
                      								^\h*                                            # optional leading white-space at start-of-line
                      								(?-i:local\s+)?
                      								(?-i:function)
                      								\s+[A-Za-z_]\w*
                      								(?:\.[A-Za-z_]\w*)*
                      								(?::[A-Za-z_]\w*)?
                      							|
                      								\s*[A-Za-z_]\w*
                      								(?:\.[A-Za-z_]\w*)*
                      								\s*=
                      								\s*(?-i:function)
                      							)
                      							\s*\([^()]*\)
                      						"
                      				>
                      					<functionName>
                      						<nameExpr expr="(?&lt;=\bfunction\b)\s+[A-Za-z_][\w.:]*\s*\(|[A-Za-z_][\w.]*\s*=" />
                      						<nameExpr expr="[A-Za-z_][\w.:]*" />
                      					</functionName>
                      				</function>
                      			</parser>
                      
                      1 Reply Last reply Reply Quote 1
                      • SalviaSageS
                        SalviaSage
                        last edited by

                        I just tested this new code here, and it doesn’t catch the comments or the strings incorrectly.

                        Thanks a lot for this!

                        I am trying to combine the table support from the code above into this new code.

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