GPOS kerning problem for upload to Monotype Foundry

Hi Guys,
I am new here.
I have put a few fonts up on MyFonts recently, mostly without too many problems.
However the last two related font families I have uploaded have come back with a problem that I don’t understand.
Both have come back with this message:
Thanks for your submission. Please have a look below for kerning issue. The GPOS table defines the scripts / languages, and is the table which contains the kerning for the glyphs. The issue you’re experiencing is present in fonts that contain a GPOS table with a default kerning table only. In case the language can not be found default kerning would apply all the time. By default, our new font rendering service will only render kerning pairs from the standard GPOS pairing font table. If you have kerning in the ‘kern’ table, we recommend changing the binary to have GPOS kerning table entries that are available in the ‘kern’ table. An example of this is in how Word and InDesign handles kerning: - Word, regardless of the operating system, is unable to apply kerning if there is only a default table. This is a known “bug” and also discussed in communities. (No kerning in Office - #16 by RasmusLM) - InDesign applies kerning if there is a DFLT table, which is the correct and the expected behavior. Currently, our font renderer has the same behavior as Word and does not render kerning if there is a default kerning table only. Our developers are actively working on upgrading this. It will be fixed automatically once the upgrade is done.

I have no idea what the GPOS table or the default kerning table is, or how to access and/or edit either of them. or what the problem is. I cannot fix the problem if I do not understand it, or see it. Which I don’t. It runs perfectly on my computer.
Can anyone give me an idea what I need to do to fix this problem?
Thanks
Scott
Dragon Tongue Foundry

Glyphs does export GPOS kerning by default. Did you add a “Export kern Table” or “Write Kern Table” custom parameter?

No I haven’t, and wouldn’t know how to… as yet.

I have now added a ‘Write Kern Table’. But I have no idea yet if that has fixed the problem.
I have submitted the font, and am waiting on a reply now. MyFonts demo display software is still displaying my font as if it has unusual kerning, which it doesn’t. So I guess we will see if it is fixed or not.

Maybe your font has no kerning at all? Is it a monospaced font? Then you can ignore the warning.

Do NOT use the ‘write kern table’ parameter. This is only for legacy fonts.

Oh, it is a script font, so yes, plenty of kerning

I didn’t mean that you should add that parameter. It should be removed, if present.

Reading the error message again, I might have an idea what it could mean. Do you have any opentype features in those fonts?

1 Like

I find that I am learning all the time, so I have learned enough to use many features. But I also know that I have only been doing this a short while, so I know I have huge holes in my knowledge when it comes to this.
So my answer is YES, but I can’t be sure exactly what you mean by this, so I will show you as much as I can. can I upload the font here somewhere?

liga:====

sub e’ s by e.alt1;

sub n’ [c d e k k.up e_x k_e o_s n_c u_s e_l a g n m x o] by n.alt; sub n’ e by n.alt;

sub x’ [o o_o i l m n p b e_l a_l a_t s_s h j r t u v w y q e a g g_g c d] by x.alto;

sub k.dn’ y.alt.end by k.up; sub k’ n_c by k.up; sub k’ [p_p o_o n n.alt] by k.up;

sub l’ i by l.alti; sub l’ exclam by l.alti;

sub c’ [b h i j k l m n p r t t.alt t.alt.period t_space.alt u v x y z z.end] by c.alti;

sub f f by f_f;

sub l l by l_l;

sub a l by a_l;

sub a t by a_t;

sub a d by a_d;

sub m m by m_m;

sub i r by i_r;

sub t t by t_t;

sub o o by o_o;

sub o n by o_n;

sub o s by o_s;

sub p p by p_p;

sub b b by b_b;

sub n c by n_c;

sub s t by s_t;

sub s s by s_s;

sub e l by e_l;

sub e x by e_x;

sub e e by e_e;

sub k e by k_e;

sub g g by g_g;

sub u s by u_s;

sub z’ [l l_l f f_f t t_t T q p p_p ] by z.end;

sub [s s.h]’ [a g d e c c.alti o q s s_t] by s.a;

sub [s s.h]’ [i j m n p r u.alt x.alto u f f_f f.alt.spacef v x w y y.alt.comma y.alt.end y.alt.space y.altl z z.end] by s.i;

sub s’ [h l k b l_l t T I k.up k.dn l.alti l.alt t_space.alt t.alt.period t.alt] by s.h;

sub q’ [i b f h i j k l m n p r t t_t x y w v u] by q.altl;

sub y’ [i b f h i j k l m n p r t u] by y.altl;

sub c’ g by c.alt; sub c’ a by c.alt; sub c’ d by c.alt; sub c’ e by c.alt; sub c’ f by c.alt;

sub c’ y by c.alt;

sub c’ k by c.alt; sub c’ o by c.alt; sub c’ r by c.alt; sub c’ u by c.alt;

sub c’ a_d by c.alt;

sub e’ [u g_g] by e.alt;

sub n’ t by n.alt; sub n’ h by n.alt; sub n’ j by n.alt; sub n’ l by n.alt; sub n’ l_l by n.alt;

sub n’ m by n.alt; sub n’ m_m by n.alt; sub n’ n by n.alt; sub n’ t_t by n.alt; sub n’ p by n.alt; sub n’ t.alt.period by n.alt;

sub n’ x.alto by n.alt; sub n’ x by n.alt; sub n’ r by n.alt; sub n’ b by n.alt; sub n’ i by n.alt;

sub n’ f_f by n.alt;

sub u’ g by u.alt; sub u’ u by u.alt; sub u’ a by u.alt; sub u’ c by u.alt; sub u’ d by u.alt;

sub u’ e by u.alt; sub u’ e_e by u.alt; sub u’ g_g by u.alt;

sub k’ [n o_n s_s e_x e_l o_o y x x.alto] by k.alt; sub k’ m by k.alt; sub k’ [p_p p] by k.alt; sub k’ q by k.alt; sub k’u_s by k.up;

sub l’ t by l.alt; sub l’ m by l.alt; sub l’ n by l.alt; sub l’ j by l.alt; sub l’ g by l.alt;

sub l’ d by l.alt; sub l’ p by l.alt; sub l’ q by l.alt; sub l’ y by l.alt; sub l’ e by l.alt2;

sub l’ a by l.alt; sub l’ u by l.alt; sub l’ a_t by l.alt;

sub a’ [z z.end] by a.salt;

sub a’ [s s_s] by a.alt;

sub i f’ by f.alt;

sub k’ a by k.up; sub k’ o by k.up; sub k’ w by k.up; sub k’ r by k.up; sub k’ t by k.up; sub k’ u by k.up;

sub k’ [i j l_l] by k.up; sub k’ s by k.up; sub k’ h by k.up; sub k’ l by k.up; sub k’ c by k.up; sub k’ v by k.up;

sub k’ b by k.up; sub k’ m_m by k.up; sub k’ a_d by k.up; sub k’ f by k.up; sub k’ g by k.up; sub k’ k by k.up;

sub k’ y by k.dn; sub k’ d by k.dn; sub k’ o_s by k.up; sub k’ kspace.alt by k.up;

sub k’ space by kspace.alt; sub e’ [space comma period] by espace.alt;

sub s’ [space period] by s.alt2;

sub t’ space by t_space.alt;

sub L’ G by L.alt; sub L’ C by L.alt; sub L’ L by L.alt; sub L’ I by L.alt; sub L’ E by L.alt;

sub L’ O by L.alt; sub L’ Q by L.alt; sub L’ U by L.alt; sub L’ V by L.alt; sub L’ W by L.alt;

sub L’ Z by L.alt;

sub y’ period by y.alt.end; sub y’ space by y.alt.space;

sub y’ comma by y.alt.comma;

sub k’ y.alt.end by k.up; sub k.dn’ y.alt.end by k.up;

sub space t’ h by t.alt; sub space f’ by f.alt.spacef;

sub t’ period by t.alt.period;

# swashes… (underline numbers), _1 - 5, _( _)

sub underscore one by right_2.swsh;

sub underscore two by lefttc.swsh;

sub underscore three by runder_.swsh;

sub underscore four by r-.swsh;

sub underscore five by _right.swsh;

sub underscore parenleft by left.swsh;

sub underscore parenright by right.swsh;

# ornaments… (underline numbers), _6 - 8,

sub underscore six by swash.ornm;

sub underscore seven by ornam.ornm;

sub underscore eight by swish.ornm;

# ornaments… (underline Capsnumbers), _shift 1 - 6

sub underscore exclam by bolt.ornm;

sub underscore at by twirl.swsh;

sub underscore numbersign by star.ornm;

sub underscore dollar by tongue.ornm;

sub underscore percent by eyes.ornm;

sub underscore asciicircum by heart.ornm;

sub X’ [a c d e e_e g g_g o_o o q s_s s] by X.a;

sub s’[B D E F G H I K L M N P R T U V W Y ] by s.h;

sub k’ [p_p o_o o_o.salt n n.alt] by k.up;

sub t question’ by question.alt.t; sub t_t question’ by question.alt.t;

ordn:===
sub [zero one two three four five six seven eight nine] [A a]’ by ordfeminine;

salt:====
sub s t a r by summation; # replace with star image;

sub s_t a r by summation; # replace with star image;

sub h e a r t by heart.salt; # replace with heart image;

sub b o l t by Ocircumflex; # replace with lightning bolt image;

sub b o l.alt t_space.alt by Ocircumflex; # replace with lightning bolt image;

sub b o l.alt t by Ocircumflex;# replace with lightning bolt image;

sub s m i l.alt2 e by Aacute; # replace with smile image;

sub s m i l.alt2 espace.alt by Aacute; # replace with smile image;

sub a by a.salt;

sub i by i.salt;

sub e by e.salt;

sub o_o by o_o.salt; # replace with eyes;

sub k’ o_o.salt by k.up;

dlig:====
lookupflag IgnoreMarks ;

sub a d by a_d;

sub a l by a_l;

sub a t by a_t;

sub b b by b_b;

sub e e by e_e;

sub e l by e_l;

sub e x by e_x;

sub g g by g_g;

sub i r by i_r;

sub k e by k_e;

sub l l by l_l;

sub m m by m_m;

sub n c by n_c;

sub o n by o_n;

sub o o by o_o;

sub o s by o_s;

sub p p by p_p;

sub s s by s_s;

sub s t by s_t;

sub t t by t_t;

sub u s by u_s;

ornm:====
sub bullet from [heart.ornm eyes.ornm tongue.ornm bolt.ornm swash.ornm star.ornm ornam.ornm swish.ornm];

calt:====
sub t [a a.salt e e.salt i i.salt o u y ] t’ by t.ss001;

sub t [a a.salt e e.salt i i.salt o u y ] [a a.salt e e.salt i i.salt o u y ] t’ by t.ss001;

sub t [a a.salt e e.salt i i.salt o u y ] t.ss001’ by t.ss002;

sub t [a a.salt e e.salt i i.salt o u y ] [a a.salt e e.salt i i.salt o u y ] t.ss001’ by t.ss002;

ccmp:====
lookup ccmp_Other_1 {

@CombiningTopAccents = [acutecomb brevecomb caroncomb circumflexcomb dieresiscomb dotaccentcomb gravecomb hungarumlautcomb macroncomb ringcomb tildecomb];

@CombiningNonTopAccents = [cedillacomb ogonekcomb slashlongcomb];

sub [i]’ @CombiningTopAccents by [idotless];

sub [i]’ @CombiningNonTopAccents @CombiningTopAccents by [idotless];

} ccmp_Other_1;

plus sups and fracs

sorry about the data dump

This is a large-ish family of fonts, made with two different subgroups of fonts.
Each subgroup has 3 different italic angles. Each italic angle has 5 different weights (instances).
Each of those individual font weights have over 11850pairs of font kerning. So there is a lot of kerning. A lot of time spent.
I have just noticed that the masters used (light and bold), to make the instances, have a different number of kerning pairs from each other… could this be a problem?

Are you using languagesystem anywhere in your feature code? It may be worth checking whether that’s used correctly.

yes.
Languagesystems:====
languagesystem DFLT dflt;