OT Alternates not working in Adobe CS

TOM-MLL's picture

I have a stylistic alternates in my opentype values, but for some reason the opentype panel in Photoshop/Illustrator will not toggle them. The interesting thing is, the glyph window in Illustrator reads them fine, but toggling the alternates in the opentype window does nothing. In order to select an alternate, it has to be done via the glyph window.

Has anyone ever experienced this, any ideas what is causing this?

blank's picture

Have you actually written the OpenType code to activate the alternates?

TOM-MLL's picture

Yes, my code is:

feature aalt{
feature calt;
feature salt;
} aalt;

feature kern { # Kerning
# Latin
lookup kern0 {
pos C X -33;
pos C a -33;
pos C y -33;
pos C e -33;
pos C o -33;
pos C u -33;
pos D J -22;
pos D X -33;
pos F J -88;
pos F X -33;
pos F a -22;
pos F e -33;
pos F o -33;
pos F A.alt -20;
pos F Adieresis -20;
pos F Aring -20;
pos F Agrave -20;
pos F Atilde -20;
pos F Acircumflex -20;
pos F Aacute -20;
pos F A -33;
pos G T -33;
pos G V -22;
pos K y -33;
pos K v -33;
pos K w -33;
pos L C -33;
pos L G -66;
pos L J -22;
pos L O -33;
pos L Q -33;
pos L S -33;
pos L T -100;
pos L U -33;
pos L V -88;
pos L W -40;
pos L Y -88;
pos L T.alt -100;
pos L V.alt -80;
pos L W.alt -40;
pos L Y.alt -80;
pos L Yacute -80;
pos L Ydieresis -80;
pos O T -33;
pos O X -33;
pos P J -77;
pos P X -44;
pos P a -33;
pos P e -33;
pos P o -33;
pos P A -33;
pos Q T -33;
pos Q X -22;
pos R J -22;
pos R a -33;
pos R e -33;
pos R o -33;
pos S T -33;
pos S y -33;
pos S w -33;
pos T G -33;
pos T J -100;
pos T O -33;
pos T Q -33;
pos T S -33;
pos T X -33;
pos T a -88;
pos T c -80;
pos T z -40;
pos T y -88;
pos T e -88;
pos T g -80;
pos T i -40;
pos T j -60;
pos T m -80;
pos T n -80;
pos T o -88;
pos T r -88;
pos T s -88;
pos T u -88;
pos T v -40;
pos T w -77;
pos T x -60;
pos T A.alt -60;
pos T J.alt -100;
pos T a.alt -80;
pos T c.alt -80;
pos T e.alt -80;
pos T g.alt -80;
pos T i.alt -40;
pos T j.alt -60;
pos T m.alt -80;
pos T n.alt -80;
pos T o.alt -80;
pos T r.alt -80;
pos T s.alt -80;
pos T u.alt -80;
pos T v.alt -40;
pos T w.alt -40;
pos T x.alt -60;
pos T y.alt -40;
pos T z.alt -40;
pos T ae -80;
pos T oe -80;
pos T oslash -80;
pos T dotlessi -88;
pos T aacute -88;
pos T agrave -88;
pos T acircumflex -88;
pos T adieresis -88;
pos T atilde -80;
pos T aring -80;
pos T eacute -80;
pos T egrave -80;
pos T ecircumflex -80;
pos T edieresis -80;
pos T iacute -40;
pos T igrave -40;
pos T icircumflex -40;
pos T idieresis -40;
pos T oacute -80;
pos T ograve -80;
pos T ocircumflex -80;
pos T odieresis -88;
pos T otilde -80;
pos T uacute -80;
pos T ugrave -80;
pos T ucircumflex -80;
pos T udieresis -88;
pos T Adieresis -60;
pos T Aring -60;
pos T Agrave -60;
pos T Atilde -60;
pos T Acircumflex -60;
pos T Aacute -60;
pos T ccedilla -80;
pos T ntilde -80;
pos T yacute -40;
pos T ydieresis -40;
pos T A -66;
pos V J -80;
pos V a -88;
pos V c -77;
pos V y -33;
pos V e -77;
pos V i -33;
pos V o -77;
pos V r -77;
pos V s -77;
pos V u -77;
pos V A.alt -50;
pos V J.alt -80;
pos V dotlessi -77;
pos V aacute -44;
pos V agrave -44;
pos V acircumflex -44;
pos V adieresis -44;
pos V atilde -44;
pos V aring -44;
pos V eacute -44;
pos V egrave -44;
pos V ecircumflex -44;
pos V edieresis -44;
pos V iacute -44;
pos V oacute -88;
pos V ograve -77;
pos V ocircumflex -77;
pos V odieresis -77;
pos V otilde -77;
pos V uacute -44;
pos V ugrave -44;
pos V ucircumflex -44;
pos V udieresis -44;
pos V Adieresis -50;
pos V Aring -50;
pos V Agrave -50;
pos V Atilde -50;
pos V Acircumflex -50;
pos V Aacute -50;
pos V A -50;
pos W J -60;
pos W a -66;
pos W y -33;
pos W e -66;
pos W i -33;
pos W m -33;
pos W o -66;
pos W r -44;
pos W s -66;
pos W u -66;
pos W x -33;
pos W A.alt -30;
pos W J.alt -60;
pos W dotlessi -66;
pos W aacute -33;
pos W agrave -33;
pos W acircumflex -33;
pos W adieresis -33;
pos W atilde -33;
pos W aring -33;
pos W eacute -33;
pos W egrave -33;
pos W ecircumflex -33;
pos W edieresis -33;
pos W iacute -33;
pos W oacute -33;
pos W ograve -33;
pos W ocircumflex -33;
pos W odieresis -33;
pos W otilde -33;
pos W uacute -33;
pos W ugrave -33;
pos W ucircumflex -33;
pos W udieresis -33;
pos W Adieresis -30;
pos W Aring -30;
pos W Agrave -30;
pos W Atilde -30;
pos W Acircumflex -30;
pos W Aacute -30;
pos W ydieresis -33;
pos W A -33;
pos X C -33;
pos X G -33;
pos X O -33;
pos X Q -33;
pos X T -33;
pos X a -33;
pos X y -33;
pos X e -33;
pos X o -33;
pos Y C -33;
pos Y F -33;
pos Y J -88;
pos Y O -33;
pos Y S -33;
pos Y a -88;
pos Y c -80;
pos Y z -40;
pos Y y -40;
pos Y d -33;
pos Y e -80;
pos Y g -80;
pos Y i -60;
pos Y j -60;
pos Y m -80;
pos Y n -80;
pos Y o -80;
pos Y p -77;
pos Y r -80;
pos Y s -80;
pos Y u -80;
pos Y v -48;
pos Y w -40;
pos Y A.alt -60;
pos Y J.alt -80;
pos Y a.alt -80;
pos Y c.alt -80;
pos Y e.alt -80;
pos Y g.alt -80;
pos Y i.alt -60;
pos Y j.alt -60;
pos Y m.alt -80;
pos Y n.alt -80;
pos Y o.alt -80;
pos Y r.alt -80;
pos Y s.alt -80;
pos Y u.alt -80;
pos Y v.alt -40;
pos Y w.alt -40;
pos Y y.alt -40;
pos Y z.alt -40;
pos Y ae -80;
pos Y oe -80;
pos Y oslash -80;
pos Y dotlessi -77;
pos Y aacute -80;
pos Y agrave -80;
pos Y acircumflex -80;
pos Y adieresis -80;
pos Y atilde -80;
pos Y aring -80;
pos Y eacute -80;
pos Y egrave -80;
pos Y ecircumflex -80;
pos Y edieresis -80;
pos Y iacute -60;
pos Y igrave -60;
pos Y icircumflex -60;
pos Y idieresis -60;
pos Y oacute -80;
pos Y ograve -80;
pos Y ocircumflex -80;
pos Y odieresis -80;
pos Y otilde -80;
pos Y uacute -80;
pos Y ugrave -80;
pos Y ucircumflex -80;
pos Y udieresis -80;
pos Y Adieresis -60;
pos Y Aring -60;
pos Y Agrave -60;
pos Y Atilde -60;
pos Y Acircumflex -60;
pos Y Aacute -60;
pos Y ccedilla -80;
pos Y ntilde -80;
pos Y yacute -40;
pos Y ydieresis -40;
pos Y A -60;
pos Z a -33;
pos Z y -33;
pos Z e -33;
pos Z o -33;
pos A.alt T -60;
pos A.alt V -50;
pos A.alt W -30;
pos A.alt Y -60;
pos A.alt T.alt -60;
pos A.alt V.alt -50;
pos A.alt W.alt -30;
pos A.alt Y.alt -60;
pos A.alt Yacute -60;
pos A.alt Ydieresis -60;
pos L.alt T -100;
pos L.alt V -80;
pos L.alt W -40;
pos L.alt Y -80;
pos L.alt T.alt -100;
pos L.alt V.alt -80;
pos L.alt W.alt -40;
pos L.alt Y.alt -80;
pos L.alt Yacute -80;
pos L.alt Ydieresis -80;
pos T.alt J -100;
pos T.alt a -80;
pos T.alt c -80;
pos T.alt z -40;
pos T.alt y -40;
pos T.alt e -80;
pos T.alt g -80;
pos T.alt i -40;
pos T.alt j -60;
pos T.alt m -80;
pos T.alt n -80;
pos T.alt o -80;
pos T.alt r -80;
pos T.alt s -80;
pos T.alt u -80;
pos T.alt v -40;
pos T.alt w -40;
pos T.alt x -60;
pos T.alt A.alt -60;
pos T.alt J.alt -100;
pos T.alt a.alt -80;
pos T.alt c.alt -80;
pos T.alt e.alt -80;
pos T.alt g.alt -80;
pos T.alt i.alt -40;
pos T.alt j.alt -60;
pos T.alt m.alt -80;
pos T.alt n.alt -80;
pos T.alt o.alt -80;
pos T.alt r.alt -80;
pos T.alt s.alt -80;
pos T.alt u.alt -80;
pos T.alt v.alt -40;
pos T.alt w.alt -40;
pos T.alt x.alt -60;
pos T.alt y.alt -40;
pos T.alt z.alt -40;
pos T.alt ae -80;
pos T.alt oe -80;
pos T.alt oslash -80;
pos T.alt aacute -80;
pos T.alt agrave -80;
pos T.alt acircumflex -80;
pos T.alt adieresis -80;
pos T.alt atilde -80;
pos T.alt aring -80;
pos T.alt eacute -80;
pos T.alt egrave -80;
pos T.alt ecircumflex -80;
pos T.alt edieresis -80;
pos T.alt iacute -40;
pos T.alt igrave -40;
pos T.alt icircumflex -40;
pos T.alt idieresis -40;
pos T.alt oacute -80;
pos T.alt ograve -80;
pos T.alt ocircumflex -80;
pos T.alt odieresis -80;
pos T.alt otilde -80;
pos T.alt uacute -80;
pos T.alt ugrave -80;
pos T.alt ucircumflex -80;
pos T.alt udieresis -80;
pos T.alt Adieresis -60;
pos T.alt Aring -60;
pos T.alt Agrave -60;
pos T.alt Atilde -60;
pos T.alt Acircumflex -60;
pos T.alt Aacute -60;
pos T.alt ccedilla -80;
pos T.alt ntilde -80;
pos T.alt yacute -40;
pos T.alt ydieresis -40;
pos T.alt A -60;
pos V.alt J -80;
pos V.alt A.alt -50;
pos V.alt J.alt -80;
pos V.alt Adieresis -50;
pos V.alt Aring -50;
pos V.alt Agrave -50;
pos V.alt Atilde -50;
pos V.alt Acircumflex -50;
pos V.alt Aacute -50;
pos V.alt A -50;
pos W.alt J -60;
pos W.alt A.alt -30;
pos W.alt J.alt -60;
pos W.alt Adieresis -30;
pos W.alt Aring -30;
pos W.alt Agrave -30;
pos W.alt Atilde -30;
pos W.alt Acircumflex -30;
pos W.alt Aacute -30;
pos W.alt A -30;
pos Y.alt J -80;
pos Y.alt a -80;
pos Y.alt c -80;
pos Y.alt z -40;
pos Y.alt y -40;
pos Y.alt e -80;
pos Y.alt g -80;
pos Y.alt i -60;
pos Y.alt j -60;
pos Y.alt m -80;
pos Y.alt n -80;
pos Y.alt o -80;
pos Y.alt r -80;
pos Y.alt s -80;
pos Y.alt u -80;
pos Y.alt v -40;
pos Y.alt w -40;
pos Y.alt A.alt -60;
pos Y.alt J.alt -80;
pos Y.alt a.alt -80;
pos Y.alt c.alt -80;
pos Y.alt e.alt -80;
pos Y.alt g.alt -80;
pos Y.alt i.alt -60;
pos Y.alt j.alt -60;
pos Y.alt m.alt -80;
pos Y.alt n.alt -80;
pos Y.alt o.alt -80;
pos Y.alt r.alt -80;
pos Y.alt s.alt -80;
pos Y.alt u.alt -80;
pos Y.alt v.alt -40;
pos Y.alt w.alt -40;
pos Y.alt y.alt -40;
pos Y.alt z.alt -40;
pos Y.alt ae -80;
pos Y.alt oe -80;
pos Y.alt oslash -80;
pos Y.alt aacute -80;
pos Y.alt agrave -80;
pos Y.alt acircumflex -80;
pos Y.alt adieresis -80;
pos Y.alt atilde -80;
pos Y.alt aring -80;
pos Y.alt eacute -80;
pos Y.alt egrave -80;
pos Y.alt ecircumflex -80;
pos Y.alt edieresis -80;
pos Y.alt iacute -60;
pos Y.alt igrave -60;
pos Y.alt icircumflex -60;
pos Y.alt idieresis -60;
pos Y.alt oacute -80;
pos Y.alt ograve -80;
pos Y.alt ocircumflex -80;
pos Y.alt odieresis -80;
pos Y.alt otilde -80;
pos Y.alt uacute -80;
pos Y.alt ugrave -80;
pos Y.alt ucircumflex -80;
pos Y.alt udieresis -80;
pos Y.alt Adieresis -60;
pos Y.alt Aring -60;
pos Y.alt Agrave -60;
pos Y.alt Atilde -60;
pos Y.alt Acircumflex -60;
pos Y.alt Aacute -60;
pos Y.alt ccedilla -80;
pos Y.alt ntilde -80;
pos Y.alt yacute -40;
pos Y.alt ydieresis -40;
pos Y.alt A -60;
pos seven four -88;
pos seven two -33;
pos seven one -33;
pos four one -33;
pos Adieresis T -60;
pos Adieresis V -50;
pos Adieresis W -30;
pos Adieresis Y -60;
pos Adieresis T.alt -60;
pos Adieresis V.alt -50;
pos Adieresis W.alt -30;
pos Adieresis Y.alt -60;
pos Adieresis Yacute -60;
pos Adieresis Ydieresis -60;
pos Aring T -60;
pos Aring V -50;
pos Aring W -30;
pos Aring Y -60;
pos Aring T.alt -60;
pos Aring V.alt -50;
pos Aring W.alt -30;
pos Aring Y.alt -60;
pos Aring Yacute -60;
pos Aring Ydieresis -60;
pos Agrave T -60;
pos Agrave V -50;
pos Agrave W -30;
pos Agrave Y -60;
pos Agrave T.alt -60;
pos Agrave V.alt -50;
pos Agrave W.alt -30;
pos Agrave Y.alt -60;
pos Agrave Yacute -60;
pos Agrave Ydieresis -60;
pos Atilde T -60;
pos Atilde V -50;
pos Atilde W -30;
pos Atilde Y -60;
pos Atilde T.alt -60;
pos Atilde V.alt -50;
pos Atilde W.alt -30;
pos Atilde Y.alt -60;
pos Atilde Yacute -60;
pos Atilde Ydieresis -60;
pos Acircumflex T -60;
pos Acircumflex V -50;
pos Acircumflex W -30;
pos Acircumflex Y -60;
pos Acircumflex T.alt -60;
pos Acircumflex V.alt -50;
pos Acircumflex W.alt -30;
pos Acircumflex Y.alt -60;
pos Acircumflex Yacute -60;
pos Acircumflex Ydieresis -60;
pos Aacute T -60;
pos Aacute V -50;
pos Aacute W -30;
pos Aacute Y -60;
pos Aacute T.alt -60;
pos Aacute V.alt -50;
pos Aacute W.alt -30;
pos Aacute Y.alt -60;
pos Aacute Yacute -60;
pos Aacute Ydieresis -60;
pos Yacute J -80;
pos Yacute a -80;
pos Yacute c -80;
pos Yacute z -40;
pos Yacute y -40;
pos Yacute e -80;
pos Yacute g -80;
pos Yacute i -60;
pos Yacute j -60;
pos Yacute m -80;
pos Yacute n -80;
pos Yacute o -80;
pos Yacute r -80;
pos Yacute s -80;
pos Yacute u -80;
pos Yacute v -40;
pos Yacute w -40;
pos Yacute A.alt -60;
pos Yacute J.alt -80;
pos Yacute a.alt -80;
pos Yacute c.alt -80;
pos Yacute e.alt -80;
pos Yacute g.alt -80;
pos Yacute i.alt -60;
pos Yacute j.alt -60;
pos Yacute m.alt -80;
pos Yacute n.alt -80;
pos Yacute o.alt -80;
pos Yacute r.alt -80;
pos Yacute s.alt -80;
pos Yacute u.alt -80;
pos Yacute v.alt -40;
pos Yacute w.alt -40;
pos Yacute y.alt -40;
pos Yacute z.alt -40;
pos Yacute ae -80;
pos Yacute oe -80;
pos Yacute oslash -80;
pos Yacute aacute -80;
pos Yacute agrave -80;
pos Yacute acircumflex -80;
pos Yacute adieresis -80;
pos Yacute atilde -80;
pos Yacute aring -80;
pos Yacute eacute -80;
pos Yacute egrave -80;
pos Yacute ecircumflex -80;
pos Yacute edieresis -80;
pos Yacute iacute -60;
pos Yacute igrave -60;
pos Yacute icircumflex -60;
pos Yacute idieresis -60;
pos Yacute oacute -80;
pos Yacute ograve -80;
pos Yacute ocircumflex -80;
pos Yacute odieresis -80;
pos Yacute otilde -80;
pos Yacute uacute -80;
pos Yacute ugrave -80;
pos Yacute ucircumflex -80;
pos Yacute udieresis -80;
pos Yacute Adieresis -60;
pos Yacute Aring -60;
pos Yacute Agrave -60;
pos Yacute Atilde -60;
pos Yacute Acircumflex -60;
pos Yacute Aacute -60;
pos Yacute ccedilla -80;
pos Yacute ntilde -80;
pos Yacute yacute -40;
pos Yacute ydieresis -40;
pos Yacute A -60;
pos Ydieresis J -80;
pos Ydieresis a -80;
pos Ydieresis c -80;
pos Ydieresis z -40;
pos Ydieresis y -40;
pos Ydieresis e -80;
pos Ydieresis g -80;
pos Ydieresis i -60;
pos Ydieresis j -60;
pos Ydieresis m -80;
pos Ydieresis n -80;
pos Ydieresis o -80;
pos Ydieresis r -80;
pos Ydieresis s -80;
pos Ydieresis u -80;
pos Ydieresis v -40;
pos Ydieresis w -40;
pos Ydieresis A.alt -60;
pos Ydieresis J.alt -80;
pos Ydieresis a.alt -80;
pos Ydieresis c.alt -80;
pos Ydieresis e.alt -80;
pos Ydieresis g.alt -80;
pos Ydieresis i.alt -60;
pos Ydieresis j.alt -60;
pos Ydieresis m.alt -80;
pos Ydieresis n.alt -80;
pos Ydieresis o.alt -80;
pos Ydieresis r.alt -80;
pos Ydieresis s.alt -80;
pos Ydieresis u.alt -80;
pos Ydieresis v.alt -40;
pos Ydieresis w.alt -40;
pos Ydieresis y.alt -40;
pos Ydieresis z.alt -40;
pos Ydieresis ae -80;
pos Ydieresis oe -80;
pos Ydieresis oslash -80;
pos Ydieresis aacute -80;
pos Ydieresis agrave -80;
pos Ydieresis acircumflex -80;
pos Ydieresis adieresis -80;
pos Ydieresis atilde -80;
pos Ydieresis aring -80;
pos Ydieresis eacute -80;
pos Ydieresis egrave -80;
pos Ydieresis ecircumflex -80;
pos Ydieresis edieresis -80;
pos Ydieresis iacute -60;
pos Ydieresis igrave -60;
pos Ydieresis icircumflex -60;
pos Ydieresis idieresis -60;
pos Ydieresis oacute -80;
pos Ydieresis ograve -80;
pos Ydieresis ocircumflex -80;
pos Ydieresis odieresis -80;
pos Ydieresis otilde -80;
pos Ydieresis uacute -80;
pos Ydieresis ugrave -80;
pos Ydieresis ucircumflex -80;
pos Ydieresis udieresis -80;
pos Ydieresis Adieresis -60;
pos Ydieresis Aring -60;
pos Ydieresis Agrave -60;
pos Ydieresis Atilde -60;
pos Ydieresis Acircumflex -60;
pos Ydieresis Aacute -60;
pos Ydieresis ccedilla -80;
pos Ydieresis ntilde -80;
pos Ydieresis yacute -40;
pos Ydieresis ydieresis -40;
pos Ydieresis A -60;
pos A Q -33;
pos A S -33;
pos A T -66;
pos A V -50;
pos A W -30;
pos A Y -60;
pos A y -33;
pos A e -11;
pos A f -33;
pos A j -22;
pos A T.alt -60;
pos A V.alt -50;
pos A W.alt -30;
pos A Y.alt -60;
pos A Yacute -60;
pos A Ydieresis -60;
} kern0;
} kern;

