Opentype Contextual glyph replacement

Eben Sorkin
18.Oct.2005 11.49am
Eben Sorkin's picture

Has anybody done this yet? Contextual replacement in OpenType using Kerning as the context.

I would like to offer a version of my font Army Pool Tiles ( which has kerning pairs ) in a reverse mode. Originally I thought I could just reverse the tiles but then I found I was getting unacceptable overlaps and gaps when the kerning was used ( suprise suprise) - so I need to create context dependent alternatives that fit correctly for the reverse font/s.

Has anybody here done this?

I am also just starting to learn this aspect of Fontlab. Does anybody have opinions about if it is better to code for contextual substitution in fontlab or with some 3rd part tool?

******
Update. I added an image which shows the kerning result. What the blue highlight is showing is the area I am concerned with in a reverse version of my font. In a reverse version the blue area would be mostly filled with tiles. When I apply a kern between the ’V’ & ’a’, the ’a’ comes closer to the ’V’. Without substitution part of the V would be overlapped. What I plan to do is create an ’a’ which has it’s first line of tiles removed to substitute in when it occurs after ’V’ (and some other glyphs). I have 298 pairs total.

If I get this working I will show the results.

AttachmentSize
example.jpg32.9 KB


paul d hunt
18.Oct.2005 12.16pm
paul d hunt's picture

i’m confused... can you make your meaning a bit clearer. (for dummies like me)


John Hudson
18.Oct.2005 12.16pm
John Hudson's picture

You can’t use kerning per se as the context, i.e. there is no way to change whether a lookup is applied depending on whether or not kerning is active, but you can certainly substitute special glyphs to resolve spacing issues. I’m doing this in one of my current projects: I have special glyphs of some lowercase letters to use after g and r, so that they don’t collide.


sii
18.Oct.2005 2.04pm
sii's picture

I think Cambria uses a special ’f’ when placed next to ’i’ instead of a traditional ligature.

Cheers, Si


dezcom
18.Oct.2005 2.36pm
dezcom's picture

I am attempting to use a special “r” when next to “i” in a typeface I am working on. That part works fine. The problem I am having is when I get a double r next to an i. I can’t get the script to compile. I want to get 2 alternnate r’s next to the i but instead I get two different kinds of r. Anybody have any ideas why? The font is in the Critique section here:
http://typophile.com/node/15626

ChrisL


Eben Sorkin
18.Oct.2005 4.04pm
Eben Sorkin's picture

Aha! So you guys are doing this!

Sorry Paul, I am sure the fault is with my explanation. I will post an visual example of why I want to do this - the best way no doubt.

John, I didn’t think I could get the font’s kerning table to talk to the replacement engine in open type - but I can look at my kerning table & see where I might want to make substitutions and then make them based on context ( V next to a or A) etc.

Chris, & John: You are using Fontlab to make your substitution scripts right?


dezcom
18.Oct.2005 4.50pm
dezcom's picture

Eben,
I am using FontLab 4.6 on a Mac. I am not an expert by any means. I am just plodding through the opentype resourse PDFs available from Adobe and Microsoft. John Hudson and Thomas Phinney are very good resources though.

ChrisL


John Hudson
18.Oct.2005 6.18pm
John Hudson's picture

Eben, no, I’m not using FontLab for my substitutions. I do all my OpenType Layout work in MS VOLT.


Eben Sorkin
19.Oct.2005 1.16am
Eben Sorkin's picture

How did each of you decide? MS Volt is windows only right?


johnbutler
19.Oct.2005 3.43am
johnbutler's picture

Eben, I use FontLab for my own substitutions. VOLT is more powerful and definitely worth learning if you have access to a Windows machine. (Which you also want anyway because FontLab Studio 5 is Windows-only so far, and because soon you’ll want to test OpenType font behavior in Avalon applications.) I have not learned VOLT yet because I don’t do complex script type design. (Yet.) Er, and because I’m sorta lazy.

OpenType is supposed to have contextual kerning at some point in the future. At present, only Graphite can do that. So far Graphite is only used in a limited range of applications.


Eben Sorkin
19.Oct.2005 2.56pm
Eben Sorkin's picture

Update ^ up top.


dezcom
19.Oct.2005 3.13pm
dezcom's picture

Eben,
I use a Mac so VOLT is not an option. I am more of a visual person and VOLT may be more geeky than I want albeit very powerful.

ChrisL


dezcom
19.Oct.2005 3.21pm
dezcom's picture

Eben,
If you can define your context as a particular glyph following a particular glyph or glyphs, it should work fine. The substitution won’t be due to a degree of kerning but the pairing of stated glyphs in sequence.
In my case, I am subing r when it precedes i or j. Here is my script:

