1
0
mirror of https://github.com/ryanoasis/nerd-fonts.git synced 2024-12-19 20:12:52 +02:00
Commit Graph

579 Commits

Author SHA1 Message Date
Fini Jastrow
28f5657782 archive-fonts: Unify README handling
[why]
The readmes in the zip and tar.xz archives differ. The zips have only a
very small and generic `readme.md`. The tar.xz have that readme as well as
the `README.md` from the patched-fonts/ directory. This should be the same
for both.

To have two files with names that just differ in case (`readme.md` and
`README.md`) can be problematic on some platforms.

[how]
Combine both readmes into one file - put the generic info in the top of
the readme.

Also include the RELEASE_VERSION if known into the readme. That makes it
more easy to identify which Nerd Font release that archive came from.

RELEASE_VERSION is set in the release workflow.

Fixes: #1284

Reported-by: Jan Klass <kissaki@posteo.de>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-15 12:00:52 +02:00
Fini Jastrow
c173f661a0 docker: Transport return code to outside
Fixes: #1316

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-11 22:34:10 +02:00
Fini Jastrow
c0d9a22d5f Add InconsolataGo programmingfonts link
Fixes: #1313

Reported-by: Koen Lageveen <braver>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-06 10:53:16 +02:00
Fini Jastrow
be013e5987 Add GohuFont programmingfonts link
Thanks to Koen Lageveen <braver>

Fixes: #1312

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-05 12:14:25 +02:00
Finii
ef6fe05754 [ci] Bump release version 2023-06-04 20:32:30 +00:00
Fini Jastrow
5eebd95456 fetch-archives: Allow to specify a regex
[why]
Now where we have zip and tar.xz archives one might want to just fetch
one specific one. So we need to have a pattern not only for the
beginning of the file name.

[how]
Enable full regexes for the filtering.
For this we need to escape blanks in the pattern/regex, that a user
might specify (./fetch-archive.sh v2.2.2 'Some Font').

[note]
This is already then used for the casks workflow, as that only needs the
zips.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 20:44:08 +02:00
Fini Jastrow
a11fa2db53 archive-fonts: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 19:06:04 +02:00
Fini Jastrow
a519cfe3a1 i_all: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:04 +02:00
Fini Jastrow
ed4028aaaa optimize-original-source: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
248508e1d6 version-bump: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
3454239496 tests.sh: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
a621ded9e3 test-powerlines: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
9be8e86a2d standardize-readmes: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
a10a77bc40 gotta-patch-em: Fix various ShellCheck issues
[note]
$powerline has been removed already with commit
  96cd985b5  Drop counting variations stuff and unify readme creation

$last_current_dir has never been functional

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
fc1f816dc5 generate-sample-set: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
ad56629f40 generate-font-image-previews: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
06ba2a8a28 generate-css: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
7290f0208f casks: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
8f60f64617 fetch-archives: Fix various ShellCheck issues
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 16:58:03 +02:00
Fini Jastrow
f6f80995a1 archive-fonts: Create tar.xz packs
See #1233

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 13:09:59 +02:00
Fini Jastrow
c4a3e0249e archive-fonts: Make PWD independent
[why]
Scripts should run regardless of current working directory.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 13:09:59 +02:00
Fini Jastrow
6b49625585 archive-fonts: Whitespace
No functional change except working in sorted order.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-02 13:09:59 +02:00
Fini Jastrow
f81c702165 test-fonts: Correct MDI range
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-01 08:06:29 +02:00
Fini Jastrow
d3d302fb69 test-fonts: Drop "all" range
[why]
The "all" range just prints again all the ranges that we previously
already printed (?!!).

As we can not select individual sets this does not make much sense.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-01 08:06:29 +02:00
Fini Jastrow
6bb3b23d88 test-fonts: Fix missing codepoints and allow MacOS
[why]
If a set has multiple ranges defined only the last of that ranges is
actually printed.

[how]
With commit
  7a4b5f872  Fixes build errors (ShellCheck)

a false positive of spellcheck lead to a 'correction' in the code that
actually broke it. The mapfile does not accumulate the sequences but
fills it in and so just the last sequence 'survives'.

Dropping mapfile also enables this script on MacOS, as that ancient
bash does not have mapfile.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-01 07:54:21 +02:00
Fini Jastrow
6f1cdb82d9 test-fonts: Allow for 5 digit codes
[why]
The code is hardcoded for 4 (hex-)digit codepoints. If we want to
examine 3 or 5 digit codes it breaks the formatting.

[how]
Switch from \u to \U to allow printing codepoints with more than 4
digits. This works on all machines I tested (Linux/Mac).

Manually pad the codepoint to get a consistent length independent of
actual number of digits. We can not use "%5x" because we want to
underline only the actual digits.
This also makes the output of empty slots nicer because the underline is
skipped if there is no code.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-06-01 07:37:35 +02:00
hasecilu
dcbcef0fe6
Update test-fonts.sh version.
- 1.1.0 version.
- Add example command to change column size.
2023-05-31 13:41:19 -06:00
hasecilu
bf4fc58b8b
Update style of for loop, from using seq to C style. 2023-05-31 11:37:06 -06:00
hasecilu
e72d7ba5e7
Update range of font logos 2023-05-31 10:57:37 -06:00
hasecilu
a260711d46
Use single square bracket on if statement. 2023-05-30 23:48:38 -06:00
hasecilu
75960ab56d
Use first arguments as wrapping value.
- Resistant to bad inputs.
- First checks if argument is a number and then checks if its greater than 2, if it's, the `wrapAt` variable is updated.
2023-05-30 23:45:53 -06:00
hasecilu
89dc2f8de7
Rename unused dummy variable 'i' to '_'.
- According to https://www.shellcheck.net/wiki/SC2034 : "For throwaway variables, consider using _ as a dummy".
2023-05-30 20:49:19 -06:00
hasecilu
7ccf229c37
Attend SC2071 error code.
- See: https://www.shellcheck.net/wiki/SC2071
2023-05-30 20:41:20 -06:00
hasecilu
6f7f9e92be
Update wrapAt value to 16.
- Since the format of the values used are normally hexadecimal seems a reasonably election.
2023-05-30 20:36:31 -06:00
hasecilu
283cedb2d4
Update line decoration variables.
- Each variable was splitted in 3 variables containing the start block, middle block and end block respectively.
- Now the wrapAt variable controls programatically the length of the decorations lines, (for loop).
- Minimal wrapAt allowed value is 3.
2023-05-30 20:34:09 -06:00
Fini Jastrow
1b7711564a generate-css: Adapt text
[why]
PR #1252 and this ran slightly out of sync.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-30 19:41:34 +02:00
rszyma
df64f73f2a modify generate-css.sh for changes in #1252 2023-05-30 19:41:34 +02:00
Fini Jastrow
930eef239c name-parser: Fix some Blex fonts
[why]
IBM Plex uses some abbreviations also in the fullname and we do not try
abbreviations when resolving weights.

