diff --git a/src/escpos/escpos.py b/src/escpos/escpos.py index 2f2d70a..eebd0d9 100644 --- a/src/escpos/escpos.py +++ b/src/escpos/escpos.py @@ -862,19 +862,19 @@ class Escpos(object): def set( self, - align: Optional[str] = "left", - font: Optional[str] = "a", - bold: Optional[bool] = False, - underline: Optional[int] = 0, - width: Optional[int] = 1, - height: Optional[int] = 1, - density: Optional[int] = 9, - invert: Optional[bool] = False, - smooth: Optional[bool] = False, - flip: Optional[bool] = False, - double_width: Optional[bool] = False, - double_height: Optional[bool] = False, - custom_size: Optional[bool] = False, + align: Optional[str] = None, + font: Optional[str] = None, + bold: Optional[bool] = None, + underline: Optional[int] = None, + width: Optional[int] = None, + height: Optional[int] = None, + density: Optional[int] = None, + invert: Optional[bool] = None, + smooth: Optional[bool] = None, + flip: bool = None, + double_width: Optional[bool] = None, + double_height: Optional[bool] = None, + custom_size: Optional[bool] = None, ) -> None: """Set text properties by sending them to the printer. @@ -915,7 +915,7 @@ class Escpos(object): :type height: int :type density: int """ - if custom_size: + if custom_size is not None and custom_size: if ( isinstance(width, int) and isinstance(height, int) @@ -926,7 +926,7 @@ class Escpos(object): self._raw(TXT_SIZE + six.int2byte(size_byte)) else: raise SetVariableError() - else: + elif custom_size is not None: self._raw(TXT_NORMAL) if double_width and double_height: self._raw(TXT_STYLE["size"]["2x"]) @@ -936,20 +936,92 @@ class Escpos(object): self._raw(TXT_STYLE["size"]["2h"]) else: self._raw(TXT_STYLE["size"]["normal"]) + else: + pass - self._raw(TXT_STYLE["flip"][flip]) - self._raw(TXT_STYLE["smooth"][smooth]) - self._raw(TXT_STYLE["bold"][bold]) - self._raw(TXT_STYLE["underline"][underline]) - self._raw(SET_FONT(six.int2byte(self.profile.get_font(font)))) - self._raw(TXT_STYLE["align"][align]) + if flip is not None: + self._raw(TXT_STYLE["flip"][flip]) + if smooth is not None: + self._raw(TXT_STYLE["smooth"][smooth]) + if bold is not None: + self._raw(TXT_STYLE["bold"][bold]) + if underline is not None: + self._raw(TXT_STYLE["underline"][underline]) + if font is not None: + self._raw(SET_FONT(six.int2byte(self.profile.get_font(font)))) + if align is not None: + self._raw(TXT_STYLE["align"][align]) - if density != 9: + if density is not None and density != 9: self._raw(TXT_STYLE["density"][density]) if invert is not None: self._raw(TXT_STYLE["invert"][invert]) + def set_with_default( + self, + align: Optional[str] = "left", + font: Optional[str] = "a", + bold: Optional[bool] = False, + underline: Optional[int] = 0, + width: Optional[int] = 1, + height: Optional[int] = 1, + density: Optional[int] = 9, + invert: Optional[bool] = False, + smooth: bool = False, + flip: bool = False, + double_width: Optional[bool] = False, + double_height: Optional[bool] = False, + custom_size: Optional[bool] = False, + ) -> None: + """Set default text properties by sending them to the printer. + + This function has the behavior of the `set()`-method from before + version 3. + If a parameter to this method is not supplied, a default value + will be sent. + Otherwise this method forwards the values to the + :py:meth:`escpos.Escpos.set()`. + + :param align: horizontal position for text, possible values are: + + * 'center' + * 'left' + * 'right' + + *default*: 'left' + + :param font: font given as an index, a name, or one of the + special values 'a' or 'b', referring to fonts 0 and 1. + :param bold: text in bold, *default*: False + :param underline: underline mode for text, decimal range 0-2, *default*: 0 + :param double_height: doubles the height of the text + :param double_width: doubles the width of the text + :param custom_size: uses custom size specified by width and height + parameters. Cannot be used with double_width or double_height. + :param width: text width multiplier when custom_size is used, decimal range 1-8, *default*: 1 + :param height: text height multiplier when custom_size is used, decimal range 1-8, *default*: 1 + :param density: print density, value from 0-8, if something else is supplied the density remains unchanged + :param invert: True enables white on black printing, *default*: False + :param smooth: True enables text smoothing. Effective on 4x4 size text and larger, *default*: False + :param flip: True enables upside-down printing, *default*: False + """ + self.set( + align=align, + font=font, + bold=bold, + underline=underline, + width=width, + height=height, + density=density, + invert=invert, + smooth=smooth, + flip=flip, + double_width=double_width, + double_height=double_height, + custom_size=custom_size, + ) + def line_spacing(self, spacing: Optional[int] = None, divisor: int = 180) -> None: """Set line character spacing. diff --git a/test/test_function_set.py b/test/test_function_set.py index 3eff375..7929876 100644 --- a/test/test_function_set.py +++ b/test/test_function_set.py @@ -8,7 +8,7 @@ from escpos.constants import SET_FONT, TXT_NORMAL, TXT_SIZE, TXT_STYLE def test_default_values(): instance = printer.Dummy() - instance.set() + instance.set_with_default() expected_sequence = ( TXT_NORMAL, @@ -30,7 +30,7 @@ def test_default_values(): def test_set_size_2h(): instance = printer.Dummy() - instance.set(double_height=True) + instance.set_with_default(double_height=True) expected_sequence = ( TXT_NORMAL, @@ -49,7 +49,7 @@ def test_set_size_2h(): def test_set_size_2w(): instance = printer.Dummy() - instance.set(double_width=True) + instance.set_with_default(double_width=True) expected_sequence = ( TXT_NORMAL, @@ -68,7 +68,7 @@ def test_set_size_2w(): def test_set_size_2x(): instance = printer.Dummy() - instance.set(double_height=True, double_width=True) + instance.set_with_default(double_height=True, double_width=True) expected_sequence = ( TXT_NORMAL, @@ -87,7 +87,7 @@ def test_set_size_2x(): def test_set_size_custom(): instance = printer.Dummy() - instance.set(custom_size=True, width=8, height=7) + instance.set_with_default(custom_size=True, width=8, height=7) expected_sequence = ( TXT_SIZE, # Custom text size, no normal reset @@ -109,7 +109,7 @@ def test_set_size_custom(): def test_set_flip(): instance = printer.Dummy() - instance.set(flip=True) + instance.set_with_default(flip=True) expected_sequence = ( TXT_NORMAL, @@ -131,7 +131,7 @@ def test_set_flip(): def test_smooth(): instance = printer.Dummy() - instance.set(smooth=True) + instance.set_with_default(smooth=True) expected_sequence = ( TXT_NORMAL, @@ -153,7 +153,7 @@ def test_smooth(): def test_set_bold(): instance = printer.Dummy() - instance.set(bold=True) + instance.set_with_default(bold=True) expected_sequence = ( TXT_NORMAL, @@ -172,7 +172,7 @@ def test_set_bold(): def test_set_underline(): instance = printer.Dummy() - instance.set(underline=1) + instance.set_with_default(underline=1) expected_sequence = ( TXT_NORMAL, @@ -191,7 +191,7 @@ def test_set_underline(): def test_set_underline2(): instance = printer.Dummy() - instance.set(underline=2) + instance.set_with_default(underline=2) expected_sequence = ( TXT_NORMAL, @@ -213,7 +213,7 @@ def test_set_underline2(): def test_align_center(): instance = printer.Dummy() - instance.set(align="center") + instance.set_with_default(align="center") expected_sequence = ( TXT_NORMAL, @@ -232,7 +232,7 @@ def test_align_center(): def test_align_right(): instance = printer.Dummy() - instance.set(align="right") + instance.set_with_default(align="right") expected_sequence = ( TXT_NORMAL, @@ -255,7 +255,7 @@ def test_align_right(): def test_densities(): for density in range(8): instance = printer.Dummy() - instance.set(density=density) + instance.set_with_default(density=density) expected_sequence = ( TXT_NORMAL, @@ -278,7 +278,7 @@ def test_densities(): def test_invert(): instance = printer.Dummy() - instance.set(invert=True) + instance.set_with_default(invert=True) expected_sequence = ( TXT_NORMAL,