feature calt { # contextual alternate
sub r’ [i j] by r.alt;
} calt;

ChrisL


Eben Sorkin
19.Oct.2005 5.01pm
Eben Sorkin's picture

Wow. Thats cool. Very cool.

Actually making the *preceding* character change seems X-TRA cool!

Do you know if there are web pages which offer example code so I can start to deduce what is going on in the code? And maybe make off with some that is relevant too? For some reson I get MEGO when I read directions meant for programmers. But I can code CSS & HTML just fine because I can look at the code & look at what it makes & make the intuitive leap. This probably means I won’t be coding javascript but maybe I can manage some Opentype code with time. It doesn’t look too hairy.

I did find this example from Adam Twardoch @ fontlab’s MSN help site:

feature calt {
sub n o’ by o.calt1;
sub b o’ by o.calt2;
} calt;

It is for ’The first substitutions means: if the “o” glyph is preceded by “n”, substitute the “o” with the “o.calt1” glyph. The second means: if the “o” glyph is preceded by “b”, substitute the “o” with “o.calt2” ’.

So... I think I could maybe say:

feature calt {
sub V a’ by a.calt1;
} calt;

And as long as I have a glyph named ’a.calt1’ then it should work.

Does anybody know what apps support what open type ’calls’ now (eg. ’calt’) - or is there a master list somewhere? I imagine that ’calt’ is a basic call supported by all apps that support open type - but is this right?


dezcom
19.Oct.2005 6.09pm
dezcom's picture

Right now the Adobe apps but more will come next year. Microsoft maybe 2007.

You might look at the .fea files of sample fonts from FontLab or peak at the Opentype window of the font to see coded features.

ChrisL


johnbutler
20.Oct.2005 9.19am
johnbutler's picture

The freeware AbiWord activates contextual alternates automatically in Windows XP Service Pack 2, once you go into international settings and turn on complex script support.

On Mac OS X, the inexpensive Mellel supports contextual alternates plus a number of other OpenType features.


Miss Tiffany
20.Oct.2005 9.57am
Miss Tiffany's picture

short sidebar:

Dez said: “more geeky”.

I question that. At what point is working with scripting less geeky in general?

;^)

as you were.


paul d hunt
20.Oct.2005 10.28am
paul d hunt's picture

Do you know if there are web pages which offer example code so I can start to deduce what is going on in the code? And maybe make off with some that is relevant too?

I started a bit of a OpenType crash course in the wiki at OT_How-To. There it links to some sample code from Adobe that you can look at and learn from.


dezcom
20.Oct.2005 12.58pm
dezcom's picture

“I question that. At what point is working with scripting less geeky in general?”

When you are not working in a text editor :-)

ChrisL


dezcom
20.Oct.2005 3.42pm
dezcom's picture

”...The problem I am having is when I get a double r next to an i. I can’t get the script to compile. I want to get 2 alternnate r’s next to the i but instead I get two different kinds of r. Anybody have any ideas why? ...”

KUDOS to Paul Hunt for helping me with this one! It is now working fine thanks to Paul showing me the proper placement of the single quote and space.

ChrisL


Thomas Phinney
20.Oct.2005 7.47pm
Thomas Phinney's picture

Ah, I’m late to the party, I see.

I’ve posted some unusual code examples of contextual substitutions on the Adobe User Forum for our OpenType FDK (same code works in FontLab, too).
http://www.adobeforums.com/OpenType%20Font%20Developers%27%20Kit%20(FDK)/160

I’m also working on an article on contextual subs for my blog. I’ll let you know when it’s up.

Cheers,

T


Eben Sorkin
20.Oct.2005 8.13pm
Eben Sorkin's picture

Awesome.

I end up grabbing the .AFM from a postsctipt version of my Font to get a complete pair listing. Then I massaged the text in preperation for merging it with the ’Calt’ function set.

I noticed that I ma going to want to substitute both glyphs in a character pair in one case

I was wondering how this code looks to ’yall.

The pair is: F J

feature calt { #
sub F’ J’ by F.calt3 J.calt3;
} calt;

Also, The code that Chris showed us uses this phrase : [ij]

Is that bracket set effectively saying ’including’?

Is so, can you transalte this:

feature calt {
sub n o’ by o.calt1;
sub b o’ by o.calt1;
} calt;

(Meaning: if you have ’no’ or ’bo’ sub the o to the glyph o.calt1)

to this:

feature calt {
sub [n b] o’ by o.calt1;
} calt;

?

Thanks!


John Hudson
20.Oct.2005 9.40pm
John Hudson's picture

John Butler: OpenType is supposed to have contextual kerning at some point in the future. At present, only Graphite can do that.

