Dropped kern class mystery

cerulean's picture

In a font I'm making, just one kerning class, the _A class, won't kern on the right side with other classes. It will kern with unclassed characters like the question mark. "AVATAYA?" looks like "A VA TA YA?" in the preview window. All the other pairs work correctly, as far as I've been able to determine. Any ideas? Here is the feature code, just as FontLab generated it:


feature kern {
pos F AE -50;
pos F slash -40;
pos P X -50;
pos P AE -70;
pos P slash -50;
pos X Lslash -30;
pos B X -20;
pos x q -25;
pos lcaron q -60;
pos lcaron x -20;
pos tcaron f -10;
pos tcaron p -20;
pos tcaron q -90;
pos tcaron x -20;
enum pos @_A question -50;
enum pos @_A registered -60;
enum pos @_A backslash -70;
enum pos @_A one -50;
enum pos @_A seven -30;
enum pos @_C X -30;
enum pos @_K f -20;
enum pos @_K Lslash -30;
enum pos @_L question -50;
enum pos @_L registered -60;
enum pos @_L backslash -70;
enum pos @_L seven -30;
enum pos @_O X -30;
enum pos @_S X -30;
enum pos @_T q -40;
enum pos @_T AE -100;
enum pos @_T ampersand -50;
enum pos @_T slash -70;
enum pos @_V f -10;
enum pos @_V q -40;
enum pos @_V p -20;
enum pos @_V x -20;
enum pos @_V AE -90;
enum pos @_V ampersand -50;
enum pos @_V slash -70;
enum pos @_Y f -10;
enum pos @_Y p -20;
enum pos @_Y q -30;
enum pos @_Y x -30;
enum pos @_Y AE -120;
enum pos @_Y slash -70;
enum pos @_a f -10;
enum pos @_c x -20;
enum pos @_e x -20;
enum pos @_o x -20;
enum pos @_b x -20;
enum pos @_r x -30;
enum pos @_v ae -10;
enum pos @_v q -25;
enum pos @_quotesingle q -30;
enum pos @_quotesingle x -10;
enum pos @_hyphen X -70;
enum pos @_hyphen seven -30;
subtable;
enum pos F @_A -30;
enum pos F @_period -60;
enum pos P @_A -50;
enum pos P @_period -80;
enum pos X @_O -30;
enum pos X @_S -30;
enum pos X @_C -30;
enum pos X @_G -30;
enum pos X @_J -30;
enum pos X @_o -20;
enum pos X @_e -20;
enum pos X @_c -20;
enum pos X @_s -20;
enum pos X @_a -10;
enum pos X @_y -20;
enum pos X @_hyphen -70;
enum pos B @_A -20;
enum pos B @_V -20;
enum pos f @_a -10;
enum pos ae @_v -15;
enum pos q @_j 70;
enum pos x @_Y -30;
enum pos x @_o -20;
enum pos x @_c -20;
enum pos x @_e -20;
enum pos x @_d -25;
enum pos x @_quotesingle -10;
enum pos ampersand @_V -40;
enum pos ampersand @_T -50;
enum pos seven @_A -50;
enum pos seven @_J -50;
enum pos seven @_hyphen -40;
enum pos seven @_period -60;
enum pos question @_A -70;
enum pos slash @_A -70;
enum pos exclamdown @_T -20;
enum pos exclamdown @_V -20;
enum pos questiondown @_T -40;
enum pos questiondown @_V -40;
enum pos backslash @_V -70;
enum pos backslash @_T -70;
enum pos backslash @_Y -70;
enum pos lcaron @_a -60;
enum pos lcaron @_c -60;
enum pos lcaron @_d -60;
enum pos lcaron @_e -60;
enum pos lcaron [g gdotaccent gcircumflex gbreve gcommaaccent] -60;
enum pos lcaron @_o -60;
enum pos lcaron @_s -60;
enum pos lcaron @_u -20;
enum pos lcaron @_z -20;
enum pos Lcaron @_T -50;
enum pos Lcaron @_V -50;
enum pos tcaron @_a -90;
enum pos tcaron @_c -90;
enum pos tcaron @_d -80;
enum pos tcaron @_e -90;
enum pos tcaron [g gdotaccent gcircumflex gbreve gcommaaccent] -80;
enum pos tcaron @_n -10;
enum pos tcaron @_o -90;
enum pos tcaron @_r -20;
enum pos tcaron @_s -80;
enum pos tcaron @_z -40;
enum pos tcaron @_u -20;
subtable;
pos @_A @_V -60;
pos @_A @_T -60;
pos @_A @_Y -80;
pos @_A @_O -20;
pos @_A @_J -20;
pos @_A @_v -50;
pos @_A @_C -30;
pos @_A @_G -20;
pos @_A @_U -20;
pos @_A @_t -25;
pos @_A @_o -15;
pos @_A @_c -15;
pos @_A @_e -15;
pos @_A @_quotesingle -70;
pos @_A @_hyphen -40;
pos @_C @_A -20;
pos @_C @_V -10;
pos @_D @_A -20;
pos @_D @_V -20;
pos @_J @_A -20;
pos @_K @_a -20;
pos @_K @_o -30;
pos @_K @_e -30;
pos @_K @_s -20;
pos @_K @_c -30;
pos @_K @_t -20;
pos @_K @_u -20;
pos @_K @_v -50;
pos @_K @_y -30;
pos @_K @_d -20;
pos @_K @_g -10;
pos @_K @_hyphen -70;
pos @_K @_O -30;
pos @_L @_T -90;
pos @_L @_V -70;
pos @_L @_Y -100;
pos @_L @_quotesingle -60;
pos @_O @_A -20;
pos @_O @_V -20;
pos @_R @_V -20;
pos @_S @_V -20;
pos @_T @_A -60;
pos @_T @_J -90;
pos @_T @_a -40;
pos @_T @_c -40;
pos @_T @_d -40;
pos @_T @_e -40;
pos @_T @_g -40;
pos @_T @_o -40;
pos @_T @_s -40;
pos @_T @_period -80;
pos @_T @_colon -80;
pos @_T @_hyphen -30;
pos @_U @_A -20;
pos @_V @_A -60;
pos @_V @_J -60;
pos @_V @_a -40;
pos @_V @_c -40;
pos @_V @_e -40;
pos @_V @_d -40;
pos @_V @_g -40;
pos @_V @_n -20;
pos @_V @_o -40;
pos @_V @_r -20;
pos @_V @_s -40;
pos @_V @_u -20;
pos @_V @_z -20;
pos @_V @_y -20;
pos @_V @_v -20;
pos @_V @_O -20;
pos @_V @_C -10;
pos @_V @_period -80;
pos @_V @_colon -50;
pos @_V @_hyphen -40;
pos @_Y @_A -80;
pos @_Y @_J -90;
pos @_Y @_a -70;
pos @_Y @_c -50;
pos @_Y @_d -40;
pos @_Y @_e -70;
pos @_Y @_g -40;
pos @_Y @_o -70;
pos @_Y @_n -20;
pos @_Y @_r -20;
pos @_Y @_s -50;
pos @_Y @_u -20;
pos @_Y @_v -30;
pos @_Y @_z -20;
pos @_Y @_period -80;
pos @_Y @_colon -60;
pos @_a @_V -40;
pos @_a @_Y -40;
pos @_a @_v -30;
pos @_a @_y -15;
pos @_a @_t -10;
pos @_a @_quotesingle -50;
pos @_c @_V -40;
pos @_c @_Y -50;
pos @_c @_T -40;
pos @_c @_quotesingle -40;
pos @_e @_V -40;
pos @_e @_Y -50;
pos @_e @_v -15;
pos @_e @_y -10;
pos @_e @_T -40;
pos @_e @_quotesingle -40;
pos @_g @_V -20;
pos @_g @_j 70;
pos @_h @_quotesingle -30;
pos @_h @_V -40;
pos @_h @_Y -50;
pos @_h @_T -30;
pos @_j @_j 70;
pos @_n @_V -40;
pos @_n @_Y -50;
pos @_n @_v -20;
pos @_n @_T -30;
pos @_n @_quotesingle -30;
pos @_o @_V -40;
pos @_o @_Y -70;
pos @_o @_v -20;
pos @_o @_T -50;
pos @_o @_quotesingle -40;
pos @_b @_V -40;
pos @_b @_Y -50;
pos @_b @_v -20;
pos @_b @_T -30;
pos @_b @_quotesingle -30;
pos @_r @_V -20;
pos @_r @_Y -30;
pos @_r @_a -10;
pos @_r @_quotesingle -20;
pos @_r @_v -10;
pos @_s @_V -40;
pos @_s @_Y -50;
pos @_s @_quotesingle -40;
pos @_s @_v -25;
pos @_v @_Y -30;
pos @_v @_o -20;
pos @_v @_e -15;
pos @_v @_a -10;
pos @_v @_d -15;
pos @_v @_s -15;
pos @_v @_A -40;
pos @_y @_e -15;
pos @_z @_Y -20;
pos @_z @_quotesingle -10;
pos @_quotesingle @_A -70;
pos @_quotesingle @_s -40;
pos @_quotesingle @_a -40;
pos @_quotesingle @_c -40;
pos @_quotesingle @_d -40;
pos @_quotesingle @_e -40;
pos @_quotesingle @_g -40;
pos @_quotesingle @_o -40;
pos @_quotesingle @_z -20;
pos @_quotesingle @_J -60;
pos @_colon @_T -80;
pos @_colon @_V -50;
pos @_colon @_Y -60;
pos @_period @_T -80;
pos @_period @_V -80;
pos @_period @_Y -80;
pos @_hyphen @_A -40;
pos @_hyphen @_T -30;
pos @_hyphen @_V -40;
} kern;