feature calt { # Contextual Alternates
# Latin
sub exclam exclam' by exclam.alt;
sub exclam.alt exclam.alt' by exclam;
sub zero zero' by zero.alt;
sub one one' by one.alt;
sub two two' by two.alt;
sub three three' by three.alt;
sub four four' by four.alt;
sub five five' by five.alt;
sub six six' by six.alt;
sub seven seven' by seven.alt;
sub eight eight' by eight.alt;
sub nine nine' by nine.alt;
sub zero.alt zero.alt' by zero;
sub one.alt one.alt' by one;
sub two.alt two.alt' by two;
sub three.alt three.alt' by three;
sub four.alt four.alt' by four;
sub five.alt five.alt' by five;
sub six.alt six.alt' by six;
sub seven.alt seven.alt' by seven;
sub eight.alt eight.alt' by eight;
sub nine.alt nine.alt' by nine;
sub A.alt A.alt' by A;
sub a.alt a.alt' by a;
sub B.alt B.alt' by B;
sub b.alt b.alt' by b;
sub C.alt C.alt' by C;
sub c.alt c.alt' by c;
sub D.alt D.alt' by D;
sub d.alt d.alt' by d;
sub E.alt E.alt' by E;
sub e.alt e.alt' by e;
sub F.alt F.alt' by F;
sub f.alt f.alt' by f;
sub G.alt G.alt' by G;
sub g.alt g.alt' by g;
sub H.alt H.alt' by H;
sub h.alt h.alt' by h;
sub i.alt i.alt' by i;
sub J.alt J.alt' by J;
sub j.alt j.alt' by j;
sub K.alt K.alt' by K;
sub k.alt k.alt' by k;
sub L.alt L.alt' by L;
sub l.alt l.alt' by l;
sub M.alt M.alt' by M;
sub m.alt m.alt' by m;
sub N.alt N.alt' by N;
sub n.alt n.alt' by n;
sub O.alt O.alt' by O;
sub o.alt o.alt' by o;
sub P.alt P.alt' by P;
sub p.alt p.alt' by p;
sub Q.alt Q.alt' by Q;
sub q.alt q.alt' by q;
sub R.alt R.alt' by R;
sub r.alt r.alt' by r;
sub S.alt S.alt' by S;
sub s.alt s.alt' by s;
sub T.alt T.alt' by T;
sub t.alt t.alt' by t;
sub U.alt U.alt' by U;
sub u.alt u.alt' by u;
sub V.alt V.alt' by V;
sub v.alt v.alt' by v;
sub W.alt W.alt' by W;
sub w.alt w.alt' by w;
sub X.alt X.alt' by X;
sub x.alt x.alt' by x;
sub Y.alt Y.alt' by Y;
sub y.alt y.alt' by y;
sub Z.alt Z.alt' by Z;
sub z.alt z.alt' by z;
sub A A' by A.alt;
sub a a' by a.alt;
sub B B' by B.alt;
sub b b' by b.alt;
sub C C' by C.alt;
sub c c' by c.alt;
sub D D' by D.alt;
sub d d' by d.alt;
sub E E' by E.alt;
sub e e' by e.alt;
sub F F' by F.alt;
sub f f' by f.alt;
sub G G' by G.alt;
sub g g' by g.alt;
sub H H' by H.alt;
sub h h' by h.alt;
sub i i' by i.alt;
sub J J' by J.alt;
sub j j' by j.alt;
sub K K' by K.alt;
sub k k' by k.alt;
sub L L' by L.alt;
sub l l' by l.alt;
sub M M' by M.alt;
sub m m' by m.alt;
sub N N' by N.alt;
sub n n' by n.alt;
sub O O' by O.alt;
sub o o' by o.alt;
sub P P' by P.alt;
sub p p' by p.alt;
sub Q Q' by Q.alt;
sub q q' by q.alt;
sub R R' by R.alt;
sub r r' by r.alt;
sub S S' by S.alt;
sub s s' by s.alt;
sub T T' by T.alt;
sub t t' by t.alt;
sub U U' by U.alt;
sub u u' by u.alt;
sub V V' by V.alt;
sub v v' by v.alt;
sub W W' by W.alt;
sub w w' by w.alt;
sub X X' by X.alt;
sub x x' by x.alt;
sub Y Y' by Y.alt;
sub y y' by y.alt;
sub Z Z' by Z.alt;
sub z z' by z.alt;
} calt;

