<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Actipro Blog - WPF and WinForms Development</title>
    <description />
    <link>http://blog.actiprosoftware.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.0.7</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://blog.actiprosoftware.com/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Actipro</dc:creator>
    <dc:title>The Actipro Blog - WPF and WinForms Development</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Actipro" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>First video of SyntaxEditor for Silverlight - Syntax-highlighting code editor control</title>
      <description>&lt;p&gt;A couple months ago we make a &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4" target="_blank"&gt;post on our blog&lt;/a&gt; asking if anyone would be interested in a port of our &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt; control over to &lt;strong&gt;Silverlight&lt;/strong&gt;.&amp;#160; We’ve had some tremendous feedback, both via comments on that posting and via e-mail, so we’ve moved forward with development on the product.&lt;/p&gt;  &lt;h3&gt;What is SyntaxEditor for Silverlight?&lt;/h3&gt;  &lt;p&gt;As many of you know, SyntaxEditor for WPF is the premier &lt;strong&gt;syntax-highlighting code editor&lt;/strong&gt; control for the WPF platform.&amp;#160; It is being constructed with a new &lt;strong&gt;next-generation object model&lt;/strong&gt; based on our years of experience with SyntaxEditor for WinForms, the market leader in the WinForms platform.&amp;#160; We’ve made a lot of posts about SyntaxEditor for WPF’s features in this blog.&lt;/p&gt;  &lt;p&gt;The Silverlight version of SyntaxEditor is essentially a large subset of SyntaxEditor for WPF’s object model.&amp;#160; For those who have used SyntaxEditor for WPF, the entire text/parsing library is &lt;strong&gt;completely converted to Silverlight&lt;/strong&gt;.&amp;#160; This means all the document, syntax language, parsing, etc. code works in Silverlight exactly the same as in WPF.&amp;#160; The UI layer is mostly the same as well.&amp;#160; Many of the UI features found in the WPF version are already implemented where possible in the Silverlight version.&lt;/p&gt;  &lt;h3&gt;What can I use it for?&lt;/h3&gt;  &lt;p&gt;The possibilities are endless.&amp;#160; Want to have a &lt;strong&gt;web-based source code browser&lt;/strong&gt; where you can edit your code from anywhere right in the browser?&amp;#160; Want to build a &lt;strong&gt;web-based IDE&lt;/strong&gt;?&amp;#160; Want to just use the editor in read-only mode to provide &lt;strong&gt;rich visualization&lt;/strong&gt; of code? &lt;/p&gt;  &lt;p&gt;SyntaxEditor for Silverlight would fit right into any of those conceptualizations.&lt;/p&gt;  &lt;h3&gt;Let’s see the video!&lt;/h3&gt;  &lt;p&gt;Without further ado, let’s take a look at the &lt;strong&gt;first video&lt;/strong&gt; of SyntaxEditor for Silverlight.&amp;#160; In this video, I fire up the editor in an Internet Explorer page and do some typing and selection.&amp;#160; Note that syntax highlighting is being driven from a syntax language that was created with our WPF &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7" target="_blank"&gt;Language Designer&lt;/a&gt; application.&amp;#160; &lt;/p&gt;  &lt;p&gt;I also have the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=da9b9548-fb09-4c7f-b915-9a09482317d9" target="_blank"&gt;smoke text effect&lt;/a&gt; enabled, which shows off the new &lt;strong&gt;adornment layers&lt;/strong&gt; feature we’re currently working on.&amp;#160; The smoke text effect is not something you’d normally have enabled in a production application, but it is a neat example of what you can do with our adornment layer framework.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 425px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:da381159-8377-44e1-8816-e3fe9d1f0748" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XBYuRqJb3qs&amp;amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XBYuRqJb3qs&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;There still is a lot of work to do on the Silverlight version before it would be production-ready.&amp;#160; However we are trying to make some progress on it each day.&amp;#160; And as we add any new features to the WPF version going forward, we are adding them to the Silverlight version at the same time.&lt;/p&gt;  &lt;p&gt;We don’t have any target release dates at this point, but keep your comments coming and we’ll continue posting more details on the control.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/macJwGpIWmY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/macJwGpIWmY/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/11/02/First-video-of-SyntaxEditor-for-Silverlight-e28093-Syntax-highlighting-code-editor-control.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=2056648d-acf9-4bc5-9ffc-8cf0854ddab2</guid>
      <pubDate>Mon, 02 Nov 2009 15:48:00 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>New product</category>
      <category>Silverlight</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=2056648d-acf9-4bc5-9ffc-8cf0854ddab2</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=2056648d-acf9-4bc5-9ffc-8cf0854ddab2</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/11/02/First-video-of-SyntaxEditor-for-Silverlight-e28093-Syntax-highlighting-code-editor-control.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=2056648d-acf9-4bc5-9ffc-8cf0854ddab2</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=2056648d-acf9-4bc5-9ffc-8cf0854ddab2</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF - Testing adornments with text smoke effects</title>
      <description>&lt;p&gt;Lately we’ve been working on starting to add &lt;strong&gt;adornment layer&lt;/strong&gt; capabilities to &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt;.&amp;#160; Each adornment layer can contain any sort of &lt;strong&gt;UIElement&lt;/strong&gt;-based adornment.&amp;#160; For example, in our updated design for&lt;strong&gt; version 2009.2&lt;/strong&gt;, the editor view selection itself is now an adornment layer, where the selection visual is a shape.&amp;#160; &lt;strong&gt;Custom&lt;/strong&gt; adornment layers can be created and managed.&amp;#160; &lt;/p&gt;  &lt;p&gt;They can be inserted anywhere in the &lt;strong&gt;z-order&lt;/strong&gt; of adornment layers too.&amp;#160; This means that you can put adornments on top of the text, or you could alternatively choose to show them in between the selection and text layers, etc.&lt;/p&gt;  &lt;p&gt;This adornment layer model is a huge &lt;strong&gt;extensibility point&lt;/strong&gt; and will be used as the foundation for many visual features going forward.&amp;#160; Once implemented, things like &lt;strong&gt;squiggle&lt;/strong&gt; (wave) lines and &lt;strong&gt;collapsed outlining node markers&lt;/strong&gt; will adornment layers.&lt;/p&gt;  &lt;h3&gt;Smoke text QuickStart&lt;/h3&gt;  &lt;p&gt;We wanted to do a neat sample to ensure the layers perform well at run-time.&amp;#160; What we came up with is &lt;strong&gt;smoke text&lt;/strong&gt;! :)&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=SmokeEffect.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="SmokeEffect" border="0" alt="SmokeEffect" src="http://blog.actiprosoftware.com/image.axd?picture=SmokeEffect_thumb.png" width="615" height="353" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Basically, as you type, smoke rings rise out from where the caret is and change location, size, and opacity, thereby creating a neat smoke effect.&amp;#160; The static picture doesn’t do the effect justice.&amp;#160; Check out a &lt;strong&gt;captured video&lt;/strong&gt; after the break.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Video capture&lt;/h3&gt;  &lt;p&gt;Here is the &lt;a href="http://www.youtube.com/watch?v=hwPyX9uf6QQ" target="_blank"&gt;video&lt;/a&gt; of the smoke text effect in action:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; padding-left: 0px; width: 425px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ac01c7cc-7896-4e09-b9bf-af2d42cd610b" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hwPyX9uf6QQ&amp;amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/hwPyX9uf6QQ&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;h3&gt;How did we do that?&lt;/h3&gt;  &lt;p&gt;This sample is pretty simple.&amp;#160; It just has a &lt;strong&gt;SyntaxLanguage&lt;/strong&gt; defined that allows a smoke text &lt;strong&gt;adornment manager&lt;/strong&gt; to be defined for any view that attaches to the language.&amp;#160; The actual adornment layer in this case is positioned behind the selection layer.&amp;#160; This way, the selection, caret, and text always appear in front of the smoke.&lt;/p&gt;  &lt;p&gt;The adornment manager listens for text changes and if the view has focus, it makes an &lt;strong&gt;animated smoke effect&lt;/strong&gt; where the caret is.&amp;#160; The hardest part of it really was just coming up with the randomized transforms on the animated smoke rings.&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;You’ll also want to notice the horizontal gray highlight in the background of the line being modified.&amp;#160; That is another adornment prototype that does &lt;strong&gt;current line highlighting&lt;/strong&gt;.&amp;#160; It essentially highlights the view line that currently contains the caret.&lt;/p&gt;  &lt;p&gt;The adornment layer features are targeted to be part of the WPF Studio 2009.2 release in the next month or two.&amp;#160; We still have a lot of work to do on it but this is too neat of a sample not to blog about.&amp;#160; As you can see, with our upcoming adornment layer features, the &lt;strong&gt;sky is the limit&lt;/strong&gt; on what you can do within the editor.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/sePGRrLGqjE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/sePGRrLGqjE/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/28/SyntaxEditor-for-WPF-Testing-adornments-with-text-smoke-effects.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=da9b9548-fb09-4c7f-b915-9a09482317d9</guid>
      <pubDate>Wed, 28 Oct 2009 09:21:09 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=da9b9548-fb09-4c7f-b915-9a09482317d9</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=da9b9548-fb09-4c7f-b915-9a09482317d9</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/28/SyntaxEditor-for-WPF-Testing-adornments-with-text-smoke-effects.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=da9b9548-fb09-4c7f-b915-9a09482317d9</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=da9b9548-fb09-4c7f-b915-9a09482317d9</feedburner:origLink></item>
    <item>
      <title>WPF Studio 2009.1 build 506 released with many major updates</title>
      <description>&lt;p&gt;&lt;strong&gt;Build 506&lt;/strong&gt; of &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/WPFStudio/Default.aspx" target="_blank"&gt;WPF Studio 2009.1&lt;/a&gt; is &lt;strong&gt;available for download&lt;/strong&gt; now.&amp;#160; It is one of the larger WPF Studio maintenance releases we’ve made.&amp;#160; Let me do a quick review of some of the major exciting new features.&amp;#160; In addition to this list, there are a lot of other minor enhancements made.&lt;/p&gt;  &lt;p&gt;See our &lt;a href="http://www.actiprosoftware.com/Support/Forums/ViewForumTopic.aspx?ForumTopicID=4306" target="_blank"&gt;related forum announcement&lt;/a&gt; for exact details on what updates were made in each product.&lt;/p&gt;  &lt;table style="width: 616px" border="0" cellspacing="0" cellpadding="2" width="616"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="38"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductDocking32_1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductDocking32" border="0" alt="ProductDocking32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductDocking32_thumb_1.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="576"&gt;         &lt;h3&gt;Docking/MDI for WPF&lt;/h3&gt;          &lt;h4&gt;Custom content in docking window tabs&lt;/h4&gt;          &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DockingTabContent.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DockingTabContent" border="0" alt="DockingTabContent" src="http://blog.actiprosoftware.com/image.axd?picture=DockingTabContent_thumb.png" width="312" height="59" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;Any content can now be placed in docking window tabs.&amp;#160; This screenshot shows an animated progress indicator in one tab and a drop-down button in the other tab.&lt;/p&gt;          &lt;h4&gt;Resize slots in a SplitContainer&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProgrammaticSizing.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProgrammaticSizing" border="0" alt="ProgrammaticSizing" src="http://blog.actiprosoftware.com/image.axd?picture=ProgrammaticSizing_thumb.png" width="300" height="221" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;New features have been added making it possible for you to resize the slots of a SplitContainer however you like.&amp;#160; This screenshot shows a split container with an even distribution of space for its slots.&lt;/p&gt;          &lt;h4&gt;Cascade and tile tabbed MDI documents&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=TabsTileHorizontally.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TabsTileHorizontally" border="0" alt="TabsTileHorizontally" src="http://blog.actiprosoftware.com/image.axd?picture=TabsTileHorizontally_thumb.png" width="300" height="192" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;You now can cascade, tile horizontally, and tile vertically tabbed MDI documents.&amp;#160; This screenshot shows how six tabbed documents are tiled horizontally.&lt;/p&gt;          &lt;h4&gt;New WindowControl features&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=WindowControl.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WindowControl" border="0" alt="WindowControl" src="http://blog.actiprosoftware.com/image.axd?picture=WindowControl_thumb.png" width="287" height="96" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;WindowControl has several new options and even allows custom content to be in the title bar.&amp;#160; This screenshot shows a small progressbar in the title bar.&lt;/p&gt;          &lt;h4&gt;Close tabs with middle-click&lt;/h4&gt;          &lt;p&gt;An option has been added to allow tabs to close with a middle-click, much like in some popular browsers.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="38"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductEditors32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductEditors32" border="0" alt="ProductEditors32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductEditors32_thumb.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="576"&gt;         &lt;h3&gt;Editors for WPF&lt;/h3&gt;          &lt;h4&gt;Improved min/maximum value support &lt;/h4&gt;          &lt;p&gt;The built-in editors have had support for min/max values improved.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="38"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductNavigation32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductNavigation32" border="0" alt="ProductNavigation32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductNavigation32_thumb.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="576"&gt;         &lt;h3&gt;Navigation for WPF&lt;/h3&gt;          &lt;h4&gt;New Windows 7-like expander style&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ExpanderStyle.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ExpanderStyle" border="0" alt="ExpanderStyle" src="http://blog.actiprosoftware.com/image.axd?picture=ExpanderStyle_thumb.png" width="208" height="121" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p align="left"&gt;A new style has been added that renders similar to the Windows 7 expanders and even has smooth animation.&amp;#160; The style is customized for each system and Office theme.&lt;/p&gt;          &lt;h4&gt;Built-in expander styles updated to support all expand directions&lt;/h4&gt;          &lt;p&gt;We’ve updated all our built-in expander styles so that all expand directions are supported: up, down, left and right.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="38"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductPropertyGrid32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductPropertyGrid32" border="0" alt="ProductPropertyGrid32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductPropertyGrid32_thumb.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="576"&gt;         &lt;h3&gt;PropertyGrid for WPF&lt;/h3&gt;          &lt;h4&gt;New textbox and dialog button property editor&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=PGDialog.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PGDialog" border="0" alt="PGDialog" src="http://blog.actiprosoftware.com/image.axd?picture=PGDialog_thumb.png" width="300" height="56" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;We’ve added a new built-in property editor that uses a TextBox and includes a button that can be used to show a dialog.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="43"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductSyntaxEditor32_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductSyntaxEditor32" border="0" alt="ProductSyntaxEditor32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductSyntaxEditor32_thumb_2.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="571"&gt;         &lt;h3&gt;SyntaxEditor for WPF&lt;/h3&gt;          &lt;h4&gt;Finalized language definition format&lt;/h4&gt;          &lt;p&gt;This build finalizes the new language project and language definition XML formats.&amp;#160; All language samples have been updated to use them instead of the classic SyntaxEditor 4.0 for WinForms dynamic language XML definition format.&lt;/p&gt;          &lt;h4&gt;Language Designer application&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LangDesigner.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="LangDesigner" border="0" alt="LangDesigner" src="http://blog.actiprosoftware.com/image.axd?picture=LangDesigner_thumb.png" width="400" height="261" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;Very major improvements (several weeks of dev time) have been made to the Language Designer application.&amp;#160; It has a number of helpful tools for quickly getting started building a syntax language for use with SyntaxEditor.&amp;#160; It now just takes a few minutes to get up and running, even for SyntaxEditor newbies.&lt;/p&gt;          &lt;h4&gt;Automated quick info session processing&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=QuickInfo.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="QuickInfo" border="0" alt="QuickInfo" src="http://blog.actiprosoftware.com/image.axd?picture=QuickInfo_thumb.png" width="400" height="56" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;We’ve added a new quick info provider service that can be added to a language.&amp;#160; This service watches for mouse hovers and just asks you what to display in response to hovers over different areas of the editor.&amp;#160; Quick info can be displayed for hovers over the text area, or any other part of the editor such as in margins.&lt;/p&gt;          &lt;h4&gt;View mouse hover event&lt;/h4&gt;          &lt;p&gt;A new view mouse hover event has been added.&amp;#160; We handle all the processing for determining when to fire it.&lt;/p&gt;          &lt;h4&gt;Caret and selection brush customization&lt;/h4&gt;          &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=SelectionBrush.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SelectionBrush" border="0" alt="SelectionBrush" src="http://blog.actiprosoftware.com/image.axd?picture=SelectionBrush_thumb.png" width="400" height="110" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;You now can completely customize the look of the caret and selection.&amp;#160; Don’t like our default settings?&amp;#160; Change them however you like!&lt;/p&gt;          &lt;h4&gt;Completion list display when user starts typing a word&lt;/h4&gt;          &lt;p&gt;We’ve added a new feature to make it easy to know if the user is starting to type a new word, so that a completion list can display in response.&lt;/p&gt;          &lt;h4&gt;MGrammar tokens now get assigned a token key&lt;/h4&gt;          &lt;p&gt;We’ve updated tokens generated from the Oslo Dataflow Add-on to provide an IToken.Key value if a TokenKey attribute is specified in the original MGrammar source&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="43"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=ProductShared32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProductShared32" border="0" alt="ProductShared32" src="http://blog.actiprosoftware.com/image.axd?picture=ProductShared32_thumb.png" width="32" height="32" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="571"&gt;         &lt;h3&gt;Shared Library for WPF&lt;/h3&gt;          &lt;h4&gt;Unique tooltip for PopupButton popup indicator&lt;/h4&gt;          &lt;p&gt;We’ve added a new PopupIndicatorToolTip property to PopupButton, which allows the popup indicator to display a unique tooltip, rather than the tooltip for the main button area.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/JiV-vWS070I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/JiV-vWS070I/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/20/WPF-Studio-20091-build-506-released-with-many-major-updates.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=166c8bd7-204d-4455-a2fc-770683a3da17</guid>
      <pubDate>Tue, 20 Oct 2009 09:42:46 -1200</pubDate>
      <category>Actipro</category>
      <category>New features</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=166c8bd7-204d-4455-a2fc-770683a3da17</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=166c8bd7-204d-4455-a2fc-770683a3da17</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/20/WPF-Studio-20091-build-506-released-with-many-major-updates.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=166c8bd7-204d-4455-a2fc-770683a3da17</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=166c8bd7-204d-4455-a2fc-770683a3da17</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 8)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=14c70378-215e-48e9-ac4f-d62750665d65" target="_blank"&gt;previous post&lt;/a&gt; of this series, the Language Designer generated some C# code for our &lt;strong&gt;ECMAScript&lt;/strong&gt; language that can be used in your applications.&amp;#160; In today’s post we’re going to look at the other generation option, which is to output language definition files.&lt;/p&gt;  &lt;h3&gt;Generating a language definition file&lt;/h3&gt;  &lt;p&gt;By checking the “output a language definition” checkbox, our code files list changes to only show one file, a file with a .langdef extension.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LangDef1.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LangDef1" border="0" alt="LangDef1" src="http://blog.actiprosoftware.com/image.axd?picture=LangDef1_thumb.png" width="600" height="455" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;EcmaScript.langdef&lt;/strong&gt; file is intended to be deployed with your application and loaded at run-time.&amp;#160; The nice thing about language definitions is that end users can tweak them as needed.&amp;#160; This is a lot trickier to do if you have dedicated C#/VB classes for your language.&amp;#160; &lt;/p&gt;  &lt;p&gt;Let’s take a peek at what was generated…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LangDef2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LangDef2" border="0" alt="LangDef2" src="http://blog.actiprosoftware.com/image.axd?picture=LangDef2_thumb.png" width="600" height="455" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you are a SyntaxEditor for WinForms customer, you’ll see a similarity to the dynamic language XML definition format although some of the tag names are tweaked here.&lt;/p&gt;  &lt;p&gt;The language definition file can be loaded in one line of code:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; editor.Document.Language = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SyntaxLanguageDefinitionSerializer().LoadFromFile(path);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;There also is a &lt;strong&gt;LoadFromStream&lt;/strong&gt; option that loads from any &lt;strong&gt;Stream&lt;/strong&gt;, which is useful if you embed the .langdef file as an embedded resource in your application.&lt;/p&gt;

