diff --git a/fpdf/drawing.py b/fpdf/drawing.py index c0dcd8aaf..221dd4d1f 100644 --- a/fpdf/drawing.py +++ b/fpdf/drawing.py @@ -271,7 +271,7 @@ def colors255(self): return tuple(255 * v for v in self.colors) def serialize(self) -> str: - return f"{0 if self.g == 0 else self.g} {self.OPERATOR}" + return f"{number_to_str(self.g)} {self.OPERATOR}" __pdoc__["DeviceGray.OPERATOR"] = False diff --git a/fpdf/enums.py b/fpdf/enums.py index 0002669c3..1db0abdf1 100644 --- a/fpdf/enums.py +++ b/fpdf/enums.py @@ -227,6 +227,9 @@ class TextEmphasis(CoerciveIntFlag): style = B | I """ + NONE = 0 + "No emphasis" + B = 1 "Bold" @@ -246,7 +249,7 @@ def style(self): def coerce(cls, value): if isinstance(value, str): if value == "": - return 0 + return cls.NONE if value.upper() == "BOLD": return cls.B if value.upper() == "ITALICS": diff --git a/fpdf/fonts.py b/fpdf/fonts.py index 87379f48e..6d93a796d 100644 --- a/fpdf/fonts.py +++ b/fpdf/fonts.py @@ -51,7 +51,9 @@ class FontFace: "fill_color", ) family: Optional[str] - emphasis: Optional[TextEmphasis] # can be a combination: B | U + emphasis: Optional[TextEmphasis] # None means "no override" + # Whereas "" means "no emphasis" + # This can be a combination: B | U size_pt: Optional[int] # Colors are single number grey scales or (red, green, blue) tuples: color: Optional[Union[DeviceGray, DeviceRGB]] @@ -61,7 +63,7 @@ def __init__( self, family=None, emphasis=None, size_pt=None, color=None, fill_color=None ): self.family = family - self.emphasis = TextEmphasis.coerce(emphasis) if emphasis else None + self.emphasis = None if emphasis is None else TextEmphasis.coerce(emphasis) self.size_pt = size_pt self.color = None if color is None else convert_to_device_color(color) self.fill_color = ( diff --git a/fpdf/fpdf.py b/fpdf/fpdf.py index f1512bef2..35e24b6ba 100644 --- a/fpdf/fpdf.py +++ b/fpdf/fpdf.py @@ -144,7 +144,8 @@ class Image: class TitleStyle(FontFace): def __init__( self, - font_family: Optional[str] = None, + font_family: Optional[str] = None, # None means "no override" + # Whereas "" means "no emphasis" font_style: Optional[str] = None, font_size_pt: Optional[int] = None, color: Union[int, tuple] = None, # grey scale or (red, green, blue), @@ -155,7 +156,7 @@ def __init__( ): super().__init__( font_family, - (font_style or "") + ("U" if underline else ""), + ((font_style or "") + "U") if underline else font_style, font_size_pt, color, ) diff --git a/test/drawing/test_drawing.py b/test/drawing/test_drawing.py index 57d92ba6e..a3155f9a6 100644 --- a/test/drawing/test_drawing.py +++ b/test/drawing/test_drawing.py @@ -148,8 +148,8 @@ def test_device_gray(self): gray = fpdf.drawing.DeviceGray(g=0.5) gray_a = fpdf.drawing.DeviceGray(g=0.5, a=0.75) - assert gray.colors == (0.5,) - assert gray_a.colors == (0.5,) + assert gray.colors == (0.5, 0.5, 0.5) + assert gray_a.colors == (0.5, 0.5, 0.5) with pytest.raises(ValueError): fpdf.drawing.DeviceGray(g=2) diff --git a/test/outline/test_outline.py b/test/outline/test_outline.py index 837c9e8ff..aa07bb535 100644 --- a/test/outline/test_outline.py +++ b/test/outline/test_outline.py @@ -173,9 +173,20 @@ def test_toc_with_font_style_override_bold(tmp_path): # issue-1072 pdf = FPDF() pdf.add_page() pdf.set_font("Helvetica", "B") - pdf.set_section_title_styles(TitleStyle("Helvetica", "", 20, (0, 0, 0))) + pdf.set_section_title_styles( + TitleStyle("Helvetica", font_size_pt=20, color=(0, 0, 0)) + ) + pdf.start_section("foo") + assert_pdf_equal(pdf, HERE / "toc_with_font_style_override_bold1.pdf", tmp_path) + + pdf = FPDF() + pdf.add_page() + pdf.set_font("Helvetica", "B") + pdf.set_section_title_styles( + TitleStyle("Helvetica", font_style="", font_size_pt=20, color=(0, 0, 0)) + ) pdf.start_section("foo") - assert_pdf_equal(pdf, HERE / "toc_with_font_style_override_bold.pdf", tmp_path) + assert_pdf_equal(pdf, HERE / "toc_with_font_style_override_bold2.pdf", tmp_path) def test_toc_with_table(tmp_path): # issue-1079 diff --git a/test/outline/toc_with_font_style_override_bold.pdf b/test/outline/toc_with_font_style_override_bold1.pdf similarity index 62% rename from test/outline/toc_with_font_style_override_bold.pdf rename to test/outline/toc_with_font_style_override_bold1.pdf index a32fbc162..e3fab61ef 100644 Binary files a/test/outline/toc_with_font_style_override_bold.pdf and b/test/outline/toc_with_font_style_override_bold1.pdf differ