# The Element Menu

- Font Info
- Char Info
- Get Info
- Typographic Features
  - Copy Feature(s) to Font...
  - Default ATT (Advanced Typographic Tables)
  - Remove All Features
  - Remove Feature(s)...
  - Remove Unused Nested Features
  - Retag Feature(s)...
- Show Dependencies
  - References
  - Substitutions
- Find Problems...
- Bitmaps Available...
- Regenerate Bitmaps...
- Transform...
  - Flip Horizontally
  - Flip Vertically
  - Rotate 90° CW
  - Rotate 90° CCW
  - Rotate 180°
  - Skew
- Expand Stroke...
- Overlap
  - Remove Overlap
  - Intersect
  - Exclude
  - Find Intersections
- Simplify
  Simplify More
- Cleanup Chars
- Add Extrema
- Effects
  - Outline
  - Inline
  - Shadow
  - Wireframe
- MetaFont...
- AutoTrace
- Align
  - Average Points
  - Space Points
  - Space Regions
  - Make Parallel
- Round to Int
- Order
  - First
  - Earlier
  - Later
  - Last
- Clockwise
- Counter-Clockwise
- Correct Direction
- Build Accented Char
  Build Composite Char
- Merge Fonts...
- Interpolate Fonts...

There are also two menu entries which are not part of the default build but which may be configured by modifying `configure-fontforge.h` before compiling FontForge.

- Tile Path
- Non Linear Transform...

Font Info
  In all views this brings up the Font Info dialog.
  CID keyed fonts can set information on the CID font as a whole (rather than just the current sub-font, which is what this command does) from CID->CID Font Info.
Char Info
  In the all views this brings up the Character Info dialog.
Get Info
  In the outline view this brings up one of four different dialogs (Point Info, Image Info, Reference Info, Anchor Point Info) depending on what is selected.
Typographic Features
  This sub-menu is only present in the font view and allows you to manipulate GSUB/GPOS/morx features. If you wish to create them you should use Font Info or Char Info.
  Copy Feature to Font...
    This dialog allows you to copy a set of features from one font to another.
  Default ATT
    In the font view this is a sub-menu which allows you to generate default values for various features of the GPOS and GSUB tables.

    The sub-menu consists of a list of feature names (and a few more generic names like "All" which will provide defaults for everything it can figure out, and "Ligatures" which will provide defaults for all ligatures). FontForge will look for defaults for all selected characters. There is also one special entry:

    Suffix to Tag...
      In adobe's glyph naming conventions, alternate forms of glyphs may be named by appending a suffix to the normal glyph's name. Thus a swash variant of "A" might be named "A.swash".

      Using this command you can tell FontForge to associate a given suffix with a feature tag. (in the above example you could associate ".swash" with 'swsh' -- except you don't need to, because FontForge already knows about that one). Select the letter "A", then enter the command, then "A" will be linked to "A.swash" as a 'swsh'.

  Remove All Features
    Removes all typographic features.
  Remove Feature(s)...
    This dialog allows you to select which features to remove.
  Remove Unused Nested Features
    If there are any nested features which are not referred to within any contextual/chaining feature nor apple state machine then this command will remove them.
  Retag Feature(s)...
    This dialog allows you to change the opentype tag (or apple feature/setting) on a given feature.(This does not retag kerning information).
Show Dependencies

References...
  This dialog is not available in the bitmap view. It shows you what characters contain a reference to the current character. You can open a window looking at any of the dependent characters by selecting that character and pressing the [Show] button.
Substitutions...
  Show any glyphs that have substitutions (ligatures, multiple subs, etc.) which depend on the current glyph. So if you select "i", you might see that "fi" depended on it as a ligature, and if you select "A.swash" you might see that "A" depended on it as a 'swsh' alternate subs.

Find Problems...
  This command is not present in the bitmap view. It will search for several common problems. In the character view it will select anything that needs to be fixed, in the font view it will check all selected characters and if any have problems will open them and select the problems. It will post a message telling you of each problem found. It brings up the Find Problem dialog to let you choose what problems to look for.
Bitmaps Available...
  This brings up a list of pixel sizes for bitmap fonts.
  If you have bitmap fonts this will show their pixel sizes. If you remove a size that is in the list then that font will be deleted from the sfd file. If you add a size then that size font will be created and stored in the sfd file.

  FontForge deals in pixel sizes, not point sizes. The conversion between pixels and points differs on different systems and indeed on different screens. A point is (approximately) 1/72 of an inch, a pixel is however big a pixel happens to be on your screen. Usually pixels range from about 1/72 of an inch to about 1/144 of an inch. Different systems support different screen resolutions as "standard", and FontForge tries to know about these standards.

  Some conversions between points and pixels
  Screen Resolution Point Size | 72dpi Mac | 75dpi X | 96dpi Win | 100dpi X | 120dpi Win
  --- | --- | --- | --- | --- | ---
  10pt | 10 | 10 | 13 | 14 | 17
  12pt | 12 | 12~13 | 16 | 17 | 20
  18pt | 18 | 19 | 24 | 25 | 30
  24pt | 24 | 25 | 32 | 33 | 40

  Sadly your screen will probably not match one of the standard screens precisely. On X the standard resolutions are 75 and 100dpi, on MS Windows 96 and 120dpi, and on the Mac 72dpi. This dialog provides the conversion between pixel size and point sizes at these resolutions.

  Normally the new characters are created by rasterizing the outline font. If your system has the freetype2 library installed (and you checked the "Use FreeType" box) then FontForge will use the FreeType rasterizer to generate bitmaps, otherwise it will use FontForge's built-in rasterizer (which isn't as good, but involves a little less overhead).

  Finally, if you have no outline font then the new characters will be created by scaling the (bitmap) font displayed in the font view.

  In CID keyed fonts there will not be a set of bitmaps for each sub font, instead the entire complex of sub-fonts share bitmaps.

  FontForge also supports anti-aliased bitmap fonts, and you can use this dialog to generate them. If you want to generate a 12 point anti-aliased font with 8 bits per pixel you would type 12@8 into the dialog above. FontForge supports 1, 2, 4 and 8 bit per pixel fonts (a 1 bit per pixel font is a standard bitmap, the others are greymaps).
  (New greymaps can not be created by scaling old greymaps, if you wish to generate a greymap font, you must have an outline font).