&lt;h3&gt;Next steps&lt;/h3&gt;

&lt;p&gt;We hope you have enjoyed our series on the Language Designer.&amp;#160; We’re currently finishing up some features in it and are converting over a bunch of language samples to the new language definition format before these updates can be released.&amp;#160; We hope to have it all wrapped up in the next several days.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/OdExPbxtzg8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/OdExPbxtzg8/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/14/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-8).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=d8613793-07c3-441d-8e2e-00b97941fb46</guid>
      <pubDate>Wed, 14 Oct 2009 08:56:51 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=d8613793-07c3-441d-8e2e-00b97941fb46</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=d8613793-07c3-441d-8e2e-00b97941fb46</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/14/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-8).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=d8613793-07c3-441d-8e2e-00b97941fb46</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=d8613793-07c3-441d-8e2e-00b97941fb46</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 7)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9" target="_blank"&gt;previous post&lt;/a&gt; of this series we &lt;strong&gt;built the language project&lt;/strong&gt; in the Language Designer, found that there was an error, and resolved the error.&amp;#160; Now that all the errors have been eliminated, we are ready to generate code.&lt;/p&gt;  &lt;h3&gt;Code generation configuration pane&lt;/h3&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;p&gt;There also is an option to output a language definition (.langdef) file instead of C#/VB code files.&lt;/p&gt;  &lt;p&gt;For today’s post we’ll output C# code files.&amp;#160; Incidentally the Options tab has buttons that let you select the output language for code files.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=CodeGen1.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CodeGen1" border="0" alt="CodeGen1" src="http://blog.actiprosoftware.com/image.axd?picture=CodeGen1_thumb.png" width="600" height="444" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This pane also shows the list of files that can be generated for our language.&amp;#160; With just several minutes of work seen in our previous steps, our &lt;strong&gt;ECMAScript &lt;/strong&gt;language project already has six classes that can be generated.&lt;/p&gt;  &lt;p&gt;Let’s take a look at a couple of them.&amp;#160; &lt;/p&gt;  &lt;h3&gt;The EcmaScriptSyntaxLanguage class&lt;/h3&gt;  &lt;p&gt;The &lt;strong&gt;EcmaScriptSyntaxLanguage &lt;/strong&gt;is a class that inherits &lt;strong&gt;SyntaxLanguage&lt;/strong&gt; and is what you would create an instance of in your application.&amp;#160; 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:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; editor.Document.Language = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EcmaScriptSyntaxLanguage();&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Pretty easy, isn’t it?&amp;#160; &lt;/p&gt;

&lt;p&gt;To see what code is generated for this class, we’ll use the &lt;strong&gt;Preview Selected&lt;/strong&gt; feature:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=CodeGen2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CodeGen2" border="0" alt="CodeGen2" src="http://blog.actiprosoftware.com/image.axd?picture=CodeGen2_thumb.png" width="600" height="444" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The code is generated on the fly and opened in a new document window with full syntax highlighting.&amp;#160; Note how clean and concise code is written, and how all code is fully commented so that you know what it is doing.&amp;#160; Your creator and copyright information (indicated in the &lt;strong&gt;General Properties &lt;/strong&gt;pane) is also inserted in the summary comments of each class generated.&lt;/p&gt;

&lt;p&gt;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.&amp;#160; More service support will be added in the future as well.&lt;/p&gt;

&lt;h3&gt;The EcmaScriptLexer class&lt;/h3&gt;

&lt;p&gt;Next, let’s look at the lexer class that is generated and registered as a service in &lt;strong&gt;EcmaScriptSyntaxLanguage&lt;/strong&gt;.&amp;#160; The lexer implements the &lt;strong&gt;ILexer &lt;/strong&gt;interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=CodeGen3.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="CodeGen3" border="0" alt="CodeGen3" src="http://blog.actiprosoftware.com/image.axd?picture=CodeGen3_thumb.png" width="600" height="444" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In its constructor it proceeds to build a dynamic lexer via code.&amp;#160; The dynamic lexer contains all the states and patterns we previously created using the &lt;strong&gt;New Dynamic Lexer Wizard&lt;/strong&gt; and then later modified using the &lt;strong&gt;Lexer&lt;/strong&gt; pane in the Language Designer.&lt;/p&gt;