I don’t think this is accurate, unless you are thinking of contextual kerning in some different sense. I do contextual kerning lookups for Arabic OpenType pretty regularly, e.g. adjusting the kerning between two letters when a mark on the second provides context. As far as I know, this is one of the things that you need to use VOLT for, as the Adobe FDK code used by FontLab doesn’t support contextual GPOS.

Eben, the main reason I use VOLT for all my OT stuff is that it is much more powerful than what FontLab has available: it supports a wider range of lookup types, including the GPOS mark positioning that I need in most of my projects.


John Hudson
20.Oct.2005 9.43pm
John Hudson's picture

Chris Lozos: I use a Mac so VOLT is not an option. I am more of a visual person and VOLT may be more geeky than I want albeit very powerful.

Ironically, one of the things I like about VOLT is that it is more visual than FontLab. You can see the input and output for every lookup directly in the lookup window as you are working.


Eben Sorkin
20.Oct.2005 11.28pm
Eben Sorkin's picture

Hmmm That sounds like a ringing endorsement to me!


johnbutler
21.Oct.2005 4.52am
johnbutler's picture

I don’t think this is accurate, unless you are thinking of contextual kerning in some different sense. I do contextual kerning lookups for Arabic OpenType pretty regularly, e.g. adjusting the kerning between two letters when a mark on the second provides context. As far as I know, this is one of the things that you need to use VOLT for, as the Adobe FDK code used by FontLab doesn’t support contextual GPOS.

I’m talking about Latin script fonts as rendered in the applications used by most Latin-script OT font buyers by a wide margin.


Eben Sorkin
21.Oct.2005 1.11pm
Eben Sorkin's picture

I found a way of doing a two letter calt switch.

Example ’FJ’ I want altrenate glyphs for both F & J in this case

here is how I did it.

sub F’ J by F.calt3;
sub F.calt3 J’ by J.calt1;

originally I had tried

sub F’ J’ by F.calt3 J.calt1;

but that didn’t work.


.
21.Oct.2005 2.06pm
.'s picture

Eben, the F’ J’ sub was never going to work, as the ’ means “in this contect, change this one”, and having two of them goes against the syntax. Doing it as two lines is definitely the right way, and you’ll have to make sure that the F’ J comes before the F.alt J’ in the feature.


dezcom
21.Oct.2005 2.27pm
dezcom's picture

“Ironically, one of the things I like about VOLT is that it is more visual than FontLab. You can see the input and output for every lookup directly in the lookup window as you are working.”

So John, anyone plan to port that puppy to the Mac :-)
My fontLab is acting freaky lately, everytime I close and reopen a file, the five features get all jumbled and strung out as one entry. I have to re-build my features everytime I open a file. My .fea files seem to have vanished too. Maybe it is just Adam messing with my mind:-)
ChrisL


dezcom
21.Oct.2005 2.29pm
dezcom's picture

“http://www.adobeforums.com/OpenType%20Font%20Developers%27%20Kit%20(FDK)/160”

Hi Thomas, welcome to the frey. I am going to look at your site as soon as I can decifer your URL :-)

ChrisL


Eben Sorkin
21.Oct.2005 4.10pm
Eben Sorkin's picture

The URL looks like that because it is on a mac I think. The % signs are directories like / are more usually. It does go somewhere - but somewhere needing a password... for now.


Mark Simonson
21.Oct.2005 4.15pm
Mark Simonson's picture

The % signs indicate a character that would not normally be allowed in a URL. %20 is a space; %27 is a single quote. Nothing to do with Macs, I don’t think.


Eben Sorkin
21.Oct.2005 5.55pm
Eben Sorkin's picture

It seemed like for a while when people were serving web pages from macs the directories were separated by % signs too. I think when macs went unix/osx this went away but I am not sure...

Now I am curious! Mark, How did you find out about the %20?


dezcom
21.Oct.2005 7.41pm
dezcom's picture

Mac users for many years could use space characters in their file names. When they started naming web pages and directories, the space habit was still there, Web servers replaced spaces with %20 because spaces are a no-no in URLs. Mac users have since learned not to use spaces in their URLs and that is why you don’t see it anymore. It had nothing to do with OS-X. Iknew about %20 for years but didn’y know about %27 ’til Mark’s post tonight.
I was joking with Thomas by the way.

ChrisL


Mark Simonson
21.Oct.2005 10.40pm
Mark Simonson's picture

The % thing is a Unix thing. It indicates that a character code (in hexadecimal) will follow. It’s like an escape character. Every programming and scripting language has something like it. In Javascript, it’s the backslash.


Eben Sorkin
21.Oct.2005 11.23pm
Eben Sorkin's picture

“Curiouser and curiouser!” Cried Alice


