======================== CleanCode Release Notes ======================== $Id: readme.txt 1418 2013-06-25 20:34:14Z ms $ The CleanCode system encompasses PowerShell, C#, Perl, Java, SQL, and JavaScript libraries and programs. Each library is packaged as a zip file, each containing formal documentation along with the source code, except for JavaScript (though even the JS is reasonably commented). The Java zip file additionally includes a complete ready-to-use jar file. The C# zip additionally includes a set of ready-to-use DLLs. All documentation is also available on the CleanCode website -- see http://cleancode.sourceforge.net/wwwdoc/APIbookshelf.html. A great starting point for seeing what controls, engines, and applications CleanCode can offer you is on the product page (http://cleancode.sourceforge.net/wwwdoc/software.html). See the release information page at http://cleancode.sourceforge.net/wwwdoc/download.html for dependent library requirements. To see the articles I have written about many of the components available on this site, see my article list at http://cleancode.sourceforge.net/wwwdoc/articles.html. ======================== CleanCode Change History ======================== ############################################################################# 1.2.03 2013.06.30 Select-StringAligned and DocTreeGenerator ############################################################################# Bugfixes======== [128 PowerShell: CleanCode.DocTreeGenerator] Assumed a single .LINK directive was the correct structure; now correctly handles one .LINK per link. [127 PowerShell: CleanCode.Get-SvnLog] Patched Get-SvnLog to allow "Get-SvnLog ." to work on an incorrectly-cased path. [126 PowerShell: CleanCode.DocTreeGenerator] Reprise a fix to this issue: prior fix added filters to contents but did not actually generate the documentation pages. Cosmetic======== [PowerShell: CleanCode.FileTools] ConvertFrom-Text help was not placed correctly so Get-Help did not show it. [PowerShell: CleanCode.SvnTools.SvnLog] Changed property names: "Msg" to "Message" and "author" to "Author". [PowerShell: CleanCode.*] Incorrect use of the .LINK directive caused "Related Links" to be suppressed by help viewed from within Show-Command. Enhancements ==== [PowerShell: CleanCode.FileTools] Added new Select-StringAligned cmdlet to enhance formatting of Select-String and to colorize search pattern in results. [PowerShell: CleanCode.DocTreeGenerator] Enhanced to use flowing text (instead of
 text) in most sections.
	Enhanced highlighting/spacing of examples.
	Added support for links to local functions in different modules.


#############################################################################
1.2.02  2013.03.31 Minor maintenance release
#############################################################################

Bugfixes========

[125 PowerShell: CleanCode.IniFile]
	Get-IniFile now correctly recognizes properties with single-character names.

[126 PowerShell: CleanCode.DocTreeGenerator]
	Convert-HelpToHtmlTree now documents filters as well as functions
	
[perl/bin/list.pl]
	Disabled taint (-T) mode to allow list.pl to work on CleanCode site.

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
[CleanCode.SqlEditorControls.SqlEditor]
	Retargeted dependencies to consistent framework (.NET 3.5).
	Added PostBuildEvent so all projects copy the DLL to release directory.


Cosmetic========

[PowerShell: CleanCode.FileTools.IniFile]
	Removed copy-and-paste artifact from doc-comments on Get-IniFile.

[build file]
	Added patch for antdoc-generated web pages to have proper line breaks
		in displayed ant task code.

Enhancements ====

[PowerShell: CleanCode.FileTools]
	Added ConvertFrom-Text function to convert text to objects.

