docs: def add(self, data):
          """
          Add a single character to buffer. If one or more full lines are found,
          print them (if desired) and pass to callback function.
          """
          data = self._decoder.decode(data)
          if not data:
              return
          self._buffer += data
          if "\n" in data:
              to_print, remainder = self._buffer.rsplit("\n")
              if self._print:
                  try:
                      print(to_print)
                  except UnicodeEncodeError:
                      print(to_print.encode(sys.getdefaultencoding(), errors="replace"))
                      if not hasattr(self, "_warned"):
                          logger.warning("output encoding error, characters replaced")
                          setattr(self, "_warned", True)
              if self._callback:
                  self._callback(to_print)
              self._buffer = remainder