Typophile

How do I replace end characters in an OpenType script typeface?

Nick Cooke

I'm making an OpenType handwriting font for a client, so all characters have long lead-out strokes to flow nicely into the next character. However, the client doesn't want these long strokes at the end of every word. So I'm wondering how I can replace the regular characters (eg. y) by end characters (eg. y_end), so in the word 'every' only the y would change. I've looked through the needle-in-a-haystack manual with no luck. How does one specify just the last letter of each word to change to an alternate form?

Any help would be much appreciated.

Make a ligature?
y + space = y.end
y + period = y

Use the contextual alternates. Below is an example with a terminal "f". Note you should use the "period" construction, as in "y.terminal", not a ligature (underline) construction as in "y_end".

feature calt { # Connection Forms
# Latin
sub f' space by f.terminal;
} calt;

i prefer using the ignore function to do this type of thing:

http://typophile.com/node/19839

in particular, look at karsten's post of 17 May 2006.

Paul, as I read it

so all characters have long lead-out strokes

There is nothing to "ignore." He will have to make up terminals. If I've read it wrong, then yes, that would work.

There is nothing to “ignore.”

sure there is, what the solution that i've linked to does is replace every letter with the final form unless it is followed by a letter: in these instances, the substitution rule is ignored. i think this is a better solution, because the ending forms are determined by the word boundary and not by the presence or absence of the space character.

Another option is to use 'fina' and other positional forms - newly supported in InDesign CS3, though not in anything else so far.

T

thomas, what would be the best way to begin implementing the 'fina' feature?

Note that the 'fina' feature is on by default and in some applications may be impossible to turn off, so you only want to use it if the substitutions should always happen. 'fina' feature support presumes character level analysis by the layout engine, so you don't need any context for it. The layout engine identifies the circumstances in which the substitution should occur and applies the feature.

If using the 'calt' feature, I second Paul's suggestion to use the ignore syntax or, in VOLT, the EXCEPT syntax:

f -> f.terminal
EXCEPT |

Thanks for the replies, it's a great help - so much better than wasting hours on the manual.

Nick Cooke

Captured from web.archive.org on 18 Apr 2015. view this capture