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

39 Commits

Author SHA1 Message Date
Fini Jastrow
f2862d4475 Fix CodeClimate Fix
[why]
When we add a dummy we need to remove that later on.

Originally that has been introduces to avoid a wrong code duplication
warning.

See how the blank leaks into the name:

ERROR: ====-< Family (ID 1)      too long (38 > 31): ZedMono Nerd Font Extended ExtraBold
DEBUG: =====> SubFamily (ID 2)   ok       ( 6 <=31): Italic
DEBUG: =====> Fullname (ID 4)    ok       (45 <=63): ZedMono Nerd Font Extended ExtraBold   Italic
DEBUG: =====> PSN (ID 6)         ok       (33 <=63): ZedMonoNF-ExtendedExtraBoldItalic
DEBUG: =====> PrefFamily (ID 16) ok       (17 <=31): ZedMono Nerd Font
DEBUG: =====> PrefStyles (ID 17) ok       (27 <=31): Extended ExtraBold   Italic
DEBUG: =====> PrefStyles (ID 17) ok       (27 <=31): Extended ExtraBold   Italic
DEBUG: =====> Filename 'ZedMonoNerdFont-ExtendedExtraBoldItalic.ttf'

(Note trailing blanks even in ID 1.)

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2024-04-02 15:51:52 +02:00
Fini Jastrow
4af1693cb6 Add Recursive Mono
'for Code' variants.

Rename RecMonoSemicausal to RecMonoSemi to avoid too long font names
after we add 'Nerd Font Mono' )or even (NFM) to it.

Fixes: #845

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2024-03-31 00:26:34 +01:00
Fini Jastrow
b0b4c34524 Monaspace: Fix naming
[why]
When shortening the rare gases names to the element symbol
Radon is named 'Rd' while it should be 'Rn'.
Atomic number 86 on the periodic table.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-21 11:55:54 +01:00
Fini
5d999cd571
Merge pull request #1405 from julien-blanchon/add-github-monaspace
Add Githubnext Monaspace
2023-11-19 22:07:42 +01:00
Fini Jastrow
c56530c874 Finalize replacement name of Monaspace
After the working draft name Monispace the final patched font name will
be Monaspice.

* It keeps the characteristic `Mona` in the beginning
* It changes just one character
* The replacement is still a real word
* The replacements sounds very similar

Also other very good names have been suggested, thank you all for the
input!

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-19 22:06:56 +01:00
Fini Jastrow
72c335de1a Update M PLUS
They renamed
    M Plus Code Latin          -> M Plus Code Latin50
    M Plus Code Latin Expanded -> M Plus Code Latin60

The versioning is rather divers, add more information into the font
specific README file.

Fixes: #1333

Reported-by: LeoniePhiline
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-11 15:44:36 +01:00
Fini Jastrow
447fbc2669 Monaspace: Follow RFN rule (WIP)
[why]
Monaspace has an RFN that individually protects 'Monaspace' and all the
face names of noble gases 'Xenon' etc. Both must not be used on patched
fonts.

[how]
Just add the rule(s). The concrete naming is not decided yet.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-11-10 20:46:02 +01:00
Fini Jastrow
01569cad8e name_parser: Fix weight_string_to_number()
[why]
Some PS weights have a dash in the weight, like 'Extra-Light' in
Iosevka. The parser can not parse it because it expects 'ExtraLight'.

[how]
Filter out all '-' and ' ' from the PS weight string before actually
parsing the string.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-10-07 13:02:20 +02:00
Fini Jastrow
809101da32 font-patcher: Improve weight checking
[why]
When the font does not have a PSweight string the font-patcher bugs.

[how]
Rewrite the code to be more robust against unexpected weight values.
Also make detected problems non-fatal.

Reported-by: František Hanzlík <frantisek_hanzlik@protonmail.com>
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-10-07 13:02:20 +02:00
Fini Jastrow
2ce56141db name-parser: Unify quotes used for strings
[why]
We use single quotes everywhere else.
Keep this consistent.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-09-27 05:46:33 +02:00
Fini Jastrow
99688c40c7 font-patcher: Introduce weight check
[why]
Windows seems to construct the font names including the PS weight.
We have some sourcefonts that are broken (i.e. have in fact different
weights but have the same PS weight and/or OS2 weight.

That raises problems with the fonts on Windows.

[how]
Check and compare all weight metadata (except CID) and issue a warning
if they differ too much. That might fail with unusual weight names,
though.

See Issue #1333 and PR #1358.

Reported-by: LeoniePhiline
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-09-27 05:46:33 +02:00
Fini Jastrow
d3181df01f name-parser: Add IntelOne replacement to SIL table
Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-26 15:02:27 +02:00
Fini Jastrow
bac7332702 name-parser: Sort SIL table
No functional change

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2023-07-26 15:02:27 +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
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
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
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
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
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
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
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
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
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
080a86e966 name-parser: Fix Python2 compatibility
[why]
The naming has bizarre blanks strewn in sometimes,
or is all caps. For example
`C a s k a y d i a   C o v e` or
`CASKAYDIACOVE-Regular`

[how]
When run under Python2 all strings are unicode strings because
`unicode_literals` is imported by `font-patcher`.
Unfortunately the code checks for type str; but that will all become
type unicode with the import.

One check is suboptimal anyhow and can be dropped, while the other is
turned around.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-08-22 10:53:05 +02:00
Fini Jastrow
6d86114a38 Draft: Introduce a file name parser
DO NOT MERGE

[why]
A lot of the fonts have incorrect naming after patching. A completely
different approach can help to come up with a consistent naming scheme.

[how]
See bin/scripts/name-parser/README.md

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-08-22 10:53:05 +02:00