diff --git a/Lib/glyphsLib/builder/names.py b/Lib/glyphsLib/builder/names.py index aed5c0379..93d2b6bac 100644 --- a/Lib/glyphsLib/builder/names.py +++ b/Lib/glyphsLib/builder/names.py @@ -36,7 +36,7 @@ def to_ufo_names(self, ufo, master, family_name): styleMapFamilyName, styleMapStyleName = build_stylemap_names( family_name=family_name, style_name=styleName, - is_bold=(styleName == "Bold"), + is_bold=(styleName in ("Bold", "Bold Italic", "Bold Oblique")), is_italic=is_italic, ) ufo.info.styleMapFamilyName = styleMapFamilyName @@ -99,7 +99,7 @@ def _get_linked_style(style_name, is_bold, is_italic): is_regular = False elif part == "Bold" and is_bold: is_bold = False - elif part == "Italic" and is_italic: + elif (part == "Italic" or part == "Oblique") and is_italic: is_italic = False else: linked_style.appendleft(part) diff --git a/Lib/glyphsLib/classes.py b/Lib/glyphsLib/classes.py index ef4a2bd84..5cd002841 100755 --- a/Lib/glyphsLib/classes.py +++ b/Lib/glyphsLib/classes.py @@ -1706,7 +1706,7 @@ def _joinName(self): if self.italicAngle: if names == ["Regular"]: return "Italic" - if "Italic" not in self.customName: + if "Italic" not in self.customName and "Oblique" not in self.customName: names.append("Italic") return " ".join(names) @@ -3311,7 +3311,14 @@ def windowsFamily(self): value = self.customParameters["styleMapFamilyName"] if value: return value - if self.name not in ("Regular", "Bold", "Italic", "Bold Italic"): + if self.name not in ( + "Regular", + "Bold", + "Italic", + "Oblique", + "Bold Italic", + "Bold Oblique", + ): return self.familyName + " " + self.name else: return self.familyName @@ -3322,7 +3329,14 @@ def windowsFamily(self, value): @property def windowsStyle(self): - if self.name in ("Regular", "Bold", "Italic", "Bold Italic"): + if self.name in ( + "Regular", + "Bold", + "Italic", + "Oblique", + "Bold Italic", + "Bold Oblique", + ): return self.name else: return "Regular" @@ -3331,7 +3345,14 @@ def windowsStyle(self): def windowsLinkedToStyle(self): value = self.linkStyle return value - if self.name in ("Regular", "Bold", "Italic", "Bold Italic"): + if self.name in ( + "Regular", + "Bold", + "Italic", + "Oblique", + "Bold Italic", + "Bold Oblique", + ): return self.name else: return "Regular" diff --git a/tests/classes_test.py b/tests/classes_test.py index 22b9492f6..2a2316f2c 100755 --- a/tests/classes_test.py +++ b/tests/classes_test.py @@ -671,6 +671,13 @@ def test_name(self): master.italicAngle = 10.0 self.assertEqual("Italic", master.name) + # Test that bold italic gets properly named. + master = GSFontMaster() + master.weight = "Bold" + master.width = "Regular" + master.italicAngle = 10.0 + self.assertEqual("Bold Italic", master.name) + # Test that we don't get an extra "Italic" in the name of masters # whose customName already contain the string "Italic" master = GSFontMaster() @@ -680,6 +687,15 @@ def test_name(self): master.italicAngle = 10.0 self.assertEqual("Italic", master.name) + # Test that we don't get an extra "Italic" in the name of masters + # whose customName contains the string "Oblique" + master = GSFontMaster() + master.weight = "Regular" + master.width = "Regular" + master.customName = "Oblique" + master.italicAngle = 10.0 + self.assertEqual("Oblique", master.name) + def test_name_assignment(self): test_data = [ # , , ,