[how]
As this is the only font that has such specials we handle it beforehand
and do not try all combinations of abbreviated and long keywords.

And then their abbreviations are also not standard - at least not used
by us or Adobe, etc.

For such a small amount of affected font files it seems in order to
specifically just fix them instead of a general solution.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
f5e648b873 IBM Plex: Fix "Text" weight
[why]
The 'Text' weight of Plex is handled as 'other', means that this is
added to the font's name and is a distrinct own family.

But in the original font it is used as weight.

[how]
Remove special handling of 'text' in the font name.
Add 'Text' to known_weights list.

"Text" is not a standard naming, but I see no problems when we handle it
as one. This keeps the family relationships in Blex like Plex.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
2e9caea9cd name-parser: Simplify for CodeClimate
[why]
Function get_name_token has a Cognitive Complexity of 12 (exceeds 9 allowed).
Consider refactoring.

[how]
Remove not really needed special case.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
07a23bda90 name-parser: Allow dashes between modifier and weight
[why]
Some fonts might have a non-standard (i.e. broken) weight naming scheme:
They put a blank or a dash between the modifier and the weight, for
example "Extra Bold" or "Demi-Condensed", when they mean "ExtraBold"
resp "DemiCondensed".

The former happens with CartographCF, the later with IBM3270.

[how]
Automatically allow a dash between modifier and weight, which comes up
as CamelCase boundary. Insert an optional dash (r'-?') into such
boundaries.
For the further lookup we need to remove the dash in the found keyword,
if there is any, to get back to standard naming.

This might break if the font name ends in a modifier. So we can not
really distinguish

       Font Name Extra Bold Italic
    => Font Name - ExtraBold Italic
    => Font Name Extra - Bold Italic

The known modifiers are 'Demi', 'Ultra', 'Semi', 'Extra'.

It is possible but unlikely that a font name ends in one of these.
For example "Modern Ultra - Bold".

[note]
The question arises if we should not parse the PSname instead of the
Fullname; and stick to the dash there as boundary.
The problem might be prepatched fonts with broken naming, that would be
parsed completely wrong then. So maybe the current approach is still the
best, with the caveat given above (fontnames ending in a modifier).

[note 2]
Funny enough the variable allow_regex_token was not used at all :->
Some leftover? Anyhow we use it now.

[note 3]
We can still not remove the special handling for IBM3270, because the
font initially looks like a PSname and this is parsed as such, which
breaks the name in the incorrect place:

        PSname template  = "Name-StylesWeights"
        Fullname of 3270 = "IBM 3270 Semi-Condensed"

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
f1c2eea937 name-parser: Fix unify_style_names()
[why]
The code is obviously wrong. No effect has been seen, though.

First we check if a certain string is a key in the dict.
If it is, we retrieve the value with the string lower-cased as key.

This does not make sense.

[how]
All the keys are lower case anyhow, so the code seems unneeded. Maybe it
is a leftover. The styles that go into it _and are in the dict_ all come
from a regex-enabled search and thus are lower-cased.

Whatever, to have the correct code we use the lower-cased string for
both, checking for existance and retrieving the value - this is the only
sane approach.
Also change to dict.get() method instead of a self made if code.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
b0e5a35477 name-parser: Remove filename parsing code
[why]
Patching CartographCF-Bold.ttf creates this naming:

    Family (ID 1)      : CartographF Nerd Font Condensed
    SubFamily (ID 2)   : Bold
    Fullname (ID 4)    : CartographF Nerd Font Condensed Bold
    PSN (ID 6)         : CartographFNF-CondensedBold
    PrefFamily (ID 16) : CartographF Nerd Font
    PrefStyles (ID 17) : Condensed Bold

    CartographF Nerd Font Condensed Bold
    \===> 'CartographFNerdFont-CondensedBold.ttf'

[how]
The font-patcher historically used the file name of the to-be-patched
font to come up with the new name. When the FontnameParser has been
developed that mechanics has been copied at least for fallback. The
earliest tests compared old and new naming with all the filenames.

Later, when the FontnameParser has been used to really apply name
changes it has always based the parsing on the Fullname or the PSname,
because they really hold the information (or at least should hold);
while the filename might be completely random.

Still code the dealt with specific problems in FILEnames prevailed. The
Ubuntu font for example has a file name like 'Ubuntu-C.ttf', and we
needed to convert the C to Condensed.

As that requirement vanished we can drop all the code that has been
added specifically only for parsing the Ubuntu font filenames.

Side note: USUALLY font filenames should be roughly equal to the PSname.

Fixes: #1258

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-26 13:01:58 +02:00
Fini Jastrow
438843d57a FontnameParser: Fix fsSelection for --has-no-italic
[why]
For fonts that have no Italic but an Oblique - i.e. when Oblique shall
replace the Italic role in RIBBI font grouping (classic group of 4) -
that grouping fails.

This affects DejaVu on Putty.

[how]
For RIBBI grouping only the classic bits are considered. That means that
for fonts that have Oblique instead of Italic (and not additionally) we
need to set the ITALIC bit and the OBLIQUE bit. This has been
overlooked.

Cite from the specs:

> This bit, unlike the ITALIC bit (bit 0), is not related to style-linking
> in applications that assume a four-member font-family model comprised
> of regular, italic, bold and bold italic. It may be set or unset
> independently of the ITALIC bit. In most cases, if OBLIQUE is set, then
> ITALIC will also be set, though this is not required.

[note]
Also increase font-patcher version.

Fixes: #1249

Reported-by: Huifeng Shen <liaoya@gmail.com>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-22 13:32:11 +02:00
Fini Jastrow
fe9a2d70f3 casks: Add zap stanza comment
[why]
Casks without zap stanza are flagged; all casks should contain them.

The font casks do not really need zap.

[how]
What is the right way to say 'we considered zap, but do not need it'?

It seems that other people add a comment (the same comment).
For example here:
https://github.com/Homebrew/homebrew-cask/pull/119090

And that seems rather widespread.

        git/homebrew-cask/Casks$ git grep '# No zap stanza required' | wc -l
        101

Include the same in our casks.

[note]
https://github.com/Homebrew/homebrew-cask/issues/88469

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-13 12:53:15 +02:00
Fini Jastrow
d812d153ab Start release v3.0.1
Edit ./package.json
Run version-bump.sh 3.0.1

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-13 07:49:58 +02:00
Fini Jastrow
f17700946c Add script to create sample set
[why]
After changing something in the patch process it is unclear if all the
prepatched fonts will look ok later. It would be nice to produce one
font from each input font (and not the complete set of each of the faces
of that font) to have some hopefully representative example how symbols will
blend into the font.

[how]
Add a script with explicit list of representative fonts.
Evaluate the config.cfg and execute one patcher run.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-12 13:21:20 +02:00
Fini Jastrow
41521254f1 gotta-patch-em: Fix wrong config setting
[why]
The config.cfg settings can be wrong if the to-be-patched font does not
set its own. The previous settings are never cleared, so that the flags
leak into the next font(s).

This is only relevant when the run is not parallel (i.e. no -j given) and
all fonts are patched sequentially in the same shell.
On parallel runs (like the release process) this is not a problem
because each patcher runs in its own subshell.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-12 13:21:20 +02:00
Finii
8fd192e77c [ci] Rebuild original-source font 2023-05-11 18:04:07 +02:00
Fini Jastrow
781206aaba generate-original-source: Increase icon size
[why]
The Seti and Custom icons are smaller than in ancient Nerd Font versions
and can seem a bit flimsy. In fact we add about 25% of padding (12% left
and 12% right) to each icon, which seems a bit generous.

This does not show in Nerd Font Mono fonts, because the icons will be
rescaled there, but in the other fonts.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-11 18:04:07 +02:00
Fini
7e2326b86c
Merge pull request #1222 from negset/master [skip ci]
Fix the REGULAR bit of the fsSelection being set incorrectly
2023-05-10 13:00:53 +02:00
Fini Jastrow
9f54f24738 Octicons: Create missing file-symlink-directory (2/2)
Just run ./generate.

Compare commit
  7764e05  Create new octicons.ttf (update to v18.3.0) (2/2)

Fixes: 1213

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-10 12:49:17 +02:00
negset
9f6f89ae41 name-parser: Fix REGULAR bit of fsSelection
Set bit 6 (REGULAR) of fsSelection only when bit 0 (ITALIC), bit 5 (BOLD), and bit 9 (OBLIQUE) are clear.
2023-05-10 16:50:50 +09:00
Fini Jastrow
09c83150ae Add Iosevka Term Slab
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-07 12:41:24 +02:00
Fini Jastrow
80664a90fe font-patcher: Do not log to file always
[why]
Maybe it is not a good idea to always create the log file, as most
people will never look into it. The main reason for it was the
gotta-patch-em script so that one can check after lots of runs what the
details were.

[how]
Introduce parameter to --debug option.
0 = no debug output
1 = log to file only (previously always selected)
2 = log to stdout only
3 = log to file and stdout (previous default for --debug)

Just specifying --default equals now --debug 2.
The gotta-patch-em runs now with --debug 1.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-06 10:54:05 +02:00
Fini Jastrow
46168d53d0 cheat-sheet: Add hint for webfont.css
Compare commit
  7d265161f  Make Symbols-Only webfonts available stand alone

Suggestion via Gitter by @Mikle-Bond

Suggested-by: Michael <Mikle_Bond@mail.ru>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-04 12:42:14 +02:00
Fini Jastrow
1f70d5bc3a generate-css: Create cheat sheet with removed icons
With v3.0.0 we removed some icons and some codepoints have been reused
for a different (expanding) set. We want to show the old (removed) icons
correctly and the new ones also, so we need the old and the new font for
the webpage and reference it accordingly.

For the a new style .nfold (read: nd-olf) is introduced and utilized.

See pairing commit in the gh-pages branch:
    Date:   Thu May 4 06:01:33 2023 +0200
    Update cheat sheet WITH removed icons

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-04 12:42:14 +02:00
Fini Jastrow
d9f7dbe238 Prepatched fonts: Revive some ligature removal
[why]
Some sourcefonts, even that are monospaced, have a `fi` and/or `fl`
ligature that maps into one cell. That looks very strange.

[how]
Partially revert commit
  148b0c445  Sunset ligature removal

for the cases that have a one-cell `fi`, `fl`, etc ligature, or a `ldot`
related ligature - that is active by default. Discretionary ligatures or
Stylistic Sets are not changed.

Do the removal on all patched fonts for consistency, not just `Nerd Font Mono`.

[note]
On Noto different subtables are needed for Sans, Serif and Sans-Mono. We
can not set up different configs for each, so all are tried in all fonts
and might fail (this is normal).
Same holds for OpenDyslexic Alta, Regular, Mono, Bold...

Fixes: #1187

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-02 17:23:11 +02:00
Fini Jastrow
bf3506a8d5 Add some ProgrammingFonts.org links
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-01 15:16:06 +02:00
Fini Jastrow
c62fb7a831 Update Sankey diagram
[why]
Octicons got expanded.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-01 15:02:53 +02:00
Fini Jastrow
4f46bdfada generate-casks: Fix for nameing changes
[why]
No casks are created.

We have no "Complete" in the path anymore.
And there is no Windows Compatible.

