After far too long of a delay, version 1.3 has been released. The basic functionality of the library has not changed. The major updates in this release are related to memory leakage in the examples and tests, an updated configure/build system, and fixes related to the error flagging mechanism provided by the library.
By request I've moved the build system to use automake and autoconf. This is a change from the previous system that used autoconf to modify hand-written Makefiles. This should make the library feel a bit more like other projects in terms of familiar targets and build procedures. I expect a v1.3 release in the not too distant future that will include this, along with some code updates. Until then, check out the version residing in the git repository if you are curious to try it out.
Version 1.2.1 has been released!
This version contains very minor fixed so that compilation doesn't fail for recent versions of Ubuntu (and likely other platforms with recent compiler updates). There are still some outstanding issues in the tracker related to an unusual Objective-C behavior observed by one user. Once that is fixed and I do some cleaning (like either fixing or purging that slisp example for once and for all), I'll update to 1.3. ... read more
Finally, after many months (ok, over a year) of wanting to make the move, I've moved the project off of CVS and into git. I made no attempt to preserve the history of the CVS repo in the git repository. I will archive the CVS repo somewhere safe for reference in case there is ever a need to go back in time and see something from before the git move.
Version 1.1 -> 1.2
- introduction of sexp_errors.h, corresponding sexp_errcode_t type,
the library errno variable "sexp_errno" and the "error" field in the
pcont_t structure. This is the biggest revision to the library. Instead
of asserting or fprintf() and exiting, the library attempts to gracefully
return to the caller providing error cause information via the
sexp_errno and error fields.... read more
- License updated to cover LGPL as a valid license for using this library.
- added sexp_errors.h definitions
- removed casts from malloc/calloc/realloc calls to prevent portability
issues due to casts masking forgotten includes.
- initial implementation of an XML-SAX-like-parser for s-expressions.
instead of returning a parsed sexp_t data structure, in event mode,
the parser will call event handlers depending on the type of s-expression
element (atom, begin sexpr, end sexpr) encountered. This is useful for
parsing huge streams where it is not necessary to parse and store the entire
parse tree, but work on it as it arrives. This code will be re-worked in
the future -- currently two parser routines exist with essentially the same
internals, with one allocating memory while the other does not. I would
like to merge these, but this merger is non-trivial, and a release with this
feature would be usable at this stage before I clean up the insides of the
parser during the merge. Added data file and updated example of callback
driven parsing for Coskun Tasoluk.
- update to make destroy_sexp() free the bindata field if the sexp element
is a binary atom (ie, allocated during INLINE_BINARY parsing mode).
- malloc debugging make target was removed. Tools like valgrind and similar
programs can accomplish this, so it was pointless to continue to carry this
additional, unmaintained code along with the library. I don't think
anyone ever used them in versions past 0.3.x anyway.
- Fix to cstring.h for C++ users. Thanks to Matt Rice for pointing this out.
- Minor doxygen documentation updates.
To make life easier for a larger audience of potential users of the library, it has been relicensed as LGPL from the GPL. Enjoy. The code and license files in CVS have been updated, and the new release coming in the very, very near future will contain these changes.
Note: the version 1.0.1 uploaded on June 13th, 2005 was not properly tested under Linux and it was found that newer installations contained C headers that defined getopt in a different location than earlier versions of various linux distributions, and other OS's like MacOSX 10.4 and earlier. This was a simple fix to autoconf to determine which header is necessary. Refer to the release notes for 1.0.1 to find the list of features/fixes that are contained in this release.
- added -ansi -pedantic to default build CFLAGS to ensure no accidental
non-standard GCC-isms make it into the code. Must remain as portable
- fixed make stuff to be more GNU-ish
- removed hardcoded ranlib from makefile. autoconf fills this in now.
- fixed configure to not fail when doxygen missing
- created a DOT file for visualizing the parser state machine. the state
machine in a txt file was grossly out of date.
- sexp visualization code via graphviz added.
- makefile.include added to keep all things like flags that are common across
build targets in ONE place.
- imported Steve James' python binding. Not compatible with OSX yet -- it
needs work to make it portable and clean. should use same concepts and
design to revise ruby binding.
- fix for INLINE_BINARY bug related to variables not being properly saved
to a continuation at various points. Reported by Michael Schneider
- support to build under Microsoft Visual Studio .NET 2003 added thanks to
Brad Green. See win32/ directory. This means one can use the library under
windows without needing things like cygwin anymore.
- print_sexp_cstr bug related to cstring not properly being initialized to
- widespread overhaul of types to ensure that all sizes for mallocs, copies,
and other related calls were of type 'size_t' instead of 'int', 'long',
or explicit unsigned versions of these. this cleans up the code and
makes life a bit safer.
- squashed various warnings related to printf() format strings and other
mostly harmless and annoying things.
- fix for API suggested by Richard Spindler related to explicitly declaring
arguments as 'const' when they aren't modified by the function being called.
- removed torture.c test and merged functionality into the more flexible
ctorture.c code. these just tested the parser in both continuation and
non-continuation mode (hence the 't' and 'ct' names). this was silly
to not have in one place with a flag to toggle.
- fix to make read_and_dump test work in both inline binary AND normal mode
to ensure that plain text s-expressions work FINE in inline binary mode,
especially ones that are close (w.r.t. the finite state machine) to the
reserved strings for starting a binary block.
Finally! The release paperwork has been finished and version 1.0.0 has been released. See the release notes on the file download page for details on what changed.