Commit [f44f6d]  Maximize  Restore  History

fix CL case conversions of characters involving iota subscript

Oh boy. Judging by the length of the web page explaining the issue
(at <>)
this is a bit of a minefield. I hope that this doesn't contribute
further to the trouble...

Although the combined _WITH_PROSGEGRAMMENI characters are of
general class "Lt" (i.e. titlecase), for CL purposes we treat them
as the uppercase equivalent of the lowercase _WITH_YPOGEGRAMMENI
characters (as directly specified by the case mapping data in
UnicodeData.txt). This is a little awkward, and involves a bit
of rearrangement in the indices of the misc table entries to make
the (CL) uppercase/lowercase tests efficient, but seems to be the
best of all possible worlds given that we must comply with CL's
character-to-character case mappings -- the alternative of not
providing an uppercase version of LOWERCASE_OMEGA_WITH_YPOGEGRAMMENI
seems even weirder.

The way this is done in ucd.lisp is a little bit kludgy, because we
have to avoid giving the same exception to the serbian titlecase
digraphs (Dz and friends) which mustn't map to anything, or else
we'd break invertibility. (The lowercase dz and uppercase DZ are
already (CL) case mappings of each other). Probably the thing which
will confuse future readers is that some (Unicode) titlecase
characters are (CL) upper-case-p.

Christophe Rhodes Christophe Rhodes 2013-06-04

changed src
changed src/code
changed src/code/target-char.lisp
changed tests
changed tests/character.pure.lisp
changed tools-for-build
changed tools-for-build/ucd.lisp
src/code/target-char.lisp Diff Switch to side-by-side view
tests/character.pure.lisp Diff Switch to side-by-side view
tools-for-build/ucd.lisp Diff Switch to side-by-side view