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
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.
fontforge.FontView.FontSize: 24
[a-z] a b => does nothing a b [a-z] => does nothing a b => substitutes
will only substitute of "ab" is a word all to itself.
Make the "+" operator concatenate arrays
[1,2] + [3,4] == [1,2,3,4] [1,2] + 3 == [1,2,3]
There was no objection.
I have now removed them.
I also made the SetPrefs scripting function sort of work if the user tries to set one of these (it will set the appropriate flags in the default option set used by generate).
The defaults of these flags were different on the Mac from everywhere else. This meant that a script could do different things on the Mac and on linux. That seems like a bad idea. I have changed things so that the default options setting for generate is always OpenType.
THIS IS AN INCOMPATIBLE CHANGE AND SCRIPTS ON THE MAC COULD NOW BEHAVE DIFFERENTLY.
Legacy programs will not work when given a font in the correct format. New programs should be able to handle either correct or broken 'size' features.
A few of Adobe's programs make use of the 'size' feature, and XeTeX does. I know of no others (besides font editors). Both intend to upgrade their programs... So this may be less of an issue than I initially feared.
FontForge should now be able to read in a size feature in either format and gives the user the option of producing 'size' features in either format on output.
Windows won't use a font where the codepages field is 0.
The first sets the start point of each contour to the leftmost point, while the second orders the contours by their leftmost points. This will slightly reduce the size of output charstrings. It will also make more things available to be put in subroutines.
Use the appropriate defn for the version we happen to be outputting.
Both will select all encoding slots containing the named glyph (or unicode value)
Earlier Changes
Changes to PfaEdit (predecessor to
FontForge)