Because of the lack of clear tutorial materials for FontCreator, I’m close to giving up and asking for my money back. Volt is more complicated, but at least the tutorials are better. I’m trying to get the font to do a simple substitution as follows:
sub _288 uni0651 → _663;
Please see the attached FontCreator File. Glyph _663 is the last glyph.
I hope that you can appreciate that since I have no knowledge of Arabic, my answer may not make sense:
I see these lines in your script, which compiles successfully:
lookup Ligature3 {
lookupflags IgnoreMarks;
Referenced by feature “RequiredLigatures1”
sub _166 _4 → _288;
sub _167 _4 → _289;
sub _288 uni0651 → _663;
uni0651 is mapped to Arabic shadda ($0651) so you can type that.
However, the glyph _288 is not mapped to any code point, so how can you type it?
Before any program can make a glyph substitution the user must type the two glyphs in the defined order: first _288, then uni0651. The GSUB script will then replace the pair with _663, but that will only happen if the application that you’re using supports the OpenType features used — in this case RequiredLigatures.
You didn’t answer the question asked in your previous thread. How are you testing your fonts?
Thank you for answering. The _663 glyph actually has several substitutions going on. At first I tried the following:
sub uni0644 uni0627 uni0651 → _663;
The first glyph (uni0644) is an isolated “Lam”
The second glyph (uni0627) is an isolated “Alef”
The third glyph (uni0651) is an Arabic diacritical mark called “Shedda.”
Typed together they should give _663. They don’t. I think the problem is that earlier in the glyph substitution tables uni0644 and uni0627 are substituted for other glyphs, notably _166 and _4. Arabic is a contexualized language with isolated, medial and final forms.
I’m testing the font our in Adobe InDesign CC, the latest version. It supports RequiredLigatures. Other substitution strings in the same feature are working just fine.
It is important to make the substitutions in the right order.
For example:
If I have:
sub f f → ff;
sub f f i → ffi;
Then typing ffi will never produce the ffi ligature because the first substitution will always be made first on typing ff.
I must write:
sub f f i → ffi;
sub f f → ff;
I don’t think there is any easy solution. Writing code is difficult, whether you do it in VOLT or in FontCreator’s Layout Feature editor. It’s an exercise in logic, and is unforgiving of the slightest mistakes. At least the compile feature tells you if the syntax is wrong.
I never even got started with VOLT, but used the OpenType compiler first, which is very similar to what FontCreator does now. I suggest that naming your glyphs with meaningful names would make editing the scripts much easier, e.g. you could name “uni0644” as “isolated_Lam” and change the script accordingly.
Probably not related, but I’ve once heard some software had a bug which prevented to show/use the last glyph. So could you add another glyph to your font, and see if that helps?
If not, do send me more information, as I’m convinced we can solve the issue!