search_state.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from .enums import IncrementalSearchDirection
  2. from .filters import to_simple_filter
  3. __all__ = (
  4. 'SearchState',
  5. )
  6. class SearchState(object):
  7. """
  8. A search 'query'.
  9. """
  10. __slots__ = ('text', 'direction', 'ignore_case')
  11. def __init__(self, text='', direction=IncrementalSearchDirection.FORWARD, ignore_case=False):
  12. ignore_case = to_simple_filter(ignore_case)
  13. self.text = text
  14. self.direction = direction
  15. self.ignore_case = ignore_case
  16. def __repr__(self):
  17. return '%s(%r, direction=%r, ignore_case=%r)' % (
  18. self.__class__.__name__, self.text, self.direction, self.ignore_case)
  19. def __invert__(self):
  20. """
  21. Create a new SearchState where backwards becomes forwards and the other
  22. way around.
  23. """
  24. if self.direction == IncrementalSearchDirection.BACKWARD:
  25. direction = IncrementalSearchDirection.FORWARD
  26. else:
  27. direction = IncrementalSearchDirection.BACKWARD
  28. return SearchState(text=self.text, direction=direction, ignore_case=self.ignore_case)