&lt;p&gt;Some SyntaxEditor 4.0 for WinForms veterans may be wondering what happened to the XML definitions for dynamic lexers.&amp;#160; Well those are still available via the checkbox option to generate a language definition file instead of code files.&lt;/p&gt;

&lt;h3&gt;Generating code to disk&lt;/h3&gt;

&lt;p&gt;To generate this code to disk, we simply click the &lt;strong&gt;Generate All &lt;/strong&gt;button back on the code generation configuration pane.&amp;#160; All the files are written to disk and can be included in your project for immediate use.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;Next steps&lt;/h3&gt;

&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=d8613793-07c3-441d-8e2e-00b97941fb46" target="_blank"&gt;next post&lt;/a&gt;, we’ll select the option to generate a language definition instead of code files and will see how to load it at run-time.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/Ma3VfxglT-k" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/Ma3VfxglT-k/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/13/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-7).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=14c70378-215e-48e9-ac4f-d62750665d65</guid>
      <pubDate>Tue, 13 Oct 2009 06:24:08 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=14c70378-215e-48e9-ac4f-d62750665d65</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=14c70378-215e-48e9-ac4f-d62750665d65</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/13/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-7).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=14c70378-215e-48e9-ac4f-d62750665d65</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=14c70378-215e-48e9-ac4f-d62750665d65</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 6)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940" target="_blank"&gt;previous post&lt;/a&gt; of this series, we looked at the &lt;strong&gt;dynamic lexer&lt;/strong&gt; that was generated from the &lt;strong&gt;New Dynamic Lexer Wizard&lt;/strong&gt;.&amp;#160; Today we’re going to examine the validation and error checking features provided by the &lt;strong&gt;Language Designer&lt;/strong&gt;.&lt;/p&gt;  &lt;h3&gt;Building the project&lt;/h3&gt;  &lt;p&gt;If we click the &lt;strong&gt;Build Project&lt;/strong&gt; button in the ribbon, the Language Designer examines all aspects of the language project that is loaded and reports back any errors, warnings or messages that it thinks of.&amp;#160; This can be anything from you forgetting to enter a required field, to a classification key for a lexical pattern group being invalid.&lt;/p&gt;  &lt;p&gt;If we build the project for our &lt;strong&gt;ECMAScript&lt;/strong&gt; language project, we are presented with one error.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="BuildProj1" border="0" alt="BuildProj1" src="http://blog.actiprosoftware.com/image.axd?picture=BuildProj1_thumb.png" width="600" height="543" /&gt;&lt;/p&gt;  &lt;p&gt;Note the error in the &lt;strong&gt;Error List&lt;/strong&gt; tool window telling us that we need to set an output folder path.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Fixing the error&lt;/h3&gt;  &lt;p&gt;When we double-click the error in the list, the &lt;strong&gt;Code Generation&lt;/strong&gt; pane is opened and the focus moves to the control we need to update.&amp;#160; We’ve included features like this to make it easy for you to jump directly to the problem that was recognized so that you can spend your time fixing the issue rather than trying to hunt down where the issue is.&amp;#160; This is a real time-saver.&lt;/p&gt;  &lt;h3&gt;The status bar&lt;/h3&gt;  &lt;p&gt;When doing builds, the status bar always indicates if the build was successful or failed and the time at which it was performed.&amp;#160; If there are any messages from the build, the count is also displayed.&lt;/p&gt;  &lt;h3&gt;Next steps&lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;We’ve now seen how to build a project to make sure there are no errors.&amp;#160; Once a project is error-free, code can be generated for it.&lt;/p&gt;  &lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=14c70378-215e-48e9-ac4f-d62750665d65" target="_blank"&gt;next post&lt;/a&gt;, we’ll look at the code generation configuration pane, where we’ll output some code for our language.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/14ZYr1mGJn4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/14ZYr1mGJn4/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/12/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-6).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9</guid>
      <pubDate>Mon, 12 Oct 2009 09:25:03 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/12/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-6).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=0ffbc37b-a7b4-4298-8823-0fc484aea6e9</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 5)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce" target="_blank"&gt;previous post&lt;/a&gt; of this series we looked at how the &lt;strong&gt;New Dynamic Lexer Wizard&lt;/strong&gt; generated a lexer for us that we could &lt;strong&gt;live test&lt;/strong&gt; immediately.&amp;#160; In today’s post, we’ll look more in-depth at the dynamic lexer that was generated.&lt;/p&gt;  &lt;h3&gt;What is a dynamic lexer?&lt;/h3&gt;  &lt;p&gt;A &lt;strong&gt;dynamic lexer&lt;/strong&gt; is a lexer that uses &lt;strong&gt;patterns&lt;/strong&gt; to determine how to tokenize text.&amp;#160; Patterns can be &lt;strong&gt;explicit&lt;/strong&gt;, which mean the pattern matches the exact characters in the pattern.&amp;#160; Patterns can also use &lt;strong&gt;regular expressions&lt;/strong&gt;.&amp;#160; This allows for incredible flexibility that you won’t find in other products.&amp;#160; And remember that dynamic lexers are only one type of lexer that are supported in SyntaxEditor.&lt;/p&gt;  &lt;h3&gt;The wizard results in-depth&lt;/h3&gt;  &lt;p&gt;We use the treeview on the left to navigate the parts of the lexer.&amp;#160; In this screenshot, we have selected the &lt;strong&gt;Lexical States&lt;/strong&gt; node.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex1.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex1" border="0" alt="DynLex1" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex1_thumb.png" width="600" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All of the lexical states defined in the lexer are listed.&amp;#160; One or more can be selected and have its properties be edited directly in the property grid on the right.&amp;#160; Note that our wizard generated a default state along with states for strings and comments.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex2" border="0" alt="DynLex2" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex2_thumb.png" width="600" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The ribbon contains several buttons that may be used for modifying list selections.&amp;#160; In the screenshot above we have the mouse cursor over the &lt;strong&gt;Move Down&lt;/strong&gt; button.&amp;#160; The &lt;strong&gt;Move Up&lt;/strong&gt; and &lt;strong&gt;Move Down &lt;/strong&gt;buttons allow you to reorder items in a list.&amp;#160; Ordering states and patterns properly in dynamic lexers is very important.&lt;/p&gt;  &lt;p&gt;Now let’s click the &lt;strong&gt;Add &lt;/strong&gt;button.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex3.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex3" border="0" alt="DynLex3" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex3_thumb.png" width="300" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Add Dynamic Lexical States&lt;/strong&gt; dialog appears.&amp;#160; A similar dialog appears when adding other features like lexical macros.&amp;#160; In the dialog you enter one state key for each new lexical state you wish to create.&amp;#160; Pressing &lt;strong&gt;OK&lt;/strong&gt; adds new states with the specified keys and then you use the property grid to configure them.&lt;/p&gt;  &lt;p&gt;Now let’s cancel and click the &lt;strong&gt;Child States&lt;/strong&gt; node of the &lt;strong&gt;Default &lt;/strong&gt;state.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex4.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex4" border="0" alt="DynLex4" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex4_thumb.png" width="600" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here we see a list of references to other states that can be transitioned to from the default state.&amp;#160; Scopes are used to determine when states transition.&amp;#160; For instance, a string state will transition when a double-quote character is seen.&lt;/p&gt;  &lt;p&gt;Next, let’s click on &lt;strong&gt;Pattern Groups&lt;/strong&gt;.&amp;#160; This is where the meat of a lexer is.&amp;#160; Each pattern group defines one or more patterns that can be recognized.&amp;#160; The group can be designated as an explicit or regular expression pattern.&amp;#160; Whenever a pattern is matched against text, a specified token ID/key are assigned to the token that is created.&amp;#160; This token is also assigned a classification type key, which is used to drive syntax highlighting.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex5.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex5" border="0" alt="DynLex5" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex5_thumb.png" width="600" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Pattern groups also can set their case sensitivity option (or inherit from parent) and can set various look-ahead and look-behind patterns that must be true for a pattern in the group to be matched.&lt;/p&gt;  &lt;p&gt;Let’s right-click the &lt;strong&gt;Operator&lt;/strong&gt; pattern group, which opens the &lt;strong&gt;Dynamic Lexical Patterns &lt;/strong&gt;dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex6.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex6" border="0" alt="DynLex6" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex6_thumb.png" width="450" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This dialog gives us some high-level info about the pattern group being edited and lets us modify all its patterns.&amp;#160; You simply enter one pattern on each line and click &lt;strong&gt;OK&lt;/strong&gt; to save.&lt;/p&gt;  &lt;p&gt;Next let’s click on the &lt;strong&gt;Scopes&lt;/strong&gt; node of the &lt;strong&gt;PrimaryString &lt;/strong&gt;state.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=DynLex7.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="DynLex7" border="0" alt="DynLex7" src="http://blog.actiprosoftware.com/image.axd?picture=DynLex7_thumb.png" width="600" height="352" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Here we see the scope for the &lt;strong&gt;PrimaryString&lt;/strong&gt; state.&amp;#160; It has a start and end pattern group.&amp;#160; The start pattern group says that this state is entered when a double quote is seen.&amp;#160; The end pattern group says this state is exited when a double-quote or line feed are seen.&amp;#160; This state also has its own other pattern groups we could modify by going to its &lt;strong&gt;Pattern Groups&lt;/strong&gt; node.&amp;#160; Those pattern groups define how to tokenize text that is within the two double-quotes.&lt;/p&gt;  &lt;h3&gt;Next steps&lt;/h3&gt;  &lt;p&gt;Now that we have looked through what the wizard generated, our &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=0ffbc37b-a7b4-4298-8823-0fc484aea6e9" target="_blank"&gt;next post&lt;/a&gt; will focus on doing a &lt;strong&gt;project build&lt;/strong&gt;, which does some really nice &lt;strong&gt;robust&lt;/strong&gt; &lt;strong&gt;validation&lt;/strong&gt; of our language project settings.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/rNGOZUKBDMg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/rNGOZUKBDMg/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/09/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-5).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940</guid>
      <pubDate>Fri, 09 Oct 2009 07:26:15 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/09/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-5).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=b7001f00-1cd0-49b3-a0a0-19612c6ac940</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 4)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481" target="_blank"&gt;previous post&lt;/a&gt; of this series we used the handy &lt;strong&gt;New Dynamic Lexer Wizard&lt;/strong&gt; in the Language Designer app to quickly configure a dynamic lexer for our &lt;strong&gt;ECMAScript&lt;/strong&gt; language.&amp;#160; &lt;/p&gt;  &lt;h3&gt;A glimpse at the dynamic lexer result&lt;/h3&gt;  &lt;p&gt;It took &lt;strong&gt;about a minute&lt;/strong&gt; to enter the data in the wizard and the result is a very good start on our lexer.&amp;#160; You can see from the following screenshot that the &lt;strong&gt;Dynamic Lexer&lt;/strong&gt; appears in the tree on the left, along with its &lt;strong&gt;structure&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LD4DynamicLexer.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LD4DynamicLexer" border="0" alt="LD4DynamicLexer" src="http://blog.actiprosoftware.com/image.axd?picture=LD4DynamicLexer_thumb.png" width="600" height="491" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The wizard created &lt;strong&gt;five lexical states&lt;/strong&gt; based on the information we entered.&amp;#160; We’ll get into some of the details of what was created in the next post.&amp;#160; For now though, let’s check out another really neat feature of the Language Designer…&lt;strong&gt; live test&lt;/strong&gt;!&amp;#160; &lt;/p&gt;  &lt;h3&gt;Live test&lt;/h3&gt;  &lt;p&gt;By clicking on the &lt;strong&gt;Live Test&lt;/strong&gt; button in the ribbon, we open the &lt;strong&gt;Live Test&lt;/strong&gt; pane.&amp;#160; This pane contains a &lt;strong&gt;SyntaxEditor&lt;/strong&gt; control.&amp;#160; A language is built &lt;strong&gt;on-the-fly&lt;/strong&gt; using the lexer and classification information defined in the project.&amp;#160; The language is assigned to the SyntaxEditor and voila, we have a live test of your language!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LD5LiveTest.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LD5LiveTest" border="0" alt="LD5LiveTest" src="http://blog.actiprosoftware.com/image.axd?picture=LD5LiveTest_thumb.png" width="600" height="491" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Note that the &lt;strong&gt;example text&lt;/strong&gt; we defined in the &lt;strong&gt;General Properties&lt;/strong&gt; is pulled in.&amp;#160; We can see that the comments are being colored, along with keywords, strings, and numbers.&amp;#160; Again all this was created by spending a minute entering information in the New Dynamic Lexer Wizard.&amp;#160; It doesn’t get any &lt;strong&gt;easier&lt;/strong&gt; than that.&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;status bar&lt;/strong&gt; also tells us the lexical state and token that the &lt;strong&gt;caret&lt;/strong&gt; is at.&amp;#160; If the caret is at the start of a token, an asterisk (*) appears after the word token.&amp;#160; The line, column, and character positions of the caret are indicated on the right.&lt;/p&gt;  &lt;p&gt;Right now the Live Test just shows &lt;strong&gt;syntax highlighting&lt;/strong&gt;, but as we add more feature areas into the SyntaxEditor product and the Language Designer, we plan on more enhancements to this pane.&lt;/p&gt;  &lt;p&gt;This pane provides the ideal place to test out your language, right in the application in which you are creating the language. To refresh the live test with changes you make in other panes, simply rebuild your project.&lt;/p&gt;  &lt;h3&gt;Next steps&lt;/h3&gt;  &lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=b7001f00-1cd0-49b3-a0a0-19612c6ac940" target="_blank"&gt;next post&lt;/a&gt;, we’ll jump back to the Lexer tab to look more in-depth at what the wizard created and how we can modify the dynamic lexer.&lt;/p&gt;  &lt;p&gt;As always, we’d love to get &lt;strong&gt;your feedback&lt;/strong&gt;.&amp;#160; Like what you see?&amp;#160; Have some ideas to improve things even more?&amp;#160; Please post your comments!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/TmtsBiwmvIs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/TmtsBiwmvIs/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/08/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-4).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce</guid>
      <pubDate>Thu, 08 Oct 2009 05:18:54 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/08/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-4).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=09e83870-aae7-4626-a2a6-c7f11dabc9ce</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 3)</title>
      <description>&lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=67053190-6ee2-4c07-86ee-91143f20057e" target="_blank"&gt;previous post&lt;/a&gt; of this series we started the Language Designer and entered some &lt;strong&gt;high-level general properties&lt;/strong&gt; about the language we’re going to create, which is &lt;strong&gt;ECMAScript&lt;/strong&gt;.&amp;#160; Today we’re going to use a wizard to quickly create a dynamic lexer for our language.&amp;#160; With the features described below, we have specifically tried to make the generation of a new language as easy as possible for new customers.&lt;/p&gt;  &lt;h3&gt;Selecting a lexer type&lt;/h3&gt;  &lt;p&gt;A new language project doesn’t have a lexer defined.&amp;#160; When we click the &lt;strong&gt;Lexer&lt;/strong&gt; button in the ribbon, the &lt;strong&gt;Lexer&lt;/strong&gt; pane is opened.&amp;#160; We are presented with a &lt;strong&gt;Lexer Type&lt;/strong&gt; sub-pane that allows us to choose the type of lexer to use.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LD3ChooseLexer.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LD3ChooseLexer" border="0" alt="LD3ChooseLexer" src="http://blog.actiprosoftware.com/image.axd?picture=LD3ChooseLexer_thumb.png" width="600" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For our ECMAScript language sample, we’ll use a &lt;strong&gt;Dynamic&lt;/strong&gt; &lt;strong&gt;lexer &lt;/strong&gt;so select &lt;strong&gt;Dynamic&lt;/strong&gt; in the radio button list and click the &lt;strong&gt;Change Lexer Type&lt;/strong&gt; button.&amp;#160; This opens the &lt;strong&gt;New Dynamic Lexer Wizard&lt;/strong&gt;.&amp;#160; &lt;/p&gt;  &lt;h3&gt;The New Dynamic Lexer Wizard&lt;/h3&gt;  &lt;p&gt;The New Dynamic Lexer Wizard is the fastest way to create a new lexer for a language.&amp;#160; It asks you a series of questions about your language and it generates a lexer for you.&amp;#160; This takes most of the guesswork out of creating a lexer from scratch and gets you a working lexer in minutes.&lt;/p&gt;  &lt;p&gt;For our ECMAScript language, we’ll use some specifications found on the Mozilla web site for ECMAScript (&lt;a title="http://www.mozilla.org/js/language/E262-3.pdf" href="http://www.mozilla.org/js/language/E262-3.pdf"&gt;http://www.mozilla.org/js/language/E262-3.pdf&lt;/a&gt;).&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Overview&lt;/h4&gt;  &lt;p&gt;The first page that opens in the wizard is an overview.&amp;#160; It allows you to select whether to walk through the wizard to create a lexer or whether to just make an empty lexer instead.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz1Overview.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz1Overview" border="0" alt="Wiz1Overview" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz1Overview_thumb.png" width="500" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For this walkthrough we’ll choose the first option.&lt;/p&gt;  &lt;h4&gt;Line terminators and identifiers&lt;/h4&gt;  &lt;p&gt;This page asks whether line terminators are significant and asks for a general guideline on identifier syntax.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz2Identifiers.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz2Identifiers" border="0" alt="Wiz2Identifiers" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz2Identifiers_thumb.png" width="500" height="430" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;For ECMAScript we’ll choose that line terminators are significant and we’ll use standard identifier syntax.&amp;#160; Note that the output from this wizard is completely modifiable after the wizard completes.&lt;/p&gt;  &lt;h4&gt;Keywords&lt;/h4&gt;  &lt;p&gt;On this page, we paste in the list of keywords for the language and indicate their case sensitivity.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz3Keywords.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Wiz3Keywords" border="0" alt="Wiz3Keywords" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz3Keywords_thumb.png" width="500" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;The wizard uses whitespace to delimit the keywords in the textbox.&amp;#160; This makes it easy to paste keywords directly from a table in a web page or PDF language specification.&amp;#160; The wizard will also auto-sort the keywords following completion.&lt;/p&gt;  &lt;h4&gt;Operators&lt;/h4&gt;  &lt;p&gt;On this page, operators for the language are pasted in.&amp;#160; A button can be used to auto-insert the most common operators used in most languages.&amp;#160; Also check which delimiters have special meaning in the language.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz4Operators.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz4Operators" border="0" alt="Wiz4Operators" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz4Operators_thumb.png" width="500" height="430" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For ECMAScript, we’ve pasted in the operators listed in the language specification and marked that parenthesis, curly and square braces are all significant.&lt;/p&gt;  &lt;h4&gt;Strings (primary syntax)&lt;/h4&gt;  &lt;p&gt;On this page, we indicate the primary string syntax.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz5StringsPrimary.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz5StringsPrimary" border="0" alt="Wiz5StringsPrimary" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz5StringsPrimary_thumb.png" width="500" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For ECMAScript, we select double quotes with backslash escapes as the primary syntax.&lt;/p&gt;  &lt;h4&gt;Strings (alternate syntax)&lt;/h4&gt;  &lt;p&gt;On this page, we indicate the alternate string syntax.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz6StringsAlternate.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz6StringsAlternate" border="0" alt="Wiz6StringsAlternate" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz6StringsAlternate_thumb.png" width="500" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For ECMAScript, we select single quotes with backslash escapes as the alternate syntax.&lt;/p&gt;  &lt;h4&gt;Numbers&lt;/h4&gt;  &lt;p&gt;On this page we choose which number literal types to support.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz7Numbers.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz7Numbers" border="0" alt="Wiz7Numbers" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz7Numbers_thumb.png" width="500" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;For ECMAScript, we choose all integer, real, and hex numbers.&lt;/p&gt;  &lt;h4&gt;Comments&lt;/h4&gt;  &lt;p&gt;On the final wizard page, we input the syntax for comments.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Wiz8Comments.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Wiz8Comments" border="0" alt="Wiz8Comments" src="http://blog.actiprosoftware.com/image.axd?picture=Wiz8Comments_thumb.png" width="500" height="430" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For ECMAScript, we choose &lt;strong&gt;//&lt;/strong&gt; to start single-line comments and &lt;strong&gt;/* */&lt;/strong&gt; to be the multi-line comment delimiters.&lt;/p&gt;  &lt;h3&gt;Next steps&lt;/h3&gt;  &lt;p&gt;When we press the &lt;strong&gt;Finish &lt;/strong&gt;button, a new dynamic lexer is initialized for us based on the language profile information we entered.&amp;#160; In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=09e83870-aae7-4626-a2a6-c7f11dabc9ce" target="_blank"&gt;next post&lt;/a&gt;, we’ll examine what was created.&amp;#160; Stay tuned!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/gez12kKzeFs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/gez12kKzeFs/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/07/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-3).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481</guid>
      <pubDate>Wed, 07 Oct 2009 02:44:53 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/07/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-3).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=f5de6f11-e0fd-4741-b9fe-1b94f28e0481</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 2)</title>
      <description>&lt;p&gt;This post is the second post in our series on upcoming enhancements to the SyntaxEditor for WPF &lt;strong&gt;Language Designer&lt;/strong&gt; application.&amp;#160; The &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7" target="_blank"&gt;previous post&lt;/a&gt; gave a high-level over view of the application and talked about language projects and definitions.&lt;/p&gt;  &lt;p&gt;One of the more common questions we receive related to SyntaxEditor is:&amp;#160; &lt;strong&gt;How do I get started creating a new language definition?&lt;/strong&gt;&amp;#160; The updates we’re doing to the Language Designer right now are attempting to directly address that question.&lt;/p&gt;  &lt;h3&gt;First opening the application&lt;/h3&gt;  &lt;p&gt;When you first open the Language Designer, no language project (.langproj file) is loaded so you are presented up-front with several Start Actions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LD1StartActions.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LD1StartActions" border="0" alt="LD1StartActions" src="http://blog.actiprosoftware.com/image.axd?picture=LD1StartActions_thumb.png" width="600" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Start Actions&lt;/strong&gt; include a number of items also found on the ribbon’s application menu:&amp;#160; New Language Project, Open Language Project (with links to recently-opened projects), and Import SE4 Definition.&amp;#160; &lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;New Language Project&lt;/strong&gt; action (highlighted above) will create a new blank language project.&amp;#160; &lt;strong&gt;Open Language Project&lt;/strong&gt; allows us to search our hard drive for a previously-created language project.&amp;#160; Clicking on a &lt;strong&gt;recently-opened .langproj filename&lt;/strong&gt; reopens it.&amp;#160; Finally, the &lt;strong&gt;Import SE4 Definition&lt;/strong&gt; action allows us to import a SyntaxEditor 4.0 for WinForms dynamic language XML definition file, and use it to create a new language project.&lt;/p&gt;  &lt;p&gt;We’ll pick the New Language Project action so that we can start with a blank language project.&lt;/p&gt;  &lt;h3&gt;General properties&lt;/h3&gt;  &lt;p&gt;As soon as a new language project is created, the &lt;strong&gt;General Properties&lt;/strong&gt; pane is opened.&amp;#160; This pane allows you to configure the high-level properties of the language.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LD2GeneralProperties.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="LD2GeneralProperties" border="0" alt="LD2GeneralProperties" src="http://blog.actiprosoftware.com/image.axd?picture=LD2GeneralProperties_thumb.png" width="600" height="387" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In our sample, let’s create a language definition for &lt;strong&gt;ECMAScript&lt;/strong&gt;.&amp;#160; Anytime the Language Designer asks for a “key,” that key should be assumed that it may be used in code generation.&amp;#160; Thus is must comply to the identifier naming guidelines for C# and VB.&amp;#160; We’ll set our language key to &lt;strong&gt;EcmaScript &lt;/strong&gt;and our language description to &lt;strong&gt;ECMAScript&lt;/strong&gt;.&amp;#160; We’ll also set our company name as the &lt;strong&gt;Creator&lt;/strong&gt; and an appropriate &lt;strong&gt;Copyright&lt;/strong&gt;.&amp;#160; Finally we’ll set some example text for the language that we can use to test our syntax highlighting later on.&lt;/p&gt;  &lt;h3&gt;Next steps&lt;/h3&gt;  &lt;p&gt;In the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=f5de6f11-e0fd-4741-b9fe-1b94f28e0481" target="_blank"&gt;next post&lt;/a&gt; of this series, we’ll use a wizard to quickly create a lexer for our ECMAScript language.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/wGLLz7EQPqQ" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/wGLLz7EQPqQ/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/06/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-2).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=67053190-6ee2-4c07-86ee-91143f20057e</guid>
      <pubDate>Tue, 06 Oct 2009 01:39:40 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=67053190-6ee2-4c07-86ee-91143f20057e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=67053190-6ee2-4c07-86ee-91143f20057e</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/06/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-2).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=67053190-6ee2-4c07-86ee-91143f20057e</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=67053190-6ee2-4c07-86ee-91143f20057e</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF Language Designer enhancements (part 1)</title>
      <description>&lt;p&gt;Many customers of our WinForms and WPF SyntaxEditor controls have asked for an easy way to get started building language definitions.&amp;#160; Languages definitions can be confusing when you are new to the product.&amp;#160; As we have been working on our next generation SyntaxEditor framework (used in the WPF version), we decided that having a robust Language Designer application would be extremely useful for customers.&amp;#160; The Language Designer is intended to be the ideal place to go when building a language definition for use with SyntaxEditor.&lt;/p&gt;  &lt;h3&gt;First builds&lt;/h3&gt;  &lt;p&gt;Up until now, the Language Designer (included with the WPF SyntaxEditor) was very simplistic and only allowed you to generate several classes that could be used with programmatic lexers.&amp;#160; It is and always has been our goal to add a lot more functionality to the app as we move forward and the next WPF Studio maintenance release will make a big step towards that goal.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Language projects and definitions&lt;/h3&gt;  &lt;p&gt;Also of note is that up until now, the WPF version of SyntaxEditor has been able to load the SyntaxEditor for WinForms dynamic language XML definitions directly.&amp;#160; We had that code in place as a stub until we could finalize a newer more flexible XML format that would work for all kinds of languages, not just ones with dynamic lexers.&lt;/p&gt;  &lt;p&gt;In the next WPF Studio build, we have created language project files (.langproj) and language definition files (.langdef).&amp;#160; Language project files are what can be loaded and edited by the Language Designer app.&amp;#160; The Language Designer app can import a SyntaxEditor for WinForms dynamic language XML definition to create a new language project based on it.&lt;/p&gt;  &lt;p&gt;The language project stores a lot of information about your language such as lexer configuration, classification types, etc.&amp;#160; We still have a lot of other language-related features that we want to make editable via the Language Designer and won’t make the cut for this next build.&amp;#160; But these other features will be added in the future.&lt;/p&gt;  &lt;p&gt;The Language Designer then can let you generate code based on your language project.&amp;#160; The generated code may include C#/VB code, and/or a language definition file.&amp;#160; The language definition is a file that can be loaded at run-time to auto-configure a language for use.&amp;#160; Think of it as the replacement for the WinForms dynamic language XML definitions.&lt;/p&gt;  &lt;h3&gt;Features in-depth&lt;/h3&gt;  &lt;p&gt;Over the coming days, we’ll blog with some screenshots showing the numerous enhancements we’ve recently made to the Language Designer.&amp;#160; These updates will be in the next maintenance release of WPF Studio, which will be released as soon as the Language Designer updates are complete and documented.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=67053190-6ee2-4c07-86ee-91143f20057e" target="_blank"&gt;next post&lt;/a&gt; will describe running the app for the first time and how to get started creating a new language project.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/s3SfVo2SXb4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/s3SfVo2SXb4/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/05/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-1).aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7</guid>
      <pubDate>Mon, 05 Oct 2009 03:23:53 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/05/SyntaxEditor-for-WPF-Language-Designer-enhancements-(part-1).aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=492a02b3-7fe6-4f5a-840f-190a264a2ac7</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=492a02b3-7fe6-4f5a-840f-190a264a2ac7</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF – Auto-showing a completion list when typing a new word</title>
      <description>&lt;p&gt;One feature that has been requested from several customers is the ability to show a completion list in response to starting to type a new word.&amp;#160; This functionality can be seen in Visual Studio 2008.&amp;#160; It can be thought of the same as typing in a letter that is a new word, and clicking on the VS 2008 “Display an object member list” button.&lt;/p&gt;  &lt;h3&gt;Displaying a completion list in response to a language-specific character&lt;/h3&gt;  &lt;p&gt;A previous build already added a property into the document text changed event arguments called &lt;strong&gt;e.TypedText&lt;/strong&gt; that is filled in only if the text change was caused due to a single typing operation, in which case it contains the text that was typed by the end user.&amp;#160; This allows you to handle that scenario (either via the &lt;strong&gt;SyntaxEditor.DocumentTextChanged&lt;/strong&gt; event or via an &lt;strong&gt;IEditorDocumentTextChangeEventSink&lt;/strong&gt; service implementation) and show a completion list when characters like &lt;strong&gt;“.”&lt;/strong&gt; or “&lt;strong&gt;&amp;lt;”&lt;/strong&gt; are typed.&amp;#160; Of course the characters you respond to depend on the language in use.&lt;/p&gt;  &lt;p&gt;Here is a sample of how to display an JavaScript completion list in one of those handlers in response to a &lt;strong&gt;“.” &lt;/strong&gt;character being typed:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (e.TypedText) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;&amp;quot;&lt;/span&gt;:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Open completion list session here&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Note that the completion list code (defined elsewhere) is responsible for knowing what to show and when.&amp;#160; These features are already available in the current build.&amp;#160; &lt;/p&gt;