Regenerate Bitmaps...
  If you have changed the outline that a bitmap is based one then you should (at some point) look into changing the bitmap too. This command allows you to regenerate a subset of the characters in a given bitmap font. In the font view you can regenerate all selected characters, while in the bitmap and outline views you can regenerate the current character. You can pick what pixel sizes should be regenerated too (unlike the above command, removing a bitmap size from the regenerate list will not delete it).
  As before, if you wish to change a greymap you should refer to it by <pixel-size>@<bits-per-pixel>.
Transform...
  In the Font and Outline Views this brings up a dialog, but in the bitmap view there is a submenu with a selection of choices that are meaningful in a bitmap.
  Flip Horizontally
    Flips the bitmap horizontally.
  Flip Vertically
    Flips the bitmap vertically.
  Rotate 90° CW
    Rotates the bitmap 90° clockwise.
  Rotate 90° CCW
    Rotates the bitmap 90° counter-clockwise.
  Rotate 180°
    Rotates the bitmap 180°
  Skew
    Allows you to specify a ratio by which to skew the bitmap 1:3 means for every 3 pixel rise in y, skew the bitmap one pixel horizontally.
Non Linear Transform...
  This command is not available in the default build, you must modify the file `configure-fontforge.h` and then rebuild FontForge. This command allows the user to specify a non-linear transformation as a pair of expressions (the first specifies the transformation for the x coordinate, the second for the y coordinate). These expressions may be fairly general functions of x and y. See the scripting page for a description of the syntax.
Expand Stroke...
  Not in the bitmap view. In the font view it applies to all foreground splines in all selected characters. In the outline view it applies to all paths that have at least one point selected (or if no points are selected then it applies to all paths).
  Above is a simple example of what expand stroke can do. It takes the two open paths above left and turns them into the two closed paths right.
  The Expand Stroke dialog gives you control over various aspects of the expansion process. You can chose a stroke width, how the ends of an open path should be drawn, and how the path should look when two splines (or lines) join which do not have the same slope (ie. at a corner point). Or you may choose to have the path be that which would be traced by a calligraphic pen, or an elliptical pen. For closed contours you may also choose to remove either the generated contour which is inside the original, or that which is outside.

  How is this done?

