Changes since the last release may be found by performing a "cvs log" command on the file stamp.c.
TEGEUS:
Tell me,
What is your opinion of Progress? Does it, for example,
Exist? Is there ever progression without retrogression?
Therefore is it not true that mankind
Can more justly be said increasingly to Gress?-- A Phoenix too Frequent
Christopher Fry, 1950
"The trouble is," he said, "is that things never get better,
they just stay the same, only more so.--
FaustEric
Terry Pratchett, 1990
Also the contents of one of the structures has changed a bit, and a value that used to live in one field has moved to another (the ppem value moved from (exc)->size->metrics.x_ppem to (exc)->size->root.metrics.x_ppem.
Well, David warned me that this might happen.
Warn the user (rather than just silently failing) when we have a freetype version mismatch.
The dialog is no longer modal, however it does not get updated with each change to the font (that would make moving a point around in the outline view far too sluggish), instead there is a [Refresh] button the user can press to force an update.
So I've added a Ligature Caret count to the Element->Glyph Info dialog to give the user control over it when necessary.
The first creates a new layer by interpolating between the current layer
and the layer in the first argument.
The second creates a new glyph in the font by interpolating between the first
two arguments. The glyph's unicodecode point and name will be copied from
the first argument (the font must not already contain this glyph).
If amount is 0 the result will look like the first glyph, if 1 then like
the second.
% MF2PT1: bbox 0 90 834 422
where the third (so called) bounding box entry is actually the glyph's advance width. I was reluctant to use this at first, because that clearly isn't something that belongs in a bounding box...
Sigh. Adobe documents a feature file syntax they don't fully support, and even their documented syntax is inadequate to represent all the complexities of OpenType.
FontForge supports anchors and device tables and will parse lookups which contain these. This is a syntax which Adobe documents but does not implement. Adobe also warns that this syntax may change when they get around to implementing it.
FontForge makes one extension to the syntax which allows me to specify complex contextual features.
Neither I nor Adobe support reverse contextual substitutions, nor GDEF mark classes.
File->Merge Kern Info
to
File->Merge Feature Info
Edit->Copy Lookup Data
)
The major change is that fontforge now presents lookups to the user rather than features. I think this makes simple things more difficult (which is why I avoided this when I started), but it makes complex things possible.Sadly the world is not simple.
So when a piece of typographic information is created (a ligature, a kern pair, a glyph substitution, etc.) it must be tagged with a lookup (actually a lookup sub-table) rather than a feature tag.
The lookup itself will be tagged with a feature tag (possibly several tags) and with scripts and languages in which that lookup should be active.
NOTE: This reverses the way GPOS/GSUB think about things, but it contains the same information.The Font Info dialog now contains a Lookup pane which allows you to create and edit lookups and their subtables. You can also reorder them. The order shown in the dialog is the order in which they will be applied.
A mac feature/setting subtable also gets converted into this format.
The Font Info dialog no longer has Anchor Classes, Contextual, or State Machine panes.
Instead you can edit a lookup subtable's data (for any subtable type). There are new dialogs which list all the information for each lookup type (ie. a dialog which lists all kern pairs in a subtable), and these provide access to the old anchor class, contextual or state machine dialogs.
The Glyph Info command has also changed. It looks simpler and more comprehensible (I think), but the act of creating a new substitution has become more complex because (potentially) one must create a new lookup and lookup subtable before doing the simple task of adding a new replacement glyph.
The kerning class, contextual and state machine dialogs have all changed in that they no longer request a feature tag, they now need a lookup subtable.
The metrics view also needs a subtable.
The metrics view has changed considerably.
It displays all the features in the font, and allows you to select which ones you want active in the view. It lets you set the script & language. It will apply lookups that it couldn't handle previously like ligatures and contextuals.It does not do Indic glyph reordering. I'm not sure how to and last I checked MS had not updated their docs to reflect their new procedures.
Many other dialogs now take a lookup subtable where appropriate.
Show ATT has changed, but it is still not editable. I hope that the Lookups pane will do that instead.
There used to be a scripting command which indicated what ligature features got stored in afm files. Now each ligature lookup has a flag set on it which conveys this information.
The Element->Typographic Features menu has been removed. It's functionality has moved into Font Info->Lookups (I hope I've got everything).
Some scripting commands have been removed, others have been changed and others have been added. I apologize for this, as it will break existing scripts, but some basic concepts no longer exist and others, very different, have replaced them. (and anyway people may switch to python scripting now).
- Removed:
DefaultATT ControlAfmLigatureOutput ApplySubstitutions CopyGlyphFeatures AddATT Replaced with AddPosSub RemoveATT GlyphInfo(Position/Pair/Substitution/AltSubs/MultSubs/Ligature) SelectByATT Replaced with SelectByPosSub- Changed
Set(V)Kern takes an optional third argument, a lookup subtable name (if not specified it choses one) AddAnchorClass(name,type,lookup-subtable-name) GetPosSub(subtable-name) AutoKern(spacing,threshold,subtable-name[,kernfile])- Added
AddLookup(name,type,flags,feature-script-lang-array[,after-lookup-name]) n*[feature-tag,script-lang-array] n*[script-tag,lang-array] n*[lang] GetLookupInfo(lookup-name) => [type,flags,feature-script-lang-array] AddLookupSubtable(lookup-name,subtable-name[,after-subtable-name]) GetLookupOfSubtable(subtable-name) GetSubtableOfAnchorClass(anchor-class-name) AddPosSub(subtable-name,variant(s)) (subtable-name,dx,dy,dadv_x,dadv_y) (subtable-name,other-glyph-name,dx,dy...) RemoveLookupSubtable(subtable-name) RemoveLookup(lookup-name) MergeLookupSubtables(subtable-name1,subtable-name2) MergeLookups(lookup-name1,lookup-name2) SelectByPosSub(subtable-name,search_type) GetLookups("GPOS"/"GSUB") GetLookupSubtables(lookup-name) LookupStoreLigatureInAfm(lookup-name,store-it) LookupSetFeatureList(lookup-name,feature-script-lang-array)The sfd format has changed. New files are tagged as version 2. Old files will still work, but ff will no longer produce file in the old format.
PUSHB_1 1 2
would lose the second number and not complain. In fixing that, I broke the first. Now both should work (I hope).
Pairwise positioning lookups could also get their device table offsets screwed up.
Earlier Changes
Changes to PfaEdit (predecessor to
FontForge)