&lt;h3&gt;Displaying a completion list automatically when a new word is starting to be typed&lt;/h3&gt;

&lt;p&gt;We were thinking how could we make it easy so that customers can also optionally have their languages show a completion list when a new word is starting to be typed.&amp;#160; The event args already give you all the information you need to determine if a new word is being typed, however it does involve a few lines of tedious text scanning.&amp;#160; So we wrapped it all up into one handy property.&amp;#160; Here is the code you’d add to your switch statement above if you wish to support automatic display of the completion list for word starts:&lt;/p&gt;

&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (e.TypedText) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;span style="color: #006080"&gt;&amp;quot;&amp;lt;&amp;quot;&lt;/span&gt;:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// Open completion list session here&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;default&lt;/span&gt;:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color: #008000"&gt;// If the text that was typed is a letter char that starts a word... &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (e.IsTypedWordStart) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// If no completion session is currently open...&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!editor.IntelliPrompt.Sessions.Contains(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;                 IntelliPromptSessionTypes.Completion)) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;                 &lt;span style="color: #008000"&gt;// Open the completion list session here&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;             }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The new &lt;strong&gt;e.IsTypedWordStart&lt;/strong&gt; property is only true when a single letter character is typed and that letter is starting a new word.&amp;#160; The word determination code uses the &lt;strong&gt;IWordBreakFinder&lt;/strong&gt; service defined for your language too.&lt;/p&gt;