feature salt { # Stylistic Alternates
# Latin
sub exclam exclam' by exclam.alt;
sub exclam.alt exclam.alt' by exclam;
sub zero zero' by zero.alt;
sub one one' by one.alt;
sub two two' by two.alt;
sub three three' by three.alt;
sub four four' by four.alt;
sub five five' by five.alt;
sub six six' by six.alt;
sub seven seven' by seven.alt;
sub eight eight' by eight.alt;
sub nine nine' by nine.alt;
sub zero.alt zero.alt' by zero;
sub one.alt one.alt' by one;
sub two.alt two.alt' by two;
sub three.alt three.alt' by three;
sub four.alt four.alt' by four;
sub five.alt five.alt' by five;
sub six.alt six.alt' by six;
sub seven.alt seven.alt' by seven;
sub eight.alt eight.alt' by eight;
sub nine.alt nine.alt' by nine;
sub A.alt A.alt' by A;
sub a.alt a.alt' by a;
sub B.alt B.alt' by B;
sub b.alt b.alt' by b;
sub C.alt C.alt' by C;
sub c.alt c.alt' by c;
sub D.alt D.alt' by D;
sub d.alt d.alt' by d;
sub E.alt E.alt' by E;
sub e.alt e.alt' by e;
sub F.alt F.alt' by F;
sub f.alt f.alt' by f;
sub G.alt G.alt' by G;
sub g.alt g.alt' by g;
sub H.alt H.alt' by H;
sub h.alt h.alt' by h;
sub i.alt i.alt' by i;
sub J.alt J.alt' by J;
sub j.alt j.alt' by j;
sub K.alt K.alt' by K;
sub k.alt k.alt' by k;
sub L.alt L.alt' by L;
sub l.alt l.alt' by l;
sub M.alt M.alt' by M;
sub m.alt m.alt' by m;
sub N.alt N.alt' by N;
sub n.alt n.alt' by n;
sub O.alt O.alt' by O;
sub o.alt o.alt' by o;
sub P.alt P.alt' by P;
sub p.alt p.alt' by p;
sub Q.alt Q.alt' by Q;
sub q.alt q.alt' by q;
sub R.alt R.alt' by R;
sub r.alt r.alt' by r;
sub S.alt S.alt' by S;
sub s.alt s.alt' by s;
sub T.alt T.alt' by T;
sub t.alt t.alt' by t;
sub U.alt U.alt' by U;
sub u.alt u.alt' by u;
sub V.alt V.alt' by V;
sub v.alt v.alt' by v;
sub W.alt W.alt' by W;
sub w.alt w.alt' by w;
sub X.alt X.alt' by X;
sub x.alt x.alt' by x;
sub Y.alt Y.alt' by Y;
sub y.alt y.alt' by y;
sub Z.alt Z.alt' by Z;
sub z.alt z.alt' by z;
sub A A' by A.alt;
sub a a' by a.alt;
sub B B' by B.alt;
sub b b' by b.alt;
sub C C' by C.alt;
sub c c' by c.alt;
sub D D' by D.alt;
sub d d' by d.alt;
sub E E' by E.alt;
sub e e' by e.alt;
sub F F' by F.alt;
sub f f' by f.alt;
sub G G' by G.alt;
sub g g' by g.alt;
sub H H' by H.alt;
sub h h' by h.alt;
sub i i' by i.alt;
sub J J' by J.alt;
sub j j' by j.alt;
sub K K' by K.alt;
sub k k' by k.alt;
sub L L' by L.alt;
sub l l' by l.alt;
sub M M' by M.alt;
sub m m' by m.alt;
sub N N' by N.alt;
sub n n' by n.alt;
sub O O' by O.alt;
sub o o' by o.alt;
sub P P' by P.alt;
sub p p' by p.alt;
sub Q Q' by Q.alt;
sub q q' by q.alt;
sub R R' by R.alt;
sub r r' by r.alt;
sub S S' by S.alt;
sub s s' by s.alt;
sub T T' by T.alt;
sub t t' by t.alt;
sub U U' by U.alt;
sub u u' by u.alt;
sub V V' by V.alt;
sub v v' by v.alt;
sub W W' by W.alt;
sub w w' by w.alt;
sub X X' by X.alt;
sub x x' by x.alt;
sub Y Y' by Y.alt;
sub y y' by y.alt;
sub Z Z' by Z.alt;
sub z z' by z.alt;
} salt;

