Adding Fonts to Groff

Published at 08:28 on 2 May 2018

Because I’ve had a strange fixation on how to do it (it’s not really practical, given the many limitations and deficiencies of the program), here’s how to add fonts to Groff. Note that when I write “Groff” here, I mean Groff with the PostScript output option.

  1. Obtain Ghostscript and Fontforge. You will need both in order to add fonts (and if you don’t have Ghostscript, Groff’s usefulness is severely compromised, as per the first link in this article).
  2. Determine the location of your installation of Groff’s textmap file. Typically this will be in a location like /usr/share/groff/version/font/devps/generate/textmap.
  3. Create a directory to hold the Groff fonts and font metrics files you will be generating.
  4. Create a devps subdirectory to this directory. All the files you create should be in this subdirectory.
  5. Open each font in Fontforge. Note that a typical font family contains four fonts: a normal font, an italic font, a bold font, and a bold italic font. You will have to do the steps below for each of the four fonts in each font family you wish to use.
  6. Perform the editing steps in the list immediately below on each font.
  7. Close Fontforge, if desired.
  8. For each type 42 font you generated, extract an AFM file:
    printafm name.t42 > name.afm
  9. Think of a name you wish to call the font on the Groff side. The Groff convention is to have families of fonts that end in “R,” “I,” “B,” and “BI” (for roman, italic, bold, and bold italic variants). E.g. “BaskervilleR,” “BaskervilleI,” “BaskervilleB,” and “BaskervilleBI.”
  10. For each AFM file, generate a Groff font metrics file (replace textmap-path with the location of the textmap file you determined in step 2 and groff-font-name with the name you came up with in the previous step). If the font is not italic, type:
    afmtodit -i0 -m name.afm textmap-path groff-font-name
    If it is italic, type:
    afmtodit -i50 name.afm textmap-path groff-font-name
  11. If your font contained ligatures, verify the ligatures line in your Groff metrics file is present and contains all ligatures.
  12. Create a download file in the font directory by following the final list of instructions below.

Editing steps in Fontforge:

  1. Disable all Apple Mac features, as they are broken in Fontforge: Go to File > Preferences > Mac, delete all entries in the Features tab, then verify the list in the Mapping tab is empty as well. You should only have to do this once for each editing session.
  2. Open the font file you wish to add to Groff. You will typically have to know where your system keeps fonts in order to do this. This of course varies from system to system.
  3. Clean up the ligature substitution tables. Modern font files can have complex ligature substitution rules, which tend to confuse Groff. The only thing Groff can support is a single liga table. Select Element > Font Info > Lookups and examine the GSUB tab. If there’s any more than one liga entry, you will have to delete the all but one. If there’s any clig, alig, or dlig entries, they will have to be deleted. Then edit the single remaining liga table and make sure it does what you want. Note that since Groff only supports the fi, ff, fl, ffi, and ffl ligatures, these should be the only ones listed in your table.
  4. Correct the names of your ligature glyphs. Some fonts use ligature names like “f_i,” “f_l,” “f_f_i,” etc. These will confuse Groff. Only names that exactly mirror the character sequence to be replaced by the ligatures (e.g “fi,” “fl,” “ffi,” etc.) are supported. To do this you must locate the ligatures in the glyphs list (they start at Unicode codepoint FB00), click on the glyph of the appropriate ligature, then use the dialog in Element > Glyph Info to set the name of the glyph.
  5. Save the font (using File > Save) as a .sfd file. This step is optional, but can be useful if you forget or botch one of the editing steps listed above.
  6. Generate a type 42 font using File > Generate Fonts. Click on the “Options” button and make sure “TrueType Hints,” “PS Glyph Names,” “OpenType,” “Dummy DSIG,” and “Lookup Names” are checked. No other boxes should be checked. Fontforge may complain about some things being slightly amiss when you try to generate the font. In my experience it has usually been safe to ignore the warnings and just generate the font file.

Steps to create the download file:

  1. Start by copying the download file from the existing fonts storage area to the Groff font directory you have created (it will typically be in a file like /usr/share/groff/version/font/devps/download).
  2. For each font file you added, you will have to add a line to the download file. Each line in the file contains the “internalname” value from the Groff font metrics file and the name of the type 42 font file, separated by one or more tab characters.

And that’s “all” you need to do. If you set the GROFF_FONT_PATH environment variable to point to the font directory you created, you should now be able to use those fonts in Groff. The font names you use in Groff will match the names of the Groff font metrics files.

(Updated 16 May 2016 with corrected instructions for running afmtodit.)

Well, That Sure Was No Surprise

Published at 14:52 on 1 May 2018

The culprit for the failing aftermarket back-up camera in my truck was the solderless quick-connectors I used (per the recommendation of the camera manufacturer) to wire the camera to power.

This was so much not a surprise that I didn’t even bother to do any troubleshooting to pinpoint the culprit. I simply removed the solderless connectors, cut and stripped the wires in question, twisted them together, soldered them, and taped them.

Then I started my truck and put it into reverse. Bam! Fixed.

This has been consistent with the (crap) performance of virtually every solderless quick-connector I have tried in the past forty years, which is why I felt so confident attempting this repair without further troubleshooting. For some reason, I was willing to give them a try again when I installed that camera. Lesson learned: never again.

A soldered connection firmly and securely bonds two connectors together at the atomic level. Assuming copper wires, the molten solder actually partially dissolves the surface of the copper conductors before it solidifies, resulting in one seamless conductor (transitioning from copper to solder back to copper) that is virtually immune from oxidation or vibration induced failure. Nothing else even remotely comes close to this reliability, except a seamless connector with no splices whatsoever.

I am convinced that the only reason quick-connectors exist is: a) manufacturers who want to cut corners on their assembly lines in order to pad their profits, or b) people, usually do-it-yourselfers, who don’t know how do solder and who are unwilling to learn how.

Liberals and the Center Preach False Equivalence, Too

Published at 08:54 on 1 May 2018

Remember all the heat that Trump caught (and rightly so) for proclaiming there were “some very fine people on both sides” of a fascist rally and the associated counterprotest?

Well, it turns out that liberals and centrists are guilty of false equivalence, too, and when referring to the very same event. There’s been a lawsuit filed in Charlottesville that makes no distinction between fascists and those who showed up solely to oppose fascists.

With “friends” like this, who needs enemies?