&lt;p&gt;This new feature will be included in the next WPF Studio 2009.1 maintenance release.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/2HGXPl4qCWk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/2HGXPl4qCWk/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/02/SyntaxEditor-for-WPF-e28093-Auto-showing-a-completion-list-when-typing-a-new-word.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=4c39d93a-50bb-4ee6-9264-a837debaf1e9</guid>
      <pubDate>Fri, 02 Oct 2009 02:43:39 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>New features</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=4c39d93a-50bb-4ee6-9264-a837debaf1e9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=4c39d93a-50bb-4ee6-9264-a837debaf1e9</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/02/SyntaxEditor-for-WPF-e28093-Auto-showing-a-completion-list-when-typing-a-new-word.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=4c39d93a-50bb-4ee6-9264-a837debaf1e9</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=4c39d93a-50bb-4ee6-9264-a837debaf1e9</feedburner:origLink></item>
    <item>
      <title>Actipro Blog 2009 Q3 posting summary</title>
      <description>&lt;h3&gt;What we accomplished&lt;/h3&gt;  &lt;p&gt;In &lt;strong&gt;Quarter 3 of 2009&lt;/strong&gt; we focused on adding some significant value to our existing products while adding some new DataGrid support.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SyntaxEditor for WPF&lt;/strong&gt; saw the implementation of the &lt;strong&gt;multi-threaded&lt;/strong&gt; syntactic/semantic &lt;strong&gt;parsing framework&lt;/strong&gt;, integration with &lt;strong&gt;ANTLR&lt;/strong&gt; parsers via a new add-on, AST construction and error reporting features for the &lt;strong&gt;MGrammar&lt;/strong&gt; add-on, and robust &lt;strong&gt;hit testing&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DataGrid for WPF&lt;/strong&gt; was introduced as a new &lt;strong&gt;free&lt;/strong&gt; product for our customers.&amp;#160; It is a couple of add-ons that provide &lt;strong&gt;behavior extensions&lt;/strong&gt;, new &lt;strong&gt;themes&lt;/strong&gt;, and Editors for WPF &lt;strong&gt;integration&lt;/strong&gt; with the open source Microsoft WPF DataGrid control.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Docking/MDI for WPF&lt;/strong&gt; added &lt;strong&gt;tab tinting&lt;/strong&gt;, standard MDI window &lt;strong&gt;icons&lt;/strong&gt;, and &lt;strong&gt;magnetism&lt;/strong&gt; features.&lt;/p&gt;  &lt;h3&gt;What’s coming next&lt;/h3&gt;  &lt;p&gt;Right now we’re doing some very major enhancements to the SyntaxEditor &lt;strong&gt;Language Designer&lt;/strong&gt; tool, so that it will be very easy to create language definitions used by SyntaxEditor for WPF.&amp;#160; Once these enhancements are complete and documented, we’ll publish what will probably be the final WPF Studio 2009.1 maintenance release.&amp;#160; More information will be posted soon on the updates we’re doing.&lt;/p&gt;  &lt;p&gt;Following the final 2009.1 release, we will be working on some big updates for a &lt;strong&gt;WPF Studio 2009.2 version&lt;/strong&gt; that shouldn’t be too far behind.&amp;#160; One cornerstone feature of 2009.2 will be &lt;strong&gt;floating documents&lt;/strong&gt; like those found in &lt;strong&gt;VS 2010&lt;/strong&gt;.&amp;#160; We have some other surprises planned as well.&lt;/p&gt;  &lt;h3&gt;Blog post list&lt;/h3&gt;  &lt;p&gt;Here is a quick categorized list of blog postings made in this quarter.&amp;#160;  &lt;/p&gt;  &lt;h4&gt;SyntaxEditor for WPF&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/09/10/Next-SyntaxEditor-for-WPF-build-gets-mouse-hover-and-IntelliPrompt-quick-info-providers.aspx"&gt;Next SyntaxEditor for WPF build gets mouse hover and IntelliPrompt quick info providers&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/09/03/Next-SyntaxEditor-for-WPF-build-gets-configurable-caret-and-selection-brushes.aspx"&gt;Next SyntaxEditor for WPF build gets configurable caret and selection brushes&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/31/Is-there-interest-in-a-syntax-highlighting-code-editor-control-(SyntaxEditor)-for-Silverlight.aspx"&gt;Is there interest in a syntax-highlighting code editor control (SyntaxEditor) for Silverlight?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/26/SyntaxEditor-for-WPF-adds-robust-hit-testing-features.aspx"&gt;SyntaxEditor for WPF adds robust hit testing features&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/25/SyntaxEditor-for-WPFe28099s-MGrammar-add-on-adds-AST-construction-and-error-reporting-features.aspx"&gt;SyntaxEditor for WPF’s MGrammar add-on adds AST construction and error reporting features&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/19/Brainstorming-SyntaxEditor-for-WPFe28099s-IntelliPrompt-signture-info.aspx"&gt;Brainstorming SyntaxEditor for WPF’s IntelliPrompt signture info&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/13/Next-SyntaxEditor-for-WPF-build-adds-completion-list-auto-shrink-option.aspx"&gt;Next SyntaxEditor for WPF build adds completion list auto-shrink option&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/11/SyntaxEditor-for-WPF-to-add-integration-with-ANTLR-parsers.aspx"&gt;SyntaxEditor for WPF to add integration with ANTLR parsers&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/20/SyntaxEditor-updates-to-dynamic-lexers.aspx"&gt;SyntaxEditor updates to dynamic lexers - feedback wanted&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/13/SyntaxEditor-for-WPF-e28093-Adding-syntacticsemantic-parsing-support.aspx"&gt;SyntaxEditor for WPF - Adding syntactic/semantic parsing support&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/07/First-look-SyntaxEditor-language-template-builder-wizard.aspx"&gt;First look: SyntaxEditor language template builder wizard&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/07/SyntaxEditor-for-WPF-update-in-latest-WPF-Studio-build-502-release.aspx"&gt;SyntaxEditor for WPF update in latest WPF Studio build 502 release&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;DataGrid for WPF&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/27/WPF-Studio-integrates-with-and-adds-features-to-the-official-Microsoft-WPF-DataGrid.aspx"&gt;WPF Studio integrates with and adds features to the official Microsoft WPF DataGrid&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Docking/MDI for WPF&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/09/24/VS-2010-like-floating-document-features-coming-soon-to-DockingMDI-for-WPF.aspx"&gt;VS 2010-like floating document features coming soon to Docking/MDI for WPF&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/21/DockingMDI-for-WPF-to-get-new-magnetism-features.aspx"&gt;Docking/MDI for WPF to get new magnetism features&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/15/DockingMDI-for-WPF-to-add-icons-to-standard-MDI-windows.aspx"&gt;Docking/MDI for WPF to add icons to standard MDI windows&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/14/DockingMDI-for-WPF-to-add-individual-tab-tinting-like-in-OneNote.aspx"&gt;Docking/MDI for WPF to add individual tab tinting like in OneNote&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Editors for WPF&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/01/New-WPF-Studio-maintenance-release-adds-numerous-Editors-improvements.aspx"&gt;New WPF Studio maintenance release adds numerous Editors improvements&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Windows Forms&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/13/Latest-UIStudio-and-SyntaxEditor-for-WinForms-builds-help-prevent-memory-leaks.aspx"&gt;Latest UIStudio and SyntaxEditor for WinForms builds help prevent memory leaks&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;General&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/25/WPF-Studio-20091-build-505-released.aspx"&gt;WPF Studio 2009.1 build 505 released&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/08/24/WPF-Studio-20091-build-504-released-adding-DataGrid-functionality-SyntaxEditor-enhancements-and-much-more.aspx"&gt;WPF Studio 2009.1 build 504 released, adding DataGrid functionality, SyntaxEditor enhancements, and much more&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.actiprosoftware.com/post/2009/07/24/WPF-Studio-20091-build-503-adds-major-new-SyntaxEditor-and-DockingMDI-features.aspx"&gt;WPF Studio 2009.1 build 503 adds major new SyntaxEditor and Docking/MDI features&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/b4dx2FpySxs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/b4dx2FpySxs/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/10/01/Actipro-Blog-2009-Q3-posting-summary.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=f7d955d3-a3ac-4642-97ad-aff183442f2d</guid>
      <pubDate>Thu, 01 Oct 2009 15:40:55 -1200</pubDate>
      <category>Actipro</category>
      <category>General</category>
      <category>Blog Summary</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=f7d955d3-a3ac-4642-97ad-aff183442f2d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=f7d955d3-a3ac-4642-97ad-aff183442f2d</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/10/01/Actipro-Blog-2009-Q3-posting-summary.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=f7d955d3-a3ac-4642-97ad-aff183442f2d</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=f7d955d3-a3ac-4642-97ad-aff183442f2d</feedburner:origLink></item>
    <item>
      <title>VS 2010-like floating document features coming soon to Docking/MDI for WPF</title>
      <description>&lt;p&gt;We’ve been hard at work on some very major new &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/Docking/Default.aspx" target="_blank"&gt;Docking/MDI for WPF&lt;/a&gt; features that will be coming in the &lt;strong&gt;WPF Studio 2009.2&lt;/strong&gt; release.&amp;#160; In this post I’d like to give a quick preview of some enhancements: floating documents, maximizing rafting windows, and custom rafting window chrome.&lt;/p&gt;  &lt;p&gt;Here is a screenshot showing the new enhancements:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=FloatingDocs.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="FloatingDocs" border="0" alt="FloatingDocs" src="http://blog.actiprosoftware.com/image.axd?picture=FloatingDocs_thumb.png" width="600" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;VS 2010-like floating documents&lt;/h3&gt;  &lt;p&gt;The biggest new feature is the ability for tabbed documents to be able to be dragged outside of the MDI area into a &lt;strong&gt;floating state&lt;/strong&gt;, where they can be placed on a &lt;strong&gt;second monitor&lt;/strong&gt; if desired.&amp;#160; In the screenshot, the &lt;strong&gt;WelcomeDocument.rtf&lt;/strong&gt; docking window is a document window.&amp;#160; It can be docked anywhere in the tabbed MDI area or can be floated such as it is shown.&amp;#160; Note the document’s icon even appears in its titlebar.&lt;/p&gt;  &lt;h3&gt;Maximizing rafting windows&lt;/h3&gt;  &lt;p&gt;Rafting windows are containers for docking windows that are in a floating state.&amp;#160; Now all rafting windows can have the ability to &lt;strong&gt;toggle&lt;/strong&gt; between &lt;strong&gt;maximized&lt;/strong&gt; and &lt;strong&gt;restored&lt;/strong&gt; states.&amp;#160; You can see the maximized button on each of the rafted windows in the screenshot.&lt;/p&gt;  &lt;h3&gt;Custom chrome for rafting windows&lt;/h3&gt;  &lt;p&gt;All rafting window titlebars and borders in version 2009.2 will have a &lt;strong&gt;custom chrome&lt;/strong&gt; that matches the current application theme.&amp;#160; In the 2009.1 version, rafting windows let the system draw the titlebars and borders.&amp;#160; By having the rafting windows be themed, they truly &lt;strong&gt;match the application’s theme&lt;/strong&gt;.&amp;#160; This is especially useful for our built-in themes like the Office blue, silver, and black ones.&amp;#160; The rafting window in the screenshot that contains the &lt;strong&gt;Solution Explorer &lt;/strong&gt;and &lt;strong&gt;Class View&lt;/strong&gt; shows the new chrome, in this case for Aero theme.&lt;/p&gt;  &lt;h3&gt;Release timeframe&lt;/h3&gt;  &lt;p&gt;We have one more WPF Studio 2009.1 maintenance release planned for the coming weeks.&amp;#160; After that we will prepare for the first WPF Studio 2009.2 release, which will contain all the functionality described here.&lt;/p&gt;  &lt;p&gt;Remember that if you purchase WPF Studio 2009.1 now, you will get the 2009.2 version free when it is released since all WPF Studio license purchases come with a year of &lt;strong&gt;free upgrades to new versions&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/5XkDsj8XQUs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/5XkDsj8XQUs/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/09/24/VS-2010-like-floating-document-features-coming-soon-to-DockingMDI-for-WPF.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=deca1a15-c064-4722-a760-422ac2b0561d</guid>
      <pubDate>Thu, 24 Sep 2009 02:06:17 -1200</pubDate>
      <category>Actipro</category>
      <category>In development</category>
      <category>New features</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=deca1a15-c064-4722-a760-422ac2b0561d</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=deca1a15-c064-4722-a760-422ac2b0561d</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/09/24/VS-2010-like-floating-document-features-coming-soon-to-DockingMDI-for-WPF.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=deca1a15-c064-4722-a760-422ac2b0561d</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=deca1a15-c064-4722-a760-422ac2b0561d</feedburner:origLink></item>
    <item>
      <title>Next SyntaxEditor for WPF build gets mouse hover and IntelliPrompt quick info providers</title>
      <description>&lt;p&gt;One highly requested feature for &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt; is the ability to be notified when a &lt;strong&gt;mouse hover&lt;/strong&gt; occurs so that &lt;strong&gt;IntelliPrompt quick info tips&lt;/strong&gt; can be displayed in response.&amp;#160; Since WPF doesn’t include a mouse hover event, we implemented one ourselves that fires for editor views.&lt;/p&gt;  &lt;p&gt;We didn’t stop there though.&amp;#160; We wanted to make it simple for a language to provide quick info popups in response to mouse hover events.&amp;#160; Thus we came up with the new &lt;strong&gt;IQuickInfoProvider &lt;/strong&gt;service.&amp;#160; This service can be registered with a language.&amp;#160; It has three methods on it:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; GetContext(IHitTestResult hitTestResult);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; GetContext(IEditorView view, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; offset);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RequestSession(IEditorView view, &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; context, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; canTrackMouse);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We offer a &lt;strong&gt;QuickInfoProviderBase &lt;/strong&gt;abstract class that should be used as a base class for any implementations of &lt;strong&gt;IQuickInfoProvider &lt;/strong&gt;that you create.&amp;#160; &lt;strong&gt;QuickInfoProviderBase &lt;/strong&gt;fully implements mouse tracking such that when a mouse hover occurs over an editor view, it calls the &lt;strong&gt;GetContext&lt;/strong&gt; overload that accepts an &lt;strong&gt;IHitTestResult&lt;/strong&gt;.&amp;#160; The &lt;strong&gt;IHitTestResult&lt;/strong&gt; comes from our &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=a8d64b5a-d647-41a8-9fd7-2d8707d52604" target="_blank"&gt;previously-discussed hit testing feature&lt;/a&gt;.&amp;#160; The default implementation of this overload is to call the other &lt;strong&gt;GetContext&lt;/strong&gt; overload if the hit is over a character in the text area.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;GetContext&lt;/strong&gt; methods should return some object that gives detail about what is at the specified hit or offset, or a null reference if it is not important.&amp;#160; This could be some object as simple as an &lt;strong&gt;IToken&lt;/strong&gt; or some more complex context object.&amp;#160; The important part is that it supports value equality (&lt;strong&gt;Equals&lt;/strong&gt; method implementation) since as the mouse moves, the context returned by &lt;strong&gt;GetContext&lt;/strong&gt; is compared against the context of any already-open quick info session to see if the existing session should be closed or kept open.&amp;#160; &lt;/p&gt;