I've also tried duplicating each class into separate left-side and right-side classes, but that didn't make any difference.

malcolm's picture

Are you getting confused by 'left' and 'right' side? By your example it is the A in it's left side (or FIRST position) that is not working.

Nick Shinn's picture

Try manually inserting a "subtable; " (or more), to break up what may be too many kerns to fully compile.

cerulean's picture

I say "the kerning on the right side of the A" and I guess you prefer to say "the kerning when the A is on the left side"... same thing.

Anyway, I don't know how much to trust the features preview in FontLab now. I've tested the font in OpenOffice and it works on both sides, but only the class masters kern. So I guess I ought to take W out of V's kerning class. I don't know how it looks in InDesign yet, because $700 is a lot of money. I am starting to resent OpenType.

cerulean's picture

Thank you, Nick, that seems to be doing it. I'm afraid I wouldn't have thought of that, since the one "subtable;" that was already there was right before the AV pair, making it suspicious enough that all I thought to try was to take it out!

fontdesigner2's picture

Mr. Shinn,

I think I have the same problem as this guy.

Can you point me to some instructions on how to insert the "subtable;" in the code and where to put it?

I have a lot of kern pairs in my font (4,262 so far. A lot I know). My font is an opentype-flavored opentype font. Do you think that when it compiles my kerning, it's throwing some of it out, and if I insert enough of those "subtable;" things in the code in the right places, can I cram all of my kerning in there without any of it getting tossed out?

Syndicate content Syndicate content