dezcom's picture

I think you need to tidy that up with OTF classes. You can create a class for all similar substitutions in one that represents @state1 then nearly identical class with all of your ".alts" in exactly the same order and number called @state2 (or whatever name you choose for the classes).

Also, you may be making the same substitution in 2 different features.
{calt} is on by default and may take precedent over later features. You have to be very careful of the order you place not only your features with each other but which sub comes first in your string of code.

TOM-MLL's picture

So are you saying, instead of using calt and salt, maybe call them something else like swapA, swapB, then initiate those in the aalt code? Like this:

feature aalt{
feature swapA;
feature swapB;
} aalt;

TOM-MLL's picture

btw, I have two classes now for the OT settings.

http://grab.by/7CE0
http://grab.by/7CDY

TOM-MLL's picture

Ok, I found the issue. This was developed by former team member, so I am sorting debugging this from the wild. It seems they way over thought this, with double letters, coding the feature twice, and yes as mentioned above, I think it was overwriting the command with double actions (normal to alt, alt to normal). Also seems the code was kinda wrong, they had:

sub w w' by w.alt;

when it should have been

sub w by w.alt;

----
I removed the salt code, and aalt code, and left the calt:

feature calt {
sub A by A.alt;
sub a by a.alt;
sub B by B.alt;
sub b by b.alt;
sub C by C.alt;
sub c by c.alt;
sub D by D.alt;
sub d by d.alt;
sub E by E.alt;
sub e by e.alt;
sub F by F.alt;
sub f by f.alt;
sub G by G.alt;
sub g by g.alt;
sub H by H.alt;
sub h by h.alt;
sub i by i.alt;
sub J by J.alt;
sub j by j.alt;
sub K by K.alt;
sub k by k.alt;
sub L by L.alt;
sub l by l.alt;
sub M by M.alt;
sub m by m.alt;
sub N by N.alt;
sub n by n.alt;
sub O by O.alt;
sub o by o.alt;
sub P by P.alt;
sub p by p.alt;
sub Q by Q.alt;
sub q by q.alt;
sub R by R.alt;
sub r by r.alt;
sub S by S.alt;
sub s by s.alt;
sub T by T.alt;
sub t by t.alt;
sub U by U.alt;
sub u by u.alt;
sub V by V.alt;
sub v by v.alt;
sub W by W.alt;
sub w by w.alt;
sub X by X.alt;
sub x by x.alt;
sub Y by Y.alt;
sub y by y.alt;
sub Z by Z.alt;
sub z by z.alt;
sub zero by zero.alt;
sub one by one.alt;
sub two by two.alt;
sub three by three.alt;
sub four by four.alt;
sub five by five.alt;
sub six by six.alt;
sub seven by seven.alt;
sub eight by eight.alt;
sub nine by nine.alt;
sub exclam by exclam.alt;
sub question by question.alt;
} calt;