&lt;p&gt;By using &lt;strong&gt;GetContext&lt;/strong&gt;, the quick info provider knows when the mouse moves outside of the the region that is appropriate to an already-open quick info session, and when to open a new quick info session.&amp;#160; Once a new quick info session is needed, the &lt;strong&gt;RequestSession &lt;/strong&gt;method is called.&amp;#160; It is passed the editor view instance, the context object returned by &lt;strong&gt;GetContext&lt;/strong&gt;, and whether the mouse should be tracked (false when quick info is displayed in response to a toolbar button click for example).&lt;/p&gt;

&lt;p&gt;Your &lt;strong&gt;RequestSession &lt;/strong&gt;implementations are expected to create a new quick info session, store the passed context in the session, generate content for the quick info popup, and open the session (display the popup).&lt;/p&gt;

&lt;p&gt;By using this new provider mechanism, it’s very easy for languages to automatically support quick info display with a minimal amount of work.&amp;#160; All the mouse handling is done for you.&amp;#160; This feature will be in the next build and we’ve updated our quick info sample to show how easy it is to use.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/bjwbKQNC2XM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/bjwbKQNC2XM/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/09/10/Next-SyntaxEditor-for-WPF-build-gets-mouse-hover-and-IntelliPrompt-quick-info-providers.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=9c9c05af-34cb-433d-907d-cfec90c36b30</guid>
      <pubDate>Thu, 10 Sep 2009 02:43:59 -1200</pubDate>
      <category>Actipro</category>
      <category>New features</category>
      <category>XAML</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=9c9c05af-34cb-433d-907d-cfec90c36b30</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=9c9c05af-34cb-433d-907d-cfec90c36b30</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/09/10/Next-SyntaxEditor-for-WPF-build-gets-mouse-hover-and-IntelliPrompt-quick-info-providers.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=9c9c05af-34cb-433d-907d-cfec90c36b30</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=9c9c05af-34cb-433d-907d-cfec90c36b30</feedburner:origLink></item>
    <item>
      <title>Next SyntaxEditor for WPF build gets configurable caret and selection brushes</title>
      <description>&lt;p&gt;The next build of &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt; will have a number of new properties added to the &lt;strong&gt;SyntaxEditor &lt;/strong&gt;control that let you configure the &lt;strong&gt;caret&lt;/strong&gt; and &lt;strong&gt;selection&lt;/strong&gt; brushes used in the control:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;CaretBrush&lt;/li&gt;    &lt;li&gt;SelectionBackgroundActive&lt;/li&gt;    &lt;li&gt;SelectionBorderActiveBrush&lt;/li&gt;    &lt;li&gt;SelectionBackgroundInactive&lt;/li&gt;    &lt;li&gt;SelectionBorderInactiveBrush&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Brushes.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="Brushes" border="0" alt="Brushes" src="http://blog.actiprosoftware.com/image.axd?picture=Brushes_thumb.png" width="550" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We’ve also built a new QuickStart showing how easy it is to change colors and give your editor a truly unique look.&lt;/p&gt;  &lt;p&gt;These sort of features will also be available in the upcoming Microsoft .NET 4.0 release for common controls such as &lt;strong&gt;TextBox &lt;/strong&gt;too.&amp;#160; See &lt;a href="http://blogs.msdn.com/text/archive/2009/09/01/caret-brush.aspx" target="_blank"&gt;this post&lt;/a&gt; for caret brush details and &lt;a href="http://blogs.msdn.com/text/archive/2009/08/28/selection-brush.aspx" target="_blank"&gt;this post&lt;/a&gt; for selection brush details.&lt;/p&gt;  &lt;p&gt;With these new features in SyntaxEditor, you’ll be able to ensure your SyntaxEditor caret and selection brushes match those of the other native WPF controls, even when you create custom themes.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/RPB2VYt_GaE" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/RPB2VYt_GaE/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/09/03/Next-SyntaxEditor-for-WPF-build-gets-configurable-caret-and-selection-brushes.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=8ccb693e-860c-4b76-8d0e-cdaf2fbe07a8</guid>
      <pubDate>Thu, 03 Sep 2009 05:14:39 -1200</pubDate>
      <category>New features</category>
      <category>WPF</category>
      <category>Actipro</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=8ccb693e-860c-4b76-8d0e-cdaf2fbe07a8</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=8ccb693e-860c-4b76-8d0e-cdaf2fbe07a8</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/09/03/Next-SyntaxEditor-for-WPF-build-gets-configurable-caret-and-selection-brushes.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=8ccb693e-860c-4b76-8d0e-cdaf2fbe07a8</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=8ccb693e-860c-4b76-8d0e-cdaf2fbe07a8</feedburner:origLink></item>
    <item>
      <title>Is there interest in a syntax-highlighting code editor control (SyntaxEditor) for Silverlight?</title>
      <description>&lt;p&gt;We’ve had several people e-mail us asking if our &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt; product will be ported to &lt;strong&gt;Silverlight&lt;/strong&gt;.&amp;#160; Our efforts in this area will depend on how much interest there is in such a product.&lt;/p&gt;  &lt;p&gt;SyntaxEditor for WPF is the premier syntax-highlighting code editor control for WPF.&amp;#160; A potential Silverlight version could contain a large subset of the features found in the WPF version.&lt;/p&gt;  &lt;p&gt;We want to know what all you Silverlight devs out there think!&amp;#160; Please post some comment replies here or e-mail us and answer as many of the questions below as you can.&amp;#160; Your feedback will help determine if we move forward on a &lt;strong&gt;SyntaxEditor for Silverlight&lt;/strong&gt; or not.&lt;/p&gt;  &lt;h3&gt;Questions&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;The biggest question… is a syntax-highlighting code editor control something you would &lt;strong&gt;actually purchase and use&lt;/strong&gt; in your Silverlight applications?&lt;/li&gt;    &lt;li&gt;Please rank in priority order the &lt;strong&gt;required features&lt;/strong&gt; you would need at a minimum to make the control &lt;strong&gt;worth purchasing&lt;/strong&gt;.&lt;/li&gt;    &lt;li&gt;Please rank in priority order the &lt;strong&gt;optional features&lt;/strong&gt; that you’d like to see, but wouldn’t be absolutely necessary.&lt;/li&gt;    &lt;li&gt;If the information isn’t confidential, please give a general description of what you &lt;strong&gt;would be doing with the control&lt;/strong&gt; and how specifically you’d be using it in your Silverlight applications.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Thanks for your comments!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/iinyTIfO1jI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/iinyTIfO1jI/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/08/31/Is-there-interest-in-a-syntax-highlighting-code-editor-control-(SyntaxEditor)-for-Silverlight.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4</guid>
      <pubDate>Mon, 31 Aug 2009 02:43:12 -1200</pubDate>
      <category>Actipro</category>
      <category>Silverlight</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4</pingback:target>
      <slash:comments>24</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/08/31/Is-there-interest-in-a-syntax-highlighting-code-editor-control-(SyntaxEditor)-for-Silverlight.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=747ec3f9-0026-4a0a-a470-1c9aa8fcf4b4</feedburner:origLink></item>
    <item>
      <title>WPF Studio integrates with and adds features to the official Microsoft WPF DataGrid</title>
      <description>&lt;p&gt;In the most recent &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/WPFStudio/Default.aspx" target="_blank"&gt;WPF Studio 2009.1&lt;/a&gt; builds, we've integrated with and enhanced Microsoft's open source &lt;strong&gt;WPF DataGrid&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=LicenseDashboardDemo.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="LicenseDashboardDemo" src="http://blog.actiprosoftware.com/image.axd?picture=LicenseDashboardDemo_thumb.png" border="0" alt="LicenseDashboardDemo" width="400" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The WPF DataGrid (from the WPF Toolkit) comes packed with lots of features and has very active and helpful community forums. Actipro has built &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/DataGrid/Default.aspx" target="_blank"&gt;two add-ons&lt;/a&gt; for the WPF DataGrid and added a variety of samples.&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;Actipro WPF DataGrid Contrib&lt;/h3&gt;