Thomas Phinney
22.Oct.2005 1.08pm
Thomas Phinney's picture

Note that you can do many-to-one subs (contextually or not), or one-to-many, it’s just many-to-many that’s not supported. However, you can usually get equivalent results by doing one or both of the other two.

T


John Hudson
22.Oct.2005 1.16pm
John Hudson's picture

John Butler: I’m talking about Latin script fonts as rendered in the applications used by most Latin-script OT font buyers by a wide margin.

Ah, understood. From the way you stated it originally, it sounded like a limitation of OpenType, rather than a limitation of applications and font some development tools.


John Hudson
22.Oct.2005 1.18pm
John Hudson's picture

Tom Phinney: Note that you can do many-to-one subs (contextually or not), or one-to-many...

In FDK? As far as I know, one-to-many (type 2 GSUB lookups) are not still supported in FDK/FontLab, although it is a long time since I tried it.


Thomas Phinney
22.Oct.2005 1.23pm
Thomas Phinney's picture

John H: You’re probably right that Type 2 lookups aren’t currently supported in the FDK and FontLab. If so, it should be fixed in another two FDK releases, some time next summer.

(UPDATE: more likely spring 2007)

T


Eben Sorkin
24.Oct.2005 1.24pm
Eben Sorkin's picture

I have figured out how to do this

sub [Yacute F T V X Y f florin] a’ by a.calt1;

This let’s me change my ’a’ glyph to ’a.calt1’ if it is preceded by Yacute ’F T V X Y f’ or ’florin’

Which is great. I should be able to get the list down to a somewhat more manageable size and find and edit errors/omissions more easily now.

Speaking of which - I had started to think that it might not be a bad idea to look at the .afm of a similar font to see what pairs are being kerned. I found my original kerning info was best accessed in my own .afm file. Since my face is modular but not a monospace it ends up having a slightly different set of kerning needs than is typical. I am not sure what font I would look to.

Any suggestions?

Also, Does anybody have any suggestions on how to organize the calt code further? Any common traps to avoid?

Any favorite pairs?

And last but certainly not least: Now that I have created 30 or so altrenates glyphs I need to figure out the best way to test them in pairs - especially where they precede another glyph. So for instance I need to include F.calt3 in my ’a’ lists like this:

sub [Yacute F F.calt3 T V X Y f florin] a’ by a.calt1;

Any suggestions on managing this kind of echo effect in the code?


Henyk
25.Oct.2005 7.14am
Henyk's picture

> sub F’ J’ by F.calt3 J.calt1;
> but that didn’t work.

You may try next code:

feature clig {
sub @anyletter F’ J’ by FJ.clig;
} clig;

where
@anyletter — special class contains all letters
FJ.clig — specially prepared ligature

or more simple, as usual “ligature”

It really works, tested with electronics! ;)))


Mark Simonson
25.Oct.2005 7.45am
Mark Simonson's picture

Why not just do it as a simple liga feature:

feature liga {
sub F J by F_J;
} liga;

where F_J is your ligature.

Seems like a lot of unnecessary trouble to use clig for it.


Eben Sorkin
25.Oct.2005 8.59am
Eben Sorkin's picture

I think I understand liga already - but I don’t know what clig does yet. I will have to dig into the code references again. Thanks for the examples! Looking into it I found that one good reason to go with Liga aside from simplicity is that it is more broadly supported

http://www.typotheque.com/fonts/opentype_feature_support/

Simon, Thomas, what code have you eneded up using the most? Liga? There are tons of code ellements out there but for roman type at least it seems like 3-4 bits would be good for up 98% of the time. This idea of mine is admittedly naive - but is it wrong?

Also, I see that the code I have been using ’calt’ is not supported as widely as Liga. Maybe I aught to reverse course & use liga for all my combinations. It would make for fewer altrnate glyphs - thats for sure!

Henadij, Which ones do you use & why?


hrant
25.Oct.2005 9.03am
hrant's picture

Man, it’s riveting to see my childhood friend Code
so tangibly showing up in a typographic forum...

hhp


Eben Sorkin
25.Oct.2005 9.45am
Eben Sorkin's picture

Does VOLT help you track/manage combinations? Fontlab is great at lots of things but tracking kerns & Opentype code - and the interaction between them doesn’t seem to be one of them.


Henyk
26.Oct.2005 1.47am
Henyk's picture

> Seems like a lot of unnecessary trouble to use clig for it.

May be, or may not to be ;)

From my own experience: clig working perfectly (Adobe CS/CS2 products)


Eben Sorkin
26.Oct.2005 9.07am
Eben Sorkin's picture