[how]
Drop all the now-unneeded filtering.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-05-01 11:10:01 +02:00
Fini Jastrow
6a24da8602 gotta-patch-em: Remove debug code leftover
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 23:33:51 +02:00
Fini Jastrow
9b3677b7f2 archive-fonts: Fail if something is amiss
[why]
If we do not have a license file an error will be output, but the
complete script will continue and return success.

[how]
Set mode to exit on error.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 21:00:46 +02:00
Fini Jastrow
1c8420c807 standardize: Fix missing READMEs
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 20:58:42 +02:00
Fini Jastrow
0b201ce547 gotta-patch-em: Fix missing READMEs
[why]
When running without -j the README.md files are not created.

[how]
Allow scripts to be run with any PWD.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 15:41:59 +02:00
Fini Jastrow
5fad4e7270 gotta-patch-em: Fix too much purging
[why]
The destination has been purged too often, thus loosing already newly
patched fonts.

[how]
Always quote variables in shell tests :->

Fixes: 1182

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 15:41:59 +02:00
Fini Jastrow
a63cb3b329 Switch from ComicMono to ComicShannsMono
[why]
The Bold font is bad?
The repo is not maintained?

[how]
The ComicShannsMono is not monospaced ... fix it.
It has Overlapping contours ... fix it.

Create a useful BOLD face.

This was originally PR #1004

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 15:41:59 +02:00
Fini Jastrow
40cf00c58a ComicMono: Add some more metadata
This was originally PR #1004

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-30 12:16:25 +02:00
Fini Jastrow
d1d73b20e3 Add missing steps to dummy "release" script
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-28 18:30:06 +02:00
Fini Jastrow
af96dbaf28 Fix webfont generator
After all the renames.
Keep the webfont filename the same as before because ppl might use it
directly.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-28 18:30:06 +02:00
Fini Jastrow
8b3257d676 Fix font preview script
[why]
After the massive renaming this needs some adaption.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-28 18:30:06 +02:00
Fini Jastrow
354eca5e77 On check-font runs, place docu in correct tree
[why]
When we run gotta-patch-em with -c the font files and the licenses will
end up in check-fonts/ and not in patched_fonts/.

Since gotta-patch-em calls standardize to add the readmes, the readmes
will always end up in patched_fonts/, even on check runs.

[how]
Add option to standardize, that transports the destrination tree root.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-28 18:30:06 +02:00
Fini Jastrow
36f8d762a6 Drop "complete/" subdirs
[why]
Since we do not have any other variations anymore it does not make sense
to keep that directory. The renaming with 3.0.0 is a good point in time
to drop it as the filename scheme changes anyhow.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-28 18:30:05 +02:00
Fini Jastrow
334238d030 Start release v3.0.0
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 21:57:22 +02:00
Fini Jastrow
f4ca28cd71 Stabilize sorting in fontconfig and casks
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 21:39:49 +02:00
Fini Jastrow
9c8a91342c Fix: Drop counting variations stuff [skip ci]
[why]
We have no license files in the patched-fonts dir.
Sometimes we have no README.md either.

[how]
Well, fix code for extradeep directory structures.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 21:01:42 +02:00
Fini Jastrow
8cd3ae0c80 Fix: Rename Bitstream Vera
[why]
The intend was to drop 'Sans Mono' in the renaming process, because the
name is just too long.

ERROR: VeraMono-Italic.ttf ====-< Shortening too long PS family name: BitstromWeraSansM Nerd Font Mono -> BitstromWeraSansM Nerd Font Mon
ERROR: VeraMono-Italic.ttf ====-< Family (ID 1)      too long (32 > 31): BitstromWeraSansM Nerd Font Mono

[how]
Include the whole name in the replacement pattern.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 20:35:36 +02:00
Fini Jastrow
4642ab095c Rename Bitstream Vera (due to RFN)
[why]
The license of Bitstream Vera requires patched fonts to contain neither
"Bitstream" nor "Vera" in the name. It explicitly requires that also
for fonts that (only) add some glyphs.