&lt;p&gt;The Actipro WPF DataGrid Contrib is an &lt;strong&gt;open-source project&lt;/strong&gt;, which is a collection of DataGrid attached behaviors, commands, and extensions. In addition, we've added the &lt;strong&gt;ThemedDataGrid&lt;/strong&gt;, which is simply a &lt;strong&gt;restyled&lt;/strong&gt; version of the WPF DataGrid.&amp;nbsp; We've tweaked the system themes to look more professional out of the box and added three sharp &lt;strong&gt;Office 2007 themes&lt;/strong&gt; (blue, black, and silver). The themes are also integrated into our Shared Library's ThemeManager, which allows the theme to easily be &lt;strong&gt;changed dynamically&lt;/strong&gt; during runtime.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=Office2007Themes.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Office2007Themes" src="http://blog.actiprosoftware.com/image.axd?picture=Office2007Themes_thumb.png" border="0" alt="Office2007Themes" width="370" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This project is hosted on CodePlex (&lt;a href="http://actipro.codeplex.com"&gt;http://actipro.codeplex.com&lt;/a&gt;) and is &lt;strong&gt;freely available&lt;/strong&gt; for anyone to use.&amp;nbsp; A compiled version of this assembly is included in the WPF Studio installer, so it's easy to get started.&amp;nbsp; We will be continually adding features to Actipro WPF DataGrid Contrib and would love to hear your thoughts and requests.&lt;/p&gt;
&lt;h3&gt;Actipro Editors/DataGrid Interop&lt;/h3&gt;
&lt;p&gt;When we released our &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/Editors/Default.aspx" target="_blank"&gt;Editors for WPF&lt;/a&gt; product we included two interoperability assemblies, which make it extremely easy to use the Editors' controls in our &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/PropertyGrid/Default.aspx" target="_blank"&gt;PropertyGrid for WPF&lt;/a&gt; and &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/Ribbon/Default.aspx" target="_blank"&gt;Ribbon for WPF&lt;/a&gt; products. Now Actipro Editors/DataGrid Interop makes using the Editors' controls in the WPF DataGrid just as easy. It includes derivations of DataGridColumn that leverage the Editors' controls and can be added to the DataGrid.Columns collection. Several common properties of the controls are exposed by the DataGridColumn derivations, making it easy to configure.&lt;/p&gt;
&lt;p&gt;Columns are included for the following controls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BrushEditBox&lt;/li&gt;
&lt;li&gt;ColorEditBox&lt;/li&gt;
&lt;li&gt;DateTimeEditBox&lt;/li&gt;
&lt;li&gt;DoubleEditBox&lt;/li&gt;
&lt;li&gt;GuidEditBox&lt;/li&gt;
&lt;li&gt;Int32EditBox&lt;/li&gt;
&lt;li&gt;Int32RectEditBox&lt;/li&gt;
&lt;li&gt;MaskedTextBox&lt;/li&gt;
&lt;li&gt;PointEditBox&lt;/li&gt;
&lt;li&gt;RectEditBox&lt;/li&gt;
&lt;li&gt;SizeEditBox&lt;/li&gt;
&lt;li&gt;TimeSpanEditBox&lt;/li&gt;
&lt;li&gt;VectorEditBox &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This assembly is provided for &lt;strong&gt;free&lt;/strong&gt; to anyone who has a license to the &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/Editors/Default.aspx" target="_blank"&gt;Editors for WPF&lt;/a&gt; product.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;The WPF DataGrid is packed full of features, is highly customizable, and is backed by Microsoft and a very active community. The add-ons provided for free by Actipro make using the WPF DataGrid easier. Download WPF Studio today and get started.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/VC12Zh7Zut0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/VC12Zh7Zut0/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/08/27/WPF-Studio-integrates-with-and-adds-features-to-the-official-Microsoft-WPF-DataGrid.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=0a704015-6cd7-436d-a393-9508cb499d7a</guid>
      <pubDate>Thu, 27 Aug 2009 09:45:00 -1200</pubDate>
      <category>Actipro</category>
      <category>New features</category>
      <category>New product</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=0a704015-6cd7-436d-a393-9508cb499d7a</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=0a704015-6cd7-436d-a393-9508cb499d7a</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/08/27/WPF-Studio-integrates-with-and-adds-features-to-the-official-Microsoft-WPF-DataGrid.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=0a704015-6cd7-436d-a393-9508cb499d7a</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=0a704015-6cd7-436d-a393-9508cb499d7a</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF adds robust hit testing features</title>
      <description>&lt;p&gt;The lastest build of &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt; added a very robust &lt;strong&gt;hit testing feature&lt;/strong&gt;.&amp;#160; This is something that has been in the WinForms version for SyntaxEditor for a while and has been highly requested by our WPF customers.&lt;/p&gt;  &lt;p&gt;The feature allows you to provide a &lt;strong&gt;Point &lt;/strong&gt;(generally a &lt;strong&gt;mouse location&lt;/strong&gt;) and SyntaxEditor returns detailed information about what is under the &lt;strong&gt;Point&lt;/strong&gt;.&amp;#160; You can get offsets, text positions (line/col), text, tokens, etc.&amp;#160; &lt;/p&gt;  &lt;h3&gt;How does it work?&lt;/h3&gt;  &lt;p&gt;A hit test can be performed by first obtaining a &lt;strong&gt;Point&lt;/strong&gt; relative to the SyntaxEditor's coordinates and then calling the &lt;strong&gt;SyntaxEditor.HitTest&lt;/strong&gt; method.&amp;#160; This method returns an object of type &lt;strong&gt;IHitTestResult&lt;/strong&gt;.&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; IHitTestResult result = editor.HitTest(Mouse.GetPosition(editor));&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;The hit test result&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;IHitTestResult &lt;/strong&gt;object contains information about exactly what is at the location being hit tested.&amp;#160; It has a &lt;strong&gt;Type&lt;/strong&gt; property that provides a high-level categorization about the result, such as does the result specify the location was over a character in the text area, over a margin, over a splitter or scrollbar, etc.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;VisualElement&lt;/strong&gt; property provides a reference to the &lt;strong&gt;FrameworkElement&lt;/strong&gt; that was used as the result.&amp;#160; So if the location was over a &lt;strong&gt;ScrollBar&lt;/strong&gt;, that is what would be returned in this property.&lt;/p&gt;

