sys-file-reader: Refactor to clean up character encoding support.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Feb 2011 05:10:10 +0000 (21:10 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 20 Mar 2011 16:41:55 +0000 (09:41 -0700)
commitd8fdf0b4fa919e48397b438e9453d6b82215ff51
treed12912ed9ca3cf6d7a572096f5f5ba759742ba50
parentca0a72e321421d02a1fd6df943425eff4bd1a257
sys-file-reader: Refactor to clean up character encoding support.

The system file format is unusual in that it does not record the encoding
used by character strings at the beginning or at any fixed place in the
file.  Instead, it can be recorded practically anywhere in the file.  It
never precedes all of the actual character strings in the file, which makes
it impossible to interpret those strings completely and correctly until it
is encountered.

Until now, the system file reader has dealt with this situation by
stuffing uninterpreted character strings into data structures until the
encoding is known, then at that point fetching out the character strings,
reencoding them, and stuffing them back into the data structures.  This
does work, but it has the disadvantage that all of the PSPP data
structures have to tolerate character strings with unknown encoding.  In
some cases this seems like an ugly situation.  For example, arbitrary
variable names have to be supported, even though the syntax for variable
names is circumscribed by the language, because the syntax rules for
variable names cannot be completely and correctly applied to a string that
is in an unknown encoding.

This commit fixes that problem by adopting a new way to read system files.
Each record in the system file dictionary is essentially slurped into
memory as a chunk, then the character encoding is extracted from it, then
the rest of the dictionary is interpreted based on that encoding.  The
actual implementation is a little more intricate because the format of
system file records is somewhat non-uniform.
src/data/dictionary.c
src/data/sys-file-reader.c
src/data/sys-file-reader.h
tests/data/sys-file-reader.at
tests/language/dictionary/sys-file-info.at