Maybe this should be asked directly from Adobe, but this might interest on OpenType designers generally.
Simple question: what rules different InDesign versions apply for automatic decomposing/composing of base glyph + combining diacritics?
I just fought with OpenType font, that contain quite large chaining contextual substitutions for placing proper alternative forms of diacritics by base letters and other diacritics. You'll see in this picture e.g. in blue color some different variants of combining acute accent [U+0301]:
http://www.jltypes.com/Uvallanne/Malli_1.jpgAll alternatives are handled by glyph classes and contextual substitution rules made on FontLab Studio 5.0.4.
Everything worked fine on the best OpenType aware program Mellel. But on InDesign CS3 couple glyphs did not work well. If on the ID CS3 document there was l (U+006C) + [U+0301] or k (U+006B) + [U+0301], this font did not showed those glyph combinations, which are determined on font's OT features. E.g. l and U+0301 should show the base glyph for l and variant [uni0301.alt12], which you see in that picture after the letter l. Instead the poor ID CS3 had chosen automatically the glyph for "lacute" (U+013A), which looks quite different in this font. The same occurred with k and U+013A, which showed the glyph "uni1E31" i.e. for U+1E31.
I was quite upset, because I though that I had made some mistakes on glyph classes or GSUB features. I looked my code and did not find any mistakes. Also FontLab Studio's Preview Panel has always showed proper OT features faithfully. Then I opened my OT-font file on FontForge and regenerated OTF-font using it. Result was the same: Everything was OK on Mellel but those same couple glyphs failed on ID CS3. Then I picked my old faithful PowerBook Pismo, where is still Mac OS 10.4 and old Indesign 2.0 (not CS 2!) and tested my font. On ID 2.0 everything was OK and completely identical with Mellel's output.
So I was confident, that ID CS3 was making it's own - in this case poor - decisions. When I put something garbage on glyphs " lacute" and "uni1E31" and generated OT-fonts I saw on ID CS3 this same garbage instead of l (U+006C) + [U+0301] or k (U+006B) + [U+0301].
I did so, that I reshaped the base glyphs for lacute and uni1E31, but generated new variants lacute.alt01 and uni1E31.alt01, which are only triggered, if the language is Czech or Slovak. In this case only lacute would be enough. Now the font work OK also on ID CS3, but is "hacked" on a very stupid way. I shame it.
If InDesign and other Adobe's application are automatically composing glyphs, also other font developers might be harmed, if the rules for glyph composing are not known. Dear Adobe, is there anywhere information available about glyph handling on Adobe's different CS product? It is hard to fight against ghost and study case by case, which glyph combinations are substituted and which are not.
[If you look at the linked picture, you'll easily find out, why I prefer GSUB instead of theoretically possible GPOS (maybe this would not work all): the accent shape and size alters on different contexts.]