From 3d7aa9298c5d37ce5445e03b92325981a2be7893 Mon Sep 17 00:00:00 2001 From: Fini Jastrow Date: Sun, 31 Mar 2024 01:36:00 +0100 Subject: [PATCH] name-parser: Sort Widths before Weights [why] Usually we want the width before the weight: ZedMono Nerd Font Extended ExtraBold Italic but we get: ZedMono Nerd Font ExtraBold Extended Italic The reason is that we do not sort widths and weights and handle them as one list, keeping the original order. All fonts but Zed have the width before the weight and it never turned up [how] Handle widths and weights on their own and only afterwards concattenate width (first) to weights (second). Signed-off-by: Fini Jastrow --- bin/scripts/name_parser/FontnameTools.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/scripts/name_parser/FontnameTools.py b/bin/scripts/name_parser/FontnameTools.py index e8544b4cf..0f5e12e4b 100644 --- a/bin/scripts/name_parser/FontnameTools.py +++ b/bin/scripts/name_parser/FontnameTools.py @@ -393,8 +393,12 @@ class FontnameTools: # Weights end up as Typographic Family parts ('after the dash') # Styles end up as Family parts (for classic grouping of four) # Others also end up in Typographic Family ('before the dash') + widths = [ m + s + for s in list(FontnameTools.known_widths) + for m in list(FontnameTools.known_modifiers) + [''] + ] weights = [ m + s - for s in list(FontnameTools.known_weights2) + list(FontnameTools.known_widths) + for s in list(FontnameTools.known_weights2) for m in list(FontnameTools.known_modifiers) + [''] if m != s ] + list(FontnameTools.known_weights1) + list(FontnameTools.known_slopes) weights = [ w for w in weights if w not in FontnameTools.known_styles ] @@ -408,9 +412,11 @@ class FontnameTools: r'(?:uni-)?1[14]', # GohuFont uni ] + ( style, width_token ) = FontnameTools.get_name_token(style, widths) ( style, weight_token ) = FontnameTools.get_name_token(style, weights) ( style, style_token ) = FontnameTools.get_name_token(style, FontnameTools.known_styles) ( style, other_token ) = FontnameTools.get_name_token(style, other) + weight_token = width_token + weight_token while 'Regular' in style_token and len(style_token) > 1: # Correct situation where "Regular" and something else is given style_token.remove('Regular')