so I'm currently working on FreeType's bytecode interpreter to shuffle it into "ClearType mode" so to speak. I hope someone deeply knowledgeable about or experienced with TrueType hinting reads this.
What actually needs implementing is a backwards compatibility mode as outlined by Greg Hitchcock
and Beat Stamm
. Now, FreeType is not the Windows interpreter/rasterizer and doesn't have to care about a few things that Microsoft has to, e.g. compatible widths, rasterizer peculiarities and things pertaining to Windows internals and legacy.
I want to implement a basic compatibility mode without a lot of special treatment of legacy fonts like Arial, Times N. R., Courier (and DejaVu *), etc. Actually, I don't want to handle any internal white/black lists for fonts and their hacks. I'm mainly interested in rendering modern (web)fonts well, I'm happy when legacy fonts render mostly fine. Tricky fonts that depend on the interpreter to render correctly (mostly Asian fonts like DFKai) and native ClearType fonts are left alone and can do whatever they want. Most fonts in circulation will be handled by this compatibility mode as
there are very few native ClearType fonts like Constantia, Corbel and
I have so far implemented just a few of Hitchcock's and Stamm's basic recommendations (block post-IUP DELTAP/SHPIX, be selective about pre-IUPs without detecting functions, turn all Round_* into Round_None on the x-axis) and a few other things. While experimenting with killing post-IUP DELTAPs, I had an idea: what if I simply stop execution after IUP[x] and IUP[y]? AFAIK, everything that happens afterwards is an attempt at superhinting which is not useful in a ClearType environment. I found that this approach saved me a few extra lines of backwards compatibility hacks and so far, I could not find anything that blows up. Microsoft's core web fonts render fine, as do all the webfonts I came across so far. I think leaving glyphs alone after IUP[x+y] is also considered good practice?
So, my question is: am I missing anything or is it fine to stop execution after IUP[x] and IUP[y]? Does anybody know of any fonts that would or could possibly break?