nxsy
This currently only supports ASCII, but doing more is mostly just a matter of writing a hash table for lookup and not a fixed-size array with the character as the key.
I use a simple fixed-size lookup table with the character code as the key even for Unicode (reserve an array with 65536 'glyph description' elements and index directly into it). I don't care if most of it is empty - the memory footprint is negligible anyway.
My only concern was locality of reference, but I figured the hashing algorithm + collision walking would be as costly (but I haven't measured).
Edit: I lied. I just checked to refresh my memory and I actually use a set of tightly packed SOA style arrays, each containing individual glyph properties (size, kerning, vertical offset, UV coordinates etc) for the glyphs that are
actually present in the font, and look up the correct index into them from the Unicode table (which is just 2 bytes per element = 128k). The main point remains the same, though..