Among the CIF API's high-level features are
- a fully-functional CIF 1.1/2.0 autodetecting parser, operating either to
- parse to an in-memory whole-CIF representation (analogous to DOM XML parsers)
- parse via user-supplied callback functions (analogous to expat and SAX XML parsers)
- or to combine the two parsing modes;
- an object representation of CIF 2.0 data, with all functions needed to create, examine, and / or modify instances of the model, in particular
- CIF 2.0's full repertoire of Unicode characters is supported in block codes, frame codes, data names, and data values
- CIF 2.0's new List and Table data compound types are supported;
- a complete (but a bit simplistic) mechanism for writing CIF data to files;
- extensive user documentation and examples.
- A C or C++ compiler is required to build the software and examples, and (since it's primarily a library, after all) to build programs that use the API. Any C compiler that supports standard C89 or C99, or any C++ compiler that supports C++98 should be sufficient.
- International Components for Unicode (ICU) development files (headers and libraries), version 3.6 or later
- SQLite development files, version 3.6.19 or later
- The automated configuration system is implemented as a shell script, therefore 'bash' or a similar shell is required to use the script to configure for building. Setting up to build without using the script should be feasible, if necessary.
- The automated configuration system relies on using the pkg-config program to discover build options related to ICU.
- The build system relies on a command being available to count the lines in a text file; workarounds are available, if necessary.
- The build system relies on a variety of command-line tools including especially 'make' and 'sed'.
- The API implementation was developed in a Linux environment. It is expected to build and run well on OS X, too, provided the appropriate build tools are available. It has not yet been built on Windows, though that should in principle be possible. Feedback about building the project on various platforms is especially welcome.
- The beta test software will be distributed under a fairly restrictive license. I anticipate that the public release of the software will be licensed under the LGPL.
Contact me ( John [dot] Bollinger [at] StJude [dot] org ) to request the distribution package.