Archive for February, 2012

RSyntaxTextArea 2.0.1 Released

Sunday, February 19th, 2012

All “.0″ releases have an obligatory follow-up maintenance release.  Grab RSyntaxTextArea 2.0.1 from SourceForge or Subversion today!  This release fixes the two following things:

  1. If SearchEngine selects text as part of a search/replace operation, and that text in a collapsed fold, the fold should be expanded to make the selection visible.
  2. The DTD for themes, theme.dtd, was not included in the 2.0.0 RSyntaxTextArea binary jar.  This made themes (one of the new features!) unusable since they could not be validated.

In addition, I made an API change.  I know it’s somewhat taboo to do that for minor releases, but it’s a straightforward change in your code to stay up to date.  This change is being made to support enhancements to the find/replace functionality in RSTA moving forward.

Previously, to do a find or replace operation in RSyntaxTextArea, you used one of the following methods from the SearchEngine class:

SearchEngine.find(JTextArea textArea, String text, boolean forward, boolean matchCase, boolean wholeWord, boolean regex);
SearchEngine.replace(JTextArea textArea, String toFind, String replaceWith, boolean forward, boolean matchCase, boolean wholeWord, boolean regex);
SearchEngine.replaceAll(JTextArea textArea, String toFind, String replaceWith, boolean matchCase, boolean wholeWord, boolean regex);

This is functional, but messy, and adding new options in the future would simply make the method signatures even longer (or introduce overloads).  To remedy this, I took a sip of the OO-KoolAid, and created a new SearchContext class.  This class keeps track of all information relevant to a find/replace operation.  The SearchEngine methods above now take a SearchContext instance as a parameter:

SearchEngine.find(JTextArea textArea, SearchContext context);
SearchEngine.replace(JTextArea textArea, SearchContext context);
SearchEngine.replaceAll(JTextArea textArea, SearchContext context);

This allows the searching API to stay clean, and adding support for a new search option is as easy as adding a new property to the SearchContext bean.  I hope to add support for at least two new search options in the future:  “search in selection” and “ignore comments.”

The actual SearchEngine class will likely be simplified as well.  Currently, it takes a different code path if you do a regex search than when you do a plain text search.  More code => more chances for bugs.  I’ll likely convert the plain text scenario into a regex one under the covers (convert your “find” text to a regex by escaping characters special for regular expressions).  This, along with making RSyntaxDocument a CharSequence, will greatly simplify the searching code, as well as provide a performance boost when searching large files.  All of this is implementation details of course, and won’t matter to someone just using the library.

Only RSyntaxTextArea has a 2.0.1 release.  AutoComplete, SpellChecker, etc. are still at 2.0.0 as they did not need any modifications.

RSyntaxTextArea 2.0.0 (final!) Released

Monday, February 13th, 2012

Enough with the betas!  RSyntaxTextArea 2.0.0 was finally released yesterday.  Folding appears stable enough and performance is good.  Editing a 400,000 line Java file with folding enabled does exhibit some delay while typing, but none while painting/scrolling – good enough for me!

Moving forward, focus will be shifted once again to code completion and RSTALanguageSupport.  JavaScript and Java completion both have work that needs to be done.  CSS highlighting also needs a little work (I never realized how complex CSS really is.  I’ve also had requests for “search in selection” and a few other miscellaneous features.  Any more suggestions for 2.0.1?  Post a reply here or in the forum!

The online Javadoc has been updated, and I’ll update the examples next.

 

JavaScript Language Support Updates

Monday, February 6th, 2012

First, a quick note that RSyntaxTextArea 2.0.0-beta3 is available on SourceForge!  Among other things, this release greatly improves syntax highlighting for JavaScript, HTML, PHP and JSP.

I promise RSTA won’t stay on this “beta” release track forever…

Anyway, there’s also been progress in the JavaScript language support.  It’s been in SVN for serveral days now, I just never got around to blogging about it.  Some of the “polish” I spoke of in my last post is now there:

JavaScript Improvements

JavaScript Improvements

Note the icons in the completion choices window and the outline tree on the left-hand side.  Clicking on an element in the outline tree selects that element in the editor, just like in the Java support.  We also now have Go To Member support:

Go to Member

Go to Member

Ctrl+Shift+O (Cmd+Shift+O on OS X) displays this popup allowing you to type/select the name of a variable or function to navigate to in the editor.

Here’s what’s coming up next with JS support:

  1. Take scoping into account when displaying completion choices.
  2. Use knowledge of variable types to provide better completion choices.
  3. Clean up JSDoc descriptions in the completion description window.