Tile Path
  This command is not available in the default build, you must modify the file `configure-fontforge.h` and then rebuild FontForge. This command takes the contents of the clipboard and treats it as a tile which is applied to any selected contours.
Remove Overlap
  Not in the bitmap view. If two closed paths intersect then there will be overlap. This will get rid of it, leaving one closed path behind. (if the path directions are wonky, strange things result).
  This command is probably the buggiest in FontForge. So before FontForge invokes the command it will save the state to the error recovery file.
  Warning: Splines which are tangent (or nearly so) cause problems. Points which are close together can cause problems.
Intersect

  This will remove everything not in the intersection of two regions.

Exclude

  This will remove the selected contours from the unselected ones. Only available in the outline character view.

Find Intersections
  This finds the places where overlapping contours intersect and inserts points at those locations.
Simplify
  Not in the bitmap view. If you have lots of points on a path, some of which do not materially add to the path's shape, then this command will remove the extraneous points. (It will not remove points where the slope at the point is horizontal or vertical as postscript likes to have these points present).

  How is this done?

Simplify More
  This is a variant of the simplify command, obtainable if you hold down the shift key when invoking from the menu. It brings up a dialog which gives you control over what sorts of errors this simplification is allowed to induce. You can control:
  - How far the simplified contour is allowed to stray from the original
  - Whether to allow removal of extreme points
  - Whether to allow the slope to change at points.
  - Whether to make corner points into curve points (by adjusting the control points)
  - Whether to flatten small bumps off of lines
Cleanup Char
  This is similar to the simplify command. In this case if there is a spline which actually traces out a line but none the less has control points, then this command will remove the control points.
