font-line icon indicating copy to clipboard operation
font-line copied to clipboard

Add an option to change font family name and/or id

Open psycha0s opened this issue 8 years ago • 17 comments

Sometimes there is a need to have installed a couple versions of the same font with different interline spacing. Therefore, OS should be able to treat these fonts as different.

psycha0s avatar May 13 '16 08:05 psycha0s

This is a great idea Anton. It would also be useful to modify the name in case you want to re-release a modified version of a open font licensed font with a reserved font name. This is not difficult. Will leave this open to remind me to do it when I get back to work on this tool.

chrissimpkins avatar May 13 '16 13:05 chrissimpkins

We just discussed this over here https://github.com/source-foundry/Hack/issues/345#issuecomment-340606573.

I am interested in whether anyone has thoughts about whether we should support an automated approach (e.g. add integer that indicates the percent UPM value passed at the command line to the current font family name - Coolfont 25, Coolfont 15) or user specified at the command line so that you can change the font family name to anything that you would like in order to create your own naming scheme. Either approach should permit side-by-side installs of fonts with different line spacing settings.

Let me know what you think. I am prepared to add this if there is interest in it.

chrissimpkins avatar Oct 31 '17 03:10 chrissimpkins

@chrissimpkins Would love to rename font so I could have multiple line heights installed as well. How hard would this be to add?

jesseleite avatar Nov 15 '17 23:11 jesseleite

On the to do list! I have actually been considering a standalone tool to rename fonts because we need this for other things.

Here is a Python script that will accomplish this until it is in this tool or we have a standalone renaming tool (that will likely be based on the script in the repo below):

https://github.com/chrissimpkins/fontname.py

Let me know if you have any problems with it. Instructions are on the repository readme page.

Note that the script renames the fonts without writing to new file paths so create copies if you intend to keep previous names.

chrissimpkins avatar Nov 16 '17 01:11 chrissimpkins

@JesseLeite if we do add the font renaming to this tool, best to create option to specify name on command line or automate it in some fashion based upon the change in the line spacing?

chrissimpkins avatar Nov 16 '17 01:11 chrissimpkins

Hey @chrissimpkins thanks for reply!

Let me know if you have any problems with it.

Probably because I'm new to python, but I am having trouble with fonttools dependency...

if we do add the font renaming to this tool, best to create option to specify name on command line or automate it in some fashion based upon the change in the line spacing?

100% could have optional flag to specify name, like:

font-line percent 120 ~/Downloads/Menlo-Regular.ttf --name="Menlo LG 120"

Or something similar?

jesseleite avatar Nov 16 '17 13:11 jesseleite

@JesseLeite strange. Mind dropping into the Python2 and Python3 REPL to check the import?:

$ python2
 > import fontTools
$ python3
 > import fontTools

chrissimpkins avatar Nov 16 '17 14:11 chrissimpkins

Incidentally, you should already have fontTools installed if you are using font-line... It is a dependency and is automatically installed with the font-line install. Maybe it is installed under Py3 for some reason? Let's see what the above shows and can troubleshoot from there.

chrissimpkins avatar Nov 16 '17 14:11 chrissimpkins

100% could have optional flag to specify name

👍 thanks for the feedback!

chrissimpkins avatar Nov 16 '17 14:11 chrissimpkins

Ahh it was python2 I needed to run. Thanks :+1:

jesseleite avatar Nov 16 '17 14:11 jesseleite

you must default to python3. this is a good thing! time to get rid of py2...

work as a separate install?

chrissimpkins avatar Nov 16 '17 14:11 chrissimpkins

Yeah learning :) I did get it to work though, thanks!

jesseleite avatar Nov 17 '17 03:11 jesseleite

@JesseLeite great! enjoy!

chrissimpkins avatar Nov 17 '17 03:11 chrissimpkins

On the to do list! I have actually been considering a standalone tool to rename fonts because we need this for other things.

Here is a Python script that will accomplish this until it is in this tool or we have a standalone renaming tool (that will likely be based on the script in the repo below):

https://github.com/chrissimpkins/fontname.py

Let me know if you have any problems with it. Instructions are on the repository readme page.

Note that the script renames the fonts without writing to new file paths so create copies if you intend to keep previous names.

Assuming that the font has all the namerecords correcly set, I'd do the following:

  1. Get old_family_name from nameID 16, and if it's not present use nameID 1 as fallback
  2. Set new_family_name = old_family_name + linegap (or whatever)
  3. Replace the old_family_name with new_family_name in nameIDs 1, 3, 4, 6, 16, 18 (at least these ones, but better in all nemerecords) and CFF names

Since some namerecords contain spaces and other don't, a double replacement is needed:

new_string = old_string.replace(old_family_name, new_family_name).replace(old_family_name.replace(" ", ""), new_family_name.replace(" ", ""))

But I'd not to this by default, leaving the choice to the user.

Anyway, I tested this script yesterday for the first time and it's superb!

ftCLI avatar May 30 '21 09:05 ftCLI

Assuming that the font has all the namerecords correcly set, I'd do the following:

Get old_family_name from nameID 16, and if it's not present use nameID 1 as fallback Set new_family_name = old_family_name + linegap (or whatever) Replace the old_family_name with new_family_name in nameIDs 1, 3, 4, 6, 16, 18 (at least these ones, but better in all nemerecords) and CFF names Since some namerecords contain spaces and other don't, a double replacement is needed:

new_string = old_string.replace(old_family_name, new_family_name).replace(old_family_name.replace(" ", ""), new_family_name.replace(" ", ""))

But I'd not to this by default, leaving the choice to the user.

Anyway, I tested this script yesterday for the first time and it's superb!

Something that you intend to support in ftCLI?

chrissimpkins avatar May 30 '21 13:05 chrissimpkins

Yes! I will add an option to allow the user choose if changing the family name or leave it as is.

ftCLI avatar May 30 '21 13:05 ftCLI

Done, seems working:

linegap

ftCLI avatar May 30 '21 15:05 ftCLI