&lt;p&gt;When the location is over an &lt;strong&gt;IEditorView&lt;/strong&gt;, that view is returned in the &lt;strong&gt;View &lt;/strong&gt;property.&amp;#160; If the location is over a margin in the view, the related &lt;strong&gt;IEditorViewMargin&lt;/strong&gt; is returned in the &lt;strong&gt;Margin &lt;/strong&gt;property.&lt;/p&gt;

&lt;p&gt;If the location is over a character in a view’s text area, the &lt;strong&gt;Offset &lt;/strong&gt;and &lt;strong&gt;Position&lt;/strong&gt; properties are filled in with the exact position of the character within the view’s &lt;strong&gt;Snapshot&lt;/strong&gt; (also made available in the result).&amp;#160; If the location is not directly over a character (such as when it is over a margin), the &lt;strong&gt;Offset &lt;/strong&gt;and &lt;strong&gt;Position &lt;/strong&gt;of the closest character is returned.&amp;#160; The &lt;strong&gt;Type &lt;/strong&gt;property can be used to determine if the location was over a character or not.&lt;/p&gt;

&lt;p&gt;There also is a helpful &lt;strong&gt;GetReader&lt;/strong&gt; method that returns an &lt;strong&gt;ITextSnapshotReader&lt;/strong&gt; initialized to the &lt;strong&gt;Offset&lt;/strong&gt;.&amp;#160; This allows you to instantly get the character at the offset, or get the token there.&amp;#160; You can navigate around the &lt;strong&gt;Snapshot’&lt;/strong&gt;s text/tokens using the reader.&lt;/p&gt;

&lt;h3&gt;The new hit testing QuickStart&lt;/h3&gt;

&lt;p&gt;We’ve added a QuickStart to demo the new hit testing feature.&amp;#160; As you move the mouse over anything in the &lt;strong&gt;SyntaxEditor &lt;/strong&gt;instance (splitters, scollbars, margins, text area, etc.), the TextBox below it displays details about the hit test result.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=HitTesting.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HitTesting" border="0" alt="HitTesting" src="http://blog.actiprosoftware.com/image.axd?picture=HitTesting_thumb.png" width="561" height="428" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the screenshot above, the mouse cursor is over the &lt;strong&gt;r&lt;/strong&gt; in the word &lt;strong&gt;QuickStart&lt;/strong&gt; on line #7.&amp;#160; The hit test information is telling us the snapshot version at the time of the hit test, which view it’s over, the offset and text position (both zero-based), the character, and information about the token that contains the offset.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;Summary&lt;/h3&gt;

&lt;p&gt;As you can see, we’ve built this hit testing mechanism so that the result gives you everything you need to know about what is at a particular location.&amp;#160; It is extremely useful for reacting to mouse move or hover events.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/JvSrojSq2s8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/JvSrojSq2s8/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/08/26/SyntaxEditor-for-WPF-adds-robust-hit-testing-features.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=a8d64b5a-d647-41a8-9fd7-2d8707d52604</guid>
      <pubDate>Wed, 26 Aug 2009 10:07:10 -1200</pubDate>
      <category>Actipro</category>
      <category>New features</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=a8d64b5a-d647-41a8-9fd7-2d8707d52604</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=a8d64b5a-d647-41a8-9fd7-2d8707d52604</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/08/26/SyntaxEditor-for-WPF-adds-robust-hit-testing-features.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=a8d64b5a-d647-41a8-9fd7-2d8707d52604</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=a8d64b5a-d647-41a8-9fd7-2d8707d52604</feedburner:origLink></item>
    <item>
      <title>SyntaxEditor for WPF’s MGrammar add-on adds AST construction and error reporting features</title>
      <description>&lt;p&gt;&lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/SyntaxEditor/Default.aspx" target="_blank"&gt;SyntaxEditor for WPF&lt;/a&gt;, our syntax-highlighting code editor control, has just made some big improvements to the &lt;strong&gt;Oslo Dataflow (MGrammar) Add-on&lt;/strong&gt;.&amp;nbsp; The enhancements include the ability to &lt;strong&gt;asynchronously parse text&lt;/strong&gt; and &lt;strong&gt;return AST and syntax error results&lt;/strong&gt;.&amp;nbsp; These updates appear in the latest &lt;a href="http://www.actiprosoftware.com/Products/DotNet/WPF/WPFStudio/Default.aspx" target="_blank"&gt;WPF Studio&lt;/a&gt; build.&lt;/p&gt;
&lt;h3&gt;What is the Oslo Dataflow (MGrammar) Add-on?&lt;/h3&gt;
&lt;p&gt;The add-on is a &lt;strong&gt;free component&lt;/strong&gt; that any SyntaxEditor for WPF customer can use.&amp;nbsp; It allows you to easily integrate parsers created via MGrammar with SyntaxEditor.&amp;nbsp; Previously, the add-on supported tokenization (&lt;strong&gt;lexing&lt;/strong&gt;) and was able to drive &lt;strong&gt;syntax highlighting&lt;/strong&gt; within the editor, all with just a few lines of code, as &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=dab7de3c-be14-40f1-972f-b841903118df" target="_blank"&gt;described in this previous post&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Parsing, AST construction, and error reporting&lt;/h3&gt;
&lt;p&gt;The add-on now includes a new &lt;strong&gt;DataflowParser&lt;/strong&gt; class that implements &lt;strong&gt;IParser&lt;/strong&gt;.&amp;nbsp; When registered with your language, documents using the language that are changed (generally by user typing) automatically log a request to have parsing done.&amp;nbsp; The parsing requests are queued and call back to the &lt;strong&gt;IParser&lt;/strong&gt; on a worker thread.&amp;nbsp; At this point the &lt;strong&gt;IParser &lt;/strong&gt;performs a parsing operation.&amp;nbsp; In the case of &lt;strong&gt;DataflowParser&lt;/strong&gt;, the parsing operation is a call to Oslo&amp;rsquo;s &lt;strong&gt;DynamicParser&lt;/strong&gt;.&amp;nbsp; Our &lt;strong&gt;DataflowParser&lt;/strong&gt; then returns an object of type &lt;strong&gt;IDataflowParseData&lt;/strong&gt;, which has a property containing the &lt;strong&gt;AST&lt;/strong&gt; graph node result along with a list of &lt;strong&gt;IParseError&lt;/strong&gt; objects, if any.&amp;nbsp; The &lt;strong&gt;IParseError &lt;/strong&gt;objects indicate syntax errors that occurred during the parse.&lt;/p&gt;
&lt;table style="width: 640px;" border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="640" valign="top"&gt;
&lt;p align="center"&gt;&lt;a href="http://blog.actiprosoftware.com/image.axd?picture=MGrammarSample.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MGrammarSample" src="http://blog.actiprosoftware.com/image.axd?picture=MGrammarSample_thumb.png" border="0" alt="MGrammarSample" width="600" height="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The screenshot above shows the updated sample included with WPF Studio.&amp;nbsp; It now listens to the document&amp;rsquo;s &lt;strong&gt;ParseDataChanged&lt;/strong&gt; event, which is an event that fires whenever the document&amp;rsquo;s &lt;strong&gt;ParseData &lt;/strong&gt;property is updated.&amp;nbsp; From this event, we write out the AST in the pane on the right and list the errors, if any, on the bottom.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Again, the parsing operation takes place on a worker thread, courtesy of our &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=9133992b-ef4e-4522-b36d-a466f386d32b" target="_blank"&gt;advanced parsing framework&lt;/a&gt;, and the result is returned asynchronously to the document&amp;rsquo;s &lt;strong&gt;ParseData&lt;/strong&gt; property.&amp;nbsp; This ensures that the parsing doesn&amp;rsquo;t block the UI thread.&lt;/p&gt;
&lt;h3&gt;Enabling the new parsing features&lt;/h3&gt;
&lt;p&gt;One line of code added to the &lt;a href="http://blog.actiprosoftware.com/post.aspx?id=dab7de3c-be14-40f1-972f-b841903118df" target="_blank"&gt;code described in this previous post&lt;/a&gt; enables all the multi-threaded functionality to parse your documents and update the &lt;strong&gt;ParseData &lt;/strong&gt;property asynchronously:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; language.RegisterService&amp;lt;IParser&amp;gt;(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DataflowParser(parser));&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What this does is register a new &lt;strong&gt;DataflowParser &lt;/strong&gt;object as an &lt;strong&gt;IParser&lt;/strong&gt; service with the language being used.&amp;nbsp; The &lt;strong&gt;parser&lt;/strong&gt; variable in the code above is assumed to contain a &lt;strong&gt;DynamicParser&lt;/strong&gt; instance, which is what is loaded from your MGrammar image.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;With these recent updates, your MGrammar-based parsers can completely drive SyntaxEditor&amp;rsquo;s lexing, syntax highlighting, parsing, AST construction, and error reporting, all with just a few lines of code.&amp;nbsp; It&amp;rsquo;s now easier than ever to add a code editor to your WPF applications that integrate with your MGrammar DSLs.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Actipro/~4/blMch_Nf3Fs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/Actipro/~3/blMch_Nf3Fs/post.aspx</link>
      <author>Bill Henning (Actipro)</author>
      <comments>http://blog.actiprosoftware.com/post/2009/08/25/SyntaxEditor-for-WPFe28099s-MGrammar-add-on-adds-AST-construction-and-error-reporting-features.aspx#comment</comments>
      <guid isPermaLink="false">http://blog.actiprosoftware.com/post.aspx?id=55e4dd2a-819e-42ed-9a55-91ebcf2fc077</guid>
      <pubDate>Tue, 25 Aug 2009 10:11:00 -1200</pubDate>
      <category>Actipro</category>
      <category>New features</category>
      <category>WPF</category>
      <dc:publisher>Bill Henning (Actipro)</dc:publisher>
      <pingback:server>http://blog.actiprosoftware.com/pingback.axd</pingback:server>
      <pingback:target>http://blog.actiprosoftware.com/post.aspx?id=55e4dd2a-819e-42ed-9a55-91ebcf2fc077</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://blog.actiprosoftware.com/trackback.axd?id=55e4dd2a-819e-42ed-9a55-91ebcf2fc077</trackback:ping>
      <wfw:comment>http://blog.actiprosoftware.com/post/2009/08/25/SyntaxEditor-for-WPFe28099s-MGrammar-add-on-adds-AST-construction-and-error-reporting-features.aspx#comment</wfw:comment>
      <wfw:commentRss>http://blog.actiprosoftware.com/syndication.axd?post=55e4dd2a-819e-42ed-9a55-91ebcf2fc077</wfw:commentRss>
    <feedburner:origLink>http://blog.actiprosoftware.com/post.aspx?id=55e4dd2a-819e-42ed-9a55-91ebcf2fc077</feedburner:origLink></item>
  </channel>
</rss>