Add Extrema
  Not in the bitmap view. In the font view (or if nothing is selected in the outline view) it will look at each spline in the character and find where the extrema are and insert points at those locations (assuming there aren't points there already). If there are points selected in the outline view then it will only work on splines which are between two selected points.
Outline
  Changes the selected characters so that instead of being a solid block, only the outline of the character is visible. The characters' bounding box will not change.
Inline
  Changes the selected characters so that the character is surrounded by an outline. The characters' bounding box will not change.
Shadow
  Changes the selected characters to give them each a shadow. The user has control over the shadow size and angle.
Wireframe
  Changes the selected characters to give them a 3D wireframe look.
MetaFont...
  This dialog is only present in the font and outline character views. It allows you to make fonts bolder or condensed. It doesn't work very well.
  NOTE: It does not read TeX .mf files. The name is chosen because it has some similarity in terms of features.
AutoTrace
  This command is only available if you have downloaded Martin Weber's autotrace program, or Peter Selinger's potrace. If you have a background image in a character then autotrace will automagically trace the outlines of that image. See the section on autotracing for more information.
Align menu
  This submenu is only present in the outline view, it allows you to align points or to space them out along an axis.
  Average Points
    This will look at all the selected points and find the coordinate with the least change. Then it will average find the median point on that axis and set all the selected points to have that value for the appropriate coordinate.
    So if you have a line which is almost horizontal, and select its endpoints and apply this command it will be horizontal.
    (if you select exactly two points, and they lie close to a 45 diagonal, then they will be forced to the diagonal rather than to horizontal/vertical)
  Space Points
    If you have three or more points selected then FontForge will figure out the coordinate that has the greatest change and will space the points out regularly along that axis.
    If you select one point (and that point is in the middle of a path) then (internally) the point's location will be expressed in a coordinate system which is rotated so that one axis is parallel to the line between the two points that surround the selected point. The selected point will be moved mid-way between the two on this axis, while it's other coordinate remains fixed.
    That's an extremely complicated way of saying: If the selected point is connected to two points which are on a horizontal line, then the selected point's x coordinate will be midway between the two, while its y coordinate remains unchanged.
  Space Regions
    This is similar to the above command except that it allows you to make a rather simple definition of a collection of points which should be moved together. Each of these regions will be regularly spaced along the chosen axis. A region is defined as a collection of points, each one of which is within some maximum distance of at least one other point in the region. The purpose of this is to allow you to space out the stems of the letter "m" so that they regularly spaced horizontally. Sadly it won't work in many cases because in a serifed font the serifs will often be closer to each other than to their respective stems.
  Make Parallel
    If four points are selected, and there are two lines between them, then FontForge will make those lines parallel. If there are four lines between them (ie. they form a quadrilateral, then FontForge will turn it into a parallelogram. (note, this only works on lines, not on curved splines)
    The last point selected will be the one moved (sometimes FontForge doesn't remember which point was selected last, then it will just pick one randomly. If you don't want that to happen, select your points and then single click on the one you want moved).
Round to Int
  Not in the bitmap view. FontForge stores point locations as real numbers (ie. it retains fractional values). TrueType and PostScript Type1 only support integral values (Well with vast effort Type1 fonts can be made to support real numbers but FontForge doesn't), so when generating the font points are rounded to integral values. Open Type allows real numbers easily. But they make the font file bigger. This command will round all selected locations to the closest integer.
Order
  This changes the order in which contours, references and images are drawn. It is almost useless because this order of contours and references does not affect the final appearance of the character. The only relevance it has is when interpolating fonts and in multiple master fonts. Here similar contours must appear in the same order.

  If you have a character which contains both contours and references, FontForge does not specify whether references or contours are drawn first (or whether the two are intermixed). If this matters to you, unlink your references.

Clockwise
  Only in the outline view. If all selected paths have a clockwise direction then this will be checked. Selecting it will make all paths be clockwise.

  If not paths are selected, or if all selected paths are open this will be greyed out. I a selected path intersects itself results are indeterminate.

Counter-Clockwise
  Only in the outline view. If all selected paths have a counter-clockwise direction then this will be checked. Selecting it will make all paths be counter-clockwise.

  If not paths are selected, or if all selected paths are open this will be greyed out. I a selected path intersects itself results are indeterminate.

Correct Direction
  Not in the bitmap view. Sets the direction of outermost paths to be clockwise. The next path crossed will be made counter-clockwise, the next clockwise, etc.
  This command may produce unexpected results if two splines cross.
  If a character contains a flipped reference, this command will be unable to correct the contours inside of the reference directly, instead it will offer to unlink the reference after which it can treat its (former) contours like any others.
Build Accented/Composite Char
  Not in the bitmap view.

  If the shift key is not depressed when selecting the menu item this will only build accented letters, if the shift key is depressed it will build general composite characters (fractions, ligatures, digits inside parens, roman numerals, etc.) as well. If invoked by short-cut (Ctl-Shft-A) or mnemonic it will only build accented letters.

  If the current character is an accented character (and all the base characters and accents have already been created) then this command will delete anything that is currently in the foreground and put a reference to the base character and another reference to the accent character into the foreground. So if the current character were "À" then a reference to "A" would be added to it, and a reference to "`" would be centered above the "A".
  If Copy From is set to All Fonts then any bitmaps will have a similar process done (even in the outline character view).
  A more complete description is given in the section on accented characters.

Merge Fonts...
  Only in the font view. If you are building a unicode font you will often want to merge in fonts with other encodings. You can, of course, cut and paste from one to the other, but usually that needs to be done one character at a time (because the encoding may not be ordered the same as Unicode). Instead, if your fonts are properly encoded (with proper unicode names), then the Merge Fonts command will put them into the right places in the current font.

  FontForge does the following when merging CID-keyed fonts:

  - If the font in the window (the mergee) is a normal font and the other font (the merger) is a CID keyed font, then the merger font is effectively flattened and the result merged into the mergee.
  - If the mergee is a CID keyed font and the merger font is a normal font then the merger font will be merged into whichever of the mergee's subfonts is currently active.
  - If both are CID keyed fonts, then they should:
    - Have the same registry and ordering
    - The supplement number of the mergee should be at least as big as that of the merger
    - The mergee should have at least as many subfonts as the merger.

    If these conditions be met then any CIDs from the merger which are not present in the mergee will be merged into the same subfont of the mergee as they came from in the merger.

    This strikes me as somewhat problematic, but I can't think of a better solution.

Interpolate Fonts...
  Only in the font view. If you have a bold font and a light font and would like to create a medium font, then you can interpolate a font between the two (or you can extrapolate a font that's even bolder or lighter). Your two fonts must have the same sets of characters, and each character must have the same number of paths (ordered similarly) and each path must have the same number of points on it, and must have the same references.

## Other menus

- File
- Edit
- Point
- Element
- Hints
- View
- Metrics
- CID
- MM
- Window
- Help
- Hot Keys

-- Prev -- TOC -- Next --