I said before ’It would make for fewer altrnate glyphs - thats for sure!’ This is false. Actually it increases the # by tenfold or so. I still haven’t decided which model makes the most sense. I am leaning towards liga because Photoshop 6 & 7 use it. But I haven’t decided. Also, which is easier to deal with and manage - the 300 combinations of 30 glyphs or so or the 300 glyphs? The visual and kerning management of 300 glyphs would be easier because each combination is directly represented. Testing would be faster because of a reduced # of characters to change for each test. However the # of tests will be the same. But 30 glyphs makes a lighter font in terms of data size.

I am not sure how so many non-standard glyphs would be accepted into an opentype font - alot to be sure but maybe not an infinite amount.

My case is atypical because I am using the liga or calt to help me past a problem in the reverse version of the font.

Henadij, how many instances end up being created in your work? IS it a large number? What is your method for managing them?

Mark, how about you?


Mark Simonson
26.Oct.2005 11.56am
Mark Simonson's picture

I don’t know. I just saw a simpler way to do what Henadij was doing with the clig definition. I don’t have any good ideas how to solve your problem. Seems like you have painted yourself into a corner with this particular design concept. You may be better off not kerning at all.


Eben Sorkin
26.Oct.2005 12.26pm
Eben Sorkin's picture

Oh, I don’t know. It’s not so bad. It’s a day or two’s work once I decide what I want to do and it’s an interesting technical & mental excersize for me.

One thing I am still unclear about is is how clig is more complex than Liga. Liga is more widely supported and is invoked no matter the context. Whereas in some ways Henadij is getting around the point of having the Clig feature at all ( context ) with his ’sub @anyletter’. Appart from support differences the code is pretty similar in length. The one advantage i see in using Clig is that if you decided to start invoking special cases later on you could do so more quickly/easily with the clig code... On the other hand, Mark, you are right in that Clig code isn’t quite orthodox. But all of this is shades of grey.


Henyk
27.Oct.2005 3.07am
Henyk's picture

Hi, all!
I think that clig using is really extreme way, particularly in case
sub @anyletter :)

If I need many instances of “ligature”, constructing it from two alternate glyphs seems more logically, but in case of only few instances I prefer clig, particularly if calt definition is complicated and contains constructions such as
sub a b c’ by c.alt;
which may be not generated with FL 4.x :(


Thomas Phinney
28.Oct.2005 2.45pm
Thomas Phinney's picture

The definition of “contextual” (as in ’clig’ and ’calt’) is that some glyphs, other than those being substituted, provide the context. There’s no reason to use ’clig’ when it’s not contextual; you might as well use ’liga’, ’dlig’ or ’hlig’ as appropriate.

You can of course use what’s supported by current applications as a guiding factor as well. But beware that using inappropriate features will just confuse things later when future applications do implement the more “correct” features. Remember, fonts last almost forever.

Cheers,

T


Henyk
31.Oct.2005 1.54am
Henyk's picture

Thanks, Tom!

But please answer on question: how to call hlig replacement in InDesign CS/CS2 manually? I don’t see it in OT-menu...


twardoch
31.Oct.2005 2.22am
twardoch's picture

Henyk,

InDesign does not support “hlig” but Mac OS X 10.4 Tiger does (so it works in TextEdit, Keynote, Pages and other Cocoa applications).

Adam


Thomas Phinney
31.Oct.2005 10.33am
Thomas Phinney's picture

Actually, in InDesign turning on “discretionary ligatures” activates both the ’dlig’ and ’hlig’ OT layout feature tags.

T


dezcom
31.Oct.2005 10.58am
dezcom's picture

Is there a way to globally use alternates? Let’s assume you have an alternate “g” and want to use it in a column of text. Is there a way of doing this without using the Glyph palette a hundred times? What I do now is the the alternate as Swash and use the Swash feature in InD. It works but it is kind of false advertising sing the alternate g is not swash by any means.

ChrisL


Eben Sorkin
31.Oct.2005 4.49pm
Eben Sorkin's picture

You could always do the old fashioned thing and offer ant alt font...

What I want OTF to do is to let us specify color. It wouldn’t be *that* hard surely!.

And it would open up a whole new market! Think of what you could do with overlays!


Henyk
1.Nov.2005 2.21am
Henyk's picture

Czesc!

> but Mac OS X 10.4 Tiger does

But I’m working with WinXP-SP2, and haven’t another way then InDesign now :)


Henyk
1.Nov.2005 2.36am
Henyk's picture

> Actually, in InDesign turning on “discretionary ligatures” activates both the ‘dlig’ and ‘hlig’ OT layout feature tags.

Oh my, how complicated! ;)

Thanks, Tom.


paul d hunt
1.Nov.2005 6.26am
paul d hunt's picture

