range_line.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:xterm/src/core/buffer/cell_offset.dart';
  2. import 'package:xterm/src/core/buffer/range.dart';
  3. import 'package:xterm/src/core/buffer/segment.dart';
  4. class BufferRangeLine extends BufferRange {
  5. BufferRangeLine(super.begin, super.end);
  6. BufferRangeLine.collapsed(CellOffset begin) : super.collapsed(begin);
  7. @override
  8. BufferRangeLine get normalized {
  9. return isNormalized ? this : BufferRangeLine(end, begin);
  10. }
  11. @override
  12. Iterable<BufferSegment> toSegments() sync* {
  13. final self = normalized;
  14. for (var i = self.begin.y; i <= self.end.y; i++) {
  15. var startX = i == self.begin.y ? self.begin.x : null;
  16. var endX = i == self.end.y ? self.end.x : null;
  17. yield BufferSegment(this, i, startX, endX);
  18. }
  19. }
  20. @override
  21. bool contains(CellOffset position) {
  22. final self = normalized;
  23. return self.begin.isBeforeOrSame(position) &&
  24. self.end.isAfterOrSame(position);
  25. }
  26. @override
  27. BufferRangeLine merge(BufferRange range) {
  28. final self = normalized;
  29. final begin = self.begin.isBefore(range.begin) ? self.begin : range.begin;
  30. final end = self.end.isAfter(range.end) ? self.end : range.end;
  31. return BufferRangeLine(begin, end);
  32. }
  33. @override
  34. BufferRangeLine extend(CellOffset position) {
  35. final self = normalized;
  36. final begin = self.begin.isAfter(position) ? position : self.begin;
  37. final end = self.end.isBefore(position) ? position : self.end;
  38. return BufferRangeLine(begin, end);
  39. }
  40. @override
  41. operator ==(Object other) {
  42. if (identical(this, other)) {
  43. return true;
  44. }
  45. if (other is! BufferRangeLine) {
  46. return false;
  47. }
  48. return begin == other.begin && end == other.end;
  49. }
  50. @override
  51. int get hashCode => begin.hashCode ^ end.hashCode;
  52. @override
  53. String toString() => 'Line Range($begin, $end)';
  54. }