Yes, we are rather late to notice this :-( Sorry.

[how]
Rename Bitstream Vera to BitstromWera, and also drop the Sans Mono part
of the name. The new name looks and sounds similar enough to get the
reference, while being shorter and somewhat logical.

Fixes: #1173

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 18:59:32 +02:00
Fini Jastrow
96cd985b58 Drop counting variations stuff and unify readme creation
[why]
The variation lists are very long and noone will ever look at them.
Instead we have a font-info.md file, for what reasons?

[how]
Replace the function the font-info.md file had with README.md.

Drop all the variation lists.

Automatically call the readme creation in the gotta-patch-em instead of
just hinting that one should call that (standardize-and-complete-readmes.sh).
2023-04-27 10:30:48 +02:00
Fini Jastrow
529532d897 standardize: Retab with ts=2
[why]
The file is a mix auf indentation via two blanks and single tabs.
Tabs usually render as 8 positions.
Also it is strange to not-stick to one indent style.

[how]
<vi>:
:set ts=2
:set et
:retab
:wq

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-27 10:22:29 +02:00
Fini Jastrow
850b8b422f standardize: Use fonts.json as RFN info source
[why]
When creating the readmes the config.cfg are checked for details on a
possible RFN renaming. There are specific variables that need to be
filled in these cases: config_rfn and config_rfn_substitue.

The same RFN information is already stored in the fonts.json database.
Having the information stored in two locations is always problematic and
can easily lead to inconsistencies.

[how]
Remove information from config.cfg file and use data stored in
fonts.json instead.

Drop config.cfg files that are empty afterwards.

Also fix some patchedName in fonts.json en passant.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-25 17:03:05 +02:00
Fini Jastrow
4be86d4d60 Fix standardize-and-complete-readmes
[why]
A lot of fonts have a wrong RFN statement and name substitude in their
created info file, for example IBM3270:

```
--- a/patched-fonts/3270/Condensed/font-info.md
+++ b/patched-fonts/3270/Condensed/font-info.md
@@ -1,6 +1,20 @@
 # 3270

+## Why `Anonymice Pro` and not `Anonymous Pro`?
+
+What's in a name? The reason for the name change is to comply with the SIL Ope
```

[how]
The rfn information is stored in the config.cfg files - i.e. variables.
They are reset if the next font does not have a config.cfg file; but
they are not reset if the next font DOES have a config.cfg file but does
not set anything.

Reset the values before reading the config.cfg file.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-25 10:31:43 +02:00
Fini Jastrow
f56f97d4e1 Remove Hack postprocessing
[why]
The special Hack postprocessing does this:
 * Add a dummy signature
 * Set fsType to zero
 * run ttfautohint on the font

There once has been reason to do this (probably), but on currently
supported fontforges this is not needed anymore.

 * Fonts run fine without the signature
 * fsType is anyhow zero, set by fontforge
 * the preexisting hinting is kept by fontforge
   (furthermore: We do not want hints for the symbols usually)

Double-checked source and patched font with ttx, instructions (hints)
are definitively existing and equal in the patched font.

So we do not need any of this special postprocessing anymore.

See also commit
  e9d84b6c0  Adds WIP scripts and logic for post processing patched fonts (WIP for fixing #70)

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-25 09:39:03 +02:00
Fini Jastrow
7764e05764 Create new octicons.ttf (update to v18.3.0) (2/2)
This commit does the actual update of the octicons.ttf font file.
The script to update is 'generate'. It uses the mapping file from the
previous commit to create a new compatible font.

Some icons have meanwhile been dropped. We use their codepoints for new
icons.

Also fix a little bug in the GlyphInfo writer.

Following the output of the actual script run.

$ ./generate                                                                                                                                                                                                                                        feature/update-octicons ● 1 … 5 ⚑ 5 

Reading mapping file
Found 172 entries
Fetching octicons archive "v18.3.0.tar.gz"

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  550k    0  550k    0     0   504k      0 --:--:--  0:00:01 --:--:--  919k

Unpacking octicons archive
Found 576 svgs
Found 309 icons after de-duplicating

Renamed cloud-download -> download
Renamed cloud-upload -> upload
Renamed clippy -> paste
Renamed mail-read -> read
Renamed primitive-dot -> dot-fill
Renamed primitive-square -> square-fill
Renamed settings -> sliders
Renamed dashboard -> meter
Renamed trashcan -> trash
Renamed paintcan -> paintbrush

Missing octoface
Missing keyboard
Missing gist
Missing file-text
Missing file-pdf
Missing jersey
Missing radio-tower
Missing repo-force-push
Missing mail-reply
Missing arrow-small-right
Missing gist-secret
Missing no-newline
Missing arrow-small-up
Missing arrow-small-down
Missing arrow-small-left
Missing file-symlink-directory
Missing circuit-board
Missing watch
Missing text-size
Missing ellipses
Missing plus-small

Found 151 (of 172, missing 21) and new 158
Filled in missing, remaining new 137
Appended remaining new, total new mapping 309
Generating octicons.ttf with 309 glyphs
Generating GlyphInfo i_oct.sh
Finished

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-24 21:32:13 +02:00
Fini Jastrow
a96006a681 font-patcher: Add option to allow italic-less fonts with oblique
[why]
Because we do not know if a complete family of fonts has an italic face
we must always assume it does. To get clean RIBBI families in ID1/2 we
create a different family for the oblique slant.
But that is not needed if the font does not have an italic slant, but
just an oblique one (like Bitstream Vera and descendants).

[how]
Add new command line option for font-patcher that specifies if the
family of fonts should be patched under the assumption that there might
be an italic face (default), or if we are sure there is none (and we can
leave oblique in the RIBBI group).

This is then applied to the config.cfg files.

Note that this does not take into account any other of the known_slants.
But they are not encountered in any of our prepatched fonts.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-24 19:52:27 +02:00
Fini Jastrow
f603633536 name-parser: Fix Oblique handling
[why]
Oblique is not detected correctly anymore.

[how]
With commit
  ae656bad8 name-parser: Further formalize style handling

'Oblique' has been taken out of the direct 'known_names' which has been
replaced by a more detailed list of known name parts. It ended up in
known_slopes.

But known_sloped is not taken into consideration as 'weight' when parsing
the font name - no it ends up in 'rest'.

This has been obviously overlooked.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-24 19:52:27 +02:00
Fini
20e7a8e390
Merge pull request #1028 from ryanoasis/feature/reorganize-naming
Pull 'Mono' to front in names and other naming changes
2023-04-24 18:42:33 +02:00
Fini Jastrow
2af746a135 name-parser: Do not shorten PS-name more than PS-family-name
[why]
It's not nessecary to shorten the PSname so much when no shortening is
in place otherwise. This has been thought of as a good idea, because
noone really cares about the PSname and we can avoid any problems. But
checking with the current set of sourcefonts and using the current
shortening options, keeping it longer is never a problem.

It would be a problem for the Fullname ID4 before, and so we always
shorten more.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-24 13:01:27 +02:00
Fini Jastrow
a044611194 Remove name_parser_test scripts
[why]
The systematic evaluation of all fonts is finished and we do not need
any comparison with the old naming anymore.

This can partially replaced by something like

NERDFONTS='--debug --dry --makegroups 1' ./gotta-patch-em-all-font-patcher\!.sh -cv /iA-Writer | grep '==='

[note]
Also update query_names helper to what I used recently with length
indicators.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-23 13:44:14 +02:00
Fini Jastrow
4921e59554 Drop iA Writer Duospace
[why]
We have both
 iA Writer Duospace
 iA Writer Duo S

These are the same fonts, Duospace is just the former name of Duo S.

Duospace is version 1.005
Duo S (and Mono and Quattro) is version 2.000

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 19:55:57 +02:00
Fini Jastrow
921fadaad9 name-parser: Unify name related error message format
[why]
It is hard to grep for all naming related errors, because there is no
common format.

[how]
Make them also visually similar and error cases easily spotted.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 19:55:57 +02:00
Fini Jastrow
b9a4b2ebbd gotta-patch-em: Add Nerd Font Propo
[why]
After skipping the creation of 'Windows Compatible' fonts we have room
to finally add 'Nerd Font Propo' to the release patch sets as first
class citizen.

[note]
Also add undocumented feature that environment variable $NERDFONTS can be
used to supply additional or differing options (last option wins).

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 19:55:57 +02:00
Fini Jastrow
7c62c71267 font-patcher: Drop "Windows Compatible"
[why]
The fonts generated with --makegroups work on all platforms, so there is
no need for options --windows and --also-windows anymore.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 19:55:57 +02:00
Fini Jastrow
0ffb095ffe name-parser: Add more renaming rules
[why]
Some fonts have so long base names that we can not, even very
abbreviated as 'NF', add the Nerd Font designator anymore.

In this case we need to rename the font even if it has no RFN just to
make it shorter.

[note]
As '(TTF)' is dropped now from Terminus we do not need to handle it
specifically anymore.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 19:55:57 +02:00
Fini Jastrow
fd7773c092 Update Anonymous Pro
[why]
We use a prepatched font not the original Anonymous Pro.
The prepatched font contains no bitmaps and is thus like
Anonymous Pro Minus. Also some font internals that fontforge does not
copy out of the box are differing.

And we miss the Bold and Italic variants.

[how]
Crossgrade to original Anonymous Pro as source and add the missing
weight/style.

Add Anonymous to SIL.
Handle 'Pro' naming parts (do not detect 'r' as short for 'Regular').

[note]
Maybe related: #1174

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-21 13:07:50 +02:00
Fini Jastrow
848ed2500a name-parser: Fix SIL replacements
[why]
If the font name is changed in a way where it now ends in a blank (for
example because 'Name Momo' got 'Momo' dropped: 'Name '), that blank is
not removed immediately.
Well, it is later on, but anyhow.
This can only happen on malformed SIL entries. But we want to have a
correct replacement anyhow.

[how]
Remove trailing whitespace after replacements.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-20 15:52:19 +02:00
Fini Jastrow
1da85df08b font-parser: Fix CodeClimate workaround
[why]
CodeClimate does not allow 'complicated' functions. In a previous commit
we added more if-s to a function that afterwards was rejected by
CodeClimate. To fix that the if-s have been replaced with arithmetic.

That is
a) less readable than if-s
b) has a bug

