Version 3.0 Changes
Listed here are the changes between version 2.1.1 and version 3.0 of the Regular Expression Component Library. This information also exists in the History file for the component.
Fixes include:
a) The static library version of the component had a link to
the VCL dynamic RTL instead of the VCL static RTL. This
would not usually cause any problem since including the
regular expression header files creates a link to the
correct RTL version and this overrides the link in the
static library version. However, in the case where:
i) The regular expression component was linked to as
part of another package.
ii) The end user of that other package did not use any
components which themselves used the regular
expression component, thus not including the
regular expression component header files.
iii) The end user of that other package built without
Use Packages being chosen.
then the wrong VCL dynamic RTL would be linked. This
problem has been corrected in this version so that both
the static library version of the component and the
header files correctly link in the VCL static RTL when
building a module which does not Use Packages.
b) If an unknown error occurred in The ParseExpression
function, a REG_E_MEMORY error code would be returned,
meaning "out of memory" rather than a REG_E_UNKNOWN
error code. This has been corrected so that an unknown
error returns the REG_E_UNKNOWN code.
c) It was possible for more than one composite
ExpressionOption to be set. The composite expression options
were Normal, Basic, and Extended, although more have now been
added, and are meant to be mutually exclusive. This has been
corrected so that only one of these can be set at a time.
d) If a copy constructor or assignment operator, or the component
Assign function, was used to copy a regular expression object
to another, the object might not have had its regular expression
automatically re-parsed to reflect the new regular expression
when one of the matching member functions was invoked. This has
now been corrected.
e) If the regular expression was empty, an empty error message
was being returned from the GetExpressionError member function.
This has been corrected to return a "No expression specified"
error message.
f) The RegularExpression class, when streaming data in, did
not check for a later version streaming number, only an earlier
one. Normally this is no problem since it is unlikely that an
earlier version of the library will be used to stream in data
that was streamed out from a later version of the library.
Nonetheless this has been corrected so that if this situation
occurs the function for streaming data in will fail as it should.
g) The appropriate __cdecl calling convention was not being
explicitly set in the regular expression component library
header files. This has been corrected so that if the user
of the library changes the IDE's default calling convention for
any reason, the regular expression component library will still
work correctly.
h) There were extraneous Include and Lib paths in some of the
samples which were incorrect. These have been removed.
Technical additions include: ( See Help file "What's New" topic )
a) New regular expression syntax elements
b) Localization of syntax and error messages.
c) Split function for splitting a string into substrings.
d) Locale models for different ways of specifying locales.
e) Format types for different Format syntaxes.
f) Partial match possibility at end of strings.
g) New composite expression options.
h) Merge on only the first match possibility.
i) New parsing error code for localization error.
j) ContinueFiles property for stopping a file search on access
errors.
k) GetFindFilesErrors and GetGrepFilesErrors for retrieving any
file access errors searching files.
Further additions include:
a) The official name for this distribution has been solidified
as the Regular Expression Component Library to distinguish
it from other possible distributions based on regular
expressions.
b) Version control now exists for all DLLs for better install
and to allow the end user to see what each DLL signifies.
c) Lower level include files are no longer distributed or needed
for the library. These included all of the include files in
the "jm" subdirectory as well as the include files in the main
include directory not starting with RegularExpression.
d) The header files now use the pimpl idiom, which hides
unnecessary private implementation details from the end user.
e) The distribution now comes with separate design time and
run-time components. Only the run-time components need to be
distributed.
f) The distribution now automatically installs the VCL components
and the VCL Help file to the C++ Builder 6 IDE.
g) The underlying regular expression library is the latest
edition of the Regex++ library by Dr. John Maddock, which
has become the Boost Regex++ implementation. The version of
the Regex++ library is from the Boost 1.28 distribution.
I have made a number of changes to the underlying library
to support further functionality for this distribution.