code: def feed(self, data):
          
          send = self._send_to_parser
          draw = self.listener.draw
          match_text = self._text_pattern.match
          taking_plain_text = self._taking_plain_text
  
          length = len(data)
          offset = 0
          while offset < length:
              if taking_plain_text:
                  match = match_text(data, offset)
                  if match:
                      start, offset = match.span()
                      draw(data[start:offset])
                  else:
                      taking_plain_text = False
              else:
                  taking_plain_text = send(data[offset:offset + 1])
                  offset += 1
  
          self._taking_plain_text = taking_plain_text
docs: Consume some data and advances the state as necessary.
  
          :param str data: a blob of data to feed from.