> Actually, in InDesign turning on “discretionary ligatures” activates both the ‘dlig’ and ‘hlig’ OT layout feature tags.

but not in PhotoShop. Down with discrepancies!


Mark Simonson
1.Nov.2005 6.34am
Mark Simonson's picture

Is there a way to globally use alternates?

In InDesign, you can apply a stylistic set. There can be up to 20 of them.

Personally, I think the mechanism for choosing alternate characters in OT fonts is flawed and limited.

Let’s say you always want to use a certain alternate “e” in a certain font.

You could insert it manually every time an “e” appears, but that would be extremely tedious.

Or, you see that the alternate “e” is part of Stylistic Set 2, so you select all the text and apply that. But then you notice that Stylistic Set 2 also contains a bunch of other alternates that you don’t want. The only recourse is to apply the Stylistic set just wherever an “e” appears, but that’s almost as tedious as the first method. (You get a similar problem when you put the alternates in a separate font.)

It seems like you ought to be able to look at a list of alternates for a particular character and set a preference for which one to use in a particular text selection or style sheet. This would be a sort of user-defined “stylistic set.”

(Yet something else for Adobe’s feature request page. Not that Adobe should be the only one listening.)


Eben Sorkin
1.Nov.2005 8.34am
Eben Sorkin's picture

It does seem like setting preferences for use by the user - and being able to offer these preferences pre-set as part of the font design would be a far more practical addition. I agree. In the meantime, although it takes up more space than is ideal you can release several versions of a font with the features set that you think most likeley to be of use. Even if it’s just 1 2 or 3 glyphs.


Mark Simonson
1.Nov.2005 9.32am
Mark Simonson's picture

Imagine, though, if you had a font with even just five alternate characters (corresponding to five normal characters). With five alternates, there are 31 possible stylistic sets using 1 to all 5 alternate characters. Add one more alternate character and you get 63 possible sets. Ad one more and you get 127, and so on. How do you decide which are the most likely combinations? What if the user wants some other combination? Having a UI in which the user can choose alternates à la carte and apply them to an entire range of text seems like it would be a less cumbersome approach.


paul d hunt
1.Nov.2005 9.47am
paul d hunt's picture

Having a UI in which the user can choose alternates à la carte and apply them to an entire range of text seems like it would be a less cumbersome approach.

i agree. i think it would be great if there were some type of panel that let you basically build your own OT rules, something like stylesheets but actual user defined stylistic sets would be awesome.


Eben Sorkin
1.Nov.2005 10.05am
Eben Sorkin's picture

Mark, I agree of course - I just meant that in some cases, not even the majority, it could make sense (and be practical) to have a regular & then an alt 1 set & maybe an alt 2 set where a few glyphs are changed either with OT script/feature or simply by using different outlines. Chris’ new font to be being one possble case. His font has both a double bowl g & a single bowl g and it makes a big difference to how the face comes across. Given the change in feeling he perhaps cound redesign or tweak 2-3 other characters in a version of his font and create a different feeling. Like I said it is no panacea. But he could do it today without waiting for improvements to the OT standard.


Mark Simonson
1.Nov.2005 11.37am
Mark Simonson's picture

I just noticed something about InDesign’s implementation of stylistic sets: You can apply more than one at a time. A type designer could put just one alternate character in each set, thereby getting the “à la carte” effect that I described. You would still be limited to 20 sets, but it would work if you had a limited number of alternates. If have more than 20 alternates, and there are certain alternates that, as a rule, should go together, you could put them in the same set to get them into the 20 available sets...


Mark Simonson
1.Nov.2005 12.53pm
Mark Simonson's picture

In fact, I think this is such a great idea, I’m going to do an update to Proxima Nova. I wish I’d though of this before I released it.

(Free update for licensed users—you will be notified when it’s ready.)


dezcom
1.Nov.2005 1.51pm
dezcom's picture

”...Given the change in feeling he perhaps could redesign or tweak 2-3 other characters in a version of his font and create a different feeling...”

The problem is also educating the user of how to do it and even letting them know it is available as a selling point.
I know you can get into rapid growth with the factorial of variables. Twenty factorial is a large number. Many font users don’t even try the basic alternates. I guess we have to be satisfied we are at least offering many possibilities to the very type savvy designer.
I like the “Alternate style Sheet” idea. This would be a universal tool which would not have to be redefined for each and every typeface.

ChrisL


dezcom
1.Nov.2005 1.54pm
dezcom's picture

“(Free update for licensed users—you will be notified when it’s ready.)”

Thanks Mark!

Also, I’d be interested in how you do it. This seems like something of universal value to type designers.

ChrisL


Mark Simonson
1.Nov.2005 1.56pm
Mark Simonson's picture

