The Actipro Blog

All the latest UI control development news from Actipro

SyntaxEditor for WPF Language Designer enhancements (part 7)

In the previous post of this series we built the language project in the Language Designer, found that there was an error, and resolved the error.  Now that all the errors have been eliminated, we are ready to generate code.

Code generation configuration pane

The code generation configuration pane has fields where we can enter the namespace in which any generated C#/VB code will be placed, along with the output folder in which files are to be created.

There also is an option to output a language definition (.langdef) file instead of C#/VB code files.

For today’s post we’ll output C# code files.  Incidentally the Options tab has buttons that let you select the output language for code files.


This pane also shows the list of files that can be generated for our language.  With just several minutes of work seen in our previous steps, our ECMAScript language project already has six classes that can be generated.

Let’s take a look at a couple of them. 

The EcmaScriptSyntaxLanguage class

The EcmaScriptSyntaxLanguage is a class that inherits SyntaxLanguage and is what you would create an instance of in your application.  Once you generate all the files to your hard drive and include them in your project, your language is ready for use with this sort of code:

   1: editor.Document.Language = new EcmaScriptSyntaxLanguage();

Pretty easy, isn’t it? 

To see what code is generated for this class, we’ll use the Preview Selected feature:


The code is generated on the fly and opened in a new document window with full syntax highlighting.  Note how clean and concise code is written, and how all code is fully commented so that you know what it is doing.  Your creator and copyright information (indicated in the General Properties pane) is also inserted in the summary comments of each class generated.

This constructor code auto-registers all the services that have been created in the Language Designer such as a lexer, token classifier factory, and example text provider.  More service support will be added in the future as well.

The EcmaScriptLexer class

Next, let’s look at the lexer class that is generated and registered as a service in EcmaScriptSyntaxLanguage.  The lexer implements the ILexer interface.


In its constructor it proceeds to build a dynamic lexer via code.  The dynamic lexer contains all the states and patterns we previously created using the New Dynamic Lexer Wizard and then later modified using the Lexer pane in the Language Designer.

Some SyntaxEditor 4.0 for WinForms veterans may be wondering what happened to the XML definitions for dynamic lexers.  Well those are still available via the checkbox option to generate a language definition file instead of code files.

Generating code to disk

To generate this code to disk, we simply click the Generate All button back on the code generation configuration pane.  All the files are written to disk and can be included in your project for immediate use.

The classes are all partial classes so that they can be extended in other files without worry of your enhancements being overwritten the next time you generate code.

Next steps

In the next post, we’ll select the option to generate a language definition instead of code files and will see how to load it at run-time.

Filed under: Actipro, In development, WPF

Pingbacks and trackbacks (1)+

Comments are closed