We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.

EditControl: Ignore lexems preceded by dot

Thread ID:

Created:

Updated:

Platform:

Replies:

119331 Jun 5,2015 03:02 PM Jun 11,2015 04:43 AM Windows Forms 5
loading
Tags: EditControl
Thomas Langley
Asked On June 5, 2015 03:02 PM

Hi,

I am working on a custom Intellisense solution for a Python script editor.  For each public class in our API a ConfigLexem is created, which works fine for text highlighting in most circumstances.  The known class names turn light blue in the editor, similar to Visual Studio.

However, there are many situations where a property of some object happens to have the same name as an existing class, and this is being incorrectly recognized as the class name.


Example:


class Contact 


class Employee, has string property called Contact which has nothing to do with the above class



Sample Code:

emp = Employee()
emp.Contact = False  <-- this is recognized as the class 'Contact' and colored as a class name!



I have tried using lookbacks in regular expressions (e.g. lexem.IsBeginRegex = true) but they do not work, as it seems the words have already been stripped and do not contain information about the preceding characters by the time they go through the regex engine.

If there is a dot in front of the class name, it should not be recognized as the class.

Is what I am trying to achieve possible with this system, or do I need to make a second pass over the editor contents and somehow undo some of the highlighting?


Thanks,
Thomas

Kannan R [Syncfusion]
Replied On June 9, 2015 01:26 AM

Hi Thomas,

 

Thank you for using Syncfusion products.

 

We would like to let you know that, this reported requirement can be achieved by using Splits configuration in EditControl. Please find the detailed explanation below.

 

In EditControl, its content will be split based on Special characters.

 

For example:

 

If the content is given as “this.EditControl1”, then it will be split and considered as 3 individual words.

1)      this

2)      .

3)      EditControl1

 

For this case, Splits concept in EditControl can be used to combine desired contents as common one, “this.EditControl1” as a word. We request you to refer with the below code snippet.

 

Code Snippet: [C#]

 

 

<!--To combine special character with the keyword-->

<split>.class</split>

 

 

UG Link: http://help.syncfusion.com/ug/windows%20forms/index.html#!Documents/creatingacustomlanguageconfigurationfile.htm                          

 

Once, if “.public” is loaded in EditControl, public will not be highlighted as keyword. As like this, user will be able to create splits word based on the user requirement. We have also prepared a screen shot and sample by considering “public” and “class” keywords for your reference and it can be downloaded from the below location.

 

Screen shot:

 

 

 

Sample Location: http://www.syncfusion.com/downloads/support/forum/119331/ze/EditControl_KeywordSplit1504159238                        

 

We request you to check with above solution and let us know if it helps.

 

Please let us know if you need any further assistance,

 

Thanks,

Kannan


Thomas Langley
Replied On June 9, 2015 03:44 PM

Hello Kannan,

Thank you for this information.  It looks like a step in the right direction; however, I need dynamic behavior and it seems the splits do not work when they are added after the text of the control has been set.

For example, a user may type a new import statement in the script, and my program will search the imported namespace and add classes/splits for highlighting.  This currently works with adding lexems but not splits!


In the sample solution, I added a few lines to the constructor to demonstrate:


  public Form1()
        {
            InitializeComponent();

            this.editControl1.Configurator.Open(@"..\\..\\Config.xml");
            this.editControl1.ApplyConfiguration("C#");
            this.Text = "EditControl";        



            // Add split and lexem for TEST2

            //this.editControl1.Language.Splits.Add(new Split(".TEST2"));     // this works
            this.editControl1.LoadFile(BasePath);
            this.editControl1.Language.Splits.Add(new Split(".TEST2"));   // this does not work, after file is loaded
          
            var lexem = new ConfigLexem("TEST2", "", Syncfusion.Windows.Forms.Edit.Enums.FormatType.KeyWord, false);

            this.editControl1.Language.Lexems.Add(lexem);
            this.editControl1.Language.ResetCaches();

        }



Is there an easy solution to this problem?

Thanks,
Thomas

Kannan R [Syncfusion]
Replied On June 10, 2015 07:34 AM

Hi Thomas,

 

Thank you for your update.

 

Yes, In EditControl, custom configuration settings need to be initialized before loading its contents. Hence, if end user like to update this settings dynamically, it will be needed to re-apply the configuration once changes are done, by using its function named ApplyConfiguration. Please make use of below code snippet for your reference.

 

Code Snippet: [C#]

 

// To re-apply the configuration

this.editControl1.ApplyConfiguration(this.editControl1.Language);

 

 

We have also prepared sample for your requirement and it can be downloaded from below location.

 

Sample Location: http://www.syncfusion.com/downloads/support/forum/119331/ze/EditControl_Modified-1557382824        

 

Please let us know if you need any further assistance,

 

Thanks,

Kannan


Thomas Langley
Replied On June 10, 2015 01:13 PM

Hi Kannan,

Thank you very much for your help.  It is working nicely, and I realize now that the IsRegex option makes things even easier!


Cheers,
Thomas



Ashwini Jaya Preetha Durai Samy [Syncfusion]
Replied On June 11, 2015 04:43 AM

Hi Thomas,

Thank you for your update.

We are glad that we have helped you on this.

Please let us know if you need any further assistance,

Regards,
Ashwini

CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.

;