dezcom's picture

Here are 2 classes I made from your code. The class name is followed by a colon and then the list of glyphs in the separated class by a single space --

swap1: A a B b C c D d E e eight exclam F f five four G g H h i J j K k L l M m N n nine O o one P p Q q question R r S s seven six T t three two U u V v W w X x Y y Z z zero

swap2: A.alt a.alt B.alt b.alt C.alt c.alt D.alt d.alt E.alt e.alt eight.alt exclam.alt F.alt f.alt five.alt four.alt G.alt g.alt H.alt h.alt i.alt J.alt j.alt K.alt k.alt L.alt l.alt M.alt m.alt N.alt n.alt nine.alt O.alt o.alt one.alt P.alt p.alt Q.alt q.alt question.alt R.alt r.alt S.alt s.alt seven.alt six.alt T.alt t.alt three.alt two.alt U.alt u.alt V.alt v.alt W.alt w.alt X.alt x.alt Y.alt y.alt Z.alt z.alt zero.alt

After you make those 2 classes, your feature code for this one feature is simply:

feature salt { # Stylistic alternates
# Latin
sub @swap1 by @swap2;
} salt;

agisaak's picture

Ok, I found the issue. This was developed by former team member, so I am sorting debugging this from the wild. It seems they way over thought this, with double letters, coding the feature twice, and yes as mentioned above, I think it was overwriting the command with double actions (normal to alt, alt to normal). Also seems the code was kinda wrong, they had:

sub w w' by w.alt;

when it should have been

sub w by w.alt;

I'm not clear what your substitutions are trying to do, but since you say you've left only the 'calt' feature it seems like the original developers probably had the former rather than the latter line of code (quoted above) in mind.

   sub w w' by w.alt;

will substitute a w by w.alt when it follows another w (and if you have a bunch of w's in a row it will affect every second one).

    sub w by w.alt;

on the other hand, will substitute any w with w.alt.

If you really intend it to be the latter rather than the former then you probably don't want this substitution to appear in the 'calt' feature, but rather in a stylistic set ('ss01' - 'ss20') or, possibly, in 'salt'. What is the nature of the alternate glyphs?

Also, features aren't initiated in 'aalt' -- 'aalt' is a distinct feature (access all alternates) which is responsible (for example) for mapping glyphs to their available alternates in the glyph palette.

André

TOM-MLL's picture

Yeah, i added it into the salt area, mentioned wrong thing there. While the original designer might have wanted the alternate to show up in double letter combos, it seems that code also made hitting the salt option button in AI not work. I prefer to have that work more than the glyph window. options.

Syndicate content Syndicate content