<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[FunctionList Confused]]></title><description><![CDATA[<p dir="auto">Hello folks,</p>
<p dir="auto">As I’ve mentioned in another thread, I’m trying to figure out the FunctionList and how to write one for another language. I at first chose C++, since that has a mixed parser as does the language I’m trying to do.</p>
<p dir="auto">However, since I don’t know C++ that well, I sought other languages FunctionList, found java had one (which also seems to have a mixed parser .xml file) and got a very simple java program to bring into the NPP editor and…no FunctionList activity occurred other than the name of the file showing up at the head of the list.  My presumption, of couse, is that the Java language/functionlist ability is working since it’s part of the default languages, yet, only syntax highlighting is working, when selected as the language, and the FunctionList only lists the file name. Not the classes or methods in it. So…as the title states, I’m a bit confused now how to structure my language .xml FunctionList.</p>
<p dir="auto">Here is the example program I brought in to the editor:</p>
<pre><code>// Class Declaration
 
public class Dog
{
    // Instance Variables
    String name;
    String breed;
    int age;
    String color;
 
    // Constructor Declaration of Class
    public Dog(String name, String breed,
                   int age, String color)
    {
        this.name = name;
        this.breed = breed;
        this.age = age;
        this.color = color;
    }
 
    // method 1
    public String getName()
    {
        return name;
    }
 
    // method 2
    public String getBreed()
    {
        return breed;
    }
 
    // method 3
    public int getAge()
    {
        return age;
    }
 
    // method 4
    public String getColor()
    {
        return color;
    }
 
    @Override
    public String toString()
    {
        return("Hi my name is "+ this.getName()+
               ".\nMy breed,age and color are " +
               this.getBreed()+"," + this.getAge()+
               ","+ this.getColor());
    }
 
    public static void main(String[] args)
    {
        Dog tuffy = new Dog("tuffy","papillon", 5, "white");
        System.out.println(tuffy.toString());
    }
}
</code></pre>
<p dir="auto">When I ran it look in FunctionList, this is what I see:<br />
<img src="/assets/uploads/files/1638071212177-javafunctionlistfail.png" alt="JavaFunctionListFail.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">As I mentioned, I don’t understand most of the C++ structures, but this Java is close to to the way my language does the code…and yet, even with the internal NPP language/functionList files, it’s not working…so you can see why I’m confused. Is there something I’m missing to make it work properly?</p>
<p dir="auto">Any help in understanding why this isn’t working, and how I can get my functionList project on track would be appreciated.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/topic/22194/functionlist-confused</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 08:57:16 GMT</lastBuildDate><atom:link href="https://community.notepad-plus-plus.org/topic/22194.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Nov 2021 03:49:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to FunctionList Confused on Wed, 12 Jan 2022 01:40:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/guy038" aria-label="Profile: guy038">@<bdi>guy038</bdi></a> ,</p>
<p dir="auto">Thank you. Now, I will have to look at your code, but while I was signed out, I had another one of those epiphany things. :-)</p>
<p dir="auto">Figured it out with the reduced complexity by allowing everything after the <code>this</code> and stopping before the <code>\)</code> with the lookahead, by using this regex:<br />
<code>\Kthis\.\K(.+)(?=\))</code>  By doing this I was able to remove the longer more complex one that only went 3 levels deep, and reducing my or construct by one or level. This is what I can get now:<br />
<img src="/assets/uploads/files/1641951576189-flobjectlistsuccess2.png" alt="FLObjectListSuccess2.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">I think I have a problem with overthinking things. :-) I was looking for the one you showed up there, and I might still be able to use it, somewhere else, so thanks.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72886</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72886</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Wed, 12 Jan 2022 01:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Wed, 12 Jan 2022 00:50:24 GMT]]></title><description><![CDATA[<p dir="auto">Hello, <a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a> and <strong>All</strong>,</p>
<p dir="auto">First I would say that, <strong>again</strong>, I was <strong>completely</strong> mistaken in this post, too :</p>
<p dir="auto"><a href="https://community.notepad-plus-plus.org/post/72550">https://community.notepad-plus-plus.org/post/72550</a></p>
<p dir="auto">So, just forget my <strong>two previous</strong> posts and follow this <strong>simple</strong> rule to <strong>not</strong> add any <strong>code</strong> definition in <strong>comments</strong>, whatever the language used ( <strong><code>built_in</code></strong> or <strong><code>user-defined</code></strong> ) !</p>
<hr />
<p dir="auto">Now, regarding your <strong>IF/ELSE kind of Regex construction</strong>, there is, indeed, a valid <strong><code>IF THEN / ELSE</code></strong>  regex contruction ! Its <strong>general</strong> syntax is :</p>
<p dir="auto"><strong><code>(?ConditionTHEN_part)</code></strong> <em>OR</em> <strong><code>(?ConditionTHEN_part|ELSE_part)</code></strong>, where condition is <strong>either</strong> :</p>
<ul>
<li>
<p dir="auto">A previous <strong>defined group</strong>, named or not</p>
</li>
<li>
<p dir="auto">A <strong>look-around</strong> feature</p>
</li>
<li>
<p dir="auto">A <strong>recursive</strong> pattern</p>
</li>
</ul>
<p dir="auto"><strong>Two</strong> simple examples :</p>
<ul>
<li>The regex <strong><code>(TEST)?123(?(1)===|---)456</code></strong> matches the <strong>TEST123===456</strong> string and any <strong>123—456</strong> string, <strong>whatever</strong> occurs before the <strong>123</strong> part</li>
</ul>
<pre><code class="language-z">TEST123===456
abc123---456
xyz123---456
</code></pre>
<ul>
<li>The regex <strong><code>___((?=TEST)TEST12345|67890)___</code></strong> matches the <strong>two</strong> strings  <strong>___TEST12345___</strong> and <strong>___67890___</strong></li>
</ul>
<pre><code class="language-z">___TEST12345___
___67890___
</code></pre>
<hr />
<p dir="auto">Back to your <strong><code>dbasePlus.xml</code></strong> parser and <strong>assuming</strong> these conditions :</p>
<ul>
<li>I just associated <strong>Normal</strong> text to your <strong><code>dbasePlus.xml</code></strong> parser :</li>
</ul>
<pre><code class="language-xml">		&lt;association id= "dbaseplus.xml"  	 langID= "0"/&gt;	&lt;!-- Normal Text ID  --&gt;
</code></pre>
<p dir="auto">I used this <strong>modified</strong> version :</p>
<pre><code class="language-xml">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!-- ==========================================================================\
|
|   To learn how to make your own language parser, please check the following
|   link:
|       https://npp-user-manual.org/docs/function-list/
|
\=========================================================================== --&gt;
&lt;NotepadPlus&gt;
	&lt;functionList&gt;
		&lt;!-- ========================================================= [ dBASEPlus ] --&gt;
		&lt;parser
			displayName="dBASEPlus"
			id         ="dbaseplus"
			commentExpr="(?s:/\*.*?\*/)|(?-s)^(//|&amp;&amp;).*"
		&gt;
			&lt;classRange
				mainExpr="(?x-i)                        #  Free-spacing mode and inline comments + search sensitive to case

						  ^\h*                          #  Optional leading whitespace chars
						  class                         #  'class' keyword
						  \h?                           #  Optional whitepace char
						  \w+                           #  Class name

														#  Following the class name there is the option of parameters, and if so the first entry inside the parens is required, whether there is other 
														#  parameters or not, once the parens go up, the first is required. ie: class FrameCtrl(frameObj)

						  (                             #  Beginning of the optional parameter(s) part  ( Group 1 )
							\h? \(                      #    Opening parenthesis
							\w+                         #    First and required parameter
							( , \h? \w+)*               #    Following optional/additional parameters
							\)                          #    Closing  parenthesis
						  )?                            #  End of the optional parameter(s) part

														#  For the rest of the class declaration, after the class name, all other options are part of one big optional set, that follows 'of'
														#  and can be populated by one of several options.

						  (?:                           #  Beginning of the main optional part, in a non-capturing group

														#    The first and most prevalent is the Superclass name that the class is being subclassed from, and it's options of parameters and again, 
														#    if it has parameters, at least the first one is required ie.: class ToolButtonFx(oParent) of Toolbutton(oParent).

							\h of \h                    #    Optional 'of' keyword, surrounded by 1 horizontal whitespace char
							\w+                         #    Superclass name

							(?1)?                       #    Optional parameter(s) part ( Subroutine call to Group 1 )

														#    The next possible option is that it is a custom object and needs to be in this line so if the object or form is opened up in the dBASE IDE,
														#    the designers in it won't mess up the object by streaming out missing parts or overriding properties or objects and functions.

							( \h custom )?              #    Optional 'custom' keyword 

														#    The next possible option is that the class is being subclassed from another object that is contained elsewhere and the compiler needs to know
														#    this reference. There are two options for pointing to the file. The first is an Alias path in the IDE that can be accessed by the compiler
														#    in the environment, or second, it is in the current directory and only the name is needed...or it has a path that can be listed here,
														#    but this is bad practice, and an Alias is recommended if the file is in a place other than the current directory. If it is, the name can be
														#    used in quotes as a string that gets passed to the compiler. Both follow the word 'From'. The Alias directory is a name that is enclosed
														#    in two colons, one immediately before the Alias name and one immediately after, no spaces.

							(?:                         #    Beginning of the optional part, in a non-capturing group
							  \h from \h                #      Optional 'from' keyword, surrounded by 1 horizontal whitespace char

							  (?:                       #    Beginning of a non-capturing group
								  : \w+ : \w+ \. \w+    #        First pointing file case
								|                       #      OR
								  \x22 \w+ \. \w+ \x22  #        Second pointing file case
							  )                         #    End of a non-capturing group

							)?                          #    End of the optional part

						  )?                            #  End of the main optional part

						  $                             #  End of current line and end of the class declaration

						  (?s:.*?^\h*endclass)          #  must match all the way to 'endclass'


						 "

				 closeSymbole="endclass"
			&gt;
				&lt;className&gt;
					&lt;nameExpr
						expr="(?x-i)                    #  Free-spacing mode and inline comments and search sensible to case
						      \h*                       #  Optional leading whitespace chars
						      class                     #  'class' keyword
						      \h?                       #  Optional whitepace char
						      \K\w+                     #  Pure class name
						     "
					/&gt;
					
				&lt;/className&gt;
			&lt;function
					mainExpr="(?x-s) 
									
									\h* 
									(?:
									
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ .+
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;funcNameExpr expr="(?x-s)			# multiline/comments
															# (! // | &amp;&amp; | * ) trying to keep following keywords from being included in comments
								\h*							# allow leading spaces
								(?:
									
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure				# must have word 'procedure' as first word
									\h+      				# must have at least one horizontal space after procedure
									\K       				# don't keep 'procedure' in the name of the function in the panel
									(!to)\w+ 				# the name of the function is the first whole word after 'procedure' - 'to'
															# so as to exclude any 'set procedure to' statements, needs work though.
								|
									with					# must have word 'with' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'with' in the name of the function in the panel
									((?=\(this\))\(this\)|.+)$  # If '(this)' exits at CURRENT position then select it ELSE select any NON NULL string till END of LINE
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
			&lt;/classRange&gt;
			&lt;function
					mainExpr="(?x-s) 
									
									\h* 
									(?:
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ .+
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;nameExpr expr="(?x-s)			# multiline/comments
								
								\h*							# allow leading spaces
								(?:
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure
									\h+
									\K
									(!to)\w+
								|
									with					    # must have word 'with' as first word
									\h+						    # must have at least one horizontal space after function
									\K 						    # don't keep 'with' in the name of the function in the panel
									((?=\(this\))\(this\)|.+)$  # If '(this)' exits at CURRENT position then select it ELSE select any NON NULL string till END of LINE
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
		&lt;/parser&gt;
	&lt;/functionList&gt;
&lt;/NotepadPlus&gt;
</code></pre>
<p dir="auto"><strong>Important</strong> note : That it’s just a <strong>first</strong> try to give you some <strong>ideas</strong> !</p>
<p dir="auto">I supposed that, when using the <strong><code>with</code></strong> syntax, you would want either :</p>
<ul>
<li>
<p dir="auto">To see the <strong><code>(this)</code></strong> part if it <strong>exists</strong></p>
</li>
<li>
<p dir="auto">To see anything till the <strong>end</strong> of line if the <strong><code>(this)</code></strong> part is <strong>absent</strong>, after the <strong><code>with </code></strong> and the <strong>blank</strong> char</p>
</li>
</ul>
<p dir="auto">And I did the <strong>modifications</strong>, <strong>both</strong> in the <strong><code>classRange</code></strong> part and in the <strong><code>function</code></strong> parts , using an <strong><code>IF...THEN...ELSE...</code></strong> construction :</p>
<pre><code class="language-xml">									((?=\(this\))\(this\)|.+)$  # If '(this)' exits at CURRENT position then select it ELSE select any NON NULL string till END of LINE
</code></pre>
<p dir="auto">Of course, in order that the parser work <strong>properly</strong>, I had to change this line in the two <strong><code>mainExpr</code></strong> parts :</p>
<pre><code class="language-xml">									with \h+ .+      #  INSTEAD of :   with \h+ \(.*?\)
</code></pre>
<hr />
<p dir="auto">Now, I used the <strong>test</strong> file, below :</p>
<pre><code class="language-z">/*Test_1  OK
*/

/* Test_2  OK
 */

/*  Test_3  OK
*/


//Test_4  OK

// Test_5  OK

//  Test_6  OK


&amp;&amp;Test_7  OK

&amp;&amp; Test_8  OK

&amp;&amp;  Test_9  OK


class ABC
	bla
	blah
	function foo
		bla
		bla
		blah
		with ($^|]!:Test__--~
	blah
	bla
endclass

class XYZ
	bla
	function 123
	bla
    blah
	with (this)
	blah
endclass
BLA

function bar
bla
blah

	with (this)
bla
blaH
with (.This.TESTCONTAINER.)
bla
blah
</code></pre>
<hr />
<ul>
<li>
<p dir="auto">It <strong>correctly</strong> avoids all the <strong>comment</strong> lines, at beginning of file</p>
</li>
<li>
<p dir="auto">It <strong>correctly</strong> displays the classes <strong><code>ABC</code></strong> and <strong><code>XYZ</code></strong></p>
</li>
<li>
<p dir="auto">It <strong>correctly</strong> displays the functions <strong><code>foo</code></strong> and <strong><code>123</code></strong></p>
</li>
</ul>
<p dir="auto">And regarding the <strong>modified</strong> part :</p>
<ul>
<li>
<p dir="auto">If the <strong><code>(this)</code></strong> part exists, after <strong><code>with</code></strong>, it <strong>correctly</strong> displays <strong><code>(this)</code></strong> ( method <strong><code>(this)</code></strong>, in the <strong><code>XYZ</code></strong> class and <strong>single</strong> function <strong><code>this</code></strong> )</p>
</li>
<li>
<p dir="auto">If the <strong><code>(this)</code></strong> part is <strong>absent</strong>, after <strong><code>with</code></strong>, it <strong>correctly</strong> displays <strong>all</strong> the characters till <strong>end</strong> of line ( method <strong><code>($^|]!:Test__--~</code></strong>, in the <strong><code>ABC</code></strong> class and the <strong>single</strong> function <strong><code>(.This.TESTCONTAINER.)</code></strong></p>
</li>
</ul>
<hr />
<p dir="auto">Here is a <strong>screenshot</strong> :</p>
<p dir="auto"><img src="/assets/uploads/files/1641947793433-4b661779-3979-428f-a13b-d8dbb197f762-image.png" alt="4b661779-3979-428f-a13b-d8dbb197f762-image.png" class=" img-fluid img-markdown" /></p>
<hr />
<p dir="auto">Please, take time to <strong>re-read</strong> this post ! <strong>Not</strong> easy to catch everything at <strong>first</strong> glance !</p>
<p dir="auto">Best Regards,</p>
<p dir="auto">guy038</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72885</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72885</guid><dc:creator><![CDATA[guy038]]></dc:creator><pubDate>Wed, 12 Jan 2022 00:50:24 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Tue, 11 Jan 2022 23:40:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Well, success for the most part for the original goals. :-)</p>
<p dir="auto">Of course, as usual, goals shift. :-)</p>
<p dir="auto">I used Peter’s or break down and added additional ones that started with the longest number (in this case, and unfortunately only this case) 3, and had two more or’s with the whole regex up to the point of the opening parens being starting the reset, and changed the capture portion.<br />
<code>\Kthis\.\w+\.\K\w+(?=\))|\)this\.\K\w+(?=\.)|\(\Kthis(?=\))</code> picks off the longest extended name and does it first, followed by the next section with this regex:<br />
<code>\Kthis\.\K\w+(?=\))</code> to pick off any objects immediately after the dot operator following <code>this</code> to capture that object and then folowed by:<br />
<code>\K(.*?)(?=\))</code> which captures the <code>this</code> object before the closing parens.</p>
<p dir="auto">Screenshot of new FunctionList panel at work:<br />
<img src="/assets/uploads/files/1641943926146-flobjectlistsuccess.png" alt="FLObjectListSuccess.PNG" class=" img-fluid img-markdown" /><br />
So this was the original hope of being able to do, but after looking at it, since I can’t do replacement text, it makes sense to keep the object list together past the first one following the <code>this</code>, as that denotes a parent object <code>TESTCONTAINER</code> and the lineage to the child object <code>VSCROLLBAR1</code>.</p>
<p dir="auto">So now my next goal, is to try and check after the initial object after the superparent <code>this</code> is set alone to allow any other objects that have children to continue being sucked into the capture and listed as is, in this case <code>TESTCONTAINER.VSCROLLBAR1</code>.  So back to the drawing board on figure out how to test for a following dot operator without stopping the accumulation from stopping at the point. The look-ahead (positive?) worked to identify and not include the closing paren or the dot operator, so now to test a negative lookahead?</p>
<p dir="auto">Thanks for help so far Peter, et al. It’s fun again for the moment. :-)</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72884</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72884</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Tue, 11 Jan 2022 23:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Mon, 10 Jan 2022 03:08:29 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Any chance that there is an IF/ELSE kind of Regex construction that the FunctionList parser will accept, instead of selecting a capture group, or using OR(|)?</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72824</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72824</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Mon, 10 Jan 2022 03:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Mon, 10 Jan 2022 03:01:24 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a></p>
<p dir="auto">Okay, now we’re cooking with gas. :-)</p>
<p dir="auto">I figured out how to exclude the parens with <code>\K(.*?)(?=\))</code> and here’s what it looks like:<br />
<img src="/assets/uploads/files/1641783500380-flregexminusparensaccomplished.png" alt="FLRegexminusparensAccomplished.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">I fear, however, keeping the <code>this</code> for the first object, and removing it from the rest is going to be a bit harder…but maybe not if I can figure out how to make the or work and figure out how to keep the <code>this</code> keyword if followed by the closing paren, but not if it’s follow by a dot operator, and use the rest of the object description instead. This is kind of fun…and kind of frustrating at the same time. :-)</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72823</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72823</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Mon, 10 Jan 2022 03:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sun, 09 Jan 2022 03:40:54 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Interesting, reversing a different, but similar regex gets me the VSCROLLBAR1 but nothing else.  Hmm… I guess the or operator is not going to get this job done. Hmm.</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72812</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72812</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sun, 09 Jan 2022 03:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sun, 09 Jan 2022 03:04:35 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Well, I have hope I’m on to something here.  Tried a different site to explain some of the look ahead/behind stuff and managed to come up with something that half works. :-)</p>
<p dir="auto">The first half works in that it changes <code>(this)</code> to <code>this</code> in the functionList panel for the first object which is the Form itself.  I used this regex,  probably improperly or need to phrase it differently<code>\(\Kthis(?=\))|[.]\K\w+(?=\))</code> but the OR condition didn’t take, or it did but since the other objects have this with a dot in it, it disqualifed the condition and threw out the final objects instead.  So now this:<br />
<img src="https://community.notepad-plus-plus.org/assets/uploads/files/1641610489706-fltreewithouttryingcapturegroupassign.png" alt=" So now this:" class=" img-fluid img-markdown" /></p>
<p dir="auto">Looks like this:<br />
<img src="/assets/uploads/files/1641697047611-aregexthis.png" alt="ARegexthis.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">I need to figure out how to make the regex choose between supplying the captured group of either <code>this</code> by it’s self, OR if a match works that ends with a dotWordclosingparen, it displays just the word for that Object.</p>
<p dir="auto">If the above screenshot, the <code>(this.TESTCONTAINER.VSCROLLBAR1)</code> is a child object of the TESTCONTAINER, but…the VSCROLLBAR1 is an obect in it’s self. If I can capture the whole thing after <code>this</code> without the parens, but the dot between the two objects that would be considered a success since it at least cleans it up, but I am tryig to just pick off the last object name so the list would just include the objects themselves for navigation purposes when using the FunctionList panel…so I’m still working on it, trying to see how to make it work.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72811</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72811</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sun, 09 Jan 2022 03:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sat, 08 Jan 2022 03:30:00 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Never mind, just saw this section of the FunctionList explanation.<br />
<code>The parser can only search for function names, it will not do regular expression replacement or modification (so you cannot add text to the matching names)</code></p>
<p dir="auto">I guess the question becomes, is there a way to isolate those sections that I do want with regex, and then pose a selection choice <code>this| (foundtext)</code> depending on if there are other names are not.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72786</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72786</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sat, 08 Jan 2022 03:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sat, 08 Jan 2022 03:18:06 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
By the way, the only thing that really changed, was that I got rid of the \K and allowed the Function or Procedure to be included with it’s name. One of the users who has a lot of old dBASE code that he’s porting over to the dBASEPlus has the differentiations, and this helps him quickly identify renaming or recoding the differently named identifiers.  We found and he liked this quirk that the Functions inside comments was doing as he was able to identify them by doing that, but until you showed me how to fix it, he was going to wait until I was able to change it, and once I got the Autocompletion done, it was a matter of minutes before I figured out what to do to return that functionality for him and he’s really grateful for the ability to discern them now. :-)  You’ve a big help already to our community, so thanks.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72785</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72785</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sat, 08 Jan 2022 03:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sat, 08 Jan 2022 02:57:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Okay, it’s a New Year. Back to the regex stuff. :-)</p>
<p dir="auto">I’m trying to remove the Parens from around the <code>this</code> naming that shows the objects in our FunctionList, and am trying to pick off the end name or any combination to display without the <code>this</code>.  I came  up with this regex, that seems to do the job of isolating the last word in the parens and capture it in it’s own capture group, but I seem to be having trouble making it work in side of the functionList regex.</p>
<p dir="auto"><code>([.](\w+)\))</code></p>
<p dir="auto">As this screenshot of <a href="http://Regex101.com" rel="nofollow ugc">Regex101.com</a> shows:<br />
<img src="/assets/uploads/files/1641609845096-flregexminusparens.png" alt="FLRegexminusparens.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">This is what comes up with your regex:<br />
<img src="/assets/uploads/files/1641610489706-fltreewithouttryingcapturegroupassign.png" alt="FLTreeWithoutTryingCaptureGroupassign.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">And what it shows when I try just assigning capture group  2 for the id with this <code>([.](\w+)\)) \2</code> in place of your <code>\( *.? \)</code> regex:<br />
<img src="/assets/uploads/files/1641610625810-fltreetryingcapturegroupassign.png" alt="FLTreeTryingCaptureGroupassign.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">The problem seems to come when I try anything other than the original regex you developed Peter. I tried a couple of things to try and give an option of either this last word or <code>this</code>…kind of like <code>(this | ([.](\w+)\))</code> and most often it comes up with the first <code>(this)</code> object and nothing else, or nothing at all, only functions. Is there a way to isolate the names without the <code>this</code> and the parens like a look-behind thing or am I way off base here?</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72783</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72783</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sat, 08 Jan 2022 02:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sun, 02 Jan 2022 09:39:43 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/guy038" aria-label="Profile: guy038">@<bdi>guy038</bdi></a><br />
Well, before Peter found the problem with my regex, that was my advice to the guy with the problem. :-)</p>
<p dir="auto">Patient: Doctor, it hurts when I do this.<br />
Doctor: Stop doing that, then. That’ll be $50.00, please.</p>
<p dir="auto">Anyway, with  Peter’s help it was fixed, and I’m on to the Auto Completion stuff to try and finish this project within the next few days.</p>
<p dir="auto">Thanks for looking at this, though.  After I get done with the Auto Complete, I have to go back and look at removing the ’<br />
<code>(this.object.object)</code> parens and let it show the final object as the object listed in the FunctionList, so that it looks a little neater, and more in keeping with the present usage of the in IDE editor views…but that’s for playing later, I just want to get the full project done before I start fine tuning things. :-)</p>
<p dir="auto">Happy New Year to  you also, and all the forum dwellers here.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72551</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72551</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Sun, 02 Jan 2022 09:39:43 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sun, 02 Jan 2022 09:39:42 GMT]]></title><description><![CDATA[<p dir="auto">Hi, <a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a> and <strong>All</strong>,</p>
<p dir="auto"><strong>Back</strong> to what I wrote <strong>yesterday</strong>, I realize that my <strong>reasonning</strong> is absolutely <strong>false</strong>. For instance, if I suppose, as does my regex, that the word <strong><code>function</code></strong> must <strong>not</strong> be present in <strong>comments</strong>, this implies that it should be displayed as a <strong>normal</strong> <strong><code>function</code></strong>, i.e. exactly the <strong>opposite</strong> way that I suggested <strong>before</strong> :-((</p>
<p dir="auto">So, inverting the regex <strong>logic</strong>, I should have used the regex :</p>
<p dir="auto"><strong><code>commentExpr="(?s:/\*((?=function|procedure|with \(this\)|endwith).)*?\*/)|(?-s://|&amp;&amp;)((?=function|procedure|with \(this\)|endwith).)*$"</code></strong></p>
<p dir="auto">But, in this case, <strong>normal</strong> comments, <strong>not</strong> containing any code, would <strong>not</strong> be considered as <strong>comments</strong>, too :-((</p>
<hr />
<p dir="auto">So, globally, we should say that the <strong><code>commentExpr</code></strong> tag is <strong>not</strong> acting the way it should ! Indeed, <strong>whatever</strong> occurs, right after the <strong>comment</strong> character(s), it should <strong>always</strong> be considered as a <strong>true</strong> comment !</p>
<p dir="auto">Thus, again, just <strong>forbid</strong> any piece of code in <strong><code>comments</code></strong> !</p>
<p dir="auto">BR</p>
<p dir="auto">guy038</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72550</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72550</guid><dc:creator><![CDATA[guy038]]></dc:creator><pubDate>Sun, 02 Jan 2022 09:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Sat, 01 Jan 2022 23:48:41 GMT]]></title><description><![CDATA[<p dir="auto">hello, <a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a> and <strong>All</strong>,</p>
<p dir="auto">First, I wish an <strong>excellent</strong> year <strong>2022</strong>, to any N++ user, with less <strong><code>COVID-19</code></strong> stories than before !</p>
<hr />
<p dir="auto">Well, <strong>Lycan</strong>, I thought that the kind of regex, below, would <strong>solve</strong> the problem of <strong>false positive</strong> <strong><code>functions</code></strong>, <strong><code>procedures</code></strong> and <strong><code>with (this)</code></strong> things !</p>
<p dir="auto"><strong><code>commentExpr="(?s:/\*((?!function|procedure|with \(this\)|endwith).)*?\*/)|(?-s://|&amp;&amp;)((?!function|procedure|with \(this\)|endwith).)*$"</code></strong></p>
<p dir="auto">Unfortunately, this does <strong>not</strong> work, too ! Indeed, assuming this <em>INPUT</em>  text, in a <strong>new</strong> tab :</p>
<pre><code class="language-z">/*Test_1
*/

//Test_2

&amp;&amp;Test_3

//with (that)

/* Test_4
 */

// Test_5

&amp;&amp; Test_6

// with (that)

/*  Test_7
*/

//  Test_8

&amp;&amp;  Test_9

//  with (that)


//function
//function ABC

&amp;&amp;function DEF

/*function GHI
*/

//with (this)
//endwith

//procedure
//procedure JKL


// function
// function ABC_1

&amp;&amp; function DEF_1

/* function GHI_1
 */

// with (this)
// endwith

// procedure
// procedure JKL_1


//  function
//  function ABC_2

&amp;&amp;  function DEF_2

/*  function GHI_2
  */

//  with (this)
//  endwith

//  procedure
//  procedure JKL_2


//Test this function being caught

// Test this function being caught

//  Test this function being caught


class Test
	bla
	blah
	function toto
		bla
		bla
		blah
	blah
	bla
endclass
</code></pre>
<hr />
<p dir="auto">and using <strong>your</strong> <strong><code>dbasePlus.xml</code></strong> file, with my <strong>new</strong> <strong><code>comments</code></strong> tag, the <strong><code>function list</code></strong> panel does display the <strong><code>class</code></strong> <strong>Test</strong> and the embedded <strong><code>function</code></strong> <strong>Toto</strong>.</p>
<p dir="auto">Now, if you try to see the occurrences of the <strong>associated</strong> regex : <strong><code>(?s:/\*((?!function|procedure|with \(this\)|endwith).)*?\*/)|(?-s://|&amp;&amp;)((?!function|procedure|with \(this\)|endwith).)*$</code></strong>, it’ll <strong>just</strong> highlights, as <strong>expected</strong>, the following lines :</p>
<pre><code class="language-diff">/*Test_1
*/

//Test_2

&amp;&amp;Test_3

//with (that)

/* Test_4
 */

// Test_5

&amp;&amp; Test_6

// with (that)

/*  Test_7
*/

//  Test_8

&amp;&amp;  Test_9

//  with (that)
</code></pre>
<hr />
<p dir="auto">Which are really <strong>true</strong> comments ! Note that <strong><code>//..with (that)</code></strong>  is considered as <strong>true</strong> comment because it’s <strong>different</strong> from <strong><code>with (this)</code></strong></p>
<p dir="auto">However, the <strong><code>commentExpr</code></strong> tag <strong>still</strong> displays the different <strong><code>Functions</code></strong>, <strong><code>procedures</code></strong> and so on, as <strong>valid</strong> values, although they are defined in <strong><code>comment</code></strong> parts !</p>
<p dir="auto">So the <strong>simple</strong> rule to remember is to <strong>forbid</strong> any piece of <strong>code</strong> in <strong><code>comments</code></strong> !</p>
<p dir="auto">Best Regards,</p>
<p dir="auto">guy038</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72542</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72542</guid><dc:creator><![CDATA[guy038]]></dc:creator><pubDate>Sat, 01 Jan 2022 23:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 20:14:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/peterjones" aria-label="Profile: peterjones">@<bdi>peterjones</bdi></a> ,</p>
<p dir="auto">Thanks, that seems to have been the problem. I (mistakenly) though that the caret <code>^</code> meant it had to be the very first character on the line, all the way to the left with no spaces, which is why I didn’t try that. :-(</p>
<p dir="auto">Thanks for that <code>!to</code> fix.  I have to say, both of these issues are the result  that I probably don’t have the understanding of regex usage that I should, and that is definitely on me, so thanks for these fixes I should have caught. :(</p>
<p dir="auto">Anything to help clarity, but really, the manual and the Outline that MAPJe71 lays out, is pretty clear, it’s just kind that if I had followed your process of doing the function first, I wouldn’t have gotten confused thinking the Class fuction finding structure, was the same for the non-Class function finding structure. This might be what I saw in the highlighting of the forum syntax highlighting being the difference, and started searching for bad tags and found it. :)  Fortunate coincidence, maybe, but effective just the same.</p>
<p dir="auto">Thanks a bunch. As one of our programmers in the group always points out, that code always works against the test usage, it’s when it get used against other usage that it breaks.  That was the problem here. While I was testing against the kind of code I write (without commenting out sections) it worked just fine…it wasn’t until someone that does comment out code sections used it that the error came to light. :-)</p>
<p dir="auto">Again, many thanks for the help and hopefully I won’t bother you over the New Year, since other than the hints I’m meticulously going over to put together, this problem <strong>should</strong> be the last regex related one. :-)</p>
<p dir="auto">Happy New Year,<br />
Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72506</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72506</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 20:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 19:08:05 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a> ,</p>
<p dir="auto">The <code>(!to)</code> that you have in there a couple times does <em>not</em> mean what you think it means.  I think you meant to say <code>(?!to)</code> to say a negative lookahead to prevent <code>to</code> from being the next word after <code>procedure</code>.</p>
<p dir="auto">But even that isn’t quite right, because if you had a procedure named <code>todosomething</code>, the <code>procedure \h+ \K (?!to)\w+</code> would eliminate that match.  So we need to force a boundary after that as well, so <code>procedure \h+ \K (?!to\b)\w+</code>: so I think what you want for that alternation in both is</p>
<pre><code>									procedure				# must have word 'procedure' as first word
									\h+      				# must have at least one horizontal space after procedure
									\K       				# don't keep 'procedure' in the name of the function in the panel
									(?!to\b)\w+ 				# the name of the function is the first whole word after 'procedure' - 'to'
															# so as to exclude any 'set procedure to' statements, needs work though.
</code></pre>
<p dir="auto">I don’t know why our comment expressions aren’t working right in your definition given in your <a href="https://community.notepad-plus-plus.org/post/72488">“highlight difference in here” post</a>, because in my simplified definition, that comment expression prevented it completely.  Hmph.</p>
<p dir="auto">Still, we should be able to make it so that <code>set procedure</code> or <code>// procedure</code> or <code>&amp;&amp; procedure</code> will never allow it, by making the function names require a start-of-line before the spaces, so procedure/function/with must be the first non-space on the given line to match.    Yes, adding a <code>^</code> to the beginning of each of the <code>&lt;function mainExpr="..."&gt;</code> attribute values seems to have worked.</p>
<p dir="auto"><img src="/assets/uploads/files/1640891259458-032f3538-c421-41c2-af3e-9c59c9ca5f2b-image.png" alt="032f3538-c421-41c2-af3e-9c59c9ca5f2b-image.png" class=" img-fluid img-markdown" /></p>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!-- ==========================================================================\
|
|   To learn how to make your own language parser, please check the following
|   link:
|       https://npp-user-manual.org/docs/function-list/
|
\=========================================================================== --&gt;
&lt;NotepadPlus&gt;
	&lt;functionList&gt;
		&lt;!-- ========================================================= [ dBASEPlus ] --&gt;
		&lt;parser
			displayName="dBASEPlus"
			id         ="dbaseplus"
			commentExpr="(?s:/\*.*?\*/)|(?m-s:(//|&amp;&amp;).*?$)"
		&gt;
			&lt;classRange
				mainExpr="(?x-i)                        #  Free-spacing mode and inline comments + search sensitive to case

						  ^\h*                          #  Optional leading whitespace chars
						  class                         #  'class' keyword
						  \h?                           #  Optional whitepace char
						  \w+                           #  Class name

														#  Following the class name there is the option of parameters, and if so the first entry inside the parens is required, whether there is other 
														#  parameters or not, once the parens go up, the first is required. ie: class FrameCtrl(frameObj)

						  (                             #  Beginning of the optional parameter(s) part  ( Group 1 )
							\h? \(                      #    Opening parenthesis
							\w+                         #    First and required parameter
							( , \h? \w+)*               #    Following optional/additional parameters
							\)                          #    Closing  parenthesis
						  )?                            #  End of the optional parameter(s) part

														#  For the rest of the class declaration, after the class name, all other options are part of one big optional set, that follows 'of'
														#  and can be populated by one of several options.

						  (?:                           #  Beginning of the main optional part, in a non-capturing group

														#    The first and most prevalent is the Superclass name that the class is being subclassed from, and it's options of parameters and again, 
														#    if it has parameters, at least the first one is required ie.: class ToolButtonFx(oParent) of Toolbutton(oParent).

							\h of \h                    #    Optional 'of' keyword, surrounded by 1 horizontal whitespace char
							\w+                         #    Superclass name

							(?1)?                       #    Optional parameter(s) part ( Subroutine call to Group 1 )

														#    The next possible option is that it is a custom object and needs to be in this line so if the object or form is opened up in the dBASE IDE,
														#    the designers in it won't mess up the object by streaming out missing parts or overriding properties or objects and functions.

							( \h custom )?              #    Optional 'custom' keyword 

														#    The next possible option is that the class is being subclassed from another object that is contained elsewhere and the compiler needs to know
														#    this reference. There are two options for pointing to the file. The first is an Alias path in the IDE that can be accessed by the compiler
														#    in the environment, or second, it is in the current directory and only the name is needed...or it has a path that can be listed here,
														#    but this is bad practice, and an Alias is recommended if the file is in a place other than the current directory. If it is, the name can be
														#    used in quotes as a string that gets passed to the compiler. Both follow the word 'From'. The Alias directory is a name that is enclosed
														#    in two colons, one immediately before the Alias name and one immediately after, no spaces.

							(?:                         #    Beginning of the optional part, in a non-capturing group
							  \h from \h                #      Optional 'from' keyword, surrounded by 1 horizontal whitespace char

							  (?:                       #    Beginning of a non-capturing group
								  : \w+ : \w+ \. \w+    #        First pointing file case
								|                       #      OR
								  \x22 \w+ \. \w+ \x22  #        Second pointing file case
							  )                         #    End of a non-capturing group

							)?                          #    End of the optional part

						  )?                            #  End of the main optional part

						  $                             #  End of current line and end of the class declaration

						  (?s:.*?^\h*endclass)           #  must match all the way to 'endclass'


						 "

				 closeSymbole="endclass"
						 
			&gt;
				&lt;className&gt;
					&lt;nameExpr
						expr="(?x-i)                    #  Free-spacing mode and inline comments and search sensible to case
						      \h*                       #  Optional leading whitespace chars
						      class                     #  'class' keyword
						      \h?                       #  Optional whitepace char
						      \K\w+                     #  Pure class name
						     "
					/&gt;
					
				&lt;/className&gt;
			&lt;function
					mainExpr="(?x-s) 
									^						# peter added ^ to make sure function/procedure/with is first non-whitespace on line
									\h* 
									(?:
									
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ \(.*?\)
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;funcNameExpr expr="(?x-s)			# multiline/comments
															# (! // | &amp;&amp; | * ) trying to keep following keywords from being included in comments
								\h*							# allow leading spaces
								(?:
									
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure				# must have word 'procedure' as first word
									\h+      				# must have at least one horizontal space after procedure
									\K       				# don't keep 'procedure' in the name of the function in the panel
									(?!to\b)\w+ 				# the name of the function is the first whole word after 'procedure' - 'to'
															# so as to exclude any 'set procedure to' statements, needs work though.
								|
									with					# must have word 'with' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'with' in the name of the function in the panel
									\(						# start paren
									.*?						# 'this' or equivalent
									\)						# end paren
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
			&lt;/classRange&gt;
			&lt;function
					mainExpr="(?x-s) 
									^						# peter added ^ to make sure function/procedure/with is first non-whitespace on line
									\h* 
									(?:
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ \(.*?\)
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;nameExpr expr="(?x-s)			# multiline/comments
								
								\h*							# allow leading spaces
								(?:
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure
									\h+
									\K
									(?!to\b)\w+ 				# the name of the function is the first whole word after 'procedure' - 'to'
								|
									with					# must have word 'with' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'with' in the name of the function in the panel
									\(						# start paren
									.*?						# 'this' or equivalent
									\)						# end paren
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
		&lt;/parser&gt;
	&lt;/functionList&gt;
&lt;/NotepadPlus&gt;
</code></pre>
<p dir="auto">Also, I see you again had (but fixed) the confusion between <code>&lt;functionName&gt;&lt;functionNameExpr&gt;</code> in a class vs <code>&lt;functionName&gt;&lt;nameExpr&gt;</code> not in a class.  The FAQ definitely shows it correctly, but I apparently need to clarify that better in the usermanual, because it’s not well-defined there. :-(</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72504</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72504</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Thu, 30 Dec 2021 19:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 18:29:15 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a> said in <a href="/post/72489">FunctionList Confused</a>:</p>
<blockquote>
<p dir="auto">There seems, according to this forum code highlighting, to be a difference in highlighting, that to me, says there’s a typo somewhere</p>
</blockquote>
<p dir="auto">Just a quick FYI: you really shouldn’t rely on this forum’s syntax highlighter to accurately determine whether or not you have valid XML.  It wasn’t built for that.  (The Notepad++ plugin XML Tools would be a much better choice for such checking.)</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72503</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72503</guid><dc:creator><![CDATA[PeterJones]]></dc:creator><pubDate>Thu, 30 Dec 2021 18:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 09:36:39 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Never mind, just remembered it has to have an UNcommented function to show in the list. :-(. DOH!!</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72494</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72494</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 09:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 09:24:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a>,<br />
Equally problematic is that looking at the screenshot now, I just noticed that the Class/Endclass construct, is not showing as a class inside the FunctionList.</p>
<p dir="auto">Hmmm…</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72493</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72493</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 09:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 09:19:45 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Well this is interesting. An overseas (to me) user found that by putting the open and close parens after the function <code>function()</code>, he was able to make the FunctionList not see it. I just tried it out and indeed, it works. Why, I don’ t get it, but apparently it does.<br />
Screenshot1 shows my code outside the class/endclass construct, representing a non-class function inside comments:<br />
<img src="/assets/uploads/files/1640855530469-flcommentwithoutparens.png" alt="FLCommentwithoutparens.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">Screenshot 2 shows that after adding the parens, and reloading the FunctionList, the commented code is now invisible to the FunctionList:<br />
<img src="/assets/uploads/files/1640855614348-flcommentwithparens.png" alt="FLCommentwithparens.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">So, I may have coded my regex improperly (other than the misnaming I did, that I fixed), or this is a weird bug maybe? The same code is used in the Class/Function class range, which is why I enclosed it in a class/endclass construct to see if was persistent or seperately problematic.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72492</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72492</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 09:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 08:56:57 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Well, one of the things I may have just discoverd is that after taking all those functions that were showing inside comments, and putting them in a class/endclass structure, they stopped showing in the functionlist. If I’m correct, then that means the problem may be in the post class function part, since after making them disappear, I copied them outside of the class structure, and they reappeared.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72491</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72491</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 08:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 07:54:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
There seems, according to this forum code highlighting, to be a difference in highlighting, that to me, says there’s a typo somewhere, that I’m not seeing in NPP. Screen 1 shows what looks to be normal, kind of going abnormal:<br />
<img src="/assets/uploads/files/1640850744225-bbcodeshow1.png" alt="BBCodeShow1.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">And then Screen 2 shows what looks like something unclosed or different  and abnormal:<br />
<img src="/assets/uploads/files/1640850821153-bbcodeshow2.png" alt="BBCodeShow2.PNG" class=" img-fluid img-markdown" /></p>
<p dir="auto">Will keep looking and thanks for at least, pointing out it works for you, so I will go back to seeing what the heck happened. errant keypress or whatever.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72489</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72489</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 07:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 07:24:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Testing to see if my change fixed the highlight difference in here:</p>
<pre><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!-- ==========================================================================\
|
|   To learn how to make your own language parser, please check the following
|   link:
|       https://npp-user-manual.org/docs/function-list/
|
\=========================================================================== --&gt;
&lt;NotepadPlus&gt;
	&lt;functionList&gt;
		&lt;!-- ========================================================= [ dBASEPlus ] --&gt;
		&lt;parser
			displayName="dBASEPlus"
			id         ="dbaseplus"
			commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)|(?m-s:\&amp;\&amp;.*?$)"
		&gt;
			&lt;classRange
				mainExpr="(?x-i)                        #  Free-spacing mode and inline comments + search sensitive to case

						  ^\h*                          #  Optional leading whitespace chars
						  class                         #  'class' keyword
						  \h?                           #  Optional whitepace char
						  \w+                           #  Class name

														#  Following the class name there is the option of parameters, and if so the first entry inside the parens is required, whether there is other 
														#  parameters or not, once the parens go up, the first is required. ie: class FrameCtrl(frameObj)

						  (                             #  Beginning of the optional parameter(s) part  ( Group 1 )
							\h? \(                      #    Opening parenthesis
							\w+                         #    First and required parameter
							( , \h? \w+)*               #    Following optional/additional parameters
							\)                          #    Closing  parenthesis
						  )?                            #  End of the optional parameter(s) part

														#  For the rest of the class declaration, after the class name, all other options are part of one big optional set, that follows 'of'
														#  and can be populated by one of several options.

						  (?:                           #  Beginning of the main optional part, in a non-capturing group

														#    The first and most prevalent is the Superclass name that the class is being subclassed from, and it's options of parameters and again, 
														#    if it has parameters, at least the first one is required ie.: class ToolButtonFx(oParent) of Toolbutton(oParent).

							\h of \h                    #    Optional 'of' keyword, surrounded by 1 horizontal whitespace char
							\w+                         #    Superclass name

							(?1)?                       #    Optional parameter(s) part ( Subroutine call to Group 1 )

														#    The next possible option is that it is a custom object and needs to be in this line so if the object or form is opened up in the dBASE IDE,
														#    the designers in it won't mess up the object by streaming out missing parts or overriding properties or objects and functions.

							( \h custom )?              #    Optional 'custom' keyword 

														#    The next possible option is that the class is being subclassed from another object that is contained elsewhere and the compiler needs to know
														#    this reference. There are two options for pointing to the file. The first is an Alias path in the IDE that can be accessed by the compiler
														#    in the environment, or second, it is in the current directory and only the name is needed...or it has a path that can be listed here,
														#    but this is bad practice, and an Alias is recommended if the file is in a place other than the current directory. If it is, the name can be
														#    used in quotes as a string that gets passed to the compiler. Both follow the word 'From'. The Alias directory is a name that is enclosed
														#    in two colons, one immediately before the Alias name and one immediately after, no spaces.

							(?:                         #    Beginning of the optional part, in a non-capturing group
							  \h from \h                #      Optional 'from' keyword, surrounded by 1 horizontal whitespace char

							  (?:                       #    Beginning of a non-capturing group
								  : \w+ : \w+ \. \w+    #        First pointing file case
								|                       #      OR
								  \x22 \w+ \. \w+ \x22  #        Second pointing file case
							  )                         #    End of a non-capturing group

							)?                          #    End of the optional part

						  )?                            #  End of the main optional part

						  $                             #  End of current line and end of the class declaration

						  (?s:.*?^\h*endclass)           #  must match all the way to 'endclass'


						 "

				 closeSymbole="endclass"
						 
			&gt;
				&lt;className&gt;
					&lt;nameExpr
						expr="(?x-i)                    #  Free-spacing mode and inline comments and search sensible to case
						      \h*                       #  Optional leading whitespace chars
						      class                     #  'class' keyword
						      \h?                       #  Optional whitepace char
						      \K\w+                     #  Pure class name
						     "
					/&gt;
					
				&lt;/className&gt;
			&lt;function
					mainExpr="(?x-s) 
									
									\h* 
									(?:
									
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ \(.*?\)
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;funcNameExpr expr="(?x-s)			# multiline/comments
															# (! // | &amp;&amp; | * ) trying to keep following keywords from being included in comments
								\h*							# allow leading spaces
								(?:
									
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure				# must have word 'procedure' as first word
									\h+      				# must have at least one horizontal space after procedure
									\K       				# don't keep 'procedure' in the name of the function in the panel
									(!to)\w+ 				# the name of the function is the first whole word after 'procedure' - 'to'
															# so as to exclude any 'set procedure to' statements, needs work though.
								|
									with					# must have word 'with' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'with' in the name of the function in the panel
									\(						# start paren
									.*?						# 'this' or equivalent
									\)						# end paren
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
			&lt;/classRange&gt;
			&lt;function
					mainExpr="(?x-s) 
									\h* 
									(?:
									function \h+ \w+
									|
									procedure \h+ \w+
									|
									with \h+ \(.*?\)
								)
								\h*
							"
				&gt;
					&lt;functionName&gt;
						&lt;nameExpr expr="(?x-s)			# multiline/comments
								
								\h*							# allow leading spaces
								(?:
									function				# must have word 'function' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'function' in the name of the function in the panel
									\w+						# the name of the function is the first whole word after 'function'
								|
									procedure
									\h+
									\K
									(!to)\w+
								|
									with					# must have word 'with' as first word
									\h+						# must have at least one horizontal space after function
									\K 						# don't keep 'with' in the name of the function in the panel
									\(						# start paren
									.*?						# 'this' or equivalent
									\)						# end paren
								)
							"
						/&gt;
					&lt;/functionName&gt;
				&lt;/function&gt;
		&lt;/parser&gt;
	&lt;/functionList&gt;
&lt;/NotepadPlus&gt;
</code></pre>
]]></description><link>https://community.notepad-plus-plus.org/post/72488</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72488</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 07:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 07:20:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Not sure if I made it worse or not. ::sigh::<br />
The one change I did do, which was changed the <code>funcNameExpr</code> that’s supposed to find just the functions,  to <code>nameExpr</code> seem to change my test set, to lose the Function/Procedure lead names, but they still show, but on the positive side, the <code>set procedure to</code> in my testing program was removed and from being shown, which is a desired result. So, I may be on to something, but those words in the comments <code>Function &lt;name&gt;</code> the <code>&lt;name&gt;</code> part is still showing up, so, I guess I’ll have to play.</p>
<p dir="auto">In the code above, I noticed that my pasted code had different highlighing than it does in NPP, which triggered my finding that I had misnamed the nameExpr. Strange that it didn’t show up on the editor like it does here.</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72487</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72487</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 07:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to FunctionList Confused on Thu, 30 Dec 2021 06:36:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/lycan-thrope" aria-label="Profile: lycan-thrope">@<bdi>lycan-thrope</bdi></a><br />
Awww crap, I think I just saw the problem in this color-coded viewer on the forums. Need to check it out. :(</p>
<p dir="auto">Lee</p>
]]></description><link>https://community.notepad-plus-plus.org/post/72486</link><guid isPermaLink="true">https://community.notepad-plus-plus.org/post/72486</guid><dc:creator><![CDATA[Lycan Thrope]]></dc:creator><pubDate>Thu, 30 Dec 2021 06:36:28 GMT</pubDate></item></channel></rss>