[why]
In a lot fonts when Oblique is moved to the base part of the name the
family gets too long. Since the base part is never shortened it will
stay there and make some fonts will end up with too ong bas families:
DejaVuSansMonoOblique
IosevkaTermOblique
OpenDyslexicOblique
ProggyCleanOblique
[how]
If the name is shortened, take the short form of oblique and add that to
the base name.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The name parts of a font are rather restricted in length. Most
systems/applications do not have any problems with long strings, but
some will complain or ignore such fonts.
At the moment each font needs to be checked individually manually after
patching for length violations, which is hard.
[how]
Issue a message if one name in longer than endorsed.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The outputs while patching are very ad-hoc and not grouped
systematically.
If run via gotta-patch-em the output is hard to process afterwards
automatically.
[how]
Use the logging module which outputs the messages and also writes a
run-log with all vital information.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Cognitive burden of shorten_style_name() is 13 (allowed 9).
Duplicate code
if self.use_short_families[1]:
weights = FontnameTools.short_styles(weights)
styles = FontnameTools.short_styles(styles)
[how]
I do not really buy the duplicate code issue (but circumvent it anyway).
shorten_style_name() was really hard to grasp, maybe use of a helper
function makes it more readable.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The old naming is the reason for a lot problems. It creates a lot of
duplicate names and breaks bigger font families.
[how]
After introducing --makegroups we now enable it for all fonts.
Remove special cases from config.cfg files.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We created two fonts, one 'normal' and one 'Windows Compatible'. The
later one used shorter names because there are some Microsoft
applications that can not work with long (family-) names.
But it would be better to have universally usable fonts, like all our
sourcefonts. It would reduce confusion and also reduce the size of
installation packages.
[how]
ID 1 (Family) family()
Unchanged
Take the short form font name. Appends depending on mode short or long
weight.
ID 2 (SubFamily) subfamily()
Unchanged
Transmogifies Oblique to Italic.
Returns long form styles (i.e. RIBBI)
ID 4 (Fullname) CFF.Fullname fullname()
Take the short form font name (instead of long).
Depending on mode take short or long styles.
This is now in line with ID 4 = ID 1 + ID 2
ID 6 (PS Fullname) CFF.FontName psname()
We limited the length to 31 characters, which is sometimes too short
to have different names for fonts of one same family.
Now we take the short forms of name suffix and styles, for example
VictorMonoNFM-BdIt
ID 16 (Typogr. Family) preferred_family()
The name itself is unchanged (short form name plus verbose suffix),
but the suppression check has been fixed to really compare the
resulting name with the ID 1 name.
ID 17 (Typogr. Subfamily) preferred_styles()
This is unchanged (long form styles) but the suppression check has been
fixed to really compare the resulting string with ID 2.
CFF.Familyname ps_familyname()
Uses ID 16 now and ID 1 as fallback. Was always ID 1 before, which is
wrong.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Specifying an empty string as prefix unexpectedly does not enable short
family names for all fonts - but for no font at all.
Usually an empty prefix matches all strings (font names).
This makes it hard to enable short families for all fonts no matter
what.
[how]
Fix detection if the prefix is False or a string.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
This just drops the 'windows compatibility' options in association with
the name parser (i.e. --makegroups') as we want to always create fonts
that work on any platform.
Note that the fonts prodused right now are NOT windows compat anymore
and you can not specify the flag. Violating 'git rules' this commit is
not working correctly. But it is easier to do this in smaller steps.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The postscript font name length limit of 31 is only present in very old
post script printers. And even then it depends on the printing method.
Some of our well knows source fonts have longer PS names (Noto etc).
And the limit exists regardless of windows or not.
[how]
Let limit depend on PS name part (font name or family name).
Remove reference to windows compat mode.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Some styles can not take modifiers. We handle the shortening as if they
can. That is not a problem but mighht be unexpected.
Do detect weights we have a fixed list, but that is missing a lot
weights that we would be able to shorten.
The shortening does not work for 'Retina', which is imho a more recent
'invention' (after the paper of the previous commit has been written).
[how]
Separate known weights and make them accessible from other functions.
Use these data tables also for weight detection.
Introduce 'Retina' in the weights table.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We really struggle to keep the font names below the length limits. To
achieve this some styles are abbreviated. The abbreviations have been
taken from Noto and were initially used to mimic Noto's naming scheme.
But a bit shorter names would help in some instances to produce short
enough name entries. Also some styles that are used by fonts other than
Noto are not abbreviated at all.
[how]
In document [1] Adobe gives examples of very short style abbreviations.
We just implement all these.
Example: 'ExtraCondensed' now becomes 'XCn' instead of the more readable
but longer 'ExtCond' that Noto uses.
[1] https://adobe-type-tools.github.io/font-tech-notes/pdfs/5088.FontNames.pdf
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
There are some more name entries that we should rename or remove.
None of the fonts in the src/unpatched-fonts/ has these set; but in
principle a font could have it set and then we would need to handle
that.
[how]
Just remove the entries if they are existing.
Note that we do not handle NameID 25.
Also add some more comments.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
When we rename a font we should always also change the unique ID.
[how]
Take the fullname and the Nerd Font version number. In general we do not
have the version number in the NameParser object; but we have the
'Version' name and we loot the last word (which we have set to the Nerd
Font version already in the patcher) as version descriptor.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Some glyph names in the CSS/cheat-sheet/json database are wrong.
[how]
For the wheather icons: Check against the glyph names in the original
repo's CSS.
For the Octicons: Check against glyph name in the symbolfont.
Did not check all glyphs, just the two reported ones.
Fixes: #1146
Reported-by: page-down
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Somebody might want to have a file where all symbols we add are listed.
At the moment there are only the i_*.sh scripts and the CSS files. Both
are rather unwieldy.
[how]
Just create a json file with all symbol names, like the CSS file.
Fixes: #448
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The last missing powerline-extra glyphs should also be in this set.
The intermediate line's color is not visible in some terminals.
[note]
Also fix that E0CF is shown twice.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
When testing 'Nerd Font' fonts (i.e. symbols may be 2 cells wide),
the output does not take that into account and does not insert
the needed blanks.
[how]
Because the actual width can not be easily determined add a
parameter (just add anything as parameter) to switch some glyphs
to two cell mode. These glyphs are in a list, i.e. hardcoded.
If the widths in non-Mono fonts is ever changed this script needs
to be adapted.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
On MacOS Ventura the unicode codepoints are shown instead of the actual
glyphs.
[how]
On that OS the bash is rather old and does not have the unicode escape
sequence \u. As it is rather hard to convert it to octal UTF8 we instead
embed simply the concrete characters, as done in the i_*.sh scripts.
Note: zsh on that OS does have it, though.
[note]
I'm no Mac expert, just trying to get this working.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The left side wave is also used on the right side.
The right side wave is never shown.
[how]
Well,...
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
In the CI we have only a shallow clone of the repo, so access to tags is
not possible. Instead of resulting in a nice message like '2.3.3-35' we
get an empty string.
[how]
As we have no tags we can only write the commit hash and other
information given in the only existing (i.e. last) commit:
date, author, title
It's a bit more cumbersome but one can still see from which point in the
repo the archive has been created.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
If we create the zip file not only on releases we need some better
version information inside.
We can not use the same approach with real releases, because we add the
tag at a later stage in the workflow.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We print two times the name of the output font, and never the name of
the input font...
[how]
*cough*
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We have an automation for adding glyphs to the original set.
If someone throws in the svg file and adds the glyph to the icons.tsv a
new original-source font is generated.
But the added glyphs are not patched in, because that would need a
change at font-patcher (adjust the end codepoint).
This can be forgotten easily.
[how]
The maximum codepoint of our own (original + seti) set is 0xE6FF. At
0xE700 the Devicons start.
The original-source generation script now checks the offset, they may
not be negative and on the positive end we may not leave our set-range.
If that happens the script fails thus the workflow fails.
Also increate the patch range in font-patcher. If there are no icons to
patch in the symbol font the codepoints are just ignored.
[note]
See also PR #1119
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The heavy angle brackets (276E and 276F) are used for a lot of prompts,
but we do not yet patch them in and a lot of fonts do not bring them
themselves.
[how]
One time rip the glyphs out from Hack and patch them in always, but
careful (do not replace existing glyph).
We take the whole set 276C - 2771.
[note]
Usually we should never again need to run the generate-extraglyphs
script, we rip them out now and they look good. Whatever Hack does with
new versions we can follow but that is optional.
Related: #1110
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The (old) Material Design Icons are to be removed.
We should communicate that on the Cheat Sheet.
[how]
See commit
4452ceee5 Add possibility to add "obsolete" to glyphs
that implements the CSS stuff to display an 'obsolete' marker.
Change the cheat-sheet generatot to actually insert the markers for the
appropriate codepoints. That is, the codepoints are not checked but the
ID.
Fixes: #1096
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Some font previews in the gh-pages are obviously wrong (showing some
fallback font).
[how]
Recreate all image previes from current master branch.
To make this more easy:
- Add commented out code that displays command to install just the
needed fonts but all the needed fonts
- Add commented out code that displays the family names of the needed
fonts - these have to be in sync with the fonts.json database
Fixes: #489
Reported-by: CosmosAtlas
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
It's a pain to have the addition of contributors automated via
all-contributors bot, but then it does not end up on the webpage.
[how]
I'm not sure it will automatically be triggered (pretty sure it will
not), but at least one can clickstart manually the workflow.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The script is not a 'proper' script with shebang.
The CONTRIBUTORS.md format changed.
We want to incorporate this as CI workflow.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
JetBrains Mono is patched without `--makegroups`, although it is
specified in the `config.cfg`.
[how]
As with the licenses the code expects a specific font directory depth.
That is violated with some fonts, for example JetBrains Mono.
The config is never found.
Compare commit
8a749ab21 patch-em-all: Fix missing licenses
Fixes: #1081
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
I'm not sure why it has been in the code like this, and I removed these
strange globs already before in some places [1].
find -name "*.[o,t]tf"
actually allows
*.otf
*.ttf
*.,tf
[how]
Remove spurious comma in all `find` calls.
Systematically.
[note]
Just some commits mentioned here:
2ace3de8e7722458821ac6817bc729e2
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
With commit
6e361d40c cheat-sheet: Allow click to copy on hex value
(on branch gh-pages) we add the possibility to copy the raw hex code by
clicking on the hex number.
It would be more obvious if there is a tooltip.
[how]
Add tooltip via 'title' in cheat-sheet generator script.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The commits needed to be in the master branch, but that is protected, so
we can not force push the commits away after debugging.
Revert "DEBUG: Show directory contents"
Revert "DEBUG: archive-fonts.sh"
Revert "DEBUG: Add more of original workflow"
This reverts commit 40f6990282.
This reverts commit 9e3fdefeba.
This reverts commit 5e8b8c6ed5.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
If the license file is not in the same folder as the font file or its
parent directory it will not be copied.
Example:
├── AUTHORS.txt
├── config.cfg
├── copyall.sh
├── Ligatures
│ ├── Bold
│ │ └── JetBrainsMono-Bold.ttf
│ ├── BoldItalic
│ │ └── JetBrainsMono-BoldItalic.ttf
├── OFL.txt
└── README.md
When processing one font file (.ttf) the OFL.txt is neither in the same
nor in the parent directory (but rather in the parent's parent.
[how]
Collect all license-ish files for a complete font set and copy them all
over each other into all appropriate destinations in patched-fonts.o
Note that in situations like this:
├── fonts.dir
├── fonts.scale
├── L
│ ├── Bold
│ │ └── Meslo LG L Bold for Powerline.ttf
│ ├── config.cfg
│ └── LICENSE.txt
├── LICENSE.txt
└── README.rst
All LICENSE.txt files will be copied, but only the last one will 'win'.
So make sure all license files are identical.
Fixes: #1068
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
For some reason we work with strange paths like "root/a/b/../../c/d/e"
instead of "root/c/d/e".
[how]
Use dirname to go directories up.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
When running with --info on a completely empty patch-destination some
directories are missing and are never created. They would have been
created by the actual patching that is suppressed now.
[how]
Check and create the needed subdirs.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Somehow the license file is missing from the release run.
It is present if I run it on the local machine.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We added a lot of glyphs in Seti + Custom and the new range Material
Design Icons.
[how]
Create new graphics with generator, see README.md.
Use Inkscape to implant into old image.
Note:
In the totals just the new Material Design Icons are included, the old
(obsolete, to be removed) range is not counted at all anymore.
Also did not change the distribution of the diagram. When we would
create a real sankey diagram (with the actual numbers) all the other
sets would be dwarfted by the new Material Design Icons.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The font was always called 3270.
Having a big company's name in the fontname is scary 😬
See
https://github.com/rbanffy/3270font/issues/60
[how]
Add renaming rule.
Fixes: #1012
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Somehow the `IBM 3270 SemiCondensed` font turn out as
`IBM3270Semi Nerd Font Condensed`.
The 3270 font always had the quirk to have a non-standard style with a
dash. We have specific code to circumvent that.
[how]
After updating 3270 the 'Narrow' had been renamed to 'Condensed' and so
our specific patch did not work anymore.
Adapt the regex to find the new style that needs correction.
[note]
https://github.com/ryanoasis/nerd-fonts/issues/1012#issuecomment-1385497230
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Although commit
69e8c0e Add current Material Design Icons
claims that we updated the Cheat Sheet after adding the new Material
Design Icons, that actually did not happen.
[how]
Add new MDI's i_*.sh file to all. That is used by the generate-css that
also generates the cheat sheet web page.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The info-only option broke with the latest changes.
[how]
Set something to the variable that determines the info only mode.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Material Design Icons has grown quite a bit.
[how]
Add the icons at their original position which is in PUA1.
Use the desktop font instead of the webfont.
Add cheat cheat file.
Fixes: #365
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We want to differentiate between the old, problematic Material Design
Icons (problematic because we map them to unicode blocks that we should
not), and a future new and updated set of Material Design Icons.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Sometimes we set an empty string as SubFamily name. That ends up as
'Book' which is unexpected.
[how]
The translation from empty to "Book" is done by Fontforge, at least
with version 20220308.
Make sure we always have a SubFamily, and if we don't that must be a
'Regular'.
[note]
This was only a problem with the old naming engine. --makegroups got
this right always.
Fixes: #1046
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The messages from parallel font-patcher runs can be very confusing, so
it has been disabled some time ago (without a comment in that commit?!).
However, if someone wants to repatch multiple fonts on a local machine
it might be beneficial to run more than one process to have work on all
cores.
[how]
Add option to select multiple processes in parallel.
Limit the amout to 8, which might be a good value for typical end-user
machines with 4 cores and 8 threads.
Patching Cascadia Code (12 fonts) took these times on my machine:
1 job: 21m 55s
4 jobs: 6m 24s
8 jobs: 5m 14s (this runs 8 and then the remaining 4)
16 jobs: 4m 48s (this runs 12 in parallel)
Adding a proper `-j` that takes a numeric argument is rather too much
work for my taste, so we stick with 8 for now.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Running gotta-patch-em-all creates a lot of output that is most likely
not wanted.
[how]
Add --verbose option to gotta-patch-em-all.
Hide debugging information unless it is wanted by specifying this option.
Also change font-patcher to produce less verbose output and respect
--quite in more places.
This includes a change that we try to tweak the font flags only if
source and destination font are ttf or otf, because we can not read the
other raw font files anyhow.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
When working on the font-patcher the developer needs to test the changes
on a number of fonts. This is usually a manual call of `font-patcher`
and afterwards a 'diff' of the newly created font with the 'old' font in
the patched-fonts/ directory with fontforge (which has a font-compare
option).
If you run gotta-patch-em-all normally the newly generated font will
replace the existing font and git will ALWAYS show it as different. The
reason is that at least the timestamp in the generated font has changed.
Far more easy would be if the new gotta-patch-em-all run could keep the
previous timestamps, in that way one can immediately see that the old
and new fonts are bitwise equal (via git).
Furthermore if you expect a change and want to show the differences of
old and new font in fontforge you need both fonts in the filesystem.
But a normal gotta-patch-em-all run replaces the font. A different
destination folder would help here.
[how]
Introduce two new (independent) options to
a) keep the timestamp equal to previous patch run
b) generate the fonts in a different directory
While b) is straight forward, a) is a bit more complicated, esp because
filenames can change and so on. So the script examines just one (1)
random font in the specific font directory and uses its timestamp. In
most cases this is correct enough if the developer uses gotta-patch-em-all
consequently.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
All the fonts will have different timestamps, and within each font the
creation and modification date might also differ. That is quite
confusing and makes automated testing very complicated.
[how]
Use one date-time for ALL fonts and for creation and modification date
in the font file.
But do not change the date-time if we already set that somewhere before :-}
Also remove the 'special' properitary fontforge timestamp tables FFTM from
the patched fonts. This is only possible since FontForge 20th Anniversary
Edition.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Oh boy do I hate the boilerplate code needed with optargs, but without
it every parameter becomes a burden.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
When we want to patch all fonts by calling the script without any
options it fails.
[how]
Give the correct regex to find all directories.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The generated svg's canvas is far too big.
I remember shadowy that one had to resize the canvas manually...
[how]
Switch back from Actions to Verbs, because only there we can resize the
canvas automatically.
Note commit
3444b5755 generate-font-image-previews: Fix and Refactor [skip-ci]
Verbs seem to be still possible. There is currently no Action for the
same thing.
So we revert 3444b5755 to Ryan's original code (in principle) with the
same verbs.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We do not have a preview for the Symbols Only font.
The Symbols Only font appears two times (with 1000 and with 2048 EM).
[how]
Remove one of the occurences of NerdFontSymbolsOnly in the fonts.json.
The font matrix (for CI) still works, and we get only one entry in the
fonts list on the gh-pages.
Change the entry details accordingly.
Create special svg template that includes lots of symbols.
Change the destination filename to be imagePreviewFont instead of the
patchedName + "Nerd Font". The website (gh-pages) expects the former
file names.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
There are two svg tempates, one with and one without Inkscape metadata.
[how]
The metadataless files is fine and opens ok in Inkscape.
There are no real differences between the two templates.
Drop the Inkscape one.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
From the name we used the non-Mono Symbols font for the webfonts. But in
the Cheat Sheet we want to display the icons all in nice boxes, all with
the same size. That is not the case for the non-Mono font, here all
glyphs are unscaled and thus do not match each other.
[how]
Use the Nerd Font Mono variant for the webfont, as the icons here all
have the same size and are surrounded by their bounding box, making
working with them a lot easier.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The webfonts are needed for the cheat sheet. When we update the sheet
code we probably need also new fonts.
The fonts might contain fixes also if there is no need for a new sheet,
so they have to be updated on every release.
[how]
Add mini-script that generates the woff's from the latest 'ttf'.
This makes it easier to check the woffs manually.
Let the workflow create the woffs, and push them to the gh-pages.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Although we automatically create a new up to date i_seti.sh on all
original-source.otf updates, we do not push it to the repo together with
the font.
[note]
Also include up-to-date i_seti.sh because the workflow will not trigger
until we have new icons and the font does actually change.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Normally the release zip files have a flat directory structure, i.e. all
files are in the base directory and there are no subdirs. The existing
subdirectory structure is removed on zip creation via `archive-fonts.sh`.
If the patch results have two fonts with identical name these flat
archives can not be generated. The `archive-fonts.sh` reports:
Could not create archive with the path junked (-j option) - likely
same font names for different paths, zip status: $zipStatus
Retrying with full path
But now the problem is only delayed. When the font file has the name
name the Family and SubFamily are most likely also the same for both
font files. If we install both the user (and the system) can not really
distinguish the font files anymore.
This turned up with [1] when doing a `brew style *nerd-font*` that
complains in fact about duplicate fonts to install. At that point we had
the additional problem that the subdir-path had been missing in the cask
files. So I'm not sure if it would work from a Cask standpoint (i.e.
font files are installed in subdirs).
Anyhow, this will fail when the user wants to select the font files,
because normally this is done on a Family-name basis. And identical file
name usually means identical Family-SubFamily.
Note that this ONLY happens with GohuFont, which has these subdirs:
11/complete
14/complete
uni-11/complete
uni-14/complete
The font has embedded bitmaps, but only one size. The "11" ones have
11px bitmap fonts and the "14" ones 14px bitmaps.
The "uni-" variant has much more glyphs.
Otherwise the differences are slim. From the font creation date the
"uni-" ones are newer.
[how]
Each font filename added to a cask is memorized. When the next fontfile
is to be added to the cask it is checked if we already have that
filename installed. Duplicates are then skipped.
If we have a deep archive, the fonts are added to the cask with full
relative path.
In case of Gohu that means the 11/complete variant is added (because all
files are alphabetically sorted before adding). By chance this is the
same variant that has historically been in the Cask, so no change here.
Fixes:
https://github.com/ryanoasis/nerd-fonts/pull/1008#issuecomment-1351170552https://github.com/Homebrew/homebrew-cask-fonts/pull/6758#issuecomment-1350791208
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
Now we can create the casks of some specific release ('latest' in this
case) at will, based purely on the artifact files and on nothing in the
repo. We do not even need to fetch the repo.
This is still some kind of WIP, because we do not have the secrets and
not even a proper homebrew fork in our organization.
THIS WILL NOT WORK out of the box. Refer to PR #1008 to get instruction
on additional steps needed to make this run.
[note]
Remove cask generation from normal release workflow.
Later on the release workflow has to trigger the cask workflow.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
It does not really make sense to couple the casks, which checksums are
based on the zip files in the archive directory to files currently
existing in the repo. They could be different from the archived ones.
[how]
Use solely the archives. For this they must be unpacked temporarely so
that the fonts can be examined for family names.
We do not try to automatically determine the release tag of the archive
files. They could in principle we different for each. Instead it usually
has to be specified on the command line.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The json file is transported to jq via pipe AND as file.
That is not needed of course.
[how]
Just use the filename.
[note]
Also some whitespace changes.
Also remove debug output.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
It does not really make sense to couple the names of the download files
to some currently existing directories in the repo. They could be
different, especially if current version and requested version differ.
[how]
Complete rewrite. Fetch the release data from Github and examine the
release database.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
It fetches the release we did last, which can be a release candidate.
But we want the latest release, or some other specified one.
[how]
Add parameter for the version tag.
[note]
Also correct some docs.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
ProFontWindows is missing from the cask, just ProFontIIx is included.
According to their documentation ProFontWindows has been created
specifically for MS Windows, but it can also be useful on Linux or
MacOS. [1]
[how]
Make the filter more strict, so that we only filter out our own Windows
versions and not all fonts that contain "Windows" in the name.
[note]
I'm not sure this ProFontWindows font is useful at all ;-}
[1] https://tobiasjung.name/profont/ paragraph "ProFont for Windows"
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The symbols only font has two entries in the fonts.json and that breaks
generation of the cask.
[how]
Do the queries on a 'first wins' strategy; ignore further entries in the
fonts.json.
[note]
I guess we should remove one of the two instances of Symbols Only from
the database; I have still not figured out why there are two distinct
entries.
And why there are two fonts at all 😬
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Sometimes the shortest Family is not a meaningful name, for example
iMWritingDuo
iMWritingDuospace
iMWritingMono
iMWritingQuattro
Obviously the shortest name is not adequate.
[how]
Instead we find the shortest word stem of the name. The common beginning
of all names. In the example above that is `iMWriting`.
If we have such a case we show in the name that there are multiple
families in the cask, by adding "families" to the name.
[note]
Also always capitalize the font name. Some fonts have a
all-small-letters name, but that seems a bit out of place and has been
changed with the manual naming (previously) already to Capitalized Name.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Some fonts have different and not consistent Family names set,
especially (only) if the `--makegroups` option has not been used for
patching.
Example:
$ fc-query --format='%{family}\n' patched-fonts/Hasklig/Black/complete/Hasklug\ Black\ Nerd\ Font\ Complete.otf
Hasklug Nerd Font,Hasklig Black
See also previous commit's message, bottom.
[how]
We want to use only one of the Family names (fc-query reports all as
csv, unless we specify an index), so query one by one.
Check that it is 'our' name (that contains "Nerd") and not a leftover
from uncomplete patching.
[note]
Also whitespace change: One tab to spaces.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The code takes the FamilyName out of the first patched font file and
puts that into the cask name field.
This has two problems:
After we joined Mono and non-Mono fonts into one cask the first font
might be a "Nerd Font Complete Mono" and we certainly do not want that
FamilyName in a cask that also contains the non-Mono variants.
We have some fonts with more than one Family, for example
CaskaydiaCove Nerd Font SemiLight
CaskaydiaCove Nerd Font Light
CaskaydiaCove Nerd Font
CaskaydiaCove Nerd Font ExtraLight
Taking the first encountered Family name is most certainly not want we
want.
[how]
Examine all patched fonts and collect their FamilyName and use the
shortest of them, as that usually is the base stem.
This still fails for somem fonts, like Hasklug
Hasklig Black
Hasklig ExtraLight
Hasklig Light
Hasklig Medium
Hasklig Semibold
Hasklug Nerd Font
But that font's FamilyName is broken anyhow, note that the RFN renaming
does not really work consistently. It would be fixed by using
`font-patcher` with option `--makegroups`, which should become the
default soon.
This will be tackled by the next commit.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We want to replace the existing casks. But they do not have a consistent
way to name the casks. Sometimes blanks are preserved (as dashes):
"unpatchedName": "DejaVu Sans Mono",
"patchedName": "DejaVuSansMono",
"caskName": "dejavu-sans-mono",
The above looks like cask-name == unpatched-name.
Here they introduce blanks out of thin air (the original name does not
have blanks):
"unpatchedName": "DaddyTimeMono",
"patchedName": "DaddyTimeMono",
"caskName": "daddy-time-mono",
Here they add something to the name??!:
"unpatchedName": "Gohu",
"patchedName": "Gohu",
"caskName": "gohufont",
Here the cask-name follows the RFN renaming:
"unpatchedName": "Hasklig",
"patchedName": "Hasklug",
"caskName": "hasklug",
Here they do not follow the RFN renaming:
"unpatchedName": "Liberation",
"patchedName": "LiterationMono",
"caskName": "liberation",
And there are a lot more ... strangenesses.
I guess the casks have been created by different people following
different ideas.
[how]
All these inconsistencies makes setting up rules how to determine the
cask name from the other names very complicated and brittle.
If we want to preserve the existing cask names the simplest and most
stable approach is to explicitely specify them in the fonts.json
database:
Introduce a new data field "caskName", like shown above.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
The existing Casks _all_ contain both the Mono and non-Mono variants.
I believe splitting would be a good idea, but that would break existing
uses.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
People might want to know how the original/unpatched font really is
called. This is done for most current casks.
[how]
Utilize jq and the fonts.json database to retrieve the name (which is
stored nowhere else). Put it in the parens in the name field.
Update some `unpatchedName`s.
[note]
Examples from current casks:
homebrew-cask-fonts/Casks$ find . -name '*nerd-font*' -exec grep " name" {} \; | sort
name "3270 Nerd Font (3270)"
name "Agave Nerd Font (Agave)"
name "Anonymice Nerd Font (Anonymous Pro)"
name "Arimo Nerd Font (Arimo)"
name "AurulentSansMono Nerd Font (Aurulent Sans Mono)"
name "BigBlue_Terminal Nerd Font families (BigBlue Terminal)"
name "BitstreamVeraSansMono Nerd Font (Bitstream Vera Sans Mono)"
name "BlexMono Nerd Font (IBM Plex Mono)"
name "CaskaydiaCove Nerd Font (Caskaydia code)"
name "CodeNewRoman Nerd Font (Code New Roman)"
name "Cousine Nerd Font (Cousine)"
name "DaddyTimeMono Nerd Font (DaddyTimeMono)"
name "DejaVuSansMono Nerd Font (DejaVu Sans Mono)"
name "DroidSansMono Nerd Font (Droid Sans Mono)"
name "FantasqueSansMono Nerd Font (Fantasque Sans Mono)"
name "FiraCode Nerd Font (Fira Code)"
name "FiraMono Nerd Font (Fira)"
name "GohuFont Nerd Font (Gohu)"
name "GoMono Nerd Font (Go)"
name "Hack Nerd Font (Hack)"
name "Hasklug Nerd Font (Hasklig)"
name "HeavyData Nerd Font (Heavy Data)"
name "Hurmit Nerd Font (Hermit)"
name "iMWriting Nerd Font families (iA Writer)"
name "InconsolataGo Nerd Font (Inconsolata Go)"
name "InconsolataLGC Nerd Font (Inconsolata LGC)"
name "Inconsolata Nerd Font (Inconsolata)"
name "Iosevka Nerd Font (Iosevka)"
name "JetBrainsMono Nerd Font (JetBrains Mono)"
name "Lekton Nerd Font (Lekton)"
name "Literation Nerd Font families (Liberation)"
name "MesloLG Nerd Font families (Meslo LG)"
name "Monofur Nerd Font (Monofur)"
name "Monoid Nerd Font (Monoid)"
name "Mononoki Nerd Font (Mononoki)"
name "mplus Nerd Font (M+)"
name "Nerd Font Symbols Template (Symbols Only)"
name "Noto Nerd Font families (Noto)"
name "OpenDyslexic Nerd Font families (OpenDyslexic)"
name "Overpass Nerd Font (Overpass)"
name "ProFont Nerd Font families (ProFont)"
name "ProggyCleanTT Nerd Font families (ProggyCleanTT)"
name "RobotoMono Nerd Font (RobotoMono)"
name "SauceCodePro Nerd Font (Source Code Pro)"
name "ShureTechMono Nerd Font (Share Tech Mono)"
name "SpaceMono Nerd Font (Space Mono)"
name "TerminessTTF Nerd Font (Terminus)"
name "Tinos Nerd Font (Tinos)"
name "UbuntuMono Nerd Font (Ubuntu Mono)"
name "Ubuntu Nerd Font (Ubuntu)"
name "VictorMono Nerd Font (Victor Mono)"
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
* Remove appcast
* Process fonts in alphabetical order
* Skip fonts where no checksum can be determined
* Add livecheck
* Add description
* Fail generation on any error in the script
[notes]
* The code to work without checksum (:no_check) did not work anyhow
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Several different indentations methods used here. That confuses me and I
want to edit this file.
[how]
Unify to '4 blanks' as used in other (recently edited) files.
Unify if-then and while-do syntax.
Also replace single quotes with double quite in the cask file.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Some fonts in the readme source font tables are marked as 'no RFN' while
they infact have a RFN (and we act on that, so that is just a
documentation issue).
[how]
Also add updated fonts.json, that contains RFN information and correct
unpatchedFont names, compare gh-pages commit
4f78d656 download: Fix RFN detection
The updated fonts.json is also needed for an upcoming Casks creation
fix.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
Old (renamed) license files are not cleaned up automatically.
The new files will be put into the patched-fonts dir, but old ones not
removed.
[how]
With commit
afd7ba10 patch-em-all: Purge destination dirs if possible
the script purges old font files from the patched-fonts directory to get
rid of renamed font files. This has been deliberately limited to ttf and
otf files.
But as all license files are automatically copied over we can also
remove them.
This (finally) remove the possibility to manually put any files in those
directories. This can be good or bad.
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
[why]
We have 'license' is the archives, but the 'licence' files are missing.
We allow all-caps and all-lowercase, but not camelcase 'License'.
Sometimes we have OFL.txt which is missing.
[how]
Enable both spellings and also camelcase.
Enable OTF text files.
Also fix misunderstanding of regex vs glob ([] vs {}), where the glob
needs a comma and the regex does not.
Add missing LICENSE files for 2 fonts.
Fixes: #979
Reported-by: Jeremy Thorn <moralground>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>