• Login
Community
  • Login

autoCompletion Issue

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
28 Posts 6 Posters 2.6k 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.
  • J
    José Luis Montero Castellanos @Lycan Thrope
    last edited by Oct 28, 2022, 6:58 PM

    @Lycan-Thrope
    Thanks:
    Precisely I am working on xBase, a derivative of dBase called HMG or Harbor MiniGUI, I want to clarify that if a command like BROWSE, I registered it in the file in uppercase.

    <KeyWord name="BROWSE"/>
    

    And I want it to be returned or auto-completed in uppercase, because it seems appropriate to me to keep commands or keywords in uppercase.

    My idea has more to do with keyboard input, it doesn’t matter if I write “browse” in lowercase, the Lexer recognizes it and returns it to me in uppercase “BROWSE”.

    Anyway, I’ll take your suggestion into account.

    L 1 Reply Last reply Oct 31, 2022, 6:03 AM Reply Quote 1
    • J
      José Luis Montero Castellanos @Ekopalypse
      last edited by Oct 28, 2022, 7:04 PM

      @Ekopalypse
      Good day.
      I’m going to take a look at the sql.xml, see what I can deduce from it. The language is a derivative of SQL, it’s dBase, I think you know it.

      J 1 Reply Last reply Oct 28, 2022, 8:03 PM Reply Quote 0
      • J
        José Luis Montero Castellanos @José Luis Montero Castellanos
        last edited by Oct 28, 2022, 8:03 PM

        @José-Luis-Montero-Castellanos
        Hello, first of all, thank you for your contribution.

        As I told my friend @Lycan-Thrope, My idea has more to do with keyboard input, that it doesn’t matter if I type “browse” in lowercase, The Lexer should recognize it in the hmgui.xml (language autoComplete) file and return it to me in uppercase letters “BROWSE”.

        729fd9ff-5a8a-4e9c-9124-f7fe2211c0d3-imagen.png

        It seems that the <Environment ignoreCase="yes".../> attribute has more to do with pleasing the language compiler than with making typing and auto-completion easier.

        As you can see the ordering is valid -> ACCEPT, aClone, ADDITIVE, APPEND, BROWSE and cDow.

        Finally, ? Debug

        Notepad++ v7.9.2   (32-bit)
        Build time : Dec 31 2020 - 03:58:36
        Path : D:\PR\Notepad++\notepad++.exe
        Admin mode : ON
        Local Conf mode : ON
        OS Name : Windows 7 Ultimate (64-bit) 
        OS Build : 7601.0
        Current ANSI codepage : 1252
        Plugins : mimeTools.dll NppConverter.dll NppExport.dll 
        
        P 1 Reply Last reply Oct 28, 2022, 9:01 PM Reply Quote 0
        • P
          PeterJones @José Luis Montero Castellanos
          last edited by Oct 28, 2022, 9:01 PM

          @José-Luis-Montero-Castellanos said in autoCompletion Issue:

          Notepad++ v7.9.2 (32-bit)

          There’s a problem. There was an auto-completion ignore-case bug that was fixed in v8.0. So v7.9.2 will have that bug. You will have to update if you want a chance of it working.

          1 Reply Last reply Reply Quote 1
          • J
            José Luis Montero Castellanos @PeterJones
            last edited by Oct 28, 2022, 9:05 PM

            @PeterJones
            Hello,
            I read your suggestion on Tips for a correct sorting - I installed the most recent version of Notepad++ and it works fine for me, as I wanted (Thank you very much! :). The version I had, v7.92 latest for XP was to be able to run the program from multiple partitions (different windows systems).

            Now, I have to install Notepad++ twice, once for XP and once for (Win7 - 10) . Fortunately, it does not take up much space.

            I wish you the best in your work, good day.

            1 Reply Last reply Reply Quote 1
            • L
              Lycan Thrope @PeterJones
              last edited by Lycan Thrope Oct 31, 2022, 6:08 AM Oct 31, 2022, 5:24 AM

              @PeterJones ,

              To be fair, I believe I was creating that UDL before the 8.0 versions, and the problem was existent then to me, as dBASE, FoxPro, the one the OP mention, all use caps for command words, if you follow the language’s typographic style. Many of the commands were from when dBASE was simply a procedural language, but when it became OOP, it became a bit more nuanced as the following snippet shows:

              DELETE is a command
              delete is a property
              DELETED( ) is a function
              delete( ) is a method
              
              

              The language itself is NOT case sensitive, so my attempt was to make the UDL not work counter to the programmer’s style. Some kept the typographical style, others didn’t and I didn’t want to force a change of it, since dBASE Plus the OOP version, can still be used with some of the older langauge commands and such. Though internally many have been made OOP, they allow programmers of the language to still use the “procedural” commands in the environment.

              In light of your showing the camelHump style, I may have to revisit this issue later, but when I finished, it was done that way to not interfere with the programmer’s choice of how the UDL should respect their choice of case, upper or lower.

              When I was doing the UDL, the multi word commands also had to be done lexicographically and in case order, at the beginning of the file, because of the included hex codes to enable it to be sorted properly using the required separation of &#xa0; between words and have them sorted and chosen.

              When I did the UDL, that’s the way I ended up having to arrange things with the ignoreCase=“no”

              This is the command section at the top of the file, where that sequence is used for multi-word commands and switches from the upper case to the lower case versions. After the special characters were done, then the continuation of the alphabetical upper and then lower case were done for the single word commands and function from there also.

              <KeyWord name="SET&#xa0;SKIP"/>
              <KeyWord name="SET&#xa0;SPACE"/>
              <KeyWord name="SET&#xa0;TIME"/>
              <KeyWord name="SET&#xa0;UNIQUE"/>
              <KeyWord name="SET&#xa0;VIEW"/>
              <KeyWord name="STORE&#xa0;AUTOMEM"/>
              <KeyWord name="UPDATE&#xa0;ON"/>
              <KeyWord name="alter&#xa0;table"/>
              <KeyWord name="append&#xa0;automem"/>
              <KeyWord name="append&#xa0;from"/>
              <KeyWord name="append&#xa0;from&#xa0;array"/>
              <KeyWord name="append&#xa0;memo"/>
              <KeyWord name="clear&#xa0;all"/>
              

              Like said, I did the dual list in order so as not to change the way the programmer chose to type his case style.

              J 1 Reply Last reply Nov 3, 2022, 1:02 PM Reply Quote 0
              • L
                Lycan Thrope @José Luis Montero Castellanos
                last edited by Oct 31, 2022, 6:03 AM

                @José-Luis-Montero-Castellanos ,

                As I mention in my response to Peter, besides the base language of the procedural elements, I also had to work with the aspects of dBASE Plus being an OOP language but still being able to use the older commands in programs also. My problem, however, was that I did not want to force the typographical style on the programmers, because the language as you know is NOT case sensitive…at least dBASE wasn’t, so since the language has expanded it didn’t make sense to try and force a case insensitive language to act like a case sensitive language enforced editor. So to keep the choice with the programmer, I duplicated the keyword and function completion list with the ignorecase = no setting, and left the choice of case typing to the programmer while also making them available in either typed format.

                I’m glad Peter’s help has perhaps solved your problem, for you. God luck.

                P 1 Reply Last reply Oct 31, 2022, 1:13 PM Reply Quote 0
                • P
                  PeterJones @Lycan Thrope
                  last edited by Oct 31, 2022, 1:13 PM

                  @Lycan-Thrope ,

                  To be fair, I believe I was creating that UDL before the 8.0 versions

                  Glad you were able to work around the bugs that were present before v8.0.

                  If you need to use older N++ for unknown reasons, or if ignoreCase="yes" gives you more flexibility in some dimension even though it requires you to duplicate keywords in various cases, then feel free to keep doing it in that way, even in v8.0 and beyond.

                  My only intention with my brief assessment was to explain that indeed, there was a bug related to ignoreCase="yes" prior to v8.0, and that if anyone wants the proper ignoreCase="yes" behavior in Notepad++ auto-completion, they need to use v8.0 or newer.

                  1 Reply Last reply Reply Quote 2
                  • J
                    José Luis Montero Castellanos @Lycan Thrope
                    last edited by Nov 3, 2022, 1:02 PM

                    Thanks again.
                    Although I was able to solve the problem, your last suggestions still work for me, for example, I didn’t know how to insert spaces where I needed them in commands like “SET ALTERNATE TO” - I had replaced it with the underscore _ (SET_ALTERNATE_TO) which would later remove. I’ll try with &#xa0; and then I’ll tell you :)

                    P L 3 Replies Last reply Nov 3, 2022, 1:07 PM Reply Quote 0
                    • P
                      PeterJones @José Luis Montero Castellanos
                      last edited by PeterJones Nov 3, 2022, 1:08 PM Nov 3, 2022, 1:07 PM

                      @José-Luis-Montero-Castellanos said in autoCompletion Issue:

                      I had replaced it with the underscore _ (SET_ALTERNATE_TO) which would later remove. I’ll try with &#xa0;

                      That will just mean instead of having to later remove the _ after auto-completion is done, you would have to later remove the non-breaking-space (U+00A0) – maybe with FIND = \xA0 and REPLACE = \x20 and mode = regular-expression (or type a space in the replace string, but that cannot be copy/pasted from the forum). Well, unless your language happens to treat the non-breaking-space character the same as other whitespace (like space or tab) between code tokens. I haven’t seen a language that accepts nbsp as a token-separator, but that doesn’t mean it doesn’t exist.

                      J 1 Reply Last reply Nov 3, 2022, 1:35 PM Reply Quote 0
                      • J
                        José Luis Montero Castellanos @PeterJones
                        last edited by Nov 3, 2022, 1:35 PM

                        Good morning.
                        What I understand is that I have to do the manual work of search and replace in the same way, since the space is understood to be visible, but different from \x20. I have to try compiling with \xA0 to see what happens or find another solution. Or make a request to the Npp programmer to see if it’s possible or keep it in mind, Which would also work for SQL and derivatives.

                        I was surprised by your quick response :) Thank you…

                        A 1 Reply Last reply Nov 3, 2022, 2:08 PM Reply Quote 0
                        • A
                          Alan Kilborn @José Luis Montero Castellanos
                          last edited by Nov 3, 2022, 2:08 PM

                          @José-Luis-Montero-Castellanos

                          I suppose that a script that converted \xA0 characters to \x20 on every user save might be handy?

                          J 1 Reply Last reply Nov 3, 2022, 2:41 PM Reply Quote 0
                          • J
                            José Luis Montero Castellanos @Alan Kilborn
                            last edited by Nov 3, 2022, 2:41 PM

                            @Alan-Kilborn , Hi :)
                            I guess so, I was thinking of an Npp macro, good use of RegEx, a keyboard shortcut, and leave the manual work for writing the code.

                            A 1 Reply Last reply Nov 3, 2022, 2:51 PM Reply Quote 0
                            • A
                              Alan Kilborn @José Luis Montero Castellanos
                              last edited by Nov 3, 2022, 2:51 PM

                              @José-Luis-Montero-Castellanos said in autoCompletion Issue:

                              I was thinking of an Npp macro, good use of RegEx, a keyboard shortcut

                              True, but then you have to remember to run it.
                              With a script it becomes just something that tags along when you save.
                              But also, you could include “save” as the final action in your macro, and just replace the default Ctrl+s save functionality with the running of your macro (to make it no-brainer automatic).

                              1 Reply Last reply Reply Quote 0
                              • L
                                Lycan Thrope @José Luis Montero Castellanos
                                last edited by Lycan Thrope Nov 3, 2022, 7:17 PM Nov 3, 2022, 7:12 PM

                                @José-Luis-Montero-Castellanos ,
                                You’re welcome. I mentioned that particular aspect because that was maddening to me when I was building the autoCompletion list, and trying to keep them sorted and in some kind of consistent order, because when I was building it, one sequence out of order and the list would refuse to run. :(

                                Here’s a screenshot of that part of “Set” keywords in the autoCompletion dropdown list so it shows and inserts what you see, without any additional cleanup code:

                                SpaceSortingInXbaseLang.PNG

                                It took a lot of work with @PeterJones, @guy038 , @Alan-Kilborn , @Ekopalypse and others to learn all the nuances at the time that had to be overcome to make the language work with many of the features available in NPP for a UDL, short of building a lexer for it, like you’re doing now. :)

                                1 Reply Last reply Reply Quote 2
                                • L
                                  Lycan Thrope @José Luis Montero Castellanos
                                  last edited by Lycan Thrope Nov 3, 2022, 7:36 PM Nov 3, 2022, 7:29 PM

                                  @José-Luis-Montero-Castellanos ,

                                  Here’s an additional screenshot, showing it using the lower case display:

                                  SpaceSortingInXbaseLangLowerCase.PNG

                                  Notice that the list isn’t the same, because some functions and methods used in the OOP version, don’t have capital counterparts, because when they’re used, they usually get inserted after a ., which doesn’t happen with strict procedural parts of the langauge, so if someone typed, for instance the SET command, and then a period, it wouldn’t show in the dropdown box, because there is no existent equivalent in the language. However if someone created one, then it would show in the dropdown list as previous words in the document, and allow them to reselect it. It took a while to figure out how to make NPP capabilities and dBASE’s OOP language extensions work together without forcing strict adherence to typographical conventions. :)

                                  J 1 Reply Last reply Nov 3, 2022, 9:26 PM Reply Quote 0
                                  • J
                                    José Luis Montero Castellanos @Lycan Thrope
                                    last edited by Nov 3, 2022, 9:26 PM

                                    @Lycan-Thrope
                                    Hey, hey :¬) …
                                    It makes me feel like I’m reinventing the wheel, and I clarify that I’m not creating a lexer, just creating the auto-complete list, if you have any, it could save me time, or serve me as a guide. I tell you that I got the list to work in mode ignoreCase="yes" - I already filled the descr="abcd...", Npp’s RegEx engine and an index of Commands and Functions saved me days of hard work. I just need to fill in the parameters and return values. (handwork). The lexer thing, it’s still too big for me :¬(

                                    L 1 Reply Last reply Nov 3, 2022, 9:29 PM Reply Quote 1
                                    • L
                                      Lycan Thrope @José Luis Montero Castellanos
                                      last edited by Lycan Thrope Nov 3, 2022, 9:31 PM Nov 3, 2022, 9:29 PM

                                      @José-Luis-Montero-Castellanos ,
                                      I meant, that you’re making a UDL feature like I was, not a Lexer. Sorry if that wasn’t clear. Yes a Lexer was going to be too much for me, too…but this is almost as big. :)

                                      J 1 Reply Last reply Nov 3, 2022, 9:35 PM Reply Quote 0
                                      • J
                                        José Luis Montero Castellanos @Lycan Thrope
                                        last edited by José Luis Montero Castellanos Nov 3, 2022, 9:44 PM Nov 3, 2022, 9:35 PM

                                        @Lycan- I understand.
                                        If you are interested, now or when I have it completely ready, I will send it to you. For now I’m trying the suggestions…

                                        By the way, I’m missing the syntax coloring list (userDefineLanguage). One I downloaded (hmg.xml) doesn’t meet my expectations, I want one for dark themes.

                                        L 1 Reply Last reply Nov 4, 2022, 1:34 AM Reply Quote 0
                                        • L
                                          Lycan Thrope @José Luis Montero Castellanos
                                          last edited by Lycan Thrope Nov 4, 2022, 1:53 AM Nov 4, 2022, 1:34 AM

                                          @José-Luis-Montero-Castellanos ,

                                          Well, I took a look at the Harbor language part and checked out the documentation about the commands and such, and sorry to say, the two aren’t really similar enough for you to do cut and paste since a lot of it is based on the older Xbase procedural and Clipper extensions styles and not true OOP, which seems closer in coding to a C++ style of object creation and such…and honestly, most of the links for Harbour were dead end 404 pages that I tried to follow from Wikipidia and search engines.

                                          What I can give you is a view of a few of the Xbase commands and how it should look, but I’m afraid the hard work is going to be yours to collect all the languages commands and put in to the autoCompletion file in the order you need.

                                          <KeyWord name="DELETE"/>
                                          <KeyWord name="DELETED" func="yes">
                                          	<Overload retVal="{lVal}" descr="Xbase - 
                                          		Indicates if the current record is marked as deleted.">
                                          		<Param name="[&lt;alias&gt;]"/>
                                          	</Overload>
                                          </KeyWord>
                                          <KeyWord name="DESCENDING" func="yes">
                                          	<Overload retVal="{lVal}" descr="Xbase - 
                                          		Indicates if a specified index is in descending order.">
                                          		<Param name="[&lt;.mdx filename expC&gt;]"/>
                                          		<Param name="[&lt;index position expN&gt;"/>
                                          		<Param name="[&lt;alias&gt;]]"/>
                                          	</Overload>
                                          </KeyWord>
                                          

                                          Notice the keyword only gets that one line entry, but functions /methods get the multiple line entry, and if any of the commands have multiple application you can add multiple Overload sections to expand it so that each will show up in the drop box when you type the first parenthesis that triggers the description/tips for the chosen word when it is meant to be used as a function/method rather than a command word. Note that it says 1 of 4 because there are 4 uses/variations of the command to choose from if you use the tip call to follow the hints of parameters to enter as shown in the below screenshot.

                                          MultiOverloadDisplay.PNG

                                          Note also, the previous code clip where the word is DELETE in caps, and there is no multiple Overload sections…that’s because when it’s used as anything other than a command, it won’t be in capitals, so it may have a lower case equivalent, but the lower case function/method use won’t have an uppercase equivalent.

                                          <KeyWord name="delete"/>
                                          <KeyWord name="delete" func="yes">
                                          	<Overload retVal="{null}" descr="Method - Deletes the current row.
                                          	Property of: Rowset, ArrayRowset
                                          	Usage: &lt;oRef&gt; .delete() - &lt;oRef&gt;  = The rowset whose current row you want to delete.">
                                          	<Param name=""/>
                                          	</Overload>
                                          	<Overload retVal="{null}" descr="Method - Deletes an element from
                                          	a one-dimensional array, or deletes a row or column of elements
                                          	from a two-dimensional array. 
                                          	Property of: Array
                                          	Usage: &lt;oRef&gt; .delete(&lt;position expN&gt;  [, &lt;row/column expN&gt; ]) - 
                                          	&lt;oRef&gt;  = A reference to the one- or two-dimensional
                                          	array from which you want to delete data.
                                          	&lt;position expN&gt;  - When the array is a one-dimensional array, &lt;position expN&gt; 
                                          	specifies the number of the element to delete.
                                          	When the array is a two-dimensional array, &lt;position expN&gt;  specifies the number
                                          	of the row or column whose elements you want to delete.
                                          	[&lt;row/column expN&gt; ] - Either 1 or 2. If you omit this argument or specify 1,
                                          	a row is deleted from a two-dimensional array. If you specify 2, a column is deleted.">
                                          	<Param name="&lt;position expN&gt; "/>
                                          	<Param name="&lt;row/column expN&gt; "/>
                                          	</Overload>
                                          	<Overload retVal="{null}" descr="Method - Removes a file from a disk,
                                          	optionally sending it to the Recycle Bin.
                                          	Property of: File
                                          	Usage: &lt;oRef&gt; .delete(&lt;filename expC&gt;  [, &lt;recycle expL&gt; ]) - 
                                          	&lt;oRef&gt;  = A reference to a File object.
                                          	&lt;filename expC&gt;  - Identifies the file to remove.
                                          	[&lt;recycle expL&gt; ] - Whether to send the file to the Recycle Bin instead of deleting it.
                                          	If omitted, the file is deleted.">
                                          	<Param name="&lt;filename expC&gt; "/>
                                          	<Param name="[&lt;recycle expL&gt; ]"/>
                                          	</Overload>
                                          	<Overload retVal="{null}" descr="Method - Deletes the rows in the destination
                                          	that are listed in the source.
                                          	Property of: UpdateSet
                                          	Usage: &lt;oRef&gt; .delete() - &lt;oRef&gt;  = The UpdateSet object that describes the delete.">
                                          	<Param name=""/>
                                          	</Overload>
                                          </KeyWord>
                                          

                                          This might help, but the bulk work of documenting and turning your language documentation into an autoCompletion and code tip file is on you and believe me, I know how much work it is…but our language implementations are so far apart in documenting format that you won’t be able to use mine. Harbour is what is referred to as object based but not fully object oriented as dBASE Plus is.

                                          I hope this helps you understand the size of a job you’ve chosen to do. It’s one of the reasons that creating a UDL with the additional features wasn’t done prior to my doing it. It’s not a job for the faint of heart. :)

                                          J 1 Reply Last reply Nov 4, 2022, 2:53 AM Reply Quote 2
                                          14 out of 28
                                          • First post
                                            14/28
                                            Last post
                                          The Community of users of the Notepad++ text editor.
                                          Powered by NodeBB | Contributors