docs: def clean_markup(self, markup, parser=None):
          """Apply ``Cleaner`` to markup string or document and return a cleaned string or document."""
          result_type = type(markup)
          if isinstance(markup, six.string_types):
              doc = fromstring(markup, parser=parser)
          else:
              doc = copy.deepcopy(markup)
          self(doc)
          if issubclass(result_type, six.binary_type):
              return tostring(doc, encoding='utf-8')
          elif issubclass(result_type, six.text_type):
              return tostring(doc, encoding='unicode')
          else:
              return doc