Note: You can apply one or more Stylistic Sets to a character- or paragraph-level style sheet in InDesign.

I will provide a user guide with Proxima Nova on how its Stylistic Sets work when the new version is out.


Mark Simonson
1.Nov.2005 2.22pm
Mark Simonson's picture

What I intend to do is this:

There are four alternate characters in Proxima Nova: A more geometric (Futura-like) G, a one-story a (and corresponding two-story a in the italic), an l with a tail, and a curved y (similar to a one-story g). Note: The normal roman a is two-story; the normal italic a is one-story.

There will be seven stylistic sets:

Set 1: Alternate a, l, and y in the roman; Alternate l, and y in the italic. This is the “primer” or “schoolbook” set, intended for early reader books.

Set 2: Alternate G and a in the roman; Alternate G in the italic. This is the “Futura-like” set.

Set 3: Alternate G.

Set 4: Alternate (one-story) a (roman only).

Set 5: Alternate (two-story) a (italic only).

Set 6: Alternate l.

Set 7: Alternate y.

The first two are Stylistic Sets in the way (I think) the feature is intended to be used. The rest are effectively à la carte alternate character styles which can be mixed and matched to taste. You could actually recreate the first to sets using the others like this:

Equivalent to Set 1: Apply Set 4, Set 6, and Set 7.

Equivalent to Set 2: Apply Set 3 and Set 4.

And so on.

(By the way, the current version of Proxima Nova has two Stylistic Sets, basically the same as the first two of the proposed sets, except that the alternate (two-story) a is included in the italic. This was ill-conceived, I realize on hindsight.)


dezcom
1.Nov.2005 4.37pm
dezcom's picture

“By the way, the current version of Proxima Nova has two Stylistic Sets, basically the same as the first two of the proposed sets, except that the alternate (two-story) a is included in the italic. This was ill-conceived, I realize on hindsight.)”

Now I’ll have to take another look it.

Thanks so much for sharing your wisdom on this Mark! I see I have much to learn about opentype features.

ChrisL


Mark Simonson
1.Nov.2005 5.31pm
Mark Simonson's picture

InDesign CS2 was the first application (that I’m aware of) to support Stylistic Sets. I didn’t have a copy of it until about a week before I released Proxima Nova, and didn’t realize the program supported them until even later. Consequently, I put the features in before I really understood how they would be implemented on the user end.

I’m still learning, too.


k.l.
2.Nov.2005 4.10am
k.l.'s picture

Mr Simonson —

but don’t forget the manual! ;-)

Karsten


Mark Simonson
2.Nov.2005 6.01am
Mark Simonson's picture

http://www.kltf.de/downloads/KLTFTiptoeManual.pdf

I’m impressed! (Nice font, too.)

There was a time when even PostScript Type 1 fonts came with printed manuals and disks. Of course, the prices were quite a bit higher back then. (In 1986, for a three-weight font family like Goudy Oldstyle, Adobe charged $185—equivalent to $317 in 2005 dollars.)


dezcom
2.Nov.2005 6.35am
dezcom's picture

Great idea Karsten!

ChrisL


hrant
2.Nov.2005 7.25am
hrant's picture

Wow, Karsten - impressive, on many counts.

hhp


k.l.
2.Nov.2005 7.35am
k.l.'s picture

Oh thanks.

But it will turn out useful manuals really are. I doubt anyone will save fonts and manual together.

My first idea was to use ssXX features consistently throughout my typefaces, so, ss01 for certain substitutions, ss02 for certain others &c. But with the second and now third type it turns out the idea is unrealistic.
Now I read that a font’s Description [in FL’s FontInfo / Name ID 10 in the specifications] was also intended for feature descriptions which may be a nice idea. Then information are part of the font. Provided however that apps or font management tools would display these information ... But I haven’t made use of this myself yet. Maybe you can do this for an updated Proxima Nova?

Karsten


Eben Sorkin
2.Nov.2005 2.30pm
Eben Sorkin's picture

Nice to see you on typophile Karsten!


Thomas Phinney
4.Nov.2005 6.58pm
Thomas Phinney's picture

I agree that Stylistic Sets are the best solution for the problem Chris proposes when he writes: “Is there a way to globally use alternates? Let’s assume you have an alternate “g” and want to use it in a column of text....”

Also, Stylistic Sets can perfectly legitimately be used much as Mark has suggested for Proxima Nova. The typeface I’m working on right now has quite a few of them, and in much this way. They can be mutually exclusive, or they can be mix-and-match.

Regards,

T


Mark Simonson
4.Nov.2005 8.34pm
Mark Simonson's picture

Thomas, good to hear you say that. Part of me worried that my proposed use of Stylistic Sets was a sort of hack.


vizzie
13.Apr.2006 11.11am
vizzie's picture

I’ve been reading through this interesting thread and have a question...

The book publisher I work for had this custom font developed years ago. It’s a cursive font designed to teach children cursive writing. It’s quite an amazing piece of work, each character has the ability to connect with the next character at either a high, middle, or low connector.

Originally the type 1 font was a 3-piece font: screen, printer, and some sort of executable that had to be downloaded to the postscript printer to control the contextual connections. This method caused 2 problems: 1) the font would sometimes get kicked out of the PostScript RIP if another font was downloaded, 2) You could not save to postscript for making PDFs.

Later this was all combined in to one font with built-in contextual intelligence. so that on postscript output from Quark Xpress (in OS 9) had all the processed contextual characters in place and PDFs could be made properly.

Well, we haven’t used the font in awhile, have upgraded to OS X and InDesign and it occurred to a couple of us the other day that perhaps this special font will no longer work.

After a few tests we found that not only does it not work in OS X, but it only worked with QuarkXpress 4.11 in OS 9... Even a dusty copy of InDesign 2.02 in OS 9 would not work properly with the font.

Given all this back history, anyone have a clue as to how this font was made? We outsourced the original design of the font, so no one here knows how it was done.

At any rate, we have Font Lab on order and hopefully soon enough I’ll be re-constructing the font in OpenType, and perhaps asking for hints along the way on this here messageboard...

Cheers,
/ed


dezcom
13.Apr.2006 2.08pm
dezcom's picture

You can create an Opentype font from it and it will work on all your Opentype savvy apps. Nick Shinn and Thomas Phinney gave a class at last years NYC TypeCon on exactly such a face.

ChrisL


vizzie
14.Apr.2006 7.19am
vizzie's picture

Cool! Thanks for the info...

Will Font Lab be able to make the conversion? I was reading the Font Lab 5 user manual yesterday and it stated that Font Lab didn’t support the positioning lookup required to get the connectors to connect each glyph.

there wouldn’t happen to be any sort of archive of the class from the NYC TypeCon, a PDF or powerpoint presentation kicking around, would there?

Thanks again for getting back so quickly.

cheers,
/ed


Nick Shinn
14.Apr.2006 10.57am
Nick Shinn's picture

I don’t think it would be a straightforward conversion, but it’s unlikely you will need to use the positioning lookup.
You would probably have to examine the glyph sets, make them into classes, and learn how to implement the “Contextual Alternates” feature.
I figured out how to do it using the Fontlab manual.
Contact me and I will send you a reference PDF I made for the workshop.


paul d hunt
14.Apr.2006 11.30am
paul d hunt's picture

Font Lab didn’t support the positioning lookup required to get the connectors to connect each glyph.

it’s unlikely you will need to use the positioning lookup.

Here you’re looking for substitution lookups (not positioning lookups, which FontLab does support) that happen contextually. I recently did a connecting script using these types of lookups. I could post some code here if you’re interested.


John Nolan
14.Apr.2006 1.42pm
John Nolan's picture

Please, Paul, do share!


paul d hunt
14.Apr.2006 2.36pm
paul d hunt's picture

this may be able to be condensed somehow, but this works for letters that connect low and high (no middle connections).

OT Code:

feature calt {
lookup calt1 {
sub @lc_highexit @lc_all' by @lc_highentry;
} calt1;
lookup calt2 {
sub @bovw_default' by @bovw_natural;
} calt2;
} calt;

Classes:

@lc_highexit: b o v w b.high o.high v.high w.high
@lc_all: a b c d e f g h i j k l m n o p q r s t u v w x y z
@lc_highentry: a.high b.high c.high d.high e.high f.high g.high h.high i.high j.high k.high l.high m.high n.high o.high p.high q.high r.high s.high t.high u.high v.high w.high x.high y.high z.high
@bovw_default: b o v w
@bovw_natural: b.calt o.calt v.calt w.calt

just to explain a bit, if it doesn’t all make sense on it’s own: x.high is a lc character which has a high entry stroke, b.calt has a low entry stroke and a high exit stroke, b.high has high entry and exit strokes. This is an abbreviated chunk of code, leaving out diacritic forms (or else the class info would be much longer, but the OT coding would be the same). Critiques to this method are welcome.


Eben Sorkin
26.Apr.2006 8.14pm
Eben Sorkin's picture

Thank you Paul!


vizzie
2.May.2006 8.25am
vizzie's picture

Thank you Paul!

We unearthed some more info on our special cursive font... it was actually a type1/type3 postscript hybrid.

and thank you for posting the code. I look forward to diving in to FontLab real soon.

cheers,
/ed