1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
CIF API Change Log
Version 0.4.2
* Added a pkg-config description
Added a template for a pkg-config .pc file describing libcif. It is filled
by the configure script and the resulting .pc file is installed by 'make
install'.
* Added an RPM spec file
Added a spec file for building and installing the CIF API software via RPM.
Both a 'configure' template for the spec file and a copy of the spec file
itself are included in the misc/ subdirectory.
* SQLite usage improvements
Switched from a default UTF-16 database to default UTF-8 for considerable
space savings and (surprisingly) approximately 2% faster performance.
* Unit tests and bug fixes for cif_analyze_string()
Implemented unit tests for function cif_analyze_string(), and fixed several
bugs that they revealed. (Issues number 4, 5, 6, 7, and 8.)
* Fixed a bug in cif_linguist's handling of loop headers
Fixed a flaw in cif_linguist in which it failed to output loop headers
correctly (issue 9).
* Fixed a regression in the parser's recovery behavior for invalid values
The addition in v0.4.0 of a persistent distinction between quoted and
unquoted values caused a regression in the parser's behavior when it
encounters an unquoted value of a form that CIF does not permit. That
bug is fixed, restoring the parser's error recovery behavior of accepting
the value. Such values are marked as if they had been parsed quoted.
* Made cif_linguist preserve whitespace and comments
In a substantial revision to cif_linguist, supported by small changes to the
parser's usage of whitespace callbacks, made cif_linguist preserve
whitespace abd comments when it translates a file.
* Fixed a build system bug related to finding ICU
The 'configure' program failed to determine the correct build options for
ICU support in the event that the ICU headers were not available in the
default include path (even though it correctly determined where to find
them). The problem is resolved in this version.
Version 0.4.1
* Added '-f' fast mode option to cif2_syncheck
If the -f option is passed to cif2_syncheck then it runs the parser in
syntax-only mode, with no data-handling callbacks. This turns out to be
about 200 times faster (literally), but does not detect duplicate data
names, frame codes, or block codes. This option was motivated by the
example parser provided with cctbx::ucif, which operates exactly the
same way.
* Added support for SQLite memory-based mode
Added code protected by conditional-compilation directives to cif.c. When
enabled, CIF storage will be handled by SQLite in-memory databases instead
of SQLite temporary databases. Enabling this mode provides a parse-speed
advantage advantage on the order of 35%, but removes automatic spillover
to the file system. The CIF API's SQLite form of CIF data is many times
larger than CIF's native text form, so spillover can be very important.
The build system intentionally provides no direct support for enabling
in-memory mode.
Version 0.4.0
* Added CIF 1.1-format output
Previously, the CIF API could read either CIF 1.1 format or CIF 2.0 format,
but on the output side, it could write only CIF 2.0 format. A write option
has been defined (the first one, though the framework for it already
existed) to enable users to select CIF 1.1 output.
* Switched to preferring line folding for text-field escaping
When the trimmed first line of a text field ends with a backslash in
CIF 2.0 output mode, or when the trimmed first line consists of a single
backslash in CIF 1.1 mode, the text-field value must somehow be escaped to
prevent readers from interpreting the field as being prefixed and / or
folded. Prefixing was previously used for that purpose, but to better
support CIF 1.1, line folding is now used instead. (Prefixing is performed
only if the field value contains a newline / semicolon digraph.)
* Text-field output fixes
Fixed at least two bugs in the text-field output routine, which now has more
prominence. (1) Previously, completely empty lines were filtered out of
text-field values when line-folding or text prefixing was in effect; they
are now preserved. (2) Line-folding was not performed correctly for lines
that (after trimming) ended with a backslash; correct folding is now
implemented.
* Added automatic char-to-numb coercion
Updated cif_value_get_number() and cif_value_get_su() to automatically
convert the provided value object to numeric kind if it is initially of
character kind and such a coercion is possible. Changed the parser to
avoid distinguishing NUMB values from CHAR values at parse time, relying
instead on coercing values as needed, later.
* Added a value property tracking quoted status
Longstanding CIF conventions establish that the interpretation of a data
value can depend on whether it is presented whitespace-delimited or in one
of the other forms. They contain some specific examples of how that
distinction is conventionally used, but nothing restricts the distinction to
those cases. The CIF API now provides a modifiable value property that
designates whether a value is consider 'quoted' or not, provides additional
coercions around some changes to that attribute's value, and where possible,
honors that attribute on output.
* Added EXPERIMENTAL program cif_linguist
Added CIF format translation program cif_linguist to the distribution.
It is only lightly tested, and it has several notable limitations, such
as stripping all CIF comments in the course of translation.
* Added public functions and header
Added new public functions cif_analyze_string() and
cif_is_reserved_string(). These are used internally for making decisions
about value coercion and formatting, but they are also made accessible for
library users. Added new public header cif_error.h declaring global
variables provided by the CIF API library that contain
programmatically-accessible text explaining each CIF error code.
Version 0.3.0
* Changed type names
Because POSIX reserves type names ending in _t, the names of all types
provided by the CIF API have been changed to use suffix _tp instead.
* Provisions for recent ICU
Versions of ICU more recent than the one against which the library was
initially developed incorporate a change that causes a host of
const-correctness warnings to be emitted during compilation, mostly from the
tests. These issues were resolved with respect to ICU 55-1 (and the code is
still fine with respect to ICU 4.2.1).
* Building on Win32 / Win64
Updated for building as a native DLL on Windows (Win32 / Win64). The
MinGW-w64 toolchain was specifically targeted, but overall the changes were
few, and the code is overall very portable, so it is likely that the result
could be adapted for other Windows toolchains with comparative ease.
* Bulding on OS X
Not much was really needed to provide for building on OS X, but a small
build system change cleaned up an issue encountered when relying on Fink for
dependencies.
* Support for non-standard whitespace and EOL
Added parser options enabling it to recognize some program-specified
additional characters as having significance as CIF whitespace or
end-of-line. Aimed mainly at early CIFs that use vertical tabs and / or
form feeds for whitespace and end-of-line purposes, respectively, this
feature is in fact a bit more general than that.
* Added function cif_get_api_version()
Added an API function cif_get_api_version() to enable client applications
to determine which version of the API they are accessing.
Version 0.2.0.3
* Bug in cif_loop_add_item()
Fixed a bug in which cif_loop_add_item() did not correctly handle a NULL
default value.
* Documentation of packet iterator effects
Documentation of the possible negative effects and constraints of open
packet iterators was added to the general packet iterator description and
to the docs of cif_loop_get_packets().
* Fixed a narrow text-folding failure case
The text block line-folding code used by cif_write() could produce invalid
output because it failed to protect against lines being folded immediately
before a semicolon (only a problem when not also prefixing). That issue is
now resolved.
Version 0.2.0.2
* Issues with ssize_t
Fixed a header declaration and build configuration issue resulting in
declarations of type ssize_t not being visible in some places where it is
used. Observed on Debian.
* ICU pkg-config package names
Fixed a build configuration issue arising on Debian, where the pkg-config
data for ICU are split among multiple logical packages.
* Tests performing exact floating-point comparisons
Fixed a test implementation issue revolving around exact FP comparisons
being performed in certain places where approximate comparisons were needed.
(The tests still use exact comparison where exact agreement is expected.)
* Long time to handle many-packet loops
Fixed a performance issue associated with adding packets to loops already
having many packets.
* Minor reorganization
Merged macros for Unicode code point constants used in different source
files into a common location (src/internal/values.h). Added consistent
source comments to the internal headers indicating that they are not
intended to be installed. Changed the scope of one 'extern "C"' block.
Added a few source comments.
* Added CIF_MEMORY_ERROR
Added error code CIF_MEMORY_ERROR, and updated substantially all functions
that perform dynamic memory allocation to raise that error code in the
event of a memory allocation failure.
* Removed the build dependency on a line-counting command
Updated the build system -- in particular, the part that generates a header
file from the database schema -- to remove the need to count lines. The
generated header is slightly different, and the code that uses it is
adjusted to match.
Version 0.2.0.1
* C++ compatibility in cif_cstr_to_ustr()
Fixed a C++ compatibility issue in cif_cstr_to_ustr()
* Configure script bug
Fixed an error in the configuration program, related to the
--enable-c89-enforcement option
Version 0.2.0
* Initial full (beta test) release
Known Issues
* The SQLite back end is slow-ish.
So far this performance issue is exhibited most clearly by parsing large
(hundreds of kB) CIFs. Profiling shows virtually all runtime being consumed
by SQLite.
|