[External C# libraries]
	Brought all external packages to a uniform framework revision (3.5).
	Repackaged C# dependency files to include source along with compiled DLLs.
	Adjusted assembly versions to auto-include the build number.


#############################################################################
1.2.01  2012.12.10 SQL Tools in PowerShell
#############################################################################

Bugfixes========

[124 PowerShell: CleanCode.SvnTools.SvnInfo]
	Omitting Property parameter now correctly emits all properties.

[123 PowerShell: CleanCode.SvnTools.SvnInfo]
	Path trimming prefixes containing colon now supported.

[122 PowerShell: CleanCode.DocTreeGenerator]
	Convert-HelpToHtmlTree now properly documents undocumented functions
		with their syntax and the "Syntax" header.

[121 PowerShell: CleanCode.DocTreeGenerator]
	Convert-HelpToHtmlTree now properly documents greater than 9 examples.

[120: PowerShell: CleanCode.FileTools.GetChildItemExtension]
	Fixed -Svn switch so that .svn directory itself is skipped.


Cosmetic========
-none-


Enhancements ====

[PowerShell: CleanCode.SqlTools]
	Added new SqlTools package.
	Added Out-DataTable to convert PS objects to a data table.
	Added Add-SqlTable to create a SQL table from an inferred schema.
	Added Write-DataTable to write data table to existing SQL table.
	Added Out-SqlTable to do the above three in one cmdlet.
	Added Get-DBPathInfo to Infer the server and database from current location
		or, if not on a SQL drive, then from the default SQLSERVER: drive.
	Added Update-DBEnvironment to update the supplied server and database
		with inferred values if supplied values are undefined.
	Added Invoke-InferredSqlcmd to run Invoke-Sqlcmd with inferred context
		even if not on a SQL Server drive.

[PowerShell: CleanCode.SvnTools.SvnLog]
	Added log message property to output.
	Converted Paths property from XmlElement to string.
	Added support for URL as well as file path.
	Added support for specifying revisions by tag name as well as rev number.

[PowerShell: CleanCode.SvnTools]
	Renamed module from SvnSupport to SvnTools. (breaking change)

[PowerShell: CleanCode.FileTools]
	Renamed module from FileSupport to FileTools. (breaking change)


#############################################################################
1.1.04  2012.08.31 Minor maintenance release
#############################################################################

Bugfixes========

[3552316 CleanCode.GeneralComponents.Controls.ComboBoxWithTooltip]
	Fixed runtime error when ComboBox DropDownStyle set to DropDownList.
	(ArgumentOutOfRangeException)

[3526813 CleanCode.DatabaseControls.QueryPicker]
	Fixed incorrectly parsed "List database with space usage" query template.

[3557161 PowerShell: CleanCode.DocTreeGenerator]
	Convert-HelpToHtmlTree now works even if external PSCX library is loaded.
	(PSCX defined its own version of Get-Help, so changed to use explicit path.)


Cosmetic========

[PowerShell]
	Decorated several API doc pages with reference links.


Enhancements ====

[PowerShell: CleanCode.SvnSupport.SvnLog]
	New function to analyze Subversion log data, making it easy to generate
		statistics with respect to commits, authors, files, and dates.

[PowerShell: CleanCode.SvnSupport.SvnInfo]
	Added ContainersOnly parameter.
	Changed excision separator from vertical bar to colon. (breaking change)

[PowerShell: CleanCode.DocTreeGenerator]
	Improved robustness of regex to isolate user-level module repository path.
	Added live link generation to RELATED LINKS section.
	Added CSS styling to section headings.

[PowerShell: CleanCode.FileSupport.USBInfo]
	New functions to provide information on installed USB drives.

[PowerShell: CleanCode.IniFile]
	Relocated function under FileSupport Module. (breaking change)


#############################################################################
1.1.03  2012.04.30 Minor maintenance release
#############################################################################

Bugfixes========

[3466812 PowerShell: CleanCode.SvnSupport.SvnKeyword]
	Suppressed extraneous output on stdout from one cmdlet.

[3517284: PowerShell CleanCode.FileSupport.GetChildItemExtension]
	Corrected Get-EnhancedChildItem to handle corner cases relating
	to ancestral path component of same name as that passed to -ExcludeTree.

[xx CleanCode.DatabaseControls.MultiConnectionStringManager]
[xx CleanCode.SqlEditorControls.SqlEditor]
	Failed to dispose of modal dialogs after use.


Cosmetic========

[PowerShell: CleanCode.*]
	Made indents consist of tabs rather than spaces in PowerShell library.


Enhancements ====

[PowerShell: CleanCode.SvnSupport.SvnInfo]
	Added capability to trim prefixes by regex (with UseRegex switch).

[PowerShell: CleanCode.FileSupport]
	Renamed from CleanCode.EnhancedChildItem. (breaking change)
	Added New-FileTree function to generate files and dirs for testing.



#############################################################################
1.1.02  2011.11.11 Minor maintenance release
#############################################################################

Bugfixes========
-none-


Cosmetic========

[perl/bin/*]
	Removed unneeded HTML entity references in Perl API docs that were appearing
		as literal references rather than the characters to which they refer.

[PowerShell: CleanCode.DocTreeGenerator]
	Added manifest for DocTreeGenerator module to source control.

[PowerShell]
	Added favicon to API documentation template.


Enhancements ====

[PowerShell: CleanCode.EnhancedChildItem]
	Updated to work with the revised metadata storage of Subversion 1.7,
		which now has a central .svn folder in the root rather than
		a .svn folder for each folder.

[PowerShell: CleanCode.SvnSupport.SvnKeywords]
	Removed explicit path to "svn" executable for flexibility;
		assume it is in the user's path.

[PowerShell: CleanCode.SvnSupport.SvnTrackerPattern]
	New function to identify log patterns used by TortoiseSVN.

[SQL.ValidateStoredProcs]
	New script to validate some or all stored procedures.

[perl/bin/sqldoc2xml]
	Updated to support scripts in addition to stored procs and functions.


#############################################################################
1.1.01  2011.10.31 New PowerShell Library
#############################################################################

Bugfixes========

[all csproj files]
	Build event to copy DLLs to repository was missing a final path separator,
		causing copy to fail if the repository directory did not exist.


[2912137 CleanCode.SqlEditorControls.SqlEditor]
	Added support for binary field types in a DB result set,
		overcoming an inherent weakness in the .NET DataGridView control.
	Added associated RowLimitForBinaryFieldPatching property.


Cosmetic========
	Added svn:keywords properties to a couple files lacking it.


Enhancements ====

New PowerShell library with these modules:
	Assertion, DocTreeGenerator, EnhancedChildItem, IniFile, and SvnSupport.

[3187592 CleanCode.GeneralComponents.Controls.ComboBoxWithTooltip]
	New control to support tooltips on ComboBox controls.

[3187592 CleanCode.SqlEditorControls.SqlEditor]
	Uses ComboBoxWithTooltip for file selector, letting the user
		see the full path that was previously viewable with difficulty.


#############################################################################
1.0.1  2010.12.31 Minor maintenance release
#############################################################################

Bugfixes========


Cosmetic========

Converted from VS2008 to VS2010.

Converted from .NET 2.0 to .NET 3.5, obviating the need for LinqBridge.


Enhancements ====

[CleanCode.Diagnostics.EnumerableDebugger]
	New class for examining intermediate values in a LINQ chain.


#############################################################################
1.0.0  2010.05.31 Minor maintenance release
#############################################################################

Bugfixes========

[3000140 CleanCode.Net.WMIHelper]
[3000140 CleanCode.DataGridViewControls.ExtendedDataGridView]
	Added InvariantCulture to Date.Parse call (or removed the call completely)
		using fixed format string, which failed with FormatException
		for international language setting.

[3000160 CleanCode.DatabaseControls.MultiConnectionStringManager]
	Retained correct details of currently selected connection
		after saving the connection set.

[3005375 CleanCode.DatabaseControls.ConnectionStringManager]
	Populating DB dropdown no longer depends on user's DB permissions.


Cosmetic========
-none-


Enhancements ====

[all csproj files & build file]
	Build now copies finished DLLs to central repository.
	Updated external references to point to project-neutral repository.
	Repackaged release files so source archive can now be compiled
		to regnerate DLLs right out of the box
		(i.e. no longer requires adjusting external reference paths).

[CleanCode.DataGridViewControls.ExtendedDataGridView]
	Arranged date-formatting choices on context menu to
		reflect regional language changes by user.

[CleanCodeControls.Support.DbDetails]
	Changed existing GetDatabaseEnumeratorQuery to return only
		non-system databases and added overload to allow selecting
		either all or non-system databases.

[CleanCode.DatabaseControls.ConnectionStringManager]
	Changed database dropdown to display non-system DBs only by default
		but with the shift key to also include system DBs.

[CleanCode.DatabaseControls.QueryPicker]
	Attached schema file to query library so it validates within Visual Studio.
	Added query to find tables across multiple databases (SQL Server).
	Deleted DatabaseName column from several queries because their domain
		is always the current database (SQL Server).
	Standardized field names (SQL Server).
	Added/modified ORDER BY clauses to eliminate warning messages when
		TurboSort is enabled at the time a meta-query is executed (SQL Server).


#############################################################################
0.9.33  2010.04.30 Minor maintenance release
#############################################################################

Bugfixes========

[2963711 CleanCode.SqlEditorControls.SqlEditor]
	DbConnectionChanged event firing too early; moved to last step.

[2968786 CleanCode.SqlEditorControls.SqlEditor]
	If meta-query is executed invisibly (the default) with TurboSort enabled,
		the TurboSort scanner mistakenly scans the query in the buffer
		rather than the text of the "invisible" meta-query.

[2986604 CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Removed default tokens for comments, quotes, and variables,
		allowing custom dialects to not use these tokens.
	Also removed warnings if individual delimiters are not specified.

[2988431 CleanCode.GeneralComponents.Support.ContainerTestInfo]
	InTestDrivenUnitTest() now recognizes invocation from command-line
		in addition to invocation from within Visual Studio.


Cosmetic========

[CleanCode.DatabaseControls.ConnectionStringManager]
[CleanCode.DatabaseControls.QueryPicker]
[CleanCode.DataGridViewControls.ExtendedDataGridView]
[CleanCode.GeneralComponents.Controls.FileMask]
[CleanCode.GeneralComponents.Controls.ProgressBarMessager]
[CleanCode.SqlEditorControls.SqlEditor]
[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Removed non-settable properties from designer view.

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Moved comment stripping into new StripCommentsFromQuery method in DBHelper.
	Added reporting place holders in context info popup.
	Corrected the URL specifying the context file schema in doc-comments.
	Corrected garbled section of API due to incorrect Sandcastle commands.
	Suppress pop up user warning if run inside unit test.

[CleanCode.DatabaseControls.QueryPicker]
	Fixed SqlServer 'Column info/details' meta-query to properly filter to tables and views.

[CleanCode.SqlEditorControls.SqlEditor]
	Adjusted ExecuteQueryStart event to indicate more accurate count
		of SqlEditors involved.
	Corrected imbalance in diag instrumentation in SplitterMoved event handler.

[CleanCode.GeneralComponents.Controls.SyntaxHilightTextBox]
	This long-deprecated control and its subclasses
		have been deleted. (breaking change)


Enhancements ====

[CleanCode.Data.DBHelper]
	Added StripCommentsFromQuery method.
	Changed from static class to instance class (breaking change).

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Added read-only properties:
		BlockCommentStartMark, BlockCommentEndMark, EndOfLineCommentMark.
	Added color-coding of hint keywords to SQL Server dialect.
	Attached schema file to pre-defined SQL contexts so they
		validate within Visual Studio; required renaming the schema
		from "context definition.xsd" to ContextDefinition.xsd.

[CleanCode.SqlEditorControls.SqlEditor]
	Removed DbConnectionChangedEvent; (breaking change)
		replaced with PropertyChanged event firing for DbConnectionName.
	Added PropertyChanged event firing for CsvPath and SqlPath.


#############################################################################
0.9.32  2010.02.28 Minor maintenance release
#############################################################################


Bugfixes========

[2945441 CleanCode.DatabaseControls.QueryPicker]
	Fixed metachar brackets in Oracle "non-empty tables" query in library.

[2945414 CleanCode.Data.MultiColumnSort]
	Made check for 'order by' case insensitive.

[2948256 CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
[2948256 CleanCode.SqlEditorControls.SqlEditor]
[2948256 CleanCode.DataGridViewControls.ExtendedDataGridView]
	Instrumented the HelpDisplayer property (just introduced in 0.9.31)
	of these controls with the DesignerSerializationVisibility attribute
	to correct the display of them in the visual designer.

[2949393 CleanCode.DataGridViewControls.ExtendedDataGridView]
	Send-to-Excel intermittent failure now just shows a warning pop-up
	instead of throwing an InvalidOperationException.

[2949504 CleanCode.SqlEditorControls.SqlEditor]
	SqlEditor.SetFile() now honors the TandemMode setting when
		two SqlEditors are linked. 

[2953311 CleanCode.SqlEditorControls.SqlEditor]
	In tandem mode when linked partner attempts to load a non-existent file,
		clear the query buffer to avoid perceived misassociation
		of the old text with the new name.
 
[2954006 CleanCode.Data.MultiColumnSort]
[2954006 CleanCode.SqlEditorControls.SqlEditor]
	Allow for semicolon stmt terminator when parsing.

[2954004 CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Fixed support for retaining special comments as part of active code,
		(allowing e.g. hints for MultiColumnSort to be passed through).


Cosmetic========

[CleanCode.SqlEditorControls.SqlEditor]
	Cleaned up and updated help panel details.


Enhancements ====

[CleanCode.GeneralComponents.Controls.FileMaskControl]
	Exposed FitsOneOfMultipleMasks method.
	Renamed to FileMaskControl to FileMask (breaking change).

[CleanCode.SqlEditorControls.SqlEditor]
	Changed ExecuteQueryFinished event semantics: now firing whether query
		is successfully loaded or not.
	Added Successful property to indicate state of last query load/execute.
	Added info display of turbo-sort parameters with Alt key when executing.

[CleanCode.DatabaseControls.QueryPicker]
	Added three SQL Server meta-queries: session information/brief,
		users and roles, and currently running statements.
	Adjusted table name to be wider field in two meta-queries.
	
[CleanCode.Data.MultiColumnSort]
	Added Details property to supply sort fields and aliases for diagnostics.
	Changed from class object to instance object. (breaking change)
	Added support for providing hints to indicate "select" clause
		using special comments.

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Added ScrollToEnd method.

[CleanCode.Data.ListExtensions]
	New class with ToTokenString() extension method as a convenience method
		to display the contents of a list.


#############################################################################
0.9.31  2010.01.31 New FileMask Control and Sandcastle Instrumentation
#############################################################################

Besides the codebase changes this release saw a major overhaul in
the C# API with a changeover from ndoc to Sandcastle.
Sandcastle provides the API with a more modern look and feel,
collapsible code sections, syntax-highlighting of code,
and compatibility with non-IE browsers (e.g. Firefox).
There are a few minor drawbacks, notably the size of the documentation set
increased, so the C# package (including binaries, source, and documentation)
increased from 3.2MB to 7.3MB.

Bugfixes========
[2899932 CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Fixed particular comment signature causing invalid syntax.


Cosmetic========

[CleanCode.SqlEditorControls.SqlEditor]
	Improved warning message when binary fields are encountered in result set.

[assorted files]
	Cleaned up minor doc-comment infractions and added customizations
		for changeover from ndoc to SandCastle documentation generator.
	Removed API doc path from each file since all paths changed.


Enhancements ====

[CleanCode.GeneralComponents.Controls.FileMaskControl]
	New user control to support file selection via multiple file masks.

[CleanCode.Data.RoundedTimeSpan]
	New struct for displaying different TimeSpan precisions.

[CleanCode.SqlEditorControls.SqlEditor]
[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
[CleanCode.DataGridViewControls.ExtendedDataGridView]
	Added capability to supply alternate response to F1 (help) key or suppress completely.

[CleanCode.IO.UpdateCheck]
	Allow packages to use dot, dash, or underscore within the version number
		instead of just dash.
	Made more forgiving to accept null or empty for search path.

[CleanCode.Forms.WindowRestorer]
	Overloaded SetSubWindowRelativeLocation method with
		a simplified, one-argument variation.

[CleanCode.Forms.WindowRestorer]
[CleanCode.GeneralComponents.Dialogs.DisplayCommandsForm]
[CleanCode.SqlEditorControls.SqlEditor]
	Removed redundant parentForm argument from existing
		SetSubWindowRelativeLocation constructor.



#############################################################################
0.9.30  2009.10.31 Minor maintenance release
#############################################################################

Bugfixes========

[2852366 CleanCode.Data.OdbcDsnInfo]
	Fixed null reference exception on machines with no ODBC connections defined.
		Manifested during initialization of high-level SqlEditor control.

[2886696 CleanCode.DatabaseControls.QueryPicker]
	Fixed exception if library file is invalid.

[2865278 CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Separator list now reset when new context is applied.

[2865915 CleanCode.SqlEditorControls.SqlEditor]
	Swapping tab/ctrl+tab was incomplete w/o tandem mode.


Cosmetic========

[CleanCode.Forms.WindowRestorer]
	Added additional doc-comments.

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Renamed "Command Completion" to "Keyword Completion" on context menu.
	Added window dressing to a couple message boxes.

[CleanCode.DatabaseControls.QueryPicker]
	Added window dressing to a couple message boxes.


Enhancements ====

[CleanCode.Data.MultiColumnSort]
	Added support for providing hints to indicate "order by" clause
	using special comments.

[CleanCode.ChameleonRichTextBoxControls.ChameleonRichTextBox]
	Added support for retaining special comments as part of active code,
		(allowing e.g. hints for MultiColumnSort to be passed through).

[CleanCode.DataGridViewControls.ExtendedDataGridView]
	Added Ctrl+; shortcut to copy field names of selected cells.

[CleanCode.DatabaseControls.ConnectionStringManager]
	Added SuppressEncryptionErrors and EncryptionErrors properties
		to streamline loaded connection sets.
	Added user name to encryption errors to identify which connection.

[CleanCode.DatabaseControls.MultiConnectionStringManager]
	Report all connection encryption errors in a single message box,
		as well as unnamed connections.
	Changed return value of LoadConnectionList from bool to void,
		since reporting unnamed connections is now internalized.

[CleanCode.SqlEditorControls.SqlEditor]
	Moved alternate functions on "New file" button to drop-down
		to allow adding tandem-override to the set of functions.
	Partner grid on first-time file load will now also present
		open-file dialog instead of obfuscating with same directory.
	Removed reporting of unnamed connections here as they are now reported with
		encryption errors in a single pop-up by MultiConnectionStringManager.
	Changed signature of QuerySelectorForm.Setup from void to bool
		to allow displaying query form only if library was successfully loaded.

[CleanCode.DatabaseControls.QueryPicker]
	Exclude loading query library if dbtype is None, preventing
		error pop-ups, if any, on startup.


#############################################################################
0.9.29  2009.08.31 Production Cleanup
#############################################################################

This release is mainly a refactoring and repackaging of the C# libraries.


ITEM #1: REFACTORED CLASSES INTO DIFFERENT PROJECTS -- BREAKING CHANGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Many classes (mostly from CleanCodeControls.dll, a few from CleanCode.dll)
have been relocated into better logical units for dependency file management
and standardization.

[CleanCode.Net.Telnet*]
	Moved from CleanCode to RemoteCommands project.

[CleanCode.Data.CsvReader]
[CleanCode.Data.CsvWriter]
[CleanCode.Data.DataGridLoader]
	Moved from CleanCode to CsvProcessing project.

[CleanCodeControls.Forms.MultiConnectionStringManager]
[CleanCodeControls.Forms.ConnectionStringManager]
[CleanCodeControls.Forms.QueryPicker]
	Moved from CleanCodeControls to DatabaseControls project.

[CleanCodeControls.Forms.ChameleonRichTextBox]
	Moved from CleanCodeControls to ChameleonRichTextBoxControls project.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Moved from CleanCodeControls to DataGridViewControls project.

[CleanCodeControls project]
	Renamed to GeneralComponents project and its children
		(formerly Forms and Dialogs) are now Controls and Dialogs.
	Moved DisplayCommandsForm to Dialogs folder.


ITEM #2: RENAMED ASSEMBLIES -- BREAKING CHANGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Assembly files have all been prefixed with "CleanCode." to provide
a uniform naming structure, allowing one to easily distinguish those
that are native CleanCode assemblies. The full list of assemblies is:
	CleanCode.dll
	CleanCode.ChameleonRichTextBoxControls.dll
	CleanCode.CsvProcessing.dll
	CleanCode.DatabaseControls.dll
	CleanCode.DataGridViewControls.dll
	CleanCode.GeneralComponents.dll
	CleanCode.RemoteCommands.dll
	CleanCode.SqlEditorControls.dll

ITEM #3: REPACKAGED CODE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Previously the cleancode-csharp-v0_9_nn.zip package consisted of
the source tree and a zip file containing the API at the top level.
Commencing with this release the cleancode-csharp-v0_9_nn.zip package now
contains the source, the binaries, and the API in 3 distinct bundles.
That is, the package contains just 3 files:
- a zip archive for the source tree;
- a zip archive for the API documentation; and
- a zip archive for the binaries, consisting of a single bin directory with
all CleanCode.*.dll files plus the dependent non-standard DLLs.

ITEM #4: COMPILED WITH OPTIMIZATION
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Previously the libraries had always been compiled under Debug mode;
from now on they will be delivered in Release mode.


Bugfixes========

[2816318 CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Corrected key assignments on context menu:
		Filter (Control+') and Adjust Column Widths (Alt+=)
		
[2817491 CleanCodeControls.Forms.QueryPicker]
	Now filters field list for uniqueness.

[2816321 CleanCodeControls.Forms.QueryPicker]
	Library now refreshes properly only on demand, not every invocation.

[2822820 CleanCode.Data.BulletedStringCollection]
	Now handles empty strings (and nulls) in the collection.

[2823618 CleanCodeControls.Forms.QueryPicker]
	Library file was not getting regenerated after being cleansed.

[2823893 CleanCode.Data.OdbcDsnInfo]
	Authentication-needed check was not checking for MySql type.

[2825093 CleanCode.IO.UpdateCheck, CleanCode.IO.UsageTracker]
	Fix exception for empty search path argument.

[2827925 CleanCodeControls.Forms.DisplayCommandsForm]
	Form indicated a tooltip where none present
		because it was not skipping over empty strings.

[2833401 CleanCodeControls.Forms.ChameleonRichTextBox]
	Commenting actions now included in undo/redo stack.

[2833400 CleanCodeControls.Forms.ChameleonRichTextBox]
	Commenting action no longer overwrites clipboard.


Cosmetic========

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Enhanced sub-window openings to respect multi-monitor environments.
	Improved a few tooltips.
	Added dialog help for credential form.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Closed context menu sooner
		(in case of warning popup it didn't close until after popup dismissed).

[CleanCode.IO.UpdateCheck]
	Minor cosmetic refactoring.

Various
	Changed Ctrl-xyz notation to Ctrl+xyz for consistency with menus, etc.

[CleanCodeControls.Forms.ConnectionStringManager]
	Added choice and default of "None" for DBTypes.


Enhancements ====

[CleanCodeControls.Forms.StandardQueryPickerForm]
	Added Alt+execute to remove empty suppression tokens.
	Added pop-up help panel tied to title bar help icon.
	Removed default assignment to DbType in designer-generated code.
	Renamed to more appropriate QuerySelectorForm. (breaking change)

[CleanCodeControls.Forms.QueryPicker]
	Much improved interface with TreeView replacing ComboBox.
	Added queries for showing seeds and table creation (SQL Server).
	Added alternative to "match any" predicates with predicate suppression
		on empty with runtime choice.
	Added Boolean field type with trinary radio button choices.
	Added required attribute to any text field.
	Improved field resizing when form is resized.
	Added UseEnteredCase property to override per-DBtype setting.
	Expanded SQL Server entries in query template library.

[CleanCode.Forms.FormExtensions]
	Added All() extension method for TreeNodes.

[CleanCode.Forms.WindowRestorer]
	Added SetSubWindowRelativeLocation() to keep subforms
		on same monitor in multi-monitor environment.
	Added MultipleMonitorMaximize() to enable Ctrl-maximize
		to maximize across multiple monitors intelligently.

[CleanCode.IO.UsageTracker]
	Allow empty file or empty search path to disable usage tracking.

[CleanCode.Data.BulletedStringCollection]
	Added asterisk to list of non-bulleted exceptions.

[CleanCodeControls.Dialogs.ShadowTipForm]
	New form for displaying enhanced tooltips.

[CleanCodeControls.Forms.DisplayCommandsForm]
	Hooked up WindowRestorer.SetSubWindowRelativeLocation.

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Added data source (DB or file name) on tooltip of total record count.
	Hooked up WindowRestorer.SetSubWindowRelativeLocation to subforms.

[CleanCodeControls.Forms.ChameleonRichTextBox]
	Added macros alphabetically and under "macro" for ease of finding them.

[CleanCodeControls.Forms.MultiConnectionStringManager]
[CleanCodeControls.Forms.ConnectionStringManager]
[CleanCodeControls.Forms.QueryPicker]
	Added auto-set ContainerTest property.



#############################################################################
0.9.28  2009.06.30 Minor maintenance release
#############################################################################

Bugfixes========

[2788186 CleanCodeControls.Forms.ChameleonRichTextBox]
	The uncommenting function only worked on a very specific sequence
		of whitespace and comment token.

[2802141 CleanCodeControls.Forms.ChameleonRichTextBox]
	Null reference exception with Nonconforming XML (ReservedWords node).

[2805162 CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Search and filter keystroke enabling logic never allowed them to work.

[2805163 CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Search pop-up does not update generic column name label.

[2805169 CleanCodeControls.SqlEditorControls.SqlEditor]
	Modifier keys for clearing temp passwords (now Shift)
		and opening connection editor (now Alt) swapped on connection dropdown.


Cosmetic========

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Background color of filter action button reset to wrong color.

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Refactored partner handling of fit-to-header-width into embedded control.
	Added current time to tooltip showing elapsed query execution time.

[CleanCodeControls.Forms.StandardQueryPickerForm]
	Exposed form for use by other consumers.


Enhancements ====

[CleanCode.Forms.WindowRestorer]
	New class to properly persist window positions between invocations.

[CleanCodeControls.Forms.ChameleonRichTextBox]
	Added standardized search-and-replace dialogs.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Added back a separate default date format entry in the context menu
		rather than label an existing one as the default since
		the default format may vary depending on the data source.
	Added FitHeaderWidthChanged event.
	Improved focusing of filter panel so it remains in view until dismissed.

[CleanCodeControls.Forms.DisplayCommandsForm]
	Added more noticeable indicator of tooltips (visible question mark).

[CleanCodeControls.Forms.ChameleonRichTextBox]
[CleanCodeControls.Forms.ConnectionStringManager]
[CleanCodeControls.SqlEditorControls.SqlEditor]
[CleanCodeControls.Forms.StandardQueryPickerForm]
	Tightened up keystroke recognition to be more careful matching specific
	modifier keys rather than any superset of modifier keys.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
[CleanCodeControls.SqlEditorControls.SqlEditor] (breaking change)
	Changed some key binding to allow tandem override to be seen:
		- adjust-column-width from Ctrl-= to Alt-=
		- increase-row-height key from Ctrl-Up to Alt-]
		- decrease-row-height key from Ctrl-Down to Alt-[
		- show grid filter key from Ctrl-Period to Ctrl-Quote

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Connected undo-to-beginning to disabling of save and restore buttons.

[CleanCodeControls.Forms.ChameleonRichTextBox] (breaking change)
	Changed shortcut for displaying loaded tokens from Shift-F1 to Ctrl-F10
		to avoid conflict with higher-level control.
	Changed context file node names for more standard terms:
		ClosedCommentStartMark/EndMark -> BlockCommentStartMark/EndMark
	Changed context file node names for more consistent terms:
		ReservedWords -> WordsAndPhrases
		ReservedWordGroup -> WordGroup
		macroName -> alias

For more standard terminology, renamed elements associated with connections.
These are the public elements and are by necessity breaking changes:
[CleanCodeControls.Forms.MultiConnectionStringManager]
		SelectConfig           => SelectConnection
		LoadConfigList         => LoadConnectionList
		RetrieveConfigList     => RetrieveConnectionList
[CleanCodeControls.Support.ConnectionDetails]
		ConfigName             => ConnectionName
[CleanCodeControls.SqlEditorControls.SqlEditor]
		DbConfigurationChanged => DbConnectionChanged
		ConfigurationList      => ConnectionList
		DbConfigurationName    => DbConnectionName
		DbConfiguration        => DbConnection
		EditConfigurations     => EditConnections


#############################################################################
0.9.27  2009.04.30 Minor maintenance release
#############################################################################

Bugfixes========
[2754200 CleanCodeControls.Forms.ConnectionStringManager]
	Range exception if no databases are found to populate the drop down list.

[2754208 CleanCode.Data.MultiColumnSort]
[2754208 CleanCodeControls.SqlEditorControls.SqlEditor]
	Exception due to incompatible cast of DataSource.

[2754216 CleanCode.IO.ResourceMgr]
	Exception if Application Data directory does not exist first time.

[2754238 CleanCodeControls.SqlEditorControls.SqlEditor]
	Switching files via file-picker dropdown with unsaved changes
		sent changes to the wrong file name--the newly selected file.

[2780075 CleanCodeControls.Forms.ChameleonRichTextBox]
    Exception when specifying NumberTokens with no font name
	and both bold/italic disabled.


Cosmetic========
[CleanCodeControls.Forms.ConnectionStringManager]
	No longer require database selection to enable test button.

[CleanCode.IO.ResourceMgr]
	Moved QueryPicker.InstantiateLibrary to here (InstantiateResource).

[CleanCodeControls.Forms.QueryPicker]
	Moved InstantiateLibrary to ResourceMgr.InstantiateResource.

[CleanCodeControls.Forms.ChameleonRichTextBox]
	Refactored InstantiateLibrary to use ResourceMgr.InstantiateResource.
	Added separator in command completion submenu of context menu.
	Added accelerator keys to context menu tab-control submenu choices.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Removed unused Column property from filter panel.
	Adjusted search input text to fill panel space; also anchored buttons.

[CleanCode.Forms.MenuBuilder]
	Renamed some parameters to be more meaningful.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Added checkmark for default date format if none selected.
	

Enhancements ====
[CleanCodeControls.Forms.ChameleonRichTextBox]
	Added separate font characteristics for macro place holders.
	Added settable background color for numbers and placeholders.
	Added auto-seeking of place holders from macro substitution.
	Added range-delete to line boundaries (Ctrl-Shift-Del).
	Added XSD grammar to allow validating context files.

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Changed meta-query default to suppress displaying query text,
		but allowing it as an option by holding shift when clicking Execute.
	Changed meta-query processing to execute only in current pane.

[CleanCodeControls.Forms.QueryPicker]
	Added memory of last-entered values for each field within a session.
	Added XSD grammar to allow validating query file.

[CleanCode.Forms.MenuBuilder] (breaking change)
	Changed SetMenuItemCheckmarkTrue to more useful GetMenuItem.
	Removed public MenuItemDictionary since it was used only internally.


#############################################################################
0.9.26  2009.03.31 New ChameleonRichTextBox control
#############################################################################

Bugfixes========

[2712698 CleanCode.Data.MultiColumnSort]
	Was not allowing backquotes as delimiters (used by MySql).
	Was not allowing "top nnn" in select clause (used by SQL Server).
	Was not allowing "limit nnn" in select clause (used by MySql).

[2712691 CleanCode.Data.OdbcDsnInfo]
	Null exception possibility eliminated.

[2279534 CleanCodeControls.Forms.SyntaxHilightTextBox]
	Performance improved dramatically (2 orders of magnitude) by deprecating
		this control and replacing it with the new ChameleonRichTextBox.

[2707268 CleanCode.Diagnostics.StructuredTraceSource]
	When compiled to release mode rather than debug mode, inlining of code
		was causing stack trace info to be inaccurate.


Enhancements ====

[CleanCodeControls.Forms.DisplayCommandsForm] (breaking change)
	Added form resizing.
	Added title as a property for customization.
	Added key-name and button-name boxing.

[CleanCodeControls.Forms.ConnectionStringManager]
	Repopulate ODBC choices when control is opened and when ODBC selected.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Added display of user commands on F1.

[CleanCodeControls.Forms.ChameleonRichTextBox]
	New class: second generation syntax-highlighting control.

[CleanCode.Data.BulletedStringCollection]
	New class to provide bulleted output list.

[CleanCode.IO.ResourceMgr]
	New class to manage resource files.

[CleanCode.Forms.FormExtensions]
	New class of extension methods for forms.
o
[CleanCode.Forms.MenuBuilder]
	New class to assist with context menu creation.

[CleanCodeControls.Support.DbDetails] (breaking change)
	Retrofitted for new ChameleonRichTextBox interface.

[CleanCodeControls.Forms.QueryPicker]
	Moved XML file from program directory to application data directory.
	Moved initialization from XML file out of constructor to just-in-time use.
	Implement IResourceUser allowing parent program to refresh file as needed.

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Embedded QueryPicker into SqlEditor.
	Added Ctrl-F1 to display quick reference.
	Added synchronized splitter movement with a partner.
	Retrofitted to new ChameleonRichTextBox input control,
		including synchronizing many new capabilities with a partner.
	Handled DataError from DataGridView more gracefully.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Minor improvement for user feedback on certain key commands.
	Added F1 to display quick reference.

[CleanCodeControls.Support.ContainerTestInfo]
	Added InTestContainer() and InTestDrivenUnitTest() methods.

Cosmetic========
[CleanCodeControls.Forms.SyntaxHilightTextBox]
[CleanCodeControls.SyntaxHilightControls.MySqlSyntaxHilightTextBox]
[CleanCodeControls.SyntaxHilightControls.SqlServerSyntaxHilightTextBox]
[CleanCodeControls.SyntaxHilightControls.OracleSyntaxHilightTextBox]
[CleanCodeControls.Support.GenericSqlWordList]
	Deprecated.

[CleanCodeControls.Forms.ConnectionStringManager]
[CleanCodeControls.Forms.ProgressBarMessager]
[CleanCodeControls.Forms.QueryPicker]
	Updated to use new BulletedStringCollection.

[CleanCodeControls.Support.ContainerTestInfo]
	Promoted BulletedStringCollection from here into its own class.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
[CleanCodeControls.SqlEditorControls.SqlEditor]
	Several commands supposed to be on Ctrl-xyz keystrokes
		were also allowing other modifier keys.


#############################################################################
0.9.25  2008.12.31 ConnectionStringManager and QueryPicker major enhancements
#############################################################################

Bugfixes========

[2424090 CleanCodeControls.Forms.ConnectionStringManager]
	Switching between ODBC and non-ODBC was not correctly
		clearing password and user id.

[2424094 CleanCodeControls.Forms.ConnectionStringManager]
	Switching between ODBC and non-ODBC was enabling ServerTextBox instead of
		serverChoicesPanel so if ComboBox was active it did not work.

[2344166 CleanCodeControls.Forms.ConnectionStringManager]
 	The DB is not included in the connection string
		when attempting to populate the list of available DBs.

[CleanCodeControls.Forms.ConnectionStringManager]
	Reworked enabling of dbComboBox and testButton.
		(No defect assigned since I did not have a specific failure in mind)

[2277682 CleanCodeControls.Forms.ConnectionStringManager]
	Retain DB name for current config instead of last loaded config.

[2277622 CleanCodeControls.Forms.ConnectionStringManager]
	Do not erase DB name if dropdown is clicked but not opened.

[2242150 CleanCodeControls.SqlEditorControls.SqlEditor]
	Shift-clicking the new file button (attempting to generate a query)
		with no result set caused an exception.

[2242164 CleanCode.Net.PingWorker]
[2242164 CleanCode.Net.CmdRunnerWorker]
[2242164 CleanCode.Net.WMIWorker]
[2242164 CleanCode.Threading.ThreadManager]
[2242164 CleanCode.Threading.ThreadWorker]
	Output trace statements only if a tracer is provided.

[2343774 CleanCode.Diagnostics.AlignedTextWriterTraceListener]
	TraceEvent null exception in rare cases fixed.


Enhancements ====

[CleanCodeControls.Forms.ConnectionStringManager]
	Added call to new ContainerTestInfo.ShowInfo to describe
		supplemental functionality from ContainerTest for this control.
	Added selectable switching for server field from TextBox to ComboBox
		with ContainerTest enabled.
	Added output with ContainerTest for DB type change and ODBC type change.
	Moved dsnComboBox initialization to just after it is enabled for robustness.

[CleanCodeControls.Support.ContainerTestInfo]
	New class to provide message box for controls instrumented with
	ContainerTest explaining added functionality.

[CleanCodeControls.Forms.QueryPicker]
	New generic query generating mechanism, including moving query library
		to an external resource instead of hard-coding,
		allowing end user to modify as needed without recompilation.
	Added call to new ContainerTestInfo.ShowInfo to describe
		supplemental functionality from ContainerTest for this control.

[CleanCodeControls.Support.ConnectionDetails]
	Added BaseDbType to determine type even through ODBC connection.

[CleanCodeControls.Support.DbDetails]
	New class consolidating all database-specific handling
	when using CleanCode's multi-database capabilities.

[CleanCodeControls.Support.ConnectionDetails]
[CleanCodeControls.SqlEditorControls.SqlEditor]
[CleanCodeControls.Forms.ConnectionStringManager]
	Moved database-specific handling into DbDetails.

[CleanCodeControls.Support.GenericSqlWordList]
[CleanCodeControls.Forms.QueryPicker]
[CleanCode.Data.OdbcDsnInfo]
	Added MySql support for SqlEditor and ConnectionStringManager.

[CleanCodeControls.SyntaxHilightControls.MySqlSyntaxHilightTextBox]
	New subclass of SyntaxHilightTextBox for MySql.

[CleanCodeControls.Forms.DisplayCommandsForm]
[CleanCodeControls.Support.DisplayElement]
	Added option to render both tool strip buttons and regular buttons.

[CleanCode.Data.StringHelper]
	Added MatchCardinality().

[CleanCodeControls.Net.PingWorker]
	Added Timeout property.


Breaking Changes ====

[CleanCodeControls.Net.PingWorker]
	Changed SetIPAddressList() to IPAddressList property.

[CleanCodeControls.Forms.QueryPicker]
	Setup method replaced with DbType property setter.

[CleanCodeControls.Forms.OracleSyntaxHilightTextBox]
[CleanCodeControls.Forms.SqlServerSyntaxHilightTextBox]
	Moved to SyntaxHilightControls subfolder.


Cosmetic========

[CleanCodeControls.Forms.DisplayCommandsForm]
	Made textual buttons auto-size to the text even for small text strings.

[CleanCodeControls.Forms.ConnectionStringManager]
	Changed display text of SQL Server from "SqlServer" to "SQL Server".
	Cleaned up ForceAuthCheckedChange (and renamed) to turn off handlers
		around setting a button.

[CleanCodeControls.Forms.MultiConnectionStringManager]
	Cleaned up erasing/resetting the ControlTitle under different conditions.

#############################################################################
0.9.24  2008.10.31 Product Map Rewrite
#############################################################################

The Products page at http://cleancode.sourceforge.net/wwwdoc/software.html
has been completely redone with tables and graphics
to provide a much cleaner roadmap to most products available on CleanCode.

Bugfixes========

[2035024 CleanCodeControls.Forms.MultiConnectionStringManager]
	Deselected all choices before starting a load of a fresh set of configs
		to this control at runtime, preventing inadvertent modification
		of the currently displayed item.

[2050566 CleanCode.Data.MultiColumnSort]
	MultiColumnSort parsing improved to handle bracketed fields
			(e.g. [Start Date]) and general expressions (e.g. len(NoteText) ).

[2087737 CleanCodeControls.Forms.ConnectionStringManager]
	Very long password throws an exception.

[2087767 CleanCodeControls.Forms.ConnectionStringManager]
	Attempting to connect to an Oracle data source without an Oracle client
		installed on the machine causes an Exception.

[2170353 CleanCodeControls.Forms.QueryPicker]
	Fixed exception if neither Oracle nor SQL Server selected.

[2174745 CleanCodeControls.Forms.DisplayCommandsForm]
	Rewired control to create a fresh one when needed.

Enhancements ====

[CleanCodeControls.SqlEditorControls.SqlEditor]
	Hooked up date format change to synchronize between partner instances
		and to auto-refresh if that mode is enabled.
	Added sorting of config items upon load.
	Changed tandem-override from Alt to Control due to context menu conflict.
	Parameterized most modifier keys.
	Added display of target for ODBC connections when reporting configuration.
	Added warning when selected ODBC connection does not exist.

[CleanCode.Data.OdbcDsnInfo]
	Changed IsSqlServer and IsOracle to not throw exception with null argument.
	Added new OdbcTarget() method.

[CleanCode.Data.CsvReader]
	Put additional information in exception thrown for unrecognized data types.

[CleanCode.Data.StringHelper]
	New class with enhancement to standard String.Split method,
	plus other convenience methods.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Changed filtering from a word in the current column
		to a general expression predicate.
	Added data type to column header tooltips when columns are numbered.

[CleanCodeControls.Forms.MultiConnectionStringManager]
	Option to load config file without any attached passwords.

[CleanCodeControls.Forms.IdentifyingGroupBox]
	Added variations of GetSelected* to return Controls as well as strings.

Cosmetic========

[CleanCodeControls.SqlEditorControls.SqlEditor]
[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Minor user command display updates.

[CleanCode.Data.MultiColumnSort]
[CleanCodeControls.DataGridViewControls.ExtendedDataGridView.TestData]
	Changed to static class.

[CleanCodeControls.Support.DisplayElement]
[CleanCodeControls.Forms.DisplayCommandForm]
	Renamed DisplayElement to IDisplayElement since it is an interface.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	Column numbers, revealed via modifier keys, were not auto-hiding
		upon releasing the keys if followed by long operations.

#############################################################################
0.9.23  2008.07.31 New C# user controls and GUI test application
#############################################################################

Bugfixes========

[1998248 CleanCodeControls.Forms.ConnectionStringManager]
	Removed unintended side effects of PwdFreeConnectionString property.

[1998252 CleanCodeControls.Forms.ConnectionStringManager]
	Initialized control when fields are not pre-loaded.

[1989969 CleanCodeControls.Forms.ConnectionStringManager]
	Initialized authentication radio button upon loading control.

[1990222 CleanCode.Diagnostics.StructuredTraceSource]
	Inhibited indentation upon suppressed trace output.

[2022559 CleanCode.Data.OdbcDsnInfo]
	Added check for no ODBC sources in either CurrentUser or LocalMachine
	to avoid null exception.

[SQL.Histogram]
	-- Parameter name (@tablename) in dynamic sql needed to be cased correctly.
	-- Dynamic sql should use N prefix on strings.
	

Enhancements: New classes ====

[CleanCodeManualTest]
	New project for isolated testing of controls or forms in a library.

[CleanCodeManualTest.LaunchForm]
	New launch application to automatically run any included WinForms.

[CleanCodeControls.Forms.DisplayCommandsForm]
[CleanCodeControls.Support.DisplayElement]
	New generic form to handle display of user command and shortcut summary.

[CleanCodeControls.SqlEditorControls.SqlEditor]
	New control providing a SQL editor pane for SqlServer, Oracle,
	or any ODBC data source.

[CleanCodeControls.DataGridViewControls.ExtendedDataGridView]
	New control adding new features to a DataGridView.

[CleanCode.Forms.GenericEventArgs]
	New class for custom event firing data support.


Enhancements ====

Bugfix: parameter name (@tablename) in dynamic sql needed to be cased correctly.
Bugfix: dynamic sql should use N prefix on strings.
[CleanCode.Diagnostics.AlignedTextWriterTraceListener]
	Added capability to inhibit output of sensitive data in trace log.

[CleanCode.Diagnostics.StructuredTraceSource]
	--Modified TraceEnterEventHandler to show Text of a control when
	  it is a label (i.e. not a TextBox or similar).
	--Added capability for TraceEnter to display event type in event handler.
	--Added capability for TraceEnter to display type when method
	  is a property setter.

[CleanCodeControls.Forms.MultiConnectionStringManager]
	-- Added load/save config list to/from external file.
	-- Added variant of RetrieveConfigList() to force suppressing all passwords.

[CleanCode.Forms.ToolStripDropDownManager]
	Added entire message as a tooltip to the size-limited displayed message.
	Added refresh after each message.

[CleanCode.Forms.AbstractMsgManager]
	Infrastructure change for ToolStripDropDownManager change above.

[CleanCode.Data.CsvReader]
	Converted internal MalformedCsvException to an external IOException.

[SQL.Histogram]
	Added @Aggregate parameter to do second-order histograms with count().

Cosmetic========

[CleanCode.Data.OdbcDsnInfo]
	Instrumented for diagnostics.

[CleanCodeControls.Forms.ConnectionStringManager]
	Added tooltips on controls.

[CleanCodeControls.Forms.SyntaxHilightTextBox]
	-- Changed Ctrl-Enter to standard Ctrl-Tab for entering a tab.
	-- Added capability to invert Tab/Ctrl-Tab functionality.
	-- Changed highlighting timer initialization to start disabled.



#############################################################################
0.9.22  2008.05.31 New SQL procedures, functions, and query support.
#############################################################################

Bugfixes========
-none-


Enhancements====
[SQL.Histogram] New stored procedure to generate dynamic histograms.
[SQL.BoundSmoothing] New DB function supporting histogram generation.
[SQL.GetDataTypeName] New DB function.

[CleanCode.Data.SqlFilterBuilder]
	Added support for DataViews alongside DataTables.
	Normalized field names to be case-independent.

[CleanCodeControls.Forms.QueryPicker]
	Added ContainerTest property and support methods
		for containerized testing in Visual  Studio.
	Added xxxTableDetailsQuery to describe table fields
		(data type, scale, default, etc.).
	Removed xxxTableQuery as it is already covered by xxxColumnQuery.
	Added database and schema selectors to Sql Server queries.
	Auto-upper-case inputs for Oracle.

[CleanCodeControls.Forms.SyntaxHilightTextBox]
	Changed colorization algorithm to do commenting last, so strings
	within comments are colored as standard comments.
	Set default font to fixed-width.

Upgraded NUnit testing for C# from JUnit 2.4 to 2.4.7.
Upgraded Visual Studio support from VS2005 to VS2008 (but still .NET 2.0).


Cosmetic========
[SQL.SP_map] Renamed to Map due to performance recommendations
	(i.e. user stored procs should not begin with 'SP_").

[SQL.FN_list2tableIndexed] Renamed to list2tableIndexed.

[SQL.FN_list2table] Renamed to list2table.



#############################################################################
0.9.21  2008.04.30 New C# Control
#############################################################################

Bugfixes========
[CleanCodeTest.Data.AttributeDictionary]
	Updated one test to match recent code change.


Enhancements====
[CleanCodeControls.Forms.ProgressBarMessager]
	New C# control that enhances a standard ProgressBar with progress messages.


Cosmetic========
-none-


#############################################################################
0.9.20  2008.03.31 New Diagnostic components
#############################################################################

Bugfixes========
[CleanCode-perl-v0_9_20.zip]
	Added missing *.thtml files for use with pod2htmltree.


Enhancements====

[CleanCode.Diagnostics.AlignedTextWriterTraceListener]
	New C# class implementing a custom TraceListener.

[CleanCode.Diagnostics.StructuredTraceSource]
	New C# class implementing a custom TraceSource.

[CleanCode.Diagnostics.ITraceListenerIndenter]
	New C# interface used by AlignedTextWriterTraceListener.

[CleanCode.Forms.MemoryGauge]
	New C# class to report memory usage.

[CleanCodeControls.Forms.IdentifyingGroupBox]
	Added PopulateGroupBox methods.

[CleanCode.IO.InstalledAssemblies]
	Filter out some type of randomly named system assemblies.

[CleanCodeControls.Forms.SyntaxHilightTextBox]
	Changed SelectedOrAllText to operate on uncommented portion.
	Added SelectedOrAllTextWithComments to include comments if needed.

[CleanCode.Data.CsvWriter]
	Added FieldNamesLowercase property to provide flexibility in headers.

[bin/libFuncTest]
	Added support for DOS wildcards with globify. 


Cosmetic========
[CleanCode.Data.SmartTrace]
	Renamed to CleanCode.Diagnostics.StructuredTrace.

gnedTextWriterTraceListener]
	New C# class implementing a custom TraceListener.

[CleanCodeControls.Diagnostics.StructuredTraceSource]
	New C# class implementing a custom TraceSource.

[CleanCodeControls.Diagnostics.ITraceListenerIndenter]
	New C# interface used by AlignedTextWriterTraceListener.

[CleanCode.Forms.MemoryGauge]
	New C# class to report memory usage.

[CleanCodeControls.Forms.IdentifiedGroupBox]
	Added PopulateGroupBox methods.

[CleanCode.IO.InstalledAssemblies]
	Filter out some type of randomly named system assemblies.

[CleanCodeControls.Forms.SyntaxHilightTextBox]
	Changed SelectedOrAllText to operate on uncommented portion.
	Added SelectedOrAllTextWithComments to include comments if needed.

[CleanCode.Data.CsvWriter]
	Added FieldNamesLowercase property to provide flexibility in headers.

[bin/libFuncTest]
	Added support for DOS wildcards with globify. 

Cosmetic========
[CleanCode.Data.SmartTrace]
	Renamed to CleanCode.Diagnostics.StructuredTrace.


#############################################################################
0.9.19  2008.01.31 New C# Controls
#############################################################################

Bugfixes========

[1860257 CleanCodeControls.Forms.ConnectionStringManager]
	Enabling of DB ComboBox and test Button fixed.

[1860258 CleanCodeControls.Forms.ConnectionStringManager]
	Now can load database name programmatically.

[1879446 CleanCode.Data.MultiColumnSort]
	GetSortedView was unnecessarily restricting the white space around
	an 'order by' clause.

[1879445 CleanCode.IO.UsageTracker]
	Fixed handling of search path for catalog files.


Enhancements====

[CleanCodeControls.Forms.QueryPicker]
	New C# user control to manage templatized meta-query generation.

[CleanCodeControls.Forms.MultiConnectionStringManager]
	New C# user control to manage sets of database credentials,
		leveraging ConnectionStringManager.

[CleanCodeControls.Forms.ConnectionStringManager]
	Added ShowDiagnosticConnectionString property to allow control
		of the visibility of the connection string.
	Renamed SecureConnectionString to PwdFreeConnectionString.
	Added genuine SecureConnectionString property.
	Added Encrypt/Decrypt support methods.

[CleanCodeControls.Support.ConnectionDetails]
	New C# class used by MultiConnectionStringManager.

[CleanCode.Data.AttributeDictionary]
	Changed ToString() to return keys in sorted order.

[CleanCodeControls.Forms.ConnectionStringManager]
	Added support for third DB choice, ODBC.
	Robustness improvement: control now cleans up input so that returned
		connection strings are guaranteed valid for the given DB type.
	Cleaned up setting appropriate values when DB type is changed.

[CleanCode.Data.OdbcDsnInfo]
	New C# class for new ODBC support in ConnectionStringManager.

[CleanCode.Data.SmartTrace]
	Added an assortment of new methods to this class.

[CleanCode.Data.Utility]
	Added FindComboBoxItem method.


Cosmetic========

[CleanCode.Data.DebugHelper]
	Renamed to CleanCode.Data.SmartTrace.


#############################################################################
0.9.18  2007.11.30 Minor maintenance release
#############################################################################

Bugfixes========
[1835528 SQL.SP_map] SP_map does not recognize error with empty or null @AuxArray.

Enhancements====
[SQL.SP_map] Completed documentation comments.
[perl/bin/sqldoc2xml] Finished design, development, and documentation.
[SQL.FN_list2tableIndexed] Renamed from FN_string2tableIndexed and completed documentation.
[SQL.FN_list2table] Renamed from FN_string2table and completed documentation.

Cosmetic========
-none-


#############################################################################
0.9.17  2007.09.30 SQL Library Added
#############################################################################

Bugfixes========
-none-

Enhancements====
[SQL] Added new web section for SQL library.
[SQL.SP_map] Added stored procedure for array/matrix mapping.
[SQL.FN_string2tableIndexed] Added function for converting a list to a table.
[SQL.FN_string2table] Added function for converting a list to a table.
[perl/bin/sqldoc2xml] Tool to extract XML doc-comments from SQL files.

Cosmetic========
-none-


#############################################################################
0.9.16  2007.07.31 ConnectionStringManager control (C#)
#############################################################################

Bugfixes========
-none-

Enhancements====
[CleanCode.Data.Utility] Enhanced CleanString to ignore word spacing.
[CleanCode.Data.SqlErrorCleaner] New C# class to trim error messages.
[CleanCodeControls.Forms.ConnectionStringManager] Now production-ready.
[CleanCode.Forms.AbstractMsgManager] Added auto-truncate to user length.
[CleanCodeControls.Forms.ConnectionStringManager, .SyntaxHilightTextBox]
Added Description attributes for proper documentation in Properties pane.

Cosmetic========
Tweaked some efficiencies per FxCop.
Updated ant from 1.6.5 to 1.7.0.

#############################################################################
0.9.15  2007.06.30 Csharp Control Update
#############################################################################

Bugfixes========
Added CleanCodeTest.dll.config to allow unit tests for
SyntaxHilightTextBox to run.
[1704471] Added highlighting of quoted strings to SyntaxHilightTextBox.

Enhancements====
[CleanCodeControls.Forms.ConnectionStringManager] New C# class
to manage database credentials.
[CleanCode.IO.ExecProcess] New C# class to run external processes.
[CleanCodeControls.Forms.StyleAwareRichTextBox] New C# control
	paralleling RichTextBoxHelper.
[CleanCodeControls.Forms.SyntaxHilightTextBox] Added text sizing capability.

Cosmetic========
-none-


#############################################################################
0.9.14  2007.04.30 Csharp Library Update
#############################################################################

Bugfixes========
[1697634 CleanCode.Data.AttributeDictionary] AttributeDictionary balks at ';' or '='.
[1704437 CleanCode.Data.MultiColumnSort] Does not handle BindingSource as a DataSource
[1704464 CleanCodeControls.Forms.SyntaxHilightTextBox] Flash artifact during highlighting.
[1696288 CleanCode.Data.CsvReader] Compensated for ArgumentException when an empty field is encountered.

Enhancements====
[CleanCode.Forms.AbstractMsgManager] Exposed some properties for customizability.
[CleanCode.IO.UpdateCheck] Added capacity to handle multiple search paths for repository.
[CleanCodeControls.Forms.SyntaxHilightTextBox]
Added separate colorization of comments.
Added ability to insert a tab character.
Added commenting/uncommenting, left/right shifting,
	and re-highlighting commands by keystroke.
Removed protected method Hilight in favor of DefineWords, invoked
	at instantiation rather than at each highlighting action.

Cosmetic========
[CleanCode.Forms.StatusMsgManager] Renamed to ToolStripDropDownManager.

#############################################################################
0.9.13  2007.03.31 C# Library Additions
#############################################################################

Bugfixes========
[CleanCode.IO.UpdateCheck] GetNewerVersion threw exception if no .exe files found.

Enhancements====
[CleanCode.Data.DBHelper] Split into two;
	part of this class moved to new SqlFilterBuilder class.
[CleanCode.Data.SqlFilterBuilder] New C# class.
[CleanCode.Data.MultiColumnSort] New C# class.
[CleanCode.Data.CsvReader] New C# class.
[CleanCode.Data.CsvWriter] New C# class.
[CleanCode.IO.UpdateCheck] Added AccessFailure property to discern
	the difference between no new version and no access to repository.
[CleanCode.Forms.DataGridFileLoader] Added ReadFirstRowAsHeaders property
	to allow data with or without headers.
[CleanCode.Forms.RichTextBoxHelper] Renamed StylizeText to AppendStylizedText.
[CleanCode.Forms.RichTextBoxHelper] Added ColorText method.
[CleanCodeControls.Forms.IdentifiedGroupBox] New C# control.
[CleanCodeControls.Forms.SyntaxHilightTextBox] New C# control.
[CleanCodeControls.Forms.OracleSyntaxHilightTextBox] New C# control.
[CleanCodeControls.Forms.SqlServerSyntaxHilightTextBox] New C# control.

Cosmetic========
-none-


#############################################################################
0.9.12  2007.01.31 Minor maintenance release
#############################################################################

Bugfixes========
+ [1634872 cleancode.format.JSArchive] Fixed command-line options showing in both the command-line help and the API documentation. (This code change from awhile back had not been propagated to the documentation.)

+ [1638068 Util/Version.js] getVersion failed on a single-digit number.

Enhancements====
[printtime.pl] Added new utility for decoding date-time values.
[CleanCode.Forms.RichTextBoxHelper] New C# class.
Updated Perl dependencies with more recent releases.

Cosmetic========
Switched from CS-RCS to SubVersion for CleanCode source control.


#############################################################################
0.9.11  2006.10.31 Minor maintenance release
#############################################################################

Bugfixes========
+ [1586044 CleanCode.IO.UpdateCheck] Corrected checking for change notes
with certain file patterns.

Enhancements====
+ [com.cleancode.data.ParamMap] Fixed stray unchecked/unsafe code artifact introduced from conversion to Java 1.5.
+ [CleanCodeTest.Forms.StatusMsgManager] Fixed failing test case due to missing space.
+ Consistency improvement on 'since' clause across all languages in source code.
+ Quieted warning on html validation that was using css instead of html attributes.
+ Disconnected remaining access points to form mail, since sourceforge.net
  no longer supports it.
+ Fixed a couple ant dependencies.

Cosmetic========
-none-



#############################################################################
0.9.10  2006.09.30 Ant charting upgrade and C# additions
#############################################################################

Bugfixes========
+ [1559769 replace.pl] The functionality for -N (to inhibit backup files)
was added recently, but the command-line option itself had not been enabled.
+ [1567869 CleanCode.IO.UpdateCheck] Trapped UnauthorizedAccessException.

Enhancements====
+ [CleanCode.Xml.XPathWrangler] New class.
+ [CleanCode.Xml.DocumentWrangler] New class.
+ [CleanCode.Xml.NodeChanger] Renamed to NodeWrangler for consistency.
+ [CleanCode.IO.FileNavigator] New class.
+ [CleanCode.Forms.AbstractMsgManager] New class.
+ [CleanCode.Forms.StatusMsgManager] Made a subclass of new AbstractMsgManager.
+ [CleanCode.Forms.TextBoxMsgManager] New subclass of AbstractMsgManager.
+ [CleanCode.IO.LoadedAssemblies] New class.
+ [CleanCode.IO.UsageTracker] New class.
+ [CleanCode.IO.UpdateCheck] Modified to handle subdirectories as well as files.
+ [Pod::HtmlTree] Added SINCE to the required tags list.

Cosmetic========
+ Changed graphs of CleanCode ant build file from png to pdf so they are
sharp at any magnification, and added specs in the graphs.


#############################################################################
0.9.09  2006.08.31 Upgrading and Testing Release
#############################################################################


Bugfixes========

+ [1531744 list.pl] The list utility is a web-based program that
	provides an explorer-like interface to a remote file system.
	Part of the customizable interface is specifying a common header or footer,
	and specifying a common passage for an entire directory
	(.header.htm, .footer.htm, and .directory.htm, respectively).
	When combining those, list.pl generated invalid HTML by copying each of
	these files in its entirety, instead of extracting the content of
	the body element alone.

+ [1539298 com.cleancode.net.SimpleHtmlParse] This basic HTML recognizer
	was able to detect attributes in double quotes but not in single quotes.

+ [1539299 Cleancode.IO.UpdateCheck] GetNewerVersion was not properly handling
	numbers within the octets of a version string. So, for example,
	1.0.9.0 was considered larger than 1.0.10.0 when compared lexically.

+ [1367563 com.cleancode.jdbc.DBProbe] Added missing dbprobe.xml file to release.


Enhancements====

+ Added NUnit testing to C# library.

+ Upgraded JUnit testing for Java from JUnit 3.8 to 4.

+ Added Checkstyle (java) analysis to build.

+ Added FxCop (C#) analysis to build.

+ Upgraded Java source from 1.4 to 1.5.

+ Upgraded Ant from 1.6.2 to 1.6.5.

+ Upgraded Antcontrib references from 1.5 to 1.6.

+ Added DocCheck analysis to generated Java documentation.

+ Added basic grep analysis to find missing C# documentation elements.

+ Added ant-driven global update of copyright, version, and revision date.

+ [com.cleancode.format.REConverter]
	Switched from gnu.regexp to internal java.util.regex support.

+ [com.cleancode.format.SimpleJavadocToPod]
	Switched from gnu.regexp to internal java.util.regex support.

+ [com.cleancode.net.SimpleHtmlToText]
	Switched from gnu.regexp to internal java.util.regex support.

+ [com.cleancode.net.SimpleHtmlParse]
	Switched from gnu.regexp to internal java.util.regex support.

+ [com.cleancode.util.Common]
	Converted toHashSet to a generic method.

+ [com.cleancode.util.CollectionsPlus]
	Converted fill to a generic method.

+ [CleanCode.Data.Utility]
	Renamed GetNextValueInList to GetNextListValue.
	Converted GetNextListValue and ArrayToDictionary to generic methods.

+ [CleanCode.IO.Comparators]
	Renamed DateComparer to DateComparerAscending
	and added DateComparerDescending.
	Added VersionComparer for comparing version strings.

+ [CleanCode.Data.AttributeDictionary]
	Updated ListToDictionary to be case-insensitive on boolean values.

+ [CleanCode.Math.Outliers]
	New class for finding statistical outliers.

+ [CleanCode.Math.StandardDeviation]
	New class for finding standard deviation.


Cosmetic========

+ Stylistic cleanup driven by Checkstyle (Java), DocCheck (Java) and FxCop (C#).



#############################################################################
0.9.08  2006.07.20 Documentation Cleanup Release
#############################################################################

The major focus of this release is the completion of the
new C# library documentation, a home page for the JavaScript documentation,
and consistency on the API homepage for all 4 supported languages.

Bugfixes========
-none-

Enhancements====
+ [CleanCode.*.*] Polish and refinement to recently new C# library.
+ [bin/renameGroup] New standalone tool for group file renaming.

Cosmetic========
-none-



#############################################################################
0.9.07  2006.06.13 C# Library Release
#############################################################################

The major focus of this release is the addition of a 4th language library: C#

Bugfixes========
-none-

Enhancements====
+ [CleanCode.*.*] Added C# class library.
+ [File::Handy] Added '#' character to allowable characters in untaintFileName.
+ [com.cleancode.xml.DocumentPlus] Updated for Java 1.5 support.
+ [com.cleancode.util.FilePlus] Updated readFileAsArray to omit blank lines.
+ [bin/replace] Added -q option to report on only files that changed.

Cosmetic========
-none-



#############################################################################
0.9.06  2005.11.30 Minor maintenance release
#############################################################################

Bugfixes========
+ [1366598 DBI::Helper] For the user list displayed for the admin user
in WebSiteInABox, the create_date field was appearing as null;
timestamp2time method needed updating for newer MySql version.
+ [1364884 CGI::Application::Helper] Errors now being logged so that they
can always be found even when non-admin is executing (WebSiteInABox).
+ [1364878 Net::DataMining] Key values now untainted with regard to legal
file name characters, encoded URL characters, and escaped regexp characters.

Enhancements====
+ [bin/replace] Enhanced MultiFileReplace (replace.pl) to be
more robust and standardized, using normal regular expression syntax
instead of -p and -f command-line constructs.
+ [bin/cgiAppBase] Added config parameter to support multiple web sites
for WebSiteInABox (cgiAppBase).
+ [Net::DataMining] Allow additional parameters to be fed to URL string.
+ [File::Handy] Added untaintFileName function.
+ [Data::Handy] Added escapeRegExp function.

Cosmetic========


#############################################################################
0.9.05  2005.07.15 Minor maintenance release
#############################################################################

Bugfixes========
-none-

Enhancements====
+ [bin/cgiAppBase] Added new major product Website-In-A-Box that
provides a ready-to-customize dynamic website with authentication,
account management (create/delete/password reminder), and more.
+ [CGI::Application::Helper] New support class for cgiAppBase.
+ [DBI::Helper] New support class for cgiAppBase.
+ [Time::SimpleFormat] Added formatDateTime() function.
+ [File::Handy] Added getMatchingFiles() and removeTree() functions.
+ [Data::Handy] Added interpolateText() function.
+ [Net::SimpleMail] New module to send e-mail.

Cosmetic========
-none-


#############################################################################
0.9.04  2005.02.28 Minor maintenance release
#############################################################################

Bugfixes========
-none-

Enhancements====
+ Automated complete website and distribution build with ant.
+ Revised JUnitRecursiveTestRunner for use with junit task of ant.
+ Revised XmlTransform to work properly inside Ant context
(needed to normalize path separators to forward slash).

Cosmetic========
+ ServerFileExplorer FAQ page had a couple bad URL references.
+ Added documentation to Perl and Java distributions.
+ New "behind-the-scenes" section added to web site.
+ Expanded dependency section on download page.


#############################################################################
0.9.03  2004.12.26 Minor maintenance release
#############################################################################

Bugfixes========
+ [1091219 com.cleancode.xml.XmlTransform] Changed diagnostic output
to avoid using vertical bar, since that is the field delimiter
in log files created by the LogWriter class.

+ [1091221 com.cleancode.data.Diagnostic] Added LOG_DIR parameter
to the parameter map; it was used in the program, but the omission
from the map caused an error when one tried to actually use it.

+ [1091222 com.cleancode.data.Diagnostic] The log file channel
(as distinct from stdout, stderr, and html channels) was only initialized
if a configuration file was used. It is now initialized if and only if
the log file channel is actually selected.

+ [1091223 com.cleancode.data.Diagnostic] The log file channel
(as distinct from stdout, stderr, and html channels) was recording
a duplicate thread id (java version only) in the log file.

+ [1092957 com.cleancode.xml.XmlTransform] The XmlTransform tool XSLT-converts
and Schema-validates an entire tree of XML files from one form to another.
The schema validations and XSL transformations are individually selectable
by switches. However, they are not unconditional switches; the operation is
only performed if it is needed (by a variety of conditions such as input file
newer than output file, etc.). XSLT-transformation was inadvertantly skipped
when validation was turned on but then not needed for a given file.

Enhancements====
+ [com.cleancode.util.FilePlus] Added readFileAsArrayColumn method,
allowing one to read a single column from a field-delimited file,
as well as filter the input while reading it.

+ [com.cleancode.xml.XmlTransform] Moved Diagnostic.init and Diagnostic.exit
bracket into static main program rather than part of object instance,
allowing this object to be part of other objects.

+ [com.cleancode.data.Diagnostic] While the indirect use of diagnostics should
generally not involve log file output, it certainly may. As such, the indirect
mode not only automatically initializes diagnostics but now also automatically
terminates diagnostics, closing any open logfiles. Note that this would only
have manifested as an issue when diagnostic output was sent to the logfile
channel; stdout, stderr, and html channels were unaffected.


Cosmetic========
-none-


#############################################################################
0.9.02  2004.11.09 Minor maintenance release
#############################################################################

Bugfixes========

+ [1060224 plumb.pl] The plumb utility traverses (plumbs) the depths of
included files within any Perl program by recursively examining
'use' and 'require' statements. This may involve local (user) files
or system files. The system search path (from @INC) was being corrupted
so system files were not being found.

+ [1059951 plumb.pl] The plumb utility traverses (plumbs) the depths of
included files within any Perl program by recursively examining
'use' and 'require' statements. plumb was looking only for
unqualified statements, as in 'use File::Handy;', neglecting qualified ones,
as in 'use Util::Stuff qw(foo bar);'.
The regular expression for this has been corrected.

+ [1043811 Data::Handy and com.cleancode.util.StringPlus] Function
dollarToNumber() dropped the minus sign if the argument did not also have
a dollar sign.

+ [1043813 Convert::SimpleHtml2Text] This module was not returning data
that retained proper structure in a table when fields were empty
(i.e. separating even empty fields with tabs).
Updated the conversion code from the Java version to handle this.

+ [1057573 com.cleancode.util.StringPlus] Function dollarToNumber()
lost precision in large dollar amounts; changed from float to double
to fix this.


Enhancements====

+ [Net::DataMining] Added flexibility so that the regExpHead parameter
may be a function reference or a constant, allowing on the fly
regular expression construction.

+ [com.cleancode.data.Version] Synchronized extractVersion() with
Perl algorithm. 

+ [plumb.pl] Added detailed vs hierarchical report (-d option).
Added depth limited to a specified level (-l option).

+ [com.cleancode.test.JUnitUIPicker] New class providing a shortcut
for selecting textui or swingui in a main method of a JUnit test case.

+ [com.cleancode.test.JUnitRecursiveTestRunner] New standalone utility
that dynamically creates a test suite of all (or selected) JUnit test cases
and then runs them.


Cosmetic========

+ [java/perl API documentation] Added missing package overviews;
minor HTML compliance cleanup.

+ [assorted java] Removed some simplistic test subclasses;
deprecated to JUnit instrumentation.

+ [plumb.pl] Some refactoring to better encapsulate functions.
Minor optimization to remove duplicate elements in search path.


#############################################################################
0.9.01  2004.09.28 Minor maintenance release
#############################################################################


Bugfixes========

+ [1035468 bin::replace.pl] Replace.pl (MultiFileReplace) displays a
usage hint when invoked with no arguments, but also displayed an error
about an uninitialized value; this has been fixed.

+ [1034789 com.cleancode.xml.XmlTransform] The tracking files .xmlvalidate
and .xmltransform had a mixture of backward and forward slashes (under Windows)
in the list of generated file names due to inconsistent path name construction.
This has been corrected to use only forward slashes in these files,
and use file-system-appropriate separator characters when actually
accessing files.

+ [1034791 com.cleancode.format.JSArchive] Took the time to do the JavaScript
compactor the right way, cleaning up a host of deficiencies including:
--removed more unnecessary whitespace (typically saves additional 3-5%);
--retained all, rather than most (oops:-), whitespace inside strings;
--correctly handles mixed inline comments, block comments,
and strings on a single line;
--handles escaped string delimiters inside strings; and
--catches unterminated strings;
This implementation should now handle the richness of JavaScript, with
one caveat: regular expressions delimited with /.../ need to use escaped
characters even if the regular expression syntax does not strictly require it.
For example, a single quote does not normally need to be escaped in a
regular expression, but it must be when running through JSArchive,
otherwise JSArchive will see it as the start of a string.

+ [1014492 com.cleancode.xml.DocumentPlus] For 2-parameter flavor of
getSelectedElementByTagName(tag, path), when path is just "/", method now
will not match element unless it is, in fact, the root element.

+ [1014452 com.cleancode.xml.DocumentPlus] For 3-parameter flavor of
getSelectedElementByTagName(tag, attrname, attrval), when attrname is empty
or null, method now will match an attribute-less element.

+ [1015420 com.cleancode.xml.DocumentPlus] Enhanced getElementsByTagName(String)
allows one to specify either a plain tag name or a pathed tag name.
The standard flavor of this method returns an empty NodeList rather than null
when no nodes are found. The enhanced flavor, however, was returning null
if a parent component of the path did not exist. This has been fixed
to return an empty NodeList.

+ [1014503 File::Handy] Allow for path-less and/or extension-less name
in datedFileName().

+ [Net::DataMining] Changed -r behavior to operate across calls to process()
method (depending on your point of view, may or may not have been a bug).

Enhancements====

+ [com.cleancode.xml.DocumentPlus] Expanded domain of dumpXml to handle
Node instead of Element.

+ [com.cleancode.xml.XmlTransform] Previous behavior for files that had
validated successfully in prior runs was to update the date stamp within
.xmlvalidate to the time of the current run. This has been changed to retain
the prior date stamp, allowing a simple 'diff' to show actual changes.

+ [Time::SimpleFormat] Added secondsToClock() and elapsed() functions.

+ [File::Handy] Added datedFileName() option to specify date
other than current date.

+ [Data::Handy] Allow list of args instead of just a single arg to requireEnv().

Cosmetic========

+ [assorted perl] Minor POD fixes.
+ [assorted js] Comment header updates.
+ [assorted java] Style cleanup and missing Javadoc elements filled in,
with assist from Eclipse and checkstyle


#############################################################################
0.90	2004.05.25 Initial release
#############################################################################

+ N/A