[how]
Change the code back to if-s but put them into yet another function.
Hopefully we do not blow up CodeClimate's maximum number of functions
per file limit now...

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-20 12:09:50 +02:00
Fini Jastrow
83bd265b32 name-parser: Fix BigBlueTerminal 437 shortening
[why]
The shortened name is not as expected "BigBlueTerminal437 Nerd Font"
but some obscure "c7 Nerd Font".

[how]
The backreference marker `\1` is directly in front of the string `437`
which yields the replacement `\1437`. Python is not smart enough to
correctly handle that (but 'sed' for example is).

Instead use a named backreference which does not clash with the
following digits.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-19 18:47:24 +02:00
Fini Jastrow
0265034054 name-parser: Tweak mild name shortening
[why]
When we have a weight/width that can take a modifier, and a modifier is
present we always take the shortest form of the weight/width.

This is not how it is customarily done.

Experienced:
  ExtraCondensed ExtraBold -> ExtCd ExtBd
Expected:
  ExtraCondensed ExtraBold -> ExtCond ExtBd

[how]
In case a modifier is present:
Use the shortest form for weights.
Use the longer short form for widths.

[note]
Also circumvent CodeClimate issue by replacing if-s with formulas.
And adding one nonsense entry to the data tables, because they were
too 'similar' :rolleyes:

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-19 18:19:54 +02:00
Fini Jastrow
9be4835c29 font-patcher: Introduce less severe family name shortening
[why]
We want to keep "Nerd Font" in the font name if possible and instead
shorten the weight part with accepted abbreviations. But these abbrevs
are hard to read and sometimes a more mild abbreviating might be
sufficient to get the desired name length.

[how]
Introduce a new shortening method for the weight parts of a family name.
It takes a longer word (often un-shortened) when a weight stands on its
own, but when a modifier is used together with the weight the more
aggressive two-letter abbreviations are used.

That new shortening method becomes the default and all the functions get
a new parameter to enforce completely aggressive shortening, i.e. always
use the shortest possible form.

The new way to shorten is exposed all the way out to the font-patcher
user who can select the shortening method as parameter to the
--makegroups option. That option is undocumented because I expect some
changes later on, still.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-19 15:57:50 +02:00
Fini Jastrow
725df33434 name-parser: Allow generic renaming parts
[why]
Some name parts occur in several fonts but they take too much length
that we need to add 'Nerd Font' to the font name.

This can be handled as 'generic' SIL table parts, but the algorithm
stops searching for replacements one it has found one.

[how]
Always evaluate all rules of the SIL table.

Add entries for generics to the SIL table.
Add rule for BigBlueTerminal (437TT).
Also fix rule for MPlus that underwent a naming change with its update.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-15 21:14:00 +02:00
Fini Jastrow
909a54ab5a name-parser: Shorten 'Oblique' to 'Obl'
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
22e7056a35 name-parser: Check font name lengths
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
40f2f74e87 font-patcher: Use Python logging module
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
0558b14525 CI: Fix codeclimate issues
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
807da1dcdf gotta-patch-em: Enable new naming for all fonts
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
b40995275e name-parser: Rename parameters
[why]
The variables' names are not really fitting (anymore).

[how]
No functional change.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-15 20:57:08 +02:00
Fini Jastrow
4394824977 name-parser: Change naming behavior
[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>
2023-04-15 20:57:08 +02:00
Fini Jastrow
f99e108273 name-parser: Fix enable_short_families() with empty prefix
[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>
2023-04-15 20:57:07 +02:00
Fini Jastrow
037ab03f16 name-parser: Drop special handling for 'Windows Compatible'
[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>
2023-04-15 20:57:07 +02:00
Fini Jastrow
619214c9ee name-parser: Make PS length limit more lenient
[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>
2023-04-15 20:57:07 +02:00
Fini Jastrow
ae656bad83 name-parser: Further formalize style handling
[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>
2023-04-15 20:57:07 +02:00
Fini Jastrow
81e2e1f988 name-parser: Generalize and shorten style-shortening
[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>
2023-04-15 20:57:07 +02:00
Fini Jastrow
68405398bc name-parser: Remove more names
[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>
2023-04-14 08:01:12 +02:00
Fini Jastrow
784bd422d6 name-parser: Set UniqueID
[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>
2023-04-14 08:01:12 +02:00
Fini Jastrow
44ffebcaa3 name-parser: Add Extended to known styles
[why]
This is missing, for example for
  iosevka-extendedextralightoblique

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-14 08:01:12 +02:00
Sebastian Ullrich
046bdc3ef2 Add run comment 2023-04-12 18:20:57 +02:00
Fini Jastrow
6c5e64d4f6 IosevkaTerm: Prepare gh-pages for change
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-04-05 16:04:36 +02:00
Fini Jastrow
83b3d02d41 generate-css: Add codepoint to glyphnames.json
[why]
Just having the characters themselves as data for the name is convenient
in some cases; but sometimes the codepoint is also nice. And it
certainly improves the human interaction / check of the file.

[how]
Include the character and the codepoint in the glyph-name data. This is
a breaking change. But given that the json file is rather new I believe
we can get away with it.

Sorry for the inconvenience for all the early adaptors that already use
the old/previous format. But now we are more future proof and can add
even more data without breaking old json code.

Related:
https://github.com/ryanoasis/nerd-fonts/issues/1140
https://github.com/kovidgoyal/kitty/issues/2972
https://github.com/chrisbra/unicode.vim/issues/39
https://github.com/ryanoasis/nerd-fonts/issues/448
https://github.com/nvim-tree/nvim-web-devicons/issues/192

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-03-12 21:17:08 +01:00
Fini Jastrow
7e2d38b55a Fix some glyph names
[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>
2023-03-12 20:47:49 +01:00
Fini Jastrow
ff57585e51 font-patcher: Add box drawing glyphs
Fixes: #1108

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-03-10 12:32:05 +01:00
Fini Jastrow
368ba3444b generate-css: Create a json database with css names
[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>
2023-03-02 12:44:21 +01:00
Fini Jastrow
cbec0064b5 test-powerlines: Add more glyphs and colorize
[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>
2023-02-18 17:09:35 +01:00
Fini Jastrow
c899778ad4 test-powerline: Allow for 2 cell wide glyphs
[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>
2023-02-18 10:20:38 +01:00
Fini Jastrow
23502d630e test-powerline: Enable use with old bash
[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>
2023-02-18 09:58:34 +01:00
Fini Jastrow
4d74a51f12 test-powerline: Fix wrong wave glyph
[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>
2023-02-18 09:57:08 +01:00
Fini Jastrow
afa6abe0d9 archive-font-patcher: Write commit hash instead of tags in readme
[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>
2023-02-17 11:44:13 +01:00
Fini Jastrow
31cae9d07d archive-font-patcher: Include version in readme
[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>
2023-02-17 09:56:31 +01:00
Fini Jastrow
40d82b0a0a generate-extraglyphs: Correct output
[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>
2023-02-14 10:11:24 +01:00
Fini Jastrow
869d6f9351 Allow for growing original icon set
[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>
2023-02-13 12:19:52 +01:00
Fini Jastrow
59c5cb5a1f font-patcher: Patch in heavy angle brackets
[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>
2023-02-10 16:41:00 +01:00
Fini Jastrow
cdd64ae8a1 Remove old script duplicate
[why]
query_monospace is newer.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-02-01 17:53:12 +01:00
Fini Jastrow
660aa80013 Mark old MDI as obsolete on cheat sheet
[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>
2023-02-01 13:49:32 +01:00
Fini Jastrow
72b9ec663b Fix font previews
[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>
2023-01-30 08:29:04 +01:00
Fini Jastrow
7d79a489eb CI: Create CI for contributors update
[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>
2023-01-27 15:34:25 +01:00
Fini Jastrow
1ed2faccfa Rewrite update-contributors
[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>
2023-01-27 15:19:20 +01:00
Fini Jastrow
c21a590f1a patch-em-all: Fix ignored config.cfg
[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>
2023-01-26 20:12:06 +01:00
Fini Jastrow
10f43c7b95 Fix various otf/ttf globs
[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:
  2ace3de8
  e7722458
  821ac681
  7bc729e2

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-26 09:36:27 +01:00
Fini Jastrow
643cf84240 cheat-sheet: Add tooltip to copy hex code
[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>
2023-01-25 20:13:32 +01:00
Finii
ab3f4f0585 [ci] Bump release version 2023-01-24 15:56:06 +00:00
Fini Jastrow
28dd7f2679 Revert "DEBUG: "commits
[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>
2023-01-24 13:49:32 +01:00
Fini Jastrow
8a749ab210 patch-em-all: Fix missing licenses
[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>
2023-01-24 13:42:09 +01:00
Fini Jastrow
00752430e3 gotta-patch-em-all: Rename repo-root-dir variable
[why]
The name `parent_dir` is a bit misleading and not precise.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-24 13:38:46 +01:00
Fini Jastrow
d9a2f1ad28 gotta-patch-em-all: Simplify pathnames
[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>
2023-01-24 13:38:46 +01:00
Fini Jastrow
1bada00ed6 gotta-patch-em-all: Allow initial -i runs
[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>
2023-01-24 13:38:46 +01:00
Fini Jastrow
5e8b8c6ed5 DEBUG: archive-fonts.sh
[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>
2023-01-24 00:16:09 +01:00
Finii
62842ec851 [ci] Bump release version 2023-01-23 14:41:11 +00:00
Fini Jastrow
337a2a2759 Update sankey diagram
[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>
2023-01-23 12:40:10 +01:00
Fini Jastrow
50a1893171 Correct i_xxx.sh
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-19 08:32:00 +01:00
Finii
1cc7631da3 [ci] Bump release version 2023-01-17 19:02:09 +00:00
Finii
e3051ccfa6 [ci] Rebuild original-source font 2023-01-17 17:05:27 +01:00
Fini Jastrow
e5d835080e Drop 'IBM' from 3270's names
[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>
2023-01-17 15:44:20 +01:00
Fini Jastrow
b52f0a7cb1 Fix 3270 naming
[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>
2023-01-17 15:31:59 +01:00
Fini Jastrow
fec587385a Update mononoki to 1.5
Mononoki is now a RFN; but under conditions mentioned in [1]
we can use that name for the patched font.

[1] https://github.com/ryanoasis/nerd-fonts/issues/575#issuecomment-1385308049

Fixes: #575

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-17 13:28:27 +01:00
Fini Jastrow
e6c01bc5fb Fix Cheat Sheet for new MDI [skip ci]
[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>
2023-01-16 23:48:35 +01:00
Fini Jastrow
f922619734 gotta-patch-em-all: Drop explicit combinations list
[why]
The list is very long and has very little meaning.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-15 21:37:37 +01:00
Fini Jastrow
be04d53d85 gotta-patch-em-all: Fix --info
[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>
2023-01-15 21:22:14 +01:00
Fini Jastrow
69e8c0e033 Add current Material Design Icons
[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>
2023-01-13 12:59:53 +01:00
Fini Jastrow
7cb227c7e0 Rename "Material Design" to "Material Design Legacy"
[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>
2023-01-13 12:59:53 +01:00
Fini Jastrow
5ec943aa13 Update generate-glyph-info-from-set to Python 3
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-13 12:59:53 +01:00
Zach DeCook
91ae09a203 material design icons: Update documentation 2023-01-13 12:59:53 +01:00
Fini Jastrow
6f0b1fbf4f doc: Better document how the Cheat Sheet is generated [skip ci]
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-13 12:07:50 +01:00
Finii
4c76918895 [ci] Rebuild original-source font 2023-01-13 10:47:20 +00:00
Fini Jastrow
e97e7959d6 font-patcher: Fix unexpected 'Book' SubFamily
[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>
2023-01-13 08:41:47 +01:00
Fini Jastrow
8d78b63764 gotta-patch-em-all: Fix --help option
[why]
Somehow the option is mentioned but not implemented.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-01-12 16:33:37 +01:00
Fini Jastrow
129e114ddf gotta-patch-em-all: Reactivate parallel processing
[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>
2023-01-06 08:32:48 +01:00
Fini Jastrow
257d6882fa Make output less verbose (with option)
[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>
2023-01-06 08:32:48 +01:00
Fini Jastrow
3c4fa008c1 gotta-patch-em-all: Add options to simplify patcher testing
[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>
2023-01-06 08:32:48 +01:00
Fini Jastrow
40ded7c2f0 gotta-patch-em-all: Create all fonts with unified release timestamp
[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>
2023-01-06 08:32:48 +01:00
Fini Jastrow
a577d7261a gotta-patch-em-all: Switch to proper parameter handling
[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>
2023-01-05 20:02:18 +01:00
Fini Jastrow
f448eba396 gotta-patch-em-all: Fix unfiltered (all) patch run
[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>
2023-01-05 20:02:18 +01:00
Fini Jastrow
0e434c2b9a generate-font-image-previews: Fit svg canvas to drawing [skip ci]
[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>
2022-12-19 21:19:29 +01:00
Fini Jastrow
2597b4ef3f generate-font-image-previews: Generate Symbols Only preview
[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>
2022-12-19 21:09:29 +01:00
Fini Jastrow
7aa717a05e generate-font-image-previews: Cleanup
[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>
2022-12-19 17:07:20 +01:00
Fini Jastrow
3b1329aefb CI: Fix: Automatically deploy webfonts [skip ci]
[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>
2022-12-16 19:08:53 +01:00
Fini Jastrow
aef01c4f4f CI: Automatically deploy webfonts [skip ci]
[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>
2022-12-16 17:14:30 +01:00
Fini Jastrow
4fba05a738 CI: Keep i_seti.sh in sync with autogenerated font
[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>
2022-12-16 12:23:16 +01:00
Fini Jastrow
3b93c99637 casks: Fix cask generation for 'deep' archives [skip ci]
[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-1351170552
https://github.com/Homebrew/homebrew-cask-fonts/pull/6758#issuecomment-1350791208

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 18:49:32 +01:00
Fini Jastrow
4a9282743a casks: Correct some variables to local
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 16:30:02 +01:00
Fini Jastrow
762be5b638 CI: Add new workflow to create all casks [skip-ci]
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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
1cbe7a1813 generate-casks: Decouple from patched-fonts dir
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
c5cb976db8 generate-casks: Simplify jq call
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
a1c9300076 fetch-archives: Decouple from patched-fonts dir
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
44629bf663 fetch-archives: Add option to specify release tag
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
2c7c1f53f5 casks: Fix ProFont
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
a4500e21a8 fonts.json: Correct Meslo name
[why]
It is in fact Meslo LG that we consume and produce.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 09:45:59 +01:00
Fini Jastrow
d5d35456e9 casks: Fix naming of Symbols Only font
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
5cda467ce3 casks: Improve cask names
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
dd75219729 Add script to download release artifacts
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 09:45:59 +01:00
Fini Jastrow
9da563c54a casks: Finalizing touches
Add some more documentation / comments.
Increase version number.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 09:45:59 +01:00
Fini Jastrow
5978ee385f casks: Find correct FamilyName if font has multiple families
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
d6975ea99b casks: Find correct FamilyName base stem
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
c8cb5c78a7 casks: Hardcode cask names in fonts.json
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
0d21cade68 casks: Create unified Casks, with Mono and non-Mono
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
7acade38e1 casks: Add unpatched fontname in cask description
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
659fe757c5 casks: Prettify output
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-12-14 09:45:59 +01:00
Fini Jastrow
48e5201c66 casks: Modernize
* 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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
bafbb372c3 casks: Clean up whitespace
[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>
2022-12-14 09:45:59 +01:00
Fini Jastrow
31f09b9a77 doc: Fix RFN entries in readme [skip ci]
[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>
2022-11-26 12:57:03 +01:00
Fini Jastrow
3d8d673cb5 patch-em-all: Purge old license files
[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>
2022-10-24 14:15:03 +02:00