CHAPLAIN: It was very interesting; I was dreaming I stood On Jacob's ladder, waiting for the gates to open. And the ladder was made entirely of diminished sevenths. I was surprised, but not put out. Nothing Is altogether what we suppose it to be. The Lady's not for Burning Christopher Fry
Current changes Changes to PfaEdit (predecessor to FontForge) Changes to the sfd format.
24-August-2008
Changes to create a stub Mac application. Add an apple event handler to fontforge so that it will notice when the finder wants it to open files. Add icons, etc. so it will look like a mac app.
Make it possible to drag and drop lookups
- from one font info window to another (copy lookups from one font to another)
- within a font info window (reorder lookups)
Layers can now be marked as either background or foreground.
- Foreground layers may be generated into fonts
- Background layers may contain images. Pasting into an empty glyph in a background layer will not set the width. Splines in background layers do not make a glyph worth outputting.
Add a color picker so users can select glyph label colors other than red, cyan, green, etc.
- Memory problems with references, introduced recently, have been fixed.
- I hope I'm now getting keysyms right for non-latin menu short cuts.
- Typo in background layer patch could cause a crash in fonts with many layers.
- Werner wants an $iscid variable to determine whether a font is a cid-keyed font or not.
- add font.iscid to python too.
- python font.cid* variables didn't work, fix them.
- Add $haspython variable to normal scripting so I can detect if python is available.
- When pasting a reference into an order2 layer, ff would sometimes miss the fact that the instructions were out of date.
- Replace with references had the same problem.
- In scripting, instructions did not get checked for up-to-dateness
- In the charview, unlink ref only worked on the foreground layer.
- Patch by Barry (fixed up by me) to fix up open charviews when a layer is added.
- Barry points out that Contour.round and Layer.round are supposed to have an optional argument, but instead have a required arg.
- Just as pasting references screws up instructions, so does replace with reference. Do the same thing that we just did to rplref.
- When scripting without a UI, the char changed routine did not check to see if it should clear the instructions on a change. It now does.
- Setting device table adjustments from the accent pane of the Math dlg didn't work.
- File->Revert File (from the UI) didn't work.
- If a contextual chaining pos/sub in a sfd file referred to a non-existant lookup we would insert a NULL lookup into a rule. This would cause almost anything that used that lookup to crash. Now, simply remove the sequence/lookup info.
- When importing lookups we might import a lookup twice if it were nested.
- When generating bitmaps automatically from a script it was possible that the freetype library got initialized too late and we'd pass a NULL pointer to FT_Memory_Face -- and things would crash.
- In a quadratic layer of a glyph, when selecting an on-curve point and trying to make it interpolated, if that point had no control points then behavior was odd.
- didn't create an input context for top level window char and font views. This meant could only use ASCII in menus if the focus were in the top level window (in the scroll bars, or the menu bar.
- Typo in the code to display side bearings in the charview.
- FontForge assumed that all anchor classes for a given subtable were in sequence, but Panov has a font where an anchor class for a different subtable appears in the middle of a list of classes for the desired subtable. Result was garbage output, and View->Show Att crashed.
- View->Next/Prev [Def] & Find In Font View don't work in charviews when there are tabs active.
- R. Sander points out that if you select an ordered set of lookups in one font and import them into another they become disordered. Not good.
- When pasting into a charview we only set the width if there was nothing in foreground. When pasting into the fontview we always set the width because we were clearing the foreground before we pasted (unless we did paste into -- then we didn't set the width). With layers that should all change. We should only set the width if there is nothing in any of the potential foreground layers. Don't count the background layers or the grid psuedo layer. Don't count open contours (might be a secondary guide line layer or something). If we're going to clear a layer before pasting (normal behavior in fontview) then don't count the layer cleared.
- Add several different behavior patterms for the metrics view. Users complain that the current multi-functional window is confusing and would prefer a view which only does kerning, or only sets the advance widths, etc.
- Due to a typo, merging two splinesets at a curve point generally left the point marked with default adjustment enabled on its control points.
- Another layers problem. Only in the foreground layer could anchor points be moved.
- Python glyph.unlinkReference command didn't work.
My intent was that ligature carets positioned at 0 didn't count (0 isn't meaningful -- a ligature with a zero-width first component?) but that only got implemented for 'lcar' table not for 'GDEF'. So fix that.
Also allow the user to specify exactly how many ligature carets s/he wants rather than just setting a minimum bound.
Also 'lcar' (Apple) output was broken.
Also neither AAT nor OpenType supports negative lig carets, so if the user drags a lig caret line negative, have it stick at 0.
Moving ligature carets always marked for an undo in the foreground layer. Register the movement in the layer in which it happens.
- When placing an accent glyph about which we know nothing, assume it should be centered on top.
- Change sfd.c so that it will treat the sequence "backslash newline" as no characters on input (er, except in ASCII85 input). And so that it thinks it can parse version 4 or the sfd format. We don't generate version 4 yet, and we won't for a while. Version 4 will include the ability to insert backslash newline into long lines. This is so we can conform to the internet requirements of fewer than 990 bytes on a line. And the delay is so that people don't scream at me for making an incompatible change to the format -- if I give the parser time to perculate through the user community, with luck no one will even notice -- especially as long lines are rare.
- Selections/Clipboard didn't work in textfields on 64bit intel. There seems to be a bug in the 64bit Xlib which doesn't transfer 32 bit quantities properly. I was passing unicode strings as 32bit UCS4, but UTF8 will work just fine instead.
- Add the ability to clear all device tables associated with a kerning by classes table. (Needed because of a bug which introduced garbage).
- We didn't think we could read in a kerning subtable (class or pair) with device tables, so we converted them to pst data. We can read them in in optimized form and we should do so.
- Alexej points out that if a glyph has "instructions_out_of_date" set on it, then setting the instructions via a script should clear the bit -- but didn't.
Werner points out that if a type2 charstring contained a sequence
endchar then ff would set the width of the charater even if the the width had already been set. Width can only be set on first stack clearing operation, any extra params on subsequent calls get ignored. Actually it's worse than that, the spec says that if there are too many things on the stack then start parsing the stack from the unexpected end.
Adobe have admitted that the obvious reading of their spec is incorrect (they can't quite bring themselves to say the spec is wrong). So revert some of the way we were parsing type2 charstrings.
Barry complains that when building ff does not apply the ".cap" suffix when using inverted breve.
- Valgrind finds a bug in drawing non-BMP characters in the metrics view.
- Alexej would like to be able to manipulate non-unicode glyphs with the text field of the metrics view. The textfield used to map all non-unicode code points to 0xfffd, but if the font doesn't make use of the supplementary private use areas (planes 15&16) then create a mapping from the font into these areas so that we can represent non-unicode glyphs as funky private use glyphs. (Only do this if font doesn't use these areas).
- Alexej points out that in non-foreground quadratic fonts the "Points->Dont Interpolate" command doesn't do anything. Fix a couple of other foreground specific things too.
- Barry points out that setting a glyph's anchorPoints from python does not mark a glyph as changed nor force an update.
Autoinstructor: large patch from Alexey:
- handlles conflicting H/V stems much better;
- tries to place HStems between blues better;
- adds optional apparatus for instructing serifs;
- relies on generic point-to-stem snapping routines from stemdb.c;
- needs FPGM changed (older FF's glyph programs should still work, but FPGMs need updating!).
If the user has opened a backup sfd file (one that ends in .sfd~) and does a save on it, then pop up a save as dlg instead of blindly saving it. Saving it back to the backup is probably wrong, yet saving it onto the non-backup version without prompting the user is questionable.
- glyph.appendAccents didn't mark the glyph as changed nor did it force an update.
- Barry wants a way to control the use_my_metrics bit of a reference from python. Give him a hack glyph.useRefsMetrics(name[,set])
- Add a glyph.appendAccent() command.
- Ralf from end-if.de points out that when trying to change the kerning between two glyphs which have a kern class setting of 0, then ff keeps asking the same question several times before a non-zero value is entered. (once when the field is clicked in, once when a minus sign is typed, and once more when a number is entered).
- The python stuff won't compile under cygwin because it used pointers to stuff in shared libraries as initializers of static variables. It seems windows can't handle that. This patch should provide a work around.
- Add a font.importLookups (from another font) function to python scripting.
- When joining two splinesets (during glyph editing) we didn't pay attention to any user settings for the control points, and we'd just always refigure default control points. Now use user specified directions when possible.
- Add a problem (Find Problems) which will look through all glyphs for those with both contours and references, and which will create a new glyph to contain the contours and make a reference to it in the original. Do something similar for bad transformation matrices (those with members 2 or more (or less than -2)).
- Importing a kerning class from one font to another (and perhaps merging fonts) could cause memory problems if the number of second classes were bigger than the number of first classes.
- Retain sizes of bitmap and metrics views. People seem to like this even if I don't.
Still problems with the guide lines layer
- Displaying a point read bad memory (probably harmless, might cause visual artifacts).
- Edit->Undo in guide layer trampled memory.
Find Problems would occasionally pop up a blank problem dlg.
- Only show points of inflection in the active layer.
- If a glyph window were displaying something other than the foreground layer then changes in that window would not be reflected in dependant glyph windows (a change to tilde didn't show in atilde) nor in the fontview.
- In a cubic glyph with references, turning on point numbering did not renumber the references. They seem to be numbered for TrueType. Not sure where that comes from.
- Alexey points out that after deleting the active layer, ff does not update the internal bitmap font it used to display glyphs in the font view.
- Make "-lang ff" work for "-lang=ff", it's more consistent with the rest of the arguments.
- Add a -unique argument which means that FF checks to see if another fontforge is running on the current screen. If no other fontforge exists things proceed normally, but if there is another, then we send it our arguments and ask it to open them, and then we exit.
- Make the OFLib dialog have an option to download a preview when you click on a line (rather than requiring you press the [Preview] button for each).
- The BitmapsAvail and BitmapsRegen scripting functions were broken by the layers patch (they generated bitmaps of whatever was in the background layer).
- Put in some checks to warn the user when a 'kern' table subtable uses more than 10920 pairs.
- Give the user one of those "This operation cannot be undone" warnings when deleting a layer in Font Info. (Similar warning about instructions if user changes last quadratic layer(s) to cubic without deleting any).
- When deleting the last quadratic layer, delete the tt instructions also.
- When deleting a layer from a font, ff very carefully went through all open glyph views to make sure none was looking at the layer being deleted (and fixing them up if they were) -- but it totally ignored the font views. Their layers needed to be updated too. And the metrics views.
- The Import menu item in Font Info->Lookups popup menu was always enabled. It should not have been.
- Add menu items in Font Info->Lookups (popup menu) to do a global add/remove language from a specified script in all selected lookups.
- Get Info (maybe a few other things) didn't work on a selected reference which wasn't in the foreground layer.
- Copy/Paste of references only worked well in foreground layer.
- Only in the foreground layer was it possible to select a reference by clicking on it.
- Snapping to blues was broken due to a typo in the code.
Still were a number of places where behavior depended on the spline order in the foreground layer:
- Could only debug a glyph if the foreground layer were quadratic
- Show gridfit used some point numbers from the foreground layer and some from the layer being shown.
- Gridfit didn't change when changing layers.
Peter Lunicks points out that a tooltip in the prefs dlg actually was for a different preference item.
20-July-2008
- Updated Russian UI
- Updated Simplified Chinese UI
- Small Caps dialog greatly rewritten and merged into the sub/superscript dialog and a new change glyph dialog.
- Alexey Kryukov makes Small Caps and friends deal with diagonal stems.
- Update the upload mechanism to OFLib to send a preview image, license text (if specified in our database) and fontlog (again, if in our database). Currently OFLib throws away both the license info and the fontlog, but I hope they will fix that in time.
- Add a dialog to browse fonts on the OFLib.
- Fix some bugs in feature file generation of contextual chaining lookups which refer to marks. Note these are not supported in the spec. This is a FontForge only extension.
- If a script contain no default language features (but did contain some languages) then ff produced a garbage script table for GPOS/GSUB.
- A number of Dialogs still did not autosize themselves for different languages Create Hints, Kern (Anchor) Pair, Review Hints.
- Still places where ff uses the foreground layer rather than the current layer to determine if a glyph is quadratic.
- On systems using different font metrics, the debug pane looks bad with the buttons partly covered by the instruction pane. If the font is large, and the cvt dlg empty, then I'm told ff complains.
- Barry points out that Add Encoding Slots scrolls to the wrong place.
- Adding glyphs in compacted encodings caused problems.
- When the user resizes the outline glyph window, retain that size and use it for the default size of subsequent invocations of the window.
- It used to be that whenever ff opened an sfd file then all subsequent new fonts (or fonts opened from real font files) would be displayed in windows the same size as the one requested in the sfd file. Only set the window size preference when the user explicitly changes it, not upon openning something with a different setting.
- In a CID-keyed font, when opening an empty CID slot, ff could trample memory.
- BlueFuzz support for autohinter and metafont.
- Add some checks to make sure that we can survive bad font data without crashing.
- When trying to change kerning between the last two glyphs in the metrics view using the text field (rather than dragging the line) then the textfield would change, but the kerning would not.
In the metrics view, give the user several options about the grid (which shows the advance widths of the glyphs)
- hidden
- fully displayed
- small lines at the top and bottom of the pane
- fully displayed except when the user is adjusting kerning or the advance width, etc. When adjusting grid vanishes until user releases the mouse button.
(setting is sticky).
- Allow the user to customize the colors in the metrics view.
- In the metrics view (or in the print display dlg) when glyphs are overlapping (e asier to see when glyphs are large) then the places where one glyph ends and another begins often have a faint halo of lighter pixels. Try to improve things and make these joins be more uniform in color.
- Add minimal support for alpha channels (treat them as a bitmask for transparent).
- I find it really hard to believe that this is an error, but I have a second hand report that MicroSoft claims that it is. To me making it erroneous is pointless and annoying, but I don't write the spec. Add to Find Problems and Validate a check to see that if a base glyph (or mark) contains an anchor point in one anchor class in a lookup subtable, then it must have anchor points for ALL anchor classes in that subtable.
- Fontimage would crash if asked to process a font with glyphs not in BMP. Make fontimage better about fonts which contain no standard scripts (Apostolos's Phaistos font).
- A few tweaks to make stemdb.c usable for resizing glyphs and stem control.
- When importing lookups into a font, append the fontname to the lookup name only if there is already a lookup in the new font with the original name.
- Empty glyphs containing a "." in the name could cause ff to crash when doing or checking to see if it could do a build accented.
- Gasp editing was broken (still) from the change to the cleartype stuff.
- Andrey P. would like to see a reference's bounding box in the Element->Get Info dlg for the reference.
- Revert glyph had some stray memory references.
- Add two proposed language tags for IPA use (one for IPA and one for Americanist).
- In an empty python layer layer.boundingBox should return a tuple of 4 zeros, instead it returned a tuple of 2 zeros and 2 random garbage values.
- Validate dlg's scrollbar was broken, and you couldn't drag the thumb up to the top (you could get it to the top by other ways).
- Add a revalidate all menu item to the window to force a reevaluation of the entire font.
- Add ability to import graphics from a page of a pdf file.
- Python interface does not catagorize points.
- The (python) psMat.skew command skewed vertically, rather than horizontally and by the wrong amoung.
- When doing a font sample from a script which did not set the page width/height explicitly, then ff would use a size of 0 for each. All text drawn was out of the imaging area, lines were too short (as well as invisible), too many pages (all blank).
- Barry points out that "print" is a python keyword. So font.print() doesn't work. Call it printSample() instead.
- Freetype now (or in the next release, 2.3.7) supports dropout modes, which means fontforge must do a bit of work when generating rasters for the debugger.
- Move some logic out of fontimage.pe and into fontforge to make a default string for a font image more widely available.
- When saving an image fromt the print dlg, the top line was off the top of the image.
- Interpolated points need not be on integral boundaries, but ff was checking for them. Different problems in validator and find problems, but both wrong.
- In the point near hint check (find problems), ff was leaving the hint selected.
- Fix some rounding errors in spline/line intersection.
- in Font Info, after user pressed [OK] FF set the state of the subscript superscript default checkbox to the panose default checkbox by mistake. This means if the user defined panose and not sub/super garbage would appear in the OS/2 sub/super fields.
- fontimage didn't get the script right, so features weren't applied properly.
- More work on conflicting stems.
- Pressing [Done] in the print dialog would right to a random address on the stack. Depending on what was going on when this was done it could cause a crash.
- Fix an uninitialized variable introduced by the last change to order2 conversion.
- Add the ability to open an archive and peek inside it for fonts. Useful if we want to open stuff from the open font library which is often packaged in zip files.
- Add a new validation check to see if a glyph has non-integral coordinates. Only an error in TrueType (and can't happen when fontlinting a truetype file, but could happen on an sfd file). Add some logic to ask user if they intend to generate truetype in cases where we aren't sure.
- Add a preference which allows people to change the pixmap dir -- and do what we can to reload images from the new dir. Some old windows may not be updated, but new ones should reflect the new stuff.
- When ff changed the name of a glyph, it fixed up all the tabs in charviews to the new name -- but in neglected to refresh them. So they still showed on the screen with the old name (until something forced a refresh).
- The Anchor Class dialog (which lists all anchor classes of a subtable) only let you create an Anchor Control dialog for the first anchor class.
- Guard (harder) against generating pathological results when converting cubic to quadratic splines.
- If we had a spline which almost doubled back on itself, sufficiently so that the spline intersector found lots of really close points, which it called intersections, but not sufficiently so that our colinear detector caught it, then we'd generate a ton of intersections, overflow certain arrays, and trash the stack. => ff would crash. I didn't think this could happen, until someone provided a test case, so put in guards against this.
provide python access to
glyph.altuni
either None, or a tuple of tuples, one sub-tuple for each alternate. each sub-tuple is (alternate-unicode, variation selector (or -1), reserved for future=0 now).
Trying to build dieresis with "PreferSpacingAccents" set meant that we tried to build it out of itself, and crashed.
- Also fix so that 0x22EF (ellipsis variant) is built out of centered dot in a spacing mode, while Ldot uses it in a non-spacing mode.
- Merge fonts broken again. This time references didn't work.
Provide a mechanism for loading image files to make menu item icons (instead of expecting the images to live in memory inside of fontforge). Then provide a bunch of these icons so the menus will look more interesting.
Provide some icons
Also update the install procedure to put them in the right place.
Preference item containing a directory from which to read icon files
FF crashed when opening CID keyed fonts with compact_on_open set.
- If fontforge got an end of file in the middle of reading a (corrupt) cff font, then ff would sit there reading endlessly and ignoring the error.
- Off by one error in drawing the large "pixel" rectangles that show grid fit generated.
Werner points out that my instruction glosses are out of date:
- Was following Apple's docs for SCANTYPE, not MS. MS has a number of new values.
- Was using an old convention for accessing PPEM which broke after freetype 2.3.5
- Added the FreeType return for GETINFO.
Featurefile patch from Barry.
- I used to think that the max glyph instruction length field of 'maxp' refered to fpgm and prep. I thought this because there was a footnote (which I now see was for a different field) saying the field also applied to fpgm and prep.
07-June-2008
- New Russian translation of the UI
- Sometimes FF didn't set the message locale directory properly.
- Since FF will crash if you load a feature file when the Font Info window is open for that font, close the Font Info window when loading a feature file.
- New dialog to help users convert an upright font into an italic one.
- New dialog to help users create small caps glyphs.
- New dialog to help users create subscript/superscript glyphs.
- And matching python commands: font.italicize(), font.addSmallCaps(), layer.stemControl()
- Make it clear that the transform dlg from the fontview will move the width of a glyph by default, and provide a checkbox so the user can turn this off.
- Fix various bugs in argument handling of fontforge.askChoices
- Change font.removeGlyph to accept a single string argument to remove the glyph with that name.
- FF didn't like decimal points in the metrics view l/r bearing fields -- even though it would put them there itself.
- Metrics windows weren't being remetricked after a feature file was loaded (nor an afm file for that matter). Nor were they remetricked after lookups changed in fontinfo.
Add to python
- font.revert()
- font.revertFromBackup()
- font.buildOrReplaceAALTFeatures()
Changing a glyph's width from a python script didn't update the metrics window.
- Adding two languages in the same script to a lookup in a feature file didn't work.
- It wasn't possible to rename an anchor class (at least not by the obvious method through the dlg). Attempting to delete an anchor class popped up an error message which didn't provide all its own arguments and so could crash on some systems.
- Better error recovery in feature file parsing.
- Werner points out that since I allow the user to see points in references transformed to their ultimate position, I should also transform the raster.
- Patch by Barry to fix kerning classes (ie. figuring out WHAT glyphs go into a class).
- When parsing a feature file which used a default languagesystem setup, ff only used the most recent script.
- If a lookup contained no data (no subtables, or empty subtables) then when generating a feature file ff would output stuff to declare a lookup, but when there was no content that frame could not be parsed as it would be impossible to figure out the lookup type. Try to avoid that.
- FF did not put contextual lookups on all the lists they needed to be on when loading them from a feature file.
- Sometimes the Open Font dlg opened with the files shifted left so the first characters of the name were outside the window.
- Patch from Barry Schwartz. "include" syntax in feature files didn't work.
- Sort button in the lookups pane of font info didn't refresh the window after it finished (so things looked unsorted even after pressing it).
- When doing a Build Accented on dotted glyphname (agrave.sc, etc.) the accent was positioned using anchors in the undotted base glyph (a rather than a.sc).
- Fix various problems with tt debugging.
- The XUID and UniqueID fields of a PostScript font are deprecated, yet FF has continued to output them by default. Make it so FF no longer does so.
- When outputing an sfd file, ff would sometimes output a truetype spline as a line if it had a colinear control-point. I thought I'd taken care of that, but here's another case which needed fixing.
- Typo when loading the underline position field from a 'post' table. I was subtracting half the underline width. I should have been adding it instead. (Why did adobe use a different definition of the same concept in two places? GRRR).
- It wasn't possible to make the foreground layer invisible.
- When the file chooser bookmark list got too long ff would crash.
I wasn't doing the obvious checks to the sfnt header in font lint. So now:
- Check that there are no duplicate table entries
- Check that there are no overlapping tables
- Check that no tables extend beyond the end of file
- Check that the file's checksum is correct
- Check that each table's checksum is correct
- Check that the number of tables is reasonable and that the binary search header is consistent with the number of tables.
- Check that required tables are present
- Check that certain fixed length tables have the correct length.
Werner would like to be able to debug (truetype instructions) when using non-square pixels (x_ppem != y_ppem).
- Barry wants to be able to close a tab. Add a menu item.
- When a glyph's name changed, I did not update the names in any tabs in the charviews -- so those tabs would stop working after the change.
- Scrollbar in points debug window wasn't set right.
- A. Panov provides a patch. Prefs was losing bookmarks.
- the new release of volt reveals some new opentype tags.
- If we have a glyph named "agrave.sc" or "eacute.sc" then FF will now let you build this as an accented character. It will remove the suffix from then name, and look up the components of the bare glyph. Then for the first component it will search for a glyph named "a.sc" and insert it. For the accents it will use "grave.sc" if present, and "grave" if it is not.
- FF wasn't handling a FontMatrix in the top dict of a cid font.
- Trying to filter for fig files in the Import dlg caused a crash.
- Check for bad OS/2 versions (that is, versions windows will reject) when loading a font. Connect validation's "Points too far" with Find Problem's version. Make fontlint aware of the new validation states. When generating a font we complained about bad os/2 version only if they asked for a validation. Move it somewhere more prominant.
Add two new problems to find
- Points too far apart
- Bitmap advance width different from scaled outline advance widths
(also boxify the Find Problems dlg).
- Add a new validation state: Test that points aren't too far appart (must be within 32767 of each other or we can't output them).
- Try a little harder to get some of the obscure code pages right in the OS/2 table.
- Was getting the first glyph index of OS/2 wrong for OTF fonts.
- If an sfnt contains embedded bitmaps, and if those bitmaps contain a glyph whose advance width is different from that expected by scaling the horizontal advance of the vector data, then windows will only get the correct metrics if the "Instructions modify width" bit is set in the 'head'.flags field.
- If the "changedsincelasthinted" bit got set on a glyph by the unlink/remove overlap flag on a glyph during font saving, then the glyph did not get restored to its original state.
- Doing an Undo in the Guidelines layer didn't work, usually crashed.
- Validate didn't work on CID keyed fonts.
29-Apr-2008
- Validate didn't work in CID keyed fonts.
- Pierre Hanser wants an X Resource (fontforge.CharView.Rulers.FontSize) to specify the font size of text displayed in the info line and the rulers. I have applied his patch, but have made no effort to insure that text will fit in the space allowed for it.
- Hmm. Freetype seems to dislike rasterizing some complex outlines at large pixelsizes in black and white, but seems fine with doing them in greyscale.
- When opening a ttc file (and posting a dlg which lists all the fonts in the file) try to find a fontname in the current locale. We used to look first for English and then anything. Now try: First current locale, then english, then anything.
- Make the Open Font dlg (and similar file chooser dlgs) be customizable, and store that info in prefs. Specifically control whether directories are displayed in alphabetical order among other files, before normal files, or in a separate pane. Also add a bookmark (and back/forward) mechanism.
Add support for opening a font from http & ftp URLs. Can browse ftp URLs, and save fonts back to ftp.
$ fontforge http://openfontlibrary.org/people/Nasenbaer/Nasenbaer_-_Widelands.ttf
- The validation patch broke the save mac family dialog, and then the upload to open font library broke it further.
- When doing expand stroke, it is possible to have two points so close together that there is no data on the curve in between the two. If this happens ApproximateFromPointsSlopes can't do a good job. So be careful of this case.
- Layers change introduced a potential crash in the Embolden command.
- fontimage didn't draw the first line. Add a cgi front end to fontimage so now it is possible to get a font sample of any font on my website.
- In the Display dlg, if you changed the font, or the point size without selecting something, then that change would vanish instantly. Fix that. Also, was a crash bug when mixing a font with a baseline table and a font without one (in the disply dlg).
- Add a command to insert text into a glyph.
(
Element->Insert Text Outlines)
It adds the text outlines directly (instead of a draw command using another font) because most fonts can't include text drawing in their glyphs. Also include a Bind to Path variant. - GLyph lists in kerning classes (in show att) were displayed as ligatures.
- Upgrade to unicode 5.1
- If an sfd file were saved with spiros active, and then loaded into a version of fontforge without libspiro, then bad things would happen. Whenever we check that spiros are active also check that they can be active, and add some warnings for the user to let him/her know that spiros aren't available.
- Add a tile pattern command (if --enable-tile-path) this allows
the user to replicate any given pattern in another glyph.
This could be used to produce a grid of guidelines, or, in
conjunction with
Element->Overlap->Intersec
t it could provide a poor man's "Pattern Fill" (Since Pattern fills are only available in type3 fonts this sort of makes them work for any font type).
30-Mar-2008
Add support for the OpenType 'BASE' table, and to a lesser extent for Apple's 'bsln' table.
Add python scripting (font.horizontalBaseline, font.verticalBaseline) too.
Add support under Show ATT.
Remove the old vertical origin field.
Add the ability to create a dummy 'DSIG' table (one containing no signatures) so that Windows will show an opentype icon for a font with extension 'ttf'
Add support for gradient and pattern fills to type3 fonts (only if
./configure --enable-type3
is specified, of course.Also add support for cliping paths
Make fonts containing images work in pdf output.
Bump the sfd version number. This should have happened in the last release, but I didn't realize it was needed then, thus there will be sfd files with an incorrect version number (2) when it should be 3. However that should not cause the current parser problems.
- New Greek translation from Apostolos
- Updated Polish translation from Michal
- Apostolos points out that compiling on systems without freetype (Solaris boxes) was broken after last months layers patch.
Werner suggested various improvements to Show ATT:
- Lookups should be sorted
- Glyph images should be drawn in more cases (before, just for substitutions)
Patch from Alexey, for better handling conflicts between diagonal and H/V stems.
- Do a more consistent job of handlong curved stem segments. Also collect point data for off-curve points too (may be useful in future for TTF hinting).
- Last month I put in a patch to make sure the lsb as stored in the 'hmtx' table was really the glyph's lsb if bit 1 of the head.flags field were set. Unfortunately I read in the lsb as an unsigned number which shifted negative lsbs off to around 65535. FF sometimes refused to rasterize them. Of course when the font was generated they got truncated back to negatives in the output.
- Add a preference item so that fonts will be automagically compacted when they are opened.
- Add a new preference item (SeekCharacter) to allow users to control which character will be displayed when opening a new font. Normally FontForge displays 'A', but that's a bit latin-alphabet-centric.
- If palettes were not docked, then a complicated series of events could lead to a crash after closing a TilePath (Math kerning, Gradient Fill, etc.) dialog.
- Was not outputting the %%LanguageLevel DSC comment.
- Generating a CID-keyed otf font was broken by the layers patch. (Only the background layer was output).
- Encoding->Add Encoding Slots didn't work for CID-keyed fonts.
- Autoinstructor does more consistent vertical stem placement for mono and grayscale. Advance width scales much better. One downside: letters tend to 'glue' at small ppems.
- When FF read in a pairwise positioning lookup with no change to the pos of the first glyph, and an x change to the second glyph it treated that as a r2l kern pair even if the lookup was l2r. This lead to problems.
- In the Print/Display window all vertical GPOS positioning was diametrically opposed to the direction it should have gone (there was a sign error).
- Print managed to break itself somehow. Print of a font display to ps file (or was it pdf) didn't work. Type3 pdf fonts were broken, last glyph omitted.
- In the fontview the horizontal advance and baseline metrics lines were drawn as if bitmap magnification were 1 (so if bitmap mag>1 they were in the wrong place).
- In the char view, when the active tool is the scale tool, show the scale factors on the info line.
- The default set for control points of a corner point before/after an hv curve point was to have no control point. Make it be the same as a normal curve.
- layers patch broke type3 editing in that: in a type3 font glyphs don't have the same number of layers so it is possible to move from one glyph to another in the char view and have the current layer become invalid.
9-Mar-2008
- Undefined value in the martlett patch.
- A variable was placed on the stack in font info which needed a longer lifetime. This would probably mean that after several remetrickings of that window the jump to OS/2 Unicode ranges in the Unicode ranges pane would appear in a strange color and oddly shaped. I never saw it happen, but it should have. The variable is now static.
- When ff read in a contextual subs by glyphs it would reorder each glyph list (backtrack, lookahead and normal) so that the glyphs were in GID order. So "a b c" would probably come out fine in the lookahead list, but would be reversed in the backtrack, while "c b a" would be reversed in the lookahead). Ug.
- The code which decided on whether to apply a chaining lookup approached backtrack data in the wrong order (so only lookups with either 0 or 1 backtrack entries worked. Which was all I used to test).
- New fonts were created with relative filenames, this screwed up some font searches. Make 'em absolute.
- Deleting something in the guidelines layer probably caused a crash.
2-Mar-2008
Layers
The big change in this release is that every font database can now contain multiple layers. Before this all layers in a font used the same type of splines and there were only 2 or 3 of them.
- Guideline semi-layer -- where all the glyphs of the font shared the same set of outlines, to which points would snap if desired.
- A background layer -- which could contain outlines and also images which could be autotraced into the foreground layer.
- A foreground layer -- which was what the font really looked like, and what went into generated fonts
Now there may be any number of layers, and each layer can contain different types of splines -- so one database can contain both quadratic and cubic data and can store data for both PostScript and TrueType fonts.
In a normal font all glyphs have the same number of layers (this is not true in a type3 font, which each glyph may have it's own set of layers). You may set the number, names and types of layers width the
Element->Font Info->Layers
pane.In the font view you can select which layer is active (and displayed) with the
View->Layers
menu item. You can copy selected glyphs of one layer to another (automagically adjusting the spline type if needed) withEdit->Copy Layer To Layer
. You can compare to layers for differences withElement->Compare Layers...
.In the character view the Layers palette has changed. The things which controlled the visibility of hints have moved to the
View->Show
menu (as have some other entries that used to be in the top levelView
menu). The layers palette solely displays the glyph's layers and controls which layer is active.The
File->Generate Fonts...
dialog allows you to specify which layer is to go into the font. Note that many things remain common: the hints and truetype instructions apply to all layers. GPOS, GSUB, kern, and morx information is common all layers. The outlines may differ in detail, but outlines from which a font will be generated should have the same shape.Add new python stuff to handle layers:
fontforge.activeLayer()
Returns the currently active layer
font.layer_cnt
Returns the number of layers in the font
font.layers
A dictionary like object which can be indexed either by an integer between 0 (inclusive) and layer_cnt (exclusive) or by the name of a layer. After indexing it returns a LayerInfo object. LayerInfo objects have no independant existance, and contain a layer's name and a boolean indicating whether the layer is_quadratic.
font.layers[1].name = "Foreground" font.layers[0].is_quadratic = TRUE
You may delete a layer
del font.layers["Extra layer"]
You may add a new layer
font.layers.add("name",is_quadratic)
M.P. Suzuki requests a way to load the entire 'glyf' table of a ttc. Actually he would like to load all 'glyf' tables of a ttc, but that would cause all kinds of problems (multiple fpgm, prep, maxp, cvt tables, trying to fix up GIDs in GPOS/GSUB/kern/* tables, dealing with fonts with so many glyphs they could not be generated, ...) So the command line now takes an --allglyphs argument, and the scripting open commands now take a value of 4 for the openflags argument to mean this.
- Add a command Points->Make Arc, which is similar to
Points->Make Line except that it connects the two points with
an elliptical arc rather than a straight line. The ellipse is
choosen to run through the two points (obviously) and to be
tangent to the slope of those points. This isn't enough
information to determine an ellipse uniquely (three points and
two tangents being required) so in general there will be an
infinite number of solutions (and it is possible to provide
contradictory input so that no ellipse can be found). FontForge
may not choose the ellipse you had your heart set on. FF will
first attempt to find an ellipse so that one of the points lies
on an axis of the ellipse (this will find a circle if there is a
circle which satisfies the constraints above). If that fails it
will look more generally for ellipses.
(If you hold down the
key when you select the menu item, FF will leave the ellipse it calculated in the background layer. That was a debugging technique but I thought it was kind of interesting and left it in.) Further improvements in calculating active zones for curved segments for autohinging: if the spline is closer to the opposed stem edge at the given point, don't extend the active zone any longer.
If a line's unit vector is close enough to the font's italic slant, then prefer the unit vector based on the italic slant instead.
Added an experimental mode which allows to build glyph data based on a preexisting hint layout and extend it with additional stems.
The rotate tool in char view didn't show the angle of rotation.
- Fixed various uninitialized values
- Make sure the first character in marlett is 0xf020.
- Reinstate the behavior of the symbol encoding that the wine developers depend on.
- Add a scripting flag so that script writers can control whether a font has a symbol encoding without having to use a funky extension. (Wine people don't like having to say ".sym.ttf").
- When building a ligature, ff would mark the first letter with use_my_metrics. That should only happen when building accented glyphs.
- Put in a way for the user to leap easily from Font Info->Unicode Ranges to Font Info->OS/2->Charsets->Unicode Ranges.
- python scripting font.sfnt_names would sometimes crash.
- When a matrixedit is initialized its last visible column (especially if followed by hidden columns) may not be at the edge of the matrixedit. This lead to drawing spurious lines which annoyed Alexej.
- When running simplify on a quadratic contour and the contour doubles back on itself, FF would do an optimization which only worked for cubics.
- Werner tells me that if bit 1 of the 'head'.flags field is clear then I should adjust so that the left side bearing is what is specified in the 'hmtx' table.
- Pdf filter decode didn't work if given an array of filters (not even in the array contain only a single filter).
- FontForge doesn't support pdf encryption which seems to require a license from RSA. Before we'd just announce failure for no reason, now announce that the file is encrypted and we can't read it.
- Improper test for point matching in references (in tt).
- In an un instructed font, the [Default] button in FontInfo->Grid Fitting produces the wrong result (and has since I added support for the new gasp features of ClearType.
- Doing hint modifications caused errant pointers to be used. Often crashing.
- Math strings weren't getting initialized in math kern.
- One of the math constants had the wrong friendly name.
- Michal points out that tooltips in the math window don't get translated.
- TopLeft/TopRight etc. in math kerning weren't translated.
- The transform menu item seems to have lost its shortcut. Put it back.
- When selecting a control point in the outline view, we would always select the next point if both next and prev were in the same place (ie, on the base point itself). But when the point is at the end of an open contour, the one which should be selected is the one which controls a spline (which need not be the next one).
- Oh dear. My original method for storing background layers didn't allow for references (because I didn't put them in the background). But I need them now.
- Label some of the horizontal metrics lines
- Trying to move the top accent line resulted in a crash.
- Drat. FF really wants to set the latin1 codepage bit, even if the user explicitly provides the codepage settings. The wine people don't like that.
- If we have two fonts open, a type3 (multilayered) one and a normal outline, and we have outline glyph windows open from each font, and we move the focus between the glyph windows, then the layers palette will get left behind when focus moves to the other font. (and other more complex senarios when switching between multilayered and outline).
- When loading a feature file, ff would complain if a mark appeared in two anchor classes -- even if those classes were in separate lookups. This meant it got unhappy about a mark which was in both a mark 2 mark lookup and in a mark to base lookup.
- I had intended not to give warning messages about names like "nine.oldstyle" (defined in Adobe's obsolete PUA mapping) when loading a tt font, if such a glyph had a different unicode mapping (or none) than the one Adobe used ages ago. But I screwed up and was generating messages anyway.
- When converting cubics to quadratics, if we had a curved spline where one of the endpoints of the spline had no control point, then we'd get a slope at that point of 0/0. This meant that we tried to put a quadratic control point on top of that endpoint which looked confusing and seemed unnecessary.
- Typo in glyph compare. Caused another crash when comparing lookups.
- Didn't handle NULL tokens properly when reading in a feature file.
- Make it easier to select control points when the alt key is down.
- Add a mechanism for getting default values for private dict entries in python scripts. (Also provide default values now when [Add]ing private entries in Font Info.
- Making class0 editable broke the ability to create a context chaining class lookup.
- The encapsulation for creating libfontforge broke importing a lookup from one font to another.
- Feature file generation omitted a semicolon after (some) contextual lookup rules.
- Nasty bug with references in ApplySubstitutions scripting command.
- Mark classes didn't work.
- Michal N. points out that "Really Use Typo Metrics" should be moved above the typo metrics (or below) but should not be in the middle of them. He also tells me that the internationalized weight classes don't get parsed properly.
- Someone handed me a font with a SJIS encoding cmap. The cmap mapped a glyph to SJIS 128, which isn't a valid SJIS code point. FF got an insane result when trying to convert to unicode and crashed. Add a check against bad code points.
Add two proposed features from the pre-draft of OT 1.6
- Drop Caps
- Character Variants 00-99
Werner wants to be able to select text in the warnings window to paste elsewhere. And he points out some scrolling flaws as well.
- Could not attach lookups to mac feature settings.
- Clean up some display problems in the type3 layers palette and layer info dlg.
3-Feb-2008
- New Vietnamese translation from Clytie
- New Russian translation from Alexandre Prokoudne.
- New Polish translation from Michal N. .
- FF could crash if a cmap subtable contained invalid encoding points.
- Add various new features/scripts/language tags from OpenType draft 1.5.
Add two proposed features from the pre-draft of OT 1.6
- Drop Caps
- Character Variants 00-99
The warnings window didn't resize properly. It didn't let you copy text (ie. a warning) to the clipboard. It should have scrolled with keypad keys (arrows, page up/down, etc). There should be a way to clear the windows so you know that all the warnings are from a given operation. Added a popup menu.
- Fixed a problem in the auto hinter.
- Could not attach lookups to mac feature settings.
- Clean up some display problems in the type3 layers palette and layer info dlg.
Autoinstructor: turned on strong point interpolation:
- Various important outline points are correctly placed between hints' edges.
- Potential benefits for DStem positioning.
- Drawbacks: 2x slower, code generated is now much bigger.
The merge (and simplify) command could produce odd results if the points surrounding the merge had no control points.
- Extend find/replace to handle changing angles.
- The Display/Print dlg would crash when the user pressed the reset button if there were at least two pointsizes of the font on display. Perhaps in other cases too.
- Make shift click in the lookup dialog (but not the subtable part) select all lookups between current click and a previously selected point.
- glyph.addPosSub doesn't work for ligatures or multiple substitutions. It treats both as alternate substitutions.
- Michal Now. points out that there are some strings not marked for translation in cvruler.c.
- FontForge never checked that fonts had fewer than 65536 glyphs. I just blythely assumed I wouldn't have to worry. Well someone handed me a font with 65731 glyphs, and FF treated it as having 195 glyphs. Things got nasty after the 196th.
- Fix a crash in autohint.c and an infinite loop in stemdb.c.
- Font Compare would crash if one font had a lookup subtable which was not in the other.
- Improve the algorithm used to detect reference points for stem edges. Enable snapping "corner extrema" to predefined hints.
- Remove the obsolete Private Dict to CVT table command.
- Michal Now. wants short cuts to change grid fit attributes, so a new sub menu with things like increase point size, change AA, etc. (with shortcuts, of course).
- Patch by Michal Nowakowski. In Show Grid fit not setting the mono bit correctly in freetype.
- Bug in pfm file output.
- If we failed to open a plugin library during init, it would call LogError before the display was initialized, leading to a crash.
- Autoinstructor: If a horizontal stem interpolated between blue zones was very close to one of them, it often jumped beyond that zone in small ppems. This was especcially annoying for serif fonts.
Improvements (I hope) to the ruler tool
- Make it snap to splines (in addition to points)
- Have it draw a line from the start point to the mouse
- If they start on a spline, then include info on the offset in coordinates parallel to the spline and normal to it.
- Provide a "spline length" if the start and end points are on the same spline (instead of just if they were the end-points of the spline).
In python scripting contour.reverseDirection only worked on closed contours.
- If you click wildly in the cvt editor it would eventually go into infinite recursion.
- If there were no free anchor class then attempting to add an anchor point would pop up the Mark Classes pane of Font Info (rather than Lookups). This is sufficiently close to Anchor Class as to be very confusing.
- Make label gadgets (and buttons which are also labels) handle multiline text.
- If the user closes the font info dlg when there are mark class dialogs floating around then close them too (there was code which was supposed to do this, but it didn't work).
- Try to make it clear in the Mark Classes pane of the Font Info that mark classes are not anchor classes. Someone got confused...
- Fix some bugs in parsing mark anchors in feature files.
- When adding an hvcurve point into an existing spline it behaved like a curved point and laid parallel to the spline rather than being either horiz or vert.
- FontForge uses floats (which have ~24 bits of precision internally) to represent coordinates. Type2 fonts use a 16.16 fixed notation, which means that we only represent coordinates <256 accurately. This will cause slight errors during output and input of a font. Unfortunately, due to the rel-rel nature of postscript these slight errors accumulate. So instead, when loading and saving a Type2 font use double precision temporaries. This should mean there will be no errors to accumulate. There will be slight errors when converted to SplinePoints, but these errors will not accumulate.
- Check several adjacent splines when detecting active zones for curved segments and thus make the algorithm less dependent from the number of additional points on a contour and their exact positions.
- Fix a number of problems that -pedantic complains about.
- Some mnemonics in the Element menu are used for two items. Clean it up a bit.
- Add a "Find Problems" for non integral coordinates. Change the "Ref with bad ttf transformation" so that it checks for integral coordinates too.
- the glyph.validate function in python was marked as taking NOARGS in the method table, but, in fact, does take arguments.
- Oops. Validate used to complain if the StemSnap[HV] array were missing. But that's perfectly ok.
- Be more lenient when closing a path (when reading in a type1/2 font)... we can get rounding errors.
- Add a little LogError to let the user know if there are sfnt tables we ignore.
- Deep in the heart of Find Problems check for bad contour direction, was a bug where it looked at the wrong spline.
- Just as it is possible to have things in 'morx' that are not in 'GSUB', it is possible that a 'GPOS' table contains no kerning information but a 'kern' table does. We used not to read 'kern' if we had 'GPOS', be a little subtler and check for the presence of a 'kern' feature inside 'GPOS' before deciding whether to read the 'kern' table.
- The anchor control dialog didn't work for mark to mark anchors when looking at a base mark.
- When a font contained glyphs with multiple encodings, then ff would produce bdf files with a char count which matched the # glyphs, not the number of encoding slots used.
- In a compacted cid font, the status line (containing unicode, unicode block/name, etc) was junk.
- Barry wants to be able to mark that it's ok for a spline to have intermediate extrema.
- The []TeX Table checkbox was always disabled in the save font dlg.
- The DejaVu people want to be able to associate a comment with a cvt entry.
- Find Problems->ATT->Missing glyph name complains about the
special string
which I used in Apple lookups to represent the "Delete Glyph" action that apple supports and OT does not. Don't complain about this any more. Add a problem which will look at the glyphs a lookup is active for, and then checks the script of each glyph against the scripts attached to the features which invoke this lookup. If the script doesn't match anything, then complain. - If a font contained an empty anchor class (having either no base glyphs or no mark glyphs) then when dumping out the font subsequent anchor classes got the wrong data associated with them.
- Barry wants non-integral hints.
- Barry points out that Scale To Em doesn't scale the guidelines. Barry also complains that spiro points are rounded. This is more debatable. The bezier conversion will put bezier points where there were spiros, so if we don't round the spiros we get non-integral points. But if we do round the spiros we mess up the splines. Hmm.
- When complaining about a bad class in a mark (GPOS) sub-table, specify the name of the offending mark if we can.
10-Jan-2008
- Fixed a crash bug in Auto Hint
- Replaced the Short Cut to AutoInstr
- In Font Info->Lookups, added to the lookup tooltip to show what contextual lookups used the current one.
9-Jan-2008
- Fix some problems with AAT. Mutually exclusive features in the chain didn't get the right OffFlags set. (and didn't work).
- Add DHint support for native & python scripts. Prevent users from specifying incorrect unit vectors for diagonal hints added via scripts. Also use stemdb.c to calculate active zones for normal (horizontal and vertical) hints added via scripts.
- Remove my original (and not very good) auto instructor. Clean up the docs to remove references to how bad it was.
- Add the ability to store a fontlog in the sfd file. Available to python scripting. A way to save it to FontLog.txt when generating a font. A way to modify it before generating. Normal access through Font Info.
Change the PfEd table so that the font comment is in utf8, and the glyph comment subtable too.
Add subtables to hold:
- Names of lookups and lookup subtables and anchor classes
- Guide lines
- Background and spiro layers
- Font Log
It used to be that when a font had both 'mor[tx]' and 'GSUB' we would only read 'GSUB'. But Michel Boyer wanted to read both. So... read 'morx' after 'GSUB' and if we find a feature/setting that looks as though it corresponds to an existing OpenType lookup (which we can convert to a Mac format) then skip that feature/setting, presuming it to contain redundant data. This is a finer grain approach, but similar to, the previous one. There we skipped the whole table, presuming it redundant. But in CharisSIL the morx table has a lot of functionality orthogonal to GSUB. So we must parse both.
- The 'feat' table was being output in the wrong order. Features were linked together in several ways and 'feat' followed the wrong field.
Two related bugs that Charis SIL invokes:
- This font has a contextual substitution which uses class 0 and replaces it via a nested lookup. But my feature file output could not handle class 0 (since it isn't really specified) and would crash.
- However, in this case class 0 was specified by the coverage table (we fixed that earlier but just for kerning classes). So now fix for contextuals.
Auto recovery was broken. Ever since I put in the code to ask the user what to do with a recovery file (It always recovered into a new file).
- When FF opens a char window on my screen it has a bad habit of opening it at 40% magnification. Which means mouse clicks give things either at em or at half me positions. That's bad. Don't want the default behavior to create lots of .5 coordinate values. Make the window open at 33% instead.
- FontForge warns the user when a glyph's name does not match its unicode encoding. But in the past it would do this for glyphs with multiple encodings even if the name matched one of the encodings. Fix that.
- When FF uses doubles internally, it still outputs float precision into the sfd file. Fix that.
- Still said "Tangent" rather than "Constraint" in points menu when in Spiro mode.
- Ben Laenen of Deja Vu says it would be nice if sfd files stored truetype instructions as recognizable text rather that squirrily ASCII85 encoded binary data. Sounds reasonable. Might as well store 'cvt ' and 'maxp' as numbers then.
- Remove some deprecated DStem code. Also move CVNumForePointsSelected() to charview.c and make it static (not used anywhere else except that file).
- Sometimes the pointers to libspiro didn't get initialized.
- If a font had no private dica and one tried to put something in it from python, ff would crash.
- Alexej points out that my use of iconv was broken on many systems where UCS-4 is big endian on a little-endian machine.
- Use freetype to rasterize the fill blit in the char view.
- In search_edge, an array subscript was sometimes -1?
- Previously I forgot to mention Alexey's changes in DStems hinting code.
- Simple optimization for blue zone hinting - cupped serifs should benefit most.
- Update copyright notices. (add 2008)
- Oops, typo in python menu code.
There is now an incomplete fontforge which uses the gtk toolkit.
$ ./configure $ make $ make install $ make fontforgegtk $ make install_gtk
About all it can do is open a font and display it. If a menu command does not require a dialog then it might work. There are probably scores of bugs even in the little bit that supposedly does work.
I think the open dialog is extremely ugly. That's not my fault, that's gtk's widget. The open dialog is far less functional than the one in the gdraw fontforge -- I can't figure out how to enhance it.
Switching to a new internal representation of diagonal stem hints.
- Add a mechanism to check that the executable has been configured to match the library. And include a library date stamp as well as an executable stamp.
- In the metrics view, if I switch from outline view to bitmap view (by selecting a strike by pixel size from the view menu) then ff would crash.
- Cleanup the library executable interface a bit more.
- Minor tweaks to fontview.
- Alexey suggested improvement for HStemGeninst().
- Added optional experimental code for interpolating strong points.
- Barry Schwartz wants to be able to set the "don't autohint flag" from python. I'm calling it "manualHints" though.
- Barry Schwartz points out that the simplify flag "setstarttoextremum" is incorrectly documented. Fix that.
- In HStemGeninst(), new positioning method gives bizarre results for overlapping stems. Added fallback to old method.
- Make it obvious that the Print/Display dlg HAS a menu.
- Crossland wants a way to insert random text into the Print/Display dialog.  (Invoked by the popup menu in the dlg).
- Exporting spiros to a plate file produced garbage if any spiros were selected.
- The Print dlg tended to crash if you did much editing in it.
- When switching to spiro mode on an empty glyph (or perhaps the first glyph in a new font), FF would complain: Internal Error: Character out of bounds in bitmap font 0>=0
- Oof. The math stuff doesn't work if device tables are disabled. fix it.
- Fix some problems with configuration modes I don't use. Correct some pointer arguments which differ in signedness.
- If lines are attached to both sides of a diagonal stem, then prefer the longer line's unit vector for this stem.
- Fixed snap_to_blues(): it used to mess global accuracy setting up.
- Fixed finish_stem(): it did not mark edges of previous hints as done.
- CHanged HStemGeninst(): it now tries to interpolate HStems within blues when possible.
- Dave Crossland points out that ff didn't compile if --without-native-script were set.
- Trying to change control points with the point info dlg on hv-curve points didn't work.
- Add the ability to insert a list of words into the metrics view.
10-Dec-2007
- Redo the internals of fontforge to separate the core font engine from its dependance on gdraw, and stuff all of that into libfontforge. So libfontforge no longer needs gdraw, and can be used to build another user interface with a different widget set. In theory.
- Add the ability to insert a list of words into the metrics view.
- If a font has a variant selector 'cmap' subtable, and has some unnamed glyphs then base names on the information found in the vs subtable as: (u0020.vsFE00)
- If a font has a 'MATH' table and some unnamed glyphs then try to guess names for glyphs refered to in horizontal/vertical glyph construction tables.
- When outputing horizontal glyph variants in the 'MATH' table I used their vertical size rather than their horizontal size.
- Further refinements to the concept of lines: all points assigned to the same line now should have filled space at the same side. So what we used to call lines would be better called edges now. Also the handling of bounding box hints has been improved: all relevant points are now assigned to a BBox stem hint (not just one point from each side).
- Add a user interface to control file recovery (used to be only a command line argument).
- Patch by Barry who points out an extraneous line in the font iter by search.
- Barry points out that there is a disconnect between the docs and the program about the "spiros" member of a Contour python object. So correct the docs to read "spiros", and change the program so it will accept "spiro" as well as "spiros".
- Add the ability to name contours, primarily for guidelines. Add python support for the contour_name.
- Add support for reading Apple's old sfnt wrapped CID format (basically the same as the sfnt wrapped 'typ1' format.
FF crashed on Nastaliq Navees from SIL.
- It has no unicode cmap (which ff handled incorrectly)
- It has cross-kerning (which ff doesn't handle, but still died while explaining that it didn't handle it)
Use routines from stemdb.c to generate active zones (or stem instances) for manually added hints. The old algorithm is still used when reading Type 1/OTF font files.
- FontView -> Hints->Clear hints did not set the hints changed bit.
- Erik van Blockland points out that python glyph.addPosSub doesn't check for duplicate entries and will blindly add something when it should be replacing it.
- Also added a short cut so that it is posible to specify simple kerning by typing one number rather than requiring an additional 7 zeroes.
- Prevent some redundant stem chunks from being generated.
- Both Adobe Acrobat and Apple's Preview exhibit what I consider to be a bug. According to the PDF reference manual, if an Encoding dictionary is not specified for a font object then the built in encoding will be used. But both these programs reencode to AdobeStandard and do not use the font's built in encoding. GhostScript agrees with my interpretation and does not reencode. However, they ain't gwana change, so I must. Always dump out an Encoding dictionary even when it shouldn't be needed.
- Lines are more actively used: stems now have 'leftline' and 'rightline' properties, and for diagonal stems the stem unit vector is always set equal to the unit vector of the line corresponding to the left edge of the given stem;
- I no longer attempt to calculate "active" zones for bounding box hints (they usually don't correspond to any actual glyph features and thus look ugly). So now only edges of such hints (without any active zones) are displayed in the charview;
- diagonal stem detection improved (some checks were too strict and actually oriented to HV stems);
- the 'blue' property is now used not only for ghost hints, but also for regular horizontal stems. This may be useful if I ever implement an autoinstructor based directly on the stem detector;
- glyph data initialization has been separated from stem detection and put into a separate routine (a first step for unification of algorithms used to calculate stem active zones).
When doing a print sample to pdf, the second page came out in times bold rather than the user's font.
- I think setting a compact encoding could overflow an allocated string array.
- I was setting the Regular bit of OS2.fsSelection if the weight class was 400. I probably should have used 500 instead. Or maybe both. Let's try both for now.
- If a ufo font did not have a lib.plist file (and python was enabled) then ff would crash on loading it.
- When importing an eps file, ff did not turn off the "Bitmap-only" flag. This means that new fonts composed entirely of eps files would be treated as bitmap fonts (sometimes).
- Moving quadratic control points with the pointer is broken (again).
- Metricsview would crash if you deleted a character and then clicked in one of it's textfields.
- Fix typo in stemdb.c
- Add a Select->Open Contours command.
- Add some serbian text (to the built in print samples).
- Update the location on the charview info line when dragging out a guideline.
- If a glyph had a unicode encoding for one code point, and a name which mapped to another, then double clicking on the other code point would cause fontforge to provide a reference to the base glyphs from the new encoding slot. But only in the current encoding map. In other words I forgot to set the AltUni field.
Some people have though winDescent should be a negative value for things below the baseline. So make the sign of the various descent fields explicit in the corresponding popup messages.
- Typo Descent: Negative
- Win Descent: Positive
- Hhea Descent: Negative
If a user edited a glyph in spiro mode, and then did something in the fontview ehich caused the spiros to be removed (Lots of things: Overlap, Expand Stroke, Embolden, ...), and then did a Round to Int (and perhaps other things) from the font view, then FontForge would crash. It expected to find spiros in a glyph marked as being edited in spiro mode, and was surprised when none were available.
- Dave Crossland doesn't like having "..." at the end of window titles.
- Back out the Add Extrema in spiro mode patch. Turn off display of extrema in spiro mode (and of Points of Inflection too).
- Add an autowidth command to the python interface.
- contour.lineTo and friends didn't work (didn't increment the contour's point count).
- With SnapToInt preference on, and at high magnifications, a mouse click would often be snapped so that it was well outside the fudge region. This meant that clicking on something might not select it.
10-Nov-2007
- Another bug when loading feature files
9-Nov-2007
- Introduced Raph Levien's Spiro curves. Please download libspiro before using fontforge.
Deal with things that got deprecated as the mac moved from 10.4 to 10.5
- NSAddImage and family have been replaced by dlopen
- the old mechanism for referencing a resource fork from POSIX "foo/rsrc" has changed to "foo/..namedfork/rsrc".
The new stuff all worked as far back as 10.3 -- but FontForge source is no longer compatible with 10.2.
- In a truetype font, if a substitution lead to an unencoded glyph and the cursor hung over the substitution long enough to invoke the popup, then we'd generate a tiny font containing just the unencoded glyph, we'd complain that there were no encoded glyphs, we'd dismiss the popup, we'd generate the glyph image, then we'd try to free it with no free function because the popup was dismissed.
- Merge Feature File didn't actually merge things in, it forgot about existing things -- which caused problems for kerning classes which get stored in two lists.
- Allow people to order entries in the PostScript Private dictionary (in Font Info)
- Give the user control over how much arrow keys accelerate when holding down the Alt (Meta) key.
- People want a Snap To Int preference item.
- Simplify sometimes ignored points.
- People expect to be able to drag guidelines from the rulers (because everyone else does that) and don't want to bother to learn FF's mechanism. So make that possible.
- Dave C wants to be able to use Cntl-Tab to switch tabs in the charview.
- If freetype gets a single point open contour in postscript mode, it simply skips the contour (does not call FT_MoveTo on it). This screwed up my attempt to match the results of freetype with the actual splines and caused a crash.
- Glyphs with no contours didn't set widthset when read from ufo and so were viewed as empty.
- FF was expecting descent to be a positive value in a ufo (it is in ArialBlack.ufo), but it seems to be negative in most UFOs.
- Erik wants the creation order of contours preserved when reading a glif file.
- Oops. glyph/glyphPen types got the wrong names in the fontforge python module. (interchanged)
- remove the Elide command. (There's no reason to use it, Merge is always better, it just confused people.
- Refrain from simplifying an order2 point where the second derivative changes sign.
- If a font has no "fullname" field (and fonts aren't required to have one) ff would crash when generating the font.
- Ability to Import/Export Raph Levien's plate file format.
- If I moved a corner point adjacent to a tangent, the slope on the other side of the tangent did not change.
- Exporting a glyph to BMP or PNG was broken, probably since the addition of python import export filters.
- Add a Strftime scripting command to the legacy language.
- Werner points out that I misspelled "persistent" as "persistant" in many places, including python member names. Correct that. (but leave the old, misspelled membernames around but undocumented in case anyone has been mislead by my previous documentation.
- Add new python stuff to provide access to spiros. The fontforge module has a new method -- hasSpiro() which returns whether we've got access to libspiro or not. The module also has a bunch of numeric constants defined spiroG4, spiroG2, etc. for use in the The Contour type has a new member -- spiros which is a tuple of spiro control points (which are themselves tuples: x,y,type,flags, where type is one of the numeric constants above.
- People would complain that the python interface would give them "Invalid second order spline" but no one bothered to give me a test case. I hope I've tracked it down now.
- Add a "problem" to check for glyphs whose bounding boxes are: too tall, too short, too wide, too much to the left.
- Used to be I had many problems checked by default. Best to turn them all off.
- Oops. FF was using Py_BuildValue("s") on something that was already a python string.
- Adam Twardoch suggests that codepoints in the PUA have their script determined by their name (rather than just returning DFLT). Since Adobe used to put things like "a.sc" in this area, that seems a good idea.
- FF marked almost all fonts with the Oblique bit in the OS/2 table.
- Patch from Alexej for his diagonal hinting routines, fixes an ugly problem reported by Max Rabin.
- Various fixes in stem detection. In particular added a concept of "base start" and "base end" for curved segments of stem edges, allowing to determine more precisely if an active zone (which merges left and right segments together) should actually be considered "curved" at its
- Make implied points to be ignored when determining a diagonal stem validity.
- Swith the timestamps to GMT. Prior to this all timestamps have been PS/DT, but now that other people are making source changes GMT seems more sensible.
- Max Rabkin supplies a patch to let python import plate files.
- A couple of new name table string ids: WWS Family & WWS Subfamily. Provide reasonable defaults for the wws* ttf names.
- Correct the list of dutch font styles.
- Most of the items in the popup menu of the lookup pane didn't work.
- FF wasn't loading python init files from ~/.FontForge/python
- When I fixed mark to ligature positioning I broke the other three types of anchor positioning (to base, to mark & cursive).
- If you pressed the [*] Default check box in the Font Info->OS/2->Panose area, the values didn't go back to the defaults.
- When copying glyphs from one font to another ff would sometimes use a temporary value of -2 for the orig_pos. This meant that reference fixups didn't work when looking at those glyphs.
- Drat. Typo when copying a contextual lookup from one font to another caused a crash.
- Add a new point tool which creates curved points which are always either horizontally or vertically oriented. (I call 'em hvcurves)
- Use ~/.FontForge instead of ~/.PfaEdit
- I'm told there was a typo in my Bulgarian text for the Print/Display dlg, and that this should fix it.
- Get some proper Belorussian text.
- Several bugs in my mark attachment routines. There was an assumption that only one mark could be attached to a base glyph per sub-table. This is wrong for mark to base, in that there can be several anchor classes per subtable. It is even worse for mark to ligature where there can be many marks per anchor class (one per ligature position).
- Having done this make sure we don't use the same anchor point more than once.
- What glyph class should be used by default if a glyph is both a ligature and a mark? Probably mark. There are greek accent ligatures, and its probably more important to treat them as marks than as ligatures (I don't know any fonts which actually "skip ligatures" but there are lots which "skip marks").
- Select->Next/Prev Point always selected the first point. Select First point did the wrong thing.
- Pressing the [Refresh] button could crash ff if a "FontData" depended on another (same font).
- Someone (John ?Morrison?) requested a way to access fonts by numeric index rather than font name when opening font collections like ttc files or dfonts.
- * I no longer have separate l/lpotential and r/rpotential pairs Â of point data objects. Instead I use just 'l' and 'r' accompanied by Â boolean flags indicating their state as "potential". This greatly Â simplifies some tests and makes the code more readable. * When I am adding a chunk based on a single point to an existing stem, Â I always mark the second point as "potential". Later this state can Â be changed if check based on the second point produces the same chunk, Â or at least doesn't produce another (conflicting) stem. Again, this Â simplifies some tests which accompany adding new chunks and makes the Â result of the stem detection less dependent from the order in which Â the points are processed. * I allow assigning a point to a stem even when its distance from the Â stem edge is larger than standard dist_error_hv or dist_error_diag, Â if only the difference between maximum possible deviations to the Â both sides of the edge doesn't exceed the double dist_error_* value. Â This prevents us from adding several almost-coincident hints, actually Â controlling the same stem. * I have added a function which performs some stem normalization, Â sorting chunks by point coordinates. For HV stems it also can Â slightly modify the positioning of the stem edges preferring the Â coordinate which is closer to most points assigned to each edge. * There is now a special function used to compare conflicting stems Â and decide if one of these two should be preferred, or they both are Â worth to be output. * The detection of serifs and similar elements, which, not being Â exactly horizontal/vertical, still have to be marked with a HV Â stem, has been improved (two points, forming a serif termination, Â now should not necessarily follow each other).
- Drat. If we had libjpeg and not libpng we'd get a complaint about an undefined symbol.
- Add "Mismatch Unicode & Name" to the Find Problems dlg.
- There are ttf files in existance where glyph names do not match unicode code points. Tons of fonts use ".notdef" for glyphs other than "GID=0". Other fonts use ASCII glyph names (space, exclam, numbersign,...) for glyphs in other scripts (Kedage-n.ttf does this).
- In the past, ff has felt that the presence of a zero-width ".null" and "nonmarkingreturn" glyph meant that a font was not mono-space. In the future ignore these glyphs when determining whether a font has fixed width.
- in some rare cases we got an uninitialized value in spline->line display conversion.
- Up the size of the File->Recent menu to 10, and include non-sfd files in the list.
- The routine to create an apple state machine from a set of OpenType ('init','medi','fina','isol') forms would often crash.
- When scaling BlueValues, or other arrays, a trailing space after the last number and before the ']' was considered an error. If found then ff would not scale that entry.
2-Oct-2007
- Add
Edit->Select->Autohintable
- Typo in parsing cmap format=6 subtables could cause a crash (or eccentric behavior)
Can build fontforge so that it is a python extension (as well as embedding python in ff).
$ ./configure --enable-pyextension
If a tt spline had a control point on top of an on-curve point we would lose track of it when generating the font.
- Add support for the Uncode variation subtable of the 'cmap' encoding table (format=14).
- add xdg-open to the list of "known" browsers.
- Patch from Torsten Bronger. Got the args wrong in (python) font.glyphs.
- Fabrice Popineau & Taco Hoekwater point out that in the featurefile output routines I was using a single backslash inside a printf string. The intent was to output a single backslash. But I actually need to quote the backslash with another to do that.
- If a text string were extremely long it could overflow the 16 bits allowed for a width in a metrixedit column. Truncate to 32767 in that case. Still can't scroll over the whole thing, but editing it will pop up a better view which will allow it all to be displayed.
- If there are no slots in the current encoding, then clicking on the encoding menu caused a crash.
- Give the user control over the code pages/unicode ranges fields of the OS/2 table. Add python scripting commands to access them too.
- When the user renames a glyph then things dependant on it should change too. So if any substitution (or pairwise positioning) refers to the old name, change it to refer to the new. If any contextual change refers to the old name change to the new. If any class of glyphs (kerning class, apple state machine, contextual by classes) refers to the old name change to the new. More debateable: if we change "f" to "u0066" then change "f.sc" to "u0066.sc" and "f_f_l" to "u0066_u0066_l" (and recurse on those name changes).
Guess at the meaning for GDEF glyph class component glyph:
- Something not encoded
- Something which is refered to by at least one other glyph (as a reference)
- Something which is not generated by GSUB
Further improvements to the auto instructor.
- Make the [Guess] button in FontInfo->Private active when BlueScale is selected. (and make it work too).
- Oops. A font member in python was mis-named. Documented to be "loadState" was "loadStyle". Corrected to match the documentation.
- Some of the 'maxp' checks in the validator were off by 1, so fontlint would report errors on the glyph with the maximum value.
- Validator was checking non-composite glyphs against composite boundries.
- Barry Schwartz points out that I should validate the PostScript Private dictionary (Check that entries have the right types, check that BlueValues: has an even number of elements, is in order, that pairs are separated by bluefuzz*2+1, not too big for bluescale etc.).
- FF would crash when building accented glyphs from unicode data that included a space as the base glyph.
- Torsten Bronger points out that "import" is a python keyword and can't (easily) be used as a member/method name. So change the glyph.import function to importOutlines.
- Patch by Mathias Kilian OpenBSD needs an include file linux doesn't (or rather that linux imports in another include file) declaration statement mixup.
- Patch by Michal Nowakowski to disambiguate some strings and to make sure some others get translated.
- Add
17-Sept-2007
- Patch from Daniel Johnson. FF didn't compile --with-regular-link
- And FF didn't compile if it had libpng but not libjpeg
- Added some warning messages when doing AutoInstr so that if a font does not contain a private dictionary, or if none of the selected glyphs contain hints, then let the user know s/he isn't going to get very useful instructions.
15-Sept-2007
- Added the ability to upload a font to the open font library. (You need to have created an account with them first).
- Further improvements to the auto instructor.
- When all glyphs are selected and the user auto-instructs, then FontForge will clear any legacy tables ('fpgm', 'prep' and 'cvt '). The old values will be of no use, and they just get in the way.
- Add a Edit->Select->Select by Script command Make the Select by Name take a wildcard (so you could select "*.sc").
- ApplySubstitutions still had problems. Caused crashes in a font with instructions.
- If one used the metrics view to create a kerning lookup then: there would be no 'kern' feature in the feature list yet, and the display would randomly lose track of kern pairs and then create new ones. Very confusing.
- Hmm. In some cases Merge Fonts didn't copy over lookup info. Add the ability to merge cross-font kerning pairs (in case the two fonts being merged have the same glyphs for those which are in both fonts).
- Provide a mass glyph rename menu item.
- The [Merge] button in Font Info->Lookups was disabled when two subtables in the first lookup were selected.
- If a glyph ended in a suffix (one.superior, etc.), then changes to that glyph were not reflected in the fontview.
- Add the ability to Populate a lookup from the selection (in the lookup sub-table dialogs) Do a better job of providing default values for single substitutions & positions.
- In the Print/Display dlg, deleting something so that the next line was blank caused ff to crash.
- The Encoding->Make From Font menu item should be disabled if the encoding is not custom.
- Fixed a system specific crash in the BDF Info window.
- Major rewrite of tilepath. Now has initial, medial, final & isolated tiles which it will use depending on the circumstances. No longer uses the clipboard, but you can draw the tiles in the dlg.
- In Italic/Oblique fonts (those where the font has an italic angle specified) make the center in width command correct for the italic angle.
- Round to Int didn't round anchor points.
- The Control Point Info window could wander off the bottom of the screen. I was very carefully calculating its position -- and then not using the result.
Inkscape stuffs bitmap images into svg files using the data URI data:
, (see IETF standard RFC 2397) So, I'll support this now as my only way of handling type3 style svg fonts with embedded bitmaps.
The standard points out that URIs are limited to 1024 bytes, but I don't pay any attention to that restriction, and will stuff arbetrary sized images into these things.
The code that set up python import/export filters did not put an end of list entry after the last one. Sometimes it would be NULL (correct) and things would work and sometimes it would be garbage and things would crash.
- Drat. In the outline glyph view, the Import command didn't set the filter properly when you changed the import type.
- Extend fontforge to keep track of errors encountered when loading 'sfnt' files, and then have fontlint complain about them. Also extend fontlint to do validity checking in glyphs against the 'maxp' table. (This won't matter when editing fonts, as ff will fixup the maxp values when it generates the font, but there might be some existing fonts with buggy 'maxp' values).
- Oops. When changing the weight of a glyph and retaining the counter sizes, fontforge would push two entries onto the undo stack rather than one. (So the user would have to do Edit->Undo twice to get back to where s/he started from).
Added several new python methods to font.
- find(contour) will search the font for all glyphs containing contour and return an interator on that set.
- replaceAll(srch,rpl) Will search for the "srch" contour/layer in the font and replace it (each time it occurs) with the "rpl" contour/layer.
- glyphs(type) returns an iterator over all glyphs in the font. If present type may be "GID" (default if omitted) or "encoding" and it indicates the order in which the glyphs will be returned.
Added some new members to glyph:
- encoding -- returns the glyph's encoding in the font
- script -- returns the OpenType tag (a 4 letter string) of the script of this glyph.
31-August-2007
- New traditional Chinese translation of the UI by Wei-Lun Chao.
- Updated Vietnamese translation by Clytie Siddall.
- Removed the old MetaFont command (which didn't work) and replaced it with a styles menu (incorporating the old Effects menu, and a command to change weight, to condense/extend, and to oblique. Added python scripting commands {font,glyph}.{changeWeight,condenseExtend}
- Lots of new work on the truetype autoinstructor by Alexej and Michal.
- Add a validation dialog which can be run just before generating a font.
- Try a different algorithm for approximating splines by line segments (for drawing them in the outline glyph view and elsewhere). This one should show symmetry better.
- Provide the ability to ask freetype to rasterize glyphs without hints in the Print/Display dlg (even if the glyphs have hints, rasterize them without).
- Oh dear, rasterizing stroked fonts only worked if multilayer was defined.
- Try to improve display of stroked fonts.
- When stroking splines don't let miter joins grow excessively.
- FF would remove instructions from glyphs that had at least two contours the first of which started with a control point.
- Add a short cut for Hide Grid in the metrics view.
- Python 2.5 initializes itself differently from Python 2.[34]. 2.[34] delay the init until an import happens, while 2.5 does it at start up. I just assumed that when I called Py_Initialize that it did so. This led to a crash on 2.[34] when I tried to use my types before the user had tried to import fontforge.
- Further improvements to tile path.
- When moving a control point in a ttf font where one side of the cp was a real point, I would allow an implicit point on the far side of the real point to become real.
- When dragging truetype points around, adjacent implicit points would remain where they were (and not be implicit any longer).
- FF would randomly crash after removing a lot of glyphs.
- The knife tool would not cut a contour if it landed on a point.
- Trying to add a stylename to the size pane of fontinfo generally caused a crash.
- All blank lines in the display dlg had the same line spacing as that of the first character displayed in the dlg.
- I don't think feature files where handling classes defined with '-' properly.
- Read the "lib" structures from UFO/GLIF files into our python persistent data. (And write our persistent data out if it's a dict).
- Add the ability to call hooks (python functions) when various fontforge events take place.
- Make fontforge's basic types (Point, Contour, and Layer) be picklable so they can now be saved in an sfd file.
- Oops. With the inclusion of the library check argument, ff would not compile if NODYNAMIC were set.
- FontForge now stores the "userdata" python members into the sfd file as pickled objects. (FontForge's own types are not currently pickleable).
- Add the ability to mark a glyph so that just before being saved its references will be unlinked and we will run remove overlap on it. This means the user can work with the references (and get the automatic updating they confer) and still not have a self-intersecting glyph in the output (think Aring, Ccedilla, Eogonek).
- Create a fontlint script file.
- When dumping both apple and opentype bitmap tables if there were a BDF table, then we'd get garbage for 'bloc'/'bhed'.
- Add some user interface commands to python, and more importantly, add the ability to create menu items which will invoke python scripts, and the ability to add import/export conversion filters (again, python scripts).
- Counter hints for LCG glyphs came out wrong if autohint had not been applied first.
- Counter masks were not read out of sfd files properly.
- Selecting a counter mask in Glyph Info caused FF to crash.
- The Execute Script dlg would sometimes complain about invalid scrollbar size when it got closed.
- AddAnchorPoint (scripting command) should be prepared to cast real args to integers.
- Just as I needed a special "in use" pass of GSUB when reading from a TTC, so I also need an "in use" pass of the MATH table.
- All this time and I've mapped "nonmarkingreturn" (GID=2) to Unicode+000C instead of Unicode+000D. I'm a twit.
08-August-2007
- Support for MicroSoft's new 'MATH' opentype table. Element->Math Info.
- Michal Nowakowski and Alexej Kryukov have improved truetype hinting.
- kerning display is off in a pairwise lookup window if a y position adjustment were requested.
- When reverting a compacted font ff thought the font was compacted even when it was not.
- Make some effort to retain context in the fontview when changing encodings.
- ff scripting command CopyReference() was broken.
- Werner wants little popup windows in show att. Give him some for substitutions.
- If you examined a kerning pair subtable (either with glyph info or from double clicking on the subtable in the lookup pane) and then pressed [OK], and then generated an afm (tfm, old-style kern table, etc.) you would lose all the kern pairs you examined.
- Patch by Barry SCHWARTZ to feature file output on 64bit machines.
In freetype 2.3.5 the binary layout of the execution context changed. This means that if ff is compiled against a 2.3.4 library it can't debug truetype if linked with a 2.3.5 library (and vice versa). So put in checks to see that the library version matches what we expect.
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.
Patch from Barry SCHWARTZ. python fontforge.font.addPosSub was expecting its args inside a redundant tuple.
- New Vietnamese translation from Clytie. Also some spelling corrections in the original messages.
- Patch by Barry SCHWARTZ to lookup/subtable comparison.
- If a metricsview was open, then creating a new glyph slot would potentially screw up memory and sometimes crashed.
- Edit->Merge (and simplify) still have bugs.
- Fix two memory leaks in the metrics view (one was huge).
- If freetype failed to rasterize a glyph, then we would fall back on returning a bitmap image from our own rasterizer -- even if we asked freetype for a greymap. this caused problems when routines expected byte data rather than bit data.
- If we were given a cff (otf) font, with a bluevalues array which ended in 0 (as [-20 0]) then we would omit the final zero ([-20]).
- Outputting extension subtables appears to have been broken.
- The code which was supposed to detect two glyphs with the same set of kerning pairs and use the same data for them didn't work (forcing us to get an extension table which also didn't work).
- Add some more checks against non-BMP characters when drawing text.
- For first characters in the kern pair dlg, when editing class 0, the [Edit] button was enabled but did nothing. Should work now.
- ff could crash if it tried to create a popup image of the
line in the substitution pane of Glyph Info. - Horizontal Scrolling in the matrix edit widget sometimes forgot to move the column labels.
- Add glyph name completion to lookup subtable dlg and glyph info panes.
- addKerningClass didn't parse its arguments correctly.
- Drat. When printing full page glyphs to a pdf file, the glyph was shifted up by almost the full page and we got a second (and incorrect) title.
- MS proposes two new feature tags with it's new 'MATH' table.
23-July-2007
- I have merged (and substantially rewritten) the Print and Display Dialogs. There is now only one menu item (Print) which (vaguely) the old Display dlg except that it can now be printed. The text area widget now supports OpenType features just as the metrics view does. It also supports ligature carets. 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.
- It occurred to me that fontforge's current mechanism for setting ligature carets requires that there be a ligature substitution is the exact number of components used to make the glyph. But in indic fonts ligatures are often made up out of other ligatures (I think) which means that there won't be enough caret positions. So I've added a Ligature Caret count to the Element->Glyph Info dialog to give the user control over it when necessary.
Add minimal support for applying apple state machine lookups in metrics view. Support is minimal because:
- Apple seems to figure line breaks before doing substitution process but I do it afterward so I don't know where the line breaks are and I can't enter either the line start or line end state.
- When I delete a glyph I delete it. Apple inserts a deleted glyph mark and then removes that later. State machines can respond to deleted glyphs, but I can't.
- I don't try to figure out which feature,settings should be on by default. So the user must pick them out manually.
Add popup graphics to the Glyph Info and Lookup subtable dialogs to show substitutions (that is if there is an entry like 'smcp' a => a.sc then create a popup window showing the "a" glyph and the "a.sc" so the user can see what happens.
- Another futile attempt at an embolden command. Element->Embolden
- Add shortcuts to the anchor control dlg (Page Up/Page Down) to move to the next/previous glyph.
- Michal Nowakowski has improved the truetype autoinstructor. He warns that it probably still has bugs (as what does not?) so I am leaving the old code available for now. He says it works best in "a clean (uninstructed) font with well defined blue zones and stems".
- If we have a glyph with multiple encodings, and the secondary encodings occur after the primary ones, then the backmap will probably contain a secondary encoding, which means that when we go to load the font in we will probably notice the secondary encoding twice and forget the primary.
- I used not to distinguish between ligature anchors and normal mark to base anchors. Unfortunately when I moved to lookups (from features) I had to introduce that distinction. But I didn't work through all the implications and have fixed a number of bugs related to that.
- Barry SCHWARTZ complains that font info says "fontnames must" but that the cited adobe tech note only says "should". So change "must" to "should".
- When processing class-based contextual lookups fontforge could not handle class 0 (the class containing "all glyphs not in another class") add code to do that.
- If the user did not select a Gasp Version (note: active selection was needed, just seeing that it was correct and leaving it didn't work) then [OK] would leave the font with an invalid version and on some systems caused a crash.
- View->Insert Glyph After didn't work well on a ligature glyph. It would insert the glyph after the first component of the ligature, not after the last -- which would make more sense.
- Misnamed some private dict entries when loading from otf.
- Make entry of ghost hints better.
- Add the ability to determine whether a point is selected or not from python.
- Add a mechanism so the user can ask fontforge to check for the existance of optional libraries.
- Add range checks to some library routines which blindly referenced some BMP arrays with codepoints outside bmp. Broken by UCS2->UCS4 change.
- Werner wants GotoChar to be able to switch sub-fonts in a cid keyed font. This may introduce bugs...
- Revert glyph still wasn't working.
- Someone complained that using a negative stroke took a very long time but produced correct results. Um. Ok. It's easy always to use the absolute value.
- Oops. The mac uses UCS2 for filenames, so when I moved to UCS4 I should have changed the mac resource file interface.
- When creating a mac resource file we only set the type/creator fields and failed to initialize the finderFlags.
- Fixed crash bug in generating a cursive connection anchor sub-table.
- In TrueType composite glyphs with the USE_MY_METRICS bit set the lock icon wasn't scrolled properly.
- The change from UCS2 to UCS4 broke text copy/paste. We failed to add a terminating NUL of the right size in all cases We continued to use charset=UCS-2 when it should have been UCS-4
- FF crashed when trying to View->Show ATT on a font that appears to me to contain an invalid 'kern' sub-table. I have removed the proximate cause of the crash. I have provided a warning that the kern table appears invalid. And I have cleaned up my internals after detecting the bad sub-table (I had a lookup with a feature but no script and this caused problems).
- Multiple substitutions in the metrics view did not properly update the count of glyphs to be displayed.
- If nothing changed in the metrics input field and the output contained a ligature (or a mult subs I suspect). FF would complain.
- in python, font.generate() didn't work. The PyArg_ParseTupleAndKeywords behaves in a way I did not expect.
- [Bottom] and [Down] still didn't work for lookup subtables.
- Try to force the text field in the metricsview to a fixed size. In some fonts it seems to be initialized to a huge value.
- Add ability to display italic side bearings in the char view.
- The lines drawn for italic fonts to show the italic origin and width were at slightly the wrong angle (I used a sine when I should have used a tangent).
- If a font did not have any horizontal metrics then ff would not set the em-size.
- Show Att trampled on memory when displaying apple contextual substitution state machines.
- Wasn't parsing apple's 'lcar' table properly.
- if a font contained a 'post' table but didn't name all names (or something like that), then the attempt to name the glyph based on the encoding was broken after the encoding change.
- FF did not recognize that a bdf file was greymaped. Broken by the bdf properties work a year ago or so.
- The import lookups button in fontinfo forgot about the subtables (sort of).
- The metricsview used the wrong count field to determine whether things changed. It used the glyph count, not the char count (which meant that when we had a ligature and the number of chars was greater than the number of glyphs, things got confused.)
- In the metrics view, anchored attachments only worked if the base glyph were itself unmoved (that is the mark was placed relative to the unmoved location, not the actual location).
- The search dialog should provide user with control over the error bound. The rotate checkbox didn't work if the flip checkbox wasn't checked.
- If a replace contour added a control point to a point that did not have one (went from a line to a curve) then that control point would get lost. If a search matched across the start point of a contour then search/replace could go into an infinite loop if the search and replace paths were the same.
- Find/Replace (replace) didn't work on quadratic splines.
Add two python methods:
- Layer.interpolateNewLayer(other-layer,amount)
- Font.createInterpolatedGlyph(glyph1,glyph2,amount)
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.
- When recovering from a crash, FF would sometimes complain about a mismatched version number. Don't.
- Problems parsing 'mort' tables could cause a crash.
- When building a contextual lookup, don't list that lookup as something that it could invoke (ie. list all lookups in this table (GPOS/GSUB) except for ourselves). Don't want to encourage users to create infinite lookup loops.
- Point matching didn't work when there were references to references and multiple references within a glyph.
- FF was having problems with extension lookups with multiple sub tables.
- We were trying to print a trailing NUL in some strings from the fontview.
- Kerning by classes got broken in metricsview by the addition of support for device tables.
- A GPOS contextual lookup only listed GSUB lookups in the lookup/sequence dlg Pressing [OK] in the lookup/sequence dlg caused a crash if no lookup selected.
- Openfontdlg was looking at the filter listbutton rather than the rename namelist listbutton.
- mf2pt1 now uses "glyph_dimensions" rather than "bbox"
- The metrics view should now handle device tables.
- Goto could crash when used on small encodings.
- -lang wasn't permitted before -c.
- Use numeric text fields for anchor positioning.
- Graham Asher points out that the meanings of underline position in the 'post' table and the FontInfo dictionary are different. One refers to the top of the underline rectangle and one to the center of it.
- Align point would crash if the selected point were the end point of a contour (or if the two points around it were in the same place).
- The baseline was not properly located when displaying it in the fontview.
- The scripting command BitmapsAvail would generally cause FF to crash if done when there was a UI..
- We seem to be misimplementing my obsolete (sfd file) convention for having duplicate encodings point to the same glyph. Result was that occasionally a glyph would be removed and a pointer to something it refered to would be put in its place.
- Change the name of activeFontInUI to activeFont Add an activeGlyph method. Add the ability to call a python script from a outline view.
- Hmmm. If a textfield is shifted right, and then resized so there's now room for all the text, the unshift it.
- Werner suggests that it would be useful to be able to specify wildcards in the goto dlg.
Michael Zedler tells me that glyphs output by mf2pt1 contain a line:
% 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...
Werner tells me that lilypond uses a slightly different syntax for the MF2PT1 bbox comment, so make our parsing slightly more generous.
- When creating a new lookup subtable for an anchored lookup, it did not get marked as having anchor classes and feature file output failed because of that.
- When outputing single lookups, the feature, script and language tags all had ^A where they should have had the second letter of the tag.
- Remove the code to produce the old, broken, 'size' feature.
07-June-2007
Add support for Adobe's feature file syntax. Use Merge Kern (now Merge Feature) to read one Use Element->Font Info->Lookups->popup menu->Save to generate one
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.
Add a popup menu to the lookups pane of font info.
- Change the name of
File->Merge Kern Info
toFile->Merge Feature Info
- Remove the code to produce the old, broken, 'size' feature.
- An earlier patch, designed to make the tabset work in the charview even if the user changed the name, didn't work.
- Bug in the selection iterator. Also Max Rabkin points out the docs say the iterator returns selected glyphs rather than encoding slots. Fix the docs, then add a member (.byGlyphs) which will make the iterator return glyphs.
- Accept contour += (1,2) rather than forcing people to say contour += fontforge.point(1,2)
- Was using an error return from two setter functions (contour.set_closed, set_is_quadratic) when I should have returned success.
- Crash when mistyping a glyph name in Glyph Info possub panes. Probably in the equivalent lookup dlgs too.
- If a glyph contained two copies of another glyph, and one of those copies was off by enough that ff didn't recognize it, the depending on how the contours were ordered, ff might fail to recognize the first glyph too, even though it did match.
- Add iterators to contours and layers. Python users seem to expect them even when they aren't documented to exist.
- layer += contour didn't work in python. I was examining a bit through the wrong data type.
- Provide a mechanism for copying lookup information from one
glyph to another. (
Edit->Copy Lookup Data
) - Loading kerning info from a mac 'FOND' resource was broken by the lookup change.
- Python scripting command font.createChar didn't. Partial patch from Max Rabkin.
- Adding a kerning pair from the metrics view would often add two or three pairs with the same character combination and different values.
- Another remove overlap bug. Introduced recently.
- Reinstate Apply Substitutions scripting command.
- Add some dutch styles.
- Make yet another attempt to correct for rounding errors when loading a postscript font.
- Add a way to get a font's filename to python.
- Werner points out that in scripting I use "break" in an example. It isn't documented to work and I don't implement it but I do show it. Oops. Ok, make it work.
- Display substitutions was broken.
- When generating default names for subtables, it is confusing to name them the same as the lookup.
- Change to using USC4 from UCS2 internally.
- Provide default names for lookups once the user sets the feature.
- Disambiguate some strings for the polish translation
- Revert glyph should not work for old sfd files.
11-May-2007
- Loading some afm files would go into an infinite loop. (Introduced 9-May)
- [Import] button on Font Info->Lookups crashed.
- Fix a number of problems related to anchor classes.
- After the user does an [Add Lookup] we should select the new lookup, to make it easier for him/her to do an [Add Subtable].
9-May-2007
- When ff parsed an afm file it only read the first ligature on a line.
- The [Call...] button in the scripting dialog is meaningless for python scripts (or I don't know how to give it meaning) so disable it.
- Vertical scrolling in the metrics view tried to scroll the list of features too.
- Tab, and arrow keys didn't work in the matrixedit widget after I added hidden columns. Make Return do the expected thing (move to start of next line and create it if possible).
- Patch by Pierre to fix uninitialized value when compacting encodings.
- Typo in realloc of lookups meant that nothing happened (when it should have increased array size by 1).
- Add the OFL icon to the fontinfo dlg.
- Plugins were broken with regular link configure option.
- Inkscape can start X on the mac before it tries to connect. Hmm. I can do that too. Inkscape manages to start X without an xterm. I don't know how to do that.
- When reading PS and CharStrings, the closepath operator didn't allow for rounding errors.
- Metrics View would crash if more than 20 glyphs entered.
- Alexej Kryukov points out that it would be nice if moving an anchor point did not set "changed since last hinted.
- Alexej Kryukov points out that the "changed since last hinted" flag gets set inappropriately.
- Alexej Kryukov points out that the Anchor control menu item looked as though it had changed, but actually had not.
1-May-2007
I've redone the way FontForge handles lookups so that it is more in keeping with OpenType.
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.
New translations to match the new UI: Polish, Greek, German, French, simplified Chinese.
- FontForge now supports python scripting if it has been configured to do so.
- Tell users they should add their email address to the License after pressing the [Add SIL Open Font License] button.
- The metrics view had numerous problems. Most significant if a glyph changed elsewhere the metrics view would not be updated.
- If the width of a glyph changed in the metrics view then that was not synchronized to dependent glyphs.
- Enforce the "Use My Metrics" bit of a reference. In TrueType, if this bit is set on a reference then then width of the containing glyph will be the same as that of the reference. So don't let the user change the width of such glyphs. (and add a lock icon to the width line in the character view to show that it is fixed).
- Fix a number of Remove Overlap bugs.
- FF would destroy memory in the metrics view if the user attempted to display a character which was not in the font.
- Was setting the last char index (of OS/2) incorrectly if the font contained non-BMP characters. Might also have set the first char index wrong two.
- Bugs in 'PfEd' table, glyph comment subtable.
- Couple of places where I actually say "FontForge 1.0". Let's bump that to 2.0 now that I've done that for the sfd format.
- Overlap problems with incorrect path orientations.
- Arrow keys didn't work in the charview if the tabset were active.
- I used to use "><" on the font's window title to represent a compacted font. No one understood it. Use "Compacted" instead.
- Philipp Poll wants to see the side bearings (I think) in the charview.
- Nicolas Spalinger of SIL suggests a help button next to [Add OFL] to open a browser on the official OFL site.
- Patch from Nicolas Spalinger of SIL regarding the verbiage surrounding the OFL in the fontinfo. Also his suggestion to make the tooltip live longer.
- Replace with Reference didn't check reference offsets correctly.
- Find problems didn't find references which intersected.
- Add some standard classes to the context chaining dlg.
- Make sure we only generate a postscript name in the name table once.
- The change length button of the cvt dlg didn't work.
- Input/Output of Apple's 'lcar' table was inconsistent. I don't know if it is "right" now, but at least ff can read back what it wrote.
- Werner points out that the debug windows show up at odd places if the window gets resized.
12-Mar-2007
- Add a button to insert the SIL Open Font License into the 'name' table.
- FF failed to store TeX heights and depths properly in a tfm file. FF failed to read or write TeX extension lists properly.
- Patch from Reuben Thomas to turn off the splash screen from the preference dlg.
- I had the dotlessj code point wrong. Again.
- FF did not center the charview window well on an empty glyph.
- The scripting command to add instructions to a glyph could immediately lose them if the glyph's points weren't numbered properly
We used to allow the syntax "
* command" in ttf instructions (which automagically inserted an implied push). Someone noticed that 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).
Code which I hope will handle German keyboards and make them do what the menu says they (ignoring the shift key) should for certain hot keys (brackets, curly brackets, brokets all get different modifier sequences on a german keyboard than an english).
- If a glyph had no hints then ff could add a hintmask operator (which didn't try to control any hints). Now I can't find anything in the docs which SAYS it's illegal to have a hintmask in a glyph with no fonts, it does seem bad practice, and a program called tx.exe complained about it.
- Patch by Michal Nowakowski to allow a nicer notation for delta
instructions in the instruction editing window: Example:
PUSHB_3 6@12 8 1 DELTAP2
This moves point 8 by six delta-steps (that's clear) at 37 ppem (that's not clear at first glance - assuming delta_base is 9, DELTAP2 works from 25 ppem to 25+15 ppem, in this example it's 25+12 ppem). So it's just a way of constructing an argument byte for DELTAP/C. - Allow FontForge's menu shortcuts (hot keys, whatever) to be user definable. We use a gettext based mechanism, type $ make FontForge-MenuShortCuts.pot to get a pot file for the process. It needs to be converted to an mo file and installed in $(prefix)/share/locale/$(LANG)/LC_MESSAGES, just like any other getext file.
- The Export scripting command did not work as documented. It is documented to export all selected glyphs. Instead it exported all glyphs.
- Redo the anchor control dlg.
- Be a little more lenient about bitmap bounding boxes for empty glyphs when loading bdf fonts
- Make the ClearHints scripting command take arguments: "Horizontal" or "Vertical" to allow users to choose to clear either horizontal or vertical hints (the old form with no args still works and clears both, of course).
- Typo gives us an unititialized variable when saving ufo.
- Various problems to various anchor dialogs.
- If an anchor point contained an x devtab but not a y devtab then it produced a pointer to garbage for the y devtab instead of NUL. Pairwise positioning lookups could also get their device table offsets screwed up.
- Werner points out that if you have a series of the same glyph in a row in the encoding (generally .notdef) and you are in a char view, then pressing Next Glyph does nothing. You are stuck at the same code point. (same thing happens for Prev Glyph).
- a chinese input method steals keystrokes I use for hot keys (I think). So if users don't want glyph navigation by typing characters in the charview (controled by a preference item) then don't turn on the input method when the window is created.
- Add hot key for Select->Points on selected contours.
- Assign "dotlessj" to map to 0x237, the unicode code point, rather than to 0xf6be, the old Adobe private use area. !!!! THIS DOES NOT CONFORM TO THE AGL !!!!!
- Oops. The gloss for the shift point/contour/zone was slightly off and gave the wrong information.
- Add vietnamese font styles (bold, italic, regular, etc.) From Clytie Siddall.
- Fixes for rounding errors in finding spline intersections.
- Werner points out that removing a bitmap glyph from the bitmapview does not force a redisplay in the fontview.
- Gleep. Werner points out that when generating bitmap strikes, ff would always generate a temporary postscript font to rasterize, so any truetype instructions would be ignored. And the generated strikes would be ugly.
- Add a command to show anchor point attachments within the outline character view (View->Combinations->Anchor Glyph at Point)
- Force point numbers to be correct when changing glyphs in the charview.
- Add support for Apple/Adobe's obsolete 'typ1' sfnt. A way of stuffing a type1 font into an sfnt wrapper.
- Even though the viewbox/output width height ratios are different, people want the image scaled the same in svg input.
- People would like to have only one charview and double clicking in the fontview just changes the contents of an existing window. Preference Item: OpenCharsInNewWindow
- Add a tabs line to the outline char window. If users are going to have only one charview open then they probably want some history too.
- Werner points out that what I call "Type42 CID" should actually be called either "Type11" or "CID Type 2".
20-Dec-2006
- Patch by Johan Winge fixing a bug in dragging out a magnification rectangle
- Patch from SUSE fixing a variable which can be uninitialized.
19-Dec-2006
- I have received many complaints about the grey background, so I have tried various other backgrounds -- and gotten complaints on all of them. Currently try using a white background by default and add a discussion in the FAQ about changing it.
- Add support for Unified Font Objects (a directory holding many Glyph Interchange Format files). People at the Open Font Library seem to think this is useful. Also support for importing/exporting glyphs in glif.
- People asked me to implement the UFO/GLIF format in part because each glyph is stored in a separate file giving finer granularity to version control. I worry about using UFO/GLIF because it is not documented to store all the information needed to regenerate a font (being mainly concerned with glyph outlines). So I've implemented a directory based version of the sfd format which I hope will provide the one glyph per file format people say they want.
- MS has extended the 'gasp' table to give users control over clear type. Version number has changed too. FF now supports the new bits.
- MS has also added a cleartype bit to the head table.
- Hmm. I wasn't setting the apple specific bits of the head table properly.
- Allow the user to create an empty bitmap strike.
- Add the ability to remove bitmap glyphs from a strike.
- Fix a couple of memory leaks.
- The docs don't mention this, but... mangal.ttf has a NULL offset for the lookahead class definition, so if that happens -- no classes.
- Werner doesn't like that I always add dummy bitmaps for .notdef, .null & nonmarkingreturn. It seemed logical to me that if I were prepared to add those glyphs to the outline font I should be prepared to add them to the bitmap strike. But Werner (I think) sees bitmap strikes as containing exceptional glyphs which need special handling, whereas I just saw them as complete fonts. So in this context I guess there is no need to add these glyphs. As a compromise I have decided that I will add the glyphs to the bitmap strike if I added the glyphs to the outline font.
Add scripting functions:
- SelectMoreIf
- SelectMoreSingletonsIf
- SelectSingletonsIf
The changed flag wasn't being set in Remove ATT.
- GetPosSub scripting command trashed memory.
- Make default char of OS/2 be space for otf and .notdef for ttf. This is a guess at what should be done.
- FF was still setting firstcharindex in OS/2 incorrectly. The problem is that glyph 1 (or 2?) has encoding 0 in the mac cmap table while it is not referenced at all in the windows cmap.
- Wasn't setting os2_typelinegap field when reading an sfnt.
- In a font without any LCG characters, fontforge set the OS/2 capheight and xheight fields to -1e10. It should have been 0. Patch by Roozbeh Pournader.
- Patch by Roozbeh Pournader. Regular bit in fsSel in OS/2 was being set when it should not have been.
- Werner suggests that when looking at a bitmap strike, nextdef and prevdef look at the next glyph defined in the strike rather than the font as a whole. Useful for sparse bitmaps
- Werner wants to be able to set bitmap magnification in the font view.
- The "Recalculate Bitmaps" button in the bitmap view should adjust its positioning as the window is resized (and be sensitive to other languages which might have different button widths).
- there was an uninitialized variable used in parsing contextual by coverage table.
- Werner points out that when double clicking on a bitmap glyph in the font view, the glyph is created / rasterized without using freetype.
Sigh. Ok. make the size of the label font in the fontview configurable.
fontforge.FontView.FontSize: 24
Werner finds "Original" confusing for an encoding and suggests "Glyph Order" instead.
- MS has revealed the meaning of a few new GETINFO bits. Put them in the Gloss window.
- Set/Select aren't very informative in class definition windows, change